View Javadoc

1   package com.atlassian.vcache.internal.core.metrics;
2   
3   import com.atlassian.vcache.JvmCache;
4   import com.atlassian.vcache.internal.MetricLabel;
5   
6   import java.util.Set;
7   
8   import static java.util.Objects.requireNonNull;
9   
10  /**
11   * Wrapper for a {@link JvmCache} that records metrics.
12   *
13   * @param <K> the key type
14   * @param <V> the value type
15   * @since 1.0.0
16   */
17  class TimedJvmCache<K, V>
18          extends TimedLocalCacheOperations<K, V>
19          implements JvmCache<K, V> {
20      private final JvmCache<K, V> delegate;
21  
22      TimedJvmCache(JvmCache<K, V> delegate, MetricsRecorder metricsRecorder) {
23          super(delegate.getName(), CacheType.JVM, metricsRecorder);
24          this.delegate = requireNonNull(delegate);
25      }
26  
27      @Override
28      protected JvmCache<K, V> getDelegate() {
29          return delegate;
30      }
31  
32      @Override
33      public Set<K> getKeys() {
34          try (ElapsedTimer ignored = new ElapsedTimer(
35                  t -> metricsRecorder.record(cacheName, cacheType, MetricLabel.TIMED_GET_KEYS_CALL, t))) {
36              return delegate.getKeys();
37          }
38      }
39  
40      @Override
41      public String getName() {
42          return delegate.getName();
43      }
44  }