From f626e847e72a61e656693ccefabf31340b212648 Mon Sep 17 00:00:00 2001 From: Chulong Li Date: Sun, 23 Mar 2025 14:43:25 +0800 Subject: [PATCH] Migrate pkg/kubelet/winstats to contextual logging Update the order of imports to follow the standard convention Quick update on import order for cadvisor_windows.go Update the hack files Update contextual logging in Test_convertWinApiToCadvisorApi --- hack/golangci-hints.yaml | 1 + hack/golangci.yaml | 1 + hack/logcheck.conf | 1 + pkg/kubelet/cadvisor/cadvisor_windows.go | 6 ++-- pkg/kubelet/winstats/cpu_topology.go | 9 +++--- pkg/kubelet/winstats/cpu_topology_test.go | 10 +++++-- pkg/kubelet/winstats/network_stats.go | 19 ++++++------ pkg/kubelet/winstats/network_stats_test.go | 24 ++++++++------- .../winstats/perfcounter_nodestats_test.go | 19 +++++++----- .../winstats/perfcounter_nodestats_windows.go | 30 +++++++++---------- pkg/kubelet/winstats/winstats.go | 16 +++++----- pkg/kubelet/winstats/winstats_test.go | 13 +++++--- 12 files changed, 88 insertions(+), 61 deletions(-) diff --git a/hack/golangci-hints.yaml b/hack/golangci-hints.yaml index 4f2d0910ea6..acff8273291 100644 --- a/hack/golangci-hints.yaml +++ b/hack/golangci-hints.yaml @@ -212,6 +212,7 @@ linters: contextual k8s.io/kubernetes/pkg/kubelet/oom/.* contextual k8s.io/kubernetes/pkg/kubelet/status/.* contextual k8s.io/kubernetes/pkg/kubelet/sysctl/.* + contextual k8s.io/kubernetes/pkg/kubelet/winstats/.* contextual k8s.io/kubernetes/pkg/kubelet/apis/.* contextual k8s.io/kubernetes/pkg/kubelet/kubeletconfig/.* contextual k8s.io/kubernetes/pkg/kubelet/kuberuntime/.* diff --git a/hack/golangci.yaml b/hack/golangci.yaml index 314012cf5df..545df599158 100644 --- a/hack/golangci.yaml +++ b/hack/golangci.yaml @@ -226,6 +226,7 @@ linters: contextual k8s.io/kubernetes/pkg/kubelet/oom/.* contextual k8s.io/kubernetes/pkg/kubelet/status/.* contextual k8s.io/kubernetes/pkg/kubelet/sysctl/.* + contextual k8s.io/kubernetes/pkg/kubelet/winstats/.* contextual k8s.io/kubernetes/pkg/kubelet/apis/.* contextual k8s.io/kubernetes/pkg/kubelet/kubeletconfig/.* contextual k8s.io/kubernetes/pkg/kubelet/kuberuntime/.* diff --git a/hack/logcheck.conf b/hack/logcheck.conf index 2c27499bb5e..16c51db642b 100644 --- a/hack/logcheck.conf +++ b/hack/logcheck.conf @@ -58,6 +58,7 @@ contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.* contextual k8s.io/kubernetes/pkg/kubelet/oom/.* contextual k8s.io/kubernetes/pkg/kubelet/status/.* contextual k8s.io/kubernetes/pkg/kubelet/sysctl/.* +contextual k8s.io/kubernetes/pkg/kubelet/winstats/.* contextual k8s.io/kubernetes/pkg/kubelet/apis/.* contextual k8s.io/kubernetes/pkg/kubelet/kubeletconfig/.* contextual k8s.io/kubernetes/pkg/kubelet/kuberuntime/.* diff --git a/pkg/kubelet/cadvisor/cadvisor_windows.go b/pkg/kubelet/cadvisor/cadvisor_windows.go index 9afb63c437b..5e688cbe840 100644 --- a/pkg/kubelet/cadvisor/cadvisor_windows.go +++ b/pkg/kubelet/cadvisor/cadvisor_windows.go @@ -24,6 +24,8 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" + + "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/kubelet/winstats" ) @@ -36,7 +38,7 @@ var _ Interface = new(cadvisorClient) // New creates a cAdvisor and exports its API on the specified port if port > 0. func New(imageFsInfoProvider ImageFsInfoProvider, rootPath string, cgroupRoots []string, usingLegacyStats, localStorageCapacityIsolation bool) (Interface, error) { - client, err := winstats.NewPerfCounterClient() + client, err := winstats.NewPerfCounterClient(klog.TODO()) return &cadvisorClient{ rootPath: rootPath, winStatsClient: client, @@ -57,7 +59,7 @@ func (cu *cadvisorClient) GetRequestedContainersInfo(containerName string, optio } func (cu *cadvisorClient) MachineInfo() (*cadvisorapi.MachineInfo, error) { - return cu.winStatsClient.WinMachineInfo() + return cu.winStatsClient.WinMachineInfo(klog.TODO()) } func (cu *cadvisorClient) VersionInfo() (*cadvisorapi.VersionInfo, error) { diff --git a/pkg/kubelet/winstats/cpu_topology.go b/pkg/kubelet/winstats/cpu_topology.go index c6a7eab5c1c..771e2315ae7 100644 --- a/pkg/kubelet/winstats/cpu_topology.go +++ b/pkg/kubelet/winstats/cpu_topology.go @@ -25,6 +25,7 @@ import ( "unsafe" cadvisorapi "github.com/google/cadvisor/info/v1" + "k8s.io/klog/v2" ) @@ -136,7 +137,7 @@ type processor struct { NodeID int } -func processorInfo(relationShip relationType) (int, int, []cadvisorapi.Node, error) { +func processorInfo(logger klog.Logger, relationShip relationType) (int, int, []cadvisorapi.Node, error) { // Call once to get the length of data to return var returnLength uint32 = 0 r1, _, err := procGetLogicalProcessorInformationEx.Call( @@ -161,10 +162,10 @@ func processorInfo(relationShip relationType) (int, int, []cadvisorapi.Node, err return 0, 0, nil, fmt.Errorf("call to GetLogicalProcessorInformationEx failed: %v", err) } - return convertWinApiToCadvisorApi(buffer) + return convertWinApiToCadvisorApi(logger, buffer) } -func convertWinApiToCadvisorApi(buffer []byte) (int, int, []cadvisorapi.Node, error) { +func convertWinApiToCadvisorApi(logger klog.Logger, buffer []byte) (int, int, []cadvisorapi.Node, error) { logicalProcessors := make(map[int]*processor) numofSockets := 0 numOfcores := 0 @@ -233,7 +234,7 @@ func convertWinApiToCadvisorApi(buffer []byte) (int, int, []cadvisorapi.Node, er } default: - klog.V(4).Infof("Not using Windows CPU relationship type: %d", info.Relationship) + logger.V(4).Info("Not using Windows CPU relationship type", "relationship", info.Relationship) } // Move the offset to the next SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX struct diff --git a/pkg/kubelet/winstats/cpu_topology_test.go b/pkg/kubelet/winstats/cpu_topology_test.go index f22b4840522..33f3f1c8548 100644 --- a/pkg/kubelet/winstats/cpu_topology_test.go +++ b/pkg/kubelet/winstats/cpu_topology_test.go @@ -20,10 +20,13 @@ limitations under the License. package winstats import ( - cadvisorapi "github.com/google/cadvisor/info/v1" - "github.com/stretchr/testify/assert" "testing" "unsafe" + + cadvisorapi "github.com/google/cadvisor/info/v1" + "github.com/stretchr/testify/assert" + + "k8s.io/klog/v2/ktesting" ) func TestGROUP_AFFINITY_Processors(t *testing.T) { @@ -221,6 +224,7 @@ func TestCpusToGroupAffinity(t *testing.T) { } func Test_convertWinApiToCadvisorApi(t *testing.T) { + logger, _ := ktesting.NewTestContext(t) tests := []struct { name string buffer []byte @@ -312,7 +316,7 @@ func Test_convertWinApiToCadvisorApi(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - numOfCores, numOfSockets, nodes, err := convertWinApiToCadvisorApi(tt.buffer) + numOfCores, numOfSockets, nodes, err := convertWinApiToCadvisorApi(logger, tt.buffer) if tt.wantErr { assert.Error(t, err) return diff --git a/pkg/kubelet/winstats/network_stats.go b/pkg/kubelet/winstats/network_stats.go index eb7f4cd8c53..6ce7a730a56 100644 --- a/pkg/kubelet/winstats/network_stats.go +++ b/pkg/kubelet/winstats/network_stats.go @@ -23,6 +23,7 @@ import ( "sync" cadvisorapi "github.com/google/cadvisor/info/v1" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog/v2" ) @@ -107,52 +108,52 @@ func newNetworkCounters() (*networkCounter, error) { }, nil } -func (n *networkCounter) getData() ([]cadvisorapi.InterfaceStats, error) { +func (n *networkCounter) getData(logger klog.Logger) ([]cadvisorapi.InterfaceStats, error) { packetsReceivedPerSecondData, err := n.packetsReceivedPerSecondCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get packetsReceivedPerSecond perf counter data") + logger.Error(err, "Unable to get packetsReceivedPerSecond perf counter data") return nil, err } packetsSentPerSecondData, err := n.packetsSentPerSecondCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get packetsSentPerSecond perf counter data") + logger.Error(err, "Unable to get packetsSentPerSecond perf counter data") return nil, err } bytesReceivedPerSecondData, err := n.bytesReceivedPerSecondCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get bytesReceivedPerSecond perf counter data") + logger.Error(err, "Unable to get bytesReceivedPerSecond perf counter data") return nil, err } bytesSentPerSecondData, err := n.bytesSentPerSecondCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get bytesSentPerSecond perf counter data") + logger.Error(err, "Unable to get bytesSentPerSecond perf counter data") return nil, err } packetsReceivedDiscardedData, err := n.packetsReceivedDiscardedCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get packetsReceivedDiscarded perf counter data") + logger.Error(err, "Unable to get packetsReceivedDiscarded perf counter data") return nil, err } packetsReceivedErrorsData, err := n.packetsReceivedErrorsCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get packetsReceivedErrors perf counter data") + logger.Error(err, "Unable to get packetsReceivedErrors perf counter data") return nil, err } packetsOutboundDiscardedData, err := n.packetsOutboundDiscardedCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get packetsOutboundDiscarded perf counter data") + logger.Error(err, "Unable to get packetsOutboundDiscarded perf counter data") return nil, err } packetsOutboundErrorsData, err := n.packetsOutboundErrorsCounter.getDataList() if err != nil { - klog.ErrorS(err, "Unable to get packetsOutboundErrors perf counter data") + logger.Error(err, "Unable to get packetsOutboundErrors perf counter data") return nil, err } diff --git a/pkg/kubelet/winstats/network_stats_test.go b/pkg/kubelet/winstats/network_stats_test.go index a9e18f90863..124de535f96 100644 --- a/pkg/kubelet/winstats/network_stats_test.go +++ b/pkg/kubelet/winstats/network_stats_test.go @@ -25,6 +25,8 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/stretchr/testify/assert" + + "k8s.io/klog/v2/ktesting" ) const fakeAdapterName = "fake-adapter" @@ -83,13 +85,14 @@ func TestNewNetworkCounters(t *testing.T) { } func TestNetworkGetData(t *testing.T) { + logger, _ := ktesting.NewTestContext(t) netCounter := newFakedNetworkCounters(false) // Add a net adapter that no longer exists in the adapterStats cache. It will // have to be cleaned up after processing the data. netCounter.adapterStats["other-fake-adapter"] = cadvisorapi.InterfaceStats{} - data, err := netCounter.getData() + data, err := netCounter.getData(logger) assert.NoError(t, err) // Make sure that we only have data from a single net adapter. @@ -107,7 +110,7 @@ func TestNetworkGetData(t *testing.T) { assert.Equal(t, []cadvisorapi.InterfaceStats{expectedStats}, data) // The returned data is cumulative, so the resulting values should be double on a second call. - data, err = netCounter.getData() + data, err = netCounter.getData(logger) assert.NoError(t, err) expectedStats = cadvisorapi.InterfaceStats{ Name: fakeAdapterName, @@ -124,51 +127,52 @@ func TestNetworkGetData(t *testing.T) { } func TestNetworkGetDataFailures(t *testing.T) { + logger, _ := ktesting.NewTestContext(t) netCounter := newFakedNetworkCounters(true) - _, err := netCounter.getData() + _, err := netCounter.getData(logger) expectedMsg := "Expected getDataList error." if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) } - _, err = netCounter.getData() + _, err = netCounter.getData(logger) netCounter.packetsReceivedPerSecondCounter.(*fakePerfCounterImpl).raiseError = false if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) } - _, err = netCounter.getData() + _, err = netCounter.getData(logger) netCounter.packetsSentPerSecondCounter.(*fakePerfCounterImpl).raiseError = false if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) } - _, err = netCounter.getData() + _, err = netCounter.getData(logger) netCounter.bytesReceivedPerSecondCounter.(*fakePerfCounterImpl).raiseError = false if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) } - _, err = netCounter.getData() + _, err = netCounter.getData(logger) netCounter.bytesSentPerSecondCounter.(*fakePerfCounterImpl).raiseError = false if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) } - _, err = netCounter.getData() + _, err = netCounter.getData(logger) netCounter.packetsReceivedDiscardedCounter.(*fakePerfCounterImpl).raiseError = false if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) } - _, err = netCounter.getData() + _, err = netCounter.getData(logger) netCounter.packetsReceivedErrorsCounter.(*fakePerfCounterImpl).raiseError = false if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) } - _, err = netCounter.getData() + _, err = netCounter.getData(logger) netCounter.packetsOutboundDiscardedCounter.(*fakePerfCounterImpl).raiseError = false if err == nil || err.Error() != expectedMsg { t.Fatalf("expected error message `%s` but got `%v`", expectedMsg, err) diff --git a/pkg/kubelet/winstats/perfcounter_nodestats_test.go b/pkg/kubelet/winstats/perfcounter_nodestats_test.go index abf68a4f716..4ae39d55999 100644 --- a/pkg/kubelet/winstats/perfcounter_nodestats_test.go +++ b/pkg/kubelet/winstats/perfcounter_nodestats_test.go @@ -30,11 +30,14 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/google/uuid" "github.com/stretchr/testify/assert" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/klog/v2/ktesting" ) func TestMonitoring(t *testing.T) { - counterClient, err := NewPerfCounterClient() + logger, _ := ktesting.NewTestContext(t) + counterClient, err := NewPerfCounterClient(logger) assert.NoError(t, err) // assert that startMonitoring has been called. nodeInfo should be set. @@ -54,13 +57,14 @@ func TestMonitoring(t *testing.T) { } func TestGetMachineInfo(t *testing.T) { + logger, _ := ktesting.NewTestContext(t) p := perfCounterNodeStatsClient{ nodeInfo: nodeInfo{ memoryPhysicalCapacityBytes: 100, }, } - machineInfo, err := p.getMachineInfo() + machineInfo, err := p.getMachineInfo(logger) assert.NoError(t, err) assert.Equal(t, uint64(100), machineInfo.MemoryCapacity) hostname, _ := os.Hostname() @@ -92,6 +96,7 @@ func TestGetVersionInfo(t *testing.T) { } func TestCollectMetricsData(t *testing.T) { + logger, _ := ktesting.NewTestContext(t) p := perfCounterNodeStatsClient{} cpuCounter := &fakePerfCounterImpl{ @@ -109,28 +114,28 @@ func TestCollectMetricsData(t *testing.T) { networkAdapterCounter := newFakedNetworkCounters(true) // Checking the error cases first. - p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) + p.collectMetricsData(logger, cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) metrics, _ := p.getNodeMetrics() expectedMetrics := nodeMetrics{} assert.Equal(t, expectedMetrics, metrics) cpuCounter.raiseError = false - p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) + p.collectMetricsData(logger, cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) metrics, _ = p.getNodeMetrics() assert.Equal(t, expectedMetrics, metrics) memWorkingSetCounter.raiseError = false - p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) + p.collectMetricsData(logger, cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) metrics, _ = p.getNodeMetrics() assert.Equal(t, expectedMetrics, metrics) memCommittedBytesCounter.raiseError = false - p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) + p.collectMetricsData(logger, cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) metrics, _ = p.getNodeMetrics() assert.Equal(t, expectedMetrics, metrics) networkAdapterCounter = newFakedNetworkCounters(false) - p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) + p.collectMetricsData(logger, cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) metrics, _ = p.getNodeMetrics() expectedMetrics = nodeMetrics{ cpuUsageCoreNanoSeconds: uint64(ProcessorCount()) * 1e7, diff --git a/pkg/kubelet/winstats/perfcounter_nodestats_windows.go b/pkg/kubelet/winstats/perfcounter_nodestats_windows.go index 80461df0fd3..7083aea47ec 100644 --- a/pkg/kubelet/winstats/perfcounter_nodestats_windows.go +++ b/pkg/kubelet/winstats/perfcounter_nodestats_windows.go @@ -31,14 +31,14 @@ import ( "time" "unsafe" - utilfeature "k8s.io/apiserver/pkg/util/feature" - kubefeatures "k8s.io/kubernetes/pkg/features" - cadvisorapi "github.com/google/cadvisor/info/v1" "golang.org/x/sys/windows" "golang.org/x/sys/windows/registry" + "k8s.io/apimachinery/pkg/util/wait" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog/v2" + kubefeatures "k8s.io/kubernetes/pkg/features" ) const ( @@ -92,10 +92,10 @@ var ( const allProcessorGroups = 0xFFFF // NewPerfCounterClient creates a client using perf counters -func NewPerfCounterClient() (Client, error) { +func NewPerfCounterClient(logger klog.Logger) (Client, error) { // Initialize the cache initCache := cpuUsageCoreNanoSecondsCache{0, 0} - return newClient(&perfCounterNodeStatsClient{ + return newClient(logger, &perfCounterNodeStatsClient{ cpuUsageCoreNanoSecondsCache: initCache, }) } @@ -109,7 +109,7 @@ type perfCounterNodeStatsClient struct { cpuUsageCoreNanoSecondsCache } -func (p *perfCounterNodeStatsClient) startMonitoring() error { +func (p *perfCounterNodeStatsClient) startMonitoring(logger klog.Logger) error { memory, err := getPhysicallyInstalledSystemMemoryBytes() if err != nil { return err @@ -148,7 +148,7 @@ func (p *perfCounterNodeStatsClient) startMonitoring() error { } go wait.Forever(func() { - p.collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) + p.collectMetricsData(logger, cpuCounter, memWorkingSetCounter, memCommittedBytesCounter, networkAdapterCounter) }, perfCounterUpdatePeriod) // Cache the CPU usage every defaultCachePeriod @@ -165,7 +165,7 @@ func (p *perfCounterNodeStatsClient) startMonitoring() error { return nil } -func (p *perfCounterNodeStatsClient) getMachineInfo() (*cadvisorapi.MachineInfo, error) { +func (p *perfCounterNodeStatsClient) getMachineInfo(logger klog.Logger) (*cadvisorapi.MachineInfo, error) { hostname, err := os.Hostname() if err != nil { return nil, err @@ -190,7 +190,7 @@ func (p *perfCounterNodeStatsClient) getMachineInfo() (*cadvisorapi.MachineInfo, } if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.WindowsCPUAndMemoryAffinity) { - numOfPysicalCores, numOfSockets, topology, err := processorInfo(relationAll) + numOfPysicalCores, numOfSockets, topology, err := processorInfo(logger, relationAll) if err != nil { return nil, err } @@ -241,29 +241,29 @@ func (p *perfCounterNodeStatsClient) getNodeInfo() nodeInfo { return p.nodeInfo } -func (p *perfCounterNodeStatsClient) collectMetricsData(cpuCounter, memWorkingSetCounter, memCommittedBytesCounter perfCounter, networkAdapterCounter *networkCounter) { +func (p *perfCounterNodeStatsClient) collectMetricsData(logger klog.Logger, cpuCounter, memWorkingSetCounter, memCommittedBytesCounter perfCounter, networkAdapterCounter *networkCounter) { cpuValue, err := cpuCounter.getData() cpuCores := ProcessorCount() if err != nil { - klog.ErrorS(err, "Unable to get cpu perf counter data") + logger.Error(err, "Unable to get cpu perf counter data") return } memWorkingSetValue, err := memWorkingSetCounter.getData() if err != nil { - klog.ErrorS(err, "Unable to get memWorkingSet perf counter data") + logger.Error(err, "Unable to get memWorkingSet perf counter data") return } memCommittedBytesValue, err := memCommittedBytesCounter.getData() if err != nil { - klog.ErrorS(err, "Unable to get memCommittedBytes perf counter data") + logger.Error(err, "Unable to get memCommittedBytes perf counter data") return } - networkAdapterStats, err := networkAdapterCounter.getData() + networkAdapterStats, err := networkAdapterCounter.getData(logger) if err != nil { - klog.ErrorS(err, "Unable to get network adapter perf counter data") + logger.Error(err, "Unable to get network adapter perf counter data") return } diff --git a/pkg/kubelet/winstats/winstats.go b/pkg/kubelet/winstats/winstats.go index 84fe6212ea5..12ee8edfa96 100644 --- a/pkg/kubelet/winstats/winstats.go +++ b/pkg/kubelet/winstats/winstats.go @@ -27,6 +27,8 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" + + "k8s.io/klog/v2" ) var ( @@ -36,7 +38,7 @@ var ( // Client is an interface that is used to get stats information. type Client interface { WinContainerInfos() (map[string]cadvisorapiv2.ContainerInfo, error) - WinMachineInfo() (*cadvisorapi.MachineInfo, error) + WinMachineInfo(logger klog.Logger) (*cadvisorapi.MachineInfo, error) WinVersionInfo() (*cadvisorapi.VersionInfo, error) GetDirFsInfo(path string) (cadvisorapiv2.FsInfo, error) } @@ -47,10 +49,10 @@ type StatsClient struct { } type winNodeStatsClient interface { - startMonitoring() error + startMonitoring(logger klog.Logger) error getNodeMetrics() (nodeMetrics, error) getNodeInfo() nodeInfo - getMachineInfo() (*cadvisorapi.MachineInfo, error) + getMachineInfo(logger klog.Logger) (*cadvisorapi.MachineInfo, error) getVersionInfo() (*cadvisorapi.VersionInfo, error) } @@ -77,11 +79,11 @@ type cpuUsageCoreNanoSecondsCache struct { } // newClient constructs a Client. -func newClient(statsNodeClient winNodeStatsClient) (Client, error) { +func newClient(logger klog.Logger, statsNodeClient winNodeStatsClient) (Client, error) { statsClient := new(StatsClient) statsClient.client = statsNodeClient - err := statsClient.client.startMonitoring() + err := statsClient.client.startMonitoring(logger) if err != nil { return nil, err } @@ -105,8 +107,8 @@ func (c *StatsClient) WinContainerInfos() (map[string]cadvisorapiv2.ContainerInf // WinMachineInfo returns a cadvisorapi.MachineInfo with details about the // node machine. Analogous to cadvisor MachineInfo method. -func (c *StatsClient) WinMachineInfo() (*cadvisorapi.MachineInfo, error) { - return c.client.getMachineInfo() +func (c *StatsClient) WinMachineInfo(logger klog.Logger) (*cadvisorapi.MachineInfo, error) { + return c.client.getMachineInfo(logger) } // WinVersionInfo returns a cadvisorapi.VersionInfo with version info of diff --git a/pkg/kubelet/winstats/winstats_test.go b/pkg/kubelet/winstats/winstats_test.go index 7bdb5cba301..29776f89394 100644 --- a/pkg/kubelet/winstats/winstats_test.go +++ b/pkg/kubelet/winstats/winstats_test.go @@ -27,13 +27,16 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" "github.com/stretchr/testify/assert" + + "k8s.io/klog/v2" + "k8s.io/klog/v2/ktesting" ) var timeStamp = time.Now() type fakeWinNodeStatsClient struct{} -func (f fakeWinNodeStatsClient) startMonitoring() error { +func (f fakeWinNodeStatsClient) startMonitoring(logger klog.Logger) error { return nil } @@ -53,7 +56,7 @@ func (f fakeWinNodeStatsClient) getNodeInfo() nodeInfo { memoryPhysicalCapacityBytes: 1.6e+10, } } -func (f fakeWinNodeStatsClient) getMachineInfo() (*cadvisorapi.MachineInfo, error) { +func (f fakeWinNodeStatsClient) getMachineInfo(logger klog.Logger) (*cadvisorapi.MachineInfo, error) { return &cadvisorapi.MachineInfo{ NumCores: 4, MemoryCapacity: 1.6e+10, @@ -114,9 +117,10 @@ func TestWinContainerInfos(t *testing.T) { } func TestWinMachineInfo(t *testing.T) { + logger, _ := ktesting.NewTestContext(t) c := getClient(t) - machineInfo, err := c.WinMachineInfo() + machineInfo, err := c.WinMachineInfo(logger) assert.NoError(t, err) assert.Equal(t, machineInfo, &cadvisorapi.MachineInfo{ NumCores: 4, @@ -155,8 +159,9 @@ func TestGetDirFsInfo(t *testing.T) { } func getClient(t *testing.T) Client { + logger, _ := ktesting.NewTestContext(t) f := fakeWinNodeStatsClient{} - c, err := newClient(f) + c, err := newClient(logger, f) assert.NoError(t, err) assert.NotNil(t, c) return c