debian-django-statsd-mozilla/django_statsd/plugins.py

82 lines
2.3 KiB
Python

import logging
import os
NOSE = False
try:
from nose.plugins.base import Plugin
NOSE = True
except ImportError:
class Plugin:
pass
from django_statsd.clients import statsd
log = logging.getLogger(__name__)
class NoseStatsd(Plugin):
name = 'statsd'
def options(self, parse, env=os.environ):
super(NoseStatsd, self).options(parse, env=env)
def configure(self, options, conf):
super(NoseStatsd, self).configure(options, conf)
def report(self, stream):
def write(line):
stream.writeln('%s' % line)
if not hasattr(statsd, 'timings'):
write("Statsd timings not saved, ensure your statsd client is: "
"STATSD_CLIENT = 'django_statsd.clients.nose'")
return
timings = {}
longest = 0
for v in statsd.timings:
k = v[0].split('|')[0]
longest = max(longest, len(k))
timings.setdefault(k, [])
timings[k].append(v[2])
counts = {}
for k, v in list(statsd.cache.items()):
k = k.split('|')[0]
longest = max(longest, len(k))
counts.setdefault(k, [])
[counts[k].append(_v) for _v in v]
header = '%s | Number | Avg (ms) | Total (ms)' % (
'Statsd Keys'.ljust(longest))
header_len = len(header)
write('')
write('=' * header_len)
write('%s | Number | Avg (ms) | Total (ms)' % (
'Statsd Keys'.ljust(longest)))
write('-' * header_len)
if not timings:
write('None')
for k in sorted(timings.keys()):
v = timings[k]
write('%s | %s | %s | %s' % (
k.ljust(longest),
str(len(v)).rjust(6),
('%0.5f' % (sum(v) / float(len(v)))).rjust(10),
('%0.3f' % sum(v)).rjust(10)))
write('=' * header_len)
write('%s | Number | Total' % ('Statsd Counts'.ljust(longest)))
write('-' * header_len)
if not counts:
write('None')
for k in sorted(counts.keys()):
v = counts[k]
write('%s | %s | %d' % (
k.ljust(longest),
str(len(v)).rjust(6),
sum([x * y for x, y in v])))