View Javadoc

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   * Wrapper for a {@link TransactionControl} that records metrics.
11   *
12   * @since 1.0.0
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  }