1
1
import { getExpressMiddleware } from "./plugins/express-plugin" ;
2
- import { lowerCaseObjectKeys } from "./utils" ;
2
+ import { formatRequestHeaders } from "./utils" ;
3
3
import { UP9HttpConnector } from "./http-connector" ;
4
4
5
5
const POLL_INTERVAL_MS = 5000 ;
@@ -48,8 +48,9 @@ class UP9Monitor {
48
48
try {
49
49
if ( this . ownState ?. shouldTap && this . ownState . model ) {
50
50
message = this . replaceOverridenUrlsInMessage ( message ) ;
51
- if ( ! this . isRequestUrlBlacklisted ( message . request . request_url ) )
51
+ if ( ! this . isRequestUrlBlacklisted ( message . request . request_url ) ) {
52
52
await this . httpConnector . sendTrafficMessage ( this . ownState . model , message ) ;
53
+ }
53
54
else if ( this . isDebug )
54
55
console . log ( `ignoring blacklisted request to ${ message . request . request_url } ` ) ;
55
56
}
@@ -79,10 +80,14 @@ class UP9Monitor {
79
80
}
80
81
81
82
requestLogger = ( httpModule , protocol ) => {
82
- let original = httpModule . request
83
- httpModule . request = ( request , callback ) => {
83
+ httpModule . request = this . getHttpTappedFunc ( httpModule . request , protocol ) ;
84
+ httpModule . get = this . getHttpTappedFunc ( httpModule . get , protocol ) ;
85
+ }
86
+
87
+ private getHttpTappedFunc = ( originalModule , protocol ) => {
88
+ return ( request , callback ) => {
84
89
const startUnixTimestamp = + new Date ( ) ;
85
- return original ( request , ( response ) => {
90
+ return originalModule ( request , ( response ) => {
86
91
try {
87
92
let body = "" ;
88
93
response . on ( 'readable' , ( ) => {
@@ -98,7 +103,7 @@ class UP9Monitor {
98
103
}
99
104
if ( callback )
100
105
callback ( response ) ;
101
- } )
106
+ } ) ;
102
107
}
103
108
}
104
109
@@ -116,32 +121,37 @@ class UP9Monitor {
116
121
117
122
private processOutgoingMessage = ( request , response , responseBody , protocol , startUnixTimestamp , requestDuration ) => {
118
123
let url = "" ;
119
- if ( request . protocol )
124
+ if ( typeof request == "string" ) {
125
+ url = request ;
126
+ }
127
+ else if ( request . protocol )
120
128
url = `${ request . protocol } //${ request . hostname } ${ request . path } ` ;
121
129
else {
122
130
url = request . href ;
123
131
}
124
132
if ( url . indexOf ( this . env ) == - 1 ) {
133
+ const urlParts = new URL ( url ) ;
125
134
const requestHeaders = { ...request . headers } ;
126
- requestHeaders [ ':method' ] = request . method ;
127
- requestHeaders [ ':path' ] = request . path ;
128
- requestHeaders [ ':authority' ] = request . hostname ;
135
+ requestHeaders [ ':method' ] = response . req . method ;
136
+ requestHeaders [ ':path' ] = urlParts . pathname ;
137
+ requestHeaders [ ':authority' ] = urlParts . hostname ;
129
138
requestHeaders [ ':scheme' ] = protocol ;
130
139
requestHeaders [ 'x-up9-destination' ] = this . serviceName ;
140
+ requestHeaders [ 'host' ] = urlParts . hostname ;
131
141
const requestBody = request . body ;
132
142
const message = {
133
143
request : {
134
- headers : lowerCaseObjectKeys ( requestHeaders ) ,
144
+ headers : formatRequestHeaders ( requestHeaders ) ,
135
145
body : {
136
146
"truncated" : false ,
137
147
"as_bytes" : requestBody ? Buffer . from ( requestBody ) . toString ( 'base64' ) : ""
138
148
} ,
139
149
request_url : url ,
140
- hostname : request . hostname ,
150
+ hostname : urlParts . hostname ,
141
151
started_at_unix : startUnixTimestamp / 1000
142
152
} ,
143
153
response : {
144
- headers : lowerCaseObjectKeys ( { ...response . headers , ":status" : response . statusCode . toString ( ) , 'duration_ms' : requestDuration . toString ( ) } ) ,
154
+ headers : formatRequestHeaders ( { ...response . headers , ":status" : response . statusCode . toString ( ) , 'duration_ms' : requestDuration . toString ( ) } ) ,
145
155
body : {
146
156
"truncated" : false ,
147
157
"as_bytes" : responseBody ? Buffer . from ( responseBody ) . toString ( 'base64' ) : ""
0 commit comments