summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Socol <me@jamessocol.com>2017-08-26 14:02:50 -0400
committerGitHub <noreply@github.com>2017-08-26 14:02:50 -0400
commit70521887bcb1a8c33a9af46dba1752f2e85db32a (patch)
tree96cd229c0ac54f203628a6c9df19b1f656ea96a3
parent47117d2ded73c254efa6ef980d50850aa5abfb5a (diff)
parentffbc36fc063955052a62b1de4c2956f685e23636 (diff)
downloadpystatsd-70521887bcb1a8c33a9af46dba1752f2e85db32a.tar.gz
Merge pull request #96 from Poogles/feature/fix-time-shifts
Bug: Fix time shifts for python 3.3 and above.
-rw-r--r--statsd/client.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/statsd/client.py b/statsd/client.py
index 0ac8fa9..54f62e7 100644
--- a/statsd/client.py
+++ b/statsd/client.py
@@ -3,9 +3,16 @@ from collections import deque
from functools import wraps
import random
import socket
-import time
import abc
+# Use timer that's not susceptable to time of day adjustments.
+try:
+ # perf_counter is only present on Py3.3+
+ from time import perf_counter as time_now
+except ImportError:
+ # fall back to using time
+ from time import time as time_now
+
__all__ = ['StatsClient', 'TCPStatsClient']
@@ -25,11 +32,11 @@ class Timer(object):
"""Thread-safe timing function decorator."""
@wraps(f)
def _wrapped(*args, **kwargs):
- start_time = time.time()
+ start_time = time_now()
try:
return_value = f(*args, **kwargs)
finally:
- elapsed_time_ms = 1000.0 * (time.time() - start_time)
+ elapsed_time_ms = 1000.0 * (time_now() - start_time)
self.client.timing(self.stat, elapsed_time_ms, self.rate)
return return_value
return _wrapped
@@ -43,13 +50,13 @@ class Timer(object):
def start(self):
self.ms = None
self._sent = False
- self._start_time = time.time()
+ self._start_time = time_now()
return self
def stop(self, send=True):
if self._start_time is None:
raise RuntimeError('Timer has not started.')
- dt = time.time() - self._start_time
+ dt = time_now() - self._start_time
self.ms = 1000.0 * dt # Convert to milliseconds.
if send:
self.send()