Skip to content
Snippets Groups Projects
TraceReconstructionAnalysisConfiguration.java 3.36 KiB
Newer Older
package experiment.fse15.tcpreconstruction;
Christian Wulf's avatar
Christian Wulf committed

import java.util.Collection;
import java.util.LinkedList;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import teetime.stage.trace.traceReconstruction.EventBasedTrace;
import teetime.stage.trace.traceReconstruction.EventBasedTraceFactory;
Christian Wulf's avatar
Christian Wulf committed
import teetime.util.concurrent.hashmap.ConcurrentHashMapWithDefault;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import experiment.fse15.CollectorActor;
import experiment.fse15.CounterActor;
import experiment.fse15.StartMessage;
Christian Wulf's avatar
Christian Wulf committed
import experiment.fse15.WatchActor;
import experiment.fse15.tcpreader.TcpReaderActor;
Christian Wulf's avatar
Christian Wulf committed

public class TraceReconstructionAnalysisConfiguration {

	private static final Logger LOGGER = LoggerFactory.getLogger(TraceReconstructionAnalysisConfiguration.class);

	private final ConcurrentHashMapWithDefault<Long, EventBasedTrace> traceId2trace;
Christian Wulf's avatar
Christian Wulf committed

	private ActorRef tcpReaderActor;
	private final Collection<Object> validTraces = new LinkedList<>();
Christian Wulf's avatar
Christian Wulf committed

	public TraceReconstructionAnalysisConfiguration() {
		traceId2trace = new ConcurrentHashMapWithDefault<>(EventBasedTraceFactory.INSTANCE);
Christian Wulf's avatar
Christian Wulf committed
		init();
	}

	private void init() {
		ActorSystem system = ActorSystem.create(TraceReconstructionAnalysisConfiguration.class.getSimpleName());
Christian Wulf's avatar
Christian Wulf committed

Christian Wulf's avatar
Christian Wulf committed
		// create watch actor for termination
		Props watchProps = Props.create(WatchActor.class);
		final ActorRef watchActor = system.actorOf(watchProps);

Christian Wulf's avatar
Christian Wulf committed
		// specify actors
		// Props collectorValidProps = Props.create(Collector.class, validTraces); // do not use a collector since it
		// pollutes the heap
Christian Wulf's avatar
Christian Wulf committed
		Props collectorValidProps = Props.create(CounterActor.class, watchActor);
		Props collectorInvalidProps = Props.create(CollectorActor.class, watchActor);
		Props tcpTraceReconstructionProps = Props.create(TcpTraceReconstructionActor.class, traceId2trace,
Christian Wulf's avatar
Christian Wulf committed
				collectorValidProps, collectorInvalidProps, watchActor);
		Props tcpReaderProps = Props.create(TcpReaderActor.class, tcpTraceReconstructionProps, watchActor);
Christian Wulf's avatar
Christian Wulf committed

		// create actors
		final ActorRef tcpReaderActor = system.actorOf(tcpReaderProps, "TcpReaderActor");
		// final ActorRef tcpTraceReconstructonActor = system.actorOf(tcpTraceReconstructionProps,
		// "TcpTraceReconstructionActor");
Christian Wulf's avatar
Christian Wulf committed
		// final ActorRef validTraceReceiver = system.actorOf(collectorValidProps, "CollectorValid");
		// final ActorRef invalidTraceReceiver = system.actorOf(collectorInvalidProps, "CollectorInvalid");
		// final ActorRef tcpReaderActor = system.actorOf(Props.create(TcpReaderActor.class,
		// new Creator<TcpReaderActor>() {
		// @Override
		// public TcpReaderActor create() throws Exception {
		// return new TcpReaderActor(tcpTraceReconstructonActor);
		// }
		// }));

		// tcpReader = TypedActor.get(system).typedActorOf(new TypedProps<TcpReaderActor>(ITcpReader.class, new
		// Creator<TcpReaderActor>() {
		// @Override
		// public TcpReaderActor create() throws Exception {
		// return new TcpReaderActor(tcpTraceReconstructonActor);
		// }
		// }));

		this.tcpReaderActor = tcpReaderActor;

		LOGGER.info("Configuration initialized.");
	}

	public void start() throws Exception {
		LOGGER.info("Starting analysis...");
		// tcpReader.onStarting();
		// tcpReader.execute();
		// tcpReader.onTerminating();
		tcpReaderActor.tell(new StartMessage(), ActorRef.noSender());
Christian Wulf's avatar
Christian Wulf committed
		LOGGER.info("Analysis started.");
	}

	public Collection<Object> getValidTraces() {
		return validTraces;
	}

}