@@ -71,8 +71,10 @@ def create_event_dict(start_time, nodes_list):
7171 finish_node ['event' ] = 'finish'
7272
7373 # Get dictionary key
74- start_delta = (node ['start' ] - start_time ).total_seconds ()
75- finish_delta = (node ['finish' ] - start_time ).total_seconds ()
74+ node_start = datetime .datetime .strptime (node ['start' ], "%Y-%m-%dT%H:%M:%S.%f" )
75+ node_finish = datetime .datetime .strptime (node ['finish' ], "%Y-%m-%dT%H:%M:%S.%f" )
76+ start_delta = (node_start - start_time ).total_seconds ()
77+ finish_delta = (node_finish - start_time ).total_seconds ()
7678
7779 # Populate dictionary
7880 if events .get (start_delta ) or events .get (finish_delta ):
@@ -81,6 +83,9 @@ def create_event_dict(start_time, nodes_list):
8183 events [start_delta ] = start_node
8284 events [finish_delta ] = finish_node
8385
86+ del node_start
87+ del node_finish
88+
8489 # Return events dictionary
8590 return events
8691
@@ -257,8 +262,9 @@ def draw_nodes(start, nodes_list, cores, minute_scale, space_between_minutes,
257262 # For each node in the pipeline
258263 for node in nodes_list :
259264 # Get start and finish times
260- node_start = node ['start' ]
261- node_finish = node ['finish' ]
265+ node_start = datetime .datetime .strptime (node ['start' ], "%Y-%m-%dT%H:%M:%S.%f" )
266+ node_finish = datetime .datetime .strptime (node ['finish' ], "%Y-%m-%dT%H:%M:%S.%f" )
267+
262268 # Calculate an offset and scale duration
263269 offset = ((node_start - start ).total_seconds () / 60 ) * scale * \
264270 space_between_minutes + 220
@@ -291,8 +297,8 @@ def draw_nodes(start, nodes_list, cores, minute_scale, space_between_minutes,
291297 'color' : color ,
292298 'node_name' : node ['name' ],
293299 'node_dur' : node ['duration' ] / 60.0 ,
294- 'node_start' : node_start . strftime ( "%Y-%m-%d %H:%M:%S" ) ,
295- 'node_finish' : node_finish . strftime ( "%Y-%m-%d %H:%M:%S" )
300+ 'node_start' : node_start ,
301+ 'node_finish' : node_finish
296302 }
297303 # Create new node string
298304 new_node = "<div class='node' style='left:%(left)spx;top:%(offset)spx;" \
@@ -304,6 +310,9 @@ def draw_nodes(start, nodes_list, cores, minute_scale, space_between_minutes,
304310 # Append to output result
305311 result += new_node
306312
313+ del node_start
314+ del node_finish
315+
307316 # Return html string for nodes
308317 return result
309318
@@ -329,8 +338,10 @@ def draw_resource_bar(start_time, finish_time, time_series,
329338
330339 ts_len = len (time_series )
331340 for idx , (ts_start , amount ) in enumerate (ts_items ):
341+ ts_start = datetime .datetime .strptime (ts_start , "%Y-%m-%dT%H:%M:%S.%f" )
332342 if idx < ts_len - 1 :
333343 ts_end = time_series .index [idx + 1 ]
344+ ts_end = datetime .datetime .strptime (ts_end , "%Y-%m-%dT%H:%M:%S.%f" )
334345 else :
335346 ts_end = finish_time
336347 # Calculate offset from start at top
@@ -360,8 +371,8 @@ def draw_resource_bar(start_time, finish_time, time_series,
360371 'left' : left ,
361372 'label' : label ,
362373 'duration' : duration_mins ,
363- 'start' : ts_start . strftime ( '%Y-%m-%d %H:%M:%S' ) ,
364- 'finish' : ts_end . strftime ( '%Y-%m-%d %H:%M:%S' )
374+ 'start' : ts_start ,
375+ 'finish' : ts_end
365376 }
366377
367378 bar_html = "<div class='bar' style='background-color:%(color)s;" \
@@ -372,6 +383,9 @@ def draw_resource_bar(start_time, finish_time, time_series,
372383 # Add another bar to html line
373384 result += bar_html % bar_dict
374385
386+ del ts_start
387+ del ts_end
388+
375389 # Return bar-formatted html string
376390 return result
377391
@@ -504,25 +518,28 @@ def generate_gantt_chart(logfile,
504518 # Create the header of the report with useful information
505519 start_node = nodes_list [0 ]
506520 last_node = nodes_list [- 1 ]
507- duration = (last_node ['finish' ] - start_node ['start' ]).total_seconds ()
521+ start_node_dt = datetime .datetime .strptime (start_node ['start' ], "%Y-%m-%dT%H:%M:%S.%f" )
522+ last_node_dt = datetime .datetime .strptime (last_node ['finish' ], "%Y-%m-%dT%H:%M:%S.%f" )
523+ duration = (last_node_dt - start_node_dt ).total_seconds ()
508524
509525 # Get events based dictionary of node run stats
510- events = create_event_dict (start_node [ 'start' ] , nodes_list )
526+ events = create_event_dict (start_node_dt , nodes_list )
511527
512528 # Summary strings of workflow at top
513- html_string += '<p>Start: ' + start_node [ 'start' ] .strftime (
529+ html_string += '<p>Start: ' + start_node_dt .strftime (
514530 "%Y-%m-%d %H:%M:%S" ) + '</p>'
515- html_string += '<p>Finish: ' + last_node [ 'finish' ] .strftime (
531+ html_string += '<p>Finish: ' + last_node_dt .strftime (
516532 "%Y-%m-%d %H:%M:%S" ) + '</p>'
517533 html_string += '<p>Duration: ' + "{0:.2f}" .format (
518534 duration / 60 ) + ' minutes</p>'
519535 html_string += '<p>Nodes: ' + str (len (nodes_list )) + '</p>'
520536 html_string += '<p>Cores: ' + str (cores ) + '</p>'
521537 html_string += close_header
538+
522539 # Draw nipype nodes Gantt chart and runtimes
523- html_string += draw_lines (start_node [ 'start' ] , duration , minute_scale ,
540+ html_string += draw_lines (start_node_dt , duration , minute_scale ,
524541 space_between_minutes )
525- html_string += draw_nodes (start_node [ 'start' ] , nodes_list , cores ,
542+ html_string += draw_nodes (start_node_dt , nodes_list , cores ,
526543 minute_scale , space_between_minutes , colors )
527544
528545 # Get memory timeseries
@@ -531,11 +548,11 @@ def generate_gantt_chart(logfile,
531548 runtime_mem_ts = calculate_resource_timeseries (events , 'runtime_memory_gb' )
532549 # Plot gantt chart
533550 resource_offset = 120 + 30 * cores
534- html_string += draw_resource_bar (start_node [ 'start' ], last_node [ 'finish' ] ,
551+ html_string += draw_resource_bar (start_node_dt , last_node_dt ,
535552 estimated_mem_ts , space_between_minutes ,
536553 minute_scale , '#90BBD7' ,
537554 resource_offset * 2 + 120 , 'Memory' )
538- html_string += draw_resource_bar (start_node [ 'start' ], last_node [ 'finish' ] ,
555+ html_string += draw_resource_bar (start_node_dt , last_node_dt ,
539556 runtime_mem_ts , space_between_minutes ,
540557 minute_scale , '#03969D' ,
541558 resource_offset * 2 + 120 , 'Memory' )
@@ -546,11 +563,11 @@ def generate_gantt_chart(logfile,
546563 runtime_threads_ts = calculate_resource_timeseries (events ,
547564 'runtime_threads' )
548565 # Plot gantt chart
549- html_string += draw_resource_bar (start_node [ 'start' ], last_node [ 'finish' ] ,
566+ html_string += draw_resource_bar (start_node_dt , last_node_dt ,
550567 estimated_threads_ts ,
551568 space_between_minutes , minute_scale ,
552569 '#90BBD7' , resource_offset , 'Threads' )
553- html_string += draw_resource_bar (start_node [ 'start' ], last_node [ 'finish' ] ,
570+ html_string += draw_resource_bar (start_node_dt , last_node_dt ,
554571 runtime_threads_ts , space_between_minutes ,
555572 minute_scale , '#03969D' , resource_offset ,
556573 'Threads' )
0 commit comments