package org.datadog.jmxfetch.reporter; import org.datadog.jmxfetch.Instance; import org.datadog.jmxfetch.JMXAttribute; import org.datadog.jmxfetch.Status; import com.timgroup.statsd.NonBlockingStatsDClient; import com.timgroup.statsd.ServiceCheck; import com.timgroup.statsd.StatsDClient; public class StatsdReporter extends Reporter { private StatsDClient statsDClient; private String statsdHost; private int statsdPort; private long initializationTime; public StatsdReporter(String statsdHost, int statsdPort) { this.statsdHost = statsdHost; this.statsdPort = statsdPort; this.init(); } private void init() { initializationTime = System.currentTimeMillis(); statsDClient = new NonBlockingStatsDClient(null, this.statsdHost, this.statsdPort, new String[]{}); } protected void sendMetricPoint(String metricType, String metricName, double value, String[] tags) { if (System.currentTimeMillis() - this.initializationTime > 300 * 1000) { this.statsDClient.stop(); init(); } if (metricType.equals("histogram")) { statsDClient.histogram(metricName, value, tags); } else { statsDClient.gauge(metricName, value, tags); } } private int statusToInt(String status) { if (status == Status.STATUS_OK) { return 0; } else if (status == Status.STATUS_WARNING) { return 1; } else if (status == Status.STATUS_ERROR) { // critical return 2; } return 3; } public void doSendServiceCheck(String checkName, String status, String message, String[] tags) { if (System.currentTimeMillis() - this.initializationTime > 300 * 1000) { this.statsDClient.stop(); init(); } ServiceCheck sc = new ServiceCheck(String.format("%s.can_connect", checkName), this.statusToInt(status), message, tags); statsDClient.serviceCheck(sc); } public void displayMetricReached() { throw new UnsupportedOperationException(); } public void displayMatchingAttributeName(JMXAttribute jmxAttribute, int rank, int limit) { throw new UnsupportedOperationException(); } public void displayNonMatchingAttributeName(JMXAttribute jmxAttribute) { throw new UnsupportedOperationException(); } @Override public void displayInstanceName(Instance instance) { throw new UnsupportedOperationException(); } public String getStatsdHost() { return statsdHost; } public int getStatsdPort() { return statsdPort; } }