UNPKG

dd-trace

Version:

Datadog APM tracing client for JavaScript

54 lines (42 loc) 1.4 kB
'use strict' const { getMessageSize } = require('../../dd-trace/src/datastreams') const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer') class GoogleCloudPubsubConsumerPlugin extends ConsumerPlugin { static id = 'google-cloud-pubsub' static operation = 'receive' bindStart (ctx) { const { message } = ctx const subscription = message._subscriber._subscription const topic = subscription.metadata && subscription.metadata.topic const childOf = this.tracer.extract('text_map', message.attributes) || null const span = this.startSpan({ childOf, resource: topic, type: 'worker', meta: { 'gcloud.project_id': subscription.pubsub.projectId, 'pubsub.topic': topic }, metrics: { 'pubsub.ack': 0 } }, ctx) if (this.config.dsmEnabled && message?.attributes) { const payloadSize = getMessageSize(message) this.tracer.decodeDataStreamsContext(message.attributes) this.tracer .setCheckpoint(['direction:in', `topic:${topic}`, 'type:google-pubsub'], span, payloadSize) } return ctx.currentStore } bindFinish (ctx) { const { message } = ctx const span = ctx.currentStore.span if (message?._handled) { span.setTag('pubsub.ack', 1) } super.finish() return ctx.parentStore } } module.exports = GoogleCloudPubsubConsumerPlugin