diff --git a/agent/pkg/api/socket_server_handlers.go b/agent/pkg/api/socket_server_handlers.go index d1422339e..a22508362 100644 --- a/agent/pkg/api/socket_server_handlers.go +++ b/agent/pkg/api/socket_server_handlers.go @@ -34,9 +34,12 @@ func (h *RoutesEventHandlers) WebSocketConnect(socketId int, isTapper bool) { tappers.Connected() } else { logger.Log.Infof("Websocket event - Browser socket connected, socket ID: %d", socketId) + socketListLock.Lock() browserClientSocketUUIDs = append(browserClientSocketUUIDs, socketId) socketListLock.Unlock() + + BroadcastTappedPodsStatus() } } diff --git a/agent/pkg/api/utils.go b/agent/pkg/api/utils.go new file mode 100644 index 000000000..1d7273039 --- /dev/null +++ b/agent/pkg/api/utils.go @@ -0,0 +1,20 @@ +package api + +import ( + "encoding/json" + + "github.com/up9inc/mizu/agent/pkg/providers/tappedPods" + "github.com/up9inc/mizu/shared" + "github.com/up9inc/mizu/shared/logger" +) + +func BroadcastTappedPodsStatus() { + tappedPodsStatus := tappedPods.GetTappedPodsStatus() + + message := shared.CreateWebSocketStatusMessage(tappedPodsStatus) + if jsonBytes, err := json.Marshal(message); err != nil { + logger.Log.Errorf("Could not Marshal message %v", err) + } else { + BroadcastToBrowserClients(jsonBytes) + } +} diff --git a/agent/pkg/controllers/config_controller.go b/agent/pkg/controllers/config_controller.go index 70052013e..d4af64b76 100644 --- a/agent/pkg/controllers/config_controller.go +++ b/agent/pkg/controllers/config_controller.go @@ -7,6 +7,7 @@ import ( "time" "github.com/gin-gonic/gin" + "github.com/up9inc/mizu/agent/pkg/api" "github.com/up9inc/mizu/agent/pkg/config" "github.com/up9inc/mizu/agent/pkg/models" "github.com/up9inc/mizu/agent/pkg/providers" @@ -36,7 +37,7 @@ func PostTapConfig(c *gin.Context) { tappedPods.Set([]*shared.PodInfo{}) tappers.ResetStatus() - broadcastTappedPodsStatus() + api.BroadcastTappedPodsStatus() } var tappedNamespaces []string @@ -135,7 +136,7 @@ func startMizuTapperSyncer(ctx context.Context, provider *kubernetes.Provider, t } tappedPods.Set(kubernetes.GetPodInfosForPods(tapperSyncer.CurrentlyTappedPods)) - broadcastTappedPodsStatus() + api.BroadcastTappedPodsStatus() case tapperStatus, ok := <-tapperSyncer.TapperStatusChangedOut: if !ok { logger.Log.Debug("mizuTapperSyncer tapper status changed channel closed, ending listener loop") @@ -143,7 +144,7 @@ func startMizuTapperSyncer(ctx context.Context, provider *kubernetes.Provider, t } tappers.SetStatus(&tapperStatus) - broadcastTappedPodsStatus() + api.BroadcastTappedPodsStatus() case <-ctx.Done(): logger.Log.Debug("mizuTapperSyncer event listener loop exiting due to context done") return diff --git a/agent/pkg/controllers/status_controller.go b/agent/pkg/controllers/status_controller.go index d6424de89..6db15ee8d 100644 --- a/agent/pkg/controllers/status_controller.go +++ b/agent/pkg/controllers/status_controller.go @@ -1,7 +1,6 @@ package controllers import ( - "encoding/json" "net/http" "github.com/gin-gonic/gin" @@ -39,18 +38,7 @@ func PostTappedPods(c *gin.Context) { logger.Log.Infof("[Status] POST request: %d tapped pods", len(requestTappedPods)) tappedPods.Set(requestTappedPods) - broadcastTappedPodsStatus() -} - -func broadcastTappedPodsStatus() { - tappedPodsStatus := tappedPods.GetTappedPodsStatus() - - message := shared.CreateWebSocketStatusMessage(tappedPodsStatus) - if jsonBytes, err := json.Marshal(message); err != nil { - logger.Log.Errorf("Could not Marshal message %v", err) - } else { - api.BroadcastToBrowserClients(jsonBytes) - } + api.BroadcastTappedPodsStatus() } func PostTapperStatus(c *gin.Context) { @@ -67,7 +55,7 @@ func PostTapperStatus(c *gin.Context) { logger.Log.Infof("[Status] POST request, tapper status: %v", tapperStatus) tappers.SetStatus(tapperStatus) - broadcastTappedPodsStatus() + api.BroadcastTappedPodsStatus() } func GetConnectedTappersCount(c *gin.Context) {