Line data Source code
1 : // Licensed under the Apache License, Version 2.0
2 : // Copyright 2025, Michael Bushe, All rights reserved.
3 :
4 : import 'package:dartastic_opentelemetry/src/trace/export/span_exporter.dart';
5 : import 'package:dartastic_opentelemetry/src/trace/span.dart';
6 :
7 : /// A composite exporter that delegates export operations to multiple exporters.
8 : ///
9 : /// This exporter combines multiple exporters, making it possible to export spans
10 : /// to multiple backend systems simultaneously.
11 : /// Used for debugging, it prints exported spans
12 : class CompositeExporter extends SpanExporter {
13 : /// The list of exporters to delegate to.
14 : final List<SpanExporter> spanExporters;
15 :
16 : /// Creates a new CompositeExporter with the specified exporters.
17 : ///
18 : /// @param spanExporters The list of exporters to delegate to
19 72 : CompositeExporter(this.spanExporters);
20 :
21 15 : @override
22 : Future<void> export(List<Span> spans) async {
23 30 : for (var exporter in spanExporters) {
24 15 : await exporter.export(spans);
25 : }
26 : }
27 :
28 0 : @override
29 : Future<void> forceFlush() async {
30 0 : for (var exporter in spanExporters) {
31 0 : await exporter.forceFlush();
32 : }
33 : }
34 :
35 71 : @override
36 : Future<void> shutdown() async {
37 142 : for (var exporter in spanExporters) {
38 71 : await exporter.shutdown();
39 : }
40 : }
41 : }
|