diff --git a/go.mod b/go.mod index bbbca44a565c84a7c86ec5a6ce107a3f0bf3e759..e5a5dffe06b368807dfc3e55f2373e19b1e9c1f4 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 22d5b86200554992cf44d41d41c33a32d8bd0790..2096a57c594f7cc17369318969276844919e691d 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 41fc2c2d49b0a967dbc3008fe37090b652546969..9af936c1420dce4172bdaf2c25479f288cc3df4f 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 7f73efd137866c5998635813d70de3146865e078..32d3c217daa0b0783e0ad2b2dde1a0a4e18d8797 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 0000000000000000000000000000000000000000..e7182074d96687bf6c8d9d4df255207b043965cb --- /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 e3b3c5b0536b26a97e7f771ba77ba5ba83aa6faa..5d23cf4ead3e12ba947cfa3f7ad6b63c205edfa3 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!") +}