package com.kendelong.util.monitoring.graphite; import java.net.InetAddress; import java.net.UnknownHostException; import javax.annotation.PostConstruct; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.timgroup.statsd.NoOpStatsDClient; import com.timgroup.statsd.NonBlockingStatsDClient; import com.timgroup.statsd.StatsDClient; import com.timgroup.statsd.StatsDClientException; public class GraphiteClient { private StatsDClient statsdClient; private String serverEnv; private String appName; private String statsdHost; private int statsdPort; private final Logger logger = LoggerFactory.getLogger(this.getClass()); @PostConstruct public void init() { String prefix = serverEnv + "." + appName + "." + getHostname(); try { statsdClient = new NonBlockingStatsDClient(prefix, statsdHost, statsdPort); logger.info("Using [{}] as the prefix for graphite buckets", prefix); } catch(StatsDClientException e) { logger.error("Unable to open connection to statsd at [" + statsdHost + ":" + statsdPort + "]; using NoOp client."); statsdClient = new NoOpStatsDClient(); } } private String getHostname() { String hostname = null; try { InetAddress addr = InetAddress.getLocalHost(); hostname = addr.getHostName(); hostname = hostname.replaceAll("\\.", "-"); } catch (UnknownHostException e) { hostname = "unknown"; } return hostname; } public void count(String aspect, long delta) { statsdClient.count(aspect, delta); } public void count(String aspect, long delta, double sampleRate) { statsdClient.count(aspect, delta, sampleRate); } public void incrementCounter(String aspect) { statsdClient.incrementCounter(aspect); } public void increment(String aspect) { statsdClient.increment(aspect); } public void decrementCounter(String aspect) { statsdClient.decrementCounter(aspect); } public void decrement(String aspect) { statsdClient.decrement(aspect); } public void recordGaugeValue(String aspect, long value) { statsdClient.recordGaugeValue(aspect, value); } public void recordGaugeDelta(String aspect, long delta) { statsdClient.recordGaugeDelta(aspect, delta); } public void gauge(String aspect, long value) { statsdClient.gauge(aspect, value); } public void recordSetEvent(String aspect, String eventName) { statsdClient.recordSetEvent(aspect, eventName); } public void recordExecutionTime(String aspect, long timeInMs) { statsdClient.recordExecutionTime(aspect, timeInMs); } public void recordExecutionTime(String aspect, long timeInMs, double sampleRate) { statsdClient.recordExecutionTime(aspect, timeInMs, sampleRate); } public void recordExecutionTimeToNow(String aspect, long systemTimeMillisAtStart) { statsdClient.recordExecutionTimeToNow(aspect, systemTimeMillisAtStart); } public void time(String aspect, long value) { statsdClient.time(aspect, value); } public String getServerEnv() { return serverEnv; } public void setServerEnv(String env) { this.serverEnv = env; } public String getAppName() { return appName; } public void setAppName(String app) { this.appName = app; } public String getStatsdHost() { return statsdHost; } public void setStatsdHost(String statsdHost) { this.statsdHost = statsdHost; } public int getStatsdPort() { return statsdPort; } public void setStatsdPort(int statsdPort) { this.statsdPort = statsdPort; } }