From a45001dc5d6db0e90b03ad07ed89352c73e98e6e Mon Sep 17 00:00:00 2001 From: zhanghan2021 Date: Fri, 19 Jan 2024 17:48:27 +0800 Subject: [PATCH] update vendor and get machine info by uuid --- server/controller/task.go | 16 ++++++-- server/controller/tune.go | 9 +++++ server/dao/atunemanagedao.go | 1 - server/dao/runresultdao.go | 10 ++++- server/dao/tunedao.go | 8 ++++ server/go.mod | 2 +- server/go.sum | 2 + server/model/common.go | 13 +++++- server/router/router.go | 1 + server/service/atunemanageservice.go | 1 - server/service/resultservice.go | 38 +++++++++++++++--- server/service/tuneservice.go | 18 +++++++++ .../PilotGo/sdk/plugin/client/machine.go | 40 +++++++++++++++++++ server/vendor/modules.txt | 2 +- 14 files changed, 143 insertions(+), 18 deletions(-) diff --git a/server/controller/task.go b/server/controller/task.go index 73a082c..04e2718 100644 --- a/server/controller/task.go +++ b/server/controller/task.go @@ -1,23 +1,31 @@ package controller import ( + "strconv" + "gitee.com/openeuler/PilotGo/sdk/logger" "gitee.com/openeuler/PilotGo/sdk/response" "github.com/gin-gonic/gin" + "openeuler.org/PilotGo/atune-plugin/dao" "openeuler.org/PilotGo/atune-plugin/service" ) func StartTask(c *gin.Context) { d := &struct { - MachineUUIDs []string `json:"machine_uuids"` - TuneID int `json:"tune_id"` - TaskID int `json:"taskId"` + TuneID int `json:"tuneId"` + TaskID int `json:"taskId"` }{} if err := c.ShouldBind(d); err != nil { logger.Debug("绑定批次参数失败:%s", err) response.Fail(c, nil, "parameter error") return } + + machine_uuids, err := dao.GetResultUUIDByTaskId(strconv.Itoa(d.TaskID)) + if err != nil || len(machine_uuids) == 0 { + response.Fail(c, nil, "未找到相应的机器") + return + } commands, err := service.GetCommandByID(d.TuneID) if err != nil { response.Fail(c, nil, err.Error()) @@ -28,7 +36,7 @@ func StartTask(c *gin.Context) { response.Fail(c, nil, err.Error()) return } - err = service.RunTask(d.TaskID, d.TuneID, commands, d.MachineUUIDs) + err = service.RunTask(d.TaskID, d.TuneID, commands, machine_uuids) if err != nil { response.Fail(c, nil, err.Error()) return diff --git a/server/controller/tune.go b/server/controller/tune.go index 4b4572d..7a40188 100644 --- a/server/controller/tune.go +++ b/server/controller/tune.go @@ -129,3 +129,12 @@ func SearchTune(c *gin.Context) { } response.DataPagination(c, data, total, query) } + +func GetTuneMachines(c *gin.Context) { + data, err := service.QueryTuneMachines() + if err != nil { + response.Fail(c, nil, err.Error()) + return + } + response.Success(c, data, "获取到可调优机器") +} diff --git a/server/dao/atunemanagedao.go b/server/dao/atunemanagedao.go index ed06308..010eced 100644 --- a/server/dao/atunemanagedao.go +++ b/server/dao/atunemanagedao.go @@ -19,7 +19,6 @@ func IsExist(uuid string) (bool, error) { func AddAtuneClientList(ac *model.AtuneClient) error { a := model.AtuneClient{ MachineUUID: ac.MachineUUID, - MachineIP: ac.MachineIP, } err := db.MySQL().Save(&a).Error if err != nil { diff --git a/server/dao/runresultdao.go b/server/dao/runresultdao.go index 58a085e..e6c85f2 100644 --- a/server/dao/runresultdao.go +++ b/server/dao/runresultdao.go @@ -45,11 +45,17 @@ func DeleteResult(resultId int) error { return nil } -func SearchResult(taskId string) ([]*model.RunResult, error) { +func SearchResult(taskId, machine_uuid string) ([]*model.RunResult, error) { var result []*model.RunResult - if err := db.MySQL().Where("task_id = ?", taskId).Find(&result).Error; err != nil { + if err := db.MySQL().Where("task_id = ? AND machine_uuid = ?", taskId, machine_uuid).Find(&result).Error; err != nil { return []*model.RunResult{}, nil } return result, nil } + +func GetResultUUIDByTaskId(taskId string) ([]string, error) { + var uuids []string + err := db.MySQL().Model(&model.RunResult{}).Distinct("machine_uuid").Where("task_id = ?", taskId).Pluck("machine_uuid", &uuids).Error + return uuids, err +} diff --git a/server/dao/tunedao.go b/server/dao/tunedao.go index 8ed04f6..774a52f 100644 --- a/server/dao/tunedao.go +++ b/server/dao/tunedao.go @@ -77,3 +77,11 @@ func SearchTune(search string, query *response.PaginationQ) ([]*model.Tunes, int } return tune, total, nil } + +func QueryTuneMachines() ([]*model.AtuneClient, error) { + var ac []*model.AtuneClient + if err := db.MySQL().Find(&ac).Error; err != nil { + return []*model.AtuneClient{}, err + } + return ac, nil +} diff --git a/server/go.mod b/server/go.mod index 351d0ca..b1c91e8 100644 --- a/server/go.mod +++ b/server/go.mod @@ -3,7 +3,7 @@ module openeuler.org/PilotGo/atune-plugin go 1.18 require ( - gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119031301-10921c4f0434 + gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119073421-18be29f9d1eb github.com/gin-gonic/gin v1.9.1 gopkg.in/yaml.v2 v2.4.0 gorm.io/driver/mysql v1.5.1 diff --git a/server/go.sum b/server/go.sum index 20a5ab9..b6c4263 100644 --- a/server/go.sum +++ b/server/go.sum @@ -1,5 +1,7 @@ gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119031301-10921c4f0434 h1:owh3m67r7EMCiktmIXjgLJ/dI/wZVYDpurKpXBDGfXE= gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119031301-10921c4f0434/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119073421-18be29f9d1eb h1:eacdBijlrmerXMnAoWFGMrHeqqouS2do6o/97GtfuM0= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119073421-18be29f9d1eb/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= diff --git a/server/model/common.go b/server/model/common.go index 5a2500f..864a192 100644 --- a/server/model/common.go +++ b/server/model/common.go @@ -18,8 +18,9 @@ type RunResult struct { ID int `gorm:"primary_key;AUTO_INCREMENT" json:"id"` TaskID int `json:"task_id"` MachineUUID string `json:"machine_uuid"` - MachineIP string `json:"machine_ip"` CommandType string `json:"command_type"` + StartTime string `json:"startTime"` + EndTime string `json:"endTime"` RetCode int `json:"retcode"` Stdout string `json:"stdout"` Stderr string `json:"stderr"` @@ -43,7 +44,6 @@ type Tasks struct { type AtuneClient struct { ID int `gorm:"primary_key;AUTO_INCREMENT" json:"id"` MachineUUID string `json:"machine_uuid"` - MachineIP string `json:"machine_ip"` } type TaskCommand struct { @@ -51,3 +51,12 @@ type TaskCommand struct { TuneCommand string `json:"tune"` RestoreCommand string `json:"restore"` } + +type Results struct { + TaskID string `json:"taskId"` + MachineUUID string `json:"machineUUID"` + MachineIP string `json:"machineIp"` + CPUArch string `json:"cpuArch"` + OS string `json:"os"` + Result []*RunResult `json:"result"` +} diff --git a/server/router/router.go b/server/router/router.go index bf7f9c2..fb3ac62 100644 --- a/server/router/router.go +++ b/server/router/router.go @@ -56,6 +56,7 @@ func registerAPIs(router *gin.Engine) { dbtune.POST("update_tune", controller.UpdateTune) dbtune.DELETE("delete_tune", controller.DeleteTune) dbtune.GET("search_tune", controller.SearchTune) + dbtune.GET("tune_machine", controller.GetTuneMachines) } task := router.Group("/plugin/" + plugin.GlobalClient.PluginInfo.Name) diff --git a/server/service/atunemanageservice.go b/server/service/atunemanageservice.go index 09e0404..cf119d3 100644 --- a/server/service/atunemanageservice.go +++ b/server/service/atunemanageservice.go @@ -23,7 +23,6 @@ const ( func AtuneManage(res *common.CmdResult, command_type string) error { result := &model.AtuneClient{ MachineUUID: res.MachineUUID, - MachineIP: res.MachineIP, } logger.Info("A-Tune客户端安装状态:\n%v", res) ok, err := dao.IsExist(res.MachineUUID) diff --git a/server/service/resultservice.go b/server/service/resultservice.go index 8523def..087fa50 100644 --- a/server/service/resultservice.go +++ b/server/service/resultservice.go @@ -3,11 +3,13 @@ package service import ( "errors" "strconv" + "time" "gitee.com/openeuler/PilotGo/sdk/common" "gitee.com/openeuler/PilotGo/sdk/logger" "openeuler.org/PilotGo/atune-plugin/dao" "openeuler.org/PilotGo/atune-plugin/model" + "openeuler.org/PilotGo/atune-plugin/plugin" ) const ( @@ -46,7 +48,6 @@ func processResult(dbtaskid int, res *common.CmdResult, commandType string) (str commandResultStatus = IsSuccess_fail } result := &model.RunResult{ - MachineIP: res.MachineIP, RetCode: res.RetCode, Stdout: res.Stdout, Stderr: res.Stderr, @@ -63,6 +64,7 @@ func processResult(dbtaskid int, res *common.CmdResult, commandType string) (str func UpdateResultStatusToRunning(dbtaskid int, uuid string, commandType string) error { result := &model.RunResult{ IsSuccess: IsSuccess_running, + StartTime: time.Now().Format("2006-01-02 15:04:05"), } err := dao.UpdateResult(dbtaskid, uuid, commandType, result) @@ -75,6 +77,7 @@ func UpdateResultStatusToRunning(dbtaskid int, uuid string, commandType string) func UpdateResultStatusForPrepare(dbtaskid int, uuid string, commandType string, resultStatus string) error { result := &model.RunResult{ IsSuccess: resultStatus, + EndTime: time.Now().Format("2006-01-02 15:04:05"), } err := dao.UpdateResult(dbtaskid, uuid, commandType, result) @@ -95,6 +98,7 @@ func UpdateResultStatusForPrepare(dbtaskid int, uuid string, commandType string, func UpdateResultStatusForTune(dbtaskid int, uuid string, commandType string, resultStatus string) error { result := &model.RunResult{ IsSuccess: resultStatus, + EndTime: time.Now().Format("2006-01-02 15:04:05"), } err := dao.UpdateResult(dbtaskid, uuid, commandType, result) @@ -111,6 +115,7 @@ func UpdateResultStatusForTune(dbtaskid int, uuid string, commandType string, re func UpdateResultStatus(dbtaskid int, uuid string, commandType string, resultStatus string) error { result := &model.RunResult{ IsSuccess: resultStatus, + EndTime: time.Now().Format("2006-01-02 15:04:05"), } err := dao.UpdateResult(dbtaskid, uuid, commandType, result) @@ -124,10 +129,31 @@ func UpdateResultStatus(dbtaskid int, uuid string, commandType string, resultSta } return nil } -func SearchResultByTaskId(taskId string) ([]*model.RunResult, error) { - if data, err := dao.SearchResult(taskId); err != nil { - return nil, err - } else { - return data, nil +func SearchResultByTaskId(taskId string) ([]*model.Results, error) { + machine_uuids, err := dao.GetResultUUIDByTaskId(taskId) + if err != nil || len(machine_uuids) == 0 { + return []*model.Results{}, err + } + + var results []*model.Results + for _, uuid := range machine_uuids { + machine_info, err := plugin.GlobalClient.MachineInfoByUUID(uuid) + if err != nil { + return nil, err + } + result, err := dao.SearchResult(taskId, uuid) + if err != nil { + return nil, err + } + r := &model.Results{ + TaskID: taskId, + MachineUUID: uuid, + MachineIP: machine_info.IP, + CPUArch: machine_info.CPUArch, + OS: machine_info.OS, + Result: result, + } + results = append(results, r) } + return results, nil } diff --git a/server/service/tuneservice.go b/server/service/tuneservice.go index cf79cbe..9aaabef 100644 --- a/server/service/tuneservice.go +++ b/server/service/tuneservice.go @@ -4,9 +4,11 @@ import ( "errors" "time" + "gitee.com/openeuler/PilotGo/sdk/common" "gitee.com/openeuler/PilotGo/sdk/response" "openeuler.org/PilotGo/atune-plugin/dao" "openeuler.org/PilotGo/atune-plugin/model" + "openeuler.org/PilotGo/atune-plugin/plugin" ) func GetCommandByID(tune_id int) (map[int]model.TaskCommand, error) { @@ -92,3 +94,19 @@ func SearchTune(search string, query *response.PaginationQ) ([]*model.Tunes, int return data, int(total), nil } } + +func QueryTuneMachines() (interface{}, error) { + ms, err := dao.QueryTuneMachines() + if err != nil || len(ms) == 0 { + return []*model.AtuneClient{}, err + } + var tuneMachines []*common.MachineNode + for _, machine := range ms { + machine_info, err := plugin.GlobalClient.MachineInfoByUUID(machine.MachineUUID) + if err != nil { + return nil, err + } + tuneMachines = append(tuneMachines, machine_info) + } + return tuneMachines, nil +} diff --git a/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/machine.go b/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/machine.go index 34acd4b..b28129a 100644 --- a/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/machine.go +++ b/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/machine.go @@ -27,3 +27,43 @@ func (c *Client) MachineList() ([]*common.MachineNode, error) { } return result.Data, nil } + +func (c *Client) MachineInfoByUUID(machine_uuid string) (*common.MachineNode, error) { + if !c.IsBind() { + return nil, errors.New("unbind PilotGo-server platform") + } + url := "http://" + c.Server() + "/api/v1/pluginapi/machine_info?machine_uuid=" + machine_uuid + r, err := httputils.Get(url, nil) + if err != nil { + return nil, err + } + + result := struct { + Code int `json:"code"` + Data *struct { + ID int `json:"id"` + Departid int `json:"departid"` + Departname string `json:"departname"` + IP string `json:"ip"` + UUID string `json:"uuid"` + CPU string `json:"cpu"` + Runstatus string `json:"runstatus"` + Maintstatus string `json:"maintstatus"` + Systeminfo string `json:"systeminfo"` + } `json:"data"` + }{} + if err := json.Unmarshal(r.Body, &result); err != nil { + return nil, err + } + + res := &common.MachineNode{ + UUID: machine_uuid, + Department: result.Data.Departname, + IP: result.Data.IP, + CPUArch: result.Data.CPU, + OS: result.Data.Systeminfo, + RunStatus: result.Data.Runstatus, + MaintStatus: result.Data.Maintstatus, + } + return res, nil +} diff --git a/server/vendor/modules.txt b/server/vendor/modules.txt index 8ccc13a..60d056d 100644 --- a/server/vendor/modules.txt +++ b/server/vendor/modules.txt @@ -1,4 +1,4 @@ -# gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119031301-10921c4f0434 +# gitee.com/openeuler/PilotGo/sdk v0.0.0-20240119073421-18be29f9d1eb ## explicit; go 1.17 gitee.com/openeuler/PilotGo/sdk/common gitee.com/openeuler/PilotGo/sdk/logger -- Gitee