refactor: clean up logger and metric initialization flow

This commit is contained in:
yusing 2025-03-29 02:55:26 +08:00
parent 366c89164f
commit 1c001ed9df
6 changed files with 27 additions and 32 deletions

View file

@ -15,6 +15,8 @@ import (
"github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/gperr"
"github.com/yusing/go-proxy/internal/homepage" "github.com/yusing/go-proxy/internal/homepage"
"github.com/yusing/go-proxy/internal/logging" "github.com/yusing/go-proxy/internal/logging"
"github.com/yusing/go-proxy/internal/logging/memlogger"
"github.com/yusing/go-proxy/internal/metrics/systeminfo"
"github.com/yusing/go-proxy/internal/metrics/uptime" "github.com/yusing/go-proxy/internal/metrics/uptime"
"github.com/yusing/go-proxy/internal/net/gphttp/middleware" "github.com/yusing/go-proxy/internal/net/gphttp/middleware"
"github.com/yusing/go-proxy/internal/route/routes/routequery" "github.com/yusing/go-proxy/internal/route/routes/routequery"
@ -73,12 +75,14 @@ func main() {
} }
if args.Command == common.CommandStart { if args.Command == common.CommandStart {
logging.InitLogger(os.Stderr, memlogger.GetMemLogger())
logging.Info().Msgf("GoDoxy version %s", pkg.GetVersion()) logging.Info().Msgf("GoDoxy version %s", pkg.GetVersion())
logging.Trace().Msg("trace enabled") logging.Trace().Msg("trace enabled")
parallel( parallel(
internal.InitIconListCache, internal.InitIconListCache,
homepage.InitOverridesConfig, homepage.InitOverridesConfig,
favicon.InitIconCache, favicon.InitIconCache,
systeminfo.Poller.Start,
) )
if common.APIJWTSecret == nil { if common.APIJWTSecret == nil {
@ -111,6 +115,7 @@ func main() {
var err gperr.Error var err gperr.Error
if cfg, err = config.Load(); err != nil { if cfg, err = config.Load(); err != nil {
gperr.LogWarn("errors in config", err) gperr.LogWarn("errors in config", err)
err = nil
} }
switch args.Command { switch args.Command {

View file

@ -35,11 +35,6 @@ type (
var ( var (
clientMap = make(map[string]*SharedClient, 10) clientMap = make(map[string]*SharedClient, 10)
clientMapMu sync.RWMutex clientMapMu sync.RWMutex
clientOptEnvHost = []client.Opt{
client.WithHostFromEnv(),
client.WithAPIVersionNegotiation(),
}
) )
const ( const (
@ -151,7 +146,10 @@ func NewClient(host string) (*SharedClient, error) {
case "": case "":
return nil, errors.New("empty docker host") return nil, errors.New("empty docker host")
case common.DockerHostFromEnv: case common.DockerHostFromEnv:
opt = clientOptEnvHost opt = []client.Opt{
client.WithHostFromEnv(),
client.WithAPIVersionNegotiation(),
}
default: default:
helper, err := connhelper.GetConnectionHelper(host) helper, err := connhelper.GetConnectionHelper(host)
if err != nil { if err != nil {

View file

@ -45,9 +45,9 @@ func fmtMessage(msg string) string {
return strutils.JoinRune(lines, '\n') return strutils.JoinRune(lines, '\n')
} }
func InitLogger(out io.Writer) { func InitLogger(out ...io.Writer) {
writer := zerolog.ConsoleWriter{ writer := zerolog.ConsoleWriter{
Out: out, Out: zerolog.MultiLevelWriter(out...),
TimeFormat: timeFmt, TimeFormat: timeFmt,
FormatMessage: func(msgI interface{}) string { // pad spaces for each line FormatMessage: func(msgI interface{}) string { // pad spaces for each line
return fmtMessage(msgI.(string)) return fmtMessage(msgI.(string))

View file

@ -5,13 +5,10 @@ import (
"context" "context"
"io" "io"
"net/http" "net/http"
"os"
"sync" "sync"
"time" "time"
"github.com/coder/websocket" "github.com/coder/websocket"
"github.com/rs/zerolog"
"github.com/yusing/go-proxy/internal/logging"
"github.com/yusing/go-proxy/internal/net/gphttp" "github.com/yusing/go-proxy/internal/net/gphttp"
"github.com/yusing/go-proxy/internal/net/gphttp/gpwebsocket" "github.com/yusing/go-proxy/internal/net/gphttp/gpwebsocket"
F "github.com/yusing/go-proxy/internal/utils/functional" F "github.com/yusing/go-proxy/internal/utils/functional"
@ -22,7 +19,7 @@ type logEntryRange struct {
} }
type memLogger struct { type memLogger struct {
bytes.Buffer *bytes.Buffer
sync.RWMutex sync.RWMutex
notifyLock sync.RWMutex notifyLock sync.RWMutex
connChans F.Map[chan *logEntryRange, struct{}] connChans F.Map[chan *logEntryRange, struct{}]
@ -42,16 +39,11 @@ const (
) )
var memLoggerInstance = &memLogger{ var memLoggerInstance = &memLogger{
Buffer: bytes.NewBuffer(make([]byte, maxMemLogSize)),
connChans: F.NewMapOf[chan *logEntryRange, struct{}](), connChans: F.NewMapOf[chan *logEntryRange, struct{}](),
listeners: F.NewMapOf[chan []byte, struct{}](), listeners: F.NewMapOf[chan []byte, struct{}](),
} }
func init() {
memLoggerInstance.Grow(maxMemLogSize)
w := zerolog.MultiLevelWriter(os.Stderr, memLoggerInstance)
logging.InitLogger(w)
}
func GetMemLogger() MemLogger { func GetMemLogger() MemLogger {
return memLoggerInstance return memLoggerInstance
} }

View file

@ -7,6 +7,7 @@ import (
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
"sync"
"time" "time"
"github.com/yusing/go-proxy/internal/gperr" "github.com/yusing/go-proxy/internal/gperr"
@ -42,9 +43,11 @@ const (
saveBaseDir = "data/metrics" saveBaseDir = "data/metrics"
) )
func init() { var initDataDirOnce sync.Once
func initDataDir() {
if err := os.MkdirAll(saveBaseDir, 0o755); err != nil { if err := os.MkdirAll(saveBaseDir, 0o755); err != nil {
panic(fmt.Sprintf("failed to create metrics data directory: %s", err)) logging.Error().Err(err).Msg("failed to create metrics data directory")
} }
} }
@ -74,6 +77,7 @@ func (p *Poller[T, AggregateT]) load() error {
} }
func (p *Poller[T, AggregateT]) save() error { func (p *Poller[T, AggregateT]) save() error {
initDataDirOnce.Do(initDataDir)
entries, err := json.Marshal(p.period) entries, err := json.Marshal(p.period)
if err != nil { if err != nil {
return err return err
@ -131,7 +135,6 @@ func (p *Poller[T, AggregateT]) pollWithTimeout(ctx context.Context) {
func (p *Poller[T, AggregateT]) Start() { func (p *Poller[T, AggregateT]) Start() {
t := task.RootTask("poller." + p.name) t := task.RootTask("poller." + p.name)
go func() {
err := p.load() err := p.load()
if err != nil { if err != nil {
if !os.IsNotExist(err) { if !os.IsNotExist(err) {
@ -141,6 +144,7 @@ func (p *Poller[T, AggregateT]) Start() {
logging.Debug().Msgf("Loaded last metrics data for %s, %d entries", p.name, p.period.Total()) logging.Debug().Msgf("Loaded last metrics data for %s, %d entries", p.name, p.period.Total())
} }
go func() {
pollTicker := time.NewTicker(pollInterval) pollTicker := time.NewTicker(pollInterval)
gatherErrsTicker := time.NewTicker(gatherErrsInterval) gatherErrsTicker := time.NewTicker(gatherErrsInterval)
saveTicker := time.NewTicker(saveInterval) saveTicker := time.NewTicker(saveInterval)

View file

@ -96,10 +96,6 @@ var allQueries = []string{
var Poller = period.NewPoller("system_info", getSystemInfo, aggregate) var Poller = period.NewPoller("system_info", getSystemInfo, aggregate)
func init() {
Poller.Start()
}
func _() { // check if this behavior is not changed func _() { // check if this behavior is not changed
var _ sensors.Warnings = disk.Warnings{} var _ sensors.Warnings = disk.Warnings{}
} }