diff --git a/internal/websocket/manager.go b/internal/websocket/manager.go index ac9b3656..083efd4b 100644 --- a/internal/websocket/manager.go +++ b/internal/websocket/manager.go @@ -23,6 +23,16 @@ const pingPeriod = 10 * time.Second // period for sending inactive cursor messages const inactiveCursorsPeriod = 750 * time.Millisecond +// events that are not logged in debug mode +var nologEvents = []string{ + // don't log twice + event.SYSTEM_LOGS, + // don't log heartbeat + event.SYSTEM_HEARTBEAT, + // don't log every cursor update + event.SESSION_CURSORS, +} + func New( sessions types.SessionManager, desktop types.DesktopManager, @@ -301,7 +311,8 @@ func (manager *WebSocketManagerCtx) handle(connection *websocket.Conn, peer type break } - if data.Event != event.SYSTEM_LOGS { + // log events if not ignored + if ok, _ := utils.ArrayIn(data.Event, nologEvents); !ok { logger.Debug(). Str("address", connection.RemoteAddr().String()). Str("event", data.Event). diff --git a/internal/websocket/peer.go b/internal/websocket/peer.go index 6d5b1d1a..52dacf06 100644 --- a/internal/websocket/peer.go +++ b/internal/websocket/peer.go @@ -75,6 +75,13 @@ func (peer *WebSocketPeerCtx) Ping() error { return errors.New("peer connection not found") } + // application level heartbeat + if err := peer.connection.WriteJSON(types.WebSocketMessage{ + Event: event.SYSTEM_HEARTBEAT, + }); err != nil { + return err + } + return peer.connection.WriteMessage(websocket.PingMessage, nil) } diff --git a/pkg/types/event/events.go b/pkg/types/event/events.go index 3e773a9c..5a3f37dc 100644 --- a/pkg/types/event/events.go +++ b/pkg/types/event/events.go @@ -6,6 +6,7 @@ const ( SYSTEM_SETTINGS = "system/settings" SYSTEM_LOGS = "system/logs" SYSTEM_DISCONNECT = "system/disconnect" + SYSTEM_HEARTBEAT = "system/heartbeat" ) const ( diff --git a/pkg/types/websocket.go b/pkg/types/websocket.go index 213d3af7..a99dc344 100644 --- a/pkg/types/websocket.go +++ b/pkg/types/websocket.go @@ -7,7 +7,7 @@ import ( type WebSocketMessage struct { Event string `json:"event"` - Payload json.RawMessage `json:"payload"` + Payload json.RawMessage `json:"payload,omitempty"` } type WebSocketHandler func(Session, WebSocketMessage) bool