From 2ef89ceb02a1b3d03b5b0ba4607d5f8ef9cf508f Mon Sep 17 00:00:00 2001 From: jgrusewski Date: Sun, 1 Mar 2026 00:39:29 +0100 Subject: [PATCH] feat(observability): wire init_observability into all 5 remaining services Replace direct tracing_subscriber::fmt::init() calls with the unified common::observability::init_observability() in api_gateway, web-gateway, data_acquisition_service, broker_gateway_service, and trading_agent_service. All 8 services now emit JSON logs + OTLP traces to Tempo. Co-Authored-By: Claude Opus 4.6 --- crates/web-gateway/src/main.rs | 7 ++++++- services/api_gateway/src/main.rs | 8 ++++++-- services/broker_gateway_service/src/main.rs | 14 ++++++-------- services/data_acquisition_service/src/main.rs | 16 +++++++--------- services/trading_agent_service/src/main.rs | 11 ++++++----- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/crates/web-gateway/src/main.rs b/crates/web-gateway/src/main.rs index fdb180e21..84e05fd11 100644 --- a/crates/web-gateway/src/main.rs +++ b/crates/web-gateway/src/main.rs @@ -21,7 +21,12 @@ pub struct RequestId(pub String); #[tokio::main] async fn main() -> Result<()> { - tracing_subscriber::fmt::init(); + // Initialize observability (JSON logging + OpenTelemetry tracing via OTLP) + let otlp_endpoint = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT") + .unwrap_or_else(|_| "http://localhost:4317".to_string()); + if let Err(e) = common::observability::init_observability("web_gateway", &otlp_endpoint).await { + eprintln!("Failed to initialize observability: {}", e); + } let config = GatewayConfig::from_env(); diff --git a/services/api_gateway/src/main.rs b/services/api_gateway/src/main.rs index 60b117efd..842289391 100644 --- a/services/api_gateway/src/main.rs +++ b/services/api_gateway/src/main.rs @@ -53,8 +53,12 @@ struct Args { async fn main() -> Result<()> { let args = Args::parse(); - // Initialize basic logging - tracing_subscriber::fmt::init(); + // Initialize observability (JSON logging + OpenTelemetry tracing via OTLP) + let otlp_endpoint = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT") + .unwrap_or_else(|_| "http://localhost:4317".to_string()); + if let Err(e) = common::observability::init_observability("api_gateway", &otlp_endpoint).await { + eprintln!("Failed to initialize observability: {}", e); + } info!("Starting Foxhunt API Gateway Service"); info!("Bind address: {}", args.bind_addr); diff --git a/services/broker_gateway_service/src/main.rs b/services/broker_gateway_service/src/main.rs index fbc99a698..8f195d21d 100644 --- a/services/broker_gateway_service/src/main.rs +++ b/services/broker_gateway_service/src/main.rs @@ -19,14 +19,12 @@ const DEFAULT_METRICS_PORT: u16 = 9096; #[tokio::main] async fn main() -> Result<()> { - // Initialize logging - tracing_subscriber::fmt() - .with_env_filter( - tracing_subscriber::EnvFilter::try_from_default_env() - .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")), - ) - .json() - .init(); + // Initialize observability (JSON logging + OpenTelemetry tracing via OTLP) + let otlp_endpoint = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT") + .unwrap_or_else(|_| "http://localhost:4317".to_string()); + if let Err(e) = common::observability::init_observability("broker_gateway", &otlp_endpoint).await { + eprintln!("Failed to initialize observability: {}", e); + } info!("🚀 Starting Foxhunt Broker Gateway Service..."); diff --git a/services/data_acquisition_service/src/main.rs b/services/data_acquisition_service/src/main.rs index d9e9fe928..fba3781d7 100644 --- a/services/data_acquisition_service/src/main.rs +++ b/services/data_acquisition_service/src/main.rs @@ -22,7 +22,7 @@ struct Args { #[arg(long, default_value = "8095", env = "DATA_ACQUISITION_HEALTH_PORT")] health_port: u16, - /// Enable debug logging + /// Enable debug logging (set RUST_LOG env for fine-grained control) #[arg(long, default_value = "false")] debug: bool, } @@ -32,14 +32,12 @@ async fn main() -> Result<(), Box> { // Parse command-line arguments let args = Args::parse(); - // Initialize tracing - let log_level = if args.debug { "debug" } else { "info" }; - tracing_subscriber::fmt() - .with_env_filter( - tracing_subscriber::EnvFilter::try_from_default_env() - .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new(log_level)), - ) - .init(); + // Initialize observability (JSON logging + OpenTelemetry tracing via OTLP) + let otlp_endpoint = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT") + .unwrap_or_else(|_| "http://localhost:4317".to_string()); + if let Err(e) = common::observability::init_observability("data_acquisition", &otlp_endpoint).await { + eprintln!("Failed to initialize observability: {}", e); + } info!("Starting Data Acquisition Service..."); info!("gRPC port: {}", args.port); diff --git a/services/trading_agent_service/src/main.rs b/services/trading_agent_service/src/main.rs index 306ec48a8..2234f8fa4 100644 --- a/services/trading_agent_service/src/main.rs +++ b/services/trading_agent_service/src/main.rs @@ -26,11 +26,12 @@ const DEFAULT_METRICS_PORT: u16 = 9095; #[tokio::main] async fn main() -> Result<()> { - // Initialize logging - tracing_subscriber::fmt() - .with_env_filter("trading_agent_service=debug,warn") - .json() - .init(); + // Initialize observability (JSON logging + OpenTelemetry tracing via OTLP) + let otlp_endpoint = std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT") + .unwrap_or_else(|_| "http://localhost:4317".to_string()); + if let Err(e) = common::observability::init_observability("trading_agent", &otlp_endpoint).await { + eprintln!("Failed to initialize observability: {}", e); + } info!("Starting Trading Agent Service...");