adaptive-caching-framework
Changes
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/analysis/Analyzer.java 5(+5 -0)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java 2(+1 -1)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetricAspect.java 44(+44 -0)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/metrics/LightweightMetrics.java 20(+20 -0)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/adaptation/ResourceUsage.java 4(+2 -2)
README.md 9(+5 -4)
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
---------