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,15 @@ 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
+ /// Defaults to [OpenTelemetryFaasTrigger::Datasource] if not set.
30
+ pub fn with_trigger ( self , trigger : OpenTelemetryFaasTrigger ) -> Self {
32
31
Self {
33
- otel_attribute_trigger : Some ( trigger. into ( ) ) ,
32
+ otel_attribute_trigger : trigger,
34
33
..self
35
34
}
36
35
}
47
46
inner,
48
47
flush_fn : self . flush_fn . clone ( ) ,
49
48
coldstart : true ,
50
- otel_attribute_trigger : self
51
- . otel_attribute_trigger
52
- . clone ( )
53
- . unwrap_or_else ( || "http" . to_string ( ) ) ,
49
+ otel_attribute_trigger : self . otel_attribute_trigger . to_string ( ) ,
54
50
}
55
51
}
56
52
}
@@ -133,3 +129,33 @@ where
133
129
task:: Poll :: Ready ( ready)
134
130
}
135
131
}
132
+
133
+ /// Represent the possible values for the OpenTelemetry `faas.trigger` attribute.
134
+ /// See https://opentelemetry.io/docs/specs/semconv/attributes-registry/faas/ for more details.
135
+ #[ derive( Default , Clone , Copy ) ]
136
+ #[ non_exhaustive]
137
+ pub enum OpenTelemetryFaasTrigger {
138
+ /// A response to some data source operation such as a database or filesystem read/write
139
+ #[ default]
140
+ Datasource ,
141
+ /// To provide an answer to an inbound HTTP request
142
+ Http ,
143
+ /// A function is set to be executed when messages are sent to a messaging system
144
+ PubSub ,
145
+ /// A function is scheduled to be executed regularly
146
+ Timer ,
147
+ /// If none of the others apply
148
+ Other ,
149
+ }
150
+
151
+ impl Display for OpenTelemetryFaasTrigger {
152
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
153
+ match self {
154
+ OpenTelemetryFaasTrigger :: Datasource => write ! ( f, "datasource" ) ,
155
+ OpenTelemetryFaasTrigger :: Http => write ! ( f, "http" ) ,
156
+ OpenTelemetryFaasTrigger :: PubSub => write ! ( f, "pubsub" ) ,
157
+ OpenTelemetryFaasTrigger :: Timer => write ! ( f, "timer" ) ,
158
+ OpenTelemetryFaasTrigger :: Other => write ! ( f, "other" ) ,
159
+ }
160
+ }
161
+ }
0 commit comments