diff --git a/Cargo.lock b/Cargo.lock index 6910426..877e8cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,13 +4,15 @@ version = 4 [[package]] name = "RhythmWorks" -version = "0.6.0" +version = "0.7.0" dependencies = [ "color-eyre", "crossterm", "dialoguer", "keyring", "opentelemetry 0.27.1", + "opentelemetry-appender-log", + "opentelemetry-appender-tracing", "opentelemetry-otlp", "opentelemetry-proto", "opentelemetry-semantic-conventions", @@ -2560,6 +2562,28 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "opentelemetry-appender-log" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "892c3a3fe0cf009cc180366347bfa134c662f028039bce8aa35994830c68c84f" +dependencies = [ + "log", + "opentelemetry 0.27.1", +] + +[[package]] +name = "opentelemetry-appender-tracing" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5feffc321035ad94088a7e5333abb4d84a8726e54a802e736ce9dd7237e85b" +dependencies = [ + "opentelemetry 0.27.1", + "tracing", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "opentelemetry-http" version = "0.27.0" diff --git a/Cargo.toml b/Cargo.toml index 0cbe0db..7912d86 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "RhythmWorks" -version = "0.6.0" +version = "0.7.0" edition = "2024" [dependencies] @@ -9,10 +9,12 @@ crossterm = "0.29.0" dialoguer = "0.12.0" keyring = { version = "3.6.3", features = ["linux-native", "windows-native"] } opentelemetry = { version = "0.27.0", features = ["logs", "metrics", "trace"] } -opentelemetry-otlp = { version = "0.27.0", features = ["trace", "metrics", "grpc-tonic", "http-proto", "tls", "reqwest-client", "reqwest-rustls"] } +opentelemetry-appender-log = "0.27.0" +opentelemetry-appender-tracing = "0.27.0" +opentelemetry-otlp = { version = "0.27.0", features = ["trace", "metrics", "grpc-tonic", "http-proto", "tls", "reqwest-client", "reqwest-rustls", "logs"] } opentelemetry-proto = "0.27.0" opentelemetry-semantic-conventions = "0.27.0" -opentelemetry_sdk = { version = "0.27.0", features = ["rt-tokio", "trace"] } +opentelemetry_sdk = { version = "0.27.0", features = ["logs", "rt-tokio", "trace"] } ratatui = { version = "0.30.0", features = ["all-widgets"] } reqwest = { version = "0.12.28", features = ["blocking", "json"] } semver = "1.0.27" diff --git a/src/main.rs b/src/main.rs index 73a6806..e9430dd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,11 +18,17 @@ use songbird::events::EventHandler as VoiceEventHandler; use songbird::get; use songbird::input::HlsRequest; use songbird::input::Input; +use tracing::instrument; use std::env; use std::process::Command; use std::process::Stdio; use tokio::task::JoinHandle; use tokio_util::sync::CancellationToken; +use tracing::level_filters::LevelFilter; +use tracing_subscriber::Layer; +use tracing_subscriber::filter::Targets; +use tracing_subscriber::layer::SubscriberExt; +use tracing_subscriber::util::SubscriberInitExt; pub mod modules; enum BotState { @@ -89,6 +95,7 @@ impl EventHandler for Handler { let cx = opentelemetry::Context::current_with_span(span); let guild_id = match msg.guild_id { Some(g) => { + tracing::info!("Received Guild ID"); cx.span().add_event( "Received Guild ID", vec![KeyValue::new("Server ID", g.to_string())], @@ -387,8 +394,15 @@ async fn main() { This program comes with ABSOLUTELY NO WARRANTY\n This is free software, and you are welcome to redistribute it under certain conditions." ); - let tracer_provider = telemetry::init_telemetry(); + let (tracer_provider, logger_provider) = telemetry::init_telemetry(); global::set_tracer_provider(tracer_provider.clone()); + let filter = Targets::new() + .with_target("RhythmWorks", LevelFilter::INFO) + .with_default(LevelFilter::OFF); + let otel_log_layer = + opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge::new(&logger_provider) + .with_filter(filter); + tracing_subscriber::registry().with(otel_log_layer).init(); let tracer: global::BoxedTracer = global::tracer("tracer"); tracer .in_span("Checking for Updates", |_cx| updator::update()) diff --git a/src/modules/telemetry.rs b/src/modules/telemetry.rs index 6d78b9e..7ff95d2 100644 --- a/src/modules/telemetry.rs +++ b/src/modules/telemetry.rs @@ -1,9 +1,13 @@ use opentelemetry::KeyValue; +use opentelemetry::global; use opentelemetry_otlp::{WithExportConfig, WithTonicConfig}; -use opentelemetry_sdk::{Resource, runtime}; +use opentelemetry_sdk::{Resource, logs, runtime}; use tonic::transport::{Channel, ClientTlsConfig}; -pub fn init_telemetry() -> opentelemetry_sdk::trace::TracerProvider { +pub fn init_telemetry() -> ( + opentelemetry_sdk::trace::TracerProvider, + opentelemetry_sdk::logs::LoggerProvider, +) { let endpoint = "https://signoz.racooncity.org".to_string(); let channel = Channel::from_shared(endpoint.clone()) .unwrap() @@ -13,14 +17,28 @@ pub fn init_telemetry() -> opentelemetry_sdk::trace::TracerProvider { let exporter = opentelemetry_otlp::SpanExporter::builder() .with_tonic() .with_endpoint(endpoint.clone()) - .with_channel(channel) + .with_channel(channel.clone()) .build() .expect("Failed to Build Exporter"); - opentelemetry_sdk::trace::TracerProvider::builder() + let log_exporter = opentelemetry_otlp::LogExporter::builder() + .with_tonic() + .with_endpoint(endpoint.clone()) + .with_channel(channel.clone()) + .build() + .expect("Failed to build log exporter"); + let logger_provider = logs::LoggerProvider::builder() + .with_resource(Resource::new(vec![KeyValue::new( + "service.name", + "RhythmWorks", + )])) + .with_batch_exporter(log_exporter, runtime::Tokio) + .build(); + let tracer_provider = opentelemetry_sdk::trace::TracerProvider::builder() .with_batch_exporter(exporter, runtime::Tokio) .with_resource(Resource::new(vec![KeyValue::new( "service.name", "RhythmWorks", )])) - .build() + .build(); + (tracer_provider, logger_provider) } diff --git a/src/modules/updator.rs b/src/modules/updator.rs index ae5a1e5..613cb6f 100644 --- a/src/modules/updator.rs +++ b/src/modules/updator.rs @@ -10,7 +10,7 @@ struct Release { pub async fn update() { let body = reqwest::get( - "https://git.racooncity.org/api/v1/repos/brotoskyj/RhythmWorks/releases/latest", + "https://git.racooncity.org/api/v1/repos/mysticmomba/RhythmWorks/releases/latest", ) .await .unwrap() @@ -22,7 +22,7 @@ pub async fn update() { let current_version = Version::parse(env!("CARGO_PKG_VERSION")).unwrap(); if latest_version > current_version { println!("Update Available! Please download the latest version"); - println!("URL: https://git.racooncity.org/brotoskyj/RhythmWorks/releases"); + println!("URL: https://git.racooncity.org/mysticmomba/RhythmWorks/releases"); thread::sleep(std::time::Duration::from_secs(10)); std::process::exit(1); }