diff --git a/backend/model/log.go b/backend/model/log.go index 32d77694..07816d34 100644 --- a/backend/model/log.go +++ b/backend/model/log.go @@ -77,3 +77,16 @@ func GetLogItemList(filter interface{}, skip int, limit int, sortStr string) ([] return logItems, nil } + +func GetLogItemTotal(filter interface{}) (int, error) { + s, c := database.GetCol("logs") + defer s.Close() + + total, err := c.Find(filter).Count() + if err != nil { + debug.PrintStack() + return total, err + } + + return total, nil +} diff --git a/backend/model/task.go b/backend/model/task.go index 24076409..6c2a41b4 100644 --- a/backend/model/task.go +++ b/backend/model/task.go @@ -109,17 +109,30 @@ func (t *Task) GetResults(pageNum int, pageSize int) (results []interface{}, tot return } -func (t *Task) GetLogItems() (logItems []LogItem, err error) { +func (t *Task) GetLogItems(keyword string, page int, pageSize int) (logItems []LogItem, logTotal int, err error) { query := bson.M{ "task_id": t.Id, } - logItems, err = GetLogItemList(query, 0, constants.Infinite, "+_id") - if err != nil { - return logItems, err + if keyword != "" { + query["msg"] = bson.M{ + "$regex": bson.RegEx{ + Pattern: keyword, + Options: "i", + }, + } } - return logItems, nil + logItems, err = GetLogItemList(query, (page - 1) * pageSize, pageSize, "+_id") + if err != nil { + return logItems, logTotal, err + } + logTotal, err = GetLogItemTotal(query) + if err != nil { + return logItems, logTotal, err + } + + return logItems, logTotal, nil } func GetTaskList(filter interface{}, skip int, limit int, sortKey string) ([]Task, error) { diff --git a/backend/routes/task.go b/backend/routes/task.go index 9239d057..907a5ec9 100644 --- a/backend/routes/task.go +++ b/backend/routes/task.go @@ -234,13 +234,28 @@ func DeleteTask(c *gin.Context) { } func GetTaskLog(c *gin.Context) { + type RequestData struct { + PageNum int `form:"page_num"` + PageSize int `form:"page_size"` + Keyword string `form:"keyword"` + } id := c.Param("id") - logItems, err := services.GetTaskLog(id) + var reqData RequestData + if err := c.ShouldBindQuery(&reqData); err != nil { + HandleErrorF(http.StatusBadRequest, c, "invalid request") + return + } + logItems, logTotal, err := services.GetTaskLog(id, reqData.Keyword, reqData.PageNum, reqData.PageSize) if err != nil { HandleError(http.StatusInternalServerError, c, err) return } - HandleSuccessData(c, logItems) + c.JSON(http.StatusOK, ListResponse{ + Status: "ok", + Message: "success", + Data: logItems, + Total: logTotal, + }) } func GetTaskResults(c *gin.Context) { @@ -364,4 +379,4 @@ func RestartTask(c *gin.Context) { return } HandleSuccess(c) -} \ No newline at end of file +} diff --git a/backend/services/task.go b/backend/services/task.go index cf47c632..03b71b19 100644 --- a/backend/services/task.go +++ b/backend/services/task.go @@ -622,60 +622,19 @@ func SpiderFileCheck(t model.Task, spider model.Spider) error { return nil } -func GetTaskLog(id string) (logItems []model.LogItem, err error) { +func GetTaskLog(id string, keyword string, page int, pageSize int) (logItems []model.LogItem, logTotal int, err error) { task, err := model.GetTask(id) if err != nil { return } - logItems, err = task.GetLogItems() + // TODO: 日志分页 + logItems, logTotal, err = task.GetLogItems(keyword, page, pageSize) if err != nil { - return logItems, err + return logItems, logTotal, err } - return logItems, nil - - //if IsMasterNode(task.NodeId.Hex()) { - // if !utils.Exists(task.LogPath) { - // fileDir, err := MakeLogDir(task) - // - // if err != nil { - // log.Errorf(err.Error()) - // } - // - // fileP := GetLogFilePaths(fileDir, task) - // - // // 获取日志文件路径 - // fLog, err := os.Create(fileP) - // defer fLog.Close() - // if err != nil { - // log.Errorf("create task log file error: %s", fileP) - // debug.PrintStack() - // } - // task.LogPath = fileP - // if err := task.Save(); err != nil { - // log.Errorf(err.Error()) - // debug.PrintStack() - // } - // - // } - // // 若为主节点,获取本机日志 - // logBytes, err := model.GetLocalLog(task.LogPath) - // if err != nil { - // log.Errorf(err.Error()) - // logStr = err.Error() - // } else { - // logStr = utils.BytesToString(logBytes) - // } - // return logStr, err - //} - //// 若不为主节点,获取远端日志 - //logStr, err = GetRemoteLog(task) - //if err != nil { - // log.Errorf(err.Error()) - // - //} - //return logStr, err + return logItems, logTotal, nil } func CancelTask(id string) (err error) { diff --git a/frontend/src/components/InfoView/TaskInfoView.vue b/frontend/src/components/InfoView/TaskInfoView.vue index b85fef40..f25b2d12 100644 --- a/frontend/src/components/InfoView/TaskInfoView.vue +++ b/frontend/src/components/InfoView/TaskInfoView.vue @@ -79,8 +79,7 @@