Explorar o código

fix: implement context handling in analytic and processing functions for graceful shutdown

Jacky hai 1 día
pai
achega
fc507ccd3b
Modificáronse 4 ficheiros con 24 adicións e 3 borrados
  1. 6 1
      api/analytic/analytic.go
  2. 11 2
      api/analytic/nodes.go
  3. 3 0
      api/system/processing.go
  4. 4 0
      internal/kernel/boot.go

+ 6 - 1
api/analytic/analytic.go

@@ -8,6 +8,7 @@ import (
 
 	"github.com/0xJacky/Nginx-UI/internal/analytic"
 	"github.com/0xJacky/Nginx-UI/internal/helper"
+	"github.com/0xJacky/Nginx-UI/internal/kernel"
 	"github.com/shirou/gopsutil/v4/cpu"
 	"github.com/shirou/gopsutil/v4/host"
 	"github.com/shirou/gopsutil/v4/load"
@@ -91,7 +92,11 @@ func Analytic(c *gin.Context) {
 			break
 		}
 
-		time.Sleep(1 * time.Second)
+		select {
+		case <-kernel.Context.Done():
+			return
+		case <-time.After(1 * time.Second):
+		}
 	}
 }
 

+ 11 - 2
api/analytic/nodes.go

@@ -6,6 +6,7 @@ import (
 
 	"github.com/0xJacky/Nginx-UI/internal/analytic"
 	"github.com/0xJacky/Nginx-UI/internal/helper"
+	"github.com/0xJacky/Nginx-UI/internal/kernel"
 	"github.com/gin-gonic/gin"
 	"github.com/gorilla/websocket"
 	"github.com/uozi-tech/cosy/logger"
@@ -36,7 +37,11 @@ func GetNodeStat(c *gin.Context) {
 			break
 		}
 
-		time.Sleep(10 * time.Second)
+		select {
+		case <-kernel.Context.Done():
+			return
+		case <-time.After(10 * time.Second):
+		}
 	}
 }
 
@@ -65,6 +70,10 @@ func GetNodesAnalytic(c *gin.Context) {
 			break
 		}
 
-		time.Sleep(10 * time.Second)
+		select {
+		case <-kernel.Context.Done():
+			return
+		case <-time.After(10 * time.Second):
+		}
 	}
 }

+ 3 - 0
api/system/processing.go

@@ -8,6 +8,7 @@ import (
 	"github.com/0xJacky/Nginx-UI/api"
 	"github.com/0xJacky/Nginx-UI/internal/cache"
 	"github.com/0xJacky/Nginx-UI/internal/cert"
+	"github.com/0xJacky/Nginx-UI/internal/kernel"
 	"github.com/gin-gonic/gin"
 )
 
@@ -58,6 +59,8 @@ func GetProcessingStatus(c *gin.Context) {
 				c.SSEvent("heartbeat", "")
 				return false
 			})
+		case <-kernel.Context.Done():
+			return
 		case <-notify:
 			// Client disconnected
 			return

+ 4 - 0
internal/kernel/boot.go

@@ -30,9 +30,13 @@ import (
 	cSettings "github.com/uozi-tech/cosy/settings"
 )
 
+var Context context.Context
+
 func Boot(ctx context.Context) {
 	defer recovery()
 
+	Context = ctx
+
 	async := []func(){
 		InitJsExtensionType,
 		InitNodeSecret,