diff --git a/handwritten/pubsub/src/publisher/message-queues.ts b/handwritten/pubsub/src/publisher/message-queues.ts index 0227e585cec..ee61ae6f06e 100644 --- a/handwritten/pubsub/src/publisher/message-queues.ts +++ b/handwritten/pubsub/src/publisher/message-queues.ts @@ -33,6 +33,7 @@ import {logs as baseLogs, LoggingFunction} from '../logs'; */ export const logs = { publishBatch: baseLogs.pubsub.sublog('publish-batch') as LoggingFunction, + publishHedged: baseLogs.pubsub.sublog('publish-hedged') as LoggingFunction, }; /** diff --git a/handwritten/pubsub/src/telemetry-tracing.ts b/handwritten/pubsub/src/telemetry-tracing.ts index 77bc1588348..ece81c13a2f 100644 --- a/handwritten/pubsub/src/telemetry-tracing.ts +++ b/handwritten/pubsub/src/telemetry-tracing.ts @@ -676,6 +676,14 @@ export class PubsubEvents { PubsubEvents.addEvent('publish end', message); } + static publishStartHedged(message: MessageWithAttributes) { + PubsubEvents.addEvent('publish start (hedged)', message); + } + + static publishEndHedged(message: MessageWithAttributes) { + PubsubEvents.addEvent('publish end (hedged)', message); + } + static ackStart(message: MessageWithAttributes) { PubsubEvents.addEvent('ack start', message); } diff --git a/handwritten/pubsub/test/telemetry-tracing.ts b/handwritten/pubsub/test/telemetry-tracing.ts index cc33f25d723..243de4cc2eb 100644 --- a/handwritten/pubsub/test/telemetry-tracing.ts +++ b/handwritten/pubsub/test/telemetry-tracing.ts @@ -482,4 +482,34 @@ describe('OpenTelemetryTracer', () => { ); }); }); + + describe('PubsubEvents', () => { + it('adds publish start (hedged) and publish end (hedged) events to parentSpan', () => { + const message: PubsubMessage = {}; + const topicName = 'projects/test/topics/topicfoo'; + const span = otel.PubsubSpans.createPublisherSpan( + message, + topicName, + 'test', + ); + assert.ok(span); + message.parentSpan = span; + + otel.PubsubEvents.publishStart(message); + otel.PubsubEvents.publishStartHedged(message); + otel.PubsubEvents.publishEndHedged(message); + span.end(); + + const spans = exporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + const finishedSpan = spans[0]; + assert.ok(finishedSpan); + const eventNames = finishedSpan.events.map(e => e.name); + assert.deepStrictEqual(eventNames, [ + 'publish start', + 'publish start (hedged)', + 'publish end (hedged)', + ]); + }); + }); });