# this summaries data from the Hudson server used for building and testing.
# On my system, it looks at '/var/local/hudson-rt/jobs/autoplot-test032/builds/' but 
# the 'dir' parameter allows it to be pointed out a different directory.  
# Note the script editor automatically creates a GUI to specify the location.

from javax.xml.parsers import ParserConfigurationException
from javax.xml.parsers import DocumentBuilderFactory
from javax.xml.xpath import XPath
from javax.xml.xpath import XPathExpressionException
from javax.xml.xpath import XPathFactory
from javax.xml.xpath import XPathConstants
from org.xml.sax import InputSource
from org.virbo.dataset import DDataSet

from java.io import File
from java.io import FileInputStream
from java.lang import Double

dir= getParam( 'dir', '/var/local/hudson-rt/jobs/autoplot-test032/builds/', 'Directory containing builds $Y-$m-$d_$H-$M-$S' )
if ( dir[-1]!='/' ): dir=dir+'/'

tp = TimeParser.create( '%Y-%m-%d_%H-%M-%S' )

print 'listing directory '+dir +'*-*-*_*-*-*'
files= listDirectory(dir+'*-*-*_*-*-*')

from org.virbo.dsutil import DataSetBuilder
build= DataSetBuilder(2,100,2)

for i in files:
   t= tp.parse(i).getTime( Units.us2000 )

   file= File( dir + i + 'build.xml' )

   if ( not file.exists() ): 
      print 'didn''t find build.xml for ', dir + i
      continue

   myin= FileInputStream( file )

   builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
   source = InputSource( myin )
   initialDocument = builder.parse(source)
   factory= XPathFactory.newInstance()
   xpath= factory.newXPath()
   
   temps= xpath.evaluate( '/build/duration/text()', initialDocument, XPathConstants.NODESET )
   ms= temps.item(0).nodeValue

   build.putValue( -1, 0, t )
   build.putValue( -1, 1, Double.parseDouble(ms) )
   build.nextRecord()

   myin.close()

ds= build.getDataSet()

if ( ds.length()==0 ):
   print 'nothin found'
   raise Exception('nothin found')

print 'ds=', ds
time= ds[:,0] 
time.putProperty( QDataSet.UNITS, Units.us2000 )
data= ds[:,1] / 1e3
data.putProperty( QDataSet.UNITS, Units.seconds )
data.putProperty( QDataSet.TITLE, 'Time to calculate '+ dir )
data.putProperty( QDataSet.SCALE_TYPE, 'linear' )

result= link( time, data )