mirror of
https://github.com/foomo/sesamy-go.git
synced 2025-10-16 12:35:43 +00:00
feat: add with timeout middleware
This commit is contained in:
parent
603cc9e45b
commit
69fc1ac71d
@ -1,7 +1,9 @@
|
|||||||
package gtag
|
package gtag
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
|
||||||
"github.com/foomo/sesamy-go/pkg/encoding/gtagencode"
|
"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 {
|
func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
|
||||||
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *gtag.Payload) error {
|
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() {
|
if spanCtx := trace.SpanContextFromContext(r.Context()); spanCtx.IsValid() && spanCtx.IsSampled() {
|
||||||
@ -60,6 +72,7 @@ func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
|
|||||||
l = l.With(
|
l = l.With(
|
||||||
zap.String("event_name", gtag.GetDefault(payload.EventName, "-").String()),
|
zap.String("event_name", gtag.GetDefault(payload.EventName, "-").String()),
|
||||||
zap.String("event_user_id", gtag.GetDefault(payload.UserID, "-")),
|
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, "-")),
|
zap.String("event_session_id", gtag.GetDefault(payload.SessionID, "-")),
|
||||||
)
|
)
|
||||||
err := next(l, w, r, payload)
|
err := next(l, w, r, payload)
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package mpv2
|
package mpv2
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"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 {
|
func MiddlewareLogger(next MiddlewareHandler) MiddlewareHandler {
|
||||||
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
|
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
|
||||||
eventNames := make([]string, len(payload.Events))
|
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() {
|
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("trace_id", spanCtx.TraceID().String()), zap.String("span_id", spanCtx.SpanID().String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
l = l.With(
|
l = l.With(
|
||||||
zap.String("event_names", strings.Join(eventNames, ",")),
|
zap.String("event_names", strings.Join(eventNames, ",")),
|
||||||
zap.String("event_user_id", payload.UserID),
|
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)
|
err := next(l, w, r, payload)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
l.Error("handled event", zap.Error(err))
|
l.Error("handled event", zap.Error(err))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user