[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