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

source_changes at macosforge.org source_changes at macosforge.org
Thu May 24 09:39:24 PDT 2007


Revision: 1566
          http://trac.macosforge.org/projects/calendarserver/changeset/1566
Author:   cdaboo at apple.com
Date:     2007-05-24 09:39:24 -0700 (Thu, 24 May 2007)

Log Message:
-----------
Generate a more detailed break down of request statistics on a per method basis.

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-05-23 21:55:30 UTC (rev 1565)
+++ CalendarServer/trunk/twistedcaldav/admin/formatters.py	2007-05-24 16:39:24 UTC (rev 1566)
@@ -91,8 +91,14 @@
             spacing = self.options.get('spacing', 16)
 
         for f in fields:
-            self.write(str(f))
-            self.write(' '*(int(spacing) - len(str(f))))
+            if isinstance(f, float):
+                p = "% 9.2f" % (f,)
+            elif isinstance(f, int):
+                p = "% 9d" % (f,)
+            else:
+                p = str(f)
+            self.write(p)
+            self.write(' '*(int(spacing) - len(p)))
 
         self.write('\n')
 
@@ -105,6 +111,14 @@
         for record in report['records']:
             self.writeLine((record[f] for f in fields))
 
+    def writeMap(self, reportmap, fields, headings):
+        self.writeLine((headings[f] for f in fields))
+
+        for key, value in reportmap.iteritems():
+            values = (key,)
+            values += tuple(value[f] for f in fields[1:])
+            self.writeLine(values)
+
     def writeReport(self, report, name, fields, headings):
         if self.options.has_key('fields'):
             fields = self.options.get('fields', '').split(',')
@@ -160,8 +174,27 @@
         self.write('  Bytes Out: %s\n' % (report['data']['bytesOut'],))
         self.write('  # Requests:\n')
 
-        for req, count in report['data']['requestCounts'].iteritems():
-            self.write('    %s: %s\n' % (req, count))
+        fields = (
+            'method',
+            'num',
+            'minbytes',
+            'avbytes',
+            'maxbytes',
+            'mintime',
+            'avtime',
+            'maxtime',
+        )
+        headings = {
+            'method':        'Method ',
+            'num':           '# Requests   ',
+            'minbytes':      'Min. bytes',
+            'avbytes':       ' Av. bytes',
+            'maxbytes':      'Max. bytes',
+            'mintime':       'Min. time',
+            'avtime':        ' Av. time',
+            'maxtime':       'Max. time',
+        }
+        self.writeMap(report['data']['requestStats'], fields, headings)
 
         self.write('  User Agents:\n')
 

Modified: CalendarServer/trunk/twistedcaldav/admin/logs.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/admin/logs.py	2007-05-23 21:55:30 UTC (rev 1565)
+++ CalendarServer/trunk/twistedcaldav/admin/logs.py	2007-05-24 16:39:24 UTC (rev 1566)
@@ -30,7 +30,7 @@
 
 statsTemplate = plistlib.Dict(
     bytesOut=0, 
-    requestCounts=plistlib.Dict(
+    requestStats=plistlib.Dict(
         ), 
     invitations=plistlib.Dict(
         day=0, 
@@ -56,14 +56,32 @@
     def addBytes(self, bytes):
         self._data.bytesOut += bytes
 
-    def addRequest(self, request):
-        if request in self._data.requestCounts:
-            self._data.requestCounts[request] += 1
+    def addRequestStats(self, request, bytes, time):
+        if request in self._data.requestStats:
+            old_num = self._data.requestStats[request]['num']
+            self._data.requestStats[request]['num'] = old_num + 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)
         else:
-            self._data.requestCounts[request] = 1
+            self._data.requestStats[request] = {}
+            self._data.requestStats[request]['num'] = 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
     
-    def getRequests(self):
-        return self._data.requestCounts
+    def getRequestStats(self):
+        return self._data.requestStats
 
     def addUserAgent(self, useragent):
         if useragent in self._data.userAgents:
@@ -141,7 +159,7 @@
                     pline = parseCLFLine(line)
                     
                     self.stats.addBytes(int(pline[6]))
-                    self.stats.addRequest(pline[4].split(' ')[0])
+                    self.stats.addRequestStats(pline[4].split(' ')[0], int(pline[6]), float(pline[9][:-3]))
 
                     if len(pline) > 7:
                         self.stats.addUserAgent(pline[8])
@@ -154,7 +172,7 @@
                 'data': {
                     'bytesOut': util.prepareByteValue(self.config, 
                                                       self.stats.getBytes()),
-                    'requestCounts': self.stats.getRequests(),
+                    'requestStats': self.stats.getRequestStats(),
                     'userAgents': self.stats.getUserAgents(),
                     }
                 }

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


More information about the calendarserver-changes mailing list