1 package io.getunleash.metric;
2
3 import io.getunleash.lang.Nullable;
4 import java.time.LocalDateTime;
5 import java.time.ZoneId;
6 import java.util.Map;
7 import java.util.concurrent.ConcurrentHashMap;
8 import java.util.concurrent.ConcurrentMap;
9
10 class MetricsBucket {
11     private final ConcurrentMap<String, ToggleCount> toggles;
12     private final LocalDateTime start;
13     @Nullable private volatile LocalDateTime stop;
14
15     MetricsBucket() {
16         this.start = LocalDateTime.now(ZoneId.of("UTC"));
17         this.toggles = new ConcurrentHashMap<>();
18     }
19
20     void registerCount(String toggleName, boolean active) {
21         getOrCreate(toggleName).register(active);
22     }
23
24     void registerCount(String toggleName, String variantName) {
25         getOrCreate(toggleName).register(variantName);
26     }
27
28     private ToggleCount getOrCreate(String toggleName) {
29         return toggles.computeIfAbsent(toggleName, s -> new ToggleCount());
30     }
31
32     void end() {
33         this.stop = LocalDateTime.now(ZoneId.of("UTC"));
34     }
35
36     public Map<String, ToggleCount> getToggles() {
37         return toggles;
38     }
39
40     public LocalDateTime getStart() {
41         return start;
42     }
43
44     public @Nullable LocalDateTime getStop() {
45         return stop;
46     }
47 }
48