[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