Merge pull request #11 from bbinet/process-data-newline

Process data separated by newlines
This commit is contained in:
Patrick Hensley 2014-02-21 12:08:52 -05:00
commit 3a8683e89d
2 changed files with 13 additions and 10 deletions

View File

@ -174,7 +174,10 @@ class StatsDaemon(object):
self._sock.bind(self._bindaddr)
while 1:
try:
self._process(*self._sock.recvfrom(MAX_PACKET))
data, _ = self._sock.recvfrom(MAX_PACKET)
for p in data.split('\n'):
if p:
self._process(p)
except Exception, ex:
self.error(str(ex))
@ -182,7 +185,7 @@ class StatsDaemon(object):
"Shutdown the server"
self.exit("service exiting", code=0)
def _process(self, data, _):
def _process(self, data):
"Process a single packet and update the internal tables."
parts = data.split(':')
if self._debug:

View File

@ -34,37 +34,37 @@ class StatsServiceTest(unittest.TestCase):
def test_counters(self):
pkt = 'foo:1|c'
self.svc._process(pkt, None)
self.svc._process(pkt)
self.assertEquals(self.stats.counts, {'foo': 1})
self.svc._process(pkt, None)
self.svc._process(pkt)
self.assertEquals(self.stats.counts, {'foo': 2})
pkt = 'foo:-1|c'
self.svc._process(pkt, None)
self.svc._process(pkt)
self.assertEquals(self.stats.counts, {'foo': 1})
def test_counters_sampled(self):
pkt = 'foo:1|c|@.5'
self.svc._process(pkt, None)
self.svc._process(pkt)
self.assertEquals(self.stats.counts, {'foo': 2})
def test_timers(self):
pkt = 'foo:20|ms'
self.svc._process(pkt, None)
self.svc._process(pkt)
self.assertEquals(self.stats.timers, {'foo': [20.0]})
pkt = 'foo:10|ms'
self.svc._process(pkt, None)
self.svc._process(pkt)
self.assertEquals(self.stats.timers, {'foo': [20.0, 10.0]})
def test_key_sanitize(self):
pkt = '\t\n#! foo . bar \0 ^:1|c'
self.svc._process(pkt, None)
self.svc._process(pkt)
self.assertEquals(self.stats.counts, {'foo.bar': 1})
def test_key_prefix(self):
args = (':8125', [':2003'], 5, 90, 0, 'pfx')
svc = service.StatsDaemon(*args)
pkt = 'foo:1|c'
svc._process(pkt, None)
svc._process(pkt)
self.assertEquals(svc._stats.counts, {'pfx.foo': 1})