--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/statcollate.py Tue Oct 27 16:36:35 2009 +0000
@@ -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
+
+ # <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 output
+
+statnames = ['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.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)