1
- import { _compasSentryExport } from "@compas/stdlib" ;
1
+ import { _compasSentryExport , isNil , uuid } from "@compas/stdlib" ;
2
2
3
3
/**
4
4
* Sentry support;
@@ -21,28 +21,32 @@ export function sentry() {
21
21
} ;
22
22
}
23
23
24
- return async ( ctx , next ) => {
24
+ return ( ctx , next ) => {
25
25
if ( ctx . method === "OPTIONS" || ctx . method === "HEAD" ) {
26
26
return next ( ) ;
27
27
}
28
28
29
- let traceParentData = {
30
- forceTransaction : true ,
31
- } ;
32
- if ( ctx . request . get ( "sentry-trace" ) ) {
33
- // @ts -expect-error
34
- traceParentData = _compasSentryExport . extractTraceparentData (
35
- ctx . request . get ( "sentry-trace" ) ,
36
- ) ;
29
+ if ( ! _compasSentryExport ) {
30
+ return next ( ) ;
37
31
}
38
32
39
- // @ts -expect-error
40
- return await _compasSentryExport . startSpanManual (
33
+ const traceHeader = ctx . request . get ( "sentry-trace" ) ;
34
+ /** @type {any } */
35
+ const traceParentData =
36
+ _compasSentryExport . extractTraceparentData ( traceHeader ) ?? { } ;
37
+
38
+ // Use a manual span, so we can end it right after the body is send.
39
+ return _compasSentryExport . startSpanManual (
41
40
{
41
+ // Force a new trace for every request. This keeps the traces view usable.
42
+ traceId : uuid ( ) . replace ( / - / g, "" ) ,
43
+ ...traceParentData ,
44
+ spanId : uuid ( ) . replace ( / - / g, "" ) . slice ( 16 ) ,
45
+ forceTransaction : isNil ( traceParentData . parentSpanId ) ,
46
+
42
47
op : "http.server" ,
43
48
name : "http" ,
44
49
description : "http" ,
45
- ...traceParentData ,
46
50
attributes : {
47
51
"http.request.method" : ctx . method ,
48
52
"http.request.url" : ctx . url ,
0 commit comments