...
1
2
3
4
19
20 package stats
21
22 import (
23 "fmt"
24 "time"
25
26 cadvisorapiv2 "github.com/google/cadvisor/info/v2"
27 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28 runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
29 statsapi "k8s.io/kubelet/pkg/apis/stats/v1alpha1"
30 )
31
32 func (p *criStatsProvider) addCRIPodContainerStats(criSandboxStat *runtimeapi.PodSandboxStats,
33 ps *statsapi.PodStats, fsIDtoInfo map[runtimeapi.FilesystemIdentifier]*cadvisorapiv2.FsInfo,
34 containerMap map[string]*runtimeapi.Container,
35 podSandbox *runtimeapi.PodSandbox,
36 rootFsInfo *cadvisorapiv2.FsInfo, updateCPUNanoCoreUsage bool) error {
37 for _, criContainerStat := range criSandboxStat.Linux.Containers {
38 container, found := containerMap[criContainerStat.Attributes.Id]
39 if !found {
40 continue
41 }
42
43 cs, err := p.makeContainerStats(criContainerStat, container, rootFsInfo, fsIDtoInfo, podSandbox.GetMetadata(),
44 updateCPUNanoCoreUsage)
45 if err != nil {
46 return fmt.Errorf("make container stats: %w", err)
47 }
48 ps.Containers = append(ps.Containers, *cs)
49 }
50 return nil
51 }
52
53 func addCRIPodNetworkStats(ps *statsapi.PodStats, criPodStat *runtimeapi.PodSandboxStats) {
54 if criPodStat == nil || criPodStat.Linux == nil || criPodStat.Linux.Network == nil {
55 return
56 }
57 criNetwork := criPodStat.Linux.Network
58 iStats := statsapi.NetworkStats{
59 Time: metav1.NewTime(time.Unix(0, criNetwork.Timestamp)),
60 InterfaceStats: criInterfaceToSummary(criNetwork.DefaultInterface),
61 Interfaces: make([]statsapi.InterfaceStats, 0, len(criNetwork.Interfaces)),
62 }
63 for _, iface := range criNetwork.Interfaces {
64 iStats.Interfaces = append(iStats.Interfaces, criInterfaceToSummary(iface))
65 }
66 ps.Network = &iStats
67 }
68
69 func addCRIPodMemoryStats(ps *statsapi.PodStats, criPodStat *runtimeapi.PodSandboxStats) {
70 if criPodStat == nil || criPodStat.Linux == nil || criPodStat.Linux.Memory == nil {
71 return
72 }
73 criMemory := criPodStat.Linux.Memory
74 ps.Memory = &statsapi.MemoryStats{
75 Time: metav1.NewTime(time.Unix(0, criMemory.Timestamp)),
76 AvailableBytes: valueOfUInt64Value(criMemory.AvailableBytes),
77 UsageBytes: valueOfUInt64Value(criMemory.UsageBytes),
78 WorkingSetBytes: valueOfUInt64Value(criMemory.WorkingSetBytes),
79 RSSBytes: valueOfUInt64Value(criMemory.RssBytes),
80 PageFaults: valueOfUInt64Value(criMemory.PageFaults),
81 MajorPageFaults: valueOfUInt64Value(criMemory.MajorPageFaults),
82 }
83 }
84
85 func addCRIPodCPUStats(ps *statsapi.PodStats, criPodStat *runtimeapi.PodSandboxStats) {
86 if criPodStat == nil || criPodStat.Linux == nil || criPodStat.Linux.Cpu == nil {
87 return
88 }
89 criCPU := criPodStat.Linux.Cpu
90 ps.CPU = &statsapi.CPUStats{
91 Time: metav1.NewTime(time.Unix(0, criCPU.Timestamp)),
92 UsageNanoCores: valueOfUInt64Value(criCPU.UsageNanoCores),
93 UsageCoreNanoSeconds: valueOfUInt64Value(criCPU.UsageCoreNanoSeconds),
94 }
95 }
96
97 func addCRIPodProcessStats(ps *statsapi.PodStats, criPodStat *runtimeapi.PodSandboxStats) {
98 if criPodStat == nil || criPodStat.Linux == nil || criPodStat.Linux.Process == nil {
99 return
100 }
101 ps.ProcessStats = &statsapi.ProcessStats{
102 ProcessCount: valueOfUInt64Value(criPodStat.Linux.Process.ProcessCount),
103 }
104 }
105
106
107
108 func (p *criStatsProvider) listContainerNetworkStats() (map[string]*statsapi.NetworkStats, error) {
109 return nil, nil
110 }
111
View as plain text