From 48e2c3a2559837b45a1f393f53d394ecb08d556a Mon Sep 17 00:00:00 2001 From: Hakan Kutluay <77051856+hakankutluay@users.noreply.github.com> Date: Thu, 9 Jun 2022 12:23:10 +0300 Subject: [PATCH 1/4] contrib/cloud.google.com/go/pubsub.v1: add Option to Publish Add service name and measured options to the Publish and WrapReceiveHandler closes Datadog#1141 --- .../cloud.google.com/go/pubsub.v1/option.go | 26 ++++++++++++ .../cloud.google.com/go/pubsub.v1/pubsub.go | 41 ++++++++++--------- 2 files changed, 48 insertions(+), 19 deletions(-) create mode 100644 contrib/cloud.google.com/go/pubsub.v1/option.go diff --git a/contrib/cloud.google.com/go/pubsub.v1/option.go b/contrib/cloud.google.com/go/pubsub.v1/option.go new file mode 100644 index 0000000000..e46413f498 --- /dev/null +++ b/contrib/cloud.google.com/go/pubsub.v1/option.go @@ -0,0 +1,26 @@ +package pubsub + +type config struct { + serviceName string + measured bool +} + +// A Option is used to customize spans started by WrapReceiveHandler or Publish. +type Option func(cfg *config) + +// A ReceiveOption has been deprecated in favor of Option. +type ReceiveOption = Option + +// WithServiceName sets the service name tag for traces started by WrapReceiveHandler or Publish. +func WithServiceName(serviceName string) Option { + return func(cfg *config) { + cfg.serviceName = serviceName + } +} + +// WithMeasured sets the measured tag for traces started by WrapReceiveHandler or Publish. +func WithMeasured() Option { + return func(cfg *config) { + cfg.measured = true + } +} diff --git a/contrib/cloud.google.com/go/pubsub.v1/pubsub.go b/contrib/cloud.google.com/go/pubsub.v1/pubsub.go index 3e2082c47b..8b0f59654b 100644 --- a/contrib/cloud.google.com/go/pubsub.v1/pubsub.go +++ b/contrib/cloud.google.com/go/pubsub.v1/pubsub.go @@ -24,14 +24,28 @@ import ( // the published message. // It is required to call (*PublishResult).Get(ctx) on the value returned by Publish to complete // the span. -func Publish(ctx context.Context, t *pubsub.Topic, msg *pubsub.Message) *PublishResult { - span, ctx := tracer.StartSpanFromContext( - ctx, - "pubsub.publish", +func Publish(ctx context.Context, t *pubsub.Topic, msg *pubsub.Message, opts ...Option) *PublishResult { + var cfg config + for _, opt := range opts { + opt(&cfg) + } + + spanOpts := []ddtrace.StartSpanOption{ tracer.ResourceName(t.String()), tracer.SpanType(ext.SpanTypeMessageProducer), tracer.Tag("message_size", len(msg.Data)), tracer.Tag("ordering_key", msg.OrderingKey), + } + if cfg.serviceName != "" { + spanOpts = append(spanOpts, tracer.ServiceName(cfg.serviceName)) + } + if cfg.measured { + spanOpts = append(spanOpts, tracer.Measured()) + } + span, ctx := tracer.StartSpanFromContext( + ctx, + "pubsub.publish", + spanOpts..., ) if msg.Attributes == nil { msg.Attributes = make(map[string]string) @@ -64,24 +78,10 @@ func (r *PublishResult) Get(ctx context.Context) (string, error) { return serverID, err } -type config struct { - serviceName string -} - -// A ReceiveOption is used to customize spans started by WrapReceiveHandler. -type ReceiveOption func(cfg *config) - -// WithServiceName sets the service name tag for traces started by WrapReceiveHandler. -func WithServiceName(serviceName string) ReceiveOption { - return func(cfg *config) { - cfg.serviceName = serviceName - } -} - // WrapReceiveHandler returns a receive handler that wraps the supplied handler, // extracts any tracing metadata attached to the received message, and starts a // receive span. -func WrapReceiveHandler(s *pubsub.Subscription, f func(context.Context, *pubsub.Message), opts ...ReceiveOption) func(context.Context, *pubsub.Message) { +func WrapReceiveHandler(s *pubsub.Subscription, f func(context.Context, *pubsub.Message), opts ...Option) func(context.Context, *pubsub.Message) { var cfg config for _, opt := range opts { opt(&cfg) @@ -102,6 +102,9 @@ func WrapReceiveHandler(s *pubsub.Subscription, f func(context.Context, *pubsub. if cfg.serviceName != "" { opts = append(opts, tracer.ServiceName(cfg.serviceName)) } + if cfg.measured { + opts = append(opts, tracer.Measured()) + } span, ctx := tracer.StartSpanFromContext(ctx, "pubsub.receive", opts...) if msg.DeliveryAttempt != nil { span.SetTag("delivery_attempt", *msg.DeliveryAttempt) From 7ba4d2747967eab719f9f8a7cf2e60e0e1d38c8a Mon Sep 17 00:00:00 2001 From: Hakan Kutluay <77051856+hakankutluay@users.noreply.github.com> Date: Thu, 9 Jun 2022 16:47:42 +0300 Subject: [PATCH 2/4] contrib/cloud.google.com/go/pubsub.v1/pubsub.go: remove empty line --- contrib/cloud.google.com/go/pubsub.v1/pubsub.go | 1 - 1 file changed, 1 deletion(-) diff --git a/contrib/cloud.google.com/go/pubsub.v1/pubsub.go b/contrib/cloud.google.com/go/pubsub.v1/pubsub.go index 8b0f59654b..6daf0f88b3 100644 --- a/contrib/cloud.google.com/go/pubsub.v1/pubsub.go +++ b/contrib/cloud.google.com/go/pubsub.v1/pubsub.go @@ -29,7 +29,6 @@ func Publish(ctx context.Context, t *pubsub.Topic, msg *pubsub.Message, opts ... for _, opt := range opts { opt(&cfg) } - spanOpts := []ddtrace.StartSpanOption{ tracer.ResourceName(t.String()), tracer.SpanType(ext.SpanTypeMessageProducer), From e8dc9697ae71a23925ac09ec0bd4d56ddc5b4c34 Mon Sep 17 00:00:00 2001 From: Andrew Glaude Date: Mon, 27 Jun 2022 15:30:49 -0400 Subject: [PATCH 3/4] Adding copyright notice to make linter pass --- contrib/cloud.google.com/go/pubsub.v1/option.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contrib/cloud.google.com/go/pubsub.v1/option.go b/contrib/cloud.google.com/go/pubsub.v1/option.go index e46413f498..2c71289976 100644 --- a/contrib/cloud.google.com/go/pubsub.v1/option.go +++ b/contrib/cloud.google.com/go/pubsub.v1/option.go @@ -1,3 +1,8 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2020 Datadog, Inc. + package pubsub type config struct { From dc02a5c8b3941dd03fe3f09509b24d9b7b438a34 Mon Sep 17 00:00:00 2001 From: Andrew Glaude Date: Mon, 27 Jun 2022 15:31:33 -0400 Subject: [PATCH 4/4] I forgot what year it was, whoops --- contrib/cloud.google.com/go/pubsub.v1/option.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/cloud.google.com/go/pubsub.v1/option.go b/contrib/cloud.google.com/go/pubsub.v1/option.go index 2c71289976..c28b560bc6 100644 --- a/contrib/cloud.google.com/go/pubsub.v1/option.go +++ b/contrib/cloud.google.com/go/pubsub.v1/option.go @@ -1,7 +1,7 @@ // Unless explicitly stated otherwise all files in this repository are licensed // under the Apache License Version 2.0. // This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2020 Datadog, Inc. +// Copyright 2022 Datadog, Inc. package pubsub