initialize
diff --git a/src/performance.py b/src/performance.py
new file mode 100644
index 0000000..ce3cf93
--- /dev/null
+++ b/src/performance.py
@@ -0,0 +1,75 @@
+#!/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
+