diff --git a/commafeed-client/src/pages/admin/MetricsPage.tsx b/commafeed-client/src/pages/admin/MetricsPage.tsx index 64203a4d..ae5a86a9 100644 --- a/commafeed-client/src/pages/admin/MetricsPage.tsx +++ b/commafeed-client/src/pages/admin/MetricsPage.tsx @@ -20,6 +20,8 @@ const shownGauges: { [key: string]: string } = { "com.commafeed.backend.feed.FeedRefreshEngine.queue.size": "Queue size", "com.commafeed.backend.feed.FeedRefreshEngine.worker.active": "Feed Worker active", "com.commafeed.backend.feed.FeedRefreshEngine.updater.active": "Feed Updater active", + "com.commafeed.frontend.ws.WebSocketSessions.users": "WebSocket users", + "com.commafeed.frontend.ws.WebSocketSessions.sessions": "WebSocket sessions", } export function MetricsPage() { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/ws/WebSocketSessions.java b/commafeed-server/src/main/java/com/commafeed/frontend/ws/WebSocketSessions.java index f52e4673..c2fb1ea5 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/ws/WebSocketSessions.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/ws/WebSocketSessions.java @@ -5,9 +5,12 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; +import javax.inject.Inject; import javax.inject.Singleton; import javax.websocket.Session; +import com.codahale.metrics.Gauge; +import com.codahale.metrics.MetricRegistry; import com.commafeed.backend.model.User; import lombok.extern.slf4j.Slf4j; @@ -19,6 +22,13 @@ public class WebSocketSessions { // a user may have multiple sessions (two tabs, on mobile, ...) private final Map> sessions = new ConcurrentHashMap<>(); + @Inject + public WebSocketSessions(MetricRegistry metrics) { + metrics.register(MetricRegistry.name(getClass(), "users"), (Gauge) sessions::size); + metrics.register(MetricRegistry.name(getClass(), "sessions"), + (Gauge) () -> sessions.values().stream().mapToLong(Set::size).sum()); + } + public void add(Long userId, Session session) { sessions.computeIfAbsent(userId, v -> ConcurrentHashMap.newKeySet()).add(session); }