Skip to content

Commit 5d824be

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

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-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

+36-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,14 @@ 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+
pub fn with_trigger(self, trigger: OpenTelemetryFaasTrigger) -> Self {
3230
Self {
33-
otel_attribute_trigger: Some(trigger.into()),
31+
otel_attribute_trigger: trigger,
3432
..self
3533
}
3634
}
@@ -47,10 +45,7 @@ where
4745
inner,
4846
flush_fn: self.flush_fn.clone(),
4947
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(),
5449
}
5550
}
5651
}
@@ -133,3 +128,33 @@ where
133128
task::Poll::Ready(ready)
134129
}
135130
}
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

Comments
 (0)