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

View file

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

View file

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

View file

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

View file

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

View file

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