@@ -13,6 +13,43 @@ import { getCurrentHub } from './hub';
13
13
14
14
const DEFAULT_SHUTDOWN_TIMEOUT = 2000 ;
15
15
16
+ type TransactionTypes = 'path' | 'methodPath' | 'handler' ;
17
+
18
+ /** JSDoc */
19
+ function extractTransaction ( req : { [ key : string ] : any } , type : TransactionTypes ) : string | undefined {
20
+ try {
21
+ // Express.js shape
22
+ const request = req as {
23
+ method : string ;
24
+ route : {
25
+ path : string ;
26
+ stack : [
27
+ {
28
+ name : string ;
29
+ }
30
+ ] ;
31
+ } ;
32
+ } ;
33
+
34
+ switch ( type ) {
35
+ case 'path' : {
36
+ return request . route . path ;
37
+ }
38
+ case 'handler' : {
39
+ return request . route . stack [ 0 ] . name ;
40
+ }
41
+ case 'methodPath' :
42
+ default : {
43
+ const method = request . method . toUpperCase ( ) ;
44
+ const path = request . route . path ;
45
+ return `${ method } |${ path } ` ;
46
+ }
47
+ }
48
+ } catch ( _oO ) {
49
+ return undefined ;
50
+ }
51
+ }
52
+
16
53
/** JSDoc */
17
54
function extractRequestData ( req : { [ key : string ] : any } ) : { [ key : string ] : string } {
18
55
// headers:
@@ -112,16 +149,18 @@ function parseRequest(
112
149
[ key : string ] : any ;
113
150
} ,
114
151
options ?: {
115
- version ?: boolean ;
116
152
request ?: boolean ;
117
153
serverName ?: boolean ;
154
+ transaction ?: boolean | TransactionTypes ;
118
155
user ?: boolean ;
156
+ version ?: boolean ;
119
157
} ,
120
158
) : SentryEvent {
121
159
// tslint:disable-next-line:no-parameter-reassignment
122
160
options = {
123
161
request : true ,
124
162
serverName : true ,
163
+ transaction : true ,
125
164
user : true ,
126
165
version : true ,
127
166
...options ,
@@ -152,15 +191,23 @@ function parseRequest(
152
191
} ;
153
192
}
154
193
194
+ if ( options . transaction ) {
195
+ const transaction = extractTransaction ( req , options . transaction ) ;
196
+ if ( transaction ) {
197
+ event . transaction = transaction ;
198
+ }
199
+ }
200
+
155
201
return event ;
156
202
}
157
203
158
204
/** JSDoc */
159
205
export function requestHandler ( options ?: {
160
- version ?: boolean ;
161
206
request ?: boolean ;
162
207
serverName ?: boolean ;
208
+ transaction ?: boolean | string ;
163
209
user ?: boolean ;
210
+ version ?: boolean ;
164
211
} ) : ( req : http . IncomingMessage , res : http . ServerResponse , next : ( ) => void ) => void {
165
212
return function sentryRequestMiddleware (
166
213
req : http . IncomingMessage ,
0 commit comments