1
0
Fork 0
telegraf/plugins/inputs/win_wmi/win_wmi.go
Daniel Baumann 4978089aab
Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-24 07:26:29 +02:00

78 lines
1.6 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/config"
"github.com/influxdata/telegraf/plugins/inputs"
)
//go:embed sample.conf
var sampleConfig string
// S_FALSE is returned by CoInitializeEx if it was already called on this thread.
const sFalse = 0x00000001
type Wmi struct {
Host string `toml:"host"`
Username config.Secret `toml:"username"`
Password config.Secret `toml:"password"`
Queries []query `toml:"query"`
Methods []method `toml:"method"`
Log telegraf.Logger `toml:"-"`
}
func (*Wmi) SampleConfig() string {
return sampleConfig
}
func (w *Wmi) Init() error {
for i := range w.Queries {
q := &w.Queries[i]
if err := q.prepare(w.Host, w.Username, w.Password); err != nil {
return fmt.Errorf("preparing query %q failed: %w", q.ClassName, err)
}
}
for i := range w.Methods {
m := &w.Methods[i]
if err := m.prepare(w.Host, w.Username, w.Password); err != nil {
return fmt.Errorf("preparing method %q failed: %w", m.Method, err)
}
}
return nil
}
func (w *Wmi) Gather(acc telegraf.Accumulator) error {
var wg sync.WaitGroup
for _, q := range w.Queries {
wg.Add(1)
go func(q query) {
defer wg.Done()
acc.AddError(q.execute(acc))
}(q)
}
for _, m := range w.Methods {
wg.Add(1)
go func(m method) {
defer wg.Done()
acc.AddError(m.execute(acc))
}(m)
}
wg.Wait()
return nil
}
func init() {
inputs.Add("win_wmi", func() telegraf.Input { return &Wmi{} })
}