1- // Copyright 2025 The HuaTuo Authors
1+ // Copyright 2025, 2026 The HuaTuo Authors
22//
33// Licensed under the Apache License, Version 2.0 (the "License");
44// you may not use this file except in compliance with the License.
@@ -40,26 +40,23 @@ func init() {
4040 tracing .RegisterEventTracing ("cpuidle" , newCPUIdle )
4141}
4242
43- var cgroupMgr cgroups.Cgroup
44-
4543func newCPUIdle () (* tracing.EventTracingAttr , error ) {
44+ // NewManager only returns nil alongside an error (default branch); v1/v2 never return nil on success
4645 cgroup , err := cgroups .NewManager ()
4746 if err != nil {
4847 return nil , err
4948 }
50- if cgroup == nil {
51- return nil , fmt .Errorf ("cgroup manager is nil" )
52- }
53- cgroupMgr = cgroup
5449
5550 return & tracing.EventTracingAttr {
56- TracingData : & cpuIdleTracing {},
51+ TracingData : & cpuIdleTracing {cgroupMgr : cgroup },
5752 Interval : 20 ,
5853 Flag : tracing .FlagTracing ,
5954 }, nil
6055}
6156
62- type cpuIdleTracing struct {}
57+ type cpuIdleTracing struct {
58+ cgroupMgr cgroups.Cgroup
59+ }
6360
6461type cpuStats struct {
6562 user int64
@@ -122,14 +119,14 @@ func updateContainersCPUIdle(f *matcher.ContainerMatcher) error {
122119 return nil
123120}
124121
125- func detectCPUIdleContainer (threshold * cpuIdleThreshold ) (* containerCPUInfo , error ) {
122+ func ( c * cpuIdleTracing ) detectCPUIdleContainer (threshold * cpuIdleThreshold ) (* containerCPUInfo , error ) {
126123 for id , container := range containersCPUIdle {
127124 if ! container .alive {
128125 delete (containersCPUIdle , id )
129126 } else {
130127 container .alive = false
131128
132- if err := updateContainerCpuUsage (container ); err != nil {
129+ if err := c . updateContainerCpuUsage (container ); err != nil {
133130 log .Debugf ("cpuidle update container [%s]: %v" , container .path , err )
134131 continue
135132 }
@@ -161,8 +158,8 @@ func containerCpuUsageDelta(cpu1, cpu2 *cpuStats) cpuStats {
161158 }
162159}
163160
164- func updateContainerCpuUsage (container * containerCPUInfo ) error {
165- cpuQuotaPeriod , err := cgroupMgr .CpuQuotaAndPeriod (container .path )
161+ func ( c * cpuIdleTracing ) updateContainerCpuUsage (container * containerCPUInfo ) error {
162+ cpuQuotaPeriod , err := c . cgroupMgr .CpuQuotaAndPeriod (container .path )
166163 if err != nil {
167164 return err
168165 }
@@ -178,7 +175,7 @@ func updateContainerCpuUsage(container *containerCPUInfo) error {
178175 return fmt .Errorf ("cpu too small" )
179176 }
180177
181- usage , err := cgroupMgr .CpuUsage (container .path )
178+ usage , err := c . cgroupMgr .CpuUsage (container .path )
182179 if err != nil {
183180 return err
184181 }
@@ -330,7 +327,7 @@ func (c *cpuIdleTracing) Start(ctx context.Context) error {
330327 return err
331328 }
332329
333- container , err := detectCPUIdleContainer (threshold )
330+ container , err := c . detectCPUIdleContainer (threshold )
334331 if err != nil {
335332 continue
336333 }
0 commit comments