From 6c42252fb82c2fbb1dc112dd78d7a6ed81d7086b Mon Sep 17 00:00:00 2001 From: Tom Denley Date: Mon, 28 Jul 2014 10:50:44 +0100 Subject: [PATCH] tomd: support sample rates for counters -- closes #10 --- .../ConvenienceMethodProvidingStatsDClient.java | 5 +++++ .../com/timgroup/statsd/NoOpStatsDClient.java | 2 +- .../timgroup/statsd/NonBlockingStatsDClient.java | 4 ++-- .../java/com/timgroup/statsd/StatsDClient.java | 15 +++++++++++++++ .../statsd/NonBlockingStatsDClientTest.java | 8 ++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java b/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java index db2516c..89ff98d 100644 --- a/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java +++ b/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java @@ -67,6 +67,11 @@ public final void time(String aspect, long timeInMs) { recordExecutionTime(aspect, timeInMs); } + @Override + public final void recordExecutionTime(String aspect, long timeInMs) { + recordExecutionTime(aspect, timeInMs, 1.0); + } + @Override public void recordExecutionTimeToNow(String aspect, long systemTimeMillisAtStart) { time(aspect, Math.max(0, System.currentTimeMillis() - systemTimeMillisAtStart)); diff --git a/src/main/java/com/timgroup/statsd/NoOpStatsDClient.java b/src/main/java/com/timgroup/statsd/NoOpStatsDClient.java index a4df110..50b3f65 100644 --- a/src/main/java/com/timgroup/statsd/NoOpStatsDClient.java +++ b/src/main/java/com/timgroup/statsd/NoOpStatsDClient.java @@ -13,5 +13,5 @@ public final class NoOpStatsDClient extends ConvenienceMethodProvidingStatsDClie @Override public void recordGaugeValue(String aspect, long value) { } @Override public void recordGaugeDelta(String aspect, long delta) { } @Override public void recordSetEvent(String aspect, String value) { } - @Override public void recordExecutionTime(String aspect, long timeInMs) { } + @Override public void recordExecutionTime(String aspect, long timeInMs, double sampleRate) { } } diff --git a/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java b/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java index d768d61..2f9e8f2 100644 --- a/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java +++ b/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java @@ -199,8 +199,8 @@ public void recordSetEvent(String aspect, String eventName) { * the time in milliseconds */ @Override - public void recordExecutionTime(String aspect, long timeInMs) { - send(messageFor(aspect, timeInMs, "ms")); + public void recordExecutionTime(String aspect, long timeInMs, double sampleRate) { + send(messageFor(aspect, timeInMs, "ms", sampleRate)); } private String messageFor(String aspect, Object value, String type) { diff --git a/src/main/java/com/timgroup/statsd/StatsDClient.java b/src/main/java/com/timgroup/statsd/StatsDClient.java index 83f64ac..af12610 100644 --- a/src/main/java/com/timgroup/statsd/StatsDClient.java +++ b/src/main/java/com/timgroup/statsd/StatsDClient.java @@ -140,6 +140,21 @@ public interface StatsDClient { */ void recordExecutionTime(String aspect, long timeInMs); + /** + * Adjusts the specified counter by a given delta. + * + *

This method is non-blocking and is guaranteed not to throw an exception.

+ * + * @param aspect + * the name of the counter to adjust + * @param delta + * the amount to adjust the counter by + * @param sampleRate + * the sampling rate being employed. For example, a rate of 0.1 would tell StatsD that this timer is being sent + * sampled every 1/10th of the time, so that it updates its timer_counters appropriately. + */ + void recordExecutionTime(String aspect, long timeInMs, double sampleRate); + /** * Records an execution time in milliseconds for the specified named operation. The execution * time is calculated as the delta between the specified start time and the current system diff --git a/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java b/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java index c4ea93f..263fe48 100644 --- a/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java +++ b/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java @@ -119,6 +119,14 @@ public void stop() throws Exception { assertThat(server.messagesReceived(), contains("my.prefix.mytime:123|ms")); } + @Test(timeout=5000L) public void + sends_timer_with_rate_to_statsd() throws Exception { + client.recordExecutionTime("mytime", 123L, 0.000123); + server.waitForMessage(); + + assertThat(server.messagesReceived(), contains("my.prefix.mytime:123|ms@0.000123")); + } + @Test(timeout=5000L) public void sends_timer_to_statsd_based_on_specified_start_time_to_now() throws Exception { final long startTime = System.currentTimeMillis() - 1000L;