Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

nina9753
Copy link

What does this PR do?

Extends the official PubSub plugin capabilities and optimizes Datadog tracing instrumentation for Google Cloud Pub/Sub push messages and Cloud Events across all Node.js web frameworks.

  • Add createDeliverySpan method with scheduling duration calculation
  • Add pubsub.scheduling_duration_ms and pubsub.delivery.duration_ms tags
  • Add message ID extraction and pubsub.message_id tag
  • Add all CloudEvent headers: ce-id, ce-specversion, ce-time
  • Add proper timing logic with publish start time support
  • Add synthetic context support for backward compatibility

GCP sends push → HTTP server receives POST request
Plugin detects → "This is a Pub/Sub push!" (via User-Agent: APIs-Google)
Plugin creates → PubSub.delivery synthetic span with parent trace id from producer cloud run service (This will be reworked in another PR)
Plugin creates → HTTP span as child of PubSub span
Express inherits → Express spans inherit via scope activation
Your app processes → Business logic with automatic tracing

This makes the spans have this hierarchy :
pubsub.delivery (created by gcp-pubsub-push.js)
└── http.request (manually created as child)
└── express.request (inherits via scope activation)
└── express.middleware (inherits via scope activation)
└── your-business-logic (main.js)

Follow-up PR will be opened to create the synthetic span in the flame graph

Motivation

An inferred span for the HTTP push post to the Cloud Run service from a pub/sub topic
Example full Push Direct Span of a cloud run service triggering another service using a direct push subscription
Example full Eventarc pubsub trigger span of a cloud run service triggering another service using an Eventarc cloud event trigger

Plugin Checklist

Additional Notes

The changes had to be made in server.js because in Push Subscription, the Cloud Run Service receives HTTP Requests.

  • Google Cloud Pub/Sub acts as the HTTP client
  • The cloud run service acts as the HTTP server
  • GCP topic pushes TO the cloud run service via HTTP POST requests
  • Then the cloud run service receives the pushed messages

Follow-up PR to #6260
Additional information can be found in this doc

image

Copy link

Overall package size

Self size: 12.08 MB
Deduped: 112.16 MB
No deduping: 112.56 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.2.1 | 20.64 MB | 20.65 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.10.0 | 9.91 MB | 10.3 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.4 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | jsonpath-plus | 10.3.0 | 617.18 kB | 1.08 MB | | import-in-the-middle | 1.14.2 | 122.36 kB | 850.93 kB | | lru-cache | 10.4.3 | 804.3 kB | 804.3 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | source-map | 0.7.6 | 185.63 kB | 185.63 kB | | pprof-format | 2.2.1 | 163.06 kB | 163.06 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 7.0.5 | 63.38 kB | 63.38 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | dc-polyfill | 0.1.10 | 26.73 kB | 26.73 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@pr-commenter
Copy link

pr-commenter bot commented Sep 10, 2025

Benchmarks

Benchmark execution time: 2025-09-10 17:39:10

Comparing candidate commit 3efb6be in PR branch nina.rei/SVLS-7168/gcp-pubsub-synthetic-span with baseline commit 41ae02a in branch nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 1685 metrics, 79 unstable metrics.

Copy link

codecov bot commented Sep 10, 2025

Codecov Report

❌ Patch coverage is 2.22222% with 44 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.85%. Comparing base (41ae02a) to head (3efb6be).

Files with missing lines Patch % Lines
...-google-cloud-pubsub/src/pubsub-transit-handler.js 0.00% 44 Missing ⚠️
Additional details and impacted files
@@                                Coverage Diff                                 @@
##           nina.rei/SVLS-7168/gcp-push-pubsub-plugin-test    #6415      +/-   ##
==================================================================================
- Coverage                                           83.97%   83.85%   -0.13%     
==================================================================================
  Files                                                 485      485              
  Lines                                               20353    20397      +44     
==================================================================================
+ Hits                                                17092    17104      +12     
- Misses                                               3261     3293      +32     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant