<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Analyse_Test_Script_Logs</id>
	<title>Analyse Test Script Logs - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Analyse_Test_Script_Logs"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Analyse_Test_Script_Logs&amp;action=history"/>
	<updated>2026-05-18T16:17:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Analyse_Test_Script_Logs&amp;diff=2049&amp;oldid=prev</id>
		<title>PeterHarding: 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].  &lt;pr...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Analyse_Test_Script_Logs&amp;diff=2049&amp;oldid=prev"/>
		<updated>2008-05-02T06:32:36Z</updated>

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