Added initial support for gosensors module

This commit is contained in:
Matt Davis 2016-01-14 23:03:39 +00:00 committed by Cameron Sparr
parent b44644b6bf
commit c0d98ecd4b
2 changed files with 89 additions and 0 deletions

View File

@ -28,6 +28,7 @@ import (
_ "github.com/influxdb/telegraf/plugins/inputs/rabbitmq" _ "github.com/influxdb/telegraf/plugins/inputs/rabbitmq"
_ "github.com/influxdb/telegraf/plugins/inputs/redis" _ "github.com/influxdb/telegraf/plugins/inputs/redis"
_ "github.com/influxdb/telegraf/plugins/inputs/rethinkdb" _ "github.com/influxdb/telegraf/plugins/inputs/rethinkdb"
_ "github.com/influxdb/telegraf/plugins/inputs/sensors"
_ "github.com/influxdb/telegraf/plugins/inputs/statsd" _ "github.com/influxdb/telegraf/plugins/inputs/statsd"
_ "github.com/influxdb/telegraf/plugins/inputs/system" _ "github.com/influxdb/telegraf/plugins/inputs/system"
_ "github.com/influxdb/telegraf/plugins/inputs/trig" _ "github.com/influxdb/telegraf/plugins/inputs/trig"

View File

@ -0,0 +1,88 @@
package sensors
import (
"strings"
"github.com/md14454/gosensors"
"github.com/influxdb/telegraf/plugins/inputs"
)
type Sensors struct {
Sensors []string
}
func (_ *Sensors) Description() string {
return "Monitor sensors using lm-sensors package"
}
var sensorsSampleConfig = `
# By default, telegraf gathers stats from all sensors
# detected by the lm-sensors module.
#
# Only collect stats from the selected sensors. Sensors
# are listed as <chip name>:<feature name>. This
# information can be found by running the sensors command.
# e.g. sensors -u
# A * as the feature name will return all features of the chip
#
# sensors = ["coretemp-isa-0000:Core 0", "coretemp-isa-0001:*", ... ]
`
func (_ *Sensors) SampleConfig() string {
return sensorsSampleConfig
}
func (s *Sensors) Gather(acc inputs.Accumulator) error {
gosensors.Init()
defer gosensors.Cleanup()
for _, chip := range gosensors.GetDetectedChips() {
for _, feature := range chip.GetFeatures() {
chipName := chip.String()
featureLabel := feature.GetLabel()
if len(s.Sensors) != 0 {
var found bool
for _, sensor := range s.Sensors {
parts := strings.SplitN(":", sensor, 2)
if parts[0] == chipName {
if parts[1] == "*" || parts[1] == featureLabel {
found = true
break
}
}
}
if !found {
continue
}
}
tags := map[string]string{
"chip": chipName,
"adapter": chip.AdapterName(),
"feature-name": feature.Name,
"feature-label": featureLabel,
}
fieldName := chipName + ":" + featureLabel
fields := map[string]interface{}{
featureLabel: feature.GetValue(),
}
acc.AddFields("sensors", fields, tags)
}
}
return nil
}
func init() {
inputs.Add("sensors", func() inputs.Input {
return &Sensors{}
})
}