summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Socol <james@bit.ly>2013-08-26 18:10:24 -0400
committerJames Socol <james@bit.ly>2013-08-26 18:33:58 -0400
commit213fae888080f7cc39f1b20ac0962bd6fd12189b (patch)
tree44a22218312959f3bd6d773825c92e7331c04faa
parent4d70ac43710d2045e3cd23127ac88b1837497949 (diff)
downloadpystatsd-213fae888080f7cc39f1b20ac0962bd6fd12189b.tar.gz
Handle very large numbers correctly.
-rw-r--r--statsd/client.py6
-rw-r--r--statsd/tests.py19
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