@@ -28,6 +28,32 @@ from pyslurm.utils.helpers import (
2828)
2929
3030
31+ def reset_stats_for_job_collection (jobs ):
32+ jobs.consumed_energy = 0
33+ jobs.disk_read = 0
34+ jobs.disk_write = 0
35+ jobs.page_faults = 0
36+ jobs.resident_memory = 0
37+ jobs.virtual_memory = 0
38+ jobs.elapsed_cpu_time = 0
39+ jobs.total_cpu_time = 0
40+ jobs.user_cpu_time = 0
41+ jobs.system_cpu_time = 0
42+
43+
44+ def add_stats_to_job_collection (jobs , JobStatistics js ):
45+ jobs.consumed_energy += js.consumed_energy
46+ jobs.disk_read += js.avg_disk_read
47+ jobs.disk_write += js.avg_disk_write
48+ jobs.page_faults += js.avg_page_faults
49+ jobs.resident_memory += js.avg_resident_memory
50+ jobs.virtual_memory += js.avg_virtual_memory
51+ jobs.elapsed_cpu_time += js.elapsed_cpu_time
52+ jobs.total_cpu_time += js.total_cpu_time
53+ jobs.user_cpu_time += js.user_cpu_time
54+ jobs.system_cpu_time += js.system_cpu_time
55+
56+
3157cdef class JobStatistics:
3258
3359 def __init__ (self ):
@@ -50,6 +76,21 @@ cdef class JobStatistics:
5076 def to_dict (self ):
5177 return instance_to_dict(self )
5278
79+ @staticmethod
80+ cdef JobStatistics from_job_steps(Job job):
81+ cdef JobStatistics job_stats = JobStatistics()
82+
83+ for step in job.steps.values():
84+ job_stats._add_base_stats(step.stats)
85+
86+ job_stats._sum_cpu_time(job)
87+
88+ step_count = len (job.steps)
89+ if step_count:
90+ job_stats.avg_cpu_frequency /= step_count
91+
92+ return job_stats
93+
5394 @staticmethod
5495 cdef JobStatistics from_step(JobStep step):
5596 cdef JobStatistics wrap = JobStatistics()
@@ -140,68 +181,56 @@ cdef class JobStatistics:
140181
141182 return wrap
142183
143- @staticmethod
144- def _sum_step_stats_for_job (Job job , JobSteps steps ):
145- cdef:
146- JobStatistics job_stats = job.stats
147- JobStatistics step_stats = None
148-
149- for step in steps.values():
150- step_stats = step.stats
151-
152- job_stats.consumed_energy += step_stats.consumed_energy
153- job_stats.avg_cpu_time += step_stats.avg_cpu_time
154- job_stats.avg_cpu_frequency += step_stats.avg_cpu_frequency
155- job_stats.avg_disk_read += step_stats.avg_disk_read
156- job_stats.avg_disk_write += step_stats.avg_disk_write
157- job_stats.avg_page_faults += step_stats.avg_page_faults
158-
159- if step_stats.max_disk_read >= job_stats.max_disk_read:
160- job_stats.max_disk_read = step_stats.max_disk_read
161- job_stats.max_disk_read_node = step_stats.max_disk_read_node
162- job_stats.max_disk_read_task = step_stats.max_disk_read_task
163-
164- if step_stats.max_disk_write >= job_stats.max_disk_write:
165- job_stats.max_disk_write = step_stats.max_disk_write
166- job_stats.max_disk_write_node = step_stats.max_disk_write_node
167- job_stats.max_disk_write_task = step_stats.max_disk_write_task
168-
169- if step_stats.max_page_faults >= job_stats.max_page_faults:
170- job_stats.max_page_faults = step_stats.max_page_faults
171- job_stats.max_page_faults_node = step_stats.max_page_faults_node
172- job_stats.max_page_faults_task = step_stats.max_page_faults_task
173-
174- if step_stats.max_resident_memory >= job_stats.max_resident_memory:
175- job_stats.max_resident_memory = step_stats.max_resident_memory
176- job_stats.max_resident_memory_node = step_stats.max_resident_memory_node
177- job_stats.max_resident_memory_task = step_stats.max_resident_memory_task
178- job_stats.avg_resident_memory = job_stats.max_resident_memory
179-
180- if step_stats.max_virtual_memory >= job_stats.max_virtual_memory:
181- job_stats.max_virtual_memory = step_stats.max_virtual_memory
182- job_stats.max_virtual_memory_node = step_stats.max_virtual_memory_node
183- job_stats.max_virtual_memory_task = step_stats.max_virtual_memory_task
184- job_stats.avg_virtual_memory = job_stats.max_virtual_memory
185-
186- if step_stats.min_cpu_time >= job_stats.min_cpu_time:
187- job_stats.min_cpu_time = step_stats.min_cpu_time
188- job_stats.min_cpu_time_node = step_stats.min_cpu_time_node
189- job_stats.min_cpu_time_task = step_stats.min_cpu_time_task
190-
184+ def _add_base_stats (self , JobStatistics src ):
185+ self .consumed_energy += src.consumed_energy
186+ self .avg_cpu_time += src.avg_cpu_time
187+ self .avg_cpu_frequency += src.avg_cpu_frequency
188+ self .avg_disk_read += src.avg_disk_read
189+ self .avg_disk_write += src.avg_disk_write
190+ self .avg_page_faults += src.avg_page_faults
191+
192+ if src.max_disk_read >= self .max_disk_read:
193+ self .max_disk_read = src.max_disk_read
194+ self .max_disk_read_node = src.max_disk_read_node
195+ self .max_disk_read_task = src.max_disk_read_task
196+
197+ if src.max_disk_write >= self .max_disk_write:
198+ self .max_disk_write = src.max_disk_write
199+ self .max_disk_write_node = src.max_disk_write_node
200+ self .max_disk_write_task = src.max_disk_write_task
201+
202+ if src.max_page_faults >= self .max_page_faults:
203+ self .max_page_faults = src.max_page_faults
204+ self .max_page_faults_node = src.max_page_faults_node
205+ self .max_page_faults_task = src.max_page_faults_task
206+
207+ if src.max_resident_memory >= self .max_resident_memory:
208+ self .max_resident_memory = src.max_resident_memory
209+ self .max_resident_memory_node = src.max_resident_memory_node
210+ self .max_resident_memory_task = src.max_resident_memory_task
211+ self .avg_resident_memory = self .max_resident_memory
212+
213+ if src.max_virtual_memory >= self .max_virtual_memory:
214+ self .max_virtual_memory = src.max_virtual_memory
215+ self .max_virtual_memory_node = src.max_virtual_memory_node
216+ self .max_virtual_memory_task = src.max_virtual_memory_task
217+ self .avg_virtual_memory = self .max_virtual_memory
218+
219+ if src.min_cpu_time >= self .min_cpu_time:
220+ self .min_cpu_time = src.min_cpu_time
221+ self .min_cpu_time_node = src.min_cpu_time_node
222+ self .min_cpu_time_task = src.min_cpu_time_task
223+
224+ def _sum_cpu_time (self , Job job ):
191225 if job.ptr.tot_cpu_sec != slurm.NO_VAL64:
192- job_stats .total_cpu_time = job.ptr.tot_cpu_sec
226+ self .total_cpu_time + = job.ptr.tot_cpu_sec
193227
194228 if job.ptr.user_cpu_sec != slurm.NO_VAL64:
195- job_stats .user_cpu_time = job.ptr.user_cpu_sec
229+ self .user_cpu_time + = job.ptr.user_cpu_sec
196230
197231 if job.ptr.sys_cpu_sec != slurm.NO_VAL64:
198- job_stats .system_cpu_time = job.ptr.sys_cpu_sec
232+ self .system_cpu_time + = job.ptr.sys_cpu_sec
199233
200234 elapsed = job.elapsed_time if job.elapsed_time else 0
201235 cpus = job.cpus if job.cpus else 0
202- job_stats.elapsed_cpu_time = elapsed * cpus
203-
204- step_count = len (steps)
205- if step_count:
206- job_stats.avg_cpu_frequency /= step_count
207-
236+ self .elapsed_cpu_time += elapsed * cpus
0 commit comments