added batch run tasks

This commit is contained in:
marvzhang
2020-07-17 15:58:55 +08:00
parent 316a39fe01
commit 9d69b87312
3 changed files with 84 additions and 4 deletions

View File

@@ -240,6 +240,7 @@ func main() {
authGroup.GET("/tasks", routes.GetTaskList) // 任务列表
authGroup.GET("/tasks/:id", routes.GetTask) // 任务详情
authGroup.PUT("/tasks", routes.PutTask) // 派发任务
authGroup.PUT("/tasks/batch", routes.PutBatchTasks) // 批量派发任务
authGroup.DELETE("/tasks/:id", routes.DeleteTask) // 删除任务
authGroup.DELETE("/tasks", routes.DeleteSelectedTask) // 删除多个任务
authGroup.DELETE("/tasks_by_status", routes.DeleteTaskByStatus) // 删除指定状态的任务

View File

@@ -31,9 +31,10 @@ type Task struct {
ScheduleId bson.ObjectId `json:"schedule_id" bson:"schedule_id"`
// 前端数据
SpiderName string `json:"spider_name"`
NodeName string `json:"node_name"`
Username string `json:"username"`
SpiderName string `json:"spider_name"`
NodeName string `json:"node_name"`
Username string `json:"username"`
NodeIds []string `json:"node_ids"`
UserId bson.ObjectId `json:"user_id" bson:"user_id"`
CreateTs time.Time `json:"create_ts" bson:"create_ts"`
@@ -508,4 +509,3 @@ func UpdateTaskErrorLogs(taskId string, errorRegexPattern string) error {
return nil
}

View File

@@ -202,6 +202,85 @@ func PutTask(c *gin.Context) {
HandleSuccessData(c, taskIds)
}
func PutBatchTasks(c *gin.Context) {
var tasks []model.Task
if err := c.ShouldBindJSON(&tasks); err != nil {
HandleError(http.StatusOK, c, err)
return
}
var taskIds []string
for _, t := range tasks {
if t.RunType == constants.RunTypeAllNodes {
// 所有节点
nodes, err := model.GetNodeList(nil)
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
for _, node := range nodes {
t := model.Task{
SpiderId: t.SpiderId,
NodeId: node.Id,
Param: t.Param,
UserId: services.GetCurrentUserId(c),
RunType: constants.RunTypeAllNodes,
ScheduleId: bson.ObjectIdHex(constants.ObjectIdNull),
}
id, err := services.AddTask(t)
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
taskIds = append(taskIds, id)
}
} else if t.RunType == constants.RunTypeRandom {
// 随机
t := model.Task{
SpiderId: t.SpiderId,
Param: t.Param,
UserId: services.GetCurrentUserId(c),
RunType: constants.RunTypeRandom,
ScheduleId: bson.ObjectIdHex(constants.ObjectIdNull),
}
id, err := services.AddTask(t)
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
taskIds = append(taskIds, id)
} else if t.RunType == constants.RunTypeSelectedNodes {
// 指定节点
for _, nodeId := range t.NodeIds {
t := model.Task{
SpiderId: t.SpiderId,
NodeId: bson.ObjectIdHex(nodeId),
Param: t.Param,
UserId: services.GetCurrentUserId(c),
RunType: constants.RunTypeSelectedNodes,
ScheduleId: bson.ObjectIdHex(constants.ObjectIdNull),
}
id, err := services.AddTask(t)
if err != nil {
HandleError(http.StatusInternalServerError, c, err)
return
}
taskIds = append(taskIds, id)
}
} else {
HandleErrorF(http.StatusInternalServerError, c, "invalid run_type")
return
}
}
c.JSON(http.StatusOK, Response{
Status: "ok",
Message: "success",
Data: taskIds,
})
}
// @Summary Delete task
// @Description Delete task
// @Tags task