adaptive-caching-framework

Details

diff --git a/evaluation/applications/AP/spring-petclinic/pom.xml b/evaluation/applications/AP/spring-petclinic/pom.xml
index 06460d6..be0e136 100644
--- a/evaluation/applications/AP/spring-petclinic/pom.xml
+++ b/evaluation/applications/AP/spring-petclinic/pom.xml
@@ -229,7 +229,7 @@
         <dependency>
             <groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
             <artifactId>autonomicmanager</artifactId>
-            <version>0.5.0-SNAPSHOT</version>
+            <version>0.6.0-SNAPSHOT</version>
         </dependency>
     </dependencies>
 
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java
index 569ed07..2907952 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java
@@ -17,6 +17,7 @@ import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.cache.CacheMonitor;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.cache.vendors.guava.GuavaMonitor;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage.providers.MongoRepository;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage.Repository;
+import br.ufrgs.inf.prosoft.adaptivecaching.sampling.adaptation.metrics.LightweightMetricAspect;
 import com.mongodb.MongoClient;
 import com.mongodb.client.MongoDatabase;
 import org.slf4j.Logger;
@@ -88,6 +89,10 @@ public class Analyzer implements Runnable {
 
 
     public Set<MethodEntry> analyzeAndReturn(List<LogTrace> logList) {
+
+        logger.info("LightweightMetricAspect.metrics: {}", LightweightMetricAspect.metrics);
+
+
         logger.info("Starting the analysis of cacheable methods from logs: " + logList.size() + " loaded.");
         //TODO trigger by number of logs
 //        if(logList.size() < 500000)
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java
index 368ba9f..0e60b5b 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java
@@ -16,9 +16,9 @@ import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.usersession.U
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.application.usersession.UserGetterFactory;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.cache.CacheMonitor;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.cache.CacheMonitorFactory;
-import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage.providers.MongoRepository;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage.Repository;
 import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage.RepositoryFactory;
+import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage.providers.MongoRepository;
 import com.mongodb.MongoClient;
 import com.mongodb.MongoTimeoutException;
 import com.mongodb.client.MongoDatabase;
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetricAspect.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetricAspect.java
new file mode 100644
index 0000000..be80fa9
--- /dev/null
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetricAspect.java
@@ -0,0 +1,44 @@
+package br.ufrgs.inf.prosoft.adaptivecaching.sampling.adaptation.metrics;
+
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Aspect
+public class LightweightMetricAspect {
+
+    @Pointcut(
+        //any execution except the own framework
+        "execution(!void *(..)) && !within(br.ufrgs.inf.prosoft.adaptivecaching..*) " +
+        //avoid calls from repository while serializing objects, it is necessary if a hash could not be used
+        "&& !cflow(call(* br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage..*(..)))"
+    )
+    public void anyCall() {
+    }
+
+    public static Map<String, LightweightMetrics> metrics;
+
+    public LightweightMetricAspect() {
+        metrics = new HashMap<>();
+    }
+
+    @Around("anyCall()")
+    public Object aroundMethods(ProceedingJoinPoint joinPoint) throws Throwable {
+
+        String signature = joinPoint.getSignature().toString();
+
+        LightweightMetrics metric = metrics.get(signature);
+        if(metric != null)
+            metric.incOccurrence();
+        else {
+            metric = new LightweightMetrics();
+            metrics.put(signature, metric);
+        }
+
+        return joinPoint.proceed();
+    }
+}
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetrics.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetrics.java
new file mode 100644
index 0000000..2d09fa5
--- /dev/null
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetrics.java
@@ -0,0 +1,20 @@
+package br.ufrgs.inf.prosoft.adaptivecaching.sampling.adaptation.metrics;
+
+public class LightweightMetrics {
+    private long occurrences;
+
+    public long incOccurrence() {
+        return occurrences++;
+    }
+
+    public long getOccurrences() {
+        return occurrences;
+    }
+
+    @Override
+    public String toString() {
+        return "{" +
+                "occurrences=" + occurrences +
+                '}';
+    }
+}
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/ResourceUsage.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/ResourceUsage.java
index 86e1cd3..60a132b 100644
--- a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/ResourceUsage.java
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/ResourceUsage.java
@@ -1,4 +1,4 @@
-package br.ufrgs.inf.prosoft.adaptivecaching.sampling;
+package br.ufrgs.inf.prosoft.adaptivecaching.sampling.adaptation;
 
 import javax.management.Attribute;
 import javax.management.AttributeList;
@@ -14,7 +14,7 @@ public class ResourceUsage {
         final long RAM_USED = RAM_TOTAL - RAM_FREE;
         final long RAM_TOTAL_MB = RAM_TOTAL / 1024 / 1024;
         final long RAM_FREE_MB = RAM_FREE  / 1024 / 1024;
-        final long RAM_USED_MB = ((double) RAM_USED) / 1024 / 1024;
+        final double RAM_USED_MB = (double) RAM_USED / 1024 / 1024;
         final double RAM_USED_PERCENTAGE = ((double) RAM_USED / RAM_TOTAL) * 100;
         return RAM_TOTAL_MB + "MB TOTAL / " + RAM_FREE_MB + "MB FREE / " + RAM_USED_MB + "MB USED (" + RAM_USED_PERCENTAGE + "%)";
     }

README.md 9(+5 -4)

diff --git a/README.md b/README.md
index 5732145..471bedc 100644
--- a/README.md
+++ b/README.md
@@ -28,10 +28,11 @@ Simulations were performed using three different caching configurations: (i) no 
 
 #### Required Tools
 
-- [Jmeter 3.3](http://jmeter.apache.org/)
-- MySQL
-- Java 8
-- Maven 3
+- [Jmeter 3.3](http://jmeter.apache.org/) - not tested with newer versions
+- Jmeter Plugins - install them when required after loading the workload scripts
+- MySQL 5.5 or newer
+- Java 8 - not tested with Java 9 or 10
+- Maven 3 or newer
 
 Applications
 ---------