cache

Details

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);
+        }
+    }
 }