Files
free-turn-proxy/mobile/logbuf.go
T

46 lines
1.1 KiB
Go

package mobile
import (
"strings"
"sync"
)
// logBufMax - глубина кольцевого буфера. Не настройка сессии: при живом
// EventSink строки уходят хосту сразу, а буфер нужен только для DumpLogs -
// дампа "поделиться логом" и строк, накопленных до регистрации приёмника.
const logBufMax = 500
type logBuffer struct {
mu sync.Mutex
lines []string
}
func (b *logBuffer) append(line string) {
b.mu.Lock()
defer b.mu.Unlock()
b.lines = append(b.lines, line)
if len(b.lines) > logBufMax {
b.lines = b.lines[len(b.lines)-logBufMax:]
}
}
func (b *logBuffer) get() string {
b.mu.Lock()
defer b.mu.Unlock()
return strings.Join(b.lines, "\n")
}
func (b *logBuffer) clear() {
b.mu.Lock()
defer b.mu.Unlock()
b.lines = b.lines[:0]
}
var sharedLogBuf = &logBuffer{}
// DumpLogs возвращает последние строки лога (до logBufMax).
func DumpLogs() string { return sharedLogBuf.get() }
// ClearLogs очищает буфер логов.
func ClearLogs() { sharedLogBuf.clear() }