@@ -53,11 +53,23 @@ class EnvironmentVariablesService extends ConfigService {
53
53
* @returns {string }
54
54
*/
55
55
public getXrayTraceId ( ) : string | undefined {
56
- const xRayTraceId = this . get ( this . xRayTraceIdVariable ) ;
56
+ const xRayTraceData = this . getXrayTraceData ( ) ;
57
57
58
- if ( xRayTraceId === '' ) return undefined ;
58
+ return xRayTraceData ?. Root ;
59
+ }
59
60
60
- return xRayTraceId . split ( ';' ) [ 0 ] . replace ( 'Root=' , '' ) ;
61
+ /**
62
+ * It returns true if the Sampled flag is set in the _X_AMZN_TRACE_ID environment variable.
63
+ *
64
+ * The AWS X-Ray Trace data available in the environment variable has this format:
65
+ * `Root=1-5759e988-bd862e3fe1be46a994272793;Parent=557abcec3ee5a047;Sampled=1`,
66
+ *
67
+ * @returns {boolean }
68
+ */
69
+ public getXrayTraceSampled ( ) : boolean {
70
+ const xRayTraceData = this . getXrayTraceData ( ) ;
71
+
72
+ return xRayTraceData ?. Sampled === '1' ;
61
73
}
62
74
63
75
/**
@@ -72,6 +84,28 @@ class EnvironmentVariablesService extends ConfigService {
72
84
return truthyValues . includes ( value . toLowerCase ( ) ) ;
73
85
}
74
86
87
+ /**
88
+ * It parses the key/value data present in the _X_AMZN_TRACE_ID environment variable
89
+ * and returns it as an object when available.
90
+ */
91
+ private getXrayTraceData ( ) : Record < string , string > | undefined {
92
+ const xRayTraceEnv = this . get ( this . xRayTraceIdVariable ) ;
93
+
94
+ if ( xRayTraceEnv === '' ) return undefined ;
95
+
96
+ if ( ! xRayTraceEnv . includes ( '=' ) ) return { Root : xRayTraceEnv } ;
97
+
98
+ const xRayTraceData : Record < string , string > = { } ;
99
+
100
+ xRayTraceEnv . split ( ';' ) . forEach ( ( field ) => {
101
+
102
+ const [ key , value ] = field . split ( '=' ) ;
103
+
104
+ xRayTraceData [ key ] = value ;
105
+ } ) ;
106
+
107
+ return xRayTraceData ;
108
+ }
75
109
}
76
110
77
111
export {
0 commit comments