View Javadoc

1   package com.atlassian.vcache.internal.core.metrics;
2   
3   import com.atlassian.vcache.internal.LongMetric;
4   import com.atlassian.vcache.internal.MetricLabel;
5   import com.atlassian.vcache.internal.RequestMetrics;
6   
7   import java.util.Collections;
8   import java.util.EnumMap;
9   import java.util.HashMap;
10  import java.util.Map;
11  import java.util.concurrent.ConcurrentHashMap;
12  
13  /**
14   * Default implementation of {@link RequestMetrics}.
15   *
16   * @since 1.0.0
17   */
18  class DefaultRequestMetrics implements MutableRequestMetrics, RequestMetrics {
19      private final Map<CacheType, Map<String, Map<MetricLabel, DefaultLongMetric>>> allMetricsMap =
20              Collections.synchronizedMap(new EnumMap<>(CacheType.class));
21  
22      @Override
23      public void record(String cacheName, CacheType cacheType, MetricLabel metricLabel, long sample) {
24          final Map<String, Map<MetricLabel, DefaultLongMetric>> cacheTypeMetricsMap =
25                  allMetricsMap.computeIfAbsent(cacheType, k -> new ConcurrentHashMap<>());
26  
27          final Map<MetricLabel, DefaultLongMetric> cacheMetricsMap =
28                  cacheTypeMetricsMap.computeIfAbsent(cacheName, k -> Collections.synchronizedMap(new EnumMap<>(MetricLabel.class)));
29  
30          final DefaultLongMetric metric = cacheMetricsMap.computeIfAbsent(metricLabel, k -> new DefaultLongMetric());
31          metric.record(sample);
32      }
33  
34      @Override
35      @SuppressWarnings("unchecked")
36      public Map<String, Map<MetricLabel, ? extends LongMetric>> allJvmCacheLongMetrics() {
37          return new HashMap(allMetricsMap.computeIfAbsent(CacheType.JVM, k -> new ConcurrentHashMap<>()));
38      }
39  
40      @Override
41      @SuppressWarnings("unchecked")
42      public Map<String, Map<MetricLabel, ? extends LongMetric>> allRequestCacheLongMetrics() {
43          return new HashMap(allMetricsMap.computeIfAbsent(CacheType.REQUEST, k -> new ConcurrentHashMap<>()));
44      }
45  
46      @Override
47      @SuppressWarnings("unchecked")
48      public Map<String, Map<MetricLabel, ? extends LongMetric>> allExternalCacheLongMetrics() {
49          return new HashMap(allMetricsMap.computeIfAbsent(CacheType.EXTERNAL, k -> new ConcurrentHashMap<>()));
50      }
51  }