package org.act.tstream.client.metric;
import backtype.storm.task.TopologyContext;
import org.act.tstream.metric.Metrics;
import com.codahale.metrics.Counter;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.Histogram;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Timer;
import org.act.tstream.metric.JStormTimer;
import org.act.tstream.metric.JStormHistogram;
public class MetricClient {
private final int taskid;
public MetricClient(TopologyContext context) {
taskid = context.getThisTaskId();
}
private String getMetricName(Integer taskid, String name) {
return "task-" + String.valueOf(taskid) + ":" + name;
}
public Gauge<?> registerGauge(String name, Gauge<?> gauge, MetricCallback<Gauge<?>> callback) {
String userMetricName = getMetricName(taskid, name);
Gauge<?> ret = Metrics.registerGauge(userMetricName, gauge);
Metrics.registerUserDefine(userMetricName, gauge, callback);
return ret;
}
public Counter registerCounter(String name, MetricCallback<Counter> callback) {
String userMetricName = getMetricName(taskid, name);
Counter ret = Metrics.registerCounter(userMetricName);
Metrics.registerUserDefine(userMetricName, ret, callback);
return ret;
}
public Meter registerMeter(String name, MetricCallback<Meter> callback) {
String userMetricName = getMetricName(taskid, name);
Meter ret = Metrics.registerMeter(userMetricName);
Metrics.registerUserDefine(userMetricName, ret, callback);
return ret;
}
public JStormTimer registerTimer(String name, MetricCallback<Timer> callback) {
String userMetricName = getMetricName(taskid, name);
JStormTimer ret = Metrics.registerTimer(userMetricName);
Metrics.registerUserDefine(userMetricName, ret, callback);
return ret;
}
public JStormHistogram registerHistogram(String name, MetricCallback<Histogram> callback) {
String userMetricName = getMetricName(taskid, name);
JStormHistogram ret = Metrics.registerHistograms(userMetricName);
Metrics.registerUserDefine(userMetricName, ret, callback);
return ret;
}
public boolean unregister(String name, Integer taskid) {
String userMetricName = getMetricName(taskid, name);
return Metrics.unregisterUserDefine(userMetricName);
}
}