application-tracer

added file log

5/19/2019 6:01:30 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 d48b6b6..e1f6968 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
@@ -34,14 +34,19 @@ import org.aspectj.lang.annotation.Pointcut;
 @Aspect
 public class TracerAspect {
 
+    private static final boolean TRACER_ENABLE = System.getenv("TRACER_ENABLE") != null && System.getenv("TRACER_ENABLE").equals("true");
+    private static final String TRACER_TRACES = System.getenv("TRACER_TRACES") != null ? System.getenv("TRACER_TRACES") : "./traces";
+    private static final String TRACER_BLACKLIST = System.getenv("TRACER_BLACKLIST") != null ? System.getenv("TRACER_BLACKLIST") : "./blacklist";
+    private static final boolean TRACER_VERBOSE = System.getenv("TRACER_VERBOSE") == null || !System.getenv("TRACER_VERBOSE").equals("false");
+    private static final String TRACER_LOG = System.getenv("TRACER_LOG");
+
     @Pointcut("execution(!void *(..)) && !within(br.ufrgs.inf.prosoft.applicationtracer..*)")
     public void anyMethodExecution() {
     }
 
     @Around("anyMethodExecution()")
-    public Object serializeMethodCall(ProceedingJoinPoint joinPoint) throws Throwable {
-        String enableTracer = System.getenv("TRACER_ENABLE");
-        if (enableTracer != null && !enableTracer.equals("true")) {
+    public Object serialiseMethodCall(ProceedingJoinPoint joinPoint) throws Throwable {
+        if (!TRACER_ENABLE) {
             return joinPoint.proceed();
         }
         long startTime = System.currentTimeMillis();
@@ -54,28 +59,19 @@ public class TracerAspect {
         if (longsignature.contains("AjcClosure")) {
             return proceed;
         }
-        String blacklistPath = System.getenv("TRACER_BLACKLIST");
-        if (blacklistPath == null) {
-            blacklistPath = "./blacklist";
-        }
         List<String> blacklist;
         try {
-            blacklist = Files.readAllLines(Paths.get(blacklistPath));
+            blacklist = Files.readAllLines(Paths.get(TRACER_BLACKLIST));
         } catch (IOException ex) {
             blacklist = new ArrayList<>();
         }
         if (blacklist.contains(longsignature)) {
             System.out.println("[ApplicationTracer] skipping " + longsignature);
+            log(System.currentTimeMillis() + " [INFO   ] skipping " + longsignature);
             return proceed;
         }
         try {
-            boolean verbose = endTime - startTime > 5;
-            if (verbose) {
-                String verboseTracer = System.getenv("TRACER_VERBOSE");
-                if (verboseTracer != null && verboseTracer.equals("false")) {
-                    verbose = false;
-                }
-            }
+            boolean verbose = TRACER_VERBOSE && endTime - startTime > 5;
             if (verbose) {
                 System.out.print("[ApplicationTracer] tracing " + longsignature + "... ");
             }
@@ -101,13 +97,10 @@ public class TracerAspect {
             }
             String userId = getUserId();
             Trace trace = new TraceConcrete(instance, Arrays.asList(modifiers), returnValue, methodName, parameters, startTime, endTime, userId);
-            String tracesPath = System.getenv("TRACER_TRACES");
-            if (tracesPath == null) {
-                tracesPath = "./traces";
-            }
             synchronized (TracerAspect.class) {
+                startTime = System.currentTimeMillis();
                 if (verbose) {
-                    System.out.print(System.currentTimeMillis() + "... ");
+                    System.out.print(startTime + "... ");
                 }
                 ExecutorService service = Executors.newSingleThreadExecutor();
                 Future<String> futureTrace = service.submit(() -> {
@@ -116,22 +109,28 @@ public class TracerAspect {
                     return jsonTrace;
                 });
                 String jsonTrace;
+                long middleTime;
                 try {
                     jsonTrace = futureTrace.get(20, TimeUnit.SECONDS);
+                    middleTime = System.currentTimeMillis();
                     if (verbose) {
-                        System.out.print(System.currentTimeMillis() + "... ");
+                        System.out.print(middleTime + "... ");
                     }
-                    try (FileWriter fileWriter = new FileWriter(tracesPath, true)) {
+                    try (FileWriter fileWriter = new FileWriter(TRACER_TRACES, true)) {
                         fileWriter.write(jsonTrace);
                     }
+                    endTime = System.currentTimeMillis();
                     if (verbose) {
-                        System.out.println(System.currentTimeMillis());
+                        System.out.println(endTime);
                     }
+                    log(System.currentTimeMillis() + " [INFO   ] " + startTime + " " + middleTime + " " + endTime + " " + longsignature);
                 } catch (TimeoutException ex) {
+                    log(System.currentTimeMillis() + " [WARNING] timeout " + longsignature);
                     System.err.println("[ApplicationTracer] tracing timeout on " + longsignature);
                 }
             }
         } catch (Exception ex) {
+            log("[SEVERE ] exception: " + ex);
             System.err.println("[ApplicationTracer] exception: " + ex);
         }
         return proceed;
@@ -147,4 +146,14 @@ public class TracerAspect {
             return "";
         }
     }
+
+    private void log(String message) {
+        if (TRACER_LOG == null) {
+            return;
+        }
+        try (FileWriter fileWriter = new FileWriter(TRACER_LOG, true)) {
+            fileWriter.write(message + "\n");
+        } catch (IOException ex) {
+        }
+    }
 }