/**
* 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 com.datatorrent.api.DefaultInputPort;
import com.datatorrent.common.util.BaseOperator;
import org.apache.hadoop.conf.Configuration;
import com.datatorrent.api.Context;
import com.datatorrent.api.DAG;
import com.datatorrent.api.StreamingApplication;
import com.datatorrent.api.annotation.ApplicationAnnotation;
import com.datatorrent.common.partitioner.StatelessPartitioner;
@ApplicationAnnotation(name = "ApplicationWithGenerator")
public class ApplicationWithGenerator implements StreamingApplication
{
@Override
public void populateDAG(DAG dag, Configuration configuration)
{
// Create operators for each step
// settings are applied by the platform using the config file.
JsonGenerator eventGenerator = dag.addOperator("eventGenerator", new JsonGenerator());
FilterTuples filterTuples = dag.addOperator("filterTuples", new FilterTuples());
FilterFields filterFields = dag.addOperator("filterFields", new FilterFields());
RedisJoin redisJoin = dag.addOperator("redisJoin", new RedisJoin());
CampaignProcessor campaignProcessor = dag.addOperator("campaignProcessor", new CampaignProcessor());
eventGenerator.setNumAdsPerCampaign(Integer.parseInt(configuration.get("numberOfAds")));
eventGenerator.setNumCampaigns(Integer.parseInt(configuration.get("numberOfCampaigns")));
setupRedis(eventGenerator.getCampaigns(), configuration.get("redis"));
// 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);
dag.addStream("redisJoin", filterFields.output, redisJoin.input).setLocality(DAG.Locality.CONTAINER_LOCAL);
dag.addStream("output", redisJoin.output, campaignProcessor.input);
dag.setInputPortAttribute(filterTuples.input, Context.PortContext.PARTITION_PARALLEL, true);
dag.setInputPortAttribute(filterFields.input, Context.PortContext.PARTITION_PARALLEL, true);
dag.setInputPortAttribute(redisJoin.input, Context.PortContext.PARTITION_PARALLEL, true);
dag.setAttribute(eventGenerator, Context.OperatorContext.PARTITIONER, new StatelessPartitioner<EventGenerator>(8));
dag.setAttribute(campaignProcessor, Context.OperatorContext.PARTITIONER, new StatelessPartitioner<CampaignProcessor>(8));
}
private void setupRedis(Map<String, List<String>> campaigns, String redis)
{
RedisHelper redisHelper = new RedisHelper();
redisHelper.init(redis);
redisHelper.prepareRedis(campaigns);
}
}