// +build linux,sensors package sensors import ( "strings" "github.com/md14454/gosensors" "github.com/influxdata/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 # :. 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{}{ fieldName: feature.GetValue(), } acc.AddFields("sensors", fields, tags) } } return nil } func init() { inputs.Add("sensors", func() inputs.Input { return &Sensors{} }) }