send metrics when connecting to the websocket
All checks were successful
Deploy App / docker (ubuntu-latest, 2.44.0, 17, 3.8.5) (push) Successful in 1m44s

This commit is contained in:
Lee 2024-04-18 01:04:25 +01:00
parent c5758d38e0
commit 9fd84f2e5b

View File

@ -19,29 +19,42 @@ import java.util.concurrent.TimeUnit;
@Log4j2(topic = "WebSocket/Metrics")
public class MetricsWebSocketHandler extends TextWebSocketHandler {
private final long interval = TimeUnit.SECONDS.toMillis(5);
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())
);
private final MetricService metricService;
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);
public MetricsWebSocketHandler(MetricService metricService) {
this.metricService = metricService;
Timer.scheduleRepeating(() -> {
for (WebSocketSession session : sessions) {
sendMetrics(session);
}
}, interval, interval);
}
/**
* Sends the metrics to the client.
*
* @param session the session to send the metrics to
*/
private void sendMetrics(WebSocketSession session) {
try {
WebsocketMetrics metrics = new WebsocketMetrics(Map.of(
"totalRequests", metricService.getMetric(TotalRequestsMetric.class).getValue())
);
session.sendMessage(new TextMessage(Main.GSON.toJson(metrics)));
} catch (Exception e) {
log.error("An error occurred while sending metrics to the client", e);
}
}
@Override
public void afterConnectionEstablished(WebSocketSession session) {
log.info("WebSocket connection established with session id: {}", session.getId());
sendMetrics(session);
sessions.add(session);
}