@@ -4,11 +4,6 @@ import (
44 "errors"
55 "fmt"
66 "slices"
7- << << << < HEAD
8- "syscall"
9- "time"
10- == == == =
11- >> >> >> > 2 cfc575ad (Extended ContainerStats to include disk metrics )
127
138 "github.com/containernetworking/plugins/pkg/ns"
149 "github.com/vishvananda/netlink"
@@ -75,11 +70,14 @@ func (ss *StatsServer) updateSandbox(sb *sandbox.Sandbox) *types.PodSandboxStats
7570 ctrStats , err := ss .Runtime ().ContainerStats (ss .ctx , c , sb .CgroupParent ())
7671 if err != nil {
7772 log .Errorf (ss .ctx , "Error getting container stats %s: %v" , c .ID (), err )
73+ }
7874
79- continue
75+ diskStats , err := ss .Runtime ().DiskStats (ss .ctx , c , sb .CgroupParent ())
76+ if err != nil {
77+ log .Errorf (ss .ctx , "Error getting disk stats %s: %v" , c .ID (), err )
8078 }
8179 // Convert container stats (cgroup + disk) to CRI stats.
82- cStats := containerCRIStats (ctrStats , c , ctrStats . Cgroup .SystemNano )
80+ cStats := containerCRIStats (ctrStats , diskStats , c , ctrStats .SystemNano )
8381 ss .populateWritableLayer (cStats , c )
8482
8583 if oldcStats , ok := ss .ctrStats [c .ID ()]; ok {
@@ -89,7 +87,7 @@ func (ss *StatsServer) updateSandbox(sb *sandbox.Sandbox) *types.PodSandboxStats
8987 containerStats = append (containerStats , cStats )
9088
9189 // Convert cgroups stats to CRI metrics.
92- cMetrics := ss .containerMetricsFromContainerStats (sb , c , ctrStats )
90+ cMetrics := ss .containerMetricsFromContainerStats (sb , c , ctrStats , * diskStats )
9391 containerMetrics = append (containerMetrics , cMetrics )
9492 }
9593
@@ -125,7 +123,14 @@ func (ss *StatsServer) updateContainerStats(c *oci.Container, sb *sandbox.Sandbo
125123 return nil
126124 }
127125
128- cStats := containerCRIStats (ctrStats , c , ctrStats .Cgroup .SystemNano )
126+ diskStats , err := ss .Runtime ().DiskStats (ss .ctx , c , sb .CgroupParent ())
127+ if err != nil {
128+ log .Errorf (ss .ctx , "Error getting disk stats %s: %v" , c .ID (), err )
129+ // Continue without disk stats
130+ diskStats = nil
131+ }
132+
133+ cStats := containerCRIStats (ctrStats , diskStats , c , ctrStats .SystemNano )
129134 ss .populateWritableLayer (cStats , c )
130135
131136 if oldcStats , ok := ss .ctrStats [c .ID ()]; ok {
@@ -233,57 +238,35 @@ func (ss *StatsServer) GenerateSandboxContainerMetrics(sb *sandbox.Sandbox, c *o
233238 return nil
234239 }
235240
236- return ss .containerMetricsFromContainerStats (sb , c , ctrStats )
241+ diskStats , err := ss .Runtime ().DiskStats (ss .ctx , c , sb .CgroupParent ())
242+ if err != nil {
243+ log .Errorf (ss .ctx , "Error getting disk stats %s: %v" , c .ID (), err )
244+
245+ return nil
246+ }
247+
248+ return ss .containerMetricsFromContainerStats (sb , c , ctrStats , * diskStats )
237249}
238250
239- << << << < HEAD
240- func (ss * StatsServer ) containerMetricsFromCgStats (sb * sandbox.Sandbox , c * oci.Container , cgstats * cgmgr.CgroupStats ) * types.ContainerMetrics {
241- metrics := computeContainerMetrics (c , []* containerMetric {
242- {
243- desc : containerLastSeen ,
244- valueFunc : func () metricValues {
245- return metricValues {{
246- value : uint64 (time .Now ().Unix ()),
247- metricType : types .MetricType_GAUGE ,
248- }}
249- },
250- },
251- }, "" )
252- == == == =
253- func (ss * StatsServer ) containerMetricsFromContainerStats (sb * sandbox .Sandbox , c * oci .Container , containerStats * cgmgr .ContainerRuntimeStats ) * types.ContainerMetrics {
251+ func (ss * StatsServer ) containerMetricsFromContainerStats (sb * sandbox.Sandbox , c * oci.Container , containerStats * cgmgr.CgroupStats , diskstats oci.DiskMetrics ) * types.ContainerMetrics {
254252 var metrics []* types.Metric
255- >> >> >> > 2 cfc575ad (Extended ContainerStats to include disk metrics )
256253
257254 for _ , m := range ss .Config ().IncludedPodMetrics {
258255 switch m {
259256 case CPUMetrics :
260- << << << < HEAD
261- if cpuMetrics := generateContainerCPUMetrics (c , cgstats .CPU ); cpuMetrics != nil {
262- metrics = append (metrics , cpuMetrics ... )
263- }
264- case HugetlbMetrics :
265- if hugetlbMetrics := generateContainerHugetlbMetrics (c , cgstats .Hugetlb ); hugetlbMetrics != nil {
266- == == == =
267- if cpuMetrics := generateSandboxCPUMetrics (sb , containerStats .Cgroup .CPU ); cpuMetrics != nil {
257+ if cpuMetrics := generateContainerCPUMetrics (c , containerStats .CPU ); cpuMetrics != nil {
268258 metrics = append (metrics , cpuMetrics ... )
269259 }
270260 case HugetlbMetrics :
271- if hugetlbMetrics := generateSandboxHugetlbMetrics (sb , containerStats .Cgroup .Hugetlb ); hugetlbMetrics != nil {
272- >> >> >> > 2 cfc575ad (Extended ContainerStats to include disk metrics )
261+ if hugetlbMetrics := generateContainerHugetlbMetrics (c , containerStats .Hugetlb ); hugetlbMetrics != nil {
273262 metrics = append (metrics , hugetlbMetrics ... )
274263 }
275264 case DiskMetrics :
276- if containerStats .Disk != nil {
277- if diskMetrics := generateSandboxDiskMetrics (sb , containerStats .Disk ); diskMetrics != nil {
278- metrics = append (metrics , diskMetrics ... )
279- }
265+ if diskMetrics := generateContainerDiskMetrics (c , & diskstats .Filesystem ); diskMetrics != nil {
266+ metrics = append (metrics , diskMetrics ... )
280267 }
281268 case MemoryMetrics :
282- << << << < HEAD
283- if memoryMetrics := generateContainerMemoryMetrics (c , cgstats .Memory ); memoryMetrics != nil {
284- == == == =
285- if memoryMetrics := generateSandboxMemoryMetrics (sb , containerStats .Cgroup .Memory ); memoryMetrics != nil {
286- >> >> >> > 2 cfc575ad (Extended ContainerStats to include disk metrics )
269+ if memoryMetrics := generateContainerMemoryMetrics (c , containerStats .Memory ); memoryMetrics != nil {
287270 metrics = append (metrics , memoryMetrics ... )
288271 }
289272 case OOMMetrics :
@@ -306,11 +289,7 @@ func (ss *StatsServer) containerMetricsFromContainerStats(sb *sandbox.Sandbox, c
306289 case NetworkMetrics :
307290 continue // Network metrics are collected at the pod level only.
308291 case ProcessMetrics :
309- << << << < HEAD
310- if processMetrics := generateContainerProcessMetrics (c , cgstats .Pid ); processMetrics != nil {
311- == == == =
312- if processMetrics := generateSandboxProcessMetrics (sb , containerStats .Cgroup .Pid ); processMetrics != nil {
313- >> >> >> > 2 cfc575ad (Extended ContainerStats to include disk metrics )
292+ if processMetrics := generateContainerProcessMetrics (c , containerStats .Pid ); processMetrics != nil {
314293 metrics = append (metrics , processMetrics ... )
315294 }
316295 case SpecMetrics :
@@ -349,17 +328,17 @@ func linkToInterface(link netlink.Link) (*types.NetworkInterfaceUsage, error) {
349328 }, nil
350329}
351330
352- func containerCRIStats (stats * cgmgr.ContainerRuntimeStats , ctr * oci.Container , systemNano int64 ) * types.ContainerStats {
331+ func containerCRIStats (stats * cgmgr.CgroupStats , diskStats * oci. DiskMetrics , ctr * oci.Container , systemNano int64 ) * types.ContainerStats {
353332 criStats := & types.ContainerStats {
354333 Attributes : ctr .CRIAttributes (),
355334 }
356- criStats .Cpu = criCPUStats (stats .Cgroup . CPU , systemNano )
357- criStats .Memory = criMemStats (stats .Cgroup . Memory , systemNano )
358- criStats .Swap = criSwapStats (stats .Cgroup . Memory , systemNano )
335+ criStats .Cpu = criCPUStats (stats .CPU , systemNano )
336+ criStats .Memory = criMemStats (stats .Memory , systemNano )
337+ criStats .Swap = criSwapStats (stats .Memory , systemNano )
359338
360339 // Add filesystem stats if available
361- if stats . Disk != nil {
362- criStats .WritableLayer = criFilesystemStats (stats . Disk , ctr , systemNano )
340+ if diskStats != nil {
341+ criStats .WritableLayer = criFilesystemStats (& diskStats . Filesystem , ctr , systemNano )
363342 }
364343
365344 return criStats
@@ -399,7 +378,7 @@ func criProcessStats(pStats *cgmgr.PidsStats, systemNano int64) *types.ProcessUs
399378 }
400379}
401380
402- func criFilesystemStats (diskStats * cgmgr. DiskMetrics , ctr * oci.Container , systemNano int64 ) * types.FilesystemUsage {
381+ func criFilesystemStats (diskStats * oci. FilesystemMetrics , ctr * oci.Container , systemNano int64 ) * types.FilesystemUsage {
403382 mountpoint := ctr .MountPoint ()
404383 if mountpoint == "" {
405384 // Skip FS stats as mount point is unknown
0 commit comments