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