#!/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 | |