mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-28 17:50:56 +01:00
加入日志异常检测
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"crawlab/database"
|
||||
"crawlab/utils"
|
||||
"github.com/apex/log"
|
||||
"github.com/globalsign/mgo"
|
||||
"github.com/globalsign/mgo/bson"
|
||||
"os"
|
||||
"runtime/debug"
|
||||
@@ -14,7 +15,15 @@ type LogItem struct {
|
||||
Id bson.ObjectId `json:"_id" bson:"_id"`
|
||||
Message string `json:"msg" bson:"msg"`
|
||||
TaskId string `json:"task_id" bson:"task_id"`
|
||||
IsError bool `json:"is_error" bson:"is_error"`
|
||||
Seq int64 `json:"seq" bson:"seq"`
|
||||
Ts time.Time `json:"ts" bson:"ts"`
|
||||
}
|
||||
|
||||
type ErrorLogItem struct {
|
||||
Id bson.ObjectId `json:"_id" bson:"_id"`
|
||||
TaskId string `json:"task_id" bson:"task_id"`
|
||||
Message string `json:"msg" bson:"msg"`
|
||||
LogId bson.ObjectId `json:"log_id" bson:"log_id"`
|
||||
Seq int64 `json:"seq" bson:"seq"`
|
||||
Ts time.Time `json:"ts" bson:"ts"`
|
||||
}
|
||||
@@ -66,6 +75,21 @@ func AddLogItem(l LogItem) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func AddErrorLogItem(e ErrorLogItem) error {
|
||||
s, c := database.GetCol("error_logs")
|
||||
defer s.Close()
|
||||
var l LogItem
|
||||
err := c.FindId(bson.M{"log_id": e.LogId}).One(&l)
|
||||
if err != nil && err == mgo.ErrNotFound {
|
||||
if err := c.Insert(e); err != nil {
|
||||
log.Errorf("insert log error: " + err.Error())
|
||||
debug.PrintStack()
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetLogItemList(query bson.M, keyword string, skip int, limit int, sortStr string) ([]LogItem, error) {
|
||||
s, c := database.GetCol("logs")
|
||||
defer s.Close()
|
||||
|
||||
@@ -127,6 +127,23 @@ func (t *Task) GetLogItems(keyword string, page int, pageSize int) (logItems []L
|
||||
return logItems, logTotal, nil
|
||||
}
|
||||
|
||||
func (t *Task) GetErrorLogItems() (errLogItems []ErrorLogItem, err error) {
|
||||
s, c := database.GetCol("error_logs")
|
||||
defer s.Close()
|
||||
|
||||
query := bson.M{
|
||||
"task_id": t.Id,
|
||||
}
|
||||
|
||||
if err := c.Find(query).All(&errLogItems); err != nil {
|
||||
log.Errorf("find error logs error: " + err.Error())
|
||||
debug.PrintStack()
|
||||
return errLogItems, err
|
||||
}
|
||||
|
||||
return errLogItems, nil
|
||||
}
|
||||
|
||||
func GetTaskList(filter interface{}, skip int, limit int, sortKey string) ([]Task, error) {
|
||||
s, c := database.GetCol("tasks")
|
||||
defer s.Close()
|
||||
@@ -390,6 +407,7 @@ func UpdateTaskResultCount(id string) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
// convert all running tasks to abnormal tasks
|
||||
func UpdateTaskToAbnormal(nodeId bson.ObjectId) error {
|
||||
s, c := database.GetCol("tasks")
|
||||
defer s.Close()
|
||||
@@ -411,3 +429,45 @@ func UpdateTaskToAbnormal(nodeId bson.ObjectId) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// update task error logs
|
||||
func UpdateTaskErrorLogs(taskId string, errorRegexPattern string) error {
|
||||
s, c := database.GetCol("logs")
|
||||
defer s.Close()
|
||||
|
||||
if errorRegexPattern == "" {
|
||||
errorRegexPattern = constants.ErrorRegexPattern
|
||||
}
|
||||
|
||||
query := bson.M{
|
||||
"task_id": taskId,
|
||||
"msg": bson.M{
|
||||
"$regex": bson.RegEx{
|
||||
Pattern: errorRegexPattern,
|
||||
Options: "i",
|
||||
},
|
||||
},
|
||||
}
|
||||
var logs []LogItem
|
||||
if err := c.Find(query).All(&logs); err != nil {
|
||||
log.Errorf("find error logs error: " + err.Error())
|
||||
debug.PrintStack()
|
||||
return err
|
||||
}
|
||||
|
||||
for _, l := range logs {
|
||||
e := ErrorLogItem{
|
||||
Id: bson.NewObjectId(),
|
||||
TaskId: l.TaskId,
|
||||
Message: l.Message,
|
||||
LogId: l.Id,
|
||||
Seq: l.Seq,
|
||||
Ts: time.Now(),
|
||||
}
|
||||
if err := AddErrorLogItem(e); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user