From 34eec807503c9dd9a9a6af9777bc3713a7b4e732 Mon Sep 17 00:00:00 2001 From: zhanghan Date: Wed, 27 Dec 2023 17:44:09 +0800 Subject: [PATCH] add search task and delete task for atune plugin --- atune/server/controller/task.go | 33 +++++++++++++++++++ atune/server/dao/taskdao.go | 27 +++++++++++++++ atune/server/go.mod | 2 +- atune/server/go.sum | 8 +++++ atune/server/model/common.go | 2 +- atune/server/router/router.go | 3 ++ atune/server/service/taskservice.go | 21 ++++++++++++ .../openeuler/PilotGo/sdk/common/script.go | 1 - .../PilotGo/sdk/plugin/client/client.go | 1 - .../PilotGo/sdk/plugin/client/handler.go | 9 +++-- .../PilotGo/sdk/plugin/client/heartbeat.go | 8 ++--- atune/server/vendor/modules.txt | 2 +- 12 files changed, 106 insertions(+), 11 deletions(-) diff --git a/atune/server/controller/task.go b/atune/server/controller/task.go index 0bbe7a45..17d7b1e0 100644 --- a/atune/server/controller/task.go +++ b/atune/server/controller/task.go @@ -22,3 +22,36 @@ func TaskLists(c *gin.Context) { response.DataPagination(c, data, total, query) } + +func DeleteTask(c *gin.Context) { + taskdel := struct { + TaskID []int `json:"ids"` + }{} + if err := c.Bind(&taskdel); err != nil { + response.Fail(c, nil, "parameter error") + return + } + + if err := service.DeleteTask(taskdel.TaskID); err != nil { + response.Fail(c, nil, err.Error()) + return + } + response.Success(c, nil, "已删除调优对象模板") +} + +func SearchTask(c *gin.Context) { + search := c.Query("search") + + query := &response.PaginationQ{} + if err := c.ShouldBindQuery(query); err != nil { + response.Fail(c, nil, err.Error()) + return + } + + data, total, err := service.SearchTask(search, 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 index e22849f6..96906519 100644 --- a/atune/server/dao/taskdao.go +++ b/atune/server/dao/taskdao.go @@ -39,3 +39,30 @@ func UpdateTask(dbtaskid int) error { } return nil } + +func DeleteTask(taskId int) error { + var task model.Tasks + + // 手动删除关联的 RunResults 数据 + if err := db.MySQL().Unscoped().Where("task_id = ?", taskId).Delete(&model.RunResult{}).Error; err != nil { + return err + } + + if err := db.MySQL().Unscoped().Where("id = ?", taskId).Delete(&task).Error; err != nil { + return err + } + return nil +} + +func SearchTask(search string, query *response.PaginationQ) ([]*model.Tasks, int64, error) { + var task []*model.Tasks + if err := db.MySQL().Limit(query.PageSize).Offset((query.Page-1)*query.PageSize).Where("task_name LIKE ? OR script LIKE ? OR task_status LIKE ?", "%"+search+"%", "%"+search+"%", "%"+search+"%").Find(&task).Error; err != nil { + return nil, 0, err + } + + var total int64 + if err := db.MySQL().Where("task_name LIKE ? OR script LIKE ? OR task_status LIKE ?", "%"+search+"%", "%"+search+"%", "%"+search+"%").Model(&task).Count(&total).Error; err != nil { + return nil, 0, err + } + return task, total, nil +} diff --git a/atune/server/go.mod b/atune/server/go.mod index b5c65386..9a4026bf 100644 --- a/atune/server/go.mod +++ b/atune/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-20231225071221-260195e4ee3e + gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227075111-fc150174f73a 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/atune/server/go.sum b/atune/server/go.sum index ac3c66b8..7c7a7c5f 100644 --- a/atune/server/go.sum +++ b/atune/server/go.sum @@ -4,6 +4,14 @@ gitee.com/openeuler/PilotGo/sdk v0.0.0-20231220075944-c00326991801 h1:D7DF8kmhHZ gitee.com/openeuler/PilotGo/sdk v0.0.0-20231220075944-c00326991801/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= gitee.com/openeuler/PilotGo/sdk v0.0.0-20231225071221-260195e4ee3e h1:UKsQvDsAqPY/Zsgi58wzsLwPikS66e+wH6oeEGGMx80= gitee.com/openeuler/PilotGo/sdk v0.0.0-20231225071221-260195e4ee3e/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231226100554-760a57ca0a35 h1:fkTHiDG25bsB9Kt6ruZkFjteA4Ppekk+TJz8xgXD7uI= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231226100554-760a57ca0a35/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227031908-2bcdb8153727 h1:WhtjNRVlIts1sNAP3FPQ+LhD6UPqt2jYGaCBbtQdOeA= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227031908-2bcdb8153727/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227070920-c289614a2e10 h1:RUbvPYH43bj1Ebu3w32oWdoQLOvlJRfQVzRE319uu/Q= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227070920-c289614a2e10/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227075111-fc150174f73a h1:vCMqSAe5nX8dX1tGH1MwTlMWljcziEV6Gw83Gu6KYqE= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227075111-fc150174f73a/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/atune/server/model/common.go b/atune/server/model/common.go index b5f1c27a..a6229263 100644 --- a/atune/server/model/common.go +++ b/atune/server/model/common.go @@ -33,6 +33,6 @@ type Tasks struct { TaskStatus string `json:"task_status"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` - RunResults []RunResult `gorm:"foreignKey:TaskID" json:"results"` + RunResults []RunResult `gorm:"foreignKey:TaskID;constraint:OnDelete:CASCADE;" json:"results"` Tune Tunes `gorm:"foreignKey:TuneID;constraint:OnUpdate:CASCADE,OnDelete:RESTRICT;" json:"tune"` } diff --git a/atune/server/router/router.go b/atune/server/router/router.go index 80a7ddc2..2b977e08 100644 --- a/atune/server/router/router.go +++ b/atune/server/router/router.go @@ -58,6 +58,9 @@ func registerAPIs(router *gin.Engine) { task := router.Group("/plugin/" + plugin.GlobalClient.PluginInfo.Name) { task.GET("tasks", controller.TaskLists) + + task.DELETE("task_delete", controller.DeleteTask) + task.GET("task_search", controller.SearchTask) } restune := router.Group("/plugin/" + plugin.GlobalClient.PluginInfo.Name) diff --git a/atune/server/service/taskservice.go b/atune/server/service/taskservice.go index 91d7684b..660bdd19 100644 --- a/atune/server/service/taskservice.go +++ b/atune/server/service/taskservice.go @@ -2,6 +2,7 @@ package service import ( "errors" + "strconv" "time" "gitee.com/openeuler/PilotGo/sdk/logger" @@ -46,3 +47,23 @@ func SaveTask(cmd string, task_name string, uuids []string, tuneId int) (int, er } return taskid, nil } +func DeleteTask(taskId []int) error { + if len(taskId) == 0 { + return errors.New("请输入调优模板ID") + } + + for _, tid := range taskId { + if err := dao.DeleteTask(tid); err != nil { + logger.Error("%v", strconv.Itoa(tid)+"未删除成功") + } + } + return nil +} + +func SearchTask(search string, query *response.PaginationQ) ([]*model.Tasks, int, error) { + if data, total, err := dao.SearchTask(search, query); err != nil { + return nil, 0, err + } else { + return data, int(total), nil + } +} diff --git a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/script.go b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/script.go index f63e6da0..8c614453 100644 --- a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/script.go +++ b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/script.go @@ -16,5 +16,4 @@ type CmdResult struct { type CmdStruct struct { Batch *Batch `json:"batch"` Command string `json:"command"` - CmdType string `json:"cmd_type"` } diff --git a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/client.go b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/client.go index 850f0d5c..c35c4605 100644 --- a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/client.go +++ b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/client.go @@ -95,7 +95,6 @@ func (client *Client) RegisterHandlers(router *gin.Engine) { // TODO: start command result process service client.startEventProcessor() client.startCommandResultProcessor() - client.SendHeartbeat() } func (client *Client) OnGetTags(callback GetTagsCallback) { diff --git a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/handler.go b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/handler.go index 2ad545b1..a720319f 100644 --- a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/handler.go +++ b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/handler.go @@ -66,8 +66,13 @@ func BindHandler(c *gin.Context) { response.Fail(c, gin.H{"status": false}, "client信息错误") return } - client.server = strings.Split(c.Request.RemoteAddr, ":")[0] + ":" + port - + server := strings.Split(c.Request.RemoteAddr, ":")[0] + ":" + port + if client.server == "" { + client.server = server + } else if client.server != "" && client.server != server { + logger.Error("已有PilotGo-server与此插件绑定") + } + client.sendHeartBeat() response.Success(c, nil, "bind server success") } diff --git a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/heartbeat.go b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/heartbeat.go index 2c393a19..b0e16977 100644 --- a/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/heartbeat.go +++ b/atune/server/vendor/gitee.com/openeuler/PilotGo/sdk/plugin/client/heartbeat.go @@ -21,8 +21,8 @@ type PluginStatus struct { LastConnect time.Time } -func (client *Client) SendHeartbeat() { - clientID := client.PluginInfo.Url + "+" + client.PluginInfo.Name +func (client *Client) sendHeartBeat() { + clientID := client.PluginInfo.Url go func() { for { err := client.sendHeartbeat(clientID) @@ -36,9 +36,9 @@ func (client *Client) SendHeartbeat() { func (client *Client) sendHeartbeat(clientID string) error { p := &struct { - ClientID string `json:"clientID"` + PluginUrl string `json:"clientID"` }{ - ClientID: clientID, + PluginUrl: clientID, } ServerUrl := "http://" + client.Server() + "/api/v1/pluginapi/heartbeat" diff --git a/atune/server/vendor/modules.txt b/atune/server/vendor/modules.txt index b2f9c0bd..127ad19d 100644 --- a/atune/server/vendor/modules.txt +++ b/atune/server/vendor/modules.txt @@ -1,4 +1,4 @@ -# gitee.com/openeuler/PilotGo/sdk v0.0.0-20231225071221-260195e4ee3e +# gitee.com/openeuler/PilotGo/sdk v0.0.0-20231227075111-fc150174f73a ## explicit; go 1.17 gitee.com/openeuler/PilotGo/sdk/common gitee.com/openeuler/PilotGo/sdk/logger -- Gitee