diff --git a/build.xml b/build.xml
index 7af39b3..51c7087 100644
--- a/build.xml
+++ b/build.xml
@@ -73,6 +73,7 @@
+
diff --git a/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java b/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java
index 60f6aa6..59ad555 100644
--- a/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java
+++ b/src/main/java/com/timgroup/statsd/ConvenienceMethodProvidingStatsDClient.java
@@ -1,5 +1,8 @@
package com.timgroup.statsd;
+import java.util.concurrent.ThreadLocalRandom;
+
+
public abstract class ConvenienceMethodProvidingStatsDClient implements StatsDClient {
public ConvenienceMethodProvidingStatsDClient() {
@@ -84,4 +87,11 @@ public final void recordExecutionTime(String aspect, long timeInMs) {
public void recordExecutionTimeToNow(String aspect, long systemTimeMillisAtStart) {
time(aspect, Math.max(0, System.currentTimeMillis() - systemTimeMillisAtStart));
}
-}
\ No newline at end of file
+
+ /**
+ * Returns true when the client should send a message, given a sample rate.
+ */
+ protected Boolean shouldSend(double sampleRate) {
+ return ThreadLocalRandom.current().nextDouble() <= sampleRate;
+ }
+}
diff --git a/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java b/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java
index 6d75a9c..0f5b060 100644
--- a/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java
+++ b/src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java
@@ -120,6 +120,9 @@ public void stop() {
*/
@Override
public void count(String aspect, long delta, double sampleRate) {
+ if (!shouldSend(sampleRate)) {
+ return;
+ }
send(messageFor(aspect, Long.toString(delta), "c", sampleRate));
}
@@ -190,6 +193,9 @@ public void recordSetEvent(String aspect, String eventName) {
*/
@Override
public void recordExecutionTime(String aspect, long timeInMs, double sampleRate) {
+ if (!shouldSend(sampleRate)) {
+ return;
+ }
send(messageFor(aspect, Long.toString(timeInMs), "ms", sampleRate));
}
@@ -197,7 +203,7 @@ private String messageFor(String aspect, String value, String type) {
return messageFor(aspect, value, type, 1.0);
}
- private String messageFor(String aspect, String value, String type, double sampleRate) {
+ private String messageFor(String aspect, String value, String type, double sampleRate) {
final String message = prefix + aspect + ':' + value + '|' + type;
return (sampleRate == 1.0)
? message
diff --git a/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java b/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java
index 3927ca2..b5d5b19 100644
--- a/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java
+++ b/src/test/java/com/timgroup/statsd/NonBlockingStatsDClientTest.java
@@ -42,10 +42,10 @@ public void stop() throws Exception {
@Test(timeout=5000L) public void
sends_counter_value_with_rate_to_statsd() throws Exception {
- client.count("mycount", Long.MAX_VALUE, 0.00024);
+ client.count("mycount", Long.MAX_VALUE, 0.999999);
server.waitForMessage();
- assertThat(server.messagesReceived(), contains("my.prefix.mycount:9223372036854775807|c|@0.00024"));
+ assertThat(server.messagesReceived(), contains("my.prefix.mycount:9223372036854775807|c|@0.999999"));
}
@Test(timeout=5000L) public void
@@ -146,10 +146,10 @@ public void stop() throws Exception {
@Test(timeout=5000L) public void
sends_timer_with_rate_to_statsd() throws Exception {
- client.recordExecutionTime("mytime", 123L, 0.000123);
+ client.recordExecutionTime("mytime", 123L, 0.999999);
server.waitForMessage();
- assertThat(server.messagesReceived(), contains("my.prefix.mytime:123|ms|@0.000123"));
+ assertThat(server.messagesReceived(), contains("my.prefix.mytime:123|ms|@0.999999"));
}
@Test(timeout=5000L) public void
@@ -240,4 +240,4 @@ public List messagesReceived() {
return new ArrayList(messagesReceived);
}
}
-}
\ No newline at end of file
+}