mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-10-17 10:09:05 +02:00
hyperv: close PDH queries of sub-collectors on Close (#2539)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9ed3e28d94
commit
3a7bac6fe8
@@ -183,52 +183,52 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
|
||||
subCollectorADAccessProcesses: {
|
||||
build: c.buildADAccessProcesses,
|
||||
collect: c.collectADAccessProcesses,
|
||||
close: c.perfDataCollectorADAccessProcesses.Close,
|
||||
close: func() { c.perfDataCollectorADAccessProcesses.Close() },
|
||||
},
|
||||
subCollectorTransportQueues: {
|
||||
build: c.buildTransportQueues,
|
||||
collect: c.collectTransportQueues,
|
||||
close: c.perfDataCollectorTransportQueues.Close,
|
||||
close: func() { c.perfDataCollectorTransportQueues.Close() },
|
||||
},
|
||||
subCollectorHttpProxy: {
|
||||
build: c.buildHTTPProxy,
|
||||
collect: c.collectHTTPProxy,
|
||||
close: c.perfDataCollectorHTTPProxy.Close,
|
||||
close: func() { c.perfDataCollectorHTTPProxy.Close() },
|
||||
},
|
||||
subCollectorActiveSync: {
|
||||
build: c.buildActiveSync,
|
||||
collect: c.collectActiveSync,
|
||||
close: c.perfDataCollectorActiveSync.Close,
|
||||
close: func() { c.perfDataCollectorActiveSync.Close() },
|
||||
},
|
||||
subCollectorAvailabilityService: {
|
||||
build: c.buildAvailabilityService,
|
||||
collect: c.collectAvailabilityService,
|
||||
close: c.perfDataCollectorAvailabilityService.Close,
|
||||
close: func() { c.perfDataCollectorAvailabilityService.Close() },
|
||||
},
|
||||
subCollectorOutlookWebAccess: {
|
||||
build: c.buildOWA,
|
||||
collect: c.collectOWA,
|
||||
close: c.perfDataCollectorOWA.Close,
|
||||
close: func() { c.perfDataCollectorOWA.Close() },
|
||||
},
|
||||
subCollectorAutoDiscover: {
|
||||
build: c.buildAutoDiscover,
|
||||
collect: c.collectAutoDiscover,
|
||||
close: c.perfDataCollectorAutoDiscover.Close,
|
||||
close: func() { c.perfDataCollectorAutoDiscover.Close() },
|
||||
},
|
||||
subCollectorWorkloadManagement: {
|
||||
build: c.buildWorkloadManagementWorkloads,
|
||||
collect: c.collectWorkloadManagementWorkloads,
|
||||
close: c.perfDataCollectorWorkloadManagementWorkloads.Close,
|
||||
close: func() { c.perfDataCollectorWorkloadManagementWorkloads.Close() },
|
||||
},
|
||||
subCollectorRpcClientAccess: {
|
||||
build: c.buildRpcClientAccess,
|
||||
collect: c.collectRpcClientAccess,
|
||||
close: c.perfDataCollectorRpcClientAccess.Close,
|
||||
close: func() { c.perfDataCollectorRpcClientAccess.Close() },
|
||||
},
|
||||
subCollectorMapiHTTPEmsmdb: {
|
||||
build: c.buildMapiHTTPEmsMDB,
|
||||
collect: c.collectMapiHTTPEmsMDB,
|
||||
close: c.perfDataCollectorMapiHTTPEmsMDB.Close,
|
||||
close: func() { c.perfDataCollectorMapiHTTPEmsMDB.Close() },
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -182,48 +182,48 @@ func (c *Collector) Build(logger *slog.Logger, miSession *mi.Session) error {
|
||||
subCollectorDataStore: {
|
||||
build: c.buildDataStore,
|
||||
collect: c.collectDataStore,
|
||||
close: c.perfDataCollectorDataStore.Close,
|
||||
close: func() { c.perfDataCollectorDataStore.Close() },
|
||||
minBuildNumber: osversion.LTSC2022,
|
||||
},
|
||||
subCollectorDynamicMemoryBalancer: {
|
||||
build: c.buildDynamicMemoryBalancer,
|
||||
collect: c.collectDynamicMemoryBalancer,
|
||||
close: c.perfDataCollectorDynamicMemoryBalancer.Close,
|
||||
close: func() { c.perfDataCollectorDynamicMemoryBalancer.Close() },
|
||||
},
|
||||
subCollectorDynamicMemoryVM: {
|
||||
build: c.buildDynamicMemoryVM,
|
||||
collect: c.collectDynamicMemoryVM,
|
||||
close: c.perfDataCollectorDynamicMemoryVM.Close,
|
||||
close: func() { c.perfDataCollectorDynamicMemoryVM.Close() },
|
||||
},
|
||||
subCollectorHost: {
|
||||
build: c.buildHost,
|
||||
collect: c.collectHost,
|
||||
close: c.perfDataCollectorLogicalProcessor.Close,
|
||||
close: func() { c.perfDataCollectorLogicalProcessor.Close() },
|
||||
},
|
||||
subCollectorHypervisorLogicalProcessor: {
|
||||
build: c.buildHypervisorLogicalProcessor,
|
||||
collect: c.collectHypervisorLogicalProcessor,
|
||||
close: c.perfDataCollectorHypervisorLogicalProcessor.Close,
|
||||
close: func() { c.perfDataCollectorHypervisorLogicalProcessor.Close() },
|
||||
},
|
||||
subCollectorHypervisorRootPartition: {
|
||||
build: c.buildHypervisorRootPartition,
|
||||
collect: c.collectHypervisorRootPartition,
|
||||
close: c.perfDataCollectorHypervisorRootPartition.Close,
|
||||
close: func() { c.perfDataCollectorHypervisorRootPartition.Close() },
|
||||
},
|
||||
subCollectorHypervisorRootVirtualProcessor: {
|
||||
build: c.buildHypervisorRootVirtualProcessor,
|
||||
collect: c.collectHypervisorRootVirtualProcessor,
|
||||
close: c.perfDataCollectorHypervisorRootVirtualProcessor.Close,
|
||||
close: func() { c.perfDataCollectorHypervisorRootVirtualProcessor.Close() },
|
||||
},
|
||||
subCollectorHypervisorVirtualProcessor: {
|
||||
build: c.buildHypervisorVirtualProcessor,
|
||||
collect: c.collectHypervisorVirtualProcessor,
|
||||
close: c.perfDataCollectorHypervisorVirtualProcessor.Close,
|
||||
close: func() { c.perfDataCollectorHypervisorVirtualProcessor.Close() },
|
||||
},
|
||||
subCollectorLegacyNetworkAdapter: {
|
||||
build: c.buildLegacyNetworkAdapter,
|
||||
collect: c.collectLegacyNetworkAdapter,
|
||||
close: c.perfDataCollectorLegacyNetworkAdapter.Close,
|
||||
close: func() { c.perfDataCollectorLegacyNetworkAdapter.Close() },
|
||||
},
|
||||
subCollectorReplicaVM: {
|
||||
build: c.buildReplicaVM,
|
||||
@@ -234,38 +234,38 @@ func (c *Collector) Build(logger *slog.Logger, miSession *mi.Session) error {
|
||||
subCollectorVirtualMachineHealthSummary: {
|
||||
build: c.buildVirtualMachineHealthSummary,
|
||||
collect: c.collectVirtualMachineHealthSummary,
|
||||
close: c.perfDataCollectorVirtualMachineHealthSummary.Close,
|
||||
close: func() { c.perfDataCollectorVirtualMachineHealthSummary.Close() },
|
||||
},
|
||||
subCollectorVirtualMachineVidPartition: {
|
||||
build: c.buildVirtualMachineVidPartition,
|
||||
collect: c.collectVirtualMachineVidPartition,
|
||||
close: c.perfDataCollectorVirtualMachineVidPartition.Close,
|
||||
close: func() { c.perfDataCollectorVirtualMachineVidPartition.Close() },
|
||||
},
|
||||
subCollectorVirtualNetworkAdapter: {
|
||||
build: c.buildVirtualNetworkAdapter,
|
||||
collect: c.collectVirtualNetworkAdapter,
|
||||
close: c.perfDataCollectorVirtualNetworkAdapter.Close,
|
||||
close: func() { c.perfDataCollectorVirtualNetworkAdapter.Close() },
|
||||
},
|
||||
subCollectorVirtualNetworkAdapterDropReasons: {
|
||||
build: c.buildVirtualNetworkAdapterDropReasons,
|
||||
collect: c.collectVirtualNetworkAdapterDropReasons,
|
||||
close: c.perfDataCollectorVirtualNetworkAdapterDropReasons.Close,
|
||||
close: func() { c.perfDataCollectorVirtualNetworkAdapterDropReasons.Close() },
|
||||
},
|
||||
subCollectorVirtualSMB: {
|
||||
build: c.buildVirtualSMB,
|
||||
collect: c.collectVirtualSMB,
|
||||
close: c.perfDataCollectorVirtualSMB.Close,
|
||||
close: func() { c.perfDataCollectorVirtualSMB.Close() },
|
||||
minBuildNumber: osversion.LTSC2022,
|
||||
},
|
||||
subCollectorVirtualStorageDevice: {
|
||||
build: c.buildVirtualStorageDevice,
|
||||
collect: c.collectVirtualStorageDevice,
|
||||
close: c.perfDataCollectorVirtualStorageDevice.Close,
|
||||
close: func() { c.perfDataCollectorVirtualStorageDevice.Close() },
|
||||
},
|
||||
subCollectorVirtualSwitch: {
|
||||
build: c.buildVirtualSwitch,
|
||||
collect: c.collectVirtualSwitch,
|
||||
close: c.perfDataCollectorVirtualSwitch.Close,
|
||||
close: func() { c.perfDataCollectorVirtualSwitch.Close() },
|
||||
},
|
||||
subCollectorWMIHealth: {
|
||||
build: c.buildWMIHealth,
|
||||
|
||||
@@ -18,9 +18,12 @@
|
||||
package hyperv_test
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/collector/hyperv"
|
||||
"github.com/prometheus-community/windows_exporter/internal/pdh"
|
||||
"github.com/prometheus-community/windows_exporter/internal/utils/testutils"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -45,3 +48,17 @@ func TestCollector(t *testing.T) {
|
||||
require.InDelta(t, 1, metric.GetGauge().GetValue(), 0, "Hyper-V WMI health query failed")
|
||||
}
|
||||
}
|
||||
|
||||
// TestCloseReleasesQuery ensures Close releases the PDH queries of the sub-collectors.
|
||||
func TestCloseReleasesQuery(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
c := hyperv.New(&hyperv.Config{CollectorsEnabled: []string{"dynamic_memory_balancer"}})
|
||||
|
||||
require.NoError(t, c.Build(slog.New(slog.DiscardHandler), nil))
|
||||
require.NoError(t, c.Close())
|
||||
|
||||
ch := make(chan prometheus.Metric, 100)
|
||||
|
||||
require.ErrorIs(t, c.Collect(ch, time.Second), pdh.ErrPerformanceCounterNotInitialized)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user