From 85834feb507c88c2989da9073a7b5627b8a2f1c9 Mon Sep 17 00:00:00 2001 From: zhanghan Date: Mon, 25 Dec 2023 16:40:33 +0800 Subject: [PATCH] Add code logic for saving tasks; Add interface to query task list --- atune/server/controller/task.go | 24 +++++++++++++++ atune/server/dao/taskdao.go | 42 +++++++++++++++++++++++++ atune/server/db/db.go | 1 + atune/server/global/global.go | 28 +++-------------- atune/server/model/common.go | 29 ++++++++++++----- atune/server/router/router.go | 6 +++- atune/server/service/taskservice.go | 48 +++++++++++++++++++++++++++++ 7 files changed, 146 insertions(+), 32 deletions(-) create mode 100644 atune/server/controller/task.go create mode 100644 atune/server/dao/taskdao.go create mode 100644 atune/server/service/taskservice.go diff --git a/atune/server/controller/task.go b/atune/server/controller/task.go new file mode 100644 index 00000000..0bbe7a45 --- /dev/null +++ b/atune/server/controller/task.go @@ -0,0 +1,24 @@ +package controller + +import ( + "gitee.com/openeuler/PilotGo/sdk/response" + "github.com/gin-gonic/gin" + "openeuler.org/PilotGo/atune-plugin/service" +) + +func TaskLists(c *gin.Context) { + query := &response.PaginationQ{} + err := c.ShouldBindQuery(query) + if err != nil { + response.Fail(c, nil, err.Error()) + return + } + + data, total, err := service.QueryTaskLists(query) + if err != nil { + response.Fail(c, nil, err.Error()) + return + } + + response.DataPagination(c, data, total, query) +} diff --git a/atune/server/dao/taskdao.go b/atune/server/dao/taskdao.go new file mode 100644 index 00000000..1e7a60de --- /dev/null +++ b/atune/server/dao/taskdao.go @@ -0,0 +1,42 @@ +package dao + +import ( + "time" + + "gitee.com/openeuler/PilotGo/sdk/response" + "openeuler.org/PilotGo/atune-plugin/db" + "openeuler.org/PilotGo/atune-plugin/global" + "openeuler.org/PilotGo/atune-plugin/model" +) + +func QueryTaskLists(query *response.PaginationQ) ([]*model.Tasks, int64, error) { + var tasks []*model.Tasks + if err := db.MySQL().Preload("RunResults").Order("id desc").Limit(query.PageSize).Offset((query.Page - 1) * query.PageSize).Find(&tasks).Error; err != nil { + return nil, 0, err + } + + var total int64 + if err := db.MySQL().Model(&tasks).Count(&total).Error; err != nil { + return nil, 0, err + } + return tasks, total, nil +} + +func SaveTask(task *model.Tasks) (int, error) { + if err := db.MySQL().Create(&task).Error; err != nil { + return 0, err + } + return task.ID, nil +} +func UpdateTask(dbtaskid int) error { + var t model.Tasks + update_time := time.Now().Format("2006-01-02 15:04:05") + task := model.Tasks{ + TaskStatus: global.Completed, + UpdateTime: update_time, + } + if err := db.MySQL().Model(&t).Where("id = ?", dbtaskid).Updates(&task).Error; err != nil { + return err + } + return nil +} diff --git a/atune/server/db/db.go b/atune/server/db/db.go index cb16f7de..ff4482f3 100644 --- a/atune/server/db/db.go +++ b/atune/server/db/db.go @@ -43,6 +43,7 @@ func MysqldbInit(conf *config.MysqlDBInfo) error { } MySQL().AutoMigrate(&model.Tunes{}) MySQL().AutoMigrate(&model.RunResult{}) + MySQL().AutoMigrate(&model.Tasks{}) return nil } diff --git a/atune/server/global/global.go b/atune/server/global/global.go index 85cae14d..d7636f8b 100644 --- a/atune/server/global/global.go +++ b/atune/server/global/global.go @@ -1,25 +1,7 @@ package global -var TuneObjects = []string{ - "compress", - "compress_Except", - "ffmpeg", - "fio", - "gcc_compile", - "go_gc", - "graphicsmagick", - "iozone", - "key_parameters_select", - "key_parameters_select_variant", - "mariadb", - "memcached", - "memory", - "mysql_sysbench", - "nginx", - "openGauss", - "redis", - "spark", - "tensorflow_train", - "tidb", - "tomcat", -} +const ( + // 任务状态 + Completed = "已完成" + Executing = "执行中" +) diff --git a/atune/server/model/common.go b/atune/server/model/common.go index 7db4c655..c80942a0 100644 --- a/atune/server/model/common.go +++ b/atune/server/model/common.go @@ -11,12 +11,25 @@ type Tunes struct { } type RunResult struct { - ID int `gorm:"primary_key;AUTO_INCREMENT" json:"id"` - MachineUUID string `json:"machine_uuid"` - MachineIP string `json:"machine_ip"` - Command string `json:"command"` - RetCode int `json:"retcode"` - Stdout string `json:"stdout"` - Stderr string `json:"stderr"` - ResponseError string `json:"resError"` + ID int `gorm:"primary_key;AUTO_INCREMENT" json:"id"` + TaskID int `json:"task_id"` + MachineUUID string `json:"machine_uuid"` + MachineIP string `json:"machine_ip"` + Command string `json:"command"` + RetCode int `json:"retcode"` + Stdout string `json:"stdout"` + Stderr string `json:"stderr"` + IsUpdate bool `json:"is_update"` +} + +type Tasks struct { + ID int `gorm:"primary_key;AUTO_INCREMENT" json:"id"` + TuneID int `json:"tune_id"` + TaskName string `json:"task_name"` + Script string `json:"command"` + TaskStatus string `json:"task_status"` + CreateTime string `json:"create_time"` + UpdateTime string `json:"update_time"` + RunResults []RunResult `gorm:"foreignKey:TaskID" json:"results"` + Tune Tunes `gorm:"foreignKey:ID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;" json:"tune"` } diff --git a/atune/server/router/router.go b/atune/server/router/router.go index c85d9562..f08f7df5 100644 --- a/atune/server/router/router.go +++ b/atune/server/router/router.go @@ -55,10 +55,14 @@ func registerAPIs(router *gin.Engine) { dbtune.GET("search", controller.SearchTune) } + task := router.Group("/plugin/" + plugin.GlobalClient.PluginInfo.Name) + { + task.GET("tasks", controller.TaskLists) + } + restune := router.Group("/plugin/" + plugin.GlobalClient.PluginInfo.Name) { restune.POST("run", controller.RunCommand) - restune.GET("results", controller.QueryResults) restune.DELETE("result_delete", controller.DeleteResult) restune.GET("result_search", controller.SearchResult) } diff --git a/atune/server/service/taskservice.go b/atune/server/service/taskservice.go new file mode 100644 index 00000000..10b5cab2 --- /dev/null +++ b/atune/server/service/taskservice.go @@ -0,0 +1,48 @@ +package service + +import ( + "errors" + "time" + + "gitee.com/openeuler/PilotGo/sdk/logger" + "gitee.com/openeuler/PilotGo/sdk/response" + "openeuler.org/PilotGo/atune-plugin/dao" + "openeuler.org/PilotGo/atune-plugin/global" + "openeuler.org/PilotGo/atune-plugin/model" +) + +func QueryTaskLists(query *response.PaginationQ) ([]*model.Tasks, int, error) { + if data, total, err := dao.QueryTaskLists(query); err != nil { + return nil, 0, err + } else { + return data, int(total), nil + } +} + +func SaveTask(cmd string, task_name string, uuids []string) (int, error) { + creat_time := time.Now().Format("2006-01-02 15:04:05") + task := &model.Tasks{ + TaskName: task_name, + Script: cmd, + TaskStatus: global.Executing, + CreateTime: creat_time, + } + + taskid, err := dao.SaveTask(task) + if err != nil { + return 0, errors.New("保存执行任务失败:" + err.Error()) + } + + for _, uuid := range uuids { + result := &model.RunResult{ + TaskID: taskid, + MachineUUID: uuid, + Command: cmd, + IsUpdate: false, + } + if err := dao.SaveRusult(result); err != nil { + logger.Error("save result uuid failed: %v", err.Error()) + } + } + return taskid, nil +} -- Gitee