From e6ca540d11aa0e92f6475301c2dfa3f200a9c75c Mon Sep 17 00:00:00 2001 From: marvzhang Date: Sun, 19 Apr 2020 11:29:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97=E6=8F=92?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/model/log.go | 18 ++++++++++++++++++ backend/services/task.go | 27 +++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/backend/model/log.go b/backend/model/log.go index 59ea431e..c0f38db3 100644 --- a/backend/model/log.go +++ b/backend/model/log.go @@ -75,6 +75,24 @@ func AddLogItem(l LogItem) error { return nil } +func AddLogItems(ls []LogItem) error { + if len(ls) == 0 { + return nil + } + s, c := database.GetCol("logs") + defer s.Close() + var docs []interface{} + for _, l := range ls { + docs = append(docs, l) + } + if err := c.Insert(docs...); err != nil { + log.Errorf("insert log error: " + err.Error()) + debug.PrintStack() + return err + } + return nil +} + func AddErrorLogItem(e ErrorLogItem) error { s, c := database.GetCol("error_logs") defer s.Close() diff --git a/backend/services/task.go b/backend/services/task.go index 47f52037..7601acfe 100644 --- a/backend/services/task.go +++ b/backend/services/task.go @@ -190,23 +190,40 @@ func SetLogConfig(cmd *exec.Cmd, t model.Task) error { } var seq int64 + var logs []model.LogItem + isStdoutFinished := false + isStderrFinished := false + + // periodically (1 sec) insert log items + go func() { + for { + _ = model.AddLogItems(logs) + logs = []model.LogItem{} + if isStdoutFinished && isStderrFinished { + break + } + time.Sleep(1 * time.Second) + } + }() // read stdout go func() { for { line, err := readerStdout.ReadString('\n') if err != nil { + isStdoutFinished = true break } line = strings.Replace(line, "\n", "", -1) seq++ - _ = model.AddLogItem(model.LogItem{ + l := model.LogItem{ Id: bson.NewObjectId(), Seq: seq, Message: line, TaskId: t.Id, Ts: time.Now(), - }) + } + logs = append(logs, l) } }() @@ -215,17 +232,19 @@ func SetLogConfig(cmd *exec.Cmd, t model.Task) error { for { line, err := readerStderr.ReadString('\n') if err != nil { + isStderrFinished = true break } line = strings.Replace(line, "\n", "", -1) seq++ - _ = model.AddLogItem(model.LogItem{ + l := model.LogItem{ Id: bson.NewObjectId(), Seq: seq, Message: line, TaskId: t.Id, Ts: time.Now(), - }) + } + logs = append(logs, l) } }()