Added metric 'roompicker_picks_1s'

This commit is contained in:
Andrey Terentev 2024-03-15 15:15:25 +07:00 committed by Andrey Terentev
parent baab0e8636
commit 0722615815

View File

@ -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<String, Gauge> nodeGauges = new ConcurrentHashMap<>();
private final Map<String, Integer> nodeUsers = new ConcurrentHashMap<>();
private final Map<String, Counter> 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());