Skip to content

Commit

Permalink
Add sampleRate while submitting metrics to datadog (#11)
Browse files Browse the repository at this point in the history
Refer
[Issue-9](#9)
for more
  • Loading branch information
debraj-manna authored and masci committed Aug 26, 2016
1 parent 54e8e5d commit 37fbddf
Show file tree
Hide file tree
Showing 4 changed files with 433 additions and 2 deletions.
17 changes: 16 additions & 1 deletion src/main/java/com/timgroup/statsd/NoOpStatsDClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,37 @@
*
*/
public final class NoOpStatsDClient implements StatsDClient {
@Override public void stop() { }
@Override public void stop() { }
@Override public void count(String aspect, long delta, String... tags) { }
@Override public void count(String aspect, long delta, double sampleRate, String... tags) { }
@Override public void incrementCounter(String aspect, String... tags) { }
@Override public void incrementCounter(String aspect, double sampleRate, String... tags) { }
@Override public void increment(String aspect, String... tags) { }
@Override public void increment(String aspect, double sampleRate, String...tags) { }
@Override public void decrementCounter(String aspect, String... tags) { }
@Override public void decrementCounter(String aspect, double sampleRate, String... tags) { }
@Override public void decrement(String aspect, String... tags) { }
@Override public void decrement(String aspect, double sampleRate, String... tags) { }
@Override public void recordGaugeValue(String aspect, double value, String... tags) { }
@Override public void recordGaugeValue(String aspect, double value, double sampleRate, String... tags) { }
@Override public void gauge(String aspect, double value, String... tags) { }
@Override public void gauge(String aspect, double value, double sampleRate, String... tags) { }
@Override public void recordGaugeValue(String aspect, long value, String... tags) { }
@Override public void recordGaugeValue(String aspect, long value, double sampleRate, String... tags) { }
@Override public void gauge(String aspect, long value, String... tags) { }
@Override public void gauge(String aspect, long value, double sampleRate, String... tags) { }
@Override public void recordExecutionTime(String aspect, long timeInMs, String... tags) { }
@Override public void recordExecutionTime(String aspect, long timeInMs, double sampleRate, String... tags) { }
@Override public void time(String aspect, long value, String... tags) { }
@Override public void time(String aspect, long value, double sampleRate, String... tags) { }
@Override public void recordHistogramValue(String aspect, double value, String... tags) { }
@Override public void recordHistogramValue(String aspect, double value, double sampleRate, String... tags) { }
@Override public void histogram(String aspect, double value, String... tags) { }
@Override public void histogram(String aspect, double value, double sampleRate, String... tags) { }
@Override public void recordHistogramValue(String aspect, long value, String... tags) { }
@Override public void recordHistogramValue(String aspect, long value, double sampleRate, String... tags) { }
@Override public void histogram(String aspect, long value, String... tags) { }
@Override public void histogram(String aspect, long value, double sampleRate, String... tags) { }
@Override public void recordEvent(final Event event, final String... tags) { }
@Override public void recordServiceCheckRun(ServiceCheck sc) { }
@Override public void serviceCheck(ServiceCheck sc) { }
Expand Down
146 changes: 146 additions & 0 deletions src/main/java/com/timgroup/statsd/NonBlockingStatsDClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;



/**
* A simple StatsD client implementation facilitating metrics recording.
*
Expand Down Expand Up @@ -393,6 +395,17 @@ String tagString(final String[] tags) {
public void count(final String aspect, final long delta, final String... tags) {
send(String.format("%s%s:%d|c%s", prefix, aspect, delta, tagString(tags)));
}

/**
* {@inheritDoc}
*/
@Override
public void count(final String aspect, final long delta, final double sampleRate, final String...tags) {
if(isInvalidSample(sampleRate)) {
return;
}
send(String.format("%s%s:%d|c|%f%s", prefix, aspect, delta, sampleRate, tagString(tags)));
}

/**
* Increments the specified counter by one.
Expand All @@ -408,6 +421,14 @@ public void count(final String aspect, final long delta, final String... tags) {
public void incrementCounter(final String aspect, final String... tags) {
count(aspect, 1, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void incrementCounter(final String aspect, final double sampleRate, final String... tags) {
count(aspect, 1, sampleRate, tags);
}

/**
* Convenience method equivalent to {@link #incrementCounter(String, String[])}.
Expand All @@ -416,6 +437,14 @@ public void incrementCounter(final String aspect, final String... tags) {
public void increment(final String aspect, final String... tags) {
incrementCounter(aspect, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void increment(final String aspect, final double sampleRate, final String...tags ) {
incrementCounter(aspect, sampleRate, tags);
}

/**
* Decrements the specified counter by one.
Expand All @@ -431,6 +460,14 @@ public void increment(final String aspect, final String... tags) {
public void decrementCounter(final String aspect, final String... tags) {
count(aspect, -1, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void decrementCounter(String aspect, final double sampleRate, final String... tags) {
count(aspect, -1, sampleRate, tags);
}

/**
* Convenience method equivalent to {@link #decrementCounter(String, String[])}.
Expand All @@ -439,6 +476,14 @@ public void decrementCounter(final String aspect, final String... tags) {
public void decrement(final String aspect, final String... tags) {
decrementCounter(aspect, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void decrement(final String aspect, final double sampleRate, final String... tags) {
decrementCounter(aspect, sampleRate, tags);
}

/**
* Records the latest fixed value for the specified named gauge.
Expand All @@ -458,6 +503,17 @@ public void recordGaugeValue(final String aspect, final double value, final Stri
* padding with extra 0s to represent precision */
send(String.format("%s%s:%s|g%s", prefix, aspect, NUMBER_FORMATTERS.get().format(value), tagString(tags)));
}

/**
* {@inheritDoc}
*/
@Override
public void recordGaugeValue(final String aspect, final double value, final double sampleRate, final String... tags) {
if(isInvalidSample(sampleRate)) {
return;
}
send(String.format("%s%s:%s|g|%f%s", prefix, aspect, NUMBER_FORMATTERS.get().format(value), sampleRate, tagString(tags)));
}

/**
* Convenience method equivalent to {@link #recordGaugeValue(String, double, String[])}.
Expand All @@ -466,6 +522,14 @@ public void recordGaugeValue(final String aspect, final double value, final Stri
public void gauge(final String aspect, final double value, final String... tags) {
recordGaugeValue(aspect, value, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void gauge(final String aspect, final double value, final double sampleRate, final String... tags) {
recordGaugeValue(aspect, value, sampleRate, tags);
}


/**
Expand All @@ -484,6 +548,17 @@ public void gauge(final String aspect, final double value, final String... tags)
public void recordGaugeValue(final String aspect, final long value, final String... tags) {
send(String.format("%s%s:%d|g%s", prefix, aspect, value, tagString(tags)));
}

/**
* {@inheritDoc}
*/
@Override
public void recordGaugeValue(final String aspect, final long value, final double sampleRate, final String... tags) {
if(isInvalidSample(sampleRate)) {
return;
}
send(String.format("%s%s:%d|g|%f%s", prefix, aspect, value, sampleRate, tagString(tags)));
}

/**
* Convenience method equivalent to {@link #recordGaugeValue(String, long, String[])}.
Expand All @@ -492,6 +567,14 @@ public void recordGaugeValue(final String aspect, final long value, final String
public void gauge(final String aspect, final long value, final String... tags) {
recordGaugeValue(aspect, value, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void gauge(final String aspect, final long value, final double sampleRate, final String... tags) {
recordGaugeValue(aspect, value, sampleRate, tags);
}

/**
* Records an execution time in milliseconds for the specified named operation.
Expand All @@ -509,6 +592,17 @@ public void gauge(final String aspect, final long value, final String... tags) {
public void recordExecutionTime(final String aspect, final long timeInMs, final String... tags) {
send(String.format("%s%s:%d|ms%s", prefix, aspect, timeInMs, tagString(tags)));
}

/**
* {@inheritDoc}
*/
@Override
public void recordExecutionTime(final String aspect, final long timeInMs, final double sampleRate, final String... tags) {
if(isInvalidSample(sampleRate)) {
return;
}
send(String.format("%s%s:%d|ms|%f%s", prefix, aspect, timeInMs, sampleRate, tagString(tags)));
}

/**
* Convenience method equivalent to {@link #recordExecutionTime(String, long, String[])}.
Expand All @@ -517,6 +611,14 @@ public void recordExecutionTime(final String aspect, final long timeInMs, final
public void time(final String aspect, final long value, final String... tags) {
recordExecutionTime(aspect, value, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void time(final String aspect, final long value, final double sampleRate, final String... tags) {
recordExecutionTime(aspect, value, sampleRate, tags);
}

/**
* Records a value for the specified named histogram.
Expand All @@ -536,6 +638,19 @@ public void recordHistogramValue(final String aspect, final double value, final
* padding with extra 0s to represent precision */
send(String.format("%s%s:%s|h%s", prefix, aspect, NUMBER_FORMATTERS.get().format(value), tagString(tags)));
}

/**
* {@inheritDoc}
*/
@Override
public void recordHistogramValue(final String aspect, final double value, final double sampleRate, final String... tags) {
if(isInvalidSample(sampleRate)) {
return;
}
/* Intentionally using %s rather than %f here to avoid
* padding with extra 0s to represent precision */
send(String.format("%s%s:%s|h|%f%s", prefix, aspect, NUMBER_FORMATTERS.get().format(value), sampleRate, tagString(tags)));
}

/**
* Convenience method equivalent to {@link #recordHistogramValue(String, double, String[])}.
Expand All @@ -544,6 +659,14 @@ public void recordHistogramValue(final String aspect, final double value, final
public void histogram(final String aspect, final double value, final String... tags) {
recordHistogramValue(aspect, value, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void histogram(final String aspect, final double value, final double sampleRate, final String... tags) {
recordHistogramValue(aspect, value, sampleRate, tags);
}

/**
* Records a value for the specified named histogram.
Expand All @@ -561,6 +684,17 @@ public void histogram(final String aspect, final double value, final String... t
public void recordHistogramValue(final String aspect, final long value, final String... tags) {
send(String.format("%s%s:%d|h%s", prefix, aspect, value, tagString(tags)));
}

/**
* {@inheritDoc}
*/
@Override
public void recordHistogramValue(final String aspect, final long value, final double sampleRate, final String... tags) {
if(isInvalidSample(sampleRate)) {
return;
}
send(String.format("%s%s:%d|h|%f%s", prefix, aspect, value, sampleRate, tagString(tags)));
}

/**
* Convenience method equivalent to {@link #recordHistogramValue(String, long, String[])}.
Expand All @@ -569,6 +703,14 @@ public void recordHistogramValue(final String aspect, final long value, final St
public void histogram(final String aspect, final long value, final String... tags) {
recordHistogramValue(aspect, value, tags);
}

/**
* {@inheritDoc}
*/
@Override
public void histogram(final String aspect, final long value, final double sampleRate, final String... tags) {
recordHistogramValue(aspect, value, sampleRate, tags);
}

private String eventMap(final Event event) {
final StringBuilder res = new StringBuilder("");
Expand Down Expand Up @@ -697,6 +839,10 @@ public void recordSetValue(final String aspect, final String value, final String
private void send(final String message) {
queue.offer(message);
}

private boolean isInvalidSample(double sampleRate) {
return sampleRate != 1 && Math.random() > sampleRate;
}

public static final Charset MESSAGE_CHARSET = Charset.forName("UTF-8");

Expand Down
Loading

2 comments on commit 37fbddf

@smlee729
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, When this commit would be deployed through maven?

@smlee729
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you have any default sample rate when we don't use explicit sample rate?

Please sign in to comment.