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
13
14
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 }