From fee3ef6a18bddd5d49edfd58725fce06aab133bb Mon Sep 17 00:00:00 2001 From: wubijie Date: Mon, 3 Jul 2023 11:01:09 +0800 Subject: [PATCH] Store machine execution results in a database --- server/db/db.go | 5 +++-- server/db/redisdao.go | 14 +++++++------ server/global/global.go | 7 +++++++ server/service/agent.go | 45 +++++++++++++++++++++++++++-------------- 4 files changed, 48 insertions(+), 23 deletions(-) diff --git a/server/db/db.go b/server/db/db.go index 0efd19d..c35978b 100644 --- a/server/db/db.go +++ b/server/db/db.go @@ -4,6 +4,7 @@ import ( "database/sql" "fmt" + "gitee.com/openeuler/PilotGo-plugins/sdk/logger" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/schema" @@ -48,7 +49,7 @@ func MysqldbInit(conf *config.MysqlDBInfo) error { password: conf.Password, dbname: conf.DataBase, } - Url = fmt.Sprint("%s:%s@(%s:%d)/%s?charset=utf8mb4&parseTime=true", + Url = fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8mb4&parseTime=true", m.username, m.password, m.ip, @@ -73,6 +74,6 @@ func MysqldbInit(conf *config.MysqlDBInfo) error { db.SetMaxIdleConns(10) db.SetMaxOpenConns(100) - global.GlobalDB.AutoMigrate(&service.RedisExportTarget{}) + global.GlobalDB.AutoMigrate(&RedisExportTarget{}) return nil } diff --git a/server/db/redisdao.go b/server/db/redisdao.go index 563bc98..35ee70d 100644 --- a/server/db/redisdao.go +++ b/server/db/redisdao.go @@ -8,14 +8,16 @@ import ( ) type RedisExportTarget struct { - ID uint `gorm:"primary_key;AUTO_INCREMENT" json:"id"` - UUID string `json:"uuid"` - Status string `json:"status"` //install or remove - UpdatedAt time.Time + ID uint `gorm:"primary_key;AUTO_INCREMENT" json:"id"` + MachineUUID string `json:"uuid"` + MachineIP string `json:"ip"` + Status string `json:"status"` //install、remove or error + Error string `json:"error"` + UpdatedAt time.Time } func AddRedisExporter(ret RedisExportTarget) error { - if len(ret.UUID) == 0 { + if len(ret.MachineUUID) == 0 { return fmt.Errorf("机器不能为空") } return global.GlobalDB.Save(&ret).Error @@ -23,7 +25,7 @@ func AddRedisExporter(ret RedisExportTarget) error { func GetRedisExporter() ([]RedisExportTarget, error) { var ret []RedisExportTarget - err := global.GlobalDB.Where("status=?", "install").Find(&ret).Error + err := global.GlobalDB.Where("status=?", global.StatusInstall).Find(&ret).Error if err != nil { return nil, err } diff --git a/server/global/global.go b/server/global/global.go index a96e4dd..50f1dd4 100644 --- a/server/global/global.go +++ b/server/global/global.go @@ -9,3 +9,10 @@ var ( GlobalClient *client.Client GlobalDB *gorm.DB ) + +// 执行操作状态 +const ( + StatusInstall = "安装" + StatusRemove = "卸载" + StatusErroe = "安装错误" +) diff --git a/server/service/agent.go b/server/service/agent.go index 8af29c2..9802dac 100644 --- a/server/service/agent.go +++ b/server/service/agent.go @@ -2,30 +2,27 @@ package service import ( "gitee.com/openeuler/PilotGo-plugins/sdk/common" + "gitee.com/openeuler/PilotGo-plugins/sdk/logger" "gitee.com/openeuler/PilotGo-plugins/sdk/plugin/client" + "openeuler.org/PilotGo/redis-plugin/db" "openeuler.org/PilotGo/redis-plugin/global" "openeuler.org/PilotGo/redis-plugin/plugin" ) -func FormatData(cmdResults []*client.CmdResult) ([]string, []interface{}, error) { - ret := []interface{}{} +func FormatData(cmdResults []*client.CmdResult) ([]string, []db.RedisExportTarget, error) { + ret := []db.RedisExportTarget{} monitorTargets := []string{} for _, result := range cmdResults { - d := struct { - MachineUUID string - MachineIP string - InstallStatus string - Error string - }{ - MachineUUID: result.MachineUUID, - MachineIP: result.MachineIP, - InstallStatus: "ok", - Error: "", + d := db.RedisExportTarget{ + MachineUUID: result.MachineUUID, + MachineIP: result.MachineIP, + Status: "ok", + Error: "", } if result.RetCode != 0 { - d.InstallStatus = "error" + d.Status = global.StatusErroe d.Error = result.Stderr } else { // TODO: add or delete redis exporter to prometheus monitor target here @@ -38,7 +35,7 @@ func FormatData(cmdResults []*client.CmdResult) ([]string, []interface{}, error) return monitorTargets, ret, nil } -func Install(param *common.Batch) ([]interface{}, error) { +func Install(param *common.Batch) ([]db.RedisExportTarget, error) { cmd := "yum install -y redis_exporter && systemctl start redis_exporter" cmdResults, err := global.GlobalClient.RunScript(param, cmd) @@ -54,10 +51,19 @@ func Install(param *common.Batch) ([]interface{}, error) { if err != nil { return nil, err } + for _, tm := range ret { + if tm.Status == "ok" { + tm.Status = global.StatusInstall + } + err = db.AddRedisExporter(tm) + if err != nil { + logger.Error(err.Error()) + } + } return ret, nil } -func UnInstall(param *common.Batch) ([]interface{}, error) { +func UnInstall(param *common.Batch) ([]db.RedisExportTarget, error) { cmd := "systemctl stop redis_exporter && yum autoremove -y redis_exporter" cmdResults, err := global.GlobalClient.RunScript(param, cmd) if err != nil { @@ -71,6 +77,15 @@ func UnInstall(param *common.Batch) ([]interface{}, error) { if err != nil { return nil, err } + for _, tm := range ret { + if tm.Status == "ok" { + tm.Status = global.StatusRemove + } + err = db.AddRedisExporter(tm) + if err != nil { + logger.Error(err.Error()) + } + } return ret, nil } -- Gitee