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
14
15
16
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 }