diff --git a/internal/db/models/node_dao.go b/internal/db/models/node_dao.go index c63182dc..1a6950bd 100644 --- a/internal/db/models/node_dao.go +++ b/internal/db/models/node_dao.go @@ -828,7 +828,7 @@ func (this *NodeDAO) UpdateNodeDNS(tx *dbs.Tx, nodeId int64, routes map[int64][] } // 计算节点上线|下线状态 -func (this *NodeDAO) UpdateNodeUp(tx *dbs.Tx, nodeId int64, isUp bool, maxUp int, maxDown int) (changed bool, err error) { +func (this *NodeDAO) UpdateNodeUpCount(tx *dbs.Tx, nodeId int64, isUp bool, maxUp int, maxDown int) (changed bool, err error) { if nodeId <= 0 { return false, errors.New("invalid nodeId") } @@ -888,6 +888,23 @@ func (this *NodeDAO) UpdateNodeUp(tx *dbs.Tx, nodeId int64, isUp bool, maxUp int return } +// 设置节点上下线状态 +func (this *NodeDAO) UpdateNodeUp(tx *dbs.Tx, nodeId int64, isUp bool) error { + if nodeId <= 0 { + return errors.New("invalid nodeId") + } + op := NewNodeOperator() + op.Id = nodeId + op.IsUp = isUp + op.CountDown = 0 + op.CountDown = 0 + err := this.Save(tx, op) + if err != nil { + return err + } + return this.NotifyDNSUpdate(tx, nodeId) +} + // 修改节点活跃状态 func (this *NodeDAO) UpdateNodeActive(tx *dbs.Tx, nodeId int64, isActive bool) error { if nodeId <= 0 { diff --git a/internal/rpc/services/service_node.go b/internal/rpc/services/service_node.go index 05c693fd..8ed37a28 100644 --- a/internal/rpc/services/service_node.go +++ b/internal/rpc/services/service_node.go @@ -1271,6 +1271,11 @@ func (this *NodeService) FindEnabledNodesWithIds(ctx context.Context, req *pb.Fi // 检查新版本 func (this *NodeService) CheckNodeLatestVersion(ctx context.Context, req *pb.CheckNodeLatestVersionRequest) (*pb.CheckNodeLatestVersionResponse, error) { + _, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + deployFiles := installers.SharedDeployManager.LoadFiles() for _, file := range deployFiles { if file.OS == req.Os && file.Arch == req.Arch && stringutil.VersionCompare(file.Version, req.CurrentVersion) > 0 { @@ -1282,3 +1287,19 @@ func (this *NodeService) CheckNodeLatestVersion(ctx context.Context, req *pb.Che } return &pb.CheckNodeLatestVersionResponse{HasNewVersion: false}, nil } + +// 设置节点上线状态 +func (this *NodeService) UpdateNodeUp(ctx context.Context, req *pb.UpdateNodeUpRequest) (*pb.RPCSuccess, error) { + _, err := this.ValidateAdmin(ctx, 0) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + err = models.SharedNodeDAO.UpdateNodeUp(tx, req.NodeId, req.IsUp) + if err != nil { + return nil, err + } + + return this.Success() +} diff --git a/internal/tasks/dns_task_executor.go b/internal/tasks/dns_task_executor.go index 1d12f4f6..ace29f99 100644 --- a/internal/tasks/dns_task_executor.go +++ b/internal/tasks/dns_task_executor.go @@ -94,6 +94,7 @@ func (this *DNSTaskExecutor) Loop() error { return nil } +// 修改服务相关记录 func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error { var tx *dbs.Tx @@ -208,6 +209,7 @@ func (this *DNSTaskExecutor) doServer(taskId int64, serverId int64) error { return nil } +// 修改节点相关记录 func (this *DNSTaskExecutor) doNode(taskId int64, nodeId int64) error { isOk := false defer func() { @@ -245,6 +247,7 @@ func (this *DNSTaskExecutor) doNode(taskId int64, nodeId int64) error { return nil } +// 修改集群相关记录 func (this *DNSTaskExecutor) doCluster(taskId int64, clusterId int64) error { isOk := false defer func() { diff --git a/internal/tasks/health_check_executor.go b/internal/tasks/health_check_executor.go index 89c5a8be..77155b43 100644 --- a/internal/tasks/health_check_executor.go +++ b/internal/tasks/health_check_executor.go @@ -5,7 +5,6 @@ import ( "crypto/tls" "encoding/json" "github.com/TeaOSLab/EdgeAPI/internal/db/models" - "github.com/TeaOSLab/EdgeAPI/internal/db/models/dns" "github.com/TeaOSLab/EdgeAPI/internal/errors" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/lists" @@ -131,16 +130,10 @@ func (this *HealthCheckExecutor) Run() ([]*HealthCheckResult, error) { // 修改节点状态 if healthCheckConfig.AutoDown { - isChanged, err := models.SharedNodeDAO.UpdateNodeUp(nil, int64(result.Node.Id), result.IsOk, healthCheckConfig.CountUp, healthCheckConfig.CountDown) + isChanged, err := models.SharedNodeDAO.UpdateNodeUpCount(nil, int64(result.Node.Id), result.IsOk, healthCheckConfig.CountUp, healthCheckConfig.CountDown) if err != nil { logs.Println("[HEALTH_CHECK]" + err.Error()) } else if isChanged { - // 通知DNS更新 - err = dns.SharedDNSTaskDAO.CreateNodeTask(nil, int64(result.Node.Id), dns.DNSTaskTypeNodeChange) - if err != nil { - logs.Println("[HEALTH_CHECK]" + err.Error()) - } - // 通知恢复或下线 if result.IsOk { err = models.NewMessageDAO().CreateNodeMessage(nil, this.clusterId, int64(result.Node.Id), models.MessageTypeHealthCheckNodeUp, models.MessageLevelSuccess, "健康检查成功,节点\""+result.Node.Name+"\"已恢复上线", nil)