Analyse Test Script Logs
Jump to navigation
Jump to search
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