mirror of
https://github.com/yusing/godoxy.git
synced 2026-03-27 03:21:09 +01:00
refactor(route/logging): streamline log messages with EmbedObject for improved clarity
Updated logging statements across multiple files to utilize EmbedObject for enhanced context in log messages. This change improves the readability and consistency of log outputs, particularly in health monitoring and route validation processes.
This commit is contained in:
@@ -120,8 +120,7 @@ func (s *FileServer) Start(parent task.Parent) gperr.Error {
|
||||
if s.UseHealthCheck() {
|
||||
s.HealthMon = monitor.NewMonitor(s)
|
||||
if err := s.HealthMon.Start(s.task); err != nil {
|
||||
l := log.With().Str("type", "fileserver").Str("name", s.Name()).Logger()
|
||||
gperr.LogWarn("health monitor error", err, &l)
|
||||
log.Warn().EmbedObject(s).Err(err).Msg("health monitor error")
|
||||
s.HealthMon = nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/yusing/godoxy/internal/agentpool"
|
||||
config "github.com/yusing/godoxy/internal/config/types"
|
||||
@@ -218,9 +219,7 @@ func (r *Route) validate() gperr.Error {
|
||||
r.Proxmox.Node = nodeName
|
||||
r.Proxmox.VMID = &zero
|
||||
r.Proxmox.VMName = ""
|
||||
log.Info().
|
||||
Str("node", nodeName).
|
||||
Msgf("found proxmox node for route %q", r.Alias)
|
||||
log.Info().EmbedObject(r).Msg("found proxmox node")
|
||||
break
|
||||
}
|
||||
|
||||
@@ -234,17 +233,13 @@ func (r *Route) validate() gperr.Error {
|
||||
r.Proxmox.Node = resource.Node
|
||||
r.Proxmox.VMID = &vmid
|
||||
r.Proxmox.VMName = resource.Name
|
||||
log.Info().
|
||||
Str("node", resource.Node).
|
||||
Int("vmid", int(resource.VMID)).
|
||||
Str("vmname", resource.Name).
|
||||
Msgf("found proxmox resource for route %q", r.Alias)
|
||||
log.Info().EmbedObject(r).Msg("found proxmox resource")
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if wasNotNil && (r.Proxmox.Node == "" || r.Proxmox.VMID == nil) {
|
||||
log.Warn().Msgf("no proxmox node / resource found for route %q", r.Alias)
|
||||
log.Warn().EmbedObject(r).Msg("no proxmox node / resource found")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -395,7 +390,7 @@ func (r *Route) validateRules() error {
|
||||
}
|
||||
|
||||
func (r *Route) validateProxmox() {
|
||||
l := log.With().Str("route", r.Alias).Logger()
|
||||
l := log.With().EmbedObject(r).Logger()
|
||||
|
||||
nodeName := r.Proxmox.Node
|
||||
vmid := r.Proxmox.VMID
|
||||
@@ -424,7 +419,7 @@ func (r *Route) validateProxmox() {
|
||||
} else {
|
||||
res, err := node.Client().GetResource("lxc", *vmid)
|
||||
if err != nil { // ErrResourceNotFound
|
||||
l.Err(err).Msgf("failed to get resource %d", *vmid)
|
||||
l.Error().Err(err).Msgf("failed to get resource %d", *vmid)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -443,24 +438,22 @@ func (r *Route) validateProxmox() {
|
||||
return
|
||||
}
|
||||
|
||||
l = l.With().Str("container", containerName).Logger()
|
||||
|
||||
l.Info().Msgf("checking if container is running")
|
||||
l.Info().Str("container", containerName).Msg("checking if container is running")
|
||||
running, err := node.LXCIsRunning(ctx, *vmid)
|
||||
if err != nil {
|
||||
l.Err(err).Msgf("failed to check container state")
|
||||
l.Error().Err(err).Msgf("failed to check container state")
|
||||
return
|
||||
}
|
||||
|
||||
if !running {
|
||||
l.Info().Msgf("starting container")
|
||||
l.Info().Msg("starting container")
|
||||
if err := node.LXCAction(ctx, *vmid, proxmox.LXCStart); err != nil {
|
||||
l.Err(err).Msgf("failed to start container")
|
||||
l.Error().Err(err).Msg("failed to start container")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
l.Info().Msgf("finding reachable ip addresses")
|
||||
l.Info().Msg("finding reachable ip addresses")
|
||||
errs := gperr.NewBuilder("failed to find reachable ip addresses")
|
||||
for _, ip := range ips {
|
||||
if err := netutils.PingTCP(ctx, ip, r.Port.Proxy); err != nil {
|
||||
@@ -687,6 +680,44 @@ func (r *Route) DisplayName() string {
|
||||
return r.Homepage.Name
|
||||
}
|
||||
|
||||
func (r *Route) MarshalZerologObject(e *zerolog.Event) {
|
||||
e.Str("alias", r.Alias)
|
||||
switch r := r.impl.(type) {
|
||||
case *ReveseProxyRoute:
|
||||
e.Str("type", "reverse_proxy").
|
||||
Str("scheme", r.Scheme.String()).
|
||||
Str("bind", r.LisURL.Host).
|
||||
Str("target", r.ProxyURL.URL.String())
|
||||
case *FileServer:
|
||||
e.Str("type", "file_server").
|
||||
Str("root", r.Root)
|
||||
case *StreamRoute:
|
||||
e.Str("type", "stream").
|
||||
Str("scheme", r.LisURL.Scheme+"->"+r.ProxyURL.Scheme)
|
||||
if r.stream != nil {
|
||||
// listening port could be zero (random),
|
||||
// use LocalAddr() to get the actual listening host+port.
|
||||
e.Str("bind", r.stream.LocalAddr().String())
|
||||
} else {
|
||||
// not yet started
|
||||
e.Str("bind", r.LisURL.Host)
|
||||
}
|
||||
e.Str("target", r.ProxyURL.URL.String())
|
||||
}
|
||||
if r.Proxmox != nil {
|
||||
e.Str("proxmox", r.Proxmox.Node)
|
||||
if r.Proxmox.VMID != nil {
|
||||
e.Int("vmid", *r.Proxmox.VMID)
|
||||
}
|
||||
if r.Proxmox.VMName != "" {
|
||||
e.Str("vmname", r.Proxmox.VMName)
|
||||
}
|
||||
}
|
||||
if r.Container != nil {
|
||||
e.Str("container", r.Container.ContainerName)
|
||||
}
|
||||
}
|
||||
|
||||
// PreferOver implements pool.Preferable to resolve duplicate route keys deterministically.
|
||||
// Preference policy:
|
||||
// - Prefer routes with rules over routes without rules.
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
entrypoint "github.com/yusing/godoxy/internal/entrypoint/types"
|
||||
"github.com/yusing/godoxy/internal/health/monitor"
|
||||
"github.com/yusing/godoxy/internal/idlewatcher"
|
||||
@@ -21,8 +20,6 @@ import (
|
||||
type StreamRoute struct {
|
||||
*Route
|
||||
stream nettypes.Stream
|
||||
|
||||
l zerolog.Logger
|
||||
}
|
||||
|
||||
var _ types.StreamRoute = (*StreamRoute)(nil)
|
||||
@@ -65,7 +62,7 @@ func (r *StreamRoute) Start(parent task.Parent) gperr.Error {
|
||||
|
||||
if r.HealthMon != nil {
|
||||
if err := r.HealthMon.Start(r.task); err != nil {
|
||||
gperr.LogWarn("health monitor error", err, &r.l)
|
||||
gperr.LogWarn("health monitor error", err)
|
||||
r.HealthMon = nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,5 +8,5 @@ import (
|
||||
)
|
||||
|
||||
func logDebugf(stream zerolog.LogObjectMarshaler, format string, v ...any) {
|
||||
log.Debug().Object("stream", stream).Msgf(format, v...)
|
||||
log.Debug().EmbedObject(stream).Msgf(format, v...)
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ func logErr(stream zerolog.LogObjectMarshaler, err error, msg string) {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
log.Err(err).Object("stream", stream).Msg(msg)
|
||||
log.Err(err).EmbedObject(stream).Msg(msg)
|
||||
}
|
||||
|
||||
func logErrf(stream zerolog.LogObjectMarshaler, err error, format string, v ...any) {
|
||||
@@ -37,5 +37,5 @@ func logErrf(stream zerolog.LogObjectMarshaler, err error, format string, v ...a
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
log.Err(err).Object("stream", stream).Msgf(format, v...)
|
||||
log.Err(err).EmbedObject(stream).Msgf(format, v...)
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ func (s *TCPTCPStream) ListenAndServe(ctx context.Context, preDial, onRead netty
|
||||
}
|
||||
|
||||
if acl := acl.FromCtx(ctx); acl != nil {
|
||||
log.Debug().Str("listener", s.listener.Addr().String()).Msg("wrapping listener with ACL")
|
||||
log.Debug().EmbedObject(s).Msg("wrapping listener with ACL")
|
||||
s.listener = acl.WrapTCP(s.listener)
|
||||
}
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ func (s *UDPUDPStream) ListenAndServe(ctx context.Context, preDial, onRead netty
|
||||
}
|
||||
s.listener = l
|
||||
if acl := acl.FromCtx(ctx); acl != nil {
|
||||
log.Debug().Str("listener", s.listener.LocalAddr().String()).Msg("wrapping listener with ACL")
|
||||
log.Debug().EmbedObject(s).Msg("wrapping listener with ACL")
|
||||
s.listener = acl.WrapUDP(s.listener)
|
||||
}
|
||||
s.preDial = preDial
|
||||
|
||||
@@ -3,6 +3,7 @@ package types
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/yusing/godoxy/internal/agentpool"
|
||||
"github.com/yusing/godoxy/internal/homepage"
|
||||
nettypes "github.com/yusing/godoxy/internal/net/types"
|
||||
@@ -18,6 +19,8 @@ type (
|
||||
task.TaskStarter
|
||||
task.TaskFinisher
|
||||
pool.Object
|
||||
zerolog.LogObjectMarshaler
|
||||
|
||||
ProviderName() string
|
||||
GetProvider() RouteProvider
|
||||
ListenURL() *nettypes.URL
|
||||
|
||||
Reference in New Issue
Block a user