From 9ac1bfc588d5206606e4bd4c81adfb62f16a4bab Mon Sep 17 00:00:00 2001 From: marvzhang Date: Sun, 29 Mar 2020 15:45:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E9=87=8D=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/main.go | 1 + backend/routes/task.go | 12 +++++++ backend/services/task.go | 29 +++++++++++++++++ .../components/Common/CrawlConfirmDialog.vue | 32 +++++++++++++++---- frontend/src/i18n/zh.js | 3 ++ frontend/src/store/modules/task.js | 6 ++++ frontend/src/views/task/TaskList.vue | 23 ++++++++++++- 7 files changed, 99 insertions(+), 7 deletions(-) diff --git a/backend/main.go b/backend/main.go index 110bdecc..b494a8b3 100644 --- a/backend/main.go +++ b/backend/main.go @@ -231,6 +231,7 @@ func main() { authGroup.GET("/tasks/:id/log", routes.GetTaskLog) // 任务日志 authGroup.GET("/tasks/:id/results", routes.GetTaskResults) // 任务结果 authGroup.GET("/tasks/:id/results/download", routes.DownloadTaskResultsCsv) // 下载任务结果 + authGroup.POST("/tasks/:id/restart", routes.RestartTask) // 重新开始任务 } // 定时任务 { diff --git a/backend/routes/task.go b/backend/routes/task.go index 585cf340..ff674766 100644 --- a/backend/routes/task.go +++ b/backend/routes/task.go @@ -353,3 +353,15 @@ func CancelTask(c *gin.Context) { } HandleSuccess(c) } + +func RestartTask(c *gin.Context) { + id := c.Param("id") + + uid := services.GetCurrentUserId(c) + + if err := services.RestartTask(id, uid); err != nil { + HandleError(http.StatusInternalServerError, c, err) + return + } + HandleSuccess(c) +} \ No newline at end of file diff --git a/backend/services/task.go b/backend/services/task.go index 6bbce5e3..07e9ab07 100644 --- a/backend/services/task.go +++ b/backend/services/task.go @@ -675,6 +675,35 @@ func CancelTask(id string) (err error) { return nil } +func RestartTask(id string, uid bson.ObjectId) (err error) { + // 获取任务 + oldTask, err := model.GetTask(id) + if err != nil { + log.Errorf("task not found, task id : %s, error: %s", id, err.Error()) + debug.PrintStack() + return err + } + + newTask := model.Task{ + SpiderId: oldTask.SpiderId, + NodeId: oldTask.NodeId, + Param: oldTask.Param, + UserId: uid, + RunType: oldTask.RunType, + ScheduleId: bson.ObjectIdHex(constants.ObjectIdNull), + } + + // 加入任务队列 + _, err = AddTask(newTask) + if err != nil { + log.Errorf(err.Error()) + debug.PrintStack() + return err + } + + return nil +} + func AddTask(t model.Task) (string, error) { // 生成任务ID id := uuid.NewV4() diff --git a/frontend/src/components/Common/CrawlConfirmDialog.vue b/frontend/src/components/Common/CrawlConfirmDialog.vue index 001be5b5..89765d2d 100644 --- a/frontend/src/components/Common/CrawlConfirmDialog.vue +++ b/frontend/src/components/Common/CrawlConfirmDialog.vue @@ -34,7 +34,8 @@ /> - + - +
- 我已阅读并同意 《免责声明》 所有内容 + + 我已阅读并同意 + + 《免责声明》 + + 所有内容 + + + I have read and agree all content in + + Disclaimer + +
- 跳转到任务详情页 + {{$t('Redirect to task detail')}} +
+
+ + {{$t('Retry (Maximum 5 Times)')}}
@@ -129,6 +145,7 @@ export default { nodeList: [] }, isAllowDisclaimer: true, + isRetry: false, isRedirect: true, isLoading: false, isParametersVisible: false, @@ -142,6 +159,9 @@ export default { ...mapState('setting', [ 'setting' ]), + ...mapState('lang', [ + 'lang' + ]), isConfirmDisabled () { if (this.isLoading) return true if (!this.isAllowDisclaimer) return true @@ -309,7 +329,7 @@ export default { margin-bottom: 20px; } - .crawl-confirm-dialog >>> .disclaimer-wrapper a { + .crawl-confirm-dialog >>> .checkbox-wrapper a { color: #409eff; } diff --git a/frontend/src/i18n/zh.js b/frontend/src/i18n/zh.js index c7fca4b4..25cf246d 100644 --- a/frontend/src/i18n/zh.js +++ b/frontend/src/i18n/zh.js @@ -266,6 +266,9 @@ export default { 'Empty results': '空结果', 'Navigate to Spider': '导航到爬虫', 'Navigate to Node': '导航到节点', + 'Restart': '重新运行', + 'Redirect to task detail': '跳转到任务详情页', + 'Retry (Maximum 5 Times)': '是否重试(最多 5 次)', // 任务列表 'Node': '节点', diff --git a/frontend/src/store/modules/task.js b/frontend/src/store/modules/task.js index 800c7bce..23a08bda 100644 --- a/frontend/src/store/modules/task.js +++ b/frontend/src/store/modules/task.js @@ -142,6 +142,12 @@ const actions = { ids: ids }) }, + restartTask ({ state, dispatch }, id) { + return request.post(`/tasks/${id}/restart`) + .then(() => { + dispatch('getTaskList') + }) + }, getTaskLog ({ state, commit }, id) { return request.get(`/tasks/${id}/log`) .then(response => { diff --git a/frontend/src/views/task/TaskList.vue b/frontend/src/views/task/TaskList.vue index e880e075..f1de5bc1 100644 --- a/frontend/src/views/task/TaskList.vue +++ b/frontend/src/views/task/TaskList.vue @@ -143,11 +143,15 @@ :width="col.width"> - +