mirror of
https://github.com/outbackdingo/kubernetes.git
synced 2026-01-27 10:19:35 +00:00
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
This commit is contained in:
@@ -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/.*
|
||||
|
||||
@@ -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/.*
|
||||
|
||||
@@ -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/.*
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user