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
12
13
14
15
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 }