diff --git a/App/Backend/cmd/kubernetes/handlers/MetricsSocket.go b/App/Backend/cmd/kubernetes/handlers/MetricsSocket.go new file mode 100644 index 0000000..56b6bf7 --- /dev/null +++ b/App/Backend/cmd/kubernetes/handlers/MetricsSocket.go @@ -0,0 +1,48 @@ +package handlers + +import ( + "github.com/gin-gonic/gin" + "github.com/gorilla/websocket" + "log" + "net/http" + "time" +) + +var upgrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + origin := r.Header.Get("Origin") + return origin == GetFrontendIP() + }, +} + +func HandleMetricsSocket(ctx *gin.Context) { + conn, err := upgrader.Upgrade(ctx.Writer, ctx.Request, nil) + if err != nil { + log.Println("Error upgrading metrics socket:", err) + return + } + defer func(conn *websocket.Conn) { + err := conn.Close() + if err != nil { + log.Println("Error closing metrics socket:", err) + } + }(conn) + + for { + stats, err := c.GetTotalUsage() + if err != nil { + log.Println("Error getting metrics stats:", err) + return + } + + err = conn.WriteJSON(stats) + if err != nil { + log.Println("Error writing metrics stats:", err) + if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { + log.Println("WebSocket connection closed by client.") + } + break + } + time.Sleep(500 * time.Millisecond) + } +} diff --git a/App/Backend/cmd/main.go b/App/Backend/cmd/main.go index daabf13..e0cb9de 100644 --- a/App/Backend/cmd/main.go +++ b/App/Backend/cmd/main.go @@ -12,9 +12,11 @@ import ( "time" ) +var frontendUrl = handlers.GetFrontendIP() + func main() { - frontendUrl := handlers.GetFrontendIP() - trustedProxies := []string{"10.0.0.0/8"} + frontendUrl = handlers.GetFrontendIP() + trustedProxies := []string{"10.0.0.0/8"} if frontendUrl == "http://localhost:4200" { gin.SetMode(gin.DebugMode) @@ -56,6 +58,7 @@ func main() { secured.POST("/createresources", handlers.CreateResourcesHandler) secured.GET("/namespaces", handlers.GetNamespacesHandler) secured.GET("/nodenames", handlers.GetNodeNamesHandler) + secured.GET("/statsocket", handlers.HandleMetricsSocket) err = r.Run(":8082") if err != nil { diff --git a/App/Backend/go.mod b/App/Backend/go.mod index cdd90f9..759191b 100644 --- a/App/Backend/go.mod +++ b/App/Backend/go.mod @@ -38,6 +38,7 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.9 // indirect diff --git a/App/Backend/go.sum b/App/Backend/go.sum index bd2d8e2..3f6e2df 100644 --- a/App/Backend/go.sum +++ b/App/Backend/go.sum @@ -63,6 +63,8 @@ github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgY github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= diff --git a/App/Frontend/src/app/dashboard/dashboard.component.html b/App/Frontend/src/app/dashboard/dashboard.component.html index c346168..d9700e5 100644 --- a/App/Frontend/src/app/dashboard/dashboard.component.html +++ b/App/Frontend/src/app/dashboard/dashboard.component.html @@ -44,33 +44,31 @@
-