From 5374a9a25ba1a4e5451a95bd9ba383aef9ad9a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BE=99?= Date: Mon, 3 Jul 2023 09:44:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E6=9C=BAip=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 1 + go.sum | 2 ++ src/main.go | 5 +++ src/router/automatedmaintenrouter.go | 4 +-- src/service/cron/common.go | 13 +++++++ src/service/host_manage.go | 54 ++++++++++++++++++++++++++-- 6 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 src/service/cron/common.go diff --git a/go.mod b/go.mod index bbbca44..e5a5dff 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( github.com/minio/minio-go/v7 v7.0.58 github.com/mojocn/base64Captcha v1.3.5 github.com/pkg/errors v0.9.1 + github.com/robfig/cron v1.2.0 github.com/satori/go.uuid v1.2.0 github.com/spf13/cast v1.5.0 github.com/spf13/pflag v1.0.5 diff --git a/go.sum b/go.sum index 22d5b86..2096a57 100644 --- a/go.sum +++ b/go.sum @@ -382,6 +382,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= +github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= diff --git a/src/main.go b/src/main.go index 41fc2c2..9af936c 100644 --- a/src/main.go +++ b/src/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/service/cron" "net/http" "os" "time" @@ -39,6 +40,10 @@ func main() { go client.GetDbClient() // redis client go client.GetRedisClient() + + //启动定时任务 + cron.StartCron() + // server start... conf.Logger.Error("server start err", zap.Error(newServer().ListenAndServe())) } diff --git a/src/router/automatedmaintenrouter.go b/src/router/automatedmaintenrouter.go index 7f73efd..32d3c21 100644 --- a/src/router/automatedmaintenrouter.go +++ b/src/router/automatedmaintenrouter.go @@ -36,10 +36,10 @@ func InitAutomatedMaintenRouter(e *gin.Engine) { host.PUT("/edit", controller.EditHostManage) // 编辑 host.DELETE("/del", controller.DelHostManage) // 删除 host.GET("/details", controller.DetailsHostManage) // 详情 - host.GET("/page_list", controller.PageListHostManage) // 列表-分页 + host.GET("/page_list", controller.PageListHostManage) // 列表 host.POST("/state", controller.StateHostManage) // 状态检测 host.GET("/ip_exception_list", controller.HostIpExceptionList) // 主机ip异常列表 host.GET("/export", controller.ExportIp) // 导出ip列表 - host.GET("/list", controller.ListHostManage) // 主机分组列表 + host.GET("/list", controller.ListHostManage) // 主机分组列表-不分页 } } diff --git a/src/service/cron/common.go b/src/service/cron/common.go new file mode 100644 index 0000000..e718207 --- /dev/null +++ b/src/service/cron/common.go @@ -0,0 +1,13 @@ +package cron + +import ( + "github.com/robfig/cron" + "gitlab.wodcloud.com/smart-operation/so-operation-api/src/service" +) + +func StartCron() { + c := cron.New() + defer c.Start() + + c.AddFunc("0 0 0 * * *", service.CronStatusDetection) // 每天凌晨12状态检测 +} diff --git a/src/service/host_manage.go b/src/service/host_manage.go index e3b3c5b..5d23cf4 100644 --- a/src/service/host_manage.go +++ b/src/service/host_manage.go @@ -451,7 +451,7 @@ func (h *HostManageSvc) SaveStateHostManage(hostManageList []request.HostManageL return } -// HostIpExceptionList 列表点击状态检测 +// HostIpExceptionList 列表点击状态检测后展示-异常列表 func (h *HostManageSvc) HostIpExceptionList(req request.HostIpExceptionListReq) (total int64, hostManageListRes []response.HostManageListRes, err error) { db, err := client.GetDbClient() if err != nil { @@ -470,7 +470,7 @@ func (h *HostManageSvc) HostIpExceptionList(req request.HostIpExceptionListReq) return } -// SaveIpExceptionList 保存时状态检测异常列表 +// SaveIpExceptionList 保存时状态检测后展示-异常列表 func (h *HostManageSvc) SaveIpExceptionList(req request.HostIpExceptionListReq) (total int64, hostManageListCacheRes []response.HostManageListCache, err error) { db, err := client.GetDbClient() if err != nil { @@ -635,3 +635,53 @@ func (h *HostManageSvc) ListHostManage() (hostManagesListRes []response.HostMana } return } + +// CronStatusDetection 定时任务-状态检测 +func CronStatusDetection() { + db, err := client.GetDbClient() + if err != nil { + fmt.Println("CronStatusDetection err:", err.Error()) + return + } + + //查询主机IP列表 + hostManageList := make([]response.HostManageListRes, 0) + finder := db.Table("host_manage_list").Where("is_delete = 0") + err = finder.Find(&hostManageList) + if err != nil { + fmt.Println("CronStatusDetection err:", err.Error()) + return + } + + //往hosts文件中写入主机组ip + //f, err := os.OpenFile("/etc/ansible/hosts", os.O_APPEND|os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0777) + //if err != nil { + // fmt.Println("CronStatusDetection err:", err.Error()) + // return + //} + //defer f.Close() + //_, err = f.Write([]byte(fmt.Sprintf("%s%d\n", AnsibleGroup, req.Id))) + //if err != nil { + // fmt.Println("CronStatusDetection err:", err.Error()) + // return + //} + //for _, v := range hostManageList { + // _, err = f.Write([]byte(fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"\n", v.Ip, v.Ip, v.Port, v.UserName, v.Password))) + // if err != nil { + // fmt.Println("CronStatusDetection err:", err.Error()) + // return + // } + //} + for _, v := range hostManageList { + //修改状态 + _, err = db.Table("host_manage_list").Where("is_delete = 0 AND id = ?", v.Id). + Cols("conn_status").Update(&entity.HostManageList{ + ConnStatus: StatusDetection(v.Ip), + }) + if err != nil { + fmt.Println("CronStatusDetection err:", err.Error()) + return + } + } + fmt.Println("CronPersonalCardDate success!") +} -- 2.26.0