1*8ccd5183SScott Kruger#!/usr/bin/env python 2*8ccd5183SScott Krugerimport glob, os 3*8ccd5183SScott Krugerimport optparse 4*8ccd5183SScott Kruger""" 5*8ccd5183SScott KrugerQuick script for parsing the output of the test system and summarizing the results. 6*8ccd5183SScott Kruger""" 7*8ccd5183SScott Kruger 8*8ccd5183SScott Krugerdef summarize_results(directory): 9*8ccd5183SScott Kruger ''' Loop over all of the results files and summarize the results''' 10*8ccd5183SScott Kruger startdir=os.path.realpath(os.path.curdir) 11*8ccd5183SScott Kruger os.chdir(directory) 12*8ccd5183SScott Kruger summary={'total':0,'success':0,'failed':0,'failures':'','todo':0,'skip':0} 13*8ccd5183SScott Kruger for cfile in glob.glob('*.counts'): 14*8ccd5183SScott Kruger sh=open(cfile,"r"); fileStr=sh.read(); sh.close() 15*8ccd5183SScott Kruger for line in fileStr.split('\n'): 16*8ccd5183SScott Kruger if not line: break 17*8ccd5183SScott Kruger try: 18*8ccd5183SScott Kruger var,val=line.split() 19*8ccd5183SScott Kruger if not val.strip(): continue 20*8ccd5183SScott Kruger val=int(val) 21*8ccd5183SScott Kruger except: 22*8ccd5183SScott Kruger var=line.split()[0] 23*8ccd5183SScott Kruger val=" ".join(line.split()[1:])+" " 24*8ccd5183SScott Kruger summary[var]=summary[var]+val 25*8ccd5183SScott Kruger 26*8ccd5183SScott Kruger print "# FAILED "+summary['failures'] 27*8ccd5183SScott Kruger total=str(summary['total']) 28*8ccd5183SScott Kruger 29*8ccd5183SScott Kruger for t in "success failed todo skip".split(): 30*8ccd5183SScott Kruger percent=summary[t]/float(summary['total'])*100 31*8ccd5183SScott Kruger prcnt="{:3.1f}".format(percent) 32*8ccd5183SScott Kruger print "# "+t+" "+ str(summary[t])+"/"+total+" tests ("+prcnt+'%)' 33*8ccd5183SScott Kruger return 34*8ccd5183SScott Kruger 35*8ccd5183SScott Krugerdef main(): 36*8ccd5183SScott Kruger parser = optparse.OptionParser(usage="%prog [options]") 37*8ccd5183SScott Kruger parser.add_option('-d', '--directory', dest='directory', 38*8ccd5183SScott Kruger help='Directory containing results of petsc test system', 39*8ccd5183SScott Kruger default='counts') 40*8ccd5183SScott Kruger options, args = parser.parse_args() 41*8ccd5183SScott Kruger 42*8ccd5183SScott Kruger # Process arguments 43*8ccd5183SScott Kruger if len(args) > 0: 44*8ccd5183SScott Kruger parser.print_usage() 45*8ccd5183SScott Kruger return 46*8ccd5183SScott Kruger 47*8ccd5183SScott Kruger directory=options.directory 48*8ccd5183SScott Kruger if not os.path.isdir(directory): 49*8ccd5183SScott Kruger print directory+' is not a directory' 50*8ccd5183SScott Kruger return 51*8ccd5183SScott Kruger 52*8ccd5183SScott Kruger summarize_results(directory) 53*8ccd5183SScott Kruger 54*8ccd5183SScott Krugerif __name__ == "__main__": 55*8ccd5183SScott Kruger main() 56