add metrics websocket
All checks were successful
Deploy App / docker (ubuntu-latest, 2.44.0, 17, 3.8.5) (push) Successful in 1m55s
All checks were successful
Deploy App / docker (ubuntu-latest, 2.44.0, 17, 3.8.5) (push) Successful in 1m55s
This commit is contained in:
@ -0,0 +1,54 @@
|
||||
package xyz.mcutils.backend.websocket;
|
||||
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.web.socket.CloseStatus;
|
||||
import org.springframework.web.socket.TextMessage;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
import org.springframework.web.socket.handler.TextWebSocketHandler;
|
||||
import xyz.mcutils.backend.Main;
|
||||
import xyz.mcutils.backend.common.Timer;
|
||||
import xyz.mcutils.backend.model.metric.WebsocketMetrics;
|
||||
import xyz.mcutils.backend.service.MetricService;
|
||||
import xyz.mcutils.backend.service.metric.metrics.TotalRequestsMetric;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Log4j2(topic = "WebSocket/Metrics")
|
||||
public class MetricsWebSocketHandler extends TextWebSocketHandler {
|
||||
private final long interval = TimeUnit.SECONDS.toMillis(5);
|
||||
public final List<WebSocketSession> sessions = new ArrayList<>();
|
||||
|
||||
public MetricsWebSocketHandler(MetricService metricService) {
|
||||
Timer.scheduleRepeating(() -> {
|
||||
try {
|
||||
WebsocketMetrics metrics = new WebsocketMetrics(Map.of(
|
||||
"totalRequests", metricService.getMetric(TotalRequestsMetric.class).getValue())
|
||||
);
|
||||
|
||||
for (WebSocketSession session : sessions) {
|
||||
session.sendMessage(new TextMessage(Main.GSON.toJson(metrics)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("An error occurred while sending metrics to the client", e);
|
||||
}
|
||||
}, interval, interval);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterConnectionEstablished(WebSocketSession session) {
|
||||
log.info("WebSocket connection established with session id: {}", session.getId());
|
||||
|
||||
sessions.add(session);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterConnectionClosed(WebSocketSession session, @NotNull CloseStatus status) {
|
||||
log.info("WebSocket connection closed with session id: {}", session.getId());
|
||||
|
||||
sessions.remove(session);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user