From af04d69d231872447e0358aed8f848cf5bc1f93a Mon Sep 17 00:00:00 2001
From: yanghui <yanghui@aiotlink.com>
Date: 星期二, 27 四月 2021 13:37:42 +0800
Subject: [PATCH] add schedule log

---
 logc.go |   76 +++++++++++++++++++++++++++++++++-----
 1 files changed, 66 insertions(+), 10 deletions(-)

diff --git a/logc.go b/logc.go
index 7eddc7e..5946d85 100644
--- a/logc.go
+++ b/logc.go
@@ -48,26 +48,82 @@
 
 var (
 	opChan chan *OperationLog
-
+	schedualeChan chan *ScheduleLog
+	logger *Log
+	ProcName string
+	ProcID string
 )
 
-
-func Init(flogWriter LogReportCallback, procId string, procName string, wg *sync.WaitGroup, done  chan struct{}) bool {
+func Init(flogWriter LogReportCallback, log *Log, procId string, procName string, wg *sync.WaitGroup, done  chan struct{}) bool {
 	opChan = make(chan *OperationLog, 100)
-	//ProcName = procName
-	//ProcID = procId
+	schedualeChan = make(chan *ScheduleLog)
+
+	if nil != log {
+		logger = log
+	} else {
+		logger = &Log{}
+	}
+
+	ProcName = procName
+	ProcID = procId
 
 	go saveLoop(flogWriter, wg, done)
 
 	return true
 }
 
-func SaveOperationLog(log *OperationLog) {
-	if nil != log {
-		opChan <- log
+func SaveOperationLog(log *OperationLog, timeout time.Duration) {
+	if nil == log {
+		return
+	}
+
+	log.ProcName = ProcName
+	log.ProcID = ProcID
+
+	select {
+	case opChan <- log:
+		return
+	case <-time.After(timeout):
+		var info string
+		b, err := json.Marshal(log)
+		if nil == err {
+			info = string(b)
+		}
+		logger.Fatal("SaveOperationLog failed to save log", info)
 	}
 }
 
+func SaveScheduleLog(category, level int, timeout time.Duration, v ...interface{}) {
+	msg := ""
+	if len(v) > 0 {
+		msg = fmt.Sprint(v...)
+	}
+
+	if msg == "" {
+		retrun
+	}
+
+	log := &ScheduleLog{
+		Timestamp: time.Now().Unix(),
+		ProcName:  ProcName,
+		ProcID:    ProcID,
+		Level:     level,
+		Type:      category,
+		Info:      msg,
+	}
+
+	select {
+	case schedualeChan <- log:
+		return
+	case <-time.After(timeout):
+		var info string
+		b, err := json.Marshal(log)
+		if nil == err {
+			info = string(b)
+		}
+		logger.Fatal("SaveScheduleLog failed to save log", info)
+	}
+}
 
 
 //func Save(level int, logType int, v ...interface{}) {
@@ -108,7 +164,7 @@
 //}
 
 const (
-	LogSaveTopic = "logSaveTopic"
+	OperationLogTopic = "operationLogSaveTopic"
 )
 
 func saveLoop(logCallback LogReportCallback, wg *sync.WaitGroup, done  chan struct{}) {
@@ -132,7 +188,7 @@
 
 				reg := &LogRegister {
 					nodes,
-					LogSaveTopic,
+					OperationLogTopic,
 					payload,
 				}
 

--
Gitblit v1.8.0