diff --git a/.github/workflows/pr-check.yaml b/.github/workflows/pr-check.yaml index 9fd20a28..23a037b2 100644 --- a/.github/workflows/pr-check.yaml +++ b/.github/workflows/pr-check.yaml @@ -37,7 +37,7 @@ jobs: - name: check run: | PR_TITLE_PREFIX=$(echo "$PR_TITLE" | cut -d':' -f1) - if [[ -d "internal/collector/$PR_TITLE_PREFIX" ]] || [[ -d "internal/$PR_TITLE_PREFIX" ]] || [[ -d "pkg/$PR_TITLE_PREFIX" ]] || [[ -d "$PR_TITLE_PREFIX" ]] || [[ "$PR_TITLE_PREFIX" == "docs" ]] || [[ "$PR_TITLE_PREFIX" == "ci" ]] || [[ "$PR_TITLE_PREFIX" == "revert" ]] || [[ "$PR_TITLE_PREFIX" == "fix" ]] || [[ "$PR_TITLE_PREFIX" == "feat" ]] || [[ "$PR_TITLE_PREFIX" == "chore" ]] || [[ "$PR_TITLE_PREFIX" == "chore(docs)" ]] || [[ "$PR_TITLE_PREFIX" == "chore(deps)" ]] || [[ "$PR_TITLE_PREFIX" == "*" ]] || [[ "$PR_TITLE_PREFIX" == "Synchronize common files from prometheus/prometheus" ]]; then + if [[ -d "internal/collector/$PR_TITLE_PREFIX" ]] || [[ -d "internal/$PR_TITLE_PREFIX" ]] || [[ -d "pkg/$PR_TITLE_PREFIX" ]] || [[ -d "$PR_TITLE_PREFIX" ]] || [[ "$PR_TITLE_PREFIX" == "docs" ]] || [[ "$PR_TITLE_PREFIX" == "ci" ]] || [[ "$PR_TITLE_PREFIX" == "revert" ]] || [[ "$PR_TITLE_PREFIX" == "fix" ]] || [[ "$PR_TITLE_PREFIX" == "fix(deps)" ]] || [[ "$PR_TITLE_PREFIX" == "feat" ]] || [[ "$PR_TITLE_PREFIX" == "chore" ]] || [[ "$PR_TITLE_PREFIX" == "chore(docs)" ]] || [[ "$PR_TITLE_PREFIX" == "chore(deps)" ]] || [[ "$PR_TITLE_PREFIX" == "*" ]] || [[ "$PR_TITLE_PREFIX" == "Release"* ]] || [[ "$PR_TITLE_PREFIX" == "Synchronize common files from prometheus/prometheus" ]]; then exit 0 fi diff --git a/internal/pdh/collector.go b/internal/pdh/collector.go index 260ae988..43b9d33e 100644 --- a/internal/pdh/collector.go +++ b/internal/pdh/collector.go @@ -122,6 +122,11 @@ func NewCollectorWithReflection(resultType CounterType, object string, instances continue } + secondValue := strings.HasSuffix(counterName, ",secondvalue") + if secondValue { + counterName = strings.TrimSuffix(counterName, ",secondvalue") + } + var counter Counter if counter, ok = collector.counters[counterName]; !ok { counter = Counter{ @@ -132,9 +137,7 @@ func NewCollectorWithReflection(resultType CounterType, object string, instances } } - if strings.HasSuffix(counterName, ",secondvalue") { - counterName = strings.TrimSuffix(counterName, ",secondvalue") - + if secondValue { counter.FieldIndexSecondValue = f.Index[0] } else { counter.FieldIndexValue = f.Index[0] @@ -198,11 +201,14 @@ func NewCollectorWithReflection(resultType CounterType, object string, instances continue } - ci := (*CounterInfo)(unsafe.Pointer(&buf[0])) - counter.Type = ci.DwType - counter.Desc = windows.UTF16PtrToString(ci.SzExplainText) - counter.Desc = windows.UTF16PtrToString(ci.SzExplainText) + counterInfo := (*CounterInfo)(unsafe.Pointer(&buf[0])) + if counterInfo == nil { + errs = append(errs, errors.New("GetCounterInfo: counter info is nil")) + continue + } + + counter.Type = counterInfo.DwType if val, ok := SupportedCounterTypes[counter.Type]; ok { counter.MetricType = val } else { diff --git a/internal/utils/counter.go b/internal/utils/counter.go index bf280896..f4147c94 100644 --- a/internal/utils/counter.go +++ b/internal/utils/counter.go @@ -31,6 +31,7 @@ func NewCounter(lastValue uint32) Counter { func (c *Counter) AddValue(value uint32) { c.totalValue += float64(value - c.lastValue) + c.lastValue = value } func (c *Counter) Value() float64 { diff --git a/internal/utils/counter_test.go b/internal/utils/counter_test.go index cb55fcb4..12b3b4eb 100644 --- a/internal/utils/counter_test.go +++ b/internal/utils/counter_test.go @@ -20,20 +20,36 @@ import ( "testing" "github.com/prometheus-community/windows_exporter/internal/utils" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestCounter(t *testing.T) { t.Parallel() c := utils.NewCounter(0) - assert.Equal(t, 0.0, c.Value()) //nolint:testifylint + require.Equal(t, 0.0, c.Value()) //nolint:testifylint - c.AddValue(1) + c.AddValue(10) - assert.Equal(t, 1.0, c.Value()) //nolint:testifylint + require.Equal(t, 10.0, c.Value()) //nolint:testifylint - c.AddValue(math.MaxUint32) + c.AddValue(50) - assert.Equal(t, float64(math.MaxUint32)+1.0, c.Value()) //nolint:testifylint + require.Equal(t, 50.0, c.Value()) //nolint:testifylint + + c.AddValue(math.MaxUint32 - 10) + + require.Equal(t, float64(math.MaxUint32)-10, c.Value()) //nolint:testifylint + + c.AddValue(20) + + require.Equal(t, float64(math.MaxUint32)+21, c.Value()) //nolint:testifylint + + c.AddValue(40) + + require.Equal(t, float64(math.MaxUint32)+41, c.Value()) //nolint:testifylint + + c.AddValue(math.MaxUint32 - 10) + + require.Equal(t, float64(math.MaxUint32)*2-9, c.Value()) //nolint:testifylint }