lib: fix diagnostics channel

PR-URL: https://github.com/nodejs/node/pull/44154
Fixes: https://github.com/nodejs/node/issues/44143
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Paolo Insogna <paolo@cowtech.it>
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
This commit is contained in:
theanarkh 2022-08-09 01:07:03 +08:00 committed by GitHub
parent f136e7ec31
commit fa22337901
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 14 deletions

View File

@ -6,21 +6,18 @@ const dc = require('diagnostics_channel');
const assert = require('assert'); const assert = require('assert');
const http = require('http'); const http = require('http');
const incomingStartChannel = dc.channel('http.server.request.start');
const outgoingFinishChannel = dc.channel('http.server.response.finish');
const als = new AsyncLocalStorage(); const als = new AsyncLocalStorage();
let context; let context;
// Bind requests to an AsyncLocalStorage context // Bind requests to an AsyncLocalStorage context
incomingStartChannel.subscribe(common.mustCall((message) => { dc.subscribe('http.server.request.start', common.mustCall((message) => {
als.enterWith(message); als.enterWith(message);
context = message; context = message;
})); }));
// When the request ends, verify the context has been maintained // When the request ends, verify the context has been maintained
// and that the messages contain the expected data // and that the messages contain the expected data
outgoingFinishChannel.subscribe(common.mustCall((message) => { dc.subscribe('http.server.response.finish', common.mustCall((message) => {
const data = { const data = {
request, request,
response, response,

View File

@ -5,26 +5,24 @@ const http = require('http');
const net = require('net'); const net = require('net');
const dc = require('diagnostics_channel'); const dc = require('diagnostics_channel');
const onClientRequestStart = dc.channel('http.client.request.start');
const onClientResponseFinish = dc.channel('http.client.response.finish');
const onServerRequestStart = dc.channel('http.server.request.start');
const onServerResponseFinish = dc.channel('http.server.response.finish');
const isHTTPServer = (server) => server instanceof http.Server; const isHTTPServer = (server) => server instanceof http.Server;
const isIncomingMessage = (object) => object instanceof http.IncomingMessage; const isIncomingMessage = (object) => object instanceof http.IncomingMessage;
const isOutgoingMessage = (object) => object instanceof http.OutgoingMessage; const isOutgoingMessage = (object) => object instanceof http.OutgoingMessage;
const isNetSocket = (socket) => socket instanceof net.Socket; const isNetSocket = (socket) => socket instanceof net.Socket;
onClientRequestStart.subscribe(common.mustCall(({ request }) => { dc.subscribe('http.client.request.start', common.mustCall(({ request }) => {
assert.strictEqual(isOutgoingMessage(request), true); assert.strictEqual(isOutgoingMessage(request), true);
})); }));
onClientResponseFinish.subscribe(common.mustCall(({ request, response }) => { dc.subscribe('http.client.response.finish', common.mustCall(({
request,
response
}) => {
assert.strictEqual(isOutgoingMessage(request), true); assert.strictEqual(isOutgoingMessage(request), true);
assert.strictEqual(isIncomingMessage(response), true); assert.strictEqual(isIncomingMessage(response), true);
})); }));
onServerRequestStart.subscribe(common.mustCall(({ dc.subscribe('http.server.request.start', common.mustCall(({
request, request,
response, response,
socket, socket,
@ -36,7 +34,7 @@ onServerRequestStart.subscribe(common.mustCall(({
assert.strictEqual(isHTTPServer(server), true); assert.strictEqual(isHTTPServer(server), true);
})); }));
onServerResponseFinish.subscribe(common.mustCall(({ dc.subscribe('http.server.response.finish', common.mustCall(({
request, request,
response, response,
socket, socket,