@@ -5,13 +5,15 @@ use opentelemetry_sdk::export::{self, trace::ExportResult};
5
5
use std:: io:: { stdout, Write } ;
6
6
7
7
use crate :: trace:: transform:: SpanData ;
8
+ use opentelemetry_sdk:: resource:: Resource ;
8
9
9
10
type Encoder = Box < dyn Fn ( & mut dyn Write , SpanData ) -> TraceResult < ( ) > + Send + Sync > ;
10
11
11
12
/// An OpenTelemetry exporter that writes to stdout on export.
12
13
pub struct SpanExporter {
13
14
writer : Option < Box < dyn Write + Send + Sync > > ,
14
15
encoder : Encoder ,
16
+ resource : Resource ,
15
17
}
16
18
17
19
impl fmt:: Debug for SpanExporter {
@@ -36,7 +38,11 @@ impl Default for SpanExporter {
36
38
impl opentelemetry_sdk:: export:: trace:: SpanExporter for SpanExporter {
37
39
fn export ( & mut self , batch : Vec < export:: trace:: SpanData > ) -> BoxFuture < ' static , ExportResult > {
38
40
let res = if let Some ( writer) = & mut self . writer {
39
- ( self . encoder ) ( writer, crate :: trace:: SpanData :: from ( batch) ) . and_then ( |_| {
41
+ ( self . encoder ) (
42
+ writer,
43
+ crate :: trace:: SpanData :: from ( ( batch, & self . resource ) ) ,
44
+ )
45
+ . and_then ( |_| {
40
46
writer
41
47
. write_all ( b"\n " )
42
48
. map_err ( |err| TraceError :: Other ( Box :: new ( err) ) )
@@ -51,6 +57,10 @@ impl opentelemetry_sdk::export::trace::SpanExporter for SpanExporter {
51
57
fn shutdown ( & mut self ) {
52
58
self . writer . take ( ) ;
53
59
}
60
+
61
+ fn set_resource ( & mut self , res : & opentelemetry_sdk:: Resource ) {
62
+ self . resource = res. clone ( ) ;
63
+ }
54
64
}
55
65
56
66
/// Configuration for the stdout trace exporter
@@ -107,6 +117,7 @@ impl SpanExporterBuilder {
107
117
pub fn build ( self ) -> SpanExporter {
108
118
SpanExporter {
109
119
writer : Some ( self . writer . unwrap_or_else ( || Box :: new ( stdout ( ) ) ) ) ,
120
+ resource : Resource :: default ( ) ,
110
121
encoder : self . encoder . unwrap_or_else ( || {
111
122
Box :: new ( |writer, spans| {
112
123
serde_json:: to_writer ( writer, & spans)
0 commit comments