Analyse Test Script Logs
Revision as of 17:32, 2 May 2008 by PeterHarding (talk | contribs) (New page: =calculate Mean and SD= This script takes the output of another script which produces test summary logs and calculates Mean and SD for query execution times. See [ODBC Test Script]. <pr...)
calculate Mean and SD
This script takes the output of another script which produces test summary logs and calculates Mean and SD for query execution times. See [ODBC Test Script].
#!/usr/bin/env python # # Purpose: # # $Id:$ # #------------------------------------------------------------------------------- """ Analyse SLAPD logs ... """ #------------------------------------------------------------------------------- import os import re import sys import math import getopt import logging #------------------------------------------------------------------------------- from datetime import datetime #------------------------------------------------------------------------------- __version__ = "1.0.0" __id__ = "@(#) analyse.py [%s] 01/05/2008" verbose_flg = False debug_level = 0 LOGFILE = "xxx.log" PIDFILE = "analyse.pid" tables = [] log = None pid = None file_name = None #=============================================================================== def INFO(msg): if log: log.info(' ' + msg) if verbose_flg: print "[analyse] %s" % msg #------------------------------------------------------------------------------- def ERROR(msg): if log: log.error(msg) sys.stderr.write('[analyse] %s\n' % msg) #------------------------------------------------------------------------------- def WARNING(msg): if log: log.warning('*****' + msg + '*****') if verbose_flg: print "[analyse] %s" % msg #=============================================================================== def analyse(fname): try: f = open(fname, 'r') except IOError, e: sys.stderr.write('[analyse] Open failed: ' + str(e) + '\n') sys.exit(1) s_Started = 'Started' p_Started = re.compile(s_Started) s_time = r'.*\[([^\]]*)\]' p_time = re.compile(s_time) times = [] cnt = 0 sum_time = 0.0 sum_time2 = 0.0 while True: line = f.readline() if not line: break line = line.strip() m = p_Started.search(line) if m: continue m = p_time.search(line) if m: time = float(m.group(1)) times.append(time) cnt += 1 sum_time += time t_squared = time * time sum_time2 += t_squared if verbose_flg: print "%s %3d %s" % time mean = sum_time / cnt sum_sqr = 0.0 for t in times: delta = (t - mean) sqr = delta * delta sum_sqr += sqr sigma = math.sqrt(sum_sqr / cnt) sd = math.sqrt((sum_time2 - (cnt * (mean * mean)))/cnt) print "Mean = %7.3f [%d] sigma %.2f SD %.2f" % (mean, cnt, sigma, sd) f.close() if debug_level > 5: INFO("Processed %d lines" % (len(Data), )) #=============================================================================== def init(): global log global pid pid = os.getpid() log = logging.getLogger('xxx') hdlr = logging.FileHandler(LOGFILE) fmtr = logging.Formatter('%(asctime)s %(levelname)s %(message)s') hdlr.setFormatter(fmtr) log.addHandler(hdlr) log.setLevel(logging.INFO) INFO("Started processing") if (not verbose_flg): INFO("PID is %d" % pid) #=============================================================================== def main(): global verbose_flg global debug_level global file_name try: opts, args = getopt.getopt(sys.argv[1:], "df:D:vVw?") except getopt.error, msg: print __doc__ return 1 for o, a in opts: if o == '-d': debug_level += 1 elif o == '-D': debug_level = int(a) elif o == '-f': file_name = a elif o == '-v': verbose_flg = True elif o == '-V': print "[analyse] Version: %s" % __version__ return 1 elif o == '-?': print __doc__ return 1 print "[analyse] Working directory is %s" % os.getcwd() if (debug_level > 0): print "Debugging level set to %d" % debug_level if args: for arg in args: print arg init() analyse('lastnight.log') return 0 #------------------------------------------------------------------------------- if __name__ == '__main__' or __name__ == sys.argv[0]: try: sys.exit(main()) except KeyboardInterrupt, e: print "[analyse] Interrupted!" #------------------------------------------------------------------------------- """ Revision History: Date Who Description -------- --- ------------------------------------------------------------ 20080501 plh Initial implementation Problems to fix: To Do: Issues: """ #-------------------------------------------------------------------------------
Input File
2008-05-02 13:03:58,328 INFO ===== Started processing ================================== 2008-05-02 13:04:00,125 INFO 01 ManifestNo EA004454072AU [1.735] sec 7 rows returned 2008-05-02 13:04:01,546 INFO 02 ManifestNo EE007797760BD [1.421] sec 4 rows returned 2008-05-02 13:04:02,640 INFO 03 ManifestNo EA004393078AU [1.094] sec 5 rows returned 2008-05-02 13:04:03,625 INFO 04 ManifestNo EA003698436AU [0.985] sec 3 rows returned 2008-05-02 13:04:05,328 INFO 05 ManifestNo EA004065228AU [1.703] sec 8 rows returned 2008-05-02 13:04:06,750 INFO 06 ManifestNo EE017124361BR [1.422] sec 6 rows returned 2008-05-02 13:04:08,203 INFO 07 ManifestNo EM710190113KR [1.453] sec 5 rows returned 2008-05-02 13:04:09,655 INFO 08 ManifestNo EM640327308KR [1.453] sec 6 rows returned 2008-05-02 13:04:11,125 INFO 09 ManifestNo EE000212495VU [1.453] sec 6 rows returned 2008-05-02 13:04:12,078 INFO 10 ManifestNo EH609611995CN [0.953] sec 1 rows returned
Output
Looks like:
Mean = 3.762 [5542] sigma 1.53 SD 1.53