telegraf/plugins/inputs/win_wmi/win_wmi.go

62 lines
1.1 KiB
Go

//go:generate ../../../tools/readme_config_includer/generator
//go:build windows
package win_wmi
import (
_ "embed"
"fmt"
"sync"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs"
)
//go:embed sample.conf
var sampleConfig string
// Wmi struct
type Wmi struct {
Queries []Query `toml:"query"`
Log telegraf.Logger `toml:"-"`
}
// S_FALSE is returned by CoInitializeEx if it was already called on this thread.
const sFalse = 0x00000001
// Init function
func (w *Wmi) Init() error {
for i := range w.Queries {
q := &w.Queries[i]
if err := q.prepare(); err != nil {
return fmt.Errorf("preparing query %q failed: %w", q.ClassName, err)
}
}
return nil
}
// SampleConfig function
func (*Wmi) SampleConfig() string {
return sampleConfig
}
// Gather function
func (w *Wmi) Gather(acc telegraf.Accumulator) error {
var wg sync.WaitGroup
for _, query := range w.Queries {
wg.Add(1)
go func(q Query) {
defer wg.Done()
acc.AddError(q.execute(acc))
}(query)
}
wg.Wait()
return nil
}
func init() {
inputs.Add("win_wmi", func() telegraf.Input { return &Wmi{} })
}