Skip to content

feat: add diagnostics_channel support for app initialization#7041

Open
DemianParkhomenko wants to merge 2 commits intoexpressjs:masterfrom
DemianParkhomenko:diagnostics-channel
Open

feat: add diagnostics_channel support for app initialization#7041
DemianParkhomenko wants to merge 2 commits intoexpressjs:masterfrom
DemianParkhomenko:diagnostics-channel

Conversation

@DemianParkhomenko
Copy link

Publishes express.initialization channel when an Express app is created,
allowing instrumentation libraries to attach middleware and hooks before
any request arrives.

Route-level tracing (start/end/error per request with matched route pattern)
will be implemented in the router module using TracingChannel API.

Refs: #6353 https://github.com/pillarjs/router/pull/96/changes

@DemianParkhomenko DemianParkhomenko marked this pull request as ready for review February 20, 2026 10:19
Copilot AI review requested due to automatic review settings February 20, 2026 10:19
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR adds support for Node.js diagnostics_channel to Express, specifically implementing an express.initialization channel that publishes when an Express application is created. This allows instrumentation libraries (like OpenTelemetry) to hook into the app lifecycle before any requests are handled, enabling better observability and monitoring capabilities.

Changes:

  • Added a new lib/diagnostics.js module that creates and exports the express.initialization diagnostics channel
  • Modified lib/express.js to publish to the initialization channel after app.init() is called
  • Added comprehensive tests for the diagnostics channel functionality

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
lib/diagnostics.js New module that creates the express.initialization diagnostics channel
lib/express.js Imports diagnostics module and publishes initialization event when app is created
test/diagnostics-channel.js Test suite verifying channel publishes correctly and handles no-subscriber case

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

var Router = require('router');
var req = require('./request');
var res = require('./response');
const channels = require('./diagnostics');
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

The codebase convention for top-level requires in lib/ files is to use var rather than const. All other module requires in this file (lines 15-21) use var, and this pattern is consistently followed across all other lib/ files (application.js, request.js, response.js, utils.js, view.js). While const is used in the codebase for destructuring and local variables inside functions, top-level requires should use var for consistency.

Suggested change
const channels = require('./diagnostics');
var channels = require('./diagnostics');

Copilot uses AI. Check for mistakes.
Comment on lines +3 to +5
const dc = require('node:diagnostics_channel');

const initialization = dc.channel('express.initialization');
Copy link

Copilot AI Feb 20, 2026

Choose a reason for hiding this comment

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

The codebase convention for top-level requires in lib/ files is to use var rather than const. This pattern is consistently followed across all other lib/ files (application.js, request.js, response.js, utils.js, view.js, express.js). While const is used in the codebase for destructuring and local variables inside functions, top-level requires should use var for consistency with the rest of the codebase.

Suggested change
const dc = require('node:diagnostics_channel');
const initialization = dc.channel('express.initialization');
var dc = require('node:diagnostics_channel');
var initialization = dc.channel('express.initialization');

Copilot uses AI. Check for mistakes.
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.

2 participants