5
5
callback_log.log_nodes_cb()
6
6
"""
7
7
from __future__ import print_function , division , unicode_literals , absolute_import
8
- from builtins import str , range , open
9
-
10
- # Py2 compat: http://python-future.org/compatible_idioms.html#collections-counter-and-ordereddict
11
- from future import standard_library
12
- standard_library .install_aliases ()
13
- from collections import OrderedDict
14
8
15
9
# Import packages
10
+ import sys
16
11
import random
17
12
import datetime
18
13
import simplejson as json
19
14
from dateutil import parser
15
+ from builtins import str , range , open
16
+ # Py2 compat: http://python-future.org/compatible_idioms.html#collections-counter-and-ordereddict
17
+ from future import standard_library
18
+ standard_library .install_aliases ()
19
+ from collections import OrderedDict
20
20
21
21
# Pandas
22
22
try :
26
26
'install the pandas package' )
27
27
pass
28
28
29
+ PY3 = sys .version_info [0 ] > 2
30
+
29
31
def create_event_dict (start_time , nodes_list ):
30
32
'''
31
33
Function to generate a dictionary of event (start/finish) nodes
@@ -57,10 +59,10 @@ def create_event_dict(start_time, nodes_list):
57
59
runtime_memory_gb = node .get ('runtime_memory_gb' , 0.0 )
58
60
59
61
# Init and format event-based nodes
60
- node ['estimated_threads' ] = estimated_threads
61
- node ['estimated_memory_gb' ] = estimated_memory_gb
62
- node ['runtime_threads' ] = runtime_threads
63
- node ['runtime_memory_gb' ] = runtime_memory_gb
62
+ node ['estimated_threads' ] = estimated_threads
63
+ node ['estimated_memory_gb' ] = estimated_memory_gb
64
+ node ['runtime_threads' ] = runtime_threads
65
+ node ['runtime_memory_gb' ] = runtime_memory_gb
64
66
start_node = node
65
67
finish_node = copy .deepcopy (node )
66
68
start_node ['event' ] = 'start'
@@ -71,7 +73,7 @@ def create_event_dict(start_time, nodes_list):
71
73
finish_delta = (node ['finish' ] - start_time ).total_seconds ()
72
74
73
75
# Populate dictionary
74
- if events .has_key (start_delta ) or events .has_key (finish_delta ):
76
+ if events .get (start_delta ) or events .get (finish_delta ):
75
77
err_msg = 'Event logged twice or events started at exact same time!'
76
78
raise KeyError (err_msg )
77
79
events [start_delta ] = start_node
@@ -186,22 +188,22 @@ def calculate_resource_timeseries(events, resource):
186
188
all_res = 0.0
187
189
188
190
# Iterate through the events
189
- for tdelta , event in sorted (events .items ()):
191
+ for _ , event in sorted (events .items ()):
190
192
if event ['event' ] == "start" :
191
193
if resource in event and event [resource ] != 'Unknown' :
192
194
all_res += float (event [resource ])
193
- current_time = event ['start' ];
195
+ current_time = event ['start' ]
194
196
elif event ['event' ] == "finish" :
195
197
if resource in event and event [resource ] != 'Unknown' :
196
198
all_res -= float (event [resource ])
197
- current_time = event ['finish' ];
199
+ current_time = event ['finish' ]
198
200
res [current_time ] = all_res
199
201
200
202
# Formulate the pandas timeseries
201
203
time_series = pd .Series (data = list (res .values ()), index = list (res .keys ()))
202
204
# Downsample where there is only value-diff
203
205
ts_diff = time_series .diff ()
204
- time_series = time_series [ts_diff != 0 ]
206
+ time_series = time_series [ts_diff != 0 ]
205
207
206
208
# Return the new time series
207
209
return time_series
@@ -235,7 +237,7 @@ def draw_lines(start, total_duration, minute_scale, scale):
235
237
result = ''
236
238
next_line = 220
237
239
next_time = start
238
- num_lines = (( total_duration // 60 ) // minute_scale ) + 2
240
+ num_lines = int ((( total_duration // 60 ) // minute_scale ) + 2 )
239
241
240
242
# Iterate through the lines and create html line markers string
241
243
for line in range (num_lines ):
@@ -559,26 +561,30 @@ def generate_gantt_chart(logfile, cores, minute_scale=10,
559
561
runtime_mem_ts = calculate_resource_timeseries (events , 'runtime_memory_gb' )
560
562
# Plot gantt chart
561
563
resource_offset = 120 + 30 * cores
562
- html_string += draw_resource_bar (start_node ['start' ], last_node ['finish' ], estimated_mem_ts ,
563
- space_between_minutes , minute_scale , '#90BBD7' , resource_offset * 2 + 120 , 'Memory' )
564
- html_string += draw_resource_bar (start_node ['start' ], last_node ['finish' ], runtime_mem_ts ,
565
- space_between_minutes , minute_scale , '#03969D' , resource_offset * 2 + 120 , 'Memory' )
564
+ html_string += draw_resource_bar (
565
+ start_node ['start' ], last_node ['finish' ], estimated_mem_ts ,
566
+ space_between_minutes , minute_scale , '#90BBD7' , resource_offset * 2 + 120 , 'Memory' )
567
+ html_string += draw_resource_bar (
568
+ start_node ['start' ], last_node ['finish' ], runtime_mem_ts ,
569
+ space_between_minutes , minute_scale , '#03969D' , resource_offset * 2 + 120 , 'Memory' )
566
570
567
571
# Get threads timeseries
568
572
estimated_threads_ts = calculate_resource_timeseries (events , 'estimated_threads' )
569
573
runtime_threads_ts = calculate_resource_timeseries (events , 'runtime_threads' )
570
574
# Plot gantt chart
571
- html_string += draw_resource_bar (start_node ['start' ], last_node ['finish' ], estimated_threads_ts ,
572
- space_between_minutes , minute_scale , '#90BBD7' , resource_offset , 'Threads' )
573
- html_string += draw_resource_bar (start_node ['start' ], last_node ['finish' ], runtime_threads_ts ,
574
- space_between_minutes , minute_scale , '#03969D' , resource_offset , 'Threads' )
575
+ html_string += draw_resource_bar (
576
+ start_node ['start' ], last_node ['finish' ], estimated_threads_ts ,
577
+ space_between_minutes , minute_scale , '#90BBD7' , resource_offset , 'Threads' )
578
+ html_string += draw_resource_bar (
579
+ start_node ['start' ], last_node ['finish' ], runtime_threads_ts ,
580
+ space_between_minutes , minute_scale , '#03969D' , resource_offset , 'Threads' )
575
581
576
582
#finish html
577
- html_string += '''
583
+ html_string += '''
578
584
</div>
579
585
</body>'''
580
586
581
587
#save file
582
- html_file = open (logfile + '.html' , 'wb' )
583
- html_file .write (html_string )
584
- html_file . close ()
588
+ with open (logfile + '.html' , 'w' if PY3 else ' wb' ) as html_file :
589
+ html_file .write (html_string )
590
+
0 commit comments