sesamy-go/integration/loki/middleware.go
Kevin Franklin Kim 9cca227cd3
fix: loki next
2024-11-20 17:08:28 +01:00

43 lines
1.2 KiB
Go

package loki
import (
"net/http"
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
"github.com/foomo/sesamy-go/pkg/encoding/gtagencode"
"github.com/foomo/sesamy-go/pkg/encoding/mpv2"
gtaghttp "github.com/foomo/sesamy-go/pkg/http/gtag"
mpv2http "github.com/foomo/sesamy-go/pkg/http/mpv2"
"github.com/pkg/errors"
"go.uber.org/zap"
)
func GTagMiddleware(loki *Loki) gtaghttp.Middleware {
return func(next gtaghttp.MiddlewareHandler) gtaghttp.MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *gtag.Payload) error {
err := next(l, w, r, payload)
if err != nil {
// encode to mpv2
var mpv2Payload mpv2.Payload[any]
if err := gtagencode.MPv2(*payload, &mpv2Payload); err != nil {
return errors.Wrap(err, "failed to encode gtag to mpv2")
}
loki.Write(mpv2Payload)
}
return err
}
}
}
func MPv2Middleware(loki *Loki) mpv2http.Middleware {
return func(next mpv2http.MiddlewareHandler) mpv2http.MiddlewareHandler {
return func(l *zap.Logger, w http.ResponseWriter, r *http.Request, payload *mpv2.Payload[any]) error {
err := next(l, w, r, payload)
if err != nil {
loki.Write(*payload)
}
return err
}
}
}