From 2770d4f32f50e2ab42a9e5463cc19bba8ab56810 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Mon, 18 Nov 2024 17:32:55 +0100 Subject: [PATCH] feat: transform document params --- go.mod | 2 +- .../watermill/gtag/publishermiddleware.go | 7 ++++--- .../watermill/gtag/subscribermiddleware.go | 7 ++++--- .../watermill/mpv2/publishermiddleware.go | 7 ++++--- .../watermill/mpv2/subscribermiddleware.go | 7 ++++--- pkg/encoding/gtag/decode_test.go | 2 +- pkg/encoding/gtagencode/mpv2.go | 9 +++++++++ pkg/encoding/mpv2encode/gtag.go | 16 +++++++++++----- 8 files changed, 38 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index f55d2c1..02c7d4e 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/integration/watermill/gtag/publishermiddleware.go b/integration/watermill/gtag/publishermiddleware.go index 2bd407d..4a64a48 100644 --- a/integration/watermill/gtag/publishermiddleware.go +++ b/integration/watermill/gtag/publishermiddleware.go @@ -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 diff --git a/integration/watermill/gtag/subscribermiddleware.go b/integration/watermill/gtag/subscribermiddleware.go index c54b12b..71fbc0f 100644 --- a/integration/watermill/gtag/subscribermiddleware.go +++ b/integration/watermill/gtag/subscribermiddleware.go @@ -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, "-")), diff --git a/integration/watermill/mpv2/publishermiddleware.go b/integration/watermill/mpv2/publishermiddleware.go index a1e842f..72f8de7 100644 --- a/integration/watermill/mpv2/publishermiddleware.go +++ b/integration/watermill/mpv2/publishermiddleware.go @@ -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 diff --git a/integration/watermill/mpv2/subscribermiddleware.go b/integration/watermill/mpv2/subscribermiddleware.go index 592b4ab..6f55947 100644 --- a/integration/watermill/mpv2/subscribermiddleware.go +++ b/integration/watermill/mpv2/subscribermiddleware.go @@ -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, ",")), diff --git a/pkg/encoding/gtag/decode_test.go b/pkg/encoding/gtag/decode_test.go index 33f93e0..0b060a7 100644 --- a/pkg/encoding/gtag/decode_test.go +++ b/pkg/encoding/gtag/decode_test.go @@ -40,7 +40,7 @@ func TestDecode(t *testing.T) { }, { name: "add_to_cart", - args: GTagAddToCart, + args: "v=2&tid=G-F9XM71K45T>m=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"}}`, }, { diff --git a/pkg/encoding/gtagencode/mpv2.go b/pkg/encoding/gtagencode/mpv2.go index 06c5ceb..bdecc98 100644 --- a/pkg/encoding/gtagencode/mpv2.go +++ b/pkg/encoding/gtagencode/mpv2.go @@ -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) } diff --git a/pkg/encoding/mpv2encode/gtag.go b/pkg/encoding/mpv2encode/gtag.go index 3ca1fab..1a9ed96 100644 --- a/pkg/encoding/mpv2encode/gtag.go +++ b/pkg/encoding/mpv2encode/gtag.go @@ -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{}