mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 12:42:34 +02:00
refactor: clean up logger and metric initialization flow
This commit is contained in:
parent
366c89164f
commit
1c001ed9df
6 changed files with 27 additions and 32 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,16 +135,16 @@ 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) {
|
logging.Error().Err(err).Msgf("failed to load last metrics data for %s", p.name)
|
||||||
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())
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
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)
|
||||||
|
|
|
@ -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{}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue