application-tracer

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 e957c1e..4f20b9d 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
@@ -17,6 +17,11 @@ import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -67,10 +72,7 @@ public class TracerAspect {
             boolean verbose = endTime - startTime > 5;
             if (verbose) {
                 String verboseTracer = System.getenv("TRACER_VERBOSE");
-                if (verboseTracer == null) {
-                    verboseTracer = "true";
-                }
-                if (verboseTracer.equals("false")) {
+                if (verboseTracer != null && verboseTracer.equals("false")) {
                     verbose = false;
                 }
             }
@@ -107,16 +109,26 @@ public class TracerAspect {
                 if (verbose) {
                     System.out.print(System.currentTimeMillis() + "... ");
                 }
-                String jsonTrace = JSONSerialiser.serialiseAcyclicObject(trace);
-                jsonTrace += "\n";
-                if (verbose) {
-                    System.out.print(System.currentTimeMillis() + "... ");
-                }
-                try (FileWriter fileWriter = new FileWriter(tracesPath, true)) {
-                    fileWriter.write(jsonTrace);
-                }
-                if (verbose) {
-                    System.out.println(System.currentTimeMillis());
+                ExecutorService service = Executors.newSingleThreadExecutor();
+                Future<String> futureTrace = service.submit(() -> {
+                    String jsonTrace = JSONSerialiser.serialise(trace);
+                    jsonTrace += "\n";
+                    return jsonTrace;
+                });
+                String jsonTrace;
+                try {
+                    jsonTrace = futureTrace.get(20, TimeUnit.SECONDS);
+                    if (verbose) {
+                        System.out.print(System.currentTimeMillis() + "... ");
+                    }
+                    try (FileWriter fileWriter = new FileWriter(tracesPath, true)) {
+                        fileWriter.write(jsonTrace);
+                    }
+                    if (verbose) {
+                        System.out.println(System.currentTimeMillis());
+                    }
+                } catch (TimeoutException ex) {
+                    System.err.println("[ApplicationTracer] tracing timeout on " + longsignature);
                 }
             }
         } catch (Exception ex) {