Skip to content

Commit 921b4d6

Browse files
authored
Merge branch 'main' into feat/proxy-setup
2 parents c240fc7 + 7ec9238 commit 921b4d6

File tree

6 files changed

+52
-8
lines changed

6 files changed

+52
-8
lines changed

CHANGELOG.md

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

55
### Features
66

7+
- Add support for span level measurements. ([#2214](https://github.com/getsentry/sentry-dart/pull/2214))
78
- Add proxy support ([#2192](https://github.com/getsentry/sentry-dart/pull/2192))
89
- Configure a `SentryProxy` object and set it on `SentryFlutter.init`
910
```dart

dart/lib/src/protocol/sentry_span.dart

+6-1
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,12 @@ class SentrySpan extends ISentrySpan {
242242
num value, {
243243
SentryMeasurementUnit? unit,
244244
}) {
245-
_tracer.setMeasurement(name, value, unit: unit);
245+
if (finished) {
246+
_hub.options.logger(SentryLevel.debug,
247+
"The span is already finished. Measurement $name cannot be set");
248+
return;
249+
}
250+
_tracer.setMeasurementFromChild(name, value, unit: unit);
246251
}
247252

248253
@override

dart/lib/src/sentry_span_interface.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ abstract class ISentrySpan {
7171
/// Returns the trace information that could be sent as a sentry-trace header.
7272
SentryTraceHeader toSentryTrace();
7373

74-
/// Set observed measurement for this transaction.
74+
/// Set observed measurement for this span or transaction.
7575
void setMeasurement(
7676
String name,
7777
num value, {

dart/lib/src/sentry_tracer.dart

+13-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ class SentryTracer extends ISentrySpan {
1717
late final SentrySpan _rootSpan;
1818
final List<SentrySpan> _children = [];
1919
final Map<String, dynamic> _extra = {};
20+
2021
final Map<String, SentryMeasurement> _measurements = {};
22+
Map<String, SentryMeasurement> get measurements => _measurements;
2123

2224
Timer? _autoFinishAfterTimer;
2325
Duration? _autoFinishAfter;
@@ -320,10 +322,6 @@ class SentryTracer extends ISentrySpan {
320322
@override
321323
SentryTraceHeader toSentryTrace() => _rootSpan.toSentryTrace();
322324

323-
@visibleForTesting
324-
Map<String, SentryMeasurement> get measurements =>
325-
Map.unmodifiable(_measurements);
326-
327325
bool _haveAllChildrenFinished() {
328326
for (final child in children) {
329327
if (!child.finished) {
@@ -341,10 +339,19 @@ class SentryTracer extends ISentrySpan {
341339
@override
342340
void setMeasurement(String name, num value, {SentryMeasurementUnit? unit}) {
343341
if (finished) {
342+
_hub.options.logger(SentryLevel.debug,
343+
"The tracer is already finished. Measurement $name cannot be set");
344344
return;
345345
}
346-
final measurement = SentryMeasurement(name, value, unit: unit);
347-
_measurements[name] = measurement;
346+
_measurements[name] = SentryMeasurement(name, value, unit: unit);
347+
}
348+
349+
void setMeasurementFromChild(String name, num value,
350+
{SentryMeasurementUnit? unit}) {
351+
// We don't want to overwrite span measurement, if it comes from a child.
352+
if (!_measurements.containsKey(name)) {
353+
setMeasurement(name, value, unit: unit);
354+
}
348355
}
349356

350357
@override

dart/test/sentry_span_test.dart

+15
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,21 @@ void main() {
310310
expect(fixture.hub.options.enableSpanLocalMetricAggregation, false);
311311
expect(sut.localMetricsAggregator, null);
312312
});
313+
314+
test('setMeasurement sets a measurement', () async {
315+
final sut = fixture.getSut();
316+
sut.setMeasurement("test", 1);
317+
expect(sut.tracer.measurements.containsKey("test"), true);
318+
expect(sut.tracer.measurements["test"]!.value, 1);
319+
});
320+
321+
test('setMeasurement does not set a measurement if a span is finished',
322+
() async {
323+
final sut = fixture.getSut();
324+
await sut.finish();
325+
sut.setMeasurement("test", 1);
326+
expect(sut.tracer.measurements.isEmpty, true);
327+
});
313328
}
314329

315330
class Fixture {

dart/test/sentry_tracer_test.dart

+16
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,22 @@ void main() {
467467
expect(fixture.hub.options.enableSpanLocalMetricAggregation, false);
468468
expect(sut.localMetricsAggregator, null);
469469
});
470+
471+
test('setMeasurement sets a measurement', () async {
472+
final sut = fixture.getSut();
473+
sut.setMeasurement("test", 1);
474+
expect(sut.measurements.containsKey("test"), true);
475+
expect(sut.measurements["test"]!.value, 1);
476+
});
477+
478+
test('setMeasurementFromChild does not override existing measurements',
479+
() async {
480+
final sut = fixture.getSut();
481+
sut.setMeasurement("test", 1);
482+
sut.setMeasurementFromChild("test", 5);
483+
expect(sut.measurements.containsKey("test"), true);
484+
expect(sut.measurements["test"]!.value, 1);
485+
});
470486
});
471487

472488
group('$SentryBaggageHeader', () {

0 commit comments

Comments
 (0)