Skip to content

Conversation

IlyasShabi
Copy link
Contributor

  • Instrumenting express.application.all() and route().all() emits a single canonical '*' endpoint because Router’s .all() wrapping is unreliable router.js#L3, so we handle wildcard at the Express layer.
  • Router cannot determine mount prefixes for nested routes, so we instrument express.application.use() to resolve full paths with prefixes (e.g., /v1/nested/:id) when routers are mounted.
  • Router only annotates layers with ddMatchers; Express reads these matcher strings to join mount segments deterministically without regex parsing.

Plugin Checklist

Additional Notes

Copy link

github-actions bot commented Aug 12, 2025

Overall package size

Self size: 11.36 MB
Deduped: 111.01 MB
No deduping: 111.4 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 10.1.0 | 20.37 MB | 20.37 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.9.0 | 9.77 MB | 10.14 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.3 | 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 | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 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

Copy link

codecov bot commented Aug 12, 2025

Codecov Report

❌ Patch coverage is 37.50000% with 40 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.18%. Comparing base (4640c82) to head (5ca704f).

Files with missing lines Patch % Lines
packages/datadog-instrumentations/src/express.js 22.00% 39 Missing ⚠️
packages/datadog-instrumentations/src/router.js 0.00% 1 Missing ⚠️
Additional details and impacted files
@@                           Coverage Diff                           @@
##           ishabi/endpoints-collection-fastify    #6271      +/-   ##
=======================================================================
- Coverage                                83.38%   83.18%   -0.20%     
=======================================================================
  Files                                      479      476       -3     
  Lines                                    19886    19912      +26     
=======================================================================
- Hits                                     16581    16564      -17     
- Misses                                    3305     3348      +43     

☔ 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.

@pr-commenter
Copy link

pr-commenter bot commented Aug 13, 2025

Benchmarks

Benchmark execution time: 2025-08-13 18:42:50

Comparing candidate commit 5ca704f in PR branch ishabi/endpoints-collection-express with baseline commit 4640c82 in branch ishabi/endpoints-collection-fastify.

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

@IlyasShabi IlyasShabi requested review from watson and rochdev August 13, 2025 13:56
}

// Wrap each HTTP method
METHODS.forEach(method => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is using METHODS needed here? Aren't all methods on the route HTTP methods?

}
}

function collectRoutesFromRouter (router, prefix) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If this operates on the router, doesn't it also apply to the router library? Should it be moved over there like most of the Express instrumentation already is?

const route = layer.route
const fullPath = joinPath(prefix, route.path)

Object.keys(route.methods).forEach(method => {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this could be done in just one step with a condition only on the method which would result in simpler code. Same for the similar code above.

@CarlesDD CarlesDD force-pushed the ishabi/endpoints-collection-fastify branch 2 times, most recently from 29ef6ef to 25c5f6a Compare August 22, 2025 07:09
Base automatically changed from ishabi/endpoints-collection-fastify to master August 22, 2025 07:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants