package me.prettyprint.cassandra.connection;
import java.util.concurrent.TimeUnit;
import com.yammer.metrics.core.MetricName;
import com.yammer.metrics.core.MetricsRegistry;
import com.yammer.metrics.core.Timer;
import com.yammer.metrics.core.TimerContext;
public class MetricsOpTimer implements HOpTimer {
private static final String TIMER_TYPE = "hector";
private final MetricsRegistry metricsRegistry;
private final TimeUnit durationUnit;
private final TimeUnit rateUnit;
private final String clusterName;
public MetricsOpTimer(final MetricsRegistry metricsRegistry, final String clusterName,
final TimeUnit durationUnit, final TimeUnit rateUnit) {
this.metricsRegistry = metricsRegistry;
this.clusterName = clusterName;
this.durationUnit = durationUnit;
this.rateUnit = rateUnit;
}
public MetricsOpTimer(final String clusterName) {
this.metricsRegistry = new MetricsRegistry();
this.clusterName = clusterName;
this.durationUnit = TimeUnit.NANOSECONDS;
this.rateUnit = TimeUnit.SECONDS;
}
@Override
public Object start(final String tagName) {
final Timer timer = metricsRegistry.newTimer(new MetricName(clusterName, TIMER_TYPE, tagName),
durationUnit, rateUnit);
return timer.time();
}
@Override
public void stop(final Object token, final String tagName, final boolean success) {
final TimerContext timerContext = (TimerContext) token;
timerContext.stop();
}
}