From 29cc3c4252343ced53052abd9411ee70af041580 Mon Sep 17 00:00:00 2001 From: Josh W Lewis Date: Wed, 26 Feb 2025 19:33:24 -0600 Subject: [PATCH] Export TraceData wrapped ResourceSpans --- libcnb/src/tracing.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libcnb/src/tracing.rs b/libcnb/src/tracing.rs index 23df78d4..9930afd5 100644 --- a/libcnb/src/tracing.rs +++ b/libcnb/src/tracing.rs @@ -5,8 +5,10 @@ use opentelemetry::{ global::{self, BoxedSpan}, trace::{Span as SpanTrait, Status, Tracer, TracerProvider as TracerProviderTrait}, }; -use opentelemetry_proto::transform::common::tonic::ResourceAttributesWithSchema; use opentelemetry_proto::transform::trace::tonic::group_spans_by_resource_and_scope; +use opentelemetry_proto::{ + tonic::trace::v1::TracesData, transform::common::tonic::ResourceAttributesWithSchema, +}; use opentelemetry_sdk::{ Resource, error::{OTelSdkError, OTelSdkResult}, @@ -144,7 +146,9 @@ impl SpanExporter for FileExporter { batch: Vec, ) -> BoxFuture<'static, OTelSdkResult> { let resource = ResourceAttributesWithSchema::from(&self.resource); - let data = group_spans_by_resource_and_scope(batch, &resource); + let resource_spans = group_spans_by_resource_and_scope(batch, &resource); + let data = TracesData { resource_spans }; + let mut writer = match self.writer.lock() { Ok(f) => f, Err(e) => { @@ -217,6 +221,9 @@ mod tests { let _tracing_data: Value = serde_json::from_str(&tracing_contents) .expect("Expected tracing export file contents to be valid json"); + // Check top level structure + assert!(tracing_contents.contains("{\"resourceSpans\":[{\"resource\":")); + // Check resource attributes assert!(tracing_contents.contains( "{\"key\":\"service.name\",\"value\":{\"stringValue\":\"company.com/foo\"}}"