package ch.epfl.data.squall.components.signal_components; import java.util.Map; import java.util.Random; import org.apache.log4j.Logger; import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.task.TopologyContext; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology.base.BaseRichSpout; import backtype.storm.utils.Utils; import ch.epfl.data.squall.components.signal_components.storm.SignalClient; public class DistributionSignalSpout extends BaseRichSpout { /** * */ private static final long serialVersionUID = 1L; private Random _rnd; private transient SignalClient _sc; private String _zookeeperhost, _syncedSpoutName; private int _currentValue = 0; private static Logger LOG = Logger.getLogger(DistributionSignalSpout.class); private int _refreshTimeSecs; public DistributionSignalSpout(String zookeeperhost, String syncedSpoutName, int refreshTimeSecs) { _rnd = new Random(); _zookeeperhost = zookeeperhost; _syncedSpoutName = syncedSpoutName; _refreshTimeSecs=refreshTimeSecs; } @Override public void close() { super.close(); _sc.close(); } @Override public void nextTuple() { Utils.sleep(1000 * _refreshTimeSecs); try { _currentValue = _rnd.nextInt(100); byte[] signal= SignalUtilities.createSignal(SignalUtilities.DISTRIBUTION_SIGNAL, SignalUtilities.toBytes(_currentValue)); _sc.send(signal); LOG.info("Distribution Signaller sending ....." + _currentValue); } catch (Exception e) { e.printStackTrace(); } } @Override public void open(Map arg0, TopologyContext arg1, SpoutOutputCollector arg2) { _sc = new SignalClient(_zookeeperhost, _syncedSpoutName); _sc.start(); } @Override public void declareOutputFields(OutputFieldsDeclarer arg0) { } }