feat: transform document params

This commit is contained in:
Kevin Franklin Kim 2024-11-18 17:32:55 +01:00
parent c5248e77c2
commit 2770d4f32f
No known key found for this signature in database
8 changed files with 38 additions and 19 deletions

2
go.mod
View File

@ -18,6 +18,7 @@ require (
github.com/pperaltaisern/watermillzap v1.0.0
github.com/prometheus/common v0.60.1
github.com/stretchr/testify v1.9.0
go.opentelemetry.io/otel/trace v1.32.0
go.uber.org/zap v1.27.0
gopkg.in/yaml.v2 v2.4.0
)
@ -112,7 +113,6 @@ require (
go.opentelemetry.io/collector/pdata v1.12.0 // indirect
go.opentelemetry.io/otel v1.32.0 // indirect
go.opentelemetry.io/otel/metric v1.32.0 // indirect
go.opentelemetry.io/otel/trace v1.32.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect

View File

@ -2,15 +2,16 @@ package gtag
import (
"github.com/ThreeDotsLabs/watermill/message"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
)
func PublisherMiddlewareIgnoreError(next PublisherHandler) PublisherHandler {
return func(l *zap.Logger, msg *message.Message) error {
if err := next(l, msg); err != nil {
// if spanCtx := trace.SpanContextFromContext(msg.Context()); spanCtx.IsValid() && spanCtx.IsSampled() {
// l = l.With(zap.String("trace_id", spanCtx.TraceID().String()), zap.String("span_id", spanCtx.SpanID().String()))
// }
if spanCtx := trace.SpanContextFromContext(msg.Context()); spanCtx.IsValid() && spanCtx.IsSampled() {
l = l.With(zap.String("trace_id", spanCtx.TraceID().String()), zap.String("span_id", spanCtx.SpanID().String()))
}
l.With(zap.Error(err)).Warn("ignoring error")
}
return nil

View File

@ -4,6 +4,7 @@ import (
"net/http"
"github.com/foomo/sesamy-go/pkg/encoding/gtag"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
)
@ -20,9 +21,9 @@ func SubscriberMiddlewareUserID(cookieName string) SubscriberMiddleware {
func SubscriberMiddlewareLogger(next SubscriberHandler) SubscriberHandler {
return func(l *zap.Logger, r *http.Request, payload *gtag.Payload) error {
// 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()))
// }
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_name", gtag.GetDefault(payload.EventName, "-").String()),
zap.String("event_user_id", gtag.GetDefault(payload.UserID, "-")),

View File

@ -5,6 +5,7 @@ import (
"github.com/ThreeDotsLabs/watermill/message"
"github.com/foomo/sesamy-go/pkg/encoding/mpv2"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
)
@ -12,9 +13,9 @@ import (
func PublisherMiddlewareIgnoreError(next PublisherHandler) PublisherHandler {
return func(l *zap.Logger, msg *message.Message) error {
if err := next(l, msg); err != nil {
// if spanCtx := trace.SpanContextFromContext(msg.Context()); spanCtx.IsValid() && spanCtx.IsSampled() {
// l = l.With(zap.String("trace_id", spanCtx.TraceID().String()), zap.String("span_id", spanCtx.SpanID().String()))
// }
if spanCtx := trace.SpanContextFromContext(msg.Context()); spanCtx.IsValid() && spanCtx.IsSampled() {
l = l.With(zap.String("trace_id", spanCtx.TraceID().String()), zap.String("span_id", spanCtx.SpanID().String()))
}
l.With(zap.Error(err)).Warn("ignoring error")
}
return nil

View File

@ -8,6 +8,7 @@ import (
"github.com/foomo/sesamy-go/pkg/encoding/mpv2"
"github.com/foomo/sesamy-go/pkg/session"
"github.com/pkg/errors"
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"
)
@ -80,9 +81,9 @@ func SubscriberMiddlewareLogger(next SubscriberHandler) SubscriberHandler {
eventNames[i] = event.Name.String()
}
// 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()))
// }
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, ",")),

View File

@ -40,7 +40,7 @@ func TestDecode(t *testing.T) {
},
{
name: "add_to_cart",
args: GTagAddToCart,
args: "v=2&tid=G-F9XM71K45T&gtm=45he45m0v9184715813z89184708445za200zb9184708445&_p=1716795486104&_dbg=1&gcd=13l3l3l2l1&npa=1&dma_cps=sypham&dma=1&cid=179294588.1715353601&ecid=788548699&ul=en-us&sr=2056x1329&_fplc=0&ur=&uaa=arm&uab=64&uafvl=Chromium%3B124.0.6367.201%7CGoogle%2520Chrome%3B124.0.6367.201%7CNot-A.Brand%3B99.0.0.0&uamb=0&uam=&uap=macOS&uapv=14.4.1&uaw=0&are=1&frm=0&pscdl=noapi&sst.gcd=13l3l3l2l1&sst.tft=1716795486104&sst.ude=0&_s=4&cu=USD&sid=1716793773&sct=14&seg=1&dl=https%3A%2F%2Fsesamy.local.bestbytes.net%2F%3Fgtm_debug%3D1716795486020&dr=https%3A%2F%2Ftagassistant.google.com%2F&dt=Home&en=add_to_cart&pr1=idSKU_12345~nmStan%20and%20Friends%20Tee~afGoogle%20Merchandise%20Store~cpSUMMER_FUN~ds2.22~lp0~brGoogle~caApparel~c2Adult~c3Shirts~c4Crew~c5Short%20sleeve~lirelated_products~lnRelated%20Products~vagreen~loChIJIQBpAG2ahYAR_6128GcTUEo~pr10.01~qt3&ep.enable_page_views=false&epn.value=30.03&_et=1255&tfd=145479&richsstsse",
want: `{"consent":{"google_consent_default":"13l3l3l2l1"},"campaign":{},"ecommerce":{"currency":"USD","items":[{"affiliation":"Google Merchandise Store","coupon":"SUMMER_FUN","discount":"2.22","item_brand":"Google","item_category":"Apparel","item_category2":"Adult","item_category3":"Shirts","item_category4":"Crew","item_category5":"Short sleeve","item_id":"SKU_12345","item_list_id":"related_products","item_list_name":"Related Products","item_name":"Stan and Friends Tee","item_variant":"green","item_list_position":"0","location_id":"ChIJIQBpAG2ahYAR_6128GcTUEo","price":"10.01","quantity":"3"}]},"client_hints":{"screen_resolution":"2056x1329","user_language":"en-us","user_agent_architecture":"arm","user_agent_bitness":"64","user_agent_full_version_list":"Chromium;124.0.6367.201|Google%20Chrome;124.0.6367.201|Not-A.Brand;99.0.0.0","user_agent_mobile":"0","user_agent_model":"","user_agent_platform":"macOS","user_agent_platform_version":"14.4.1","user_agent_wow_64":"0","user_region":""},"protocol_version":"2","tracking_id":"G-F9XM71K45T","gtmhash_info":"45he45m0v9184715813z89184708445za200zb9184708445","client_id":"179294588.1715353601","richsstsse":"","document_location":"https://sesamy.local.bestbytes.net/?gtm_debug=1716795486020","document_title":"Home","document_referrer":"https://tagassistant.google.com/","is_debug":"1","event_name":"add_to_cart","event_parameter":{"enable_page_views":"false"},"event_parameter_number":{"value":"30.03"},"session_id":"1716793773","non_personalized_ads":"1","sst":{"tft":"1716795486104","gcd":"13l3l3l2l1","ude":"0"}}`,
},
{

View File

@ -52,6 +52,15 @@ func MPv2(source gtag.Payload, target any) error {
"name": source.EventName,
}
targetEventDataParams := map[string]any{}
if value, ok := sourceData["document_title"]; ok {
targetEventDataParams["page_title"] = value
}
if value, ok := sourceData["document_referrer"]; ok {
targetEventDataParams["page_referrer"] = value
}
if value, ok := sourceData["document_location"]; ok {
targetEventDataParams["page_location"] = value
}
if node, ok := sourceData["ecommerce"].(map[string]any); ok {
maps.Copy(targetEventDataParams, node)
}

View File

@ -48,17 +48,23 @@ func GTag[P any](source mpv2.Payload[P], target any) error {
targetData["event_name"] = sourceData["name"]
if params, ok := sourceData["params"].(map[string]any); ok {
targetData["document_title"] = params["page_title"]
delete(params, "page_title")
targetData["document_referrer"] = params["page_referrer"]
delete(params, "page_referrer")
targetData["document_location"] = params["page_location"]
delete(params, "page_location")
targetData["currency"] = params["currency"]
targetData["promotion_id"] = params["promotion_id"]
targetData["promotion_name"] = params["promotion_name"]
targetData["location_id"] = params["location_id"]
targetData["is_conversion"] = params["is_conversion"]
targetData["items"] = params["items"]
delete(params, "currency")
targetData["promotion_id"] = params["promotion_id"]
delete(params, "promotion_id")
targetData["promotion_name"] = params["promotion_name"]
delete(params, "promotion_name")
targetData["location_id"] = params["location_id"]
delete(params, "location_id")
targetData["is_conversion"] = params["is_conversion"]
delete(params, "is_conversion")
targetData["items"] = params["items"]
delete(params, "items")
{ // user_property
targetEventProperty := map[string]any{}