From 1cdf9c1408fc13df677e9f738e59fe46df86fc20 Mon Sep 17 00:00:00 2001
From: yanghui <yanghui@aiotlink.com>
Date: 星期二, 27 四月 2021 17:27:09 +0800
Subject: [PATCH] neate code

---
 logc.go |   83 +++++++++++++++++++++++++++++------------
 1 files changed, 58 insertions(+), 25 deletions(-)

diff --git a/logc.go b/logc.go
index dca99a3..6e73c7a 100644
--- a/logc.go
+++ b/logc.go
@@ -2,7 +2,6 @@
 
 import (
 	"basic.com/valib/bhomebus.git"
-	"encoding/json"
 	"fmt"
 	"sync"
 	"time"
@@ -26,6 +25,12 @@
 	TypeSysInfo //绯荤粺鍙傛暟鍙樻洿,ip,server name,寮�鍏虫満淇℃伅
 )
 
+type LogPrinter interface {
+	Marshal() ([]byte, error)
+	Topic() string
+}
+
+
 type LogInfo struct {
 	ID        string `gorm:"column:id;primary_key;unique" json:"id"`
 	Timestamp string `gorm:"column:timestamp" json:"timestamp"` // 2020-12-03 14:39:41
@@ -47,21 +52,23 @@
 type LogReportCallback func(*LogRegister)
 
 var (
-	opChan chan *OperationLog
+	logCh chan LogPrinter
 	logger *Log
+	ProcName string
+	ProcID string
 )
 
-
 func Init(flogWriter LogReportCallback, log *Log, procId string, procName string, wg *sync.WaitGroup, done  chan struct{}) bool {
-	opChan = make(chan *OperationLog, 100)
+	logCh = make(chan LogPrinter, 300)
+
 	if nil != log {
 		logger = log
 	} else {
 		logger = &Log{}
 	}
 
-	//ProcName = procName
-	//ProcID = procId
+	ProcName = procName
+	ProcID = procId
 
 	go saveLoop(flogWriter, wg, done)
 
@@ -73,20 +80,47 @@
 		return
 	}
 
+	log.ProcName = ProcName
+	log.ProcID = ProcID
+
+	deliverLog(log, timeout)
+}
+
+func SaveScheduleLog(category, level int, timeout time.Duration, v ...interface{}) {
+	msg := ""
+	if len(v) > 0 {
+		msg = fmt.Sprint(v...)
+	}
+
+	if msg == "" {
+		return
+	}
+
+	log := &ScheduleLog{
+		Timestamp: time.Now().Unix(),
+		ProcName:  ProcName,
+		ProcID:    ProcID,
+		Level:     level,
+		Type:      category,
+		Info:      msg,
+	}
+
+	deliverLog(log, timeout)
+}
+
+func deliverLog(l LogPrinter, timeout time.Duration) {
 	select {
-	case opChan <- log:
+	case logCh <- l:
 		return
 	case <-time.After(timeout):
 		var info string
-		b, err := json.Marshal(log)
+		b, err := l.Marshal()
 		if nil == err {
 			info = string(b)
 		}
-		logger.Fatal("SaveOperationLog failed to save log", info)
+		logger.Fatal("SaveScheduleLog failed to save log", info, l.Topic())
 	}
 }
-
-
 
 //func Save(level int, logType int, v ...interface{}) {
 //	cache(level, logType, "", "", v)
@@ -126,7 +160,8 @@
 //}
 
 const (
-	LogSaveTopic = "logSaveTopic"
+	OperationLogTopic = "operationLogSaveTopic"
+	ScheduleLogTopic = "scheduleLogSaveTopic"
 )
 
 func saveLoop(logCallback LogReportCallback, wg *sync.WaitGroup, done  chan struct{}) {
@@ -140,24 +175,22 @@
 		select {
 		case <- done:
 			return
-		case data := <- opChan:
-			payload, err := json.Marshal(data)
+		case log := <- logCh:
+			payload, err := log.Marshal()
 			if err != nil {
-				fmt.Println("json.Marshal(operation data) error:", data)
+				logger.Error("failed to Marshal", log)
 			} else {
-				var nodes []bhomebus.NetNode
-				nodes = append(nodes, bhomebus.NetNode{})
+					var nodes []bhomebus.NetNode
+					nodes = append(nodes, bhomebus.NetNode{})
 
-				reg := &LogRegister {
-					nodes,
-					LogSaveTopic,
-					payload,
-				}
+					reg := &LogRegister {
+						nodes,
+						log.Topic(),
+						payload,
+					}
 
-				logCallback(reg)
+					logCallback(reg)
 			}
-		default:
-			time.Sleep(10*time.Millisecond)
 		}
 	}
 }

--
Gitblit v1.8.0