feat: add with timeout middleware

This commit is contained in:
Kevin Franklin Kim 2024-12-09 12:32:55 +01:00
parent 603cc9e45b
commit 69fc1ac71d
No known key found for this signature in database
2 changed files with 26 additions and 2 deletions

View File

@ -1,7 +1,9 @@
package gtag
import (
"context"
"net/http"
"time"
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
"github.com/foomo/sesamy-go/pkg/encoding/gtagencode"
@ -52,6 +54,16 @@ func MiddlewareUserID(cookieName string) Middleware {
}
}
func MiddlewareWithTimeout(timeout time.Duration) Middleware {
return func(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *gtag.Payload) error {
ctx, cancel := context.WithTimeout(context.WithoutCancel(r.Context()), timeout)
defer cancel()
return next(l, w, r.WithContext(ctx), payload)
}
}
}
func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *gtag.Payload) error {
if spanCtx := trace.SpanContextFromContext(r.Context()); spanCtx.IsValid() && spanCtx.IsSampled() {
@ -60,6 +72,7 @@ func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
l = l.With(
zap.String("event_name", gtag.GetDefault(payload.EventName, "-").String()),
zap.String("event_user_id", gtag.GetDefault(payload.UserID, "-")),
zap.String("event_client_id", gtag.GetDefault(payload.ClientID, "-")),
zap.String("event_session_id", gtag.GetDefault(payload.SessionID, "-")),
)
err := next(l, w, r, payload)

View File

@ -1,6 +1,7 @@
package mpv2
import (
"context"
"net/http"
"strings"
"time"
@ -143,6 +144,16 @@ func MiddlewarePageLocation(next MiddlewareHandler) MiddlewareHandler {
}
}
func MiddlewareWithTimeout(timeout time.Duration) Middleware {
return func(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
ctx, cancel := context.WithTimeout(context.WithoutCancel(r.Context()), timeout)
defer cancel()
return next(l, w, r.WithContext(ctx), payload)
}
}
}
func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
eventNames := make([]string, len(payload.Events))
@ -153,12 +164,12 @@ func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
if spanCtx := trace.SpanContextFromContext(r.Context()); spanCtx.IsValid() && spanCtx.IsSampled() {
l = l.With(zap.String("trace_id", spanCtx.TraceID().String()), zap.String("span_id", spanCtx.SpanID().String()))
}
l = l.With(
zap.String("event_names", strings.Join(eventNames, ",")),
zap.String("event_user_id", payload.UserID),
zap.String("event_client_id", payload.ClientID),
zap.String("event_session_id", payload.SessionID),
)
err := next(l, w, r, payload)
if err != nil {
l.Error("handled event", zap.Error(err))