aplcache
Changes
src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java 40(+20 -20)
Details
diff --git a/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java b/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java
index 38e05d0..44b9b09 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/decision/flowchart/FlowchartWorkFlow.java
@@ -10,7 +10,7 @@ import java.util.logging.Logger;
public final class FlowchartWorkFlow {
- private static final Logger logger = Logger.getLogger(FlowchartWorkFlow.class.getName());
+ private static final Logger LOGGER = Logger.getLogger(FlowchartWorkFlow.class.getName());
private List<Method> methods;
@@ -20,41 +20,41 @@ public final class FlowchartWorkFlow {
}
private void countStats() {
- logger.log(Level.INFO, "Counting stats of {0} methods", this.methods.size());
+ LOGGER.log(Level.INFO, "Counting stats of {0} methods", this.methods.size());
Collections.sort(this.methods, (m1, m2) -> Integer.compare(m1.getOccurrencesSize(), m2.getOccurrencesSize()));
this.methods.stream().parallel().forEach(Method::calculateMetrics);
}
private void calculateThresholds() {
- logger.log(Level.INFO, "Calculating thresholds");
+ LOGGER.log(Level.INFO, "Calculating thresholds");
Thresholds.reset();
Thresholds.population = getPopulation();
this.methods.stream().forEach(Method::calculateThresholds);
- logger.log(Level.INFO, "Average ExecutionTime: {0}", Thresholds.getAverageExecutionTime());
- logger.log(Level.INFO, "Average HitRatio: {0}", Thresholds.getAverageHitRatio());
- logger.log(Level.INFO, "Average MissRatio: {0}", Thresholds.getAverageMissRatio());
- logger.log(Level.INFO, "Average shareability: {0}", Thresholds.getAverageShareability());
- logger.log(Level.INFO, "StdDv ExecutionTime: {0}", Thresholds.getStdDevExecutionTimeRatio());
- logger.log(Level.INFO, "StdDv HitRatio: {0}", Thresholds.getStdDevHitRatio());
- logger.log(Level.INFO, "StdDv MissRatio: {0}", Thresholds.getStdDevMissRatio());
- logger.log(Level.INFO, "StdDv shareability: {0}", Thresholds.getStdDevShareability());
- logger.log(Level.INFO, "StdDv frequency: {0}", Thresholds.getStdDevFrequency());
+ LOGGER.log(Level.INFO, "Average ExecutionTime: {0}", Thresholds.getAverageExecutionTime());
+ LOGGER.log(Level.INFO, "Average HitRatio: {0}", Thresholds.getAverageHitRatio());
+ LOGGER.log(Level.INFO, "Average MissRatio: {0}", Thresholds.getAverageMissRatio());
+ LOGGER.log(Level.INFO, "Average shareability: {0}", Thresholds.getAverageShareability());
+ LOGGER.log(Level.INFO, "StdDv ExecutionTime: {0}", Thresholds.getStdDevExecutionTimeRatio());
+ LOGGER.log(Level.INFO, "StdDv HitRatio: {0}", Thresholds.getStdDevHitRatio());
+ LOGGER.log(Level.INFO, "StdDv MissRatio: {0}", Thresholds.getStdDevMissRatio());
+ LOGGER.log(Level.INFO, "StdDv shareability: {0}", Thresholds.getStdDevShareability());
+ LOGGER.log(Level.INFO, "StdDv frequency: {0}", Thresholds.getStdDevFrequency());
int k = 0;
- logger.log(Level.INFO, "Using {0} stdDev to calculate thresholds...", k);
- logger.log(Level.INFO, "Threshold ExecutionTime: {0}", Thresholds.expensivenessThreshold(k));
- logger.log(Level.INFO, "Threshold HitRatio: {0}", Thresholds.hitThreshold(k));
- logger.log(Level.INFO, "Threshold MissRatio: {0}", Thresholds.missThreshold(k));
- logger.log(Level.INFO, "Threshold Shareability: {0}", Thresholds.shareabilityThreshold(k));
- logger.log(Level.INFO, "Threshold frequency: {0}", Thresholds.frequencyThreshold(k));
+ LOGGER.log(Level.INFO, "Using {0} stdDev to calculate thresholds...", k);
+ LOGGER.log(Level.INFO, "Threshold ExecutionTime: {0}", Thresholds.expensivenessThreshold(k));
+ LOGGER.log(Level.INFO, "Threshold HitRatio: {0}", Thresholds.hitThreshold(k));
+ LOGGER.log(Level.INFO, "Threshold MissRatio: {0}", Thresholds.missThreshold(k));
+ LOGGER.log(Level.INFO, "Threshold Shareability: {0}", Thresholds.shareabilityThreshold(k));
+ LOGGER.log(Level.INFO, "Threshold frequency: {0}", Thresholds.frequencyThreshold(k));
}
public void filterCacheableInputs() {
countStats();
calculateThresholds();
- logger.log(Level.INFO, "Deciding if methods are cacheable...");
+ LOGGER.log(Level.INFO, "Deciding if methods are cacheable...");
Iterator<Method> iterator = this.methods.iterator();
while (iterator.hasNext()) {
@@ -65,7 +65,7 @@ public final class FlowchartWorkFlow {
}
}
- logger.log(Level.INFO, "{0} cacheable methods detected", this.methods.size());
+ LOGGER.log(Level.INFO, "{0} cacheable methods detected", this.methods.size());
}
private long getPopulation() {
diff --git a/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/Method.java b/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/Method.java
index 9132058..1661515 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/Method.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/metadata/Method.java
@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
*/
public class Method {
- private static final Logger logger = Logger.getLogger(Method.class.getName());
+ private static final Logger LOGGER = Logger.getLogger(Method.class.getName());
private final String name;
private final List<Occurrence> occurrences;
@@ -35,6 +35,10 @@ public class Method {
this.occurrences = new ArrayList<>();
}
+ public String getName() {
+ return name;
+ }
+
public Method addOccurrence(Occurrence occurrence) {
this.occurrences.add(occurrence);
return this;
@@ -54,7 +58,7 @@ public class Method {
}
public void groupByParameter() {
- logger.log(Level.INFO, "Grouping by parameters {0} occurrences of {1}", new Object[]{this.name, this.occurrences.size()});
+ LOGGER.log(Level.INFO, "Grouping by parameters {0} occurrences of {1}", new Object[]{this.name, this.occurrences.size()});
Map<String, GroupOfOccurrences> groupByParameter = new HashMap<>();
this.occurrences.stream().parallel().forEach(new Consumer<Occurrence>() {
int i = 0;
diff --git a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
index d0863d8..ba421a7 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/Main.java
@@ -9,6 +9,10 @@ import br.ufrgs.inf.prosoft.adaptivecaching.analysis.decision.flowchart.Flowchar
import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.metadata.Method;
import br.ufrgs.inf.prosoft.trace.Trace;
import br.ufrgs.inf.prosoft.trace.reader.Mode;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import java.io.FileWriter;
+import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
@@ -27,9 +31,8 @@ public class Main {
public static void main(String[] args) {
System.setProperty("java.util.logging.SimpleFormatter.format", "[%1$tF %1$tT+%1$tL] [%4$-7s] [APLCache] %5$s %n");
- if (args.length < 1) {
- System.err.println("--trace=<TracePath>");
- System.err.println("--trace=<TracePath> [--mode=<complete|hashed|partial>]");
+ if (args.length < 2) {
+ System.err.println("--trace=<TracePath> --output=<OutputPath> [--mode=<complete|hashed|partial>]");
System.exit(1);
}
@@ -37,7 +40,7 @@ public class Main {
arg = arg.replaceFirst("--", "");
String[] split = arg.split("=");
if (split.length < 2) {
- return new String[]{"", ""};
+ return new String[]{arg, ""};
}
return split;
}).collect(Collectors.toMap(array -> {
@@ -51,6 +54,11 @@ public class Main {
System.err.println("<TracePath> is required");
System.exit(1);
}
+ String outputPath = arguments.get("output");
+ if (outputPath == null) {
+ System.err.println("<OutputPath> is required");
+ System.exit(1);
+ }
String mode = arguments.get("mode");
if (mode == null) {
mode = "complete";
@@ -68,14 +76,22 @@ public class Main {
methods.forEach(method -> {
System.out.println(method + " : " + method.getGroupsOfOccurrences().size() + " parameters");
});
- methods.forEach(method -> {
- System.out.println(method);
- method.getGroupsOfOccurrences().forEach(group -> {
- System.out.println("parameters: " + group.getParameters());
- System.out.println("stats: " + group.getMetrics());
- System.out.println();
+ try (FileWriter fileWriter = new FileWriter(outputPath)) {
+ JsonObject jsonCacheableParameters = new JsonObject();
+ methods.forEach(method -> {
+ JsonArray cacheableParameters = new JsonArray();
+ method.getGroupsOfOccurrences().forEach(group -> {
+ cacheableParameters.add(group.getParameters());
+ });
+ jsonCacheableParameters.add(method.getName(), cacheableParameters);
});
- System.out.println();
- });
+ try {
+ fileWriter.write(jsonCacheableParameters.toString());
+ } catch (IOException ex) {
+ LOGGER.log(Level.SEVERE, "could not write to <outputPath>");
+ }
+ } catch (IOException ex) {
+ LOGGER.log(Level.SEVERE, "invalid <outputPath>");
+ }
}
}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java
index 3a69f23..3104de3 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
*/
public class TraceReader extends br.ufrgs.inf.prosoft.trace.reader.TraceReader {
- private static final Logger logger = Logger.getLogger(TraceReader.class.getName());
+ private static final Logger LOGGER = Logger.getLogger(TraceReader.class.getName());
public static List<Method> groupByMethods(List<Trace> traces) {
Map<String, Method> methodNameHasOccurrences = new HashMap<>();
@@ -56,7 +56,7 @@ public class TraceReader extends br.ufrgs.inf.prosoft.trace.reader.TraceReader {
methodNameHasOccurrences.put(trace.getName(), method);
}
} catch (Exception e) {
- logger.log(Level.INFO, "Trace discarted: {0}", trace);
+ LOGGER.log(Level.INFO, "Trace discarted: {0}", trace);
}
}
return methodNameHasOccurrences.values().stream().collect(Collectors.toList());