package storm.applications.hooks;
import backtype.storm.hooks.BaseTaskHook;
import backtype.storm.hooks.info.EmitInfo;
import backtype.storm.hooks.info.SpoutAckInfo;
import backtype.storm.task.TopologyContext;
import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import storm.applications.metrics.MetricsFactory;
import storm.applications.util.config.Configuration;
/**
*
* @author mayconbordin
*/
public class SpoutMeterHook extends BaseTaskHook {
private Configuration config;
private Meter emittedTuples;
private Timer completeLatency;
@Override
public void prepare(Map conf, TopologyContext context) {
config = Configuration.fromMap(conf);
MetricRegistry registry = MetricsFactory.createRegistry(config);
String componentId = context.getThisComponentId();
String taskId = String.valueOf(context.getThisTaskId());
emittedTuples = registry.meter(MetricRegistry.name("emitted", componentId, taskId));
completeLatency = registry.timer(MetricRegistry.name("complete-latency", componentId, taskId));
}
@Override
public void emit(EmitInfo info) {
emittedTuples.mark();
}
@Override
public void spoutAck(SpoutAckInfo info) {
if (info.completeLatencyMs != null) {
completeLatency.update(info.completeLatencyMs, TimeUnit.MILLISECONDS);
}
}
}