## Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).# All rights reserved.# This component and the accompanying materials are made available# under the terms of the License "Eclipse Public License v1.0"# which accompanies this distribution, and is available# at the URL "http://www.eclipse.org/legal/epl-v10.html".## Initial Contributors:# Nokia Corporation - initial contribution.## Contributors:## Description: # statcollate#""" Produce output for a graphing program or spreadsheet from the statistic logs produced by buildstats.py from Raptor logs. e.g. by analysing several logs we can see how "number of successful compiles" improves over time."""import sysfrom optparse import OptionParserimport osimport xml.dom.minidomfrom stat import *namespace = "http://symbian.com/2007/xml/build/raptor/stats"class StatsFail(Exception): passdef pullStats(statnames, file): """Load a Statistics document and pull stats for a graph""" # try to read and parse the XML file try: dom = xml.dom.minidom.parse(file) except Exception,e: # a whole bag of exceptions can be raised here print "pullStats: %s" % str(e) raise StatsFail # <build> is always the root element stats = dom.documentElement objects = [] build = stats.childNodes[1] # create a Data Model object from each sub-element output = {} output['date'] = build.getAttribute('date') #print "statnames %s\n" % str(statnames) #test for child in build.childNodes: if child.namespaceURI == namespace \ and child.nodeType == child.ELEMENT_NODE \ and child.hasAttributes(): #print "child node %s\n" % child.getAttribute('name') #test name = child.getAttribute('name') if name in statnames: #print "1" #test output[name] = child.getAttribute('count') return outputstatnames = ['postlink success', 'compile success', 'compile fail']## Command Line Interface ################################################parser = OptionParser(prog = "statgraph", usage = "%prog [-h | options] [<statsfile>] [[<statsfile>] ...]")(options, args) = parser.parse_args()statfilename = "stdin"table = sys.stdoutprint >> table, 'Date,', # add 'Date' in front of namescomma=""for name in statnames: print >> table, comma+name, #! this order is not the order in dictionary comma=', ' #print 'test,', #testprint >> table, ""if len(args) > 0: for statfilename in args: sys.__stderr__.write("Loading %s\n" % statfilename) file = open(statfilename, "r") try: stats = pullStats(statnames, file) except StatsFail,e: sys.__stderr__.write("Can't process file %s\n" % statfilename) sys.exit(1) #print stats.items() # test file.close() comma="" print >> table, stats['date'] + ",", for name in statnames: print >> table, comma+stats[name], comma=', ' #print 'test,', # test print >> table, ""else: sys.stderr.write("No files specified") #pullStats(statnames,sys.stdin)