@@ -115,68 +115,60 @@ def nodelist_runner(nodes, updatehash=False, stop_first=False):
115
115
yield i , result , err
116
116
117
117
118
- def write_report (node , report_type = None , is_mapnode = False ):
119
- """Write a report file for a node"""
118
+ def write_node_report (node , result = None , is_mapnode = False ):
119
+ """Write a report file for a node. """
120
120
if not str2bool (node .config ['execution' ]['create_report' ]):
121
121
return
122
122
123
- if report_type not in ['preexec' , 'postexec' ]:
124
- logger .warning ('[Node] Unknown report type "%s".' , report_type )
125
- return
126
-
127
123
cwd = node .output_dir ()
128
- report_dir = os .path .join (cwd , '_report' )
129
- report_file = os .path .join (report_dir , 'report.rst' )
130
- makedirs (report_dir , exist_ok = True )
131
-
132
- logger .debug ('[Node] Writing %s-exec report to "%s"' , report_type [:- 4 ],
133
- report_file )
134
- if report_type .startswith ('pre' ):
135
- lines = [
136
- write_rst_header ('Node: %s' % get_print_name (node ), level = 0 ),
137
- write_rst_list (
138
- ['Hierarchy : %s' % node .fullname ,
139
- 'Exec ID : %s' % node ._id ]),
140
- write_rst_header ('Original Inputs' , level = 1 ),
141
- write_rst_dict (node .inputs .trait_get ()),
142
- ]
143
- with open (report_file , 'wt' ) as fp :
144
- fp .write ('\n ' .join (lines ))
145
- return
124
+ report_file = Path (cwd ) / '_report' / 'report.rst'
125
+ report_file .parent .mkdir (exist_ok = True )
146
126
147
127
lines = [
128
+ write_rst_header ('Node: %s' % get_print_name (node ), level = 0 ),
129
+ write_rst_list (
130
+ ['Hierarchy : %s' % node .fullname ,
131
+ 'Exec ID : %s' % node ._id ]),
132
+ write_rst_header ('Original Inputs' , level = 1 ),
133
+ write_rst_dict (node .inputs .trait_get ()),
134
+ ]
135
+
136
+ if result is None :
137
+ logger .debug ('[Node] Writing pre-exec report to "%s"' , report_file )
138
+ report_file .write_text ('\n ' .join (lines ))
139
+ return
140
+
141
+ logger .debug ('[Node] Writing post-exec report to "%s"' , report_file )
142
+ lines += [
148
143
write_rst_header ('Execution Inputs' , level = 1 ),
149
144
write_rst_dict (node .inputs .trait_get ()),
145
+ write_rst_header ('Execution Outputs' , level = 1 )
150
146
]
151
147
152
- result = node .result # Locally cache result
153
148
outputs = result .outputs
154
-
155
149
if outputs is None :
156
- with open ( report_file , 'at' ) as fp :
157
- fp . write ('\n ' .join (lines ))
150
+ lines += [ 'None' ]
151
+ report_file . write_text ('\n ' .join (lines ))
158
152
return
159
153
160
- lines .append (write_rst_header ('Execution Outputs' , level = 1 ))
161
-
162
154
if isinstance (outputs , Bunch ):
163
155
lines .append (write_rst_dict (outputs .dictcopy ()))
164
156
elif outputs :
165
157
lines .append (write_rst_dict (outputs .trait_get ()))
158
+ else :
159
+ lines += ['Outputs object was empty.' ]
166
160
167
161
if is_mapnode :
168
162
lines .append (write_rst_header ('Subnode reports' , level = 1 ))
169
163
nitems = len (ensure_list (getattr (node .inputs , node .iterfield [0 ])))
170
164
subnode_report_files = []
171
165
for i in range (nitems ):
172
- nodecwd = os . path . join (cwd , 'mapflow' , '_%s%d' % ( node . name , i ),
173
- '_report' , 'report.rst' )
174
- subnode_report_files .append ('subnode %d : %s' % (i , nodecwd ))
166
+ subnode_file = Path (cwd ) / 'mapflow' / (
167
+ '_%s%d' % ( node . name , i )) / '_report' / 'report.rst'
168
+ subnode_report_files .append ('subnode %d : %s' % (i , subnode_file ))
175
169
176
170
lines .append (write_rst_list (subnode_report_files ))
177
-
178
- with open (report_file , 'at' ) as fp :
179
- fp .write ('\n ' .join (lines ))
171
+ report_file .write_text ('\n ' .join (lines ))
180
172
return
181
173
182
174
lines .append (write_rst_header ('Runtime info' , level = 1 ))
@@ -188,15 +180,9 @@ def write_report(node, report_type=None, is_mapnode=False):
188
180
'prev_wd' : getattr (result .runtime , 'prevcwd' , '<not-set>' ),
189
181
}
190
182
191
- if hasattr (result .runtime , 'cmdline' ):
192
- rst_dict ['command' ] = result .runtime .cmdline
193
-
194
- # Try and insert memory/threads usage if available
195
- if hasattr (result .runtime , 'mem_peak_gb' ):
196
- rst_dict ['mem_peak_gb' ] = result .runtime .mem_peak_gb
197
-
198
- if hasattr (result .runtime , 'cpu_percent' ):
199
- rst_dict ['cpu_percent' ] = result .runtime .cpu_percent
183
+ for prop in ('cmdline' , 'mem_peak_gb' , 'cpu_percent' ):
184
+ if hasattr (result .runtime , prop ):
185
+ rst_dict [prop ] = getattr (result .runtime , prop )
200
186
201
187
lines .append (write_rst_dict (rst_dict ))
202
188
@@ -224,9 +210,17 @@ def write_report(node, report_type=None, is_mapnode=False):
224
210
write_rst_dict (result .runtime .environ ),
225
211
]
226
212
227
- with open (report_file , 'at' ) as fp :
228
- fp .write ('\n ' .join (lines ))
229
- return
213
+ report_file .write_text ('\n ' .join (lines ))
214
+
215
+
216
+ def write_report (node , report_type = None , is_mapnode = False ):
217
+ """Write a report file for a node - DEPRECATED"""
218
+ if report_type not in ('preexec' , 'postexec' ):
219
+ logger .warning ('[Node] Unknown report type "%s".' , report_type )
220
+ return
221
+
222
+ write_node_report (node , is_mapnode = is_mapnode ,
223
+ result = node .result if report_type == 'postexec' else None )
230
224
231
225
232
226
def save_resultfile (result , cwd , name , rebase = None ):
0 commit comments