This is an automated email from the ASF dual-hosted git repository.

zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git


The following commit(s) were added to refs/heads/master by this push:
     new 68f2eb78 [horus] Fix duplicate alarms (#353)
68f2eb78 is described below

commit 68f2eb780e622321fe85245dc61104fbd9d193aa
Author: mfordjody <[email protected]>
AuthorDate: Wed Sep 18 20:27:47 2024 +0800

    [horus] Fix duplicate alarms (#353)
---
 app/horus/basic/db/db.go           | 10 +++++-----
 app/horus/core/horuser/action.go   |  8 ++++++--
 app/horus/core/horuser/modular.go  | 37 +++++++++++++++++--------------------
 app/horus/core/horuser/recovery.go |  2 +-
 deploy/horus/horus.yaml            |  4 ++--
 5 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/app/horus/basic/db/db.go b/app/horus/basic/db/db.go
index 325d136d..8040d52e 100644
--- a/app/horus/basic/db/db.go
+++ b/app/horus/basic/db/db.go
@@ -119,16 +119,16 @@ func (n *NodeDataInfo) AddOrGet() (int64, error) {
        return row, err
 }
 
-func GetRecoveryNodeDataInfoDate(day int) ([]*NodeDataInfo, error) {
-       var ndi []*NodeDataInfo
+func GetRecoveryNodeDataInfoDate(day int) ([]NodeDataInfo, error) {
+       var ndi []NodeDataInfo
        session := db.Where(fmt.Sprintf("recovery_mark = 0 AND first_date > 
DATE_SUB(CURDATE(), INTERVAL %d DAY)", day))
        err := session.Find(&ndi)
        return ndi, err
 }
 
-func GetDailyLimitNodeDataInfoDate(day, module, cluster string) 
([]*NodeDataInfo, error) {
-       var ndi []*NodeDataInfo
-       session := db.Where(fmt.Sprintf("DATE(first_date) = '%s' AND 
module_name = '%s' AND cluster_name = '%s'", day, module, cluster))
+func GetDailyLimitNodeDataInfoDate(day, module, cluster string) 
([]NodeDataInfo, error) {
+       var ndi []NodeDataInfo
+       session := db.Where("DATE(first_date) = ? AND module_name = ? AND 
cluster_name = ?", day, module, cluster)
        err := session.Find(&ndi)
        return ndi, err
 }
diff --git a/app/horus/core/horuser/action.go b/app/horus/core/horuser/action.go
index f438258e..f994119a 100644
--- a/app/horus/core/horuser/action.go
+++ b/app/horus/core/horuser/action.go
@@ -21,7 +21,7 @@ import (
        "k8s.io/klog/v2"
 )
 
-func (h *Horuser) Cordon(nodeName, clusterName string) (err error) {
+func (h *Horuser) Cordon(nodeName, clusterName, moduleName string) (err error) 
{
        kubeClient := h.kubeClientMap[clusterName]
        if kubeClient == nil {
                klog.Errorf("node Cordon kubeClient by clusterName empty.")
@@ -36,9 +36,13 @@ func (h *Horuser) Cordon(nodeName, clusterName string) (err 
error) {
                klog.Errorf("node Cordon get err nodeName:%v clusterName:%v", 
nodeName, clusterName)
                return err
        }
+       annotations := node.Annotations
+       if annotations == nil {
+               annotations = map[string]string{}
+       }
+       annotations["dubbo.apache.org/disable-by"] = "horus"
 
        node.Spec.Unschedulable = true
-
        ctxSecond, cancelSecond := h.GetK8sContext()
        defer cancelSecond()
        node, err = kubeClient.CoreV1().Nodes().Update(ctxSecond, node, 
v1.UpdateOptions{})
diff --git a/app/horus/core/horuser/modular.go 
b/app/horus/core/horuser/modular.go
index 45943829..df51676e 100644
--- a/app/horus/core/horuser/modular.go
+++ b/app/horus/core/horuser/modular.go
@@ -81,22 +81,13 @@ func (h *Horuser) CustomizeModularNodes(clusterName, 
moduleName, nodeName, ip st
        today := time.Now().Format("2006-01-02")
 
        recoveryQL := fmt.Sprintf(h.cc.CustomModular.RecoveryQL[moduleName], 
nodeName)
-
        data, err := db.GetDailyLimitNodeDataInfoDate(today, moduleName, 
clusterName)
        if err != nil {
                klog.Errorf("CustomizeModularNodes 
GetDailyLimitNodeDataInfoDate err:%v", err)
                return
        }
-       klog.Infof("%v", data)
-
-       dailyLimit := h.cc.CustomModular.CordonDailyLimit[moduleName]
-       if len(data) > dailyLimit {
-               msg := fmt.Sprintf("【日期:%v】 【集群:%v\n】 【今日 Cordon 节点数: %v】\n 
【已达到今日上限: %v】\n 【节点:%v】",
-                       data, clusterName, moduleName, dailyLimit, nodeName)
-               alert.DingTalkSend(h.cc.CustomModular.DingTalk, msg)
-               return
-       }
-
+       err = h.Cordon(nodeName, clusterName, moduleName)
+       
        write := db.NodeDataInfo{
                NodeName:    nodeName,
                NodeIP:      ip,
@@ -106,29 +97,35 @@ func (h *Horuser) CustomizeModularNodes(clusterName, 
moduleName, nodeName, ip st
                FirstDate:   today,
                RecoveryQL:  recoveryQL,
        }
+
        pass, _ := write.Check()
        if pass {
                klog.Infof("CustomizeModularNodes already existing 
clusterName:%v nodeName:%v moduleName:%v", clusterName, nodeName, moduleName)
                return
        }
-       err = h.Cordon(nodeName, clusterName)
+
+       _, err = write.AddOrGet()
+       if err != nil {
+               klog.Errorf("CustomizeModularNodes AddOrGet err:%v", err)
+               klog.Infof("moduleName:%v nodeName:%v", moduleName, 
write.NodeName)
+       }
+
        res := "Success"
        if err != nil {
                res = fmt.Sprintf("failed:%v", err)
                klog.Errorf("Cordon failed:%v", res)
        }
-
        msg := fmt.Sprintf("\n【集群:%v】\n【发现 %s 异常已禁止调度】\n【已禁止调度节点:%v】\n 【处理结果: 
%v】\n 【今日操作次数:%v】\n",
                clusterName, moduleName, nodeName, res, len(data)+1)
-
-       klog.Infof("Attempting to send DingTalk message: %s", msg)
        alert.DingTalkSend(h.cc.CustomModular.DingTalk, msg)
-       klog.Infof("DingTalk message sent")
 
-       _, err = write.AddOrGet()
-       if err != nil {
-               klog.Errorf("CustomizeModularNodes AddOrGet err:%v", err)
-               klog.Infof("moduleName:%v nodeName:%v", moduleName, 
write.NodeName)
+       dailyLimit := h.cc.CustomModular.CordonDailyLimit[moduleName]
+       if len(data) > dailyLimit {
+               msg := fmt.Sprintf("【日期:%v】 【集群:%v\n】 【今日 Cordon 节点数: %v】\n 
【已达到今日上限: %v】\n 【节点:%v】",
+                       data, clusterName, len(data), dailyLimit, nodeName)
+               alert.DingTalkSend(h.cc.CustomModular.DingTalk, msg)
+               return
        }
+
        klog.Infof("CustomizeModularNodes AddOrGet success moduleName:%v 
nodeName:%v", moduleName, write.NodeName)
 }
diff --git a/app/horus/core/horuser/recovery.go 
b/app/horus/core/horuser/recovery.go
index dd59c5c4..e97617e9 100644
--- a/app/horus/core/horuser/recovery.go
+++ b/app/horus/core/horuser/recovery.go
@@ -53,7 +53,7 @@ func (h *Horuser) recoveryCheck(ctx context.Context) {
        wp.StopWait()
 }
 
-func (h *Horuser) recoveryNodes(n *db.NodeDataInfo) {
+func (h *Horuser) recoveryNodes(n db.NodeDataInfo) {
        addr := h.cc.PromMultiple[n.ClusterName]
        if addr == "" {
                klog.Errorf("recoveryNodes PromMultiple get addr empty.")
diff --git a/deploy/horus/horus.yaml b/deploy/horus/horus.yaml
index 768184fd..e68be09f 100644
--- a/deploy/horus/horus.yaml
+++ b/deploy/horus/horus.yaml
@@ -50,9 +50,9 @@ nodeRecovery:
       - 15000000
 
 customModular:
-  enabled: true
+  enabled: false
   cordonDailyLimit:
-    filesystem_readonly: 1
+    filesystem_readonly: 3
   checkQL:
     filesystem_readonly: |-
       node_filesystem_readonly{mountpoint="/"} != 1

Reply via email to