diff -r 5e7562f67577 -r c327db0664bb sbsv2/raptor/bin/statcollate.py --- a/sbsv2/raptor/bin/statcollate.py Sun May 16 13:06:27 2010 +0100 +++ b/sbsv2/raptor/bin/statcollate.py Mon May 17 20:20:32 2010 +0100 @@ -1,112 +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) +# +# 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)