application-tracer

typo fix

11/27/2018 5:57:02 AM

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
index 50b05fa..91616a0 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
@@ -86,7 +86,7 @@ public class TracerAspect {
                 System.out.println("[ApplicationTracer] serialising " + System.currentTimeMillis());
                 try (FileWriter fileWriter = new FileWriter(tracesPath, true)) {
                     try {
-                        JSONSerialiser.serialiseAcylicObject(trace, fileWriter);
+                        JSONSerialiser.serialiseAcyclicObject(trace, fileWriter);
                     } catch (IOException ex) {
                         System.err.println("[ApplicationTracer] Unable to serialise due IOException");
                     }
diff --git a/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect_JSONObject.java b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect_JSONObject.java
new file mode 100644
index 0000000..50b05fa
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect_JSONObject.java
@@ -0,0 +1,102 @@
+/*
+ * 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.applicationtracer;
+
+import br.ufrgs.inf.prosoft.jsonserialiser.JSONSerialiser;
+import br.ufrgs.inf.prosoft.trace.Parameter;
+import br.ufrgs.inf.prosoft.trace.Return;
+import br.ufrgs.inf.prosoft.trace.Trace;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+
+/**
+ *
+ * @author romulo
+ */
+@Aspect
+public class TracerAspect {
+
+    @Pointcut("execution(!void *(..))")
+    public void anyMethodExecution() {
+    }
+
+    @Around("anyMethodExecution()")
+    public Object serializeMethodCall(ProceedingJoinPoint joinPoint) throws Throwable {
+        long startTime = System.currentTimeMillis();
+        Object proceed = joinPoint.proceed();
+        long endTime = System.currentTimeMillis();
+        if (startTime == endTime) {
+            return proceed;
+        }
+        String blacklistPath = System.getenv("TRACER_BLACKLIST");
+        if (blacklistPath == null) {
+            blacklistPath = "./blacklist";
+        }
+        List<String> blacklist;
+        try {
+            blacklist = Files.readAllLines(Paths.get(blacklistPath));
+        } catch (IOException ex) {
+            blacklist = new ArrayList<>();
+        }
+        try {
+            String longsignature = joinPoint.getSignature().toLongString();
+            if (blacklist.contains(longsignature)) {
+                System.out.println("[ApplicationTracer] skipping " + longsignature);
+                return proceed;
+            }
+            System.out.println("[ApplicationTracer] tracing " + longsignature);
+            String[] split = longsignature.substring(0, longsignature.length() - 1).split("\\(");
+            String[] modifiersReturnAndName = split[0].split(" ");
+            String[] modifiers = Arrays.copyOf(modifiersReturnAndName, modifiersReturnAndName.length - 2);
+            String methodName = modifiersReturnAndName[modifiersReturnAndName.length - 1];
+            String returnType = modifiersReturnAndName[modifiersReturnAndName.length - 2];
+            List<Parameter> parameters = new ArrayList<>();
+            if (split.length > 1) {
+                String[] parameterTypes = split[1].split(", ");
+                Object[] parametersData = joinPoint.getArgs();
+                for (int i = 0; i < parametersData.length; i++) {
+                    parameters.add(new Parameter(parameterTypes[i], parametersData[i]));
+                }
+            }
+            Return returnValue = new Return(returnType, proceed);
+            String instance;
+            try {
+                instance = String.valueOf(joinPoint.getThis().hashCode());
+            } catch (Exception ex) {
+                instance = "s";
+            }
+            Trace trace = new Trace(instance, Arrays.asList(modifiers), returnValue, methodName, parameters, startTime, endTime);
+            String tracesPath = System.getenv("TRACER_TRACES");
+            if (tracesPath == null) {
+                tracesPath = "./traces";
+            }
+            synchronized (TracerAspect.class) {
+                System.out.println("[ApplicationTracer] serialising " + System.currentTimeMillis());
+                try (FileWriter fileWriter = new FileWriter(tracesPath, true)) {
+                    try {
+                        JSONSerialiser.serialiseAcylicObject(trace, fileWriter);
+                    } catch (IOException ex) {
+                        System.err.println("[ApplicationTracer] Unable to serialise due IOException");
+                    }
+                    fileWriter.append("\n");
+                }
+                System.out.println("[ApplicationTracer] serialised " + System.currentTimeMillis());
+            }
+        } catch (Exception ex) {
+            System.err.println("[ApplicationTracer] exception: " + ex);
+        }
+        return proceed;
+    }
+}