@@ -8,8 +8,17 @@ import {
8
8
Transaction as TransactionInterface ,
9
9
TransactionContext ,
10
10
TransactionMetadata ,
11
+ TransactionNameChange ,
12
+ TransactionSource ,
11
13
} from '@sentry/types' ;
12
- import { createBaggage , dropUndefinedKeys , getSentryBaggageItems , isBaggageMutable , logger } from '@sentry/utils' ;
14
+ import {
15
+ createBaggage ,
16
+ dropUndefinedKeys ,
17
+ getSentryBaggageItems ,
18
+ isBaggageMutable ,
19
+ logger ,
20
+ timestampWithMs ,
21
+ } from '@sentry/utils' ;
13
22
14
23
import { Span as SpanClass , SpanRecorder } from './span' ;
15
24
@@ -45,6 +54,8 @@ export class Transaction extends SpanClass implements TransactionInterface {
45
54
this . metadata = {
46
55
...transactionContext . metadata ,
47
56
spanMetadata : { } ,
57
+ nameChanges : [ ] ,
58
+ numPropagations : 0 ,
48
59
} ;
49
60
50
61
this . _trimEnd = transactionContext . trimEnd ;
@@ -61,7 +72,9 @@ export class Transaction extends SpanClass implements TransactionInterface {
61
72
/** Setter for `name` property, which also sets `source` */
62
73
public set name ( newName : string ) {
63
74
this . _name = newName ;
64
- this . metadata . source = 'custom' ;
75
+ const source = 'custom' ;
76
+ this . metadata . source = source ;
77
+ this . metadata . nameChanges . push ( generateTransactionNameChange ( newName , source , this . metadata . numPropagations ) ) ;
65
78
}
66
79
67
80
/**
@@ -70,6 +83,7 @@ export class Transaction extends SpanClass implements TransactionInterface {
70
83
public setName ( name : string , source : TransactionMetadata [ 'source' ] = 'custom' ) : void {
71
84
this . name = name ;
72
85
this . metadata . source = source ;
86
+ this . metadata . nameChanges . push ( generateTransactionNameChange ( name , source , this . metadata . numPropagations ) ) ;
73
87
}
74
88
75
89
/**
@@ -156,6 +170,8 @@ export class Transaction extends SpanClass implements TransactionInterface {
156
170
...( metadata . source && {
157
171
transaction_info : {
158
172
source : metadata . source ,
173
+ name_changes : metadata . nameChanges ,
174
+ num_propagations : metadata . numPropagations ,
159
175
} ,
160
176
} ) ,
161
177
} ;
@@ -273,3 +289,17 @@ export class Transaction extends SpanClass implements TransactionInterface {
273
289
) ;
274
290
}
275
291
}
292
+
293
+ /** Generate objects representing a transaction name change */
294
+ export function generateTransactionNameChange (
295
+ name : string ,
296
+ source : TransactionSource ,
297
+ propagations : number ,
298
+ ) : TransactionNameChange {
299
+ return {
300
+ name,
301
+ source,
302
+ timestamp : timestampWithMs ( ) ,
303
+ propagations,
304
+ } ;
305
+ }
0 commit comments