package eu.europeana.cloud.service.dps.storm; import org.apache.storm.task.TopologyContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.europeana.cloud.service.dps.storm.metrics.ZookeeperMultiCountMetric; /** * Increases progress by 1 per Task / per tuple received. * * Progress bolt can be placed at the end of a topology, * to count the amount of records that are fully processed. * * Right now only single Progress bolt is supported per Topology. * * @author manos */ public class ProgressBolt extends AbstractDpsBolt { private static final Logger LOGGER = LoggerFactory.getLogger(ProgressBolt.class); private transient ZookeeperMultiCountMetric zMetric; private String zkAddress; public ProgressBolt(String zkAddress) { this.zkAddress = zkAddress; } @Override public void prepare() { initMetrics(topologyContext); } void initMetrics(TopologyContext context) { zMetric = new ZookeeperMultiCountMetric(zkAddress); context.registerMetric("zMetric=>", zMetric, 10); } @Override public void execute(StormTaskTuple t) { try { LOGGER.info("ProgressIncreaseBolt: updating progress"); updateProgress(t); } catch (Exception e) { LOGGER.error(e.getMessage()); } outputCollector.ack(inputTuple); } private void updateProgress(StormTaskTuple t) { zMetric.incr(t.getTaskId()); LOGGER.info("ProgressIncreaseBolt: progress updated"); } }