Manager: improve SocketIO event handling & logging

This commit is contained in:
Sybren A. Stüvel 2022-04-05 16:34:32 +02:00
parent fdab07d987
commit a476f39365

View File

@ -6,6 +6,7 @@ import (
gosocketio "github.com/graarh/golang-socketio" gosocketio "github.com/graarh/golang-socketio"
"github.com/graarh/golang-socketio/transport" "github.com/graarh/golang-socketio/transport"
"github.com/labstack/echo/v4" "github.com/labstack/echo/v4"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
@ -19,48 +20,60 @@ type Message struct {
} }
func New() *BiDirComms { func New() *BiDirComms {
return &BiDirComms{ bdc := BiDirComms{
sockserv: socketIOServer(), sockserv: gosocketio.NewServer(transport.GetDefaultWebsocketTransport()),
} }
bdc.registerSIOEventHandlers()
return &bdc
} }
func (b *BiDirComms) RegisterHandlers(router *echo.Echo) { func (b *BiDirComms) RegisterHandlers(router *echo.Echo) {
router.Any("/socket.io/", echo.WrapHandler(b.sockserv)) router.Any("/socket.io/", echo.WrapHandler(b.sockserv))
} }
func socketIOServer() *gosocketio.Server { func (b *BiDirComms) registerSIOEventHandlers() {
sio := gosocketio.NewServer(transport.GetDefaultWebsocketTransport()) log.Debug().Msg("initialising SocketIO")
log.Info().Msg("initialising SocketIO")
sio := b.sockserv
// the sio.On() and c.Join() calls only return an error when there is no // the sio.On() and c.Join() calls only return an error when there is no
// server connected to them, but that's not possible with our setup. // server connected to them, but that's not possible with our setup.
// Errors are explicitly silenced (by assigning to _) to reduce clutter. // Errors are explicitly silenced (by assigning to _) to reduce clutter.
// socket connection // socket connection
_ = sio.On(gosocketio.OnConnection, func(c *gosocketio.Channel) { _ = sio.On(gosocketio.OnConnection, func(c *gosocketio.Channel) {
log.Debug().Str("clientID", c.Id()).Msg("socketIO: connected") logger := sioLogger(c)
logger.Debug().Msg("socketIO: connected")
_ = c.Join(string(SocketIORoomChat)) // All clients connect to the chat room. _ = c.Join(string(SocketIORoomChat)) // All clients connect to the chat room.
_ = c.Join(string(SocketIORoomJobs)) // All clients subscribe to job updates. _ = c.Join(string(SocketIORoomJobs)) // All clients subscribe to job updates.
}) })
// socket disconnection // socket disconnection
_ = sio.On(gosocketio.OnDisconnection, func(c *gosocketio.Channel) { _ = sio.On(gosocketio.OnDisconnection, func(c *gosocketio.Channel) {
log.Debug().Str("clientID", c.Id()).Msg("socketIO: disconnected") logger := sioLogger(c)
logger.Debug().Msg("socketIO: disconnected")
}) })
_ = sio.On(gosocketio.OnError, func(c *gosocketio.Channel) { _ = sio.On(gosocketio.OnError, func(c *gosocketio.Channel) {
log.Warn().Interface("c", c).Msg("socketIO: socketio error") logger := sioLogger(c)
logger.Warn().Msg("socketIO: socketio error")
}) })
// chat socket // chat socket
_ = sio.On(string(SIOEventChatMessageRcv), func(c *gosocketio.Channel, message Message) string { _ = sio.On(string(SIOEventChatMessageRcv), func(c *gosocketio.Channel, message Message) string {
log.Info().Str("clientID", c.Id()). logger := sioLogger(c)
logger.Info().
Str("text", message.Text). Str("text", message.Text).
Str("name", message.Name). Str("name", message.Name).
Msg("socketIO: message received") Msg("socketIO: message received")
c.BroadcastTo(string(SocketIORoomChat), string(SIOEventChatMessageSend), message) b.BroadcastTo(SocketIORoomChat, SIOEventChatMessageSend, message)
return "message sent successfully." return "message sent successfully."
}) })
}
return sio
func sioLogger(c *gosocketio.Channel) zerolog.Logger {
logger := log.With().
Str("clientID", c.Id()).
Str("remoteAddr", c.Ip()).
Logger()
return logger
} }