From 30a9ba339429593c552b31dbbfb4f67ed56ac466 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期一, 24 一月 2022 16:55:28 +0800
Subject: [PATCH] 修改系统日志数据结构

---
 logc.go |  122 +++++++++++++++++++++++++++++-----------
 1 files changed, 89 insertions(+), 33 deletions(-)

diff --git a/logc.go b/logc.go
index 7eddc7e..515dfc2 100644
--- a/logc.go
+++ b/logc.go
@@ -1,8 +1,7 @@
 package logc
 
 import (
-	"basic.com/valib/bhomebus.git"
-	"encoding/json"
+	"basic.com/valib/c_bhomebus.git/proto/source/bhome_msg"
 	"fmt"
 	"sync"
 	"time"
@@ -17,14 +16,19 @@
 )
 
 const (
-	TypeManual = iota + 1  //浜哄伐鎿嶄綔鏃ュ織,绯荤粺鍗囩骇,鎽勫儚鏈轰慨鏀�,绠楁硶淇敼...
-	TypeLoginOut //鐧诲綍鐧诲嚭鏃ュ織
-	TypePollInfo //杞贰鎽勫儚鏈哄強鍏跺搴旂殑绠楁硶
-	TypeStackInfo //鏁版嵁鏍堝鐞嗘儏鍐�
-	TypeWarnInfo //鏁呴殰淇℃伅
-	TypeRunInfo //杩愯鎯呭喌,gpu,mem,cpu
-	TypeSysInfo //绯荤粺鍙傛暟鍙樻洿,ip,server name,寮�鍏虫満淇℃伅
+	TypeManual    = iota + 1 //浜哄伐鎿嶄綔鏃ュ織,绯荤粺鍗囩骇,鎽勫儚鏈轰慨鏀�,绠楁硶淇敼...
+	TypeLoginOut             //鐧诲綍鐧诲嚭鏃ュ織
+	TypePollInfo             //杞贰鎽勫儚鏈哄強鍏跺搴旂殑绠楁硶
+	TypeStackInfo            //鏁版嵁鏍堝鐞嗘儏鍐�
+	TypeWarnInfo             //鏁呴殰淇℃伅
+	TypeRunInfo              //杩愯鎯呭喌,gpu,mem,cpu
+	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"`
@@ -39,36 +43,87 @@
 }
 
 type LogRegister struct {
-	Nodes      []bhomebus.NetNode
-	Topic      string
-	Payload     []byte
+	Nodes   []bhome_msg.BHAddress
+	Topic   string
+	Payload []byte
 }
 
 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 {
+	logCh = make(chan LogPrinter, 300)
 
-func Init(flogWriter LogReportCallback, procId string, procName string, wg *sync.WaitGroup, done  chan struct{}) bool {
-	opChan = make(chan *OperationLog, 100)
-	//ProcName = procName
-	//ProcID = procId
+	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
+
+	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 SaveRuleServerLog(ruleServerPushLog RuleServerPushLog, timeout time.Duration) {
+	deliverLog(&ruleServerPushLog, timeout)
+}
+
+func deliverLog(l LogPrinter, timeout time.Duration) {
+	select {
+	case logCh <- l:
+		return
+	case <-time.After(timeout):
+		var info string
+		b, err := l.Marshal()
+		if nil == err {
+			info = string(b)
+		}
+		logger.Fatal("SaveScheduleLog failed to save log", info, l.Topic())
+	}
+}
 
 //func Save(level int, logType int, v ...interface{}) {
 //	cache(level, logType, "", "", v)
@@ -108,10 +163,13 @@
 //}
 
 const (
-	LogSaveTopic = "logSaveTopic"
+	OperationLogTopic  = "operationLogSaveTopic"
+	ScheduleLogTopic   = "scheduleLogSaveTopic"
+	RuleServerLogTopic = "ruleServerLogSaveTopic"
+	VaSystemLogTopic   = "VaSystemLogSaveTopic"
 )
 
-func saveLoop(logCallback LogReportCallback, wg *sync.WaitGroup, done  chan struct{}) {
+func saveLoop(logCallback LogReportCallback, wg *sync.WaitGroup, done chan struct{}) {
 	defer wg.Done()
 
 	if nil == logCallback {
@@ -120,26 +178,24 @@
 
 	for {
 		select {
-		case <- done:
+		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 []bhome_msg.BHAddress
+				nodes = append(nodes, bhome_msg.BHAddress{})
 
-				reg := &LogRegister {
+				reg := &LogRegister{
 					nodes,
-					LogSaveTopic,
+					log.Topic(),
 					payload,
 				}
 
 				logCallback(reg)
 			}
-		default:
-			time.Sleep(10*time.Millisecond)
 		}
 	}
 }

--
Gitblit v1.8.0