[CalendarServer-changes] [1601] CalendarServer/trunk/twistedcaldav/admin

source_changes at macosforge.org source_changes at macosforge.org
Fri Jun 8 11:31:10 PDT 2007


Revision: 1601
          http://trac.macosforge.org/projects/calendarserver/changeset/1601
Author:   cdaboo at apple.com
Date:     2007-06-08 11:31:09 -0700 (Fri, 08 Jun 2007)

Log Message:
-----------
plists cannot cope with longs, so use strings instead. Also tweak the formatting for better output.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/admin/formatters.py
    CalendarServer/trunk/twistedcaldav/admin/logs.py

Modified: CalendarServer/trunk/twistedcaldav/admin/formatters.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/admin/formatters.py	2007-06-08 17:07:39 UTC (rev 1600)
+++ CalendarServer/trunk/twistedcaldav/admin/formatters.py	2007-06-08 18:31:09 UTC (rev 1601)
@@ -92,9 +92,9 @@
 
         for f in fields:
             if isinstance(f, float):
-                p = "% 9.2f" % (f,)
-            elif isinstance(f, int):
-                p = "% 9d" % (f,)
+                p = ("% " + str(spacing - 1) + ".2f") % (f,)
+            elif isinstance(f, int) or isinstance(f, long):
+                p = ("% " + str(spacing - 1) + "d") % (f,)
             else:
                 p = str(f)
             self.write(p)
@@ -111,12 +111,15 @@
         for record in report['records']:
             self.writeLine((record[f] for f in fields))
 
-    def writeMap(self, reportmap, fields, headings):
+    def writeMap(self, reportmap, fields, types, headings):
         self.writeLine((headings[f] for f in fields))
+        spacing = self.options.get('spacing', 16)
+        self.write(('-' * (spacing - 1) + ' ') * len(fields) + '\n')
 
         for key, value in reportmap.iteritems():
             values = (key,)
             values += tuple(value[f] for f in fields[1:])
+            values = [types[i](value) for i, value in enumerate(values)]
             self.writeLine(values)
 
     def writeFrequencies(self, frequencies):
@@ -193,11 +196,13 @@
     def report_logs(self, report):
         self.write('Log Statistics:\n\n')
 
-        self.write('  Start Date: %s\n  End Date  :%s\n\n' % report['data']['dateRange'])
+        self.write('  Start Date: %s\n  End Date  : %s\n\n' % report['data']['dateRange'])
 
-        self.write('  Bytes Out: %s\n\n' % (report['data']['bytesOut'],))
+        self.write('  Bytes Out: %s (%.2f GB)\n\n' % (report['data']['bytesOut'], report['data']['bytesOut'] / (1024.0 * 1024 * 1024)))
         self.write('  # Requests:\n')
 
+        title_spacing = self.options.get('spacing', 16) - 1
+
         fields = (
             'method',
             'num',
@@ -212,21 +217,35 @@
             'avtime',
             'maxtime',
         )
+        types = (
+            str,
+            long,
+            long,
+            long,
+            long,
+            long,
+            long,
+            long,
+            long,
+            float,
+            float,
+            float,
+        )
         headings = {
             'method':        'Method',
-            'num':           '# Requests',
-            'numOK':         '     # OK',
-            'numBAD':        '    # BAD',
-            'numISE':        ' # Failed',
-            'numOther':      '  # Other',
-            'minbytes':      'Min. bytes',
-            'avbytes':       ' Av. bytes',
-            'maxbytes':      'Max. bytes',
-            'mintime':       'Min. time',
-            'avtime':        ' Av. time',
-            'maxtime':       'Max. time',
+            'num':           '# Requests'.rjust(title_spacing),
+            'numOK':         '# OK'.rjust(title_spacing),
+            'numBAD':        '# BAD'.rjust(title_spacing),
+            'numISE':        '# Failed'.rjust(title_spacing),
+            'numOther':      '# Other'.rjust(title_spacing),
+            'minbytes':      'Min. bytes'.rjust(title_spacing),
+            'avbytes':       'Av. bytes'.rjust(title_spacing),
+            'maxbytes':      'Max. bytes'.rjust(title_spacing),
+            'mintime':       'Min. time (ms)'.rjust(title_spacing),
+            'avtime':        'Av. time (ms)'.rjust(title_spacing),
+            'maxtime':       'Max. time (ms)'.rjust(title_spacing),
         }
-        self.writeMap(report['data']['requestStats'], fields, headings)
+        self.writeMap(report['data']['requestStats'], fields, types, headings)
         self.write('\n')
 
         self.write('  # Requests by time of day:\n')

Modified: CalendarServer/trunk/twistedcaldav/admin/logs.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/admin/logs.py	2007-06-08 17:07:39 UTC (rev 1600)
+++ CalendarServer/trunk/twistedcaldav/admin/logs.py	2007-06-08 18:31:09 UTC (rev 1601)
@@ -25,10 +25,12 @@
 """
 
 import plistlib
+import sys
+import time
 
 from twistedcaldav.admin import util
 
-PLIST_VERSION = 1
+PLIST_VERSION = 2
 
 statsTemplate = plistlib.Dict(
     version=PLIST_VERSION,
@@ -46,6 +48,9 @@
     userAgents=plistlib.Dict(),
     )
 
+def _strAdd(value, add):
+    return str(long(value) + add)
+
 class Stats(object):
     def __init__(self, fp):
         self.fp = fp
@@ -72,51 +77,53 @@
         return long(self._data.bytesOut)
 
     def addBytes(self, bytes):
-        self._data.bytesOut = str(long(self._data.bytesOut) + bytes)
+        self._data.bytesOut = _strAdd(self._data.bytesOut, bytes)
 
     def addRequestStats(self, request, status, bytes, time):
         if request in self._data.requestStats:
-            old_num = self._data.requestStats[request]['num']
-            self._data.requestStats[request]['num'] = old_num + 1
+            request_stat = self._data.requestStats[request]
+            old_num = long(request_stat['num'])
+            request_stat['num'] = _strAdd(request_stat['num'], 1)
             if status >= 200 and status < 300:
-                self._data.requestStats[request]['numOK'] = self._data.requestStats[request]['numOK'] + 1
+                request_stat['numOK'] = _strAdd(request_stat['numOK'], 1)
             elif status == 500:
-                self._data.requestStats[request]['numISE'] = self._data.requestStats[request]['numISE'] + 1
+                request_stat['numISE'] = _strAdd(request_stat['numISE'], 1)
             elif status >= 400 and status < 600:
-                self._data.requestStats[request]['numBAD'] = self._data.requestStats[request]['numBAD'] + 1
+                request_stat['numBAD'] = _strAdd(request_stat['numBAD'], 1)
             else:
-                self._data.requestStats[request]['numOther'] = self._data.requestStats[request]['numOther'] + 1
-            if bytes < self._data.requestStats[request]['minbytes']:
-                self._data.requestStats[request]['minbytes'] = bytes
-            if bytes > self._data.requestStats[request]['maxbytes']:
-                self._data.requestStats[request]['maxbytes'] = bytes
-            self._data.requestStats[request]['avbytes'] = (self._data.requestStats[request]['avbytes'] * old_num + bytes) / (old_num + 1)
-            if time < self._data.requestStats[request]['mintime']:
-                self._data.requestStats[request]['mintime'] = time
-            if time > self._data.requestStats[request]['maxtime']:
-                self._data.requestStats[request]['maxtime'] = time
-            self._data.requestStats[request]['avtime'] = (self._data.requestStats[request]['avtime'] * old_num + time) / (old_num + 1)
+                request_stat['numOther'] = _strAdd(request_stat['numOther'], 1)
+            if bytes < request_stat['minbytes']:
+                request_stat['minbytes'] = str(bytes)
+            if bytes > request_stat['maxbytes']:
+                request_stat['maxbytes'] = str(bytes)
+            request_stat['avbytes'] = str((long(request_stat['avbytes']) * old_num + bytes) / (old_num + 1))
+            if time < request_stat['mintime']:
+                request_stat['mintime'] = time
+            if time > request_stat['maxtime']:
+                request_stat['maxtime'] = time
+            request_stat['avtime'] = (request_stat['avtime'] * old_num + time) / (old_num + 1)
         else:
             self._data.requestStats[request] = {}
-            self._data.requestStats[request]['num'] = 1
-            self._data.requestStats[request]['numOK'] = 0
-            self._data.requestStats[request]['numBAD'] = 0
-            self._data.requestStats[request]['numISE'] = 0
-            self._data.requestStats[request]['numOther'] = 0
+            request_stat = self._data.requestStats[request]
+            request_stat['num'] = "1"
+            request_stat['numOK'] = "0"
+            request_stat['numBAD'] = "0"
+            request_stat['numISE'] = "0"
+            request_stat['numOther'] = "0"
             if status >= 200 and status < 300:
-                self._data.requestStats[request]['numOK'] = 1
+                request_stat['numOK'] = "1"
             elif status == 500:
-                self._data.requestStats[request]['numISE'] = 1
+                request_stat['numISE'] = "1"
             elif status >= 400 and status < 600:
-                self._data.requestStats[request]['numBAD'] = 1
+                request_stat['numBAD'] = "1"
             else:
-                self._data.requestStats[request]['numOther'] = 1
-            self._data.requestStats[request]['minbytes'] = bytes
-            self._data.requestStats[request]['maxbytes'] = bytes
-            self._data.requestStats[request]['avbytes'] = bytes
-            self._data.requestStats[request]['mintime'] = time
-            self._data.requestStats[request]['maxtime'] = time
-            self._data.requestStats[request]['avtime'] = time
+                request_stat['numOther'] = "1"
+            request_stat['minbytes'] = str(bytes)
+            request_stat['maxbytes'] = str(bytes)
+            request_stat['avbytes'] = str(bytes)
+            request_stat['mintime'] = time
+            request_stat['maxtime'] = time
+            request_stat['avtime'] = time
     
     def getRequestStats(self):
         return self._data.requestStats
@@ -202,8 +209,9 @@
                 pass
             total_count += 1
             print "Reading file: %s (%d lines)" % (self.logfile.basename(), total_count,)
-            print "|" + "--" * 48 + "|"
+            print "|" + "----|" * 10 + "\n.",
             last_count = 0
+            start_time = time.time()
             for line_count, line in enumerate(self.logfile.open()):
                 if (line.startswith('Log opened') or 
                     line.startswith('Log closed')):
@@ -220,10 +228,11 @@
                         self.stats.addUserAgent(pline[8])
                         
                 if (50 * line_count) / total_count > last_count:
-                    print ".",
+                    sys.stdout.write(".")
+                    sys.stdout.flush()
                     last_count = (50 * line_count) / total_count
 
-            print "\n\n"
+            print ".\nTime taken: %.1f secs\n" % (time.time() - start_time)
 
             self.stats.save()    
 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070608/b79e9d22/attachment.html


More information about the calendarserver-changes mailing list