Skip to content

Commit 98bfc7d

Browse files
marco-ippolitoruyadorno
authored andcommitted
http: add diagnostic channel http.client.request.created
PR-URL: #55586 Fixes: #55352 Reviewed-By: Paolo Insogna <paolo@cowtech.it> Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com> Reviewed-By: theanarkh <theratliter@gmail.com>
1 parent 4e58785 commit 98bfc7d

4 files changed

+57
-0
lines changed

doc/api/diagnostics_channel.md

+7
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,13 @@ independently.
11221122

11231123
#### HTTP
11241124

1125+
`http.client.request.created`
1126+
1127+
* `request` {http.ClientRequest}
1128+
1129+
Emitted when client creates a request object.
1130+
Unlike `http.client.request.start`, this event is emitted before the request has been sent.
1131+
11251132
`http.client.request.start`
11261133

11271134
* `request` {http.ClientRequest}

lib/_http_client.js

+6
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ const {
8989
const kClientRequestStatistics = Symbol('ClientRequestStatistics');
9090

9191
const dc = require('diagnostics_channel');
92+
const onClientRequestCreatedChannel = dc.channel('http.client.request.created');
9293
const onClientRequestStartChannel = dc.channel('http.client.request.start');
9394
const onClientRequestErrorChannel = dc.channel('http.client.request.error');
9495
const onClientResponseFinishChannel = dc.channel('http.client.response.finish');
@@ -373,6 +374,11 @@ function ClientRequest(input, options, cb) {
373374
this.onSocket(net.createConnection(opts));
374375
}
375376
}
377+
if (onClientRequestCreatedChannel.hasSubscribers) {
378+
onClientRequestCreatedChannel.publish({
379+
request: this,
380+
});
381+
}
376382
}
377383
ObjectSetPrototypeOf(ClientRequest.prototype, OutgoingMessage.prototype);
378384
ObjectSetPrototypeOf(ClientRequest, OutgoingMessage);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('assert');
4+
const http = require('http');
5+
const dc = require('diagnostics_channel');
6+
7+
const isHTTPServer = (server) => server instanceof http.Server;
8+
const isOutgoingMessage = (object) => object instanceof http.OutgoingMessage;
9+
10+
dc.subscribe('http.client.request.created', common.mustCall(({ request }) => {
11+
assert.strictEqual(request.getHeader('foo'), 'bar');
12+
assert.strictEqual(request.getHeader('baz'), undefined);
13+
assert.strictEqual(isOutgoingMessage(request), true);
14+
assert.strictEqual(isHTTPServer(server), true);
15+
}));
16+
17+
dc.subscribe('http.client.request.start', common.mustCall(({ request }) => {
18+
assert.strictEqual(request.getHeader('foo'), 'bar');
19+
assert.strictEqual(request.getHeader('baz'), 'bar');
20+
assert.strictEqual(isOutgoingMessage(request), true);
21+
}));
22+
23+
const server = http.createServer(common.mustCall((_, res) => {
24+
res.end('done');
25+
}));
26+
27+
server.listen(async () => {
28+
const { port } = server.address();
29+
const req = http.request({
30+
port,
31+
headers: {
32+
'foo': 'bar',
33+
}
34+
}, common.mustCall(() => {
35+
server.close();
36+
}));
37+
req.setHeader('baz', 'bar');
38+
req.end();
39+
});

test/parallel/test-diagnostics-channel-http.js

+5
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ dc.subscribe('http.server.response.finish', common.mustCall(({
5353
assert.strictEqual(isHTTPServer(server), true);
5454
}));
5555

56+
dc.subscribe('http.client.request.created', common.mustCall(({ request }) => {
57+
assert.strictEqual(isOutgoingMessage(request), true);
58+
assert.strictEqual(isHTTPServer(server), true);
59+
}, 2));
60+
5661
const server = http.createServer(common.mustCall((req, res) => {
5762
res.end('done');
5863
}));

0 commit comments

Comments
 (0)