Skip to content

Commit 74d5c51

Browse files
committed
fix: use datasource as default faas.trigger + introduce enum OpenTelemetryFaasTrigger
1 parent 2842e60 commit 74d5c51

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

examples/opentelemetry-tracing/src/main.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use lambda_runtime::{layers::OpenTelemetryLayer as OtelLayer, LambdaEvent, Runtime};
1+
use lambda_runtime::{
2+
layers::{OpenTelemetryFaasTrigger, OpenTelemetryLayer as OtelLayer},
3+
LambdaEvent, Runtime,
4+
};
25
use opentelemetry::trace::TracerProvider;
36
use opentelemetry_sdk::{runtime, trace};
47
use tower::{service_fn, BoxError};
@@ -30,8 +33,8 @@ async fn main() -> Result<(), BoxError> {
3033
// Make sure that the trace is exported before the Lambda runtime is frozen
3134
tracer_provider.force_flush();
3235
})
33-
// Set the "faas.trigger" attribute of the span (defaults to "http" otherwise)
34-
.with_trigger("datasource"),
36+
// Set the "faas.trigger" attribute of the span to "pubsub"
37+
.with_trigger(OpenTelemetryFaasTrigger::PubSub),
3538
);
3639
runtime.run().await?;
3740
Ok(())

lambda-runtime/src/layers/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ pub use trace::TracingLayer;
1414
#[cfg(feature = "opentelemetry")]
1515
mod otel;
1616
#[cfg(feature = "opentelemetry")]
17-
pub use otel::OpenTelemetryLayer;
17+
pub use otel::{OpenTelemetryFaasTrigger, OpenTelemetryLayer};

lambda-runtime/src/layers/otel.rs

+37-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::{future::Future, pin::Pin, task};
1+
use std::{fmt::Display, future::Future, pin::Pin, task};
22

33
use crate::LambdaInvocation;
44
use opentelemetry_semantic_conventions::trace as traceconv;
@@ -10,7 +10,7 @@ use tracing::{instrument::Instrumented, Instrument};
1010
/// a function to flush OpenTelemetry after the end of the invocation.
1111
pub struct OpenTelemetryLayer<F> {
1212
flush_fn: F,
13-
otel_attribute_trigger: Option<String>,
13+
otel_attribute_trigger: OpenTelemetryFaasTrigger,
1414
}
1515

1616
impl<F> OpenTelemetryLayer<F>
@@ -21,16 +21,15 @@ where
2121
pub fn new(flush_fn: F) -> Self {
2222
Self {
2323
flush_fn,
24-
otel_attribute_trigger: None,
24+
otel_attribute_trigger: Default::default(),
2525
}
2626
}
2727

2828
/// 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 {
3231
Self {
33-
otel_attribute_trigger: Some(trigger.into()),
32+
otel_attribute_trigger: trigger,
3433
..self
3534
}
3635
}
@@ -47,10 +46,7 @@ where
4746
inner,
4847
flush_fn: self.flush_fn.clone(),
4948
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(),
5450
}
5551
}
5652
}
@@ -133,3 +129,33 @@ where
133129
task::Poll::Ready(ready)
134130
}
135131
}
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

Comments
 (0)