5
5
from datetime import datetime , timedelta
6
6
import random
7
7
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
+
8
60
class Job :
9
61
10
62
def __init__ (self , job_id , nr_nodes , walltime ):
@@ -142,6 +194,7 @@ def cycle(self, delta):
142
194
for _ in range (options .nr_timesteps ):
143
195
print ('-' * 36 )
144
196
print (f'---- { time } ----' )
197
+ node_infos = dict ()
145
198
time_str = datetime .strftime (time , '%Y-%m-%d %H:%M:%S' )
146
199
resource_manager .qstat ()
147
200
for node in nodes :
@@ -152,8 +205,18 @@ def cycle(self, delta):
152
205
cpu_load = f'{ 10 * random .random ():.2f} '
153
206
mem_load = f'{ 10 * random .random ():.2f} '
154
207
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
155
212
resource_manager .cycle (delta )
156
213
for job in resource_manager .running_jobs :
157
214
for node in job .nodes :
158
215
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 )
159
222
time += delta
0 commit comments