application-tracer
Changes
.settings/org.eclipse.jdt.core.prefs 7(+7 -0)
.settings/org.eclipse.m2e.core.prefs 4(+4 -0)
pom.xml 27(+8 -19)
Details
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..839d647
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000..d4313d4
--- /dev/null
+++ b/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
.settings/org.eclipse.jdt.core.prefs 7(+7 -0)
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..5592a0a
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
.settings/org.eclipse.m2e.core.prefs 4(+4 -0)
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
pom.xml 27(+8 -19)
diff --git a/pom.xml b/pom.xml
index 9b22f04..d63edb6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,10 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
- <groupId>br.ufrgs.inf.prosoft.applicationsdumpler</groupId>
- <artifactId>ApplicationsDumpler</artifactId>
+ <groupId>br.ufrgs.inf.prosoft.applicationtracer</groupId>
+ <artifactId>ApplicationTracer</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
+ <name>ApplicationTracer</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
@@ -34,6 +35,11 @@
<artifactId>JSON-java</artifactId>
<version>1.0</version>
</dependency>
+ <dependency>
+ <groupId>br.ufrgs.inf.prosoft.trace</groupId>
+ <artifactId>Trace</artifactId>
+ <version>1.0</version>
+ </dependency>
</dependencies>
<build>
<plugins>
@@ -56,23 +62,6 @@
</executions>
</plugin>
<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.4</version>
- <configuration>
- <archive>
- <manifest>
- <addClasspath>true</addClasspath>
- <classpathPrefix>lib</classpathPrefix>
- <mainClass>br.ufrgs.inf.prosoft.applicationsdumpler.NewClass</mainClass>
- </manifest>
- <manifestEntries>
- <Class-Path>lib/</Class-Path>
- </manifestEntries>
- </archive>
- </configuration>
- </plugin>
- <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
diff --git a/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
new file mode 100644
index 0000000..d6debed
--- /dev/null
+++ b/src/main/java/br/ufrgs/inf/prosoft/applicationtracer/TracerAspect.java
@@ -0,0 +1,79 @@
+/*
+ * 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.trace.Parameter;
+import br.ufrgs.inf.prosoft.trace.Return;
+import br.ufrgs.inf.prosoft.trace.Trace;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.security.MessageDigest;
+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;
+import org.json.JSONObject;
+
+/**
+ *
+ * @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;
+ }
+ try {
+ String longsignature = joinPoint.getSignature().toLongString();
+ 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<>();
+ MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
+ if (split.length > 1) {
+ String[] parameterTypes = split[1].split(", ");
+ Object[] parametersData = joinPoint.getArgs();
+ for (int i = 0; i < parametersData.length; i++) {
+ JSONObject.resetCycleBreaker();
+ String parameter = new JSONObject(parametersData[i]).toString();
+ parameters.add(new Parameter(parameterTypes[i], messageDigest.digest(parameter.getBytes()).toString()));
+ }
+ }
+ JSONObject.resetCycleBreaker();
+ Return returnValue = new Return(returnType, messageDigest.digest(new JSONObject(proceed).toString().getBytes()).toString());
+ Trace trace = new Trace(Arrays.asList(modifiers), returnValue, methodName, parameters, startTime, endTime);
+ JSONObject.resetCycleBreaker();
+ String signature = new JSONObject(trace).toString();
+ signature += "\n";
+ try {
+ Files.write(Paths.get("./trace"), signature.getBytes(), StandardOpenOption.APPEND);
+ } catch (NoSuchFileException e) {
+ Files.write(Paths.get("./trace"), signature.getBytes(), StandardOpenOption.CREATE);
+ }
+ System.out.print(signature);
+ } catch (Exception ex) {
+ System.err.println(ex);
+ }
+ return proceed;
+ }
+}