package hu.bme.mit.incquery.cep.performance.test;
import static com.google.common.base.Preconditions.checkArgument;
import hu.bme.mit.incquery.cep.api.ICepAdapter;
import hu.bme.mit.incquery.cep.api.ICepRule;
import hu.bme.mit.incquery.cep.api.ParameterizableEventInstance;
import hu.bme.mit.incquery.cep.api.ViatraCepManager;
import hu.bme.mit.incquery.cep.casestudy.base.adapters.TransactionEventAdapter;
import hu.bme.mit.incquery.cep.metamodels.internalsm.EventProcessingContext;
import hu.bme.mit.incquery.cep.performance.events.ComponentA_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentB_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentC_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentD_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentE_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentF_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentG_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentH_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentI_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentJ_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentK_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentL_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentM_Event;
import hu.bme.mit.incquery.cep.performance.events.ComponentN_Event;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import com.google.common.collect.Lists;
public class PerformanceTester {
private ICepAdapter adapter = new TransactionEventAdapter();
private File log;
private int observedComplexPatterns = 0;
private BufferedWriter bw;
private static PerformanceTester instance;
private PerformanceTester() {
}
public static PerformanceTester getInstance() {
if (instance == null) {
instance = new PerformanceTester();
}
return instance;
}
public void setup(ICepRule rule) throws IOException {
checkArgument(rule != null);
log = new File("log.txt");
log.createNewFile();
FileWriter fw = new FileWriter(log.getAbsoluteFile());
bw = new BufferedWriter(fw);
bw.write("Compilation started: " + new Date().getTime() + "\n");
ViatraCepManager.withContext(EventProcessingContext.CHRONICLE).addRule(rule);
bw.write("Compilation ended: " + new Date().getTime() + "\n\n");
}
public void simulate() throws IOException {
int inputEvents = 0;
bw.write("Simulation started: " + new Date().getTime() + "\n");
List<EventType> testSeries = Lists.newArrayList(EventType.C);
for (int i = 0; i < 100000; i++) {
System.out.println("+++Turnaround: " + i);
for (EventType eventType : testSeries) {
ParameterizableEventInstance event = generateEvent(eventType);
System.out.println("Refreshing model with " + event);
inputEvents++;
adapter.push(event);
}
}
bw.write("Simulation ended: " + new Date().getTime() + "\n\n");
bw.write("Input events: " + inputEvents + "\n");
bw.write("Observed complex patterns: " + observedComplexPatterns + "\n");
bw.close();
}
private enum EventType {
A, B, C, D, E, F, G, H, I, J, K, L, M, N
}
private ParameterizableEventInstance generateEvent(EventType type) {
switch (type) {
case A:
ComponentA_Event componentA = new ComponentA_Event(null);
return componentA;
case B:
ComponentB_Event componentB = new ComponentB_Event(null);
return componentB;
case C:
ComponentC_Event componentC = new ComponentC_Event(null);
return componentC;
case D:
ComponentD_Event componentD = new ComponentD_Event(null);
return componentD;
case E:
ComponentE_Event componentE = new ComponentE_Event(null);
return componentE;
case F:
ComponentF_Event componentF = new ComponentF_Event(null);
return componentF;
case G:
ComponentG_Event componentG = new ComponentG_Event(null);
return componentG;
case H:
ComponentH_Event componentH = new ComponentH_Event(null);
return componentH;
case I:
ComponentI_Event componentI = new ComponentI_Event(null);
return componentI;
case J:
ComponentJ_Event componentJ = new ComponentJ_Event(null);
return componentJ;
case K:
ComponentK_Event componentK = new ComponentK_Event(null);
return componentK;
case L:
ComponentL_Event componentL = new ComponentL_Event(null);
return componentL;
case M:
ComponentM_Event componentM = new ComponentM_Event(null);
return componentM;
case N:
ComponentN_Event componentN = new ComponentN_Event(null);
return componentN;
default:
return null;
}
}
public void dispose() {
instance = null;
}
public File getLog() {
return log;
}
public int getObservedComplexPatterns() {
return observedComplexPatterns;
}
public void increaseObservedPatternCount() {
observedComplexPatterns++;
}
}