1+ 'use strict' ;
2+
3+ const shimmer = require ( './shimmer' ) ;
4+ const http = require ( 'http' ) ;
5+ const https = require ( 'https' ) ;
6+
7+ function requestListenerWrapper ( original , addLiveRequest , addCloseRequest , addSentRequest ) {
8+ return function ( req , res ) {
9+ addLiveRequest ( ) ;
10+ const start = Date . now ( ) ;
11+
12+ res . on ( 'finish' , ( ) => addSentRequest ( Date . now ( ) - start ) ) ;
13+
14+ res . on ( 'close' , ( ) => addCloseRequest ( ) ) ;
15+
16+ // call origin function
17+ const returned = original . apply ( this , arguments ) ;
18+ return returned ;
19+ } ;
20+ }
21+
22+ function serverWrapper ( addLiveRequest , addCloseRequest , addSentRequest , original ) {
23+ return function ( opts , requestListener ) {
24+ const args = Array . from ( arguments ) ;
25+ let returned ;
26+
27+ if ( typeof opts === 'function' ) {
28+ args . splice ( 0 , 1 , requestListenerWrapper ( opts , addLiveRequest , addCloseRequest , addSentRequest ) ) ;
29+ returned = original . apply ( this , args ) ;
30+ }
31+ if ( typeof requestListener === 'function' ) {
32+ args . splice ( 1 , 1 , requestListenerWrapper ( requestListener , addLiveRequest , addCloseRequest , addSentRequest ) ) ;
33+ returned = original . apply ( this , args ) ;
34+ }
35+
36+ return returned ;
37+ } ;
38+ }
39+
40+ function patchHttp ( addLiveRequest , addCloseRequest , addSentRequest ) {
41+ // patch http server
42+ shimmer . wrap ( http , 'createServer' , serverWrapper . bind ( this , addLiveRequest , addCloseRequest , addSentRequest ) ) ;
43+ // patch https server
44+ shimmer . wrap ( https , 'createServer' , serverWrapper . bind ( this , addLiveRequest , addCloseRequest , addSentRequest ) ) ;
45+ }
46+
47+ module . exports = { patchHttp } ;
0 commit comments