chore(server): move log middleware to internal/server/middlewares/log

This commit is contained in:
Quentin McGaw
2024-08-23 13:46:52 +00:00
parent 540acc915d
commit ff7cadb43b
3 changed files with 29 additions and 17 deletions

View File

@@ -6,6 +6,7 @@ import (
"strings" "strings"
"github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/models"
"github.com/qdm12/gluetun/internal/server/middlewares/log"
) )
func newHandler(ctx context.Context, logger infoWarner, logging bool, func newHandler(ctx context.Context, logger infoWarner, logging bool,
@@ -17,7 +18,7 @@ func newHandler(ctx context.Context, logger infoWarner, logging bool,
publicIPLooper PublicIPLoop, publicIPLooper PublicIPLoop,
storage Storage, storage Storage,
ipv6Supported bool, ipv6Supported bool,
) http.Handler { ) (httpHandler http.Handler) {
handler := &handler{} handler := &handler{}
vpn := newVPNHandler(ctx, vpnLooper, storage, ipv6Supported, logger) vpn := newVPNHandler(ctx, vpnLooper, storage, ipv6Supported, logger)
@@ -29,16 +30,19 @@ func newHandler(ctx context.Context, logger infoWarner, logging bool,
handler.v0 = newHandlerV0(ctx, logger, vpnLooper, dnsLooper, updaterLooper) handler.v0 = newHandlerV0(ctx, logger, vpnLooper, dnsLooper, updaterLooper)
handler.v1 = newHandlerV1(logger, buildInfo, vpn, openvpn, dns, updater, publicip) handler.v1 = newHandlerV1(logger, buildInfo, vpn, openvpn, dns, updater, publicip)
handlerWithLog := withLogMiddleware(handler, logger, logging) middlewares := []func(http.Handler) http.Handler{
handler.setLogEnabled = handlerWithLog.setEnabled log.New(logger, logging),
}
return handlerWithLog httpHandler = handler
for _, middleware := range middlewares {
httpHandler = middleware(httpHandler)
}
return httpHandler
} }
type handler struct { type handler struct {
v0 http.Handler v0 http.Handler
v1 http.Handler v1 http.Handler
setLogEnabled func(enabled bool)
} }
func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (h *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {

View File

@@ -0,0 +1,5 @@
package log
type Logger interface {
Info(message string)
}

View File

@@ -1,4 +1,4 @@
package server package log
import ( import (
"net/http" "net/http"
@@ -7,18 +7,21 @@ import (
"time" "time"
) )
func withLogMiddleware(childHandler http.Handler, logger infoer, enabled bool) *logMiddleware { func New(logger Logger, enabled bool) (
return &logMiddleware{ middleware func(http.Handler) http.Handler) {
childHandler: childHandler, return func(handler http.Handler) http.Handler {
logger: logger, return &logMiddleware{
timeNow: time.Now, childHandler: handler,
enabled: enabled, logger: logger,
timeNow: time.Now,
enabled: enabled,
}
} }
} }
type logMiddleware struct { type logMiddleware struct {
childHandler http.Handler childHandler http.Handler
logger infoer logger Logger
timeNow func() time.Time timeNow func() time.Time
enabled bool enabled bool
enabledMu sync.RWMutex enabledMu sync.RWMutex
@@ -39,7 +42,7 @@ func (m *logMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
r.RemoteAddr + " in " + duration.String()) r.RemoteAddr + " in " + duration.String())
} }
func (m *logMiddleware) setEnabled(enabled bool) { func (m *logMiddleware) SetEnabled(enabled bool) {
m.enabledMu.Lock() m.enabledMu.Lock()
defer m.enabledMu.Unlock() defer m.enabledMu.Unlock()
m.enabled = enabled m.enabled = enabled