adaptive-caching-framework
Changes
evaluation/applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java 5(+5 -0)
evaluation/applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java 5(+5 -0)
evaluation/applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java 10(+7 -3)
framework/autonomicmanager/pom.xml 2(+1 -1)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/support/Tracer.java 45(+0 -45)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/monitoring/application/aspects/TracerAspect.java 85(+29 -56)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/adaptivecaching/sampling/metrics/LightweightMetricAspect.java 143(+0 -143)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/adaptation/ResourceUsage.java 2(+1 -1)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/annotations/Criteria.java 2(+1 -1)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/annotations/TigrisConfiguration.java 24(+24 -0)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/metrics/DataFiltering.java 31(+2 -29)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/metrics/LightweightAnalyzer.java 43(+21 -22)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/metrics/LightweightMetrics.java 2(+1 -1)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/metrics/StaticMetrics.java 2(+1 -1)
framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/statistics/StatisticalTest.java 2(+1 -1)
Details
diff --git a/evaluation/applications/AP/CloudStore/pom.xml b/evaluation/applications/AP/CloudStore/pom.xml
index daff975..40730f8 100644
--- a/evaluation/applications/AP/CloudStore/pom.xml
+++ b/evaluation/applications/AP/CloudStore/pom.xml
@@ -185,7 +185,7 @@
<dependency>
<groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
<artifactId>autonomicmanager</artifactId>
- <version>0.6.0-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
diff --git a/evaluation/applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java b/evaluation/applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java
index cf4155e..d5f5355 100644
--- a/evaluation/applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java
+++ b/evaluation/applications/AP/CloudStore/src/main/java/eu/cloudscale/showcase/Configuration.java
@@ -5,10 +5,15 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.ComponentSc
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.CacheProviderType;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Modelling;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
+import br.ufrgs.inf.prosoft.tigrisframework.annotations.TigrisConfiguration;
@AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = false,
clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true, analyzeOnce = true, expiryInterval = 86400)
@ComponentScan(allowed = "eu.cloudscale.showcase", denied = {"eu.cloudscale.showcase.db.model", "eu.cloudscale.showcase.servlets", "eu.cloudscale.showcase.db.dao.hibernate"})
+@TigrisConfiguration(
+ samplingEnabled = true,
+ samplingPercentage = 5,
+ staticMetricFile = "/home/jhonnymertz/workspace/adaptive-caching-framework/understand/cloudstore.csv")
public class Configuration {
}
diff --git a/evaluation/applications/AP/shopizer/sm-shop/pom.xml b/evaluation/applications/AP/shopizer/sm-shop/pom.xml
index fd88587..dd50189 100755
--- a/evaluation/applications/AP/shopizer/sm-shop/pom.xml
+++ b/evaluation/applications/AP/shopizer/sm-shop/pom.xml
@@ -361,7 +361,7 @@
<dependency>
<groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
<artifactId>autonomicmanager</artifactId>
- <version>0.6.0-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</dependency>
<dependency>
diff --git a/evaluation/applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java b/evaluation/applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java
index 532b6aa..de4a333 100644
--- a/evaluation/applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java
+++ b/evaluation/applications/AP/shopizer/sm-shop/src/main/java/com/salesmanager/web/Configuration.java
@@ -5,6 +5,7 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.ComponentSc
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.CacheProviderType;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Modelling;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
+import br.ufrgs.inf.prosoft.tigrisframework.annotations.TigrisConfiguration;
@AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = true, traceAsync = false, tracerEnabled = true, analyzeOnce = true)
@@ -12,5 +13,9 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Repos
"com.salesmanager.web.utils.BreadcrumbsUtils.buildProductBreadcrumb",
"com.salesmanager.web.utils.BreadcrumbsUtils.buildCategoryBreadcrumb",
"com.salesmanager.web.filter.AdminFilter"})
+@TigrisConfiguration(
+ samplingEnabled = true,
+ samplingPercentage = 100,
+ staticMetricFile = "/home/jhonnymertz/workspace/adaptive-caching-framework/understand/shopizer.csv")
public class Configuration {
}
diff --git a/evaluation/applications/AP/spring-petclinic/pom.xml b/evaluation/applications/AP/spring-petclinic/pom.xml
index 7974415..519ece2 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.6.0-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
diff --git a/evaluation/applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java b/evaluation/applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java
index cd3eda3..bfb6eb0 100644
--- a/evaluation/applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java
+++ b/evaluation/applications/AP/spring-petclinic/src/main/java/org/springframework/samples/petclinic/Configuration.java
@@ -5,13 +5,17 @@ import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.ComponentSc
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.CacheProviderType;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Modelling;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
-import br.ufrgs.inf.prosoft.adaptivecaching.sampling.annotations.Criteria;
+import br.ufrgs.inf.prosoft.tigrisframework.annotations.Criteria;
+import br.ufrgs.inf.prosoft.tigrisframework.annotations.TigrisConfiguration;
@AdaptiveCaching(cacheProvider = CacheProviderType.EHCACHE, logRepository = RepositoryType.MEMORY,
modelling = Modelling.FULLEXPLORATION, analyzerEnabled = true, enabled = true, disableMonitoringAfterAnalysis = false,
clearMonitoringDataOnStart = true, traceAsync = false, tracerEnabled = true, analyzeOnce = true, expiryInterval = 60)
-
-@Criteria("more frequent I more expensive")
+@TigrisConfiguration(
+ samplingEnabled = true,
+ samplingPercentage = 5,
+ staticMetricFile = "/home/jhonnymertz/workspace/adaptive-caching-framework/understand/petclinic.csv")
+@Criteria("more frequent OR more expensive")
//Jhonny: workaround below. a better solution involve filter by serialization methods in aspect to avoid it
@ComponentScan(allowed = "org.springframework.samples.petclinic", denied = "org.springframework.samples.petclinic.model")
public class Configuration {
framework/autonomicmanager/pom.xml 2(+1 -1)
diff --git a/framework/autonomicmanager/pom.xml b/framework/autonomicmanager/pom.xml
index 1af3d54..bbdf139 100644
--- a/framework/autonomicmanager/pom.xml
+++ b/framework/autonomicmanager/pom.xml
@@ -6,7 +6,7 @@
<groupId>br.ufrgs.inf.prosoft.adaptivecaching</groupId>
<artifactId>autonomicmanager</artifactId>
- <version>0.6.0-SNAPSHOT</version>
+ <version>0.7.0-SNAPSHOT</version>
<properties>
<aspectj.version>1.8.10</aspectj.version>
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 5c12a4c..9a9ae42 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
@@ -4,7 +4,6 @@ import br.ufrgs.inf.prosoft.adaptivecaching.analysis.Analyzer;
import br.ufrgs.inf.prosoft.adaptivecaching.analysis.decision.flowchart.model.MethodEntry;
import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.cacher.AdaptiveMethodCacher;
import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.cacher.key.Key;
-import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.model.ValueWrapper;
import br.ufrgs.inf.prosoft.adaptivecaching.cachemanager.util.threads.NamedThreads;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.AdaptiveCaching;
import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.ComponentScan;
@@ -20,11 +19,9 @@ 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.Repository;
import br.ufrgs.inf.prosoft.adaptivecaching.monitoring.storage.RepositoryFactory;
-import br.ufrgs.inf.prosoft.adaptivecaching.sampling.metrics.LightweightAnalyzer;
-import br.ufrgs.inf.prosoft.adaptivecaching.sampling.metrics.LightweightMetricAspect;
-import br.ufrgs.inf.prosoft.adaptivecaching.sampling.metrics.LightweightMetrics;
-import br.ufrgs.inf.prosoft.adaptivecaching.sampling.metrics.StaticMetrics;
-import org.apache.commons.math3.stat.descriptive.SummaryStatistics;
+import br.ufrgs.inf.prosoft.tigrisframework.metrics.LightweightAnalyzer;
+import br.ufrgs.inf.prosoft.tigrisframework.metrics.LightweightMetrics;
+import br.ufrgs.inf.prosoft.tigrisframework.annotations.TigrisConfiguration;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@@ -40,11 +37,7 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentSkipListSet;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
import static java.lang.System.currentTimeMillis;
@@ -67,21 +60,10 @@ public class TracerAspect {
*/
public static boolean enabled = true;
public static boolean tracerEnabled = true;
- public static boolean samplingEnabled = true;
- public static int samplingPercentage = 50;
public static boolean analyzerEnabled = true;
public static boolean lightweightTracerEnabled = true;
public static boolean lightweightAnayzerEnabled = true;
-// public static String staticFile = "/home/jhonnymertz/workspace/adaptive-caching-framework/understand/petclinic.csv";
-// public static String staticFile = "/home/jhonnymertz/workspace/adaptive-caching-framework/understand/cloudstore.csv";
- public static String staticFile = "/home/jhonnymertz/workspace/adaptive-caching-framework/understand/shopizer.csv";
-
-
-// public static SummaryStatistics timeToLightweightTrace = new SummaryStatistics();
-// public static SummaryStatistics timeToStatefulTrace = new SummaryStatistics();
-// public static SummaryStatistics timeToCheckAllowedTrace = new SummaryStatistics();
-
public static Map<String, Boolean> traceMethods = null;
private final ScheduledExecutorService analyzerExecutor = Executors.newSingleThreadScheduledExecutor(new NamedThreads(
@@ -109,6 +91,10 @@ public class TracerAspect {
private Repository repository;
private Repository repositoryMongo;
+ //tigris config
+ private TigrisConfiguration tigrisConfiguration;
+ public static String staticFile;
+
public static Map<String, LightweightMetrics> metrics;
@Pointcut(
@@ -144,14 +130,28 @@ public class TracerAspect {
return;
}
+ tigrisConfiguration = configClass.getAnnotation(TigrisConfiguration.class);
+ logger.info("TigrisConfiguration found, loading options...");
+
+ if (!tigrisConfiguration.enabled()) {
+ turnoff();
+ logger.info("Tigris disabled manually on @TigrisConfiguration.");
+ return;
+ }
+
+ staticFile = tigrisConfiguration.staticMetricFile();
+
+ //TODO getting criteria DSL
+// Criteria criteria = configClass.getAnnotation(Criteria.class);
+// criteriaDSL = criteria.value();
+
+
//getting allowed packages from @ComponentScan
ComponentScan componentScanConfig = configClass.getAnnotation(ComponentScan.class);
if (componentScanConfig == null) {
//if not specified, it assumes the same package where @AdaptiveCaching were declared
allowed = new String[]{configClass.getPackage().getName()};
- //logger.error("ComponenScan for AdaptiveCaching not found, adaptive caching disabled.");
- //enabled = false;
- //return;
+ logger.info("ComponenScan for AdaptiveCaching not found, assuming the same package where @AdaptiveCaching were declared.");
}
allowed = componentScanConfig.allowed();
notAllowed = componentScanConfig.denied();
@@ -243,18 +243,12 @@ public class TracerAspect {
//DEBUG: see if a method is being caught
//DEBUG: traceSpecificMethod(joinPoint);
-// long timeToCheckAllowed = currentTimeMillis();
-
- if (!isAllowed(joinPoint))
+ if (!enabled || !isAllowed(joinPoint))
return joinPoint.proceed();
boolean detailedTrace = (!lightweightTracerEnabled ||
(lightweightTracerEnabled && LightweightAnalyzer.allowedFineGrained
.contains(joinPoint.getSignature().toLongString())));
-// boolean detailedTrace = (LightweightAnalyzer.allowedFineGrained
-// .contains(joinPoint.getSignature().toLongString()));
-
-// timeToCheckAllowedTrace.addValue(currentTimeMillis() - timeToCheckAllowed);
boolean cacheable = false;
Key key = null;
@@ -281,24 +275,9 @@ public class TracerAspect {
return result;
}
-// private int samplingIndex = 0;
-// private boolean shouldBeSampled() {
-// if(!samplingEnabled)
-// return true;
-//
-//// if((rand.nextInt(10) + 1) > samplingChance)
-//// return true;
-//// synchronized (this){
-// samplingIndex++;
-// if ((samplingIndex % samplingEach) == 0)
-// return true;
-// else return false;
-//// }
-// }
-
private Random rand = new Random();
private boolean shouldBeSampled() {
- return !samplingEnabled || ((rand.nextInt(100) + 1) > (100 - samplingPercentage));
+ return !tigrisConfiguration.samplingEnabled() || ((rand.nextInt(100) + 1) > (100 - tigrisConfiguration.samplingPercentage()));
}
private boolean isAllowed(ProceedingJoinPoint joinPoint) throws Throwable {
@@ -349,7 +328,6 @@ public class TracerAspect {
String user = userGetter.getCurrentUser();
if(lightweightTracerEnabled) {
-// long timeToLightTrace = currentTimeMillis();
LightweightMetrics metric = metrics.get(signature);
if (metric != null)
metric.incOccurrence();
@@ -364,16 +342,14 @@ public class TracerAspect {
metric.addTime(startTime, endTime - startTime);
metric.addReturnSize(result);
metric.addUser(user);
-// timeToLightweightTrace.addValue(currentTimeMillis() - timeToLightTrace);
}
//trace only allowed by lightweight metrics
if(tracerEnabled
&& detailedTrace
&& shouldBeSampled()) {
-// System.out.println("New trace: " + signature + LightweightAnalyzer.allowedFineGrained
-// .contains(joinPoint.getSignature().toLongString()));
-// long timeToTrace = currentTimeMillis();
+ logger.debug("New trace: " + signature + LightweightAnalyzer.allowedFineGrained
+ .contains(joinPoint.getSignature().toLongString()));
//we do not cache null returns, but we trace them
//maybe the method can sometimes return null... so there is not verification here
@@ -398,7 +374,6 @@ public class TracerAspect {
logger.debug("Adding " + logTrace.getMethodInfo().getSignature() + " to blacklist");
TracerAspect.methodBlackList.add(logTrace.getMethodInfo().getSignature());
}
-// timeToStatefulTrace.addValue(currentTimeMillis() - timeToTrace);
}
return result;
@@ -429,8 +404,6 @@ public class TracerAspect {
private Properties getPropertiesFile() throws IOException {
Properties properties = new Properties();
- //file location:
- //System.out.println(getClass().getClassLoader().getResource("adaptivecaching.properties").getPath());
properties.load(getClass().getClassLoader().getResourceAsStream("adaptivecaching.properties"));
return properties;
}
diff --git a/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/annotations/TigrisConfiguration.java b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/annotations/TigrisConfiguration.java
new file mode 100644
index 0000000..d77bd88
--- /dev/null
+++ b/framework/autonomicmanager/src/main/java/br/ufrgs/inf/prosoft/tigrisframework/annotations/TigrisConfiguration.java
@@ -0,0 +1,24 @@
+package br.ufrgs.inf.prosoft.tigrisframework.annotations;
+
+import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.CacheProviderType;
+import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.Modelling;
+import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.RepositoryType;
+import br.ufrgs.inf.prosoft.adaptivecaching.configuration.annotation.types.TriggerType;
+
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Documented
+public @interface TigrisConfiguration {
+
+ //enabling configurations
+ boolean enabled() default true;
+ boolean coarseMonitoringEnabled() default true;
+ boolean fineMonitoringEnabled() default true;
+ boolean samplingEnabled() default true;
+ int samplingPercentage() default 50;
+
+ String staticMetricFile();
+
+}
diff --git a/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/StaticMetricsTest.java b/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/StaticMetricsTest.java
index 70a4e26..0f7e98f 100644
--- a/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/StaticMetricsTest.java
+++ b/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/StaticMetricsTest.java
@@ -1,6 +1,6 @@
package br.ufrgs.inf.prosoft.sampling;
-import br.ufrgs.inf.prosoft.adaptivecaching.sampling.metrics.StaticMetrics;
+import br.ufrgs.inf.prosoft.tigrisframework.metrics.StaticMetrics;
import org.junit.Test;
import java.io.IOException;
diff --git a/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/Statistics.java b/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/Statistics.java
index b2d4956..0d7db9b 100644
--- a/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/Statistics.java
+++ b/framework/autonomicmanager/src/test/java/br/ufrgs/inf/prosoft/sampling/Statistics.java
@@ -1,6 +1,6 @@
package br.ufrgs.inf.prosoft.sampling;
-import br.ufrgs.inf.prosoft.adaptivecaching.sampling.statistics.StatisticalTest;
+import br.ufrgs.inf.prosoft.tigrisframework.statistics.StatisticalTest;
import org.apache.commons.math3.random.EmpiricalDistribution;
import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
import org.junit.Assert;