/**
* Licensed under the terms of the Apache License 2.0. Please see LICENSE file in the project root for terms.
*/
package apex.benchmark;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import com.datatorrent.api.Context;
import com.datatorrent.api.DAG;
import com.datatorrent.api.DefaultOutputPort;
import com.datatorrent.api.annotation.ApplicationAnnotation;
import com.datatorrent.common.partitioner.StatelessPartitioner;
@ApplicationAnnotation(name = ApplicationWithDCWithoutDeserializer.APP_NAME)
public class ApplicationWithDCWithoutDeserializer extends ApplicationDimensionComputation
{
public static final String APP_NAME = "AppWithDCWithoutDe";
protected static final int PARTITION_NUM = 20;
protected String redisServer;
protected boolean includeRedisJoin = true;
public ApplicationWithDCWithoutDeserializer()
{
super(APP_NAME);
}
@Override
public void populateDAG(DAG dag, Configuration configuration)
{
redisServer = configuration.get("dt.application.AppWithDCWithoutDe.redisServer");
DefaultOutputPort<DimensionTuple> upstreamOutput = populateUpstreamDAG(dag, configuration);
//populateHardCodedDimensionsDAG(dag, configuration, generateOperator.outputPort);
populateDimensionsDAG(dag, configuration, upstreamOutput);
}
public DefaultOutputPort<DimensionTuple> populateUpstreamDAG(DAG dag, Configuration configuration)
{
JsonGenerator eventGenerator = dag.addOperator("eventGenerator", new JsonGenerator());
FilterTuples filterTuples = dag.addOperator("filterTuples", new FilterTuples());
FilterFields filterFields = dag.addOperator("filterFields", new FilterFields());
// Connect the Ports in the Operators
dag.addStream("filterTuples", eventGenerator.out, filterTuples.input).setLocality(DAG.Locality.CONTAINER_LOCAL);
dag.addStream("filterFields", filterTuples.output, filterFields.input).setLocality(DAG.Locality.CONTAINER_LOCAL);
TupleToDimensionTupleConverter converter = dag.addOperator("converter", new TupleToDimensionTupleConverter());
if(includeRedisJoin) {
RedisJoin redisJoin = dag.addOperator("redisJoin", new RedisJoin());
dag.addStream("redisJoin", filterFields.output, redisJoin.input).setLocality(DAG.Locality.CONTAINER_LOCAL);
dag.addStream("converter", redisJoin.output, converter.inputPort).setLocality(DAG.Locality.CONTAINER_LOCAL);
dag.setInputPortAttribute(redisJoin.input, Context.PortContext.PARTITION_PARALLEL, true);
setupRedis(eventGenerator.getCampaigns());
} else {
dag.addStream("convert", filterFields.output, converter.inputPort).setLocality(DAG.Locality.CONTAINER_LOCAL);
}
dag.setInputPortAttribute(filterTuples.input, Context.PortContext.PARTITION_PARALLEL, true);
dag.setInputPortAttribute(filterFields.input, Context.PortContext.PARTITION_PARALLEL, true);
dag.setInputPortAttribute(converter.inputPort, Context.PortContext.PARTITION_PARALLEL, true);
dag.setAttribute(eventGenerator, Context.OperatorContext.PARTITIONER, new StatelessPartitioner<EventGenerator>(PARTITION_NUM));
return converter.outputPort;
}
private void setupRedis(Map<String, List<String>> campaigns)
{
RedisHelper redisHelper = new RedisHelper();
redisHelper.init(redisServer);
redisHelper.prepareRedis(campaigns);
}
public String getRedisServer()
{
return redisServer;
}
public void setRedisServer(String redisServer)
{
this.redisServer = redisServer;
}
}