From 07ce8e25fdbbde37dd52ab633ceba08f9f2028bd Mon Sep 17 00:00:00 2001 From: hantmac Date: Thu, 5 Dec 2019 15:12:32 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E6=96=B0=E5=A2=9E`authGroup.DELETE("/tasks?= =?UTF-8?q?=5Fby=5Fstatus",=20routes.DeleteTaskByStatus)=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=89=B9=E9=87=8F=E5=88=A0=E9=99=A4=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9A=84=E4=BB=BB=E5=8A=A1`=20-=20TaskListRe?= =?UTF-8?q?questData=E4=B8=AD=E5=A2=9E=E5=8A=A0Status=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E6=A0=B9=E6=8D=AEtask=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E8=BF=9B=E8=A1=8C=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/main.go | 3 ++- backend/model/task.go | 16 ++++++++++++++++ backend/routes/task.go | 28 +++++++++++++++++++++++++++- backend/services/log.go | 12 ++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/backend/main.go b/backend/main.go index 92863a20..3f87125d 100644 --- a/backend/main.go +++ b/backend/main.go @@ -47,7 +47,7 @@ func main() { panic(err) } log.Info("初始化定期清理日志配置成功") - }else { + } else { log.Info("默认未开启定期清理日志配置") } @@ -154,6 +154,7 @@ func main() { authGroup.GET("/tasks/:id", routes.GetTask) // 任务详情 authGroup.PUT("/tasks", routes.PutTask) // 派发任务 authGroup.DELETE("/tasks/:id", routes.DeleteTask) // 删除任务 + authGroup.DELETE("/tasks_by_status", routes.DeleteTaskByStatus) //删除指定状态的任务 authGroup.POST("/tasks/:id/cancel", routes.CancelTask) // 取消任务 authGroup.GET("/tasks/:id/log", routes.GetTaskLog) // 任务日志 authGroup.GET("/tasks/:id/results", routes.GetTaskResults) // 任务结果 diff --git a/backend/model/task.go b/backend/model/task.go index 64f06cd7..588db6b3 100644 --- a/backend/model/task.go +++ b/backend/model/task.go @@ -158,6 +158,8 @@ func GetTask(id string) (Task, error) { return task, nil } + + func AddTask(item Task) error { s, c := database.GetCol("tasks") defer s.Close() @@ -187,6 +189,20 @@ func RemoveTask(id string) error { return nil } +func RemoveTaskByStatus(status string) error { + tasks, err := GetTaskList(bson.M{"status": status}, 0, constants.Infinite, "-create_ts") + if err != nil { + log.Error("get tasks error:" + err.Error()) + } + for _, task := range tasks { + if err := RemoveTask(task.Id); err != nil { + log.Error("remove task error:" + err.Error()) + continue + } + } + return nil +} + // 删除task by spider_id func RemoveTaskBySpiderId(id bson.ObjectId) error { tasks, err := GetTaskList(bson.M{"spider_id": id}, 0, constants.Infinite, "-create_ts") diff --git a/backend/routes/task.go b/backend/routes/task.go index 9c0aa43f..f98cf357 100644 --- a/backend/routes/task.go +++ b/backend/routes/task.go @@ -9,7 +9,7 @@ import ( "encoding/csv" "github.com/gin-gonic/gin" "github.com/globalsign/mgo/bson" - uuid "github.com/satori/go.uuid" + "github.com/satori/go.uuid" "net/http" ) @@ -18,6 +18,7 @@ type TaskListRequestData struct { PageSize int `form:"page_size"` NodeId string `form:"node_id"` SpiderId string `form:"spider_id"` + Status string `form:"status"` } type TaskResultsRequestData struct { @@ -47,6 +48,10 @@ func GetTaskList(c *gin.Context) { if data.SpiderId != "" { query["spider_id"] = bson.ObjectIdHex(data.SpiderId) } + //新增根据任务状态获取task列表 + if data.Status != "" { + query["status"] = data.Status + } // 获取任务列表 tasks, err := model.GetTaskList(query, (data.PageNum-1)*data.PageSize, data.PageSize, "-create_ts") @@ -121,6 +126,27 @@ func PutTask(c *gin.Context) { }) } +func DeleteTaskByStatus(c *gin.Context) { + status := c.Query("status") + + //删除相应的日志文件 + if err := services.RemoveLogByTaskStatus(status); err != nil { + HandleError(http.StatusInternalServerError, c, err) + return + } + + //删除该状态下的task + if err := model.RemoveTaskByStatus(status); err != nil { + HandleError(http.StatusInternalServerError, c, err) + return + } + + c.JSON(http.StatusOK, Response{ + Status: "ok", + Message: "success", + }) +} + func DeleteTask(c *gin.Context) { id := c.Param("id") diff --git a/backend/services/log.go b/backend/services/log.go index 5b5cd7ae..60909c61 100644 --- a/backend/services/log.go +++ b/backend/services/log.go @@ -119,6 +119,18 @@ func RemoveLogByTaskId(id string) error { return nil } +func RemoveLogByTaskStatus(status string) error { + tasks, err := model.GetTaskList(bson.M{"status": status}, 0, constants.Infinite, "-create_ts") + if err != nil { + log.Error("get tasks error:" + err.Error()) + return err + } + for _, task := range tasks { + RemoveLogByTaskId(task.Id) + } + return nil +} + func removeLog(t model.Task) { if err := RemoveLocalLog(t.LogPath); err != nil { log.Errorf("remove local log error: %s", err.Error())