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

This commit is contained in:
Jacky 2025-05-05 02:46:18 +00:00
parent 710b9f781e
commit fc507ccd3b
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
4 changed files with 24 additions and 3 deletions

View file

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

View file

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

View file

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

View file

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