From 29e654cabc0a3240136cc2fc3d7941e321377cce Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Mon, 16 Mar 2026 04:33:01 +0100 Subject: [PATCH] refactor: extract telemetry init to telemetry.rs --- k-tv-backend/api/src/main.rs | 21 +++++---------------- k-tv-backend/api/src/telemetry.rs | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 k-tv-backend/api/src/telemetry.rs diff --git a/k-tv-backend/api/src/main.rs b/k-tv-backend/api/src/main.rs index bd5c89b..b304a28 100644 --- a/k-tv-backend/api/src/main.rs +++ b/k-tv-backend/api/src/main.rs @@ -2,17 +2,14 @@ //! //! Configures and starts the HTTP server with JWT-based authentication. -use std::collections::VecDeque; use std::net::SocketAddr; -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use std::time::Duration as StdDuration; use axum::Router; use axum::http::{HeaderName, HeaderValue}; -use tokio::sync::broadcast; use tower_http::cors::{AllowHeaders, AllowMethods, AllowOrigin, CorsLayer}; use tracing::info; -use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt}; use domain::{ChannelService, IMediaProvider, IProviderRegistry, ProviderCapabilities, ScheduleEngineService, StreamingProtocol, UserService}; use infra::factory::{build_activity_log_repository, build_channel_repository, build_provider_config_repository, build_schedule_repository, build_user_repository}; @@ -32,6 +29,7 @@ mod poller; mod routes; mod scheduler; mod state; +mod telemetry; mod webhook; use crate::config::{Config, ConfigSource}; @@ -39,16 +37,7 @@ use crate::state::AppState; #[tokio::main] async fn main() -> anyhow::Result<()> { - // Set up broadcast channel + ring buffer for SSE log streaming. - let (log_tx, _) = broadcast::channel::(512); - let log_history = Arc::new(Mutex::new(VecDeque::::new())); - - // Initialize tracing with our custom layer in addition to the fmt layer. - tracing_subscriber::registry() - .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"))) - .with(fmt::layer()) - .with(log_layer::AppLogLayer::new(log_tx.clone(), Arc::clone(&log_history))) - .init(); + let handles = telemetry::init_tracing(); let config = Config::from_env(); @@ -246,8 +235,8 @@ async fn main() -> anyhow::Result<()> { provider_config_repo, config.clone(), event_tx.clone(), - log_tx, - log_history, + handles.log_tx, + handles.log_history, activity_log_repo, db_pool, #[cfg(feature = "local-files")] diff --git a/k-tv-backend/api/src/telemetry.rs b/k-tv-backend/api/src/telemetry.rs new file mode 100644 index 0000000..8f6be97 --- /dev/null +++ b/k-tv-backend/api/src/telemetry.rs @@ -0,0 +1,25 @@ +use std::collections::VecDeque; +use std::sync::{Arc, Mutex}; + +use tokio::sync::broadcast; +use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt}; + +use crate::log_layer::{AppLogLayer, LogLine}; + +pub struct LoggingHandles { + pub log_tx: broadcast::Sender, + pub log_history: Arc>>, +} + +pub fn init_tracing() -> LoggingHandles { + let (log_tx, _) = broadcast::channel::(512); + let log_history = Arc::new(Mutex::new(VecDeque::::new())); + + tracing_subscriber::registry() + .with(EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"))) + .with(fmt::layer()) + .with(AppLogLayer::new(log_tx.clone(), Arc::clone(&log_history))) + .init(); + + LoggingHandles { log_tx, log_history } +}