View Javadoc

1   package com.atlassian.vcache.internal.core.metrics;
2   
3   import com.atlassian.vcache.PutPolicy;
4   import com.atlassian.vcache.TransactionalExternalCache;
5   
6   import static com.atlassian.vcache.internal.MetricLabel.TIMED_PUT_CALL;
7   import static com.atlassian.vcache.internal.MetricLabel.TIMED_REMOVE_ALL_CALL;
8   import static com.atlassian.vcache.internal.MetricLabel.TIMED_REMOVE_CALL;
9   import static com.atlassian.vcache.internal.core.metrics.CacheType.EXTERNAL;
10  import static java.util.Objects.requireNonNull;
11  
12  /**
13   * Wrapper for a {@link TransactionalExternalCache} that records metrics.
14   *
15   * @param <V> the value type
16   * @since 1.0.0
17   */
18  class TimedTransactionalExternalCache<V>
19          extends TimedExternalCache<V>
20          implements TransactionalExternalCache<V> {
21      private final TransactionalExternalCache<V> delegate;
22  
23      TimedTransactionalExternalCache(MetricsRecorder metricsRecorder, TransactionalExternalCache<V> delegate) {
24          super(metricsRecorder);
25          this.delegate = requireNonNull(delegate);
26      }
27  
28      @Override
29      protected TransactionalExternalCache<V> getDelegate() {
30          return delegate;
31      }
32  
33      @Override
34      public void put(String key, V value, PutPolicy policy) {
35          try (ElapsedTimer ignored = new ElapsedTimer(
36                  t -> metricsRecorder.record(getDelegate().getName(), EXTERNAL, TIMED_PUT_CALL, t))) {
37              getDelegate().put(key, value, policy);
38          }
39      }
40  
41      @Override
42      public void remove(Iterable<String> keys) {
43          try (ElapsedTimer ignored = new ElapsedTimer(
44                  t -> metricsRecorder.record(getDelegate().getName(), EXTERNAL, TIMED_REMOVE_CALL, t))) {
45              getDelegate().remove(keys);
46          }
47      }
48  
49      @Override
50      public void removeAll() {
51          try (ElapsedTimer ignored = new ElapsedTimer(
52                  t -> metricsRecorder.record(getDelegate().getName(), EXTERNAL, TIMED_REMOVE_ALL_CALL, t))) {
53              getDelegate().removeAll();
54          }
55      }
56  }