1
- use std:: { future:: Future , pin:: Pin , task} ;
1
+ use std:: { fmt :: Display , future:: Future , pin:: Pin , task} ;
2
2
3
3
use crate :: LambdaInvocation ;
4
4
use opentelemetry_semantic_conventions:: trace as traceconv;
@@ -10,7 +10,7 @@ use tracing::{instrument::Instrumented, Instrument};
10
10
/// a function to flush OpenTelemetry after the end of the invocation.
11
11
pub struct OpenTelemetryLayer < F > {
12
12
flush_fn : F ,
13
- otel_attribute_trigger : Option < String > ,
13
+ otel_attribute_trigger : OpenTelemetryFaasTrigger ,
14
14
}
15
15
16
16
impl < F > OpenTelemetryLayer < F >
@@ -21,16 +21,14 @@ where
21
21
pub fn new ( flush_fn : F ) -> Self {
22
22
Self {
23
23
flush_fn,
24
- otel_attribute_trigger : None ,
24
+ otel_attribute_trigger : Default :: default ( ) ,
25
25
}
26
26
}
27
27
28
28
/// Configure the `faas.trigger` attribute of the OpenTelemetry span.
29
- /// Defaults to `http` if not set.
30
- /// See https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/ for the list of possible triggers.
31
- pub fn with_trigger < T : Into < String > > ( self , trigger : T ) -> Self {
29
+ pub fn with_trigger ( self , trigger : OpenTelemetryFaasTrigger ) -> Self {
32
30
Self {
33
- otel_attribute_trigger : Some ( trigger. into ( ) ) ,
31
+ otel_attribute_trigger : trigger,
34
32
..self
35
33
}
36
34
}
47
45
inner,
48
46
flush_fn : self . flush_fn . clone ( ) ,
49
47
coldstart : true ,
50
- otel_attribute_trigger : self
51
- . otel_attribute_trigger
52
- . clone ( )
53
- . unwrap_or_else ( || "http" . to_string ( ) ) ,
48
+ otel_attribute_trigger : self . otel_attribute_trigger . to_string ( ) ,
54
49
}
55
50
}
56
51
}
@@ -133,3 +128,33 @@ where
133
128
task:: Poll :: Ready ( ready)
134
129
}
135
130
}
131
+
132
+ /// Represent the possible values for the OpenTelemetry `faas.trigger` attribute.
133
+ /// See https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/ for more details.
134
+ #[ derive( Default , Clone , Copy ) ]
135
+ #[ non_exhaustive]
136
+ pub enum OpenTelemetryFaasTrigger {
137
+ /// A response to some data source operation such as a database or filesystem read/write
138
+ #[ default]
139
+ Datasource ,
140
+ /// To provide an answer to an inbound HTTP request
141
+ Http ,
142
+ /// A function is set to be executed when messages are sent to a messaging system
143
+ PubSub ,
144
+ /// A function is scheduled to be executed regularly
145
+ Timer ,
146
+ /// If none of the others apply
147
+ Other ,
148
+ }
149
+
150
+ impl Display for OpenTelemetryFaasTrigger {
151
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
152
+ match self {
153
+ OpenTelemetryFaasTrigger :: Datasource => write ! ( f, "datasource" ) ,
154
+ OpenTelemetryFaasTrigger :: Http => write ! ( f, "http" ) ,
155
+ OpenTelemetryFaasTrigger :: PubSub => write ! ( f, "pubsub" ) ,
156
+ OpenTelemetryFaasTrigger :: Timer => write ! ( f, "timer" ) ,
157
+ OpenTelemetryFaasTrigger :: Other => write ! ( f, "other" ) ,
158
+ }
159
+ }
160
+ }
0 commit comments