mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-01-13 01:02:46 +00:00
51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
// Package job provides scheduled background jobs for the 3x-ui panel.
|
|
package job
|
|
|
|
import (
|
|
"github.com/mhsanaei/3x-ui/v2/logger"
|
|
"github.com/mhsanaei/3x-ui/v2/web/service"
|
|
)
|
|
|
|
// CheckNodeHealthJob periodically checks the health of all nodes in multi-node mode.
|
|
type CheckNodeHealthJob struct {
|
|
nodeService service.NodeService
|
|
}
|
|
|
|
// NewCheckNodeHealthJob creates a new job for checking node health.
|
|
func NewCheckNodeHealthJob() *CheckNodeHealthJob {
|
|
return &CheckNodeHealthJob{
|
|
nodeService: service.NodeService{},
|
|
}
|
|
}
|
|
|
|
// Run executes the health check for all nodes.
|
|
func (j *CheckNodeHealthJob) Run() {
|
|
// Check if multi-node mode is enabled
|
|
settingService := service.SettingService{}
|
|
multiMode, err := settingService.GetMultiNodeMode()
|
|
if err != nil || !multiMode {
|
|
return // Skip if multi-node mode is not enabled
|
|
}
|
|
|
|
nodes, err := j.nodeService.GetAllNodes()
|
|
if err != nil {
|
|
logger.Errorf("Failed to get nodes for health check: %v", err)
|
|
return
|
|
}
|
|
|
|
if len(nodes) == 0 {
|
|
return // No nodes to check
|
|
}
|
|
|
|
logger.Debugf("Checking health of %d nodes", len(nodes))
|
|
for _, node := range nodes {
|
|
n := node // Capture loop variable
|
|
go func() {
|
|
if err := j.nodeService.CheckNodeHealth(n); err != nil {
|
|
logger.Debugf("Node %s (%s) health check failed: %v", n.Name, n.Address, err)
|
|
} else {
|
|
logger.Debugf("Node %s (%s) is %s", n.Name, n.Address, n.Status)
|
|
}
|
|
}()
|
|
}
|
|
}
|