blob: ce3cf93f186f5051f3cc0915cd95768b787b8077 [file] [log] [blame]
#!/usr/bin/env
import datetime, threading, thread
class CheckPerf:
writelock = threading.Lock()
def __init__(self):
self.begintime = datetime.datetime.now()
self.endtime = None
self.mintime = 0.0
self.maxtime = 0.0
self.successcount = 0
self.failedcount = 0
self.totaltime = 0.0
self.reportmsg = ''
self.prechktime = None
def startchk(self):
self.begintime = datetime.datetime.now()
self.endtime = None
self.mintime = 99999999.0
self.maxtime = 0.0
self.checkcount = 0
self.totaltime = 0.0
self.reportmsg = ''
self.prechktime = self.begintime
def setchkpoint(self, success=True):
self.endtime = datetime.datetime.now()
delta = self.endtime - self.prechktime
t = delta.seconds + delta.microseconds / 1000000.0
if t < self.mintime: self.mintime = t
if t > self.maxtime: self.maxtime = t
if success:
self.successcount += 1
else:
self.failedcount += 1
self.totaltime += t
self.prechktime = self.endtime
def _output_file(self, out_file):
handler = open(out_file, 'a+b')
handler.write("thrd[%d]" % thread.get_ident())
handler.write(' - ' + self.reportmsg + '\n')
handler.close()
def _reportToFile(self, out_file):
CheckPerf.writelock.acquire()
try:
self._output_file(out_file)
print "generate report file " , out_file
except Exception, ex:
print "generator report file ", out_file , " Error ", ex
CheckPerf.writelock.release()
def report_msg(self):
totalcheckcount = self.successcount + self.failedcount
if totalcheckcount > 2:
avg = (self.totaltime - self.mintime - self.maxtime) / (totalcheckcount - 2)
elif totalcheckcount == 0:
rpt = "No check point has been set"
return rpt
else:
avg = self.totaltime / totalcheckcount
rpt = 'execute[%d]count cost(s) [%.4f]max[%.4f]min[%.4f]avg[%.4f] success[%d] failed[%d]' \
% (totalcheckcount, self.totaltime, self.maxtime, self.mintime, avg, \
self.successcount, self.failedcount)
return rpt
def report(self, out_file=None):
self.reportmsg = self.report_msg()
if out_file:
self._reportToFile(out_file)
return self.reportmsg