chore: Fix linter findings for Windows (part1) (#13057)
This commit is contained in:
parent
c44c5ed317
commit
77ee21f8e5
|
|
@ -244,7 +244,7 @@ issues:
|
||||||
# revive:var-naming
|
# revive:var-naming
|
||||||
- don't use an underscore in package name
|
- don't use an underscore in package name
|
||||||
# EXC0001 errcheck: Almost all programs ignore errors on these functions and in most cases it's ok
|
# EXC0001 errcheck: Almost all programs ignore errors on these functions and in most cases it's ok
|
||||||
- Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked
|
- Error return value of .((os\.)?std(out|err)\..*|.*Close.*|.*Flush|.*Disconnect|.*Clear|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked
|
||||||
# EXC0013 revive: Annoying issue about not having a comment. The rare codebase has such comments
|
# EXC0013 revive: Annoying issue about not having a comment. The rare codebase has such comments
|
||||||
- package comment should be of the form "(.+)...
|
- package comment should be of the form "(.+)...
|
||||||
# EXC0015 revive: Annoying issue about not having a comment. The rare codebase has such comments
|
# EXC0015 revive: Annoying issue about not having a comment. The rare codebase has such comments
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
package execd
|
package execd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
|
|
@ -19,10 +20,14 @@ func (e *Execd) Gather(acc telegraf.Accumulator) error {
|
||||||
switch e.Signal {
|
switch e.Signal {
|
||||||
case "STDIN":
|
case "STDIN":
|
||||||
if osStdin, ok := e.process.Stdin.(*os.File); ok {
|
if osStdin, ok := e.process.Stdin.(*os.File); ok {
|
||||||
osStdin.SetWriteDeadline(time.Now().Add(1 * time.Second))
|
if err := osStdin.SetWriteDeadline(time.Now().Add(1 * time.Second)); err != nil {
|
||||||
|
if !errors.Is(err, os.ErrNoDeadline) {
|
||||||
|
return fmt.Errorf("setting write deadline failed: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if _, err := io.WriteString(e.process.Stdin, "\n"); err != nil {
|
if _, err := io.WriteString(e.process.Stdin, "\n"); err != nil {
|
||||||
return fmt.Errorf("Error writing to stdin: %s", err)
|
return fmt.Errorf("error writing to stdin: %w", err)
|
||||||
}
|
}
|
||||||
case "none":
|
case "none":
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,8 @@ func listenForCollectMetricsSignals(ctx context.Context, collectMetricsPrompt ch
|
||||||
signal.Notify(collectMetricsPrompt, syscall.SIGHUP)
|
signal.Notify(collectMetricsPrompt, syscall.SIGHUP)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
<-ctx.Done()
|
||||||
case <-ctx.Done():
|
// context done. stop to signals to avoid pushing messages to a closed channel
|
||||||
// context done. stop to signals to avoid pushing messages to a closed channel
|
signal.Stop(collectMetricsPrompt)
|
||||||
signal.Stop(collectMetricsPrompt)
|
|
||||||
}
|
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,11 @@ import (
|
||||||
"github.com/influxdata/telegraf"
|
"github.com/influxdata/telegraf"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *Ping) pingToURL(u string, acc telegraf.Accumulator) {
|
func (p *Ping) pingToURL(host string, acc telegraf.Accumulator) {
|
||||||
tags := map[string]string{"url": u}
|
tags := map[string]string{"url": host}
|
||||||
fields := map[string]interface{}{"result_code": 0}
|
fields := map[string]interface{}{"result_code": 0}
|
||||||
|
|
||||||
args := p.args(u)
|
args := p.args(host)
|
||||||
totalTimeout := 60.0
|
totalTimeout := 60.0
|
||||||
if len(p.Arguments) == 0 {
|
if len(p.Arguments) == 0 {
|
||||||
totalTimeout = p.timeout() * float64(p.Count)
|
totalTimeout = p.timeout() * float64(p.Count)
|
||||||
|
|
@ -34,9 +34,9 @@ func (p *Ping) pingToURL(u string, acc telegraf.Accumulator) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fatal error
|
// fatal error
|
||||||
if pendingError != nil {
|
if pendingError != nil {
|
||||||
acc.AddError(fmt.Errorf("%s: %s", pendingError, u))
|
acc.AddError(fmt.Errorf("%s: %w", host, pendingError))
|
||||||
} else {
|
} else {
|
||||||
acc.AddError(fmt.Errorf("%s: %s", err, u))
|
acc.AddError(fmt.Errorf("%s: %w", host, err))
|
||||||
}
|
}
|
||||||
|
|
||||||
fields["result_code"] = 2
|
fields["result_code"] = 2
|
||||||
|
|
@ -88,7 +88,7 @@ func (p *Ping) args(url string) []string {
|
||||||
func processPingOutput(out string) (int, int, int, int, int, int, error) {
|
func processPingOutput(out string) (int, int, int, int, int, int, error) {
|
||||||
// So find a line contain 3 numbers except reply lines
|
// So find a line contain 3 numbers except reply lines
|
||||||
var stats, aproxs []string = nil, nil
|
var stats, aproxs []string = nil, nil
|
||||||
err := errors.New("Fatal error processing ping output")
|
err := errors.New("fatal error processing ping output")
|
||||||
stat := regexp.MustCompile(`=\W*(\d+)\D*=\W*(\d+)\D*=\W*(\d+)`)
|
stat := regexp.MustCompile(`=\W*(\d+)\D*=\W*(\d+)\D*=\W*(\d+)`)
|
||||||
aprox := regexp.MustCompile(`=\W*(\d+)\D*ms\D*=\W*(\d+)\D*ms\D*=\W*(\d+)\D*ms`)
|
aprox := regexp.MustCompile(`=\W*(\d+)\D*ms\D*=\W*(\d+)\D*ms\D*=\W*(\d+)\D*ms`)
|
||||||
tttLine := regexp.MustCompile(`TTL=\d+`)
|
tttLine := regexp.MustCompile(`TTL=\d+`)
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ func TestPingGather(t *testing.T) {
|
||||||
pingHost: mockHostPinger,
|
pingHost: mockHostPinger,
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.GatherError(p.Gather)
|
require.NoError(t, acc.GatherError(p.Gather))
|
||||||
tags := map[string]string{"url": "www.google.com"}
|
tags := map[string]string{"url": "www.google.com"}
|
||||||
fields := map[string]interface{}{
|
fields := map[string]interface{}{
|
||||||
"packets_transmitted": 4,
|
"packets_transmitted": 4,
|
||||||
|
|
@ -118,7 +118,9 @@ func TestBadPingGather(t *testing.T) {
|
||||||
pingHost: mockErrorHostPinger,
|
pingHost: mockErrorHostPinger,
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.GatherError(p.Gather)
|
err := acc.GatherError(p.Gather)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
tags := map[string]string{"url": "www.amazon.com"}
|
tags := map[string]string{"url": "www.amazon.com"}
|
||||||
fields := map[string]interface{}{
|
fields := map[string]interface{}{
|
||||||
"packets_transmitted": 4,
|
"packets_transmitted": 4,
|
||||||
|
|
@ -176,7 +178,9 @@ func TestLossyPingGather(t *testing.T) {
|
||||||
pingHost: mockLossyHostPinger,
|
pingHost: mockLossyHostPinger,
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.GatherError(p.Gather)
|
err := acc.GatherError(p.Gather)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
tags := map[string]string{"url": "www.google.com"}
|
tags := map[string]string{"url": "www.google.com"}
|
||||||
fields := map[string]interface{}{
|
fields := map[string]interface{}{
|
||||||
"packets_transmitted": 9,
|
"packets_transmitted": 9,
|
||||||
|
|
@ -237,7 +241,9 @@ func TestFatalPingGather(t *testing.T) {
|
||||||
pingHost: mockFatalHostPinger,
|
pingHost: mockFatalHostPinger,
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.GatherError(p.Gather)
|
err := acc.GatherError(p.Gather)
|
||||||
|
require.Error(t, err)
|
||||||
|
|
||||||
require.True(t, acc.HasFloatField("ping", "errors"),
|
require.True(t, acc.HasFloatField("ping", "errors"),
|
||||||
"Fatal ping should have packet measurements")
|
"Fatal ping should have packet measurements")
|
||||||
require.False(t, acc.HasInt64Field("ping", "packets_transmitted"),
|
require.False(t, acc.HasInt64Field("ping", "packets_transmitted"),
|
||||||
|
|
@ -283,7 +289,8 @@ func TestUnreachablePingGather(t *testing.T) {
|
||||||
pingHost: mockUnreachableHostPinger,
|
pingHost: mockUnreachableHostPinger,
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.GatherError(p.Gather)
|
err := acc.GatherError(p.Gather)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
tags := map[string]string{"url": "www.google.com"}
|
tags := map[string]string{"url": "www.google.com"}
|
||||||
fields := map[string]interface{}{
|
fields := map[string]interface{}{
|
||||||
|
|
@ -331,7 +338,8 @@ func TestTTLExpiredPingGather(t *testing.T) {
|
||||||
pingHost: mockTTLExpiredPinger,
|
pingHost: mockTTLExpiredPinger,
|
||||||
}
|
}
|
||||||
|
|
||||||
acc.GatherError(p.Gather)
|
err := acc.GatherError(p.Gather)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
tags := map[string]string{"url": "www.google.com"}
|
tags := map[string]string{"url": "www.google.com"}
|
||||||
fields := map[string]interface{}{
|
fields := map[string]interface{}{
|
||||||
|
|
@ -365,5 +373,7 @@ func TestPingBinary(t *testing.T) {
|
||||||
return "", nil
|
return "", nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
acc.GatherError(p.Gather)
|
err := acc.GatherError(p.Gather)
|
||||||
|
require.Error(t, err)
|
||||||
|
require.EqualValues(t, "www.google.com: fatal error processing ping output", err.Error())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
package procstat
|
package procstat
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"golang.org/x/sys/windows"
|
"golang.org/x/sys/windows"
|
||||||
|
|
@ -34,7 +35,8 @@ func queryPidWithWinServiceName(winServiceName string) (uint32, error) {
|
||||||
var bytesNeeded uint32
|
var bytesNeeded uint32
|
||||||
var buf []byte
|
var buf []byte
|
||||||
|
|
||||||
if err := windows.QueryServiceStatusEx(srv.Handle, windows.SC_STATUS_PROCESS_INFO, nil, 0, &bytesNeeded); err != windows.ERROR_INSUFFICIENT_BUFFER {
|
err = windows.QueryServiceStatusEx(srv.Handle, windows.SC_STATUS_PROCESS_INFO, nil, 0, &bytesNeeded)
|
||||||
|
if !errors.Is(err, windows.ERROR_INSUFFICIENT_BUFFER) {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"strings"
|
"strings"
|
||||||
"unicode/utf16"
|
"unicode/utf16"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
|
|
@ -97,12 +96,10 @@ func UnrollXMLFields(data []byte, fieldsUsage map[string]int, separator string)
|
||||||
for {
|
for {
|
||||||
var node xmlnode
|
var node xmlnode
|
||||||
err := dec.Decode(&node)
|
err := dec.Decode(&node)
|
||||||
if err == io.EOF {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
var parents []string
|
var parents []string
|
||||||
walkXML([]xmlnode{node}, parents, separator, func(node xmlnode, parents []string, separator string) bool {
|
walkXML([]xmlnode{node}, parents, separator, func(node xmlnode, parents []string, separator string) bool {
|
||||||
innerText := strings.TrimSpace(node.Text)
|
innerText := strings.TrimSpace(node.Text)
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
_ "embed"
|
_ "embed"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
@ -120,7 +121,7 @@ func (w *WinEventLog) Gather(acc telegraf.Accumulator) error {
|
||||||
for {
|
for {
|
||||||
events, err := w.fetchEvents(w.subscription)
|
events, err := w.fetchEvents(w.subscription)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == ERROR_NO_MORE_ITEMS {
|
if errors.Is(err, ERROR_NO_MORE_ITEMS) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
w.Log.Errorf("Error getting events: %v", err)
|
w.Log.Errorf("Error getting events: %v", err)
|
||||||
|
|
@ -334,7 +335,7 @@ func (w *WinEventLog) fetchEventHandles(subsHandle EvtHandle) ([]EvtHandle, erro
|
||||||
|
|
||||||
err := _EvtNext(subsHandle, eventsNumber, &eventHandles[0], 0, 0, &evtReturned)
|
err := _EvtNext(subsHandle, eventsNumber, &eventHandles[0], 0, 0, &evtReturned)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == ERROR_INVALID_OPERATION && evtReturned == 0 {
|
if errors.Is(err, ERROR_INVALID_OPERATION) && evtReturned == 0 {
|
||||||
return nil, ERROR_NO_MORE_ITEMS
|
return nil, ERROR_NO_MORE_ITEMS
|
||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -428,7 +429,7 @@ func (w *WinEventLog) renderLocalMessage(event Event, eventHandle EvtHandle) (Ev
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return event, nil //nolint:nilerr // We can return event without most values
|
return event, nil //nolint:nilerr // We can return event without most values
|
||||||
}
|
}
|
||||||
defer _EvtClose(publisherHandle)
|
defer _EvtClose(publisherHandle) //nolint:errcheck // Ignore error returned during Close
|
||||||
|
|
||||||
// Populating text values
|
// Populating text values
|
||||||
keywords, err := formatEventString(EvtFormatMessageKeyword, eventHandle, publisherHandle)
|
keywords, err := formatEventString(EvtFormatMessageKeyword, eventHandle, publisherHandle)
|
||||||
|
|
@ -493,7 +494,7 @@ func formatEventString(
|
||||||
var bufferUsed uint32
|
var bufferUsed uint32
|
||||||
err := _EvtFormatMessage(publisherHandle, eventHandle, 0, 0, 0, messageFlag,
|
err := _EvtFormatMessage(publisherHandle, eventHandle, 0, 0, 0, messageFlag,
|
||||||
0, nil, &bufferUsed)
|
0, nil, &bufferUsed)
|
||||||
if err != nil && err != ERROR_INSUFFICIENT_BUFFER {
|
if err != nil && !errors.Is(err, ERROR_INSUFFICIENT_BUFFER) {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -393,7 +393,8 @@ func (m *WinPerfCounters) ParseConfig() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *WinPerfCounters) checkError(err error) error {
|
func (m *WinPerfCounters) checkError(err error) error {
|
||||||
if pdhErr, ok := err.(*PdhError); ok {
|
var pdhErr *PdhError
|
||||||
|
if errors.As(err, &pdhErr) {
|
||||||
for _, ignoredErrors := range m.IgnoredErrors {
|
for _, ignoredErrors := range m.IgnoredErrors {
|
||||||
if PDHErrors[pdhErr.ErrorCode] == ignoredErrors {
|
if PDHErrors[pdhErr.ErrorCode] == ignoredErrors {
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -477,7 +478,7 @@ func (m *WinPerfCounters) gatherComputerCounters(hostCounterInfo *hostCountersIn
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//ignore invalid data as some counters from process instances returns this sometimes
|
//ignore invalid data as some counters from process instances returns this sometimes
|
||||||
if !isKnownCounterDataError(err) {
|
if !isKnownCounterDataError(err) {
|
||||||
return fmt.Errorf("error while getting value for counter %s: %v", metric.counterPath, err)
|
return fmt.Errorf("error while getting value for counter %q: %w", metric.counterPath, err)
|
||||||
}
|
}
|
||||||
m.Log.Warnf("error while getting value for counter %q, instance: %s, will skip metric: %v", metric.counterPath, metric.instance, err)
|
m.Log.Warnf("error while getting value for counter %q, instance: %s, will skip metric: %v", metric.counterPath, metric.instance, err)
|
||||||
continue
|
continue
|
||||||
|
|
@ -493,7 +494,7 @@ func (m *WinPerfCounters) gatherComputerCounters(hostCounterInfo *hostCountersIn
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//ignore invalid data as some counters from process instances returns this sometimes
|
//ignore invalid data as some counters from process instances returns this sometimes
|
||||||
if !isKnownCounterDataError(err) {
|
if !isKnownCounterDataError(err) {
|
||||||
return fmt.Errorf("error while getting value for counter %s: %v", metric.counterPath, err)
|
return fmt.Errorf("error while getting value for counter %q: %w", metric.counterPath, err)
|
||||||
}
|
}
|
||||||
m.Log.Warnf("error while getting value for counter %q, instance: %s, will skip metric: %v", metric.counterPath, metric.instance, err)
|
m.Log.Warnf("error while getting value for counter %q, instance: %s, will skip metric: %v", metric.counterPath, metric.instance, err)
|
||||||
continue
|
continue
|
||||||
|
|
@ -566,7 +567,8 @@ func addCounterMeasurement(metric *counter, instanceName string, value interface
|
||||||
}
|
}
|
||||||
|
|
||||||
func isKnownCounterDataError(err error) bool {
|
func isKnownCounterDataError(err error) bool {
|
||||||
if pdhErr, ok := err.(*PdhError); ok && (pdhErr.ErrorCode == PDH_INVALID_DATA ||
|
var pdhErr *PdhError
|
||||||
|
if errors.As(err, &pdhErr) && (pdhErr.ErrorCode == PDH_INVALID_DATA ||
|
||||||
pdhErr.ErrorCode == PDH_CALC_NEGATIVE_DENOMINATOR ||
|
pdhErr.ErrorCode == PDH_CALC_NEGATIVE_DENOMINATOR ||
|
||||||
pdhErr.ErrorCode == PDH_CALC_NEGATIVE_VALUE ||
|
pdhErr.ErrorCode == PDH_CALC_NEGATIVE_VALUE ||
|
||||||
pdhErr.ErrorCode == PDH_CSTATUS_INVALID_DATA ||
|
pdhErr.ErrorCode == PDH_CSTATUS_INVALID_DATA ||
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,15 @@
|
||||||
package win_perf_counters
|
package win_perf_counters
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/influxdata/telegraf/testutil"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/influxdata/telegraf/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWinPerformanceQueryImplIntegration(t *testing.T) {
|
func TestWinPerformanceQueryImplIntegration(t *testing.T) {
|
||||||
|
|
@ -107,7 +109,8 @@ func TestWinPerformanceQueryImplIntegration(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
farr, err := query.GetFormattedCounterArrayDouble(hCounter)
|
farr, err := query.GetFormattedCounterArrayDouble(hCounter)
|
||||||
if phderr, ok := err.(*PdhError); ok && phderr.ErrorCode != PDH_INVALID_DATA && phderr.ErrorCode != PDH_CALC_NEGATIVE_VALUE {
|
var phdErr *PdhError
|
||||||
|
if errors.As(err, &phdErr) && phdErr.ErrorCode != PDH_INVALID_DATA && phdErr.ErrorCode != PDH_CALC_NEGATIVE_VALUE {
|
||||||
time.Sleep(time.Second)
|
time.Sleep(time.Second)
|
||||||
farr, err = query.GetFormattedCounterArrayDouble(hCounter)
|
farr, err = query.GetFormattedCounterArrayDouble(hCounter)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ type FakePerformanceQuery struct {
|
||||||
var MetricTime = time.Date(2018, 5, 28, 12, 0, 0, 0, time.UTC)
|
var MetricTime = time.Date(2018, 5, 28, 12, 0, 0, 0, time.UTC)
|
||||||
|
|
||||||
func (m *testCounter) ToCounterValue(raw bool) *CounterValue {
|
func (m *testCounter) ToCounterValue(raw bool) *CounterValue {
|
||||||
_, _, inst, _, _ := extractCounterInfoFromCounterPath(m.path)
|
_, _, inst, _, _ := extractCounterInfoFromCounterPath(m.path) //nolint:dogsled // only instance is needed for this helper function in tests
|
||||||
if inst == "" {
|
if inst == "" {
|
||||||
inst = "--"
|
inst = "--"
|
||||||
}
|
}
|
||||||
|
|
@ -58,7 +58,7 @@ func (m *FakePerformanceQuery) Open() error {
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) Close() error {
|
func (m *FakePerformanceQuery) Close() error {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return errors.New("CloSe: uninitialized query")
|
return errors.New("in Close: uninitialized query")
|
||||||
}
|
}
|
||||||
m.openCalled = false
|
m.openCalled = false
|
||||||
return nil
|
return nil
|
||||||
|
|
@ -66,23 +66,23 @@ func (m *FakePerformanceQuery) Close() error {
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) AddCounterToQuery(counterPath string) (PDH_HCOUNTER, error) {
|
func (m *FakePerformanceQuery) AddCounterToQuery(counterPath string) (PDH_HCOUNTER, error) {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return 0, errors.New("AddCounterToQuery: uninitialized query")
|
return 0, errors.New("in AddCounterToQuery: uninitialized query")
|
||||||
}
|
}
|
||||||
if c, ok := m.counters[counterPath]; ok {
|
if c, ok := m.counters[counterPath]; ok {
|
||||||
return c.handle, nil
|
return c.handle, nil
|
||||||
} else {
|
} else {
|
||||||
return 0, errors.New(fmt.Sprintf("AddCounterToQuery: invalid counter path: %s", counterPath))
|
return 0, fmt.Errorf("in AddCounterToQuery: invalid counter path: %q", counterPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) AddEnglishCounterToQuery(counterPath string) (PDH_HCOUNTER, error) {
|
func (m *FakePerformanceQuery) AddEnglishCounterToQuery(counterPath string) (PDH_HCOUNTER, error) {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return 0, errors.New("AddEnglishCounterToQuery: uninitialized query")
|
return 0, errors.New("in AddEnglishCounterToQuery: uninitialized query")
|
||||||
}
|
}
|
||||||
if c, ok := m.counters[counterPath]; ok {
|
if c, ok := m.counters[counterPath]; ok {
|
||||||
return c.handle, nil
|
return c.handle, nil
|
||||||
} else {
|
} else {
|
||||||
return 0, fmt.Errorf("AddEnglishCounterToQuery: invalid counter path: %s", counterPath)
|
return 0, fmt.Errorf("in AddEnglishCounterToQuery: invalid counter path: %q", counterPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,20 +92,20 @@ func (m *FakePerformanceQuery) GetCounterPath(counterHandle PDH_HCOUNTER) (strin
|
||||||
return counter.path, nil
|
return counter.path, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "", fmt.Errorf("GetCounterPath: invalid handle: %d", counterHandle)
|
return "", fmt.Errorf("in GetCounterPath: invalid handle: %q", counterHandle)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) ExpandWildCardPath(counterPath string) ([]string, error) {
|
func (m *FakePerformanceQuery) ExpandWildCardPath(counterPath string) ([]string, error) {
|
||||||
if e, ok := m.expandPaths[counterPath]; ok {
|
if e, ok := m.expandPaths[counterPath]; ok {
|
||||||
return e, nil
|
return e, nil
|
||||||
} else {
|
} else {
|
||||||
return []string{}, fmt.Errorf("ExpandWildCardPath: invalid counter path: %s", counterPath)
|
return []string{}, fmt.Errorf("in ExpandWildCardPath: invalid counter path: %q", counterPath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) GetFormattedCounterValueDouble(counterHandle PDH_HCOUNTER) (float64, error) {
|
func (m *FakePerformanceQuery) GetFormattedCounterValueDouble(counterHandle PDH_HCOUNTER) (float64, error) {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return 0, errors.New("GetFormattedCounterValueDouble: uninitialized query")
|
return 0, errors.New("in GetFormattedCounterValueDouble: uninitialized query")
|
||||||
}
|
}
|
||||||
for _, counter := range m.counters {
|
for _, counter := range m.counters {
|
||||||
if counter.handle == counterHandle {
|
if counter.handle == counterHandle {
|
||||||
|
|
@ -115,12 +115,12 @@ func (m *FakePerformanceQuery) GetFormattedCounterValueDouble(counterHandle PDH_
|
||||||
return counter.value, nil
|
return counter.value, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0, fmt.Errorf("GetFormattedCounterValueDouble: invalid handle: %d", counterHandle)
|
return 0, fmt.Errorf("in GetFormattedCounterValueDouble: invalid handle: %q", counterHandle)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) GetRawCounterValue(counterHandle PDH_HCOUNTER) (int64, error) {
|
func (m *FakePerformanceQuery) GetRawCounterValue(counterHandle PDH_HCOUNTER) (int64, error) {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return 0, errors.New("GetRawCounterValue: uninitialised query")
|
return 0, errors.New("in GetRawCounterValue: uninitialised query")
|
||||||
}
|
}
|
||||||
for _, counter := range m.counters {
|
for _, counter := range m.counters {
|
||||||
if counter.handle == counterHandle {
|
if counter.handle == counterHandle {
|
||||||
|
|
@ -130,7 +130,7 @@ func (m *FakePerformanceQuery) GetRawCounterValue(counterHandle PDH_HCOUNTER) (i
|
||||||
return int64(counter.value), nil
|
return int64(counter.value), nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0, fmt.Errorf("GetRawCounterValue: invalid handle: %d", counterHandle)
|
return 0, fmt.Errorf("in GetRawCounterValue: invalid handle: %q", counterHandle)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) findCounterByPath(counterPath string) *testCounter {
|
func (m *FakePerformanceQuery) findCounterByPath(counterPath string) *testCounter {
|
||||||
|
|
@ -153,7 +153,7 @@ func (m *FakePerformanceQuery) findCounterByHandle(counterHandle PDH_HCOUNTER) *
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) GetFormattedCounterArrayDouble(hCounter PDH_HCOUNTER) ([]CounterValue, error) {
|
func (m *FakePerformanceQuery) GetFormattedCounterArrayDouble(hCounter PDH_HCOUNTER) ([]CounterValue, error) {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return nil, errors.New("GetFormattedCounterArrayDouble: uninitialized query")
|
return nil, errors.New("in GetFormattedCounterArrayDouble: uninitialized query")
|
||||||
}
|
}
|
||||||
for _, c := range m.counters {
|
for _, c := range m.counters {
|
||||||
if c.handle == hCounter {
|
if c.handle == hCounter {
|
||||||
|
|
@ -167,21 +167,21 @@ func (m *FakePerformanceQuery) GetFormattedCounterArrayDouble(hCounter PDH_HCOUN
|
||||||
}
|
}
|
||||||
counters = append(counters, *counter.ToCounterValue(false))
|
counters = append(counters, *counter.ToCounterValue(false))
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("GetFormattedCounterArrayDouble: invalid counter : %s", p)
|
return nil, fmt.Errorf("in GetFormattedCounterArrayDouble: invalid counter: %q", p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return counters, nil
|
return counters, nil
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("GetFormattedCounterArrayDouble: invalid counter : %d", hCounter)
|
return nil, fmt.Errorf("in GetFormattedCounterArrayDouble: invalid counter: %q", hCounter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("GetFormattedCounterArrayDouble: invalid counter : %d, no paths found", hCounter)
|
return nil, fmt.Errorf("in GetFormattedCounterArrayDouble: invalid counter: %q, no paths found", hCounter)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) GetRawCounterArray(hCounter PDH_HCOUNTER) ([]CounterValue, error) {
|
func (m *FakePerformanceQuery) GetRawCounterArray(hCounter PDH_HCOUNTER) ([]CounterValue, error) {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return nil, errors.New("GetRawCounterArray: uninitialised query")
|
return nil, errors.New("in GetRawCounterArray: uninitialised query")
|
||||||
}
|
}
|
||||||
for _, c := range m.counters {
|
for _, c := range m.counters {
|
||||||
if c.handle == hCounter {
|
if c.handle == hCounter {
|
||||||
|
|
@ -195,28 +195,28 @@ func (m *FakePerformanceQuery) GetRawCounterArray(hCounter PDH_HCOUNTER) ([]Coun
|
||||||
}
|
}
|
||||||
counters = append(counters, *counter.ToCounterValue(true))
|
counters = append(counters, *counter.ToCounterValue(true))
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("GetRawCounterArray: invalid counter : %s", p)
|
return nil, fmt.Errorf("in GetRawCounterArray: invalid counter: %q", p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return counters, nil
|
return counters, nil
|
||||||
} else {
|
} else {
|
||||||
return nil, fmt.Errorf("GetRawCounterArray: invalid counter : %d", hCounter)
|
return nil, fmt.Errorf("in GetRawCounterArray: invalid counter: %q", hCounter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("GetRawCounterArray: invalid counter : %d, no paths found", hCounter)
|
return nil, fmt.Errorf("in GetRawCounterArray: invalid counter: %q, no paths found", hCounter)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) CollectData() error {
|
func (m *FakePerformanceQuery) CollectData() error {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return errors.New("CollectData: uninitialized query")
|
return errors.New("in CollectData: uninitialized query")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FakePerformanceQuery) CollectDataWithTime() (time.Time, error) {
|
func (m *FakePerformanceQuery) CollectDataWithTime() (time.Time, error) {
|
||||||
if !m.openCalled {
|
if !m.openCalled {
|
||||||
return time.Now(), errors.New("CollectData: uninitialized query")
|
return time.Now(), errors.New("in CollectDataWithTime: uninitialized query")
|
||||||
}
|
}
|
||||||
return MetricTime, nil
|
return MetricTime, nil
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +233,7 @@ func (m FakePerformanceQueryCreator) NewPerformanceQuery(computer string) Perfor
|
||||||
var ret PerformanceQuery
|
var ret PerformanceQuery
|
||||||
var ok bool
|
var ok bool
|
||||||
if ret, ok = m.fakeQueries[computer]; !ok {
|
if ret, ok = m.fakeQueries[computer]; !ok {
|
||||||
panic(fmt.Errorf("query for %s not found", computer))
|
panic(fmt.Errorf("query for %q not found", computer))
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,9 @@ package win_services
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
_ "embed"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"io/fs"
|
||||||
|
|
||||||
"golang.org/x/sys/windows/svc"
|
"golang.org/x/sys/windows/svc"
|
||||||
"golang.org/x/sys/windows/svc/mgr"
|
"golang.org/x/sys/windows/svc/mgr"
|
||||||
|
|
@ -19,19 +20,20 @@ import (
|
||||||
//go:embed sample.conf
|
//go:embed sample.conf
|
||||||
var sampleConfig string
|
var sampleConfig string
|
||||||
|
|
||||||
type ServiceErr struct {
|
type ServiceError struct {
|
||||||
Message string
|
Message string
|
||||||
Service string
|
Service string
|
||||||
Err error
|
Err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ServiceErr) Error() string {
|
func (e *ServiceError) Error() string {
|
||||||
return fmt.Sprintf("%s: %q: %v", e.Message, e.Service, e.Err)
|
return fmt.Sprintf("%s: %q: %v", e.Message, e.Service, e.Err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsPermission(err error) bool {
|
func IsPermission(err error) bool {
|
||||||
if err, ok := err.(*ServiceErr); ok {
|
var serviceErr *ServiceError
|
||||||
return os.IsPermission(err.Err)
|
if errors.As(err, &serviceErr) {
|
||||||
|
return errors.Is(serviceErr, fs.ErrPermission)
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +121,7 @@ func (m *WinServices) Init() error {
|
||||||
func (m *WinServices) Gather(acc telegraf.Accumulator) error {
|
func (m *WinServices) Gather(acc telegraf.Accumulator) error {
|
||||||
scmgr, err := m.mgrProvider.Connect()
|
scmgr, err := m.mgrProvider.Connect()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Could not open service manager: %s", err)
|
return fmt.Errorf("could not open service manager: %w", err)
|
||||||
}
|
}
|
||||||
defer scmgr.Disconnect()
|
defer scmgr.Disconnect()
|
||||||
|
|
||||||
|
|
@ -161,7 +163,7 @@ func (m *WinServices) Gather(acc telegraf.Accumulator) error {
|
||||||
func (m *WinServices) listServices(scmgr WinServiceManager) ([]string, error) {
|
func (m *WinServices) listServices(scmgr WinServiceManager) ([]string, error) {
|
||||||
names, err := scmgr.ListServices()
|
names, err := scmgr.ListServices()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Could not list services: %s", err)
|
return nil, fmt.Errorf("could not list services: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var services []string
|
var services []string
|
||||||
|
|
@ -178,7 +180,7 @@ func (m *WinServices) listServices(scmgr WinServiceManager) ([]string, error) {
|
||||||
func collectServiceInfo(scmgr WinServiceManager, serviceName string) (*ServiceInfo, error) {
|
func collectServiceInfo(scmgr WinServiceManager, serviceName string) (*ServiceInfo, error) {
|
||||||
srv, err := scmgr.OpenService(serviceName)
|
srv, err := scmgr.OpenService(serviceName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &ServiceErr{
|
return nil, &ServiceError{
|
||||||
Message: "could not open service",
|
Message: "could not open service",
|
||||||
Service: serviceName,
|
Service: serviceName,
|
||||||
Err: err,
|
Err: err,
|
||||||
|
|
@ -188,7 +190,7 @@ func collectServiceInfo(scmgr WinServiceManager, serviceName string) (*ServiceIn
|
||||||
|
|
||||||
srvStatus, err := srv.Query()
|
srvStatus, err := srv.Query()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &ServiceErr{
|
return nil, &ServiceError{
|
||||||
Message: "could not query service",
|
Message: "could not query service",
|
||||||
Service: serviceName,
|
Service: serviceName,
|
||||||
Err: err,
|
Err: err,
|
||||||
|
|
@ -197,7 +199,7 @@ func collectServiceInfo(scmgr WinServiceManager, serviceName string) (*ServiceIn
|
||||||
|
|
||||||
srvCfg, err := srv.Config()
|
srvCfg, err := srv.Config()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, &ServiceErr{
|
return nil, &ServiceError{
|
||||||
Message: "could not get config of service",
|
Message: "could not get config of service",
|
||||||
Service: serviceName,
|
Service: serviceName,
|
||||||
Err: err,
|
Err: err,
|
||||||
|
|
|
||||||
|
|
@ -20,12 +20,16 @@ func TestListIntegration(t *testing.T) {
|
||||||
provider := &MgProvider{}
|
provider := &MgProvider{}
|
||||||
scmgr, err := provider.Connect()
|
scmgr, err := provider.Connect()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer scmgr.Disconnect()
|
defer func() {
|
||||||
|
err := scmgr.Disconnect()
|
||||||
|
require.NoError(t, err)
|
||||||
|
}()
|
||||||
|
|
||||||
winServices := &WinServices{
|
winServices := &WinServices{
|
||||||
ServiceNames: KnownServices,
|
ServiceNames: KnownServices,
|
||||||
}
|
}
|
||||||
winServices.Init()
|
|
||||||
|
require.NoError(t, winServices.Init())
|
||||||
services, err := winServices.listServices(scmgr)
|
services, err := winServices.listServices(scmgr)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, services, 2, "Different number of services")
|
require.Len(t, services, 2, "Different number of services")
|
||||||
|
|
@ -40,12 +44,16 @@ func TestEmptyListIntegration(t *testing.T) {
|
||||||
provider := &MgProvider{}
|
provider := &MgProvider{}
|
||||||
scmgr, err := provider.Connect()
|
scmgr, err := provider.Connect()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer scmgr.Disconnect()
|
defer func() {
|
||||||
|
err := scmgr.Disconnect()
|
||||||
|
require.NoError(t, err)
|
||||||
|
}()
|
||||||
|
|
||||||
winServices := &WinServices{
|
winServices := &WinServices{
|
||||||
ServiceNames: []string{},
|
ServiceNames: []string{},
|
||||||
}
|
}
|
||||||
winServices.Init()
|
|
||||||
|
require.NoError(t, winServices.Init())
|
||||||
services, err := winServices.listServices(scmgr)
|
services, err := winServices.listServices(scmgr)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Condition(t, func() bool { return len(services) > 20 }, "Too few service")
|
require.Condition(t, func() bool { return len(services) > 20 }, "Too few service")
|
||||||
|
|
@ -60,7 +68,8 @@ func TestGatherErrorsIntegration(t *testing.T) {
|
||||||
ServiceNames: InvalidServices,
|
ServiceNames: InvalidServices,
|
||||||
mgrProvider: &MgProvider{},
|
mgrProvider: &MgProvider{},
|
||||||
}
|
}
|
||||||
ws.Init()
|
|
||||||
|
require.NoError(t, ws.Init())
|
||||||
require.Len(t, ws.ServiceNames, 3, "Different number of services")
|
require.Len(t, ws.ServiceNames, 3, "Different number of services")
|
||||||
var acc testutil.Accumulator
|
var acc testutil.Accumulator
|
||||||
require.NoError(t, ws.Gather(&acc))
|
require.NoError(t, ws.Gather(&acc))
|
||||||
|
|
|
||||||
|
|
@ -155,9 +155,10 @@ func TestMgrErrors(t *testing.T) {
|
||||||
ServiceNames: []string{"Fake service 1"},
|
ServiceNames: []string{"Fake service 1"},
|
||||||
mgrProvider: &FakeMgProvider{testErrors[3]},
|
mgrProvider: &FakeMgProvider{testErrors[3]},
|
||||||
}
|
}
|
||||||
winServices.Init()
|
err = winServices.Init()
|
||||||
var acc3 testutil.Accumulator
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
var acc3 testutil.Accumulator
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
log.SetOutput(buf)
|
log.SetOutput(buf)
|
||||||
require.NoError(t, winServices.Gather(&acc3))
|
require.NoError(t, winServices.Gather(&acc3))
|
||||||
|
|
@ -170,9 +171,10 @@ func TestServiceErrors(t *testing.T) {
|
||||||
Log: testutil.Logger{},
|
Log: testutil.Logger{},
|
||||||
mgrProvider: &FakeMgProvider{testErrors[2]},
|
mgrProvider: &FakeMgProvider{testErrors[2]},
|
||||||
}
|
}
|
||||||
winServices.Init()
|
err := winServices.Init()
|
||||||
var acc1 testutil.Accumulator
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
var acc1 testutil.Accumulator
|
||||||
buf := &bytes.Buffer{}
|
buf := &bytes.Buffer{}
|
||||||
log.SetOutput(buf)
|
log.SetOutput(buf)
|
||||||
require.NoError(t, winServices.Gather(&acc1))
|
require.NoError(t, winServices.Gather(&acc1))
|
||||||
|
|
@ -198,7 +200,10 @@ func TestGatherContainsTag(t *testing.T) {
|
||||||
ServiceNames: []string{"Service*"},
|
ServiceNames: []string{"Service*"},
|
||||||
mgrProvider: &FakeMgProvider{testSimpleData[0]},
|
mgrProvider: &FakeMgProvider{testSimpleData[0]},
|
||||||
}
|
}
|
||||||
winServices.Init()
|
|
||||||
|
err := winServices.Init()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
var acc1 testutil.Accumulator
|
var acc1 testutil.Accumulator
|
||||||
require.NoError(t, winServices.Gather(&acc1))
|
require.NoError(t, winServices.Gather(&acc1))
|
||||||
require.Len(t, acc1.Errors, 0, "There should be no errors after gather")
|
require.Len(t, acc1.Errors, 0, "There should be no errors after gather")
|
||||||
|
|
@ -220,7 +225,9 @@ func TestExcludingNamesTag(t *testing.T) {
|
||||||
ServiceNamesExcluded: []string{"Service*"},
|
ServiceNamesExcluded: []string{"Service*"},
|
||||||
mgrProvider: &FakeMgProvider{testSimpleData[0]},
|
mgrProvider: &FakeMgProvider{testSimpleData[0]},
|
||||||
}
|
}
|
||||||
winServices.Init()
|
err := winServices.Init()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
var acc1 testutil.Accumulator
|
var acc1 testutil.Accumulator
|
||||||
require.NoError(t, winServices.Gather(&acc1))
|
require.NoError(t, winServices.Gather(&acc1))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ package win_wmi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "embed"
|
_ "embed"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
@ -110,8 +111,8 @@ func (q *Query) doQuery(acc telegraf.Accumulator) error {
|
||||||
|
|
||||||
// init COM
|
// init COM
|
||||||
if err := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED); err != nil {
|
if err := ole.CoInitializeEx(0, ole.COINIT_MULTITHREADED); err != nil {
|
||||||
oleCode := err.(*ole.OleError).Code()
|
var oleCode *ole.OleError
|
||||||
if oleCode != ole.S_OK && oleCode != sFalse {
|
if errors.As(err, &oleCode) && oleCode.Code() != ole.S_OK && oleCode.Code() != sFalse {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ func TestWmi_Gather(t *testing.T) {
|
||||||
var logger = new(testutil.Logger)
|
var logger = new(testutil.Logger)
|
||||||
var acc = new(testutil.Accumulator)
|
var acc = new(testutil.Accumulator)
|
||||||
plugin := Wmi{Queries: []Query{testQuery}, Log: logger}
|
plugin := Wmi{Queries: []Query{testQuery}, Log: logger}
|
||||||
plugin.Init()
|
require.NoError(t, plugin.Init())
|
||||||
require.NoError(t, plugin.Gather(acc))
|
require.NoError(t, plugin.Gather(acc))
|
||||||
// no errors in accumulator
|
// no errors in accumulator
|
||||||
require.Empty(t, acc.Errors)
|
require.Empty(t, acc.Errors)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue