From 6a9754fc32d1062dfa366abb6fbb1d4c12d942a1 Mon Sep 17 00:00:00 2001
From: Alessandro Bologna <alessandro.bologna@gmail.com>
Date: Sat, 30 Nov 2024 16:34:53 -0500
Subject: [PATCH 1/4] feat(otel): add span kind support to Lambda invocation
 tracing

---
 lambda-runtime/src/layers/otel.rs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lambda-runtime/src/layers/otel.rs b/lambda-runtime/src/layers/otel.rs
index e6b7cfff..91cb16f0 100644
--- a/lambda-runtime/src/layers/otel.rs
+++ b/lambda-runtime/src/layers/otel.rs
@@ -4,7 +4,7 @@ use crate::LambdaInvocation;
 use opentelemetry_semantic_conventions::trace as traceconv;
 use pin_project::pin_project;
 use tower::{Layer, Service};
-use tracing::{instrument::Instrumented, Instrument};
+use tracing::{instrument::Instrumented, Instrument, field};
 
 /// Tower layer to add OpenTelemetry tracing to a Lambda function invocation. The layer accepts
 /// a function to flush OpenTelemetry after the end of the invocation.
@@ -75,6 +75,7 @@ where
         let span = tracing::info_span!(
             "Lambda function invocation",
             "otel.name" = req.context.env_config.function_name,
+            "otel.kind" = field::Empty,
             { traceconv::FAAS_TRIGGER } = &self.otel_attribute_trigger,
             { traceconv::FAAS_INVOCATION_ID } = req.context.request_id,
             { traceconv::FAAS_COLDSTART } = self.coldstart

From c19bc255a18a7af143e0d4bc0870062acd360e40 Mon Sep 17 00:00:00 2001
From: Alessandro Bologna <alessandro.bologna@gmail.com>
Date: Sat, 30 Nov 2024 16:41:55 -0500
Subject: [PATCH 2/4] fix fmt

---
 lambda-runtime/src/layers/otel.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lambda-runtime/src/layers/otel.rs b/lambda-runtime/src/layers/otel.rs
index 91cb16f0..f50f36f7 100644
--- a/lambda-runtime/src/layers/otel.rs
+++ b/lambda-runtime/src/layers/otel.rs
@@ -4,7 +4,7 @@ use crate::LambdaInvocation;
 use opentelemetry_semantic_conventions::trace as traceconv;
 use pin_project::pin_project;
 use tower::{Layer, Service};
-use tracing::{instrument::Instrumented, Instrument, field};
+use tracing::{field, instrument::Instrumented, Instrument};
 
 /// Tower layer to add OpenTelemetry tracing to a Lambda function invocation. The layer accepts
 /// a function to flush OpenTelemetry after the end of the invocation.

From 62a87d846a188930f24e191b7f5d93747ee425c3 Mon Sep 17 00:00:00 2001
From: Alessandro Bologna <alessandro.bologna@gmail.com>
Date: Sat, 30 Nov 2024 23:07:06 -0500
Subject: [PATCH 3/4] docs(example): demonstrate OpenTelemetry span kind usage

---
 examples/opentelemetry-tracing/src/main.rs | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/examples/opentelemetry-tracing/src/main.rs b/examples/opentelemetry-tracing/src/main.rs
index 85c3791c..e526d45c 100644
--- a/examples/opentelemetry-tracing/src/main.rs
+++ b/examples/opentelemetry-tracing/src/main.rs
@@ -1,6 +1,6 @@
 use lambda_runtime::{
     layers::{OpenTelemetryFaasTrigger, OpenTelemetryLayer as OtelLayer},
-    LambdaEvent, Runtime,
+    LambdaEvent, Runtime, tracing::Span
 };
 use opentelemetry::trace::TracerProvider;
 use opentelemetry_sdk::{runtime, trace};
@@ -8,6 +8,8 @@ use tower::{service_fn, BoxError};
 use tracing_subscriber::prelude::*;
 
 async fn echo(event: LambdaEvent<serde_json::Value>) -> Result<serde_json::Value, &'static str> {
+    let span = Span::current();
+    span.record("otel.kind", "SERVER");
     Ok(event.payload)
 }
 

From 534b248c4cd6abb4877dde1ee499c6decd5d78b2 Mon Sep 17 00:00:00 2001
From: Alessandro Bologna <alessandro.bologna@gmail.com>
Date: Sat, 30 Nov 2024 23:24:54 -0500
Subject: [PATCH 4/4] fix fmt

---
 examples/opentelemetry-tracing/src/main.rs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/examples/opentelemetry-tracing/src/main.rs b/examples/opentelemetry-tracing/src/main.rs
index e526d45c..062f5a11 100644
--- a/examples/opentelemetry-tracing/src/main.rs
+++ b/examples/opentelemetry-tracing/src/main.rs
@@ -1,6 +1,7 @@
 use lambda_runtime::{
     layers::{OpenTelemetryFaasTrigger, OpenTelemetryLayer as OtelLayer},
-    LambdaEvent, Runtime, tracing::Span
+    tracing::Span,
+    LambdaEvent, Runtime,
 };
 use opentelemetry::trace::TracerProvider;
 use opentelemetry_sdk::{runtime, trace};