package com.signalfx.example;
import java.io.FileInputStream;
import java.lang.String;
import java.net.URL;
import java.util.Collections;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import com.google.common.collect.ImmutableSet;
import com.signalfx.codahale.reporter.MetricMetadata;
import com.signalfx.codahale.reporter.SfUtil;
import com.signalfx.codahale.reporter.SignalFxReporter;
import com.signalfx.endpoint.SignalFxEndpoint;
import com.signalfx.endpoint.SignalFxReceiverEndpoint;
import com.signalfx.metrics.auth.StaticAuthToken;
import com.signalfx.metrics.errorhandler.MetricError;
import com.signalfx.metrics.errorhandler.OnSendErrorHandler;
import com.yammer.metrics.core.Counter;
import com.yammer.metrics.core.Gauge;
import com.yammer.metrics.core.Metric;
import com.yammer.metrics.core.MetricName;
import com.yammer.metrics.core.MetricsRegistry;
import com.yammer.metrics.core.Timer;
import com.yammer.metrics.core.TimerContext;
/*
An example class for Yammer 2.x metrics. For more information see
http://metrics.dropwizard.io/2.2.0/getting-started/
*/
public class YammerExample {
public static final String SIGNAL_FX = "SignalFx";
public static final String LIBRARY_VERSION = "library-version";
public static final String YAMMER = "yammer";
public static void main(String[] args) throws Exception {
System.out.println("Running example...");
Properties prop = new Properties();
prop.load(new FileInputStream("auth.properties"));
final String auth_token = prop.getProperty("auth");
final String hostUrlStr = prop.getProperty("host");
final URL hostUrl = new URL(hostUrlStr);
System.out.println("Auth=" + auth_token + " .. host=" + hostUrl);
SignalFxReceiverEndpoint endpoint = new SignalFxEndpoint(hostUrl.getProtocol(),
hostUrl.getHost(), hostUrl.getPort());
MetricsRegistry metricsRegistry = new MetricsRegistry();
SignalFxReporter reporter = new SignalFxReporter.Builder(metricsRegistry,
new StaticAuthToken(auth_token),
hostUrlStr).setEndpoint(endpoint)
.setOnSendErrorHandlerCollection(
Collections.<OnSendErrorHandler>singleton(new OnSendErrorHandler() {
public void handleError(MetricError error) {
System.out.println("" + error.getMessage());
}
}))
.setDetailsToAdd(ImmutableSet.of(SignalFxReporter.MetricDetails.COUNT,
SignalFxReporter.MetricDetails.MIN,
SignalFxReporter.MetricDetails.MAX))
.build();
final MetricMetadata metricMetadata = reporter.getMetricMetadata();
Counter counter = getCounter(metricsRegistry, metricMetadata);
Metric cumulativeCounter = getCumulativeCounter(metricsRegistry, metricMetadata);
Gauge gauge1 = getGauge(metricsRegistry, metricMetadata);
Timer timer = getTimer(metricsRegistry, metricMetadata);
// main body generating data and sending it in a loop
while (true) {
final TimerContext context = timer.time();
try {
System.out.println("Sending data...");
Thread.sleep(500);
counter.inc();
} finally {
context.stop();
}
reporter.report(); // Report all metrics
}
}
private static Counter getCounter(MetricsRegistry metricsRegistry,
MetricMetadata metricMetadata) {
Counter counter = metricsRegistry.newCounter(YammerExample.class, "yammer.test.counter");
metricMetadata.forMetric(counter)
.withSourceName("signalFx")
.withDimension(LIBRARY_VERSION, YAMMER);
return counter;
}
/*
There will be 3 metrics present:
yammer.test.timer.count # cumulative counter
yammer.test.timer.max # gauge
yammer.test.timer.min # gauge
*/
private static Timer getTimer(MetricsRegistry metricsRegistry, MetricMetadata metricMetadata) {
Timer timer = metricsRegistry
.newTimer(YammerExample.class, "yammer.test.timer", TimeUnit.MILLISECONDS, TimeUnit.SECONDS);
metricMetadata.forMetric(timer)
.withSourceName(SIGNAL_FX)
.withDimension(LIBRARY_VERSION, YAMMER);
return timer;
}
private static Gauge getGauge(MetricsRegistry metricsRegistry, MetricMetadata metricMetadata) {
Gauge gauge = metricsRegistry.newGauge(YammerExample.class, "yammer.test.gauge",
new Gauge<Double>() {
@Override
public Double value() {
return Math.sin(System.currentTimeMillis() * 0.001 * 2 * Math.PI / 60);
}
});
metricMetadata.forMetric(gauge)
.withSourceName(SIGNAL_FX)
.withDimension(LIBRARY_VERSION, YAMMER);
return gauge;
}
private static Metric getCumulativeCounter(MetricsRegistry metricsRegistry,
MetricMetadata metricMetadata) {
MetricName counterCallbackName = new MetricName(YammerExample.class, "yammer.test.cumulativeCounter");
Metric cumulativeCounter = SfUtil.cumulativeCounter(
metricsRegistry,
counterCallbackName,
metricMetadata,
new Gauge<Long>() {
private long i = 0;
@Override
public Long value() {
return i++;
}
});
metricMetadata.forMetric(cumulativeCounter)
.withSourceName(SIGNAL_FX)
.withDimension(LIBRARY_VERSION, YAMMER);
return cumulativeCounter;
}
}