1 from __future__
import print_function
2 from xml.dom
import minidom
5 def createNode(xml_doc, node_name, values = {}, parent = None):
9 node = xml_doc.createElement(node_name)
11 for (key, value)
in values.items():
12 node.setAttribute(key,
str(value))
13 parent.appendChild(node)
19 """ opens existing or creates a new XML file 21 ---- one of the erliest functions - quite nasty looking :)""" 24 node_xml = xmldoc.getElementsByTagName(
"xml")[0]
32 for x
in nodes.getElementsByTagName(child_name):
39 module_node =
createNode(xml_doc,
"Module", values = data_dict, parent = curr_stat_node)
45 moduletime_stat =
createNode(xml_doc,
"ModuleTime", values = data_dict[
"stats"], parent = module_node)
47 module_node.appendChild(moduletime_stat)
51 (evt_num, evt_time) = evt_time_data
53 event_node =
createNode(xml_doc,
"EventTime", values = {
"evt_num": evt_num,
"time": evt_time}, parent = curr_stat_node)
57 (evt_num, evt_time) = evt_time_data
58 event_node =
createNode(xml_doc,
"EventRSS", values = {
"evt_num": evt_num,
"time": evt_time}, parent = curr_stat_node)
62 (evt_num, evt_time) = evt_time_data
63 event_node =
createNode(xml_doc,
"EventVSIZE", values = {
"evt_num": evt_num,
"time": evt_time}, parent = curr_stat_node)
66 event_node =
createNode(xml_doc,
"EdmSize", values = data, parent = curr_stat_node)
69 event_node =
createNode(xml_doc,
"IgSummary", values = data, parent = curr_stat_node)
72 event_node =
createNode(xml_doc,
"Memcheck", values = data, parent = curr_stat_node)
76 seq_node =
createNode(xml_doc,
"Sequence", values = data, parent = curr_seq_node)
80 """ opens existing or creates a new XML file 81 returns the (existing or created) unique element for statiscs""" 83 node_xml = xml_doc.getElementsByTagName(
"xml")[0]
88 nodes =node_xml.getElementsByTagName(
"Sequences")
90 currentNode = [node
for node
in nodes
91 if (release ==node.attributes[
"release"].value)]
95 currentNode = currentNode[0]
98 values={
"release": release}
100 currentNode =
createNode(node_name=
"Sequences", xml_doc=xml_doc, parent=node_xml,
102 node_xml.appendChild(currentNode)
106 """ opens existing or creates a new XML object """ 108 node_xml = xml_doc.getElementsByTagName(
"xml")[0]
122 for seq
in sequences:
126 def export_xml(release, jobID, timelog_result, xml_doc, metadata = None, edmSize_result =None, parentNode = None):
127 """ jobID is a dictionary now ! """ 135 values.update({
"release": release})
137 values.update(metadata)
140 jobStatsNode =
createNode(node_name=
"jobStats", xml_doc=xml_doc, parent=parentNode,
145 (mod_timelog_result, evt_timelog_result, rss_result, vsize_result) = timelog_result
148 for (mod_name, mod_time_result)
in mod_timelog_result.items():
151 """ #TODO: actualy we're not supposed to have any of the old statistics 152 # clean it up if there are old stats of EventTime,RSS,VSIZE 153 xml_delete_children(jobStatsNode, "EventTime") 154 xml_delete_children(jobStatsNode, "EventRSS") 155 xml_delete_children(jobStatsNode, "EventVSIZE") 156 xml_delete_children(jobStatsNode, "EdmSize") """ 159 if (evt_timelog_result):
160 for evt_time_item
in evt_timelog_result:
165 for evt_time_item
in rss_result:
170 for evt_time_item
in vsize_result:
174 for edmItem
in edmSize_result:
177 def export_xml_ig(release, jobID, igprof_result, xml_doc, metadata = None, parentNode = None):
178 """ jobID is a dictionary now ! """ 186 values.update({
"release": release})
188 values.update(metadata)
191 jobStatsNode =
createNode(node_name=
"jobStats", xml_doc=xml_doc, parent=parentNode,
194 for igsumm
in igprof_result:
202 values.update({
"release": release})
204 values.update(metadata)
207 jobStatsNode =
createNode(node_name=
"jobStats", xml_doc=xml_doc, parent=parentNode,
215 str_values = run_info[
"General"]
221 str_values[
"release"] = release
223 str_values[
"release"] = str_values[
"test_release_based_on"]
225 runInfoNode =
createNode(node_name=
"RunInfo", xml_doc=xml_doc, parent=node_xml,
228 for (testName, result)
in run_info[
"TestResults"].
items():
230 if isinstance(result, list):
231 for result_item
in result:
232 result_item.update({
"testname": testName})
237 if "jobs" in result_item:
238 jobs = result_item[
"jobs"]
239 del result_item[
"jobs"]
241 testNode =
createNode(node_name=
"testResult", xml_doc=xml_doc, parent=runInfoNode, values=result_item)
246 if testName ==
"TimeSize":
247 export_xml(xml_doc = xml_doc, parentNode = testNode, **job)
248 elif testName ==
"IgProf_Mem":
249 export_xml_ig(xml_doc = xml_doc, parentNode = testNode, **job)
250 elif testName ==
"IgProf_Perf":
251 export_xml_ig(xml_doc = xml_doc, parentNode = testNode, **job)
252 elif testName ==
"Memcheck":
255 result.update({
"testname": testName})
256 createNode(node_name=
"testResult", xml_doc=xml_doc, parent=runInfoNode, values=result)
259 if len(run_info[
'unrecognized_jobs']):
260 unrecognizedJobsNode =
createNode(node_name=
"Unrecognized_JOBS", xml_doc=xml_doc, parent=runInfoNode, values={})
262 for job
in run_info[
'unrecognized_jobs']:
264 testName = job[
"metadata"][
"testname"]
265 if testName ==
"TimeSize":
266 export_xml(xml_doc = xml_doc, parentNode = unrecognizedJobsNode, **job)
267 elif testName ==
"IgProf_Mem":
268 export_xml_ig(xml_doc = xml_doc, parentNode = unrecognizedJobsNode, **job)
269 elif testName ==
"IgProf_Perf":
270 export_xml_ig(xml_doc = xml_doc, parentNode = unrecognizedJobsNode, **job)
271 elif testName ==
"Memcheck":
276 cmsSciMarkNode =
createNode(node_name=
"cmsSciMarks", xml_doc=xml_doc, parent=runInfoNode, values = {})
277 for csiMark
in run_info[
"cmsSciMark"]:
279 createNode(node_name=
"cmsSciMark", xml_doc=xml_doc, parent=cmsSciMarkNode, values=csiMark)
281 print(xml_doc.toprettyxml(indent=
"\t"))
285 runInfoNode =
createNode(node_name=
"EventContentRules", xml_doc=xml_doc, parent=node_xml,
289 xml = xml_doc.toprettyxml(indent=
" ")
292 if (xmlFileName ==
""):
295 tmp_dir=
"/tmp/%s_perfsuite_xml"%os.getenv(
"USER")
296 if not os.path.exists(tmp_dir):
297 os.system(
"mkdir %s"%tmp_dir)
298 xmlFileName=os.path.join(tmp_dir,xmlFileName)
300 out = open(xmlFileName,
"w")
304 print(
"Now copying %s to stage directory %s..."%(xmlFileName,remotedir))
308 (host,dir)=remotedir.split(
":")
310 copy_cmd=
'cd %s; tar cf - %s|ssh %s "cd %s;tar xf -"'%(tmp_dir,os.path.basename(xmlFileName),host,dir)
312 if not os.path.exists(remotedir):
313 os.system(
"mkdir %s"%remotedir)
315 copy_cmd=
'cp -pR %s/%s %s'%(tmp_dir,os.path.basename(xmlFileName),remotedir)
319 print(
"Successfully copied XML report %s to stage directory %s"%(xmlFileName,remotedir))
320 except Exception
as e :
321 print(
"Issues with copying XML report %s to stage directory %s!\n%s"%(xmlFileName,remotedir,
str(e)))
def xml_export_Sequences(xml_doc, sequences, release)
def xml_export_EventTimeRecord(evt_time_data, curr_stat_node, xml_doc)
def write_xml(xml_doc, remotedir, xmlFileName)
def xml_export_EventRssRecord(evt_time_data, curr_stat_node, xml_doc)
def xml_export_ModuleTimeRecord(data_dict, curr_stat_node, xml_doc)
S & print(S &os, JobReport::InputFile const &f)
def export_xml(release, jobID, timelog_result, xml_doc, metadata=None, edmSize_result=None, parentNode=None)
def createNode(xml_doc, node_name, values={}, parent=None)
def exportECRules(xml_doc, rules)
def xml_delete_children(nodes, child_name)
def export_xml_memcheck(release, jobID, memcheck_errors, xml_doc, metadata=None, parentNode=None)
def xml_init_Sequences(xml_doc, release)
def xml_export_SequenceRecord(data, curr_seq_node, xml_doc)
def exportRunInfo(xml_doc, run_info, release=None, print_out=False)
def xml_export_EventVsizeRecord(evt_time_data, curr_stat_node, xml_doc)
def xml_export_IgSummary(data, curr_stat_node, xml_doc)
def export_xml_ig(release, jobID, igprof_result, xml_doc, metadata=None, parentNode=None)
def xml_export_Memcheck(data, curr_stat_node, xml_doc)
def xml_export_EdmRecord(data, curr_stat_node, xml_doc)