package storm.applications.topology;
import backtype.storm.Config;
import backtype.storm.generated.StormTopology;
import backtype.storm.tuple.Fields;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static storm.applications.constants.BargainIndexConstants.*;
import storm.applications.bolt.BargainIndexBolt;
import storm.applications.bolt.VwapBolt;
/**
*
* @author Maycon Viana Bordin <mayconbordin@gmail.com>
*/
public class BargainIndexTopology extends BasicTopology {
private static final Logger LOG = LoggerFactory.getLogger(BargainIndexBolt.class);
private int vwapThreads;
private int bargainIndexThreads;
public BargainIndexTopology(String topologyName, Config config) {
super(topologyName, config);
}
@Override
public void initialize() {
super.initialize();
vwapThreads = config.getInt(Conf.VWAP_THREADS, 1);
bargainIndexThreads = config.getInt(Conf.BARGAIN_INDEX_THREADS, 1);
}
@Override
public StormTopology buildTopology() {
spout.setFields(Stream.TRADES, new Fields(Field.STOCK, Field.PRICE, Field.VOLUME, Field.DATE, Field.INTERVAL));
spout.setFields(Stream.QUOTES, new Fields(Field.STOCK, Field.PRICE, Field.VOLUME, Field.DATE, Field.INTERVAL));
builder.setSpout(Component.SPOUT, spout, spoutThreads);
builder.setBolt(Component.VWAP , new VwapBolt(), vwapThreads)
.fieldsGrouping(Component.SPOUT, Stream.TRADES, new Fields(Field.STOCK));
builder.setBolt(Component.BARGAIN_INDEX, new BargainIndexBolt(), bargainIndexThreads)
.fieldsGrouping(Component.VWAP, new Fields(Field.STOCK))
.fieldsGrouping(Component.SPOUT, Stream.QUOTES, new Fields(Field.STOCK));
builder.setBolt(Component.SINK, sink, sinkThreads)
.fieldsGrouping(Component.BARGAIN_INDEX, new Fields(Field.STOCK));
return builder.createTopology();
}
@Override
public Logger getLogger() {
return LOG;
}
@Override
public String getConfigPrefix() {
return PREFIX;
}
}