55from datetime import datetime , timedelta
66import random
77
8+
9+ class Node_info :
10+
11+ def __init__ (self , node_name ):
12+ self ._name = node_name
13+ self ._cpu_load = None
14+ self ._mem_load = None
15+ self ._jobs = list ()
16+
17+ @property
18+ def name (self ):
19+ return self ._name
20+
21+ def add_job_id (self , job_id ):
22+ self ._jobs .append (job_id )
23+
24+ @property
25+ def _job_ids (self ):
26+ return ',' .join (self ._jobs )
27+
28+ @property
29+ def job_ids (self ):
30+ return self ._jobs .copy ()
31+
32+ @property
33+ def state (self ):
34+ return 'busy' if self ._jobs else 'idle'
35+
36+ @property
37+ def cpu_load (self ):
38+ return self ._cpu_load
39+
40+ @cpu_load .setter
41+ def cpu_load (self , cpu_load ):
42+ self ._cpu_load = cpu_load
43+
44+ @property
45+ def mem_load (self ):
46+ return self ._mem_load
47+
48+ @mem_load .setter
49+ def mem_load (self , mem_load ):
50+ self ._mem_load = mem_load
51+
52+ def __repr__ (self ):
53+ repr = f'{ self .name } \n '
54+ repr += f'\t state = { self .state } \n '
55+ repr += f'\t jobs = { self ._job_ids } \n '
56+ repr += f'\t status = cpu_load={ self .cpu_load } ;mem_load={ self .mem_load } \n '
57+ return repr
58+
59+
860class Job :
961
1062 def __init__ (self , job_id , nr_nodes , walltime ):
@@ -142,6 +194,7 @@ def cycle(self, delta):
142194 for _ in range (options .nr_timesteps ):
143195 print ('-' * 36 )
144196 print (f'---- { time } ----' )
197+ node_infos = dict ()
145198 time_str = datetime .strftime (time , '%Y-%m-%d %H:%M:%S' )
146199 resource_manager .qstat ()
147200 for node in nodes :
@@ -152,8 +205,18 @@ def cycle(self, delta):
152205 cpu_load = f'{ 10 * random .random ():.2f} '
153206 mem_load = f'{ 10 * random .random ():.2f} '
154207 csv_load_writer .writerow ([time_str , node , cpu_load , mem_load ])
208+ node_info = Node_info (node )
209+ node_info .cpu_load = cpu_load
210+ node_info .mem_load = mem_load
211+ node_infos [node ] = node_info
155212 resource_manager .cycle (delta )
156213 for job in resource_manager .running_jobs :
157214 for node in job .nodes :
158215 csv_jobs_writer .writerow ([time_str , job .job_id , node ])
216+ node_infos [node ].add_job_id (job .job_id )
217+ timestamp = datetime .strftime (time , '%Y%m%d_%H%M%S' )
218+ log_file_name = f'{ options .file } _log_{ timestamp } .txt'
219+ with open (log_file_name , 'w' ) as log_file :
220+ for node in sorted (node_infos .keys ()):
221+ print (node_infos [node ], file = log_file )
159222 time += delta
0 commit comments