Added UserMetricsAspect
This commit is contained in:
parent
3faa88734d
commit
4817e5e395
@ -7,6 +7,8 @@ import io.swagger.v3.oas.annotations.info.License;
|
|||||||
import io.swagger.v3.oas.annotations.servers.Server;
|
import io.swagger.v3.oas.annotations.servers.Server;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
|
||||||
@OpenAPIDefinition(
|
@OpenAPIDefinition(
|
||||||
info = @Info(
|
info = @Info(
|
||||||
@ -24,6 +26,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
|
@EnableAspectJAutoProxy
|
||||||
|
@EnableScheduling
|
||||||
public class LoadBalancerApplication {
|
public class LoadBalancerApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|||||||
@ -0,0 +1,45 @@
|
|||||||
|
package ru.dragonestia.picker.aspect;
|
||||||
|
|
||||||
|
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.Aspect;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.dragonestia.picker.repository.UserRepository;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Aspect
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Log4j2
|
||||||
|
public class UserMetricsAspect {
|
||||||
|
|
||||||
|
private final UserRepository userRepository;
|
||||||
|
private final MeterRegistry meterRegistry;
|
||||||
|
|
||||||
|
private final AtomicInteger totalUsers = new AtomicInteger(0);
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
void init() {
|
||||||
|
meterRegistry.gauge("roompicker_total_users", totalUsers);
|
||||||
|
}
|
||||||
|
|
||||||
|
@After("execution(void ru.dragonestia.picker.repository.UserRepository.linkWithRoom(..))")
|
||||||
|
void onLinkUsers() {
|
||||||
|
totalUsers.set(userRepository.countAllUsers());
|
||||||
|
}
|
||||||
|
|
||||||
|
@After("execution(void ru.dragonestia.picker.repository.UserRepository.unlinkWithRoom(..))")
|
||||||
|
void onUnlinkUsers() {
|
||||||
|
totalUsers.set(userRepository.countAllUsers());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Scheduled(fixedDelay = 3_000)
|
||||||
|
void updateUserMetrics() {
|
||||||
|
// TODO: metrics for userRepository.countUsersForNodes()
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -12,7 +12,7 @@ public interface UserRepository {
|
|||||||
|
|
||||||
Map<User, Boolean> linkWithRoom(Room room, Collection<User> users, boolean force) throws RoomAreFullException;
|
Map<User, Boolean> linkWithRoom(Room room, Collection<User> users, boolean force) throws RoomAreFullException;
|
||||||
|
|
||||||
int unlinkWithRoom(Room room, Collection<User> users);
|
void unlinkWithRoom(Room room, Collection<User> users);
|
||||||
|
|
||||||
List<Room> findAllLinkedUserRooms(User user);
|
List<Room> findAllLinkedUserRooms(User user);
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ public class UserRepositoryImpl implements UserRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int unlinkWithRoom(Room room, Collection<User> users) {
|
public void unlinkWithRoom(Room room, Collection<User> users) {
|
||||||
var counter = new AtomicInteger();
|
var counter = new AtomicInteger();
|
||||||
|
|
||||||
lock.writeLock().lock();
|
lock.writeLock().lock();
|
||||||
@ -98,7 +98,7 @@ public class UserRepositoryImpl implements UserRepository {
|
|||||||
} finally {
|
} finally {
|
||||||
lock.writeLock().unlock();
|
lock.writeLock().unlock();
|
||||||
}
|
}
|
||||||
return counter.get();
|
counter.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user