trace

Added distribution tool

12/19/2020 5:26:41 PM

Details

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);
     }
 
 }