| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | package certimport (	"fmt"	"strings"	"sync"	"time"	"github.com/0xJacky/Nginx-UI/internal/translation"	"github.com/0xJacky/Nginx-UI/model"	"github.com/gorilla/websocket"	"github.com/uozi-tech/cosy/logger")type Logger struct {	buffer []string	cert   *model.Cert	ws     *websocket.Conn	trans  *translation.Container	mu     sync.Mutex	msgCh  chan []byte	done   chan struct{}}func NewLogger() *Logger {	l := &Logger{		msgCh: make(chan []byte, 100),		done:  make(chan struct{}),	}	go l.processMessages()	return l}func (t *Logger) processMessages() {	for {		select {		case msg := <-t.msgCh:			t.mu.Lock()			if t.ws != nil {				_ = t.ws.WriteMessage(websocket.TextMessage, msg)			}			t.mu.Unlock()		case <-t.done:			return		}	}}func (t *Logger) SetCertModel(cert *model.Cert) {	t.mu.Lock()	defer t.mu.Unlock()	t.cert = cert}func (t *Logger) SetWebSocket(ws *websocket.Conn) {	t.mu.Lock()	defer t.mu.Unlock()	t.ws = ws}func (t *Logger) Info(c *translation.Container) {	result, err := c.ToJSON()	if err != nil {		return	}	t.mu.Lock()	t.buffer = append(t.buffer, string(result))	t.mu.Unlock()	logger.Info("AutoCert", c.ToString())	t.msgCh <- result}func (t *Logger) Error(err error) {	t.mu.Lock()	t.buffer = append(t.buffer, fmt.Sprintf("%s [Error] %s",		time.Now().Format(time.DateTime),		strings.TrimSpace(err.Error()),	))	t.mu.Unlock()	logger.Error("AutoCert", err)}func (t *Logger) Close() {	t.mu.Lock()	defer t.mu.Unlock()	close(t.msgCh)	close(t.done)	if t.cert == nil {		return	}	_ = t.cert.Updates(&model.Cert{		Log: t.ToString(),	})}func (t *Logger) ToString() (content string) {	t.mu.Lock()	defer t.mu.Unlock()	content = strings.Join(t.buffer, "\n")	return}
 |