feat(otel): propagate session.id to spans and log records (#7490)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
@@ -4,9 +4,14 @@ use goose::providers::api_client::{ApiClient, AuthMethod};
|
||||
use goose::providers::base::Provider;
|
||||
use goose::providers::openai::OpenAiProvider;
|
||||
use goose::session_context::SESSION_ID_HEADER;
|
||||
use opentelemetry::logs::AnyValue;
|
||||
use opentelemetry::Key;
|
||||
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
|
||||
use opentelemetry_sdk::logs::{InMemoryLogExporterBuilder, SdkLoggerProvider};
|
||||
use serde_json::json;
|
||||
use std::sync::Arc;
|
||||
use std::sync::Mutex;
|
||||
use tracing_subscriber::prelude::*;
|
||||
use wiremock::matchers::{method, path};
|
||||
use wiremock::{Mock, MockServer, Request, ResponseTemplate};
|
||||
|
||||
@@ -104,6 +109,37 @@ async fn make_request(provider: &dyn Provider, session_id: &str) {
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_session_id_propagates_to_log_records() {
|
||||
let exporter = InMemoryLogExporterBuilder::default().build();
|
||||
let provider = SdkLoggerProvider::builder()
|
||||
.with_simple_exporter(exporter.clone())
|
||||
.build();
|
||||
|
||||
let layer = OpenTelemetryTracingBridge::builder(&provider)
|
||||
.with_span_attribute_allowlist(["session.id"])
|
||||
.build();
|
||||
let subscriber = tracing_subscriber::registry().with(layer);
|
||||
let _guard = tracing::subscriber::set_default(subscriber);
|
||||
|
||||
let span = tracing::info_span!("test", session.id = "test-session-42");
|
||||
let _enter = span.enter();
|
||||
tracing::info!("hello from test");
|
||||
drop(_enter);
|
||||
drop(_guard);
|
||||
|
||||
provider.force_flush().unwrap();
|
||||
let logs = exporter.get_emitted_logs().unwrap();
|
||||
assert_eq!(logs.len(), 1);
|
||||
let log = &logs[0];
|
||||
|
||||
let has_session_id = log.record.attributes_iter().any(|(k, v)| {
|
||||
k == &Key::new("session.id")
|
||||
&& matches!(v, AnyValue::String(s) if s.as_str() == "test-session-42")
|
||||
});
|
||||
assert!(has_session_id);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_session_id_propagation_to_llm() {
|
||||
let (_, capture, provider) = setup_mock_server().await;
|
||||
|
||||
Reference in New Issue
Block a user