trace

added usersession and tracereader

12/2/2018 7:03:35 AM

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/Trace.java b/src/main/java/br/ufrgs/inf/prosoft/trace/Trace.java
index 07f64a5..8c28fdb 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/Trace.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/Trace.java
@@ -18,13 +18,15 @@ public abstract class Trace {
     private final String n;
     private final long s;
     private final long e;
+    private final String u;
 
-    public Trace(String instance, List<String> modifiers, String name, long startTime, long endTime) {
+    public Trace(String instance, List<String> modifiers, String name, long startTime, long endTime, String userSession) {
         this.i = instance;
         this.m = modifiers;
         this.n = name;
         this.s = startTime;
         this.e = endTime;
+        this.u = userSession;
     }
 
     public String getInstance() {
@@ -51,4 +53,8 @@ public abstract class Trace {
         return e;
     }
 
+    public String getUserSession() {
+        return u;
+    }
+
 }
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/TraceConcrete.java b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceConcrete.java
index d84bab2..f8e2284 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/TraceConcrete.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceConcrete.java
@@ -16,8 +16,8 @@ public class TraceConcrete extends Trace {
     private final Return r;
     private final List<Parameter> p;
 
-    public TraceConcrete(String instance, List<String> modifiers, Return returnValue, String name, List<Parameter> parameters, long startTime, long endTime) {
-        super(instance, modifiers, name, startTime, endTime);
+    public TraceConcrete(String instance, List<String> modifiers, Return returnValue, String name, List<Parameter> parameters, long startTime, long endTime, String userSession) {
+        super(instance, modifiers, name, startTime, endTime, userSession);
         this.r = returnValue;
         this.p = parameters;
     }
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReader.java b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReader.java
new file mode 100644
index 0000000..45d204b
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReader.java
@@ -0,0 +1,103 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package br.ufrgs.inf.prosoft.trace;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.stream.Stream;
+
+/**
+ *
+ * @author romulo
+ */
+public class TraceReader {
+
+    private static final Logger logger = Logger.getLogger(TraceReader.class.getName());
+
+    public static List<Trace> partiallyParseFile(String path) {
+        Traces.PATH = path;
+        return parseFile(path, true);
+    }
+
+    public static List<Trace> parseFile(String path) {
+        return parseFile(path, false);
+    }
+
+    public static String getLineCount(String path) throws IOException {
+        try {
+            Process process = Runtime.getRuntime().exec("wc -l " + path);
+            Thread.sleep(2000);
+            if (process.isAlive()) {
+                return "timeout";
+            }
+            InputStream inputStream = process.getInputStream();
+            StringBuilder count = new StringBuilder();
+            int c;
+            while (true) {
+                c = inputStream.read();
+                if (c == 32 || c == -1 || c == 10) {
+                    break;
+                }
+                count.append((char) c);
+            }
+            return count.toString();
+        } catch (Exception ex) {
+            return ex.getMessage();
+        }
+    }
+
+    private static List<Trace> parseFile(String path, boolean partial) {
+        List<Trace> traces = new ArrayList<>();
+        try {
+            logger.log(Level.INFO, "Parsing {0} traces", getLineCount(path));
+            Stream<String> lines = Files.lines(Paths.get(path));
+            Gson gson = new Gson();
+            lines.forEach(new Consumer<String>() {
+                int index = 0;
+
+                @Override
+                public void accept(String line) {
+                    try {
+                        Trace trace;
+                        if (partial) {
+                            trace = gson.fromJson(line, TraceReference.class);
+                            ((TraceReference) trace).setIndex(index);
+                        } else {
+                            trace = gson.fromJson(line, TraceConcrete.class);
+                        }
+                        traces.add(trace);
+                        System.out.print(".");
+                        System.out.flush();
+                        if (index != 0 && index % 100 == 0) {
+                            System.out.println();
+                        }
+                    } catch (JsonSyntaxException e) {
+                        if (line.length() > 2000) {
+                            line = line.substring(0, 2000);
+                        }
+                        logger.log(Level.INFO, "\nMalformed Trace {0}: {1}", new java.lang.Object[]{index, line});
+                    } finally {
+                        index++;
+                    }
+                }
+            });
+            System.out.println();
+        } catch (IOException ex) {
+            logger.log(Level.SEVERE, null, ex);
+        }
+        return traces;
+    }
+
+}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java
index 8ca2952..b86072d 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/TraceReference.java
@@ -15,8 +15,8 @@ public class TraceReference extends Trace {
 
     private int index;
 
-    public TraceReference(int index, String instance, List<String> modifiers, String name, long startTime, long endTime) {
-        super(instance, modifiers, name, startTime, endTime);
+    public TraceReference(int index, String instance, List<String> modifiers, String name, long startTime, long endTime, String userSession) {
+        super(instance, modifiers, name, startTime, endTime, userSession);
         this.index = index;
     }