diff options
author | James Socol <james@bit.ly> | 2013-08-26 18:10:24 -0400 |
---|---|---|
committer | James Socol <james@bit.ly> | 2013-08-26 18:33:58 -0400 |
commit | 213fae888080f7cc39f1b20ac0962bd6fd12189b (patch) | |
tree | 44a22218312959f3bd6d773825c92e7331c04faa | |
parent | 4d70ac43710d2045e3cd23127ac88b1837497949 (diff) | |
download | pystatsd-213fae888080f7cc39f1b20ac0962bd6fd12189b.tar.gz |
Handle very large numbers correctly.
-rw-r--r-- | statsd/client.py | 6 | ||||
-rw-r--r-- | statsd/tests.py | 19 |
2 files changed, 21 insertions, 4 deletions
diff --git a/statsd/client.py b/statsd/client.py index 951fd81..fd5e43f 100644 --- a/statsd/client.py +++ b/statsd/client.py @@ -70,10 +70,8 @@ class StatsClient(object): def gauge(self, stat, value, rate=1, delta=False): """Set a gauge value.""" - if delta: - value = '%+g|g' % value - else: - value = '%g|g' % value + prefix = '+' if delta and value >= 0 else '' + value = '%s%s|g' % (prefix, value) data = self._prepare(stat, value, rate) if data is not None: self._after(data) diff --git a/statsd/tests.py b/statsd/tests.py index 1e6f6e0..00aeffe 100644 --- a/statsd/tests.py +++ b/statsd/tests.py @@ -350,3 +350,22 @@ def test_pipeline_packet_size(): eq_(2, sc._sock.sendto.call_count) assert len(sc._sock.sendto.call_args_list[0][0][0]) <= 512 assert len(sc._sock.sendto.call_args_list[1][0][0]) <= 512 + + +def test_big_numbers(): + num = 1234568901234 + result = 'foo:1234568901234|%s' + tests = ( + # Explicitly create strings so we avoid the bug we're trying to test. + ('gauge', 'g'), + ('incr', 'c'), + ('timing', 'ms'), + ) + + def _check(method, suffix): + sc = _client() + getattr(sc, method)('foo', num) + _sock_check(sc, 1, result % suffix) + + for method, suffix in tests: + yield _check, method, suffix |