Cheng Tang | c92b3ea | 2012-07-02 17:29:24 +0800 | [diff] [blame] | 1 | #!/usr/bin/env
|
| 2 |
|
| 3 | import datetime, threading, thread
|
| 4 |
|
| 5 | class CheckPerf:
|
| 6 | writelock = threading.Lock()
|
| 7 | def __init__(self):
|
| 8 | self.begintime = datetime.datetime.now()
|
| 9 | self.endtime = None
|
| 10 | self.mintime = 0.0
|
| 11 | self.maxtime = 0.0
|
| 12 | self.successcount = 0
|
| 13 | self.failedcount = 0
|
| 14 | self.totaltime = 0.0
|
| 15 | self.reportmsg = ''
|
| 16 | self.prechktime = None
|
| 17 |
|
| 18 | def startchk(self):
|
| 19 | self.begintime = datetime.datetime.now()
|
| 20 | self.endtime = None
|
| 21 | self.mintime = 99999999.0
|
| 22 | self.maxtime = 0.0
|
| 23 | self.checkcount = 0
|
| 24 | self.totaltime = 0.0
|
| 25 | self.reportmsg = ''
|
| 26 | self.prechktime = self.begintime
|
| 27 |
|
| 28 | def setchkpoint(self, success=True):
|
| 29 | self.endtime = datetime.datetime.now()
|
| 30 | delta = self.endtime - self.prechktime
|
| 31 | t = delta.seconds + delta.microseconds / 1000000.0
|
| 32 | if t < self.mintime: self.mintime = t
|
| 33 | if t > self.maxtime: self.maxtime = t
|
| 34 | if success:
|
| 35 | self.successcount += 1
|
| 36 | else:
|
| 37 | self.failedcount += 1
|
| 38 | self.totaltime += t
|
| 39 | self.prechktime = self.endtime
|
| 40 |
|
| 41 | def _output_file(self, out_file):
|
| 42 | handler = open(out_file, 'a+b')
|
| 43 | handler.write("thrd[%d]" % thread.get_ident())
|
| 44 | handler.write(' - ' + self.reportmsg + '\n')
|
| 45 | handler.close()
|
| 46 |
|
| 47 | def _reportToFile(self, out_file):
|
| 48 | CheckPerf.writelock.acquire()
|
| 49 | try:
|
| 50 | self._output_file(out_file)
|
| 51 | print "generate report file " , out_file
|
| 52 | except Exception, ex:
|
| 53 | print "generator report file ", out_file , " Error ", ex
|
| 54 | CheckPerf.writelock.release()
|
| 55 |
|
| 56 | def report_msg(self):
|
| 57 | totalcheckcount = self.successcount + self.failedcount
|
| 58 | if totalcheckcount > 2:
|
| 59 | avg = (self.totaltime - self.mintime - self.maxtime) / (totalcheckcount - 2)
|
| 60 | elif totalcheckcount == 0:
|
| 61 | rpt = "No check point has been set"
|
| 62 | return rpt
|
| 63 | else:
|
| 64 | avg = self.totaltime / totalcheckcount
|
| 65 | rpt = 'execute[%d]count cost(s) [%.4f]max[%.4f]min[%.4f]avg[%.4f] success[%d] failed[%d]' \
|
| 66 | % (totalcheckcount, self.totaltime, self.maxtime, self.mintime, avg, \
|
| 67 | self.successcount, self.failedcount)
|
| 68 | return rpt
|
| 69 |
|
| 70 | def report(self, out_file=None):
|
| 71 | self.reportmsg = self.report_msg()
|
| 72 | if out_file:
|
| 73 | self._reportToFile(out_file)
|
| 74 | return self.reportmsg
|
| 75 |
|