Skip to content

Commit bdd1a23

Browse files
authored
Add Sampling Decision to Trace Envelope Header (#1639)
* add sampled flag * fmt * update changelog * redo fmt * fix tests
1 parent d53c6fa commit bdd1a23

8 files changed

+21
-4
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Enhancements
66

7+
- Add Sampling Decision to Trace Envelope Header ([#1639](https://github.com/getsentry/sentry-dart/pull/1639))
78
- Add http.request.method attribute to http spans data ([#1633](https://github.com/getsentry/sentry-dart/pull/1633))
89
- Add db.system and db.name attributes to db spans data ([#1629](https://github.com/getsentry/sentry-dart/pull/1629))
910
- Log SDK errors to the console if the log level is `fatal` even if `debug` is disabled ([#1635](https://github.com/getsentry/sentry-dart/pull/1635))

dart/lib/src/sentry_baggage.dart

+4
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,10 @@ class SentryBaggage {
188188
set(_sampleRateKeyName, value);
189189
}
190190

191+
void setSampled(String value) {
192+
set('sentry-sampled', value);
193+
}
194+
191195
double? getSampleRate() {
192196
final sampleRate = get(_sampleRateKeyName);
193197
if (sampleRate == null) {

dart/lib/src/sentry_trace_context_header.dart

+7-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class SentryTraceContextHeader {
1212
this.userSegment,
1313
this.transaction,
1414
this.sampleRate,
15+
this.sampled,
1516
});
1617

1718
final SentryId traceId;
@@ -22,6 +23,7 @@ class SentryTraceContextHeader {
2223
final String? userSegment;
2324
final String? transaction;
2425
final String? sampleRate;
26+
final String? sampled;
2527

2628
/// Deserializes a [SentryTraceContextHeader] from JSON [Map].
2729
factory SentryTraceContextHeader.fromJson(Map<String, dynamic> json) {
@@ -34,6 +36,7 @@ class SentryTraceContextHeader {
3436
userSegment: json['user_segment'],
3537
transaction: json['transaction'],
3638
sampleRate: json['sample_rate'],
39+
sampled: json['sampled'],
3740
);
3841
}
3942

@@ -48,6 +51,7 @@ class SentryTraceContextHeader {
4851
if (userSegment != null) 'user_segment': userSegment,
4952
if (transaction != null) 'transaction': transaction,
5053
if (sampleRate != null) 'sample_rate': sampleRate,
54+
if (sampled != null) 'sampled': sampled,
5155
};
5256
}
5357

@@ -76,7 +80,9 @@ class SentryTraceContextHeader {
7680
if (sampleRate != null) {
7781
baggage.setSampleRate(sampleRate!);
7882
}
79-
83+
if (sampled != null) {
84+
baggage.setSampled(sampled!);
85+
}
8086
return baggage;
8187
}
8288

dart/lib/src/sentry_tracer.dart

+1
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ class SentryTracer extends ISentrySpan {
346346
transaction:
347347
_isHighQualityTransactionName(transactionNameSource) ? name : null,
348348
sampleRate: _sampleRateToString(_rootSpan.samplingDecision?.sampleRate),
349+
sampled: _rootSpan.samplingDecision?.sampled.toString(),
349350
);
350351

351352
return _sentryTraceContextHeader;

dart/test/protocol/sentry_baggage_header_test.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ void main() {
2020
baggage.setUserSegment('userSegment');
2121
baggage.setTransaction('transaction');
2222
baggage.setSampleRate('1.0');
23+
baggage.setSampled('false');
2324

2425
final baggageHeader = SentryBaggageHeader.fromBaggage(baggage);
2526

2627
expect(baggageHeader.value,
27-
'sentry-trace_id=$id,sentry-public_key=publicKey,sentry-release=release,sentry-environment=environment,sentry-user_id=userId,sentry-user_segment=userSegment,sentry-transaction=transaction,sentry-sample_rate=1.0');
28+
'sentry-trace_id=$id,sentry-public_key=publicKey,sentry-release=release,sentry-environment=environment,sentry-user_id=userId,sentry-user_segment=userSegment,sentry-transaction=transaction,sentry-sample_rate=1.0,sentry-sampled=false');
2829
});
2930
});
3031
}

dart/test/sentry_trace_context_header_test.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ void main() {
1414
'user_segment': 'user_segment',
1515
'transaction': 'transaction',
1616
'sample_rate': '1.0',
17+
'sampled': 'false'
1718
};
1819
final context = SentryTraceContextHeader.fromJson(mapJson);
1920

@@ -26,6 +27,7 @@ void main() {
2627
expect(context.userSegment, 'user_segment');
2728
expect(context.transaction, 'transaction');
2829
expect(context.sampleRate, '1.0');
30+
expect(context.sampled, 'false');
2931
});
3032

3133
test('toJson', () {
@@ -38,7 +40,7 @@ void main() {
3840
final baggage = context.toBaggage();
3941

4042
expect(baggage.toHeaderString(),
41-
'sentry-trace_id=${id.toString()},sentry-public_key=123,sentry-release=release,sentry-environment=environment,sentry-user_id=user_id,sentry-user_segment=user_segment,sentry-transaction=transaction,sentry-sample_rate=1.0');
43+
'sentry-trace_id=${id.toString()},sentry-public_key=123,sentry-release=release,sentry-environment=environment,sentry-user_id=user_id,sentry-user_segment=user_segment,sentry-transaction=transaction,sentry-sample_rate=1.0,sentry-sampled=false');
4244
});
4345
});
4446
}

dart/test/sentry_tracer_test.dart

+2
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,7 @@ void main() {
489489
expect(newBaggage.get('sentry-user_segment'), 'segment');
490490
expect(newBaggage.get('sentry-transaction'), 'name');
491491
expect(newBaggage.get('sentry-sample_rate'), '1');
492+
expect(newBaggage.get('sentry-sampled'), 'true');
492493
});
493494

494495
test('skip transaction name if low cardinality', () {
@@ -562,6 +563,7 @@ void main() {
562563
expect(context.userSegment, 'segment');
563564
expect(context.transaction, 'name');
564565
expect(context.sampleRate, '1');
566+
expect(context.sampled, 'true');
565567
});
566568
});
567569
}

dart/test/utils/tracing_utils_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ void main() {
125125
addBaggageHeaderFromSpan(sut, headers);
126126

127127
expect(headers[baggage!.name],
128-
'other-vendor-value=foo,sentry-trace_id=${sut.context.traceId},sentry-public_key=abc,sentry-release=release,sentry-environment=environment,sentry-user_segment=segment,sentry-transaction=name,sentry-sample_rate=1');
128+
'other-vendor-value=foo,sentry-trace_id=${sut.context.traceId},sentry-public_key=abc,sentry-release=release,sentry-environment=environment,sentry-user_segment=segment,sentry-transaction=name,sentry-sample_rate=1,sentry-sampled=true');
129129
});
130130
});
131131

0 commit comments

Comments
 (0)