diff --git a/src/main/java/br/ufrgs/inf/prosoft/cache/MultiCache.java b/src/main/java/br/ufrgs/inf/prosoft/cache/MultiCache.java
index 20d22c0..719aac9 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/cache/MultiCache.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/cache/MultiCache.java
@@ -24,6 +24,7 @@ import java.util.stream.Collectors;
*/
public class MultiCache<K, V> implements Cache<K, V> {
+ private static final String CACHE_EVENTS = System.getenv("CACHE_EVENTS") != null ? System.getenv("CACHE_EVENTS") : null;
private static final boolean CACHE_REGISTER_SIZE = System.getenv("CACHE_REGISTER_SIZE") != null && System.getenv("CACHE_REGISTER_SIZE").equals("true");
private final HashMap<K, V> map;
private final ConcurrentHashMap<Optional<K>, Long> keyHasTTL;
@@ -66,29 +67,18 @@ public class MultiCache<K, V> implements Cache<K, V> {
public void put(K key, V value) {
invalidate(key);
this.map.put(key, value);
- String identifier = getIdentifier(value);
- if (CACHE_REGISTER_SIZE) {
- this.cachePerformance.registerEvent(EventType.ADDITION, identifier, CachePerformance.calculateObjectSize(value));
- } else {
- this.cachePerformance.registerEvent(EventType.ADDITION, identifier);
- }
+ registerEvent(EventType.ADDITION, value);
this.cachePerformance.registerSize(this.map.size());
}
@Override
public V get(K key) throws KeyNotFoundException {
if (!containsKey(key)) {
- String identifier = getIdentifier(key);
- this.cachePerformance.registerEvent(EventType.MISS, identifier);
+ registerEvent(EventType.MISS, key);
throw new KeyNotFoundException();
}
V get = this.map.get(key);
- String identifier = getIdentifier(get);
- if (CACHE_REGISTER_SIZE) {
- this.cachePerformance.registerEvent(EventType.HIT, identifier, CachePerformance.calculateObjectSize(get));
- } else {
- this.cachePerformance.registerEvent(EventType.HIT, identifier);
- }
+ registerEvent(EventType.HIT, get);
return get;
}
@@ -97,12 +87,7 @@ public class MultiCache<K, V> implements Cache<K, V> {
this.keyHasTTL.remove(Optional.ofNullable(key));
if (this.map.containsKey(key)) {
V remove = this.map.remove(key);
- String identifier = getIdentifier(remove);
- if (CACHE_REGISTER_SIZE) {
- this.cachePerformance.registerEvent(EventType.INVALIDATION, identifier, CachePerformance.calculateObjectSize(remove));
- } else {
- this.cachePerformance.registerEvent(EventType.INVALIDATION, identifier);
- }
+ registerEvent(EventType.INVALIDATION, remove);
}
}
@@ -121,12 +106,7 @@ public class MultiCache<K, V> implements Cache<K, V> {
toMap(entry -> entry.getKey(), entry -> entry.getValue())
).entrySet();
entrySet.forEach(entry -> {
- String identifier = getIdentifier(entry.getValue());
- if (CACHE_REGISTER_SIZE) {
- this.cachePerformance.registerEvent(EventType.HIT, identifier, CachePerformance.calculateObjectSize(entry.getValue()));
- } else {
- this.cachePerformance.registerEvent(EventType.HIT, identifier);
- }
+ registerEvent(EventType.HIT, entry.getValue());
});
return entrySet;
}
@@ -137,12 +117,7 @@ public class MultiCache<K, V> implements Cache<K, V> {
.map(entry -> entry.getValue())
.collect(Collectors.toList());
values.forEach(get -> {
- String identifier = getIdentifier(get);
- if (CACHE_REGISTER_SIZE) {
- this.cachePerformance.registerEvent(EventType.HIT, identifier, CachePerformance.calculateObjectSize(get));
- } else {
- this.cachePerformance.registerEvent(EventType.HIT, identifier);
- }
+ registerEvent(EventType.HIT, get);
});
return values;
}
@@ -154,4 +129,16 @@ public class MultiCache<K, V> implements Cache<K, V> {
private String getIdentifier(Object object) {
return object != null ? String.valueOf(object.hashCode()) : "null";
}
+
+ private void registerEvent(EventType eventType, Object object) {
+ if (CACHE_EVENTS == null) {
+ return;
+ }
+ String identifier = getIdentifier(object);
+ if (CACHE_REGISTER_SIZE) {
+ this.cachePerformance.registerEvent(eventType, identifier, CachePerformance.calculateObjectSize(object));
+ } else {
+ this.cachePerformance.registerEvent(eventType, identifier);
+ }
+ }
}