telegraf/plugins/inputs/mongodb/mongodb_data.go

117 lines
2.9 KiB
Go
Raw Normal View History

2015-07-07 01:20:11 +00:00
package mongodb
import (
"fmt"
"reflect"
"strconv"
"github.com/influxdata/telegraf"
2015-07-07 01:20:11 +00:00
)
type MongodbData struct {
StatLine *StatLine
2015-12-19 20:31:22 +00:00
Fields map[string]interface{}
2015-07-07 01:20:11 +00:00
Tags map[string]string
}
func NewMongodbData(statLine *StatLine, tags map[string]string) *MongodbData {
if statLine.NodeType != "" && statLine.NodeType != "UNK" {
tags["state"] = statLine.NodeType
}
return &MongodbData{
StatLine: statLine,
Tags: tags,
2015-12-19 20:31:22 +00:00
Fields: make(map[string]interface{}),
2015-07-07 01:20:11 +00:00
}
}
var DefaultStats = map[string]string{
2016-04-19 18:55:03 +00:00
"inserts_per_sec": "Insert",
"queries_per_sec": "Query",
"updates_per_sec": "Update",
"deletes_per_sec": "Delete",
"getmores_per_sec": "GetMore",
"commands_per_sec": "Command",
"flushes_per_sec": "Flushes",
"vsize_megabytes": "Virtual",
"resident_megabytes": "Resident",
"queued_reads": "QueuedReaders",
"queued_writes": "QueuedWriters",
"active_reads": "ActiveReaders",
"active_writes": "ActiveWriters",
"net_in_bytes": "NetIn",
"net_out_bytes": "NetOut",
"open_connections": "NumConnections",
"ttl_deletes_per_sec": "DeletedDocuments",
"ttl_passes_per_sec": "Passes",
2015-07-07 01:20:11 +00:00
}
var DefaultReplStats = map[string]string{
"repl_inserts_per_sec": "InsertR",
"repl_queries_per_sec": "QueryR",
"repl_updates_per_sec": "UpdateR",
"repl_deletes_per_sec": "DeleteR",
"repl_getmores_per_sec": "GetMoreR",
"repl_commands_per_sec": "CommandR",
"member_status": "NodeType",
"repl_lag": "ReplLag",
2015-07-07 01:20:11 +00:00
}
2016-04-29 16:40:26 +00:00
var DefaultClusterStats = map[string]string{
"jumbo_chunks": "JumboChunksCount",
}
2015-07-07 01:20:11 +00:00
var MmapStats = map[string]string{
"mapped_megabytes": "Mapped",
"non-mapped_megabytes": "NonMapped",
"page_faults_per_sec": "Faults",
}
var WiredTigerStats = map[string]string{
"percent_cache_dirty": "CacheDirtyPercent",
"percent_cache_used": "CacheUsedPercent",
}
2015-12-19 20:31:22 +00:00
func (d *MongodbData) AddDefaultStats() {
2015-07-07 01:20:11 +00:00
statLine := reflect.ValueOf(d.StatLine).Elem()
2015-12-19 20:31:22 +00:00
d.addStat(statLine, DefaultStats)
2015-07-07 01:20:11 +00:00
if d.StatLine.NodeType != "" {
2015-12-19 20:31:22 +00:00
d.addStat(statLine, DefaultReplStats)
2015-07-07 01:20:11 +00:00
}
2016-04-29 16:40:26 +00:00
d.addStat(statLine, DefaultClusterStats)
2015-07-07 01:20:11 +00:00
if d.StatLine.StorageEngine == "mmapv1" {
2015-12-19 20:31:22 +00:00
d.addStat(statLine, MmapStats)
2015-07-07 01:20:11 +00:00
} else if d.StatLine.StorageEngine == "wiredTiger" {
for key, value := range WiredTigerStats {
val := statLine.FieldByName(value).Interface()
percentVal := fmt.Sprintf("%.1f", val.(float64)*100)
floatVal, _ := strconv.ParseFloat(percentVal, 64)
2015-12-19 20:31:22 +00:00
d.add(key, floatVal)
2015-07-07 01:20:11 +00:00
}
}
}
2015-12-19 20:31:22 +00:00
func (d *MongodbData) addStat(
statLine reflect.Value,
stats map[string]string,
) {
2015-07-07 01:20:11 +00:00
for key, value := range stats {
val := statLine.FieldByName(value).Interface()
2015-12-19 20:31:22 +00:00
d.add(key, val)
2015-07-07 01:20:11 +00:00
}
}
2015-12-19 20:31:22 +00:00
func (d *MongodbData) add(key string, val interface{}) {
d.Fields[key] = val
}
func (d *MongodbData) flush(acc telegraf.Accumulator) {
acc.AddFields(
2015-12-19 20:31:22 +00:00
"mongodb",
d.Fields,
2015-07-07 01:20:11 +00:00
d.Tags,
d.StatLine.Time,
)
2015-12-19 20:31:22 +00:00
d.Fields = make(map[string]interface{})
2015-07-07 01:20:11 +00:00
}