Skip to content

Commit

Permalink
Merge branch 'v9' into refactor/jni
Browse files Browse the repository at this point in the history
  • Loading branch information
vaind authored Feb 13, 2025
2 parents 96c0458 + 3ab3095 commit d97ad48
Show file tree
Hide file tree
Showing 28 changed files with 1,663 additions and 3,233 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
- Remove deprecated loggers ([#2685](https://github.com/getsentry/sentry-dart/pull/2685))
- Remove user segment ([#2687](https://github.com/getsentry/sentry-dart/pull/2687))
- Remove `options.autoAppStart` and `setAppStartEnd` ([#2680](https://github.com/getsentry/sentry-dart/pull/2680))
- Add hint for transactions ([#2675](https://github.com/getsentry/sentry-dart/pull/2675))
- `BeforeSendTransactionCallback` now has a `Hint` parameter

### Enhancements

Expand Down
2 changes: 2 additions & 0 deletions dart/lib/src/hub.dart
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,7 @@ class Hub {
Future<SentryId> captureTransaction(
SentryTransaction transaction, {
SentryTraceContextHeader? traceContext,
Hint? hint,
}) async {
var sentryId = SentryId.empty();

Expand Down Expand Up @@ -603,6 +604,7 @@ class Hub {
transaction,
scope: item.scope,
traceContext: traceContext,
hint: hint,
);
} catch (exception, stackTrace) {
_options.logger(
Expand Down
2 changes: 2 additions & 0 deletions dart/lib/src/hub_adapter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,12 @@ class HubAdapter implements Hub {
Future<SentryId> captureTransaction(
SentryTransaction transaction, {
SentryTraceContextHeader? traceContext,
Hint? hint,
}) =>
Sentry.currentHub.captureTransaction(
transaction,
traceContext: traceContext,
hint: hint,
);

@override
Expand Down
1 change: 1 addition & 0 deletions dart/lib/src/noop_hub.dart
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ class NoOpHub implements Hub {
Future<SentryId> captureTransaction(
SentryTransaction transaction, {
SentryTraceContextHeader? traceContext,
Hint? hint,
}) async =>
SentryId.empty();

Expand Down
1 change: 1 addition & 0 deletions dart/lib/src/noop_sentry_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ class NoOpSentryClient implements SentryClient {
SentryTransaction transaction, {
Scope? scope,
SentryTraceContextHeader? traceContext,
Hint? hint,
}) async =>
SentryId.empty();

Expand Down
7 changes: 6 additions & 1 deletion dart/lib/src/noop_sentry_span.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'hint.dart';
import 'protocol.dart';
import 'tracing.dart';
import 'utils.dart';
Expand Down Expand Up @@ -26,7 +27,11 @@ class NoOpSentrySpan extends ISentrySpan {
}

@override
Future<void> finish({SpanStatus? status, DateTime? endTimestamp}) async {}
Future<void> finish({
SpanStatus? status,
DateTime? endTimestamp,
Hint? hint,
}) async {}

@override
void removeData(String key) {}
Expand Down
11 changes: 7 additions & 4 deletions dart/lib/src/protocol/sentry_span.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import 'package:meta/meta.dart';
import '../../sentry.dart';
import '../sentry_tracer.dart';

typedef OnFinishedCallback = Future<void> Function({DateTime? endTimestamp});
typedef OnFinishedCallback = Future<void> Function(
{DateTime? endTimestamp, Hint? hint});

class SentrySpan extends ISentrySpan {
final SentrySpanContext _context;
Expand Down Expand Up @@ -48,7 +49,8 @@ class SentrySpan extends ISentrySpan {
}

@override
Future<void> finish({SpanStatus? status, DateTime? endTimestamp}) async {
Future<void> finish(
{SpanStatus? status, DateTime? endTimestamp, Hint? hint}) async {
if (finished) {
return;
}
Expand Down Expand Up @@ -83,8 +85,9 @@ class SentrySpan extends ISentrySpan {
if (_throwable != null) {
_hub.setSpanContext(_throwable, this, _tracer.name);
}
await _finishedCallback?.call(endTimestamp: _endTimestamp);
return super.finish(status: status, endTimestamp: _endTimestamp);
await _finishedCallback?.call(endTimestamp: _endTimestamp, hint: hint);
return super
.finish(status: status, endTimestamp: _endTimestamp, hint: hint);
}

@override
Expand Down
5 changes: 3 additions & 2 deletions dart/lib/src/sentry_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,9 @@ class SentryClient {
SentryTransaction transaction, {
Scope? scope,
SentryTraceContextHeader? traceContext,
Hint? hint,
}) async {
final hint = Hint();
hint ??= Hint();

SentryTransaction? preparedTransaction =
_prepareEvent(transaction, hint) as SentryTransaction;
Expand Down Expand Up @@ -494,7 +495,7 @@ class SentryClient {
try {
if (event is SentryTransaction && beforeSendTransaction != null) {
beforeSendName = 'beforeSendTransaction';
final callbackResult = beforeSendTransaction(event);
final callbackResult = beforeSendTransaction(event, hint);
if (callbackResult is Future<SentryTransaction?>) {
processedEvent = await callbackResult;
} else {
Expand Down
1 change: 1 addition & 0 deletions dart/lib/src/sentry_options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,7 @@ typedef BeforeSendCallback = FutureOr<SentryEvent?> Function(
/// object or nothing to skip reporting the transaction
typedef BeforeSendTransactionCallback = FutureOr<SentryTransaction?> Function(
SentryTransaction transaction,
Hint hint,
);

/// This function is called with an SDK specific breadcrumb object before the breadcrumb is added
Expand Down
7 changes: 6 additions & 1 deletion dart/lib/src/sentry_span_interface.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:meta/meta.dart';

import 'hint.dart';
import 'protocol.dart';
import 'tracing.dart';

Expand All @@ -25,7 +26,11 @@ abstract class ISentrySpan {
void removeData(String key);

/// Sets span timestamp marking this span as finished.
Future<void> finish({SpanStatus? status, DateTime? endTimestamp}) async {}
Future<void> finish({
SpanStatus? status,
DateTime? endTimestamp,
Hint? hint,
}) async {}

/// Gets span status.
SpanStatus? get status;
Expand Down
13 changes: 10 additions & 3 deletions dart/lib/src/sentry_tracer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ class SentryTracer extends ISentrySpan {
}

@override
Future<void> finish({SpanStatus? status, DateTime? endTimestamp}) async {
Future<void> finish(
{SpanStatus? status, DateTime? endTimestamp, Hint? hint}) async {
final commonEndTimestamp = endTimestamp ?? _hub.options.clock();
_autoFinishAfterTimer?.cancel();
_finishStatus = SentryTracerFinishStatus.finishing(status);
Expand Down Expand Up @@ -135,7 +136,7 @@ class SentryTracer extends ISentrySpan {
if (finish is Future) {
await finish;
}
await _rootSpan.finish(endTimestamp: _rootEndTimestamp);
await _rootSpan.finish(endTimestamp: _rootEndTimestamp, hint: hint);

// remove from scope
await _hub.configureScope((scope) {
Expand All @@ -159,6 +160,7 @@ class SentryTracer extends ISentrySpan {
await _hub.captureTransaction(
transaction,
traceContext: traceContext(),
hint: hint,
);
} finally {
profiler?.dispose();
Expand Down Expand Up @@ -275,10 +277,15 @@ class SentryTracer extends ISentrySpan {

Future<void> _finishedCallback({
DateTime? endTimestamp,
Hint? hint,
}) async {
final finishStatus = _finishStatus;
if (finishStatus.finishing) {
await finish(status: finishStatus.status, endTimestamp: endTimestamp);
await finish(
status: finishStatus.status,
endTimestamp: endTimestamp,
hint: hint,
);
}
}

Expand Down
10 changes: 10 additions & 0 deletions dart/test/hub_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,16 @@ void main() {
expect(
fixture.client.captureTransactionCalls.first.traceContext, context);
});

test('captureTransaction hint is passed to client', () async {
final hub = fixture.getSut();

var hint = Hint();
var tr = SentryTransaction(fixture.tracer);
await hub.captureTransaction(tr, hint: hint);

expect(fixture.client.captureTransactionCalls.first.hint, hint);
});
});

group('Hub profiles', () {
Expand Down
41 changes: 12 additions & 29 deletions dart/test/mocks.mocks.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Mocks generated by Mockito 5.4.4 from annotations
// Mocks generated by Mockito 5.4.5 from annotations
// in sentry/test/mocks.dart.
// Do not manually edit this file.

Expand All @@ -17,20 +17,16 @@ import 'package:sentry/src/profiling.dart' as _i3;
// ignore_for_file: deprecated_member_use_from_same_package
// ignore_for_file: implementation_imports
// ignore_for_file: invalid_use_of_visible_for_testing_member
// ignore_for_file: must_be_immutable
// ignore_for_file: prefer_const_constructors
// ignore_for_file: unnecessary_parenthesis
// ignore_for_file: camel_case_types
// ignore_for_file: subtype_of_sealed_class

class _FakeSentryEnvelopeItem_0 extends _i1.SmartFake
implements _i2.SentryEnvelopeItem {
_FakeSentryEnvelopeItem_0(
Object parent,
Invocation parentInvocation,
) : super(
parent,
parentInvocation,
);
_FakeSentryEnvelopeItem_0(Object parent, Invocation parentInvocation)
: super(parent, parentInvocation);
}

/// A class which mocks [SentryProfilerFactory].
Expand All @@ -44,10 +40,8 @@ class MockSentryProfilerFactory extends _i1.Mock

@override
_i3.SentryProfiler? startProfiler(_i2.SentryTransactionContext? context) =>
(super.noSuchMethod(Invocation.method(
#startProfiler,
[context],
)) as _i3.SentryProfiler?);
(super.noSuchMethod(Invocation.method(#startProfiler, [context]))
as _i3.SentryProfiler?);
}

/// A class which mocks [SentryProfiler].
Expand All @@ -60,21 +54,16 @@ class MockSentryProfiler extends _i1.Mock implements _i3.SentryProfiler {

@override
_i4.Future<_i3.SentryProfileInfo?> finishFor(
_i2.SentryTransaction? transaction) =>
_i2.SentryTransaction? transaction,
) =>
(super.noSuchMethod(
Invocation.method(
#finishFor,
[transaction],
),
Invocation.method(#finishFor, [transaction]),
returnValue: _i4.Future<_i3.SentryProfileInfo?>.value(),
) as _i4.Future<_i3.SentryProfileInfo?>);

@override
void dispose() => super.noSuchMethod(
Invocation.method(
#dispose,
[],
),
Invocation.method(#dispose, []),
returnValueForMissingStub: null,
);
}
Expand All @@ -89,16 +78,10 @@ class MockSentryProfileInfo extends _i1.Mock implements _i3.SentryProfileInfo {

@override
_i2.SentryEnvelopeItem asEnvelopeItem() => (super.noSuchMethod(
Invocation.method(
#asEnvelopeItem,
[],
),
Invocation.method(#asEnvelopeItem, []),
returnValue: _FakeSentryEnvelopeItem_0(
this,
Invocation.method(
#asEnvelopeItem,
[],
),
Invocation.method(#asEnvelopeItem, []),
),
) as _i2.SentryEnvelopeItem);
}
Expand Down
3 changes: 2 additions & 1 deletion dart/test/mocks/mock_hub.dart
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,10 @@ class MockHub with NoSuchMethodProvider implements Hub {
Future<SentryId> captureTransaction(
SentryTransaction transaction, {
SentryTraceContextHeader? traceContext,
Hint? hint,
}) async {
captureTransactionCalls
.add(CaptureTransactionCall(transaction, traceContext));
.add(CaptureTransactionCall(transaction, traceContext, hint));
return transaction.eventId;
}

Expand Down
6 changes: 4 additions & 2 deletions dart/test/mocks/mock_sentry_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,10 @@ class MockSentryClient with NoSuchMethodProvider implements SentryClient {
SentryTransaction transaction, {
Scope? scope,
SentryTraceContextHeader? traceContext,
Hint? hint,
}) async {
captureTransactionCalls
.add(CaptureTransactionCall(transaction, traceContext));
.add(CaptureTransactionCall(transaction, traceContext, hint));
return transaction.eventId;
}
}
Expand Down Expand Up @@ -176,6 +177,7 @@ class CaptureEnvelopeCall {
class CaptureTransactionCall {
final SentryTransaction transaction;
final SentryTraceContextHeader? traceContext;
final Hint? hint;

CaptureTransactionCall(this.transaction, this.traceContext);
CaptureTransactionCall(this.transaction, this.traceContext, this.hint);
}
Loading

0 comments on commit d97ad48

Please sign in to comment.