From f01ef763a349167d3d0c4ff24596a6af71d92213 Mon Sep 17 00:00:00 2001 From: rxdn <29165304+rxdn@users.noreply.github.com> Date: Wed, 13 Sep 2023 17:23:37 +0100 Subject: [PATCH] Add websocket metrics --- .../endpoints/api/ticket/livechat/manager.go | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/http/endpoints/api/ticket/livechat/manager.go b/app/http/endpoints/api/ticket/livechat/manager.go index 9b0cd2f..15eaa38 100644 --- a/app/http/endpoints/api/ticket/livechat/manager.go +++ b/app/http/endpoints/api/ticket/livechat/manager.go @@ -3,6 +3,25 @@ package livechat import ( "encoding/json" "github.com/TicketsBot/common/chatrelay" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "strconv" +) + +var ( + activeWebsockets = promauto.NewGauge(prometheus.GaugeOpts{ + Namespace: "tickets", + Subsystem: "api", + Name: "active_livechat_websockets", + Help: "The number of open live-chat websockets", + }) + + websocketMessages = promauto.NewCounterVec(prometheus.CounterOpts{ + Namespace: "tickets", + Subsystem: "api", + Name: "livechat_websocket_messages", + Help: "The number of messages relayed over live-chat websockets", + }, []string{"guild_id", "message_id"}) ) type ( @@ -30,6 +49,8 @@ func (sm *SocketManager) Run() { guildClients := sm.clients[client.GuildId] guildClients = append(guildClients, client) sm.clients[client.GuildId] = guildClients + + activeWebsockets.Inc() case client := <-sm.unregister: guildClients := sm.clients[client.GuildId] if len(guildClients) == 0 { @@ -49,6 +70,8 @@ func (sm *SocketManager) Run() { } sm.clients[client.GuildId] = guildClients + + activeWebsockets.Dec() case msg := <-sm.messages: guildClients, ok := sm.clients[msg.Ticket.GuildId] if !ok || len(guildClients) == 0 { // No clients connected to this API server for this guild @@ -70,6 +93,11 @@ func (sm *SocketManager) Run() { continue } + websocketMessages.WithLabelValues( + strconv.FormatUint(client.GuildId, 10), + strconv.FormatUint(msg.Message.Id, 10), + ).Inc() + client.Write(Event{ Type: EventTypeMessage, Data: encoded,