@@ -124,65 +124,28 @@ def kube_object_namespace_name(kube_object: KubeNamespacedObj) -> NamespaceName:
124124
125125
126126def aggregate_resources (
127- resource_type : Literal ["memory" , "cpu" ], pods : Sequence [api .Pod ]
127+ resource_type : Literal ["memory" , "cpu" ], containers : Collection [api .ContainerSpec ]
128128) -> section .Resources :
129- # requests
130- total_request = 0.0 # sum of all requests (pod-level or container-level)
131- count_unspecified_requests = 0 # containers without a request set
132- count_total_requests = 0 # containers from pods using container-level requests
133- count_pods_pod_level_request = 0 # pods with a non-zero pod-level request
134-
135- # limits
136- total_limit = 0.0 # sum of all limits (pod-level or container-level)
137- count_unspecified_limits = 0 # containers without a limit set
138- count_zeroed_limits = 0 # containers with limit==0 (unlimited)
139- count_total_limits = 0 # containers from pods using container-level limits
140- count_pods_pod_level_limit = 0 # pods with a non-zero pod-level limit
141-
142- for pod in pods :
143- pod_request = getattr (pod .spec .resources .requests , resource_type )
144- pod_limit = getattr (pod .spec .resources .limits , resource_type )
145- containers = pod .spec .containers
146-
147- if pod_request is not None and pod_request : # also handles: 0 -> unlimited
148- total_request += pod_request
149- count_pods_pod_level_request += 1
150- else :
151- specified_requests = [
152- request
153- for c in containers
154- if (request := getattr (c .resources .requests , resource_type )) is not None
155- ]
156- total_request += sum (specified_requests )
157- count_unspecified_requests += len (containers ) - len (specified_requests )
158- count_total_requests += len (containers )
159-
160- if pod_limit is not None and pod_limit : # also handles: 0 -> unlimited
161- total_limit += pod_limit
162- count_pods_pod_level_limit += 1
163- else :
164- specified_limits = [
165- limit
166- for c in containers
167- if (limit := getattr (c .resources .limits , resource_type )) is not None
168- ]
169- total_limit += sum (specified_limits )
170- count_unspecified_limits += len (containers ) - len (specified_limits )
171- count_zeroed_limits += sum (1 for x in specified_limits if x == 0 )
172- count_total_limits += len (containers )
129+ specified_requests = [
130+ request
131+ for c in containers
132+ if (request := getattr (c .resources .requests , resource_type )) is not None
133+ ]
134+ specified_limits = [
135+ limit
136+ for c in containers
137+ if (limit := getattr (c .resources .limits , resource_type )) is not None
138+ ]
139+
140+ count_total = len (containers )
173141
174142 return section .Resources (
175- request = total_request ,
176- limit = total_limit ,
177- # requests
178- count_unspecified_requests = count_unspecified_requests ,
179- count_total_requests = count_total_requests ,
180- count_pods_pod_level_request = count_pods_pod_level_request ,
181- # limits
182- count_unspecified_limits = count_unspecified_limits ,
183- count_zeroed_limits = count_zeroed_limits ,
184- count_total_limits = count_total_limits ,
185- count_pods_pod_level_limit = count_pods_pod_level_limit ,
143+ request = sum (specified_requests ),
144+ limit = sum (specified_limits ),
145+ count_unspecified_requests = count_total - len (specified_requests ),
146+ count_unspecified_limits = count_total - len (specified_limits ),
147+ count_zeroed_limits = sum (1 for x in specified_limits if x == 0 ),
148+ count_total = count_total ,
186149 )
187150
188151
@@ -198,11 +161,11 @@ def thin_containers(pods: Collection[api.Pod]) -> section.ThinContainers:
198161
199162
200163def collect_memory_resources_from_api_pods (pods : Sequence [api .Pod ]) -> section .Resources :
201- return aggregate_resources ("memory" , pods )
164+ return aggregate_resources ("memory" , [ c for pod in pods for c in pod . spec . containers ] )
202165
203166
204167def collect_cpu_resources_from_api_pods (pods : Sequence [api .Pod ]) -> section .Resources :
205- return aggregate_resources ("cpu" , pods )
168+ return aggregate_resources ("cpu" , [ c for pod in pods for c in pod . spec . containers ] )
206169
207170
208171def pod_resources_from_api_pods (pods : Sequence [api .Pod ]) -> section .PodResources :
0 commit comments