endSpan method

  1. @override
Future<void> endSpan({
  1. required String spanId,
  2. Map<String, String> attributes = const {},
})
override

Finishes a span with optional attributes.

Call this when the sub-operation completes. The spanId must match a previously created span.

Returns Future<void> to allow for async repository operations.

Implementation

@override
Future<void> endSpan({
  required String spanId,
  Map<String, String> attributes = const {},
}) async {
  if (spanId.isEmpty) {
    throw ArgumentError('Span ID cannot be empty');
  }

  final cached = _activeSpans.remove(spanId);
  if (cached == null) {
    throw Exception('Span $spanId not found');
  }

  final now = DateTime.now().toUtc();

  await safely(
    'updateSpan',
    () => _repository.updateSpan(
      spanId: spanId,
      endTime: now,
      attributes: {...cached.attributes, ...attributes},
    ),
  );

  _activeSpans.remove(spanId);
}