1 package com.atlassian.vcache.internal.core.metrics;
2
3 import com.atlassian.vcache.internal.core.TransactionControl;
4
5 import static com.atlassian.vcache.internal.MetricLabel.TIMED_TRANSACTION_DISCARD_CALL;
6 import static com.atlassian.vcache.internal.MetricLabel.TIMED_TRANSACTION_SYNC_CALL;
7 import static java.util.Objects.requireNonNull;
8
9
10
11
12
13
14 class TimedTransactionControl implements TransactionControl {
15 private final TransactionControl delegate;
16 private final MetricsRecorder metricsRecorder;
17 private final String cacheName;
18
19 TimedTransactionControl(TransactionControl delegate, MetricsRecorder metricsRecorder, String cacheName) {
20 this.delegate = requireNonNull(delegate);
21 this.metricsRecorder = requireNonNull(metricsRecorder);
22 this.cacheName = requireNonNull(cacheName);
23 }
24
25 @Override
26 public void transactionSync() {
27 try (ElapsedTimer ignored = new ElapsedTimer(
28 t -> metricsRecorder.record(cacheName, CacheType.EXTERNAL, TIMED_TRANSACTION_SYNC_CALL, t))) {
29 delegate.transactionSync();
30 }
31 }
32
33 @Override
34 public boolean transactionDiscard() {
35 try (ElapsedTimer ignored = new ElapsedTimer(
36 t -> metricsRecorder.record(cacheName, CacheType.EXTERNAL, TIMED_TRANSACTION_DISCARD_CALL, t))) {
37 return delegate.transactionDiscard();
38 }
39 }
40 }