|
| 1 | +#![cfg_attr(coverage_nightly, feature(coverage_attribute))] |
| 2 | +#![cfg_attr(docsrs, feature(doc_auto_cfg))] |
| 3 | +// #![deny(missing_docs)] |
| 4 | +#![deny(unsafe_code)] |
| 5 | +#![deny(unreachable_pub)] |
| 6 | +#![deny(clippy::mod_module_files)] |
| 7 | + |
| 8 | +use std::sync::Arc; |
| 9 | + |
| 10 | +use scuffle_bootstrap_telemetry::opentelemetry; |
| 11 | +use scuffle_bootstrap_telemetry::opentelemetry_sdk::logs::SdkLoggerProvider; |
| 12 | +use scuffle_bootstrap_telemetry::opentelemetry_sdk::trace::SdkTracerProvider; |
| 13 | +use tracing_subscriber::Layer; |
| 14 | +use tracing_subscriber::layer::SubscriberExt; |
| 15 | +use tracing_subscriber::util::SubscriberInitExt; |
| 16 | + |
| 17 | +mod config; |
| 18 | + |
| 19 | +struct Global { |
| 20 | + config: config::Config, |
| 21 | + open_telemetry: opentelemetry::OpenTelemetry, |
| 22 | +} |
| 23 | + |
| 24 | +impl video_api_traits::Global for Global {} |
| 25 | + |
| 26 | +impl scuffle_signal::SignalConfig for Global {} |
| 27 | + |
| 28 | +impl scuffle_bootstrap_telemetry::TelemetryConfig for Global { |
| 29 | + fn enabled(&self) -> bool { |
| 30 | + self.config.telemetry.is_some() |
| 31 | + } |
| 32 | + |
| 33 | + fn bind_address(&self) -> Option<std::net::SocketAddr> { |
| 34 | + self.config.telemetry.as_ref().map(|telemetry| telemetry.bind) |
| 35 | + } |
| 36 | + |
| 37 | + fn http_server_name(&self) -> &str { |
| 38 | + "scufflecloud-video-api-telemetry" |
| 39 | + } |
| 40 | + |
| 41 | + fn opentelemetry(&self) -> Option<&opentelemetry::OpenTelemetry> { |
| 42 | + Some(&self.open_telemetry) |
| 43 | + } |
| 44 | +} |
| 45 | + |
| 46 | +impl scuffle_bootstrap::Global for Global { |
| 47 | + type Config = config::Config; |
| 48 | + |
| 49 | + async fn init(config: Self::Config) -> anyhow::Result<Arc<Self>> { |
| 50 | + tracing_subscriber::registry() |
| 51 | + .with( |
| 52 | + tracing_subscriber::fmt::layer() |
| 53 | + .with_filter(tracing_subscriber::EnvFilter::from_default_env().add_directive(config.level.parse()?)), |
| 54 | + ) |
| 55 | + .init(); |
| 56 | + |
| 57 | + let tracer = SdkTracerProvider::default(); |
| 58 | + opentelemetry::global::set_tracer_provider(tracer.clone()); |
| 59 | + |
| 60 | + let logger = SdkLoggerProvider::builder().build(); |
| 61 | + |
| 62 | + let open_telemetry = opentelemetry::OpenTelemetry::new().with_traces(tracer).with_logs(logger); |
| 63 | + |
| 64 | + Ok(Arc::new(Self { config, open_telemetry })) |
| 65 | + } |
| 66 | +} |
| 67 | + |
| 68 | +scuffle_bootstrap::main! { |
| 69 | + Global { |
| 70 | + scuffle_signal::SignalSvc, |
| 71 | + scufflecloud_video_api::services::VideoApiSvc::<Global>::default(), |
| 72 | + } |
| 73 | +} |
0 commit comments