You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by zh...@apache.org on 2024/09/15 10:18:56 UTC

(dubbo-kubernetes) branch master updated: [horus] Added self-healing manager (#345)

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 c10e5403 [horus] Added self-healing manager (#345)
c10e5403 is described below

commit c10e540342c2363eedec401fb8c77377554b49f0
Author: mfordjody <11...@qq.com>
AuthorDate: Sun Sep 15 18:18:51 2024 +0800

    [horus] Added self-healing manager (#345)
    
    fix typo
---
 app/horus/basic/db/db.go           |  7 +++++++
 app/horus/cmd/main.go              | 10 +++++++++
 app/horus/core/horuser/recovery.go | 42 ++++++++++++++++++++++++++++++++++++++
 go.mod                             |  2 +-
 go.sum                             |  2 ++
 5 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/app/horus/basic/db/db.go b/app/horus/basic/db/db.go
index e90ad99a..48c7454c 100644
--- a/app/horus/basic/db/db.go
+++ b/app/horus/basic/db/db.go
@@ -118,3 +118,10 @@ func (n *NodeDataInfo) AddOrGet() (int64, error) {
 	row, err := n.Add()
 	return row, err
 }
+
+func GetRecoveryNodeDataInfoDate(day int) ([]*NodeDataInfo, error) {
+	var ndi []*NodeDataInfo
+	session := db.Where(fmt.Sprintf("first_date > DATE_SUB(CURDATE(),INTERVAL %d DAY)", day))
+	err := session.Find(&ndi)
+	return nil, err
+}
diff --git a/app/horus/cmd/main.go b/app/horus/cmd/main.go
index ac4cc6ed..bc9059e6 100644
--- a/app/horus/cmd/main.go
+++ b/app/horus/cmd/main.go
@@ -20,6 +20,7 @@ import (
 	"flag"
 	"github.com/apache/dubbo-kubernetes/app/horus/basic/config"
 	"github.com/apache/dubbo-kubernetes/app/horus/basic/db"
+	"github.com/apache/dubbo-kubernetes/app/horus/core/horuser"
 	"github.com/apache/dubbo-kubernetes/app/horus/core/ticker"
 	"github.com/prometheus/client_golang/prometheus/promhttp"
 	"k8s.io/klog"
@@ -56,6 +57,7 @@ func main() {
 	} else {
 		klog.Infof("horus db initial success.")
 	}
+	horus := horuser.NewHoruser(c)
 	group, stopChan := setupStopChanWithContext()
 	ctx, cancel := context.WithCancel(context.Background())
 	group.Add(func() error {
@@ -87,6 +89,14 @@ func main() {
 		}
 		return nil
 	})
+	group.Add(func() error {
+		klog.Info("horus recovery manager start success.")
+		err := horus.RecoveryManager(ctx)
+		if err != nil {
+			klog.Errorf("horus recovery manager start failed error:%v", err)
+		}
+		return nil
+	})
 	group.Wait()
 }
 
diff --git a/app/horus/core/horuser/recovery.go b/app/horus/core/horuser/recovery.go
new file mode 100644
index 00000000..8a3f54b6
--- /dev/null
+++ b/app/horus/core/horuser/recovery.go
@@ -0,0 +1,42 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//	http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package horuser
+
+import (
+	"context"
+	"github.com/apache/dubbo-kubernetes/app/horus/basic/db"
+	"k8s.io/apimachinery/pkg/util/wait"
+	"k8s.io/klog/v2"
+	"time"
+)
+
+func (h *Horuser) RecoveryManager(ctx context.Context) error {
+	go wait.UntilWithContext(ctx, h.recoveryCheck, time.Duration(h.cc.NodeRecovery.CheckIntervalSecond)*time.Second)
+	<-ctx.Done()
+	return nil
+}
+
+func (h *Horuser) recoveryCheck(ctx context.Context) {
+	data, err := db.GetRecoveryNodeDataInfoDate(h.cc.NodeRecovery.DayNumber)
+	if err != nil {
+		klog.Errorf("recovery check GetRecoveryNodeDataInfoDate err:%v", err)
+		return
+	}
+	if len(data) == 0 {
+		klog.Errorf("recovery check GetRecoveryNodeDataInfoDate zero.")
+		return
+	}
+}
diff --git a/go.mod b/go.mod
index 869710b8..60d7252c 100644
--- a/go.mod
+++ b/go.mod
@@ -67,6 +67,7 @@ require (
 	github.com/patrickmn/go-cache v2.1.0+incompatible
 	github.com/pkg/errors v0.9.1
 	github.com/prometheus/client_golang v1.20.3
+	github.com/prometheus/common v0.55.0
 	github.com/sethvargo/go-retry v0.2.4
 	github.com/slok/go-http-metrics v0.11.0
 	github.com/spf13/cobra v1.8.0
@@ -306,7 +307,6 @@ require (
 	github.com/polarismesh/polaris-go v1.3.0 // indirect
 	github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
 	github.com/prometheus/client_model v0.6.1 // indirect
-	github.com/prometheus/common v0.55.0 // indirect
 	github.com/prometheus/procfs v0.15.1 // indirect
 	github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 // indirect
 	github.com/rivo/uniseg v0.4.4 // indirect
diff --git a/go.sum b/go.sum
index e77f3bfe..420cc799 100644
--- a/go.sum
+++ b/go.sum
@@ -861,6 +861,7 @@ github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUB
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
 github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0=
+github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -1053,6 +1054,7 @@ github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOl
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=