1 package com.atlassian.vcache.internal.core.metrics;
2
3 import com.atlassian.vcache.internal.MetricLabel;
4 import com.atlassian.vcache.internal.RequestContext;
5
6 import java.util.function.Predicate;
7 import java.util.function.Supplier;
8
9 import static java.util.Objects.requireNonNull;
10
11
12
13
14
15
16 public class SamplingMetricsCollector extends DefaultMetricsCollector {
17
18 private static final NoOpRequestMetrics NOOP_REQUEST_METRICS = new NoOpRequestMetrics();
19
20 private final Predicate<RequestContext> collectMetrics;
21
22 public SamplingMetricsCollector(
23 Supplier<RequestContext> contextSupplier,
24 Predicate<RequestContext> collectMetrics) {
25 super(contextSupplier);
26 this.collectMetrics = requireNonNull(collectMetrics);
27 }
28
29 @Override
30 protected MutableRequestMetrics obtainMetrics(RequestContext context) {
31 return context.computeIfAbsent(this, () ->
32 collectMetrics.test(context) ? new DefaultRequestMetrics() : NOOP_REQUEST_METRICS);
33 }
34
35 private static class NoOpRequestMetrics extends EmptyRequestMetrics implements MutableRequestMetrics {
36 @Override
37 public void record(String cacheName, CacheType cacheType, MetricLabel metricLabel, long sample) {
38
39 }
40 }
41 }