Chore: merge branch 'ong-dev' into with-tun

This commit is contained in:
yaling888 2022-04-27 05:33:49 +08:00
commit ca4961a146
2 changed files with 23 additions and 12 deletions

View File

@ -209,16 +209,26 @@ func getLogs(w http.ResponseWriter, r *http.Request) {
render.Status(r, http.StatusOK) render.Status(r, http.StatusOK)
} }
ch := make(chan log.Event, 1024)
sub := log.Subscribe() sub := log.Subscribe()
defer log.UnSubscribe(sub) defer log.UnSubscribe(sub)
buf := &bytes.Buffer{} buf := &bytes.Buffer{}
var err error
for elm := range sub { go func() {
buf.Reset() for elm := range sub {
logM := elm select {
case ch <- elm:
default:
}
}
close(ch)
}()
for logM := range ch {
if logM.LogLevel < level { if logM.LogLevel < level {
continue continue
} }
buf.Reset()
if err := json.NewEncoder(buf).Encode(Log{ if err := json.NewEncoder(buf).Encode(Log{
Type: logM.Type(), Type: logM.Type(),
@ -227,6 +237,7 @@ func getLogs(w http.ResponseWriter, r *http.Request) {
break break
} }
var err error
if wsConn == nil { if wsConn == nil {
_, err = w.Write(buf.Bytes()) _, err = w.Write(buf.Bytes())
w.(http.Flusher).Flush() w.(http.Flusher).Flush()

View File

@ -10,8 +10,8 @@ import (
) )
var ( var (
logCh = make(chan *Event) logCh = make(chan Event)
source = observable.NewObservable[*Event](logCh) source = observable.NewObservable[Event](logCh)
level = INFO level = INFO
) )
@ -25,7 +25,7 @@ type Event struct {
Payload string Payload string
} }
func (e *Event) Type() string { func (e Event) Type() string {
return e.LogLevel.String() return e.LogLevel.String()
} }
@ -57,12 +57,12 @@ func Fatalln(format string, v ...any) {
log.Fatalf(format, v...) log.Fatalf(format, v...)
} }
func Subscribe() observable.Subscription[*Event] { func Subscribe() observable.Subscription[Event] {
sub, _ := source.Subscribe() sub, _ := source.Subscribe()
return sub return sub
} }
func UnSubscribe(sub observable.Subscription[*Event]) { func UnSubscribe(sub observable.Subscription[Event]) {
source.UnSubscribe(sub) source.UnSubscribe(sub)
} }
@ -74,7 +74,7 @@ func SetLevel(newLevel LogLevel) {
level = newLevel level = newLevel
} }
func print(data *Event) { func print(data Event) {
if data.LogLevel < level { if data.LogLevel < level {
return return
} }
@ -91,8 +91,8 @@ func print(data *Event) {
} }
} }
func newLog(logLevel LogLevel, format string, v ...any) *Event { func newLog(logLevel LogLevel, format string, v ...any) Event {
return &Event{ return Event{
LogLevel: logLevel, LogLevel: logLevel,
Payload: fmt.Sprintf(format, v...), Payload: fmt.Sprintf(format, v...),
} }