Skip to content

Commit 25b1422

Browse files
marco-ippolitoRafaelGSS
authored andcommitted
http: add diagnostic channel http.client.request.created
PR-URL: #55586Fixes: #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 2ec4ae7 commit 25b1422

4 files changed

Lines changed: 57 additions & 0 deletions

File tree

‎doc/api/diagnostics_channel.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,6 +1123,13 @@ independently.
11231123

11241124
#### HTTP
11251125

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

11281135
*`request` {http.ClientRequest}

‎lib/_http_client.js‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ const {
8989
constkClientRequestStatistics=Symbol('ClientRequestStatistics');
9090

9191
constdc=require('diagnostics_channel');
92+
constonClientRequestCreatedChannel=dc.channel('http.client.request.created');
9293
constonClientRequestStartChannel=dc.channel('http.client.request.start');
9394
constonClientRequestErrorChannel=dc.channel('http.client.request.error');
9495
constonClientResponseFinishChannel=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);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
constcommon=require('../common');
3+
constassert=require('assert');
4+
consthttp=require('http');
5+
constdc=require('diagnostics_channel');
6+
7+
constisHTTPServer=(server)=>serverinstanceofhttp.Server;
8+
constisOutgoingMessage=(object)=>objectinstanceofhttp.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+
constserver=http.createServer(common.mustCall((_,res)=>{
24+
res.end('done');
25+
}));
26+
27+
server.listen(async()=>{
28+
const{ port }=server.address();
29+
constreq=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‎

Lines changed: 5 additions & 0 deletions
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
constserver=http.createServer(common.mustCall((req,res)=>{
5762
res.end('done');
5863
}));

0 commit comments

Comments
 (0)