Added initial support for gosensors module
This commit is contained in:
parent
b44644b6bf
commit
c0d98ecd4b
|
@ -28,6 +28,7 @@ import (
|
|||
_ "github.com/influxdb/telegraf/plugins/inputs/rabbitmq"
|
||||
_ "github.com/influxdb/telegraf/plugins/inputs/redis"
|
||||
_ "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/system"
|
||||
_ "github.com/influxdb/telegraf/plugins/inputs/trig"
|
||||
|
|
|
@ -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{}
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue