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