package com.levigo.jadice.webtoolkit.monitoring.client; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; import com.levigo.jadice.webtoolkit.monitoring.data.CounterData; import com.levigo.jadice.webtoolkit.monitoring.data.DataObject; import com.levigo.jadice.webtoolkit.monitoring.data.DurationData; import com.levigo.jadice.webtoolkit.monitoring.data.ReturnData; import io.riemann.riemann.client.RiemannClient; public class RiemannAdapter implements MonitorClient { private RiemannClient riemannClient; { try { riemannClient = RiemannClient.tcp("localhost", 5555); riemannClient.connect(); } catch (IOException e) { throw new RuntimeException(e); } } @Override public void publish(DataObject<?> data) { String[] tags = getTags(data.getLabels()); if (data instanceof CounterData) { CounterData counterData = (CounterData) data; fireRiemannEvent(counterData.getMetricName(), "", counterData.getValue(), tags.toString()); } else if (data instanceof DurationData) { DurationData durationData = (DurationData) data; fireRiemannEvent(durationData.getMetricName(), "", durationData.getValue(), tags.toString()); } else if (data instanceof ReturnData) { ReturnData returnData = (ReturnData) data; fireRiemannEvent(returnData.getMetricName(), returnData.getValue().toString(), 0, tags.toString()); } } private String[] getTags(Map<String, String> labelMap) { String[] tags = new String[labelMap.size()]; int i = 0; for (Map.Entry<String, String> item : labelMap.entrySet()) { tags[i++] = item.getKey() + ":" + item.getValue(); } return tags; } private void fireRiemannEvent(String service, String state, double metric, String... tags) { try { riemannClient.event() // .service(service) // .state(state) // .metric(metric) // .tags(tags) // .send() // .deref(1, TimeUnit.SECONDS); } catch (IOException e) { e.printStackTrace(); } } }