From 07226158157e05f817697076aec8029490633b50 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Fri, 15 Mar 2024 15:15:25 +0700 Subject: [PATCH] Added metric 'roompicker_picks_1s' --- .../picker/aspect/UserMetricsAspect.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java b/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java index deba0e9..9acfe4a 100644 --- a/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java +++ b/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java @@ -1,11 +1,13 @@ package ru.dragonestia.picker.aspect; +import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -28,6 +30,7 @@ public class UserMetricsAspect { private final AtomicInteger totalUsers = new AtomicInteger(0); private final Map nodeGauges = new ConcurrentHashMap<>(); private final Map nodeUsers = new ConcurrentHashMap<>(); + private final Map pickPerMinute = new ConcurrentHashMap<>(); @PostConstruct void init() { @@ -56,14 +59,26 @@ public class UserMetricsAspect { .register(meterRegistry); nodeGauges.put(nodeId, gauge); + + var counter = Counter.builder("roompicker_picks") + .tag("nodeId", nodeId) + .baseUnit("1s") + .register(meterRegistry); + pickPerMinute.put(nodeId, counter); } @After(value = "execution(* ru.dragonestia.picker.repository.NodeRepository.delete(ru.dragonestia.picker.model.Node)) && args(node)", argNames = "node") void onDeleteNode(Node node) { meterRegistry.remove(nodeGauges.remove(node.getIdentifier())); + meterRegistry.remove(pickPerMinute.remove(node.getIdentifier())); nodeUsers.remove(node.getIdentifier()); } + @AfterReturning(value = "execution(* ru.dragonestia.picker.repository.RoomRepository.pickFree(ru.dragonestia.picker.model.Node, *)) && args(node, ..)", argNames = "node") + void onPickRoom(Node node) { + pickPerMinute.get(node.getIdentifier()).increment(); + } + @Scheduled(fixedDelay = 3_000) void updateUserMetrics() { nodeUsers.putAll(userRepository.countUsersForNodes());