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