diff -r 820b22e13ff1 -r 39c28ec933dd sbsv2/raptor/bin/statcollate.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv2/raptor/bin/statcollate.py Mon May 10 19:54:49 2010 +0100 @@ -0,0 +1,112 @@ +# +# 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 sys +from optparse import OptionParser +import os +import xml.dom.minidom +from stat import * + +namespace = "http://symbian.com/2007/xml/build/raptor/stats" + +class StatsFail(Exception): + pass + +def 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 + + # 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 output + +statnames = ['postlink success', 'compile success', 'compile fail'] + +## Command Line Interface ################################################ + +parser = OptionParser(prog = "statgraph", + usage = "%prog [-h | options] [] [[] ...]") + +(options, args) = parser.parse_args() + +statfilename = "stdin" + +table = sys.stdout +print >> table, 'Date,', # add 'Date' in front of names + +comma="" +for name in statnames: + print >> table, comma+name, #! this order is not the order in dictionary + comma=', ' + #print 'test,', #test + +print >> 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)