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) {