cleanup metrics websocket
This commit is contained in:
src/main/java/xyz/mcutils/backend
@ -0,0 +1,49 @@
|
||||
package xyz.mcutils.backend.websocket.impl;
|
||||
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.web.socket.TextMessage;
|
||||
import org.springframework.web.socket.WebSocketSession;
|
||||
import xyz.mcutils.backend.Main;
|
||||
import xyz.mcutils.backend.common.Timer;
|
||||
import xyz.mcutils.backend.service.MetricService;
|
||||
import xyz.mcutils.backend.service.metric.metrics.TotalRequestsMetric;
|
||||
import xyz.mcutils.backend.service.metric.metrics.UniquePlayerLookupsMetric;
|
||||
import xyz.mcutils.backend.service.metric.metrics.UniqueServerLookupsMetric;
|
||||
import xyz.mcutils.backend.websocket.WebSocket;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Log4j2(topic = "WebSocket/Metrics")
|
||||
public class MetricsWebSocket extends WebSocket {
|
||||
private final long interval = TimeUnit.SECONDS.toMillis(5);
|
||||
private final MetricService metricService;
|
||||
|
||||
public MetricsWebSocket(MetricService metricService) {
|
||||
super("/websocket/metrics");
|
||||
this.metricService = metricService;
|
||||
|
||||
Timer.scheduleRepeating(() -> {
|
||||
for (WebSocketSession session : this.getSessions()) {
|
||||
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 {
|
||||
session.sendMessage(new TextMessage(Main.GSON.toJson(Map.of(
|
||||
"totalRequests", metricService.getMetric(TotalRequestsMetric.class).getValue(),
|
||||
"uniqueServerLookups", metricService.getMetric(UniqueServerLookupsMetric.class).getValue(),
|
||||
"uniquePlayerLookups", metricService.getMetric(UniquePlayerLookupsMetric.class).getValue()
|
||||
))));
|
||||
} catch (Exception e) {
|
||||
log.error("An error occurred while sending metrics to the client", e);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user