blob: ce3cf93f186f5051f3cc0915cd95768b787b8077 [file] [log] [blame]
Cheng Tangc92b3ea2012-07-02 17:29:24 +08001#!/usr/bin/env
2
3import datetime, threading, thread
4
5class 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