diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Distribution.java b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Distribution.java
new file mode 100644
index 0000000..dd89a7a
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Distribution.java
@@ -0,0 +1,41 @@
+package br.ufrgs.inf.prosoft.trace.tools;
+
+import br.ufrgs.inf.prosoft.trace.Trace;
+import br.ufrgs.inf.prosoft.trace.reader.TraceReader;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.security.MessageDigest;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class Distribution {
+
+ private static final Logger LOGGER = Logger.getLogger(Distribution.class.getName());
+
+ public static void exportDistributions(String tracePath, String outputPath, String prefix) {
+ try {
+ List<Trace> traces = TraceReader.parseFile(tracePath);
+ Long baseTime = traces.stream().map(trace -> trace.getStartTime()).min(Long::compare).orElse(0L);
+ final MessageDigest messageDigest = MessageDigest.getInstance("sha-512");
+ try (FileWriter fileWriter = new FileWriter(outputPath, true)) {
+ traces.forEach(trace -> {
+ try {
+ long time = trace.getStartTime() - baseTime;
+ String parameters = messageDigest.digest(trace.getParameters().toString().getBytes()).toString();
+ fileWriter.write(prefix + trace.getName() + "," + parameters + "," + time + "\n");
+ } catch (IOException ex) {
+ LOGGER.log(Level.SEVERE, "IOException {0}", ex);
+ }
+ });
+ } catch (IOException ex) {
+ LOGGER.log(Level.SEVERE, "IOException {0}", ex);
+ }
+ } catch (Exception ex) {
+ LOGGER.log(Level.SEVERE, "algorithm not found", ex);
+ System.exit(1);
+ }
+ }
+
+}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Main.java b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Main.java
index cb7c808..54c4ea5 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Main.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/tools/Main.java
@@ -6,42 +6,50 @@
package br.ufrgs.inf.prosoft.trace.tools;
/**
- *
* @author romulo
*/
public class Main {
public static void main(String[] args) {
System.setProperty("java.util.logging.SimpleFormatter.format", "[%1$tF %1$tT+%1$tL] [%4$-7s] [Trace] %5$s %n");
- String tool = null;
- String firstPath = null;
- String secondPath = null;
if (args.length < 2) {
System.err.println("check <TracePath>");
System.err.println("diff <FirstTracePath> <SecondTracePath>");
System.err.println("hash <InputTracePath> <OutputTracePath>");
System.err.println("average <TracePath> <ReducePath> <Prefix>");
+ System.err.println("distribution <TracePath> <OutputPath> <Prefix>");
System.exit(1);
}
- tool = args[0];
- firstPath = args[1];
+ String tool = args[0];
+ String firstPath = args[1];
if (tool.equals("check")) {
CheckTraces.check(firstPath);
- } else {
- if (args.length < 3) {
- System.err.println("wrong input");
- System.exit(1);
- }
- secondPath = args[2];
- if (tool.equals("diff")) {
- DiffTraces.diff(firstPath, secondPath);
- } else if (tool.equals("hash")) {
- HashFile.convert(firstPath, secondPath);
- } else {
- String prefix = args[3] != null ? args[3] : "";
- CalculateMetrics.calculateAverageExecutionTime(firstPath, secondPath, prefix);
- }
+ return;
}
+ if (args.length < 3) {
+ System.err.println("wrong input");
+ System.exit(1);
+ }
+ String secondPath = args[2];
+ if (tool.equals("diff")) {
+ DiffTraces.diff(firstPath, secondPath);
+ return;
+ }
+ if (tool.equals("hash")) {
+ HashFile.convert(firstPath, secondPath);
+ return;
+ }
+ String prefix = args[3] != null ? args[3] : "";
+ if (tool.equals("average")) {
+ CalculateMetrics.calculateAverageExecutionTime(firstPath, secondPath, prefix);
+ return;
+ }
+ if (tool.equals("distribution")) {
+ Distribution.exportDistributions(firstPath, secondPath, prefix);
+ return;
+ }
+ System.err.println("option not found");
+ System.exit(1);
}
}