package mvd.jester; import java.time.LocalTime; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import com.google.common.collect.Table; import com.google.common.math.Stats; import mvd.jester.info.SchedulingInfo; import mvd.jester.info.TerminationInfo; import mvd.jester.simulator.AbstractSimulator; import mvd.jester.tests.AbstractTest; import mvd.jester.utils.Logger; /** * ResultCollector */ public class ResultCollector { private final Table, Set> testResults; private final Table, Set> simulatorResults; private final Map totalNumberOfTasksets; private final long numberOfProcessors; public ResultCollector(Table, Set> testResults, Table, Set> simulatorResults, Map totalNumberOfTasksets, long numberOfProcessors) { this.testResults = testResults; this.simulatorResults = simulatorResults; this.totalNumberOfTasksets = totalNumberOfTasksets; this.numberOfProcessors = numberOfProcessors; } public void logAll() { if (!testResults.isEmpty()) { logResults(testResults, "test"); logMeanTardiness(simulatorResults, "test"); logFailedTardiness(testResults, "test"); } if (!simulatorResults.isEmpty()) { logResults(simulatorResults, "sim"); logMeanTardiness(simulatorResults, "sim"); logFailedTardiness(simulatorResults, "sim"); } } public void logResults( Table, Set> results, String type) { LocalTime date = LocalTime.now(); Logger log = new Logger("./results/results_" + type + "_" + numberOfProcessors + "_" + date.getHour() + ":" + date.getMinute() + ".txt"); String firstLine = new String("Utilization\tTotal"); if (!results.isEmpty()) { for (Pair pair : results.columnKeySet()) { firstLine = firstLine + "\t" + pair.getName(); } log.log(firstLine); for (Long util : totalNumberOfTasksets.keySet()) { String line = String.valueOf((double) util / 10) + "\t" + totalNumberOfTasksets.get(util); for (Pair pair : results.columnKeySet()) { long feasibleTasksets = results.get(util, pair).stream() .filter(s -> s.checkTasksetFeasible()).count(); line += "\t" + feasibleTasksets; } log.log(line); } } log.finalize(); } public void logFailedTardiness( Table, Set> results, String type) { LocalTime date = LocalTime.now(); Logger log = new Logger("./results/failed_tardiness_" + type + "_" + numberOfProcessors + "_" + date.getHour() + ":" + date.getMinute() + ".txt"); String firstLine = new String("Utilization\tTotal"); if (!results.isEmpty()) { for (Pair pair : results.columnKeySet()) { firstLine = firstLine + "\t" + pair.getName(); } log.log(firstLine); for (Long kv : totalNumberOfTasksets.keySet()) { String line = String.valueOf((double) kv / 10) + "\t" + totalNumberOfTasksets.get(kv); for (Pair pair : results.columnKeySet()) { Set simulationInfos = results.get(kv, pair); List values = new ArrayList<>(); for (SchedulingInfo s : simulationInfos) { Optional failedTerminationInfo = s.getFailedTerminationInfo(); if (failedTerminationInfo.isPresent()) { values.add(failedTerminationInfo.get().getLateness()); } } double meanTardiness = 0; if (!values.isEmpty()) { meanTardiness = Stats.meanOf(values.iterator()); } line += "\t" + meanTardiness; } log.log(line); } } log.finalize(); } public void logMeanTardiness( Table, Set> results, String type) { LocalTime date = LocalTime.now(); Logger log = new Logger("./results/mean_tardiness_" + type + "_" + numberOfProcessors + "_" + date.getHour() + ":" + date.getMinute() + ".txt"); String firstLine = new String("Utilization\tTotal"); if (!results.isEmpty()) { for (Pair pair : results.columnKeySet()) { firstLine = firstLine + "\t" + pair.getName(); } log.log(firstLine); for (Long kv : totalNumberOfTasksets.keySet()) { String line = String.valueOf((double) kv / 10) + "\t" + totalNumberOfTasksets.get(kv); for (Pair pair : results.columnKeySet()) { Set simulationInfos = results.get(kv, pair); List values = new ArrayList<>(); for (SchedulingInfo s : simulationInfos) { for (TerminationInfo t : s.getTerminationInfos()) { values.add(t.getLateness()); } } double meanTardiness = 0; if (!values.isEmpty()) { meanTardiness = Stats.meanOf(values.iterator()); } line += "\t" + meanTardiness; } log.log(line); } } log.finalize(); } }