Added Extra Telemetry for Queue

This commit is contained in:
brotoskyj
2026-01-19 14:54:13 -05:00
parent ff9a46c05c
commit 7dea731cbf
+60 -1
View File
@@ -1,3 +1,4 @@
use core::error;
use dialoguer::Select; use dialoguer::Select;
use dialoguer::theme::ColorfulTheme; use dialoguer::theme::ColorfulTheme;
use modules::*; use modules::*;
@@ -11,7 +12,10 @@ use serenity::async_trait;
use serenity::model::channel::Message; use serenity::model::channel::Message;
use serenity::model::gateway::Ready; use serenity::model::gateway::Ready;
use serenity::prelude::*; use serenity::prelude::*;
use songbird::Event;
use songbird::EventContext;
use songbird::SerenityInit; use songbird::SerenityInit;
use songbird::events::EventHandler as VoiceEventHandler;
use songbird::get; use songbird::get;
use songbird::input::HlsRequest; use songbird::input::HlsRequest;
use songbird::input::Input; use songbird::input::Input;
@@ -20,6 +24,33 @@ use std::process::Command;
use std::process::Stdio; use std::process::Stdio;
pub mod modules; pub mod modules;
struct TrackTraceHandler {
otel_ctx: opentelemetry::Context,
guild_id: String,
track_url: String,
event_name: &'static str,
}
#[async_trait]
impl VoiceEventHandler for TrackTraceHandler {
async fn act(&self, ctx: &EventContext<'_>) -> Option<Event> {
let tracer = global::tracer("RhythmWorks");
let track_status = if let EventContext::Track(track_list) = ctx {
track_list.first().map(|state| format!("{:?}", state.0))
} else {
None
};
tracer.in_span(self.event_name, |cx| {
cx.span()
.set_attribute(KeyValue::new("Guild_ID", self.guild_id.clone()));
cx.span()
.set_attribute(KeyValue::new("Youtube_URL", self.track_url.clone()));
cx.span().add_event(self.event_name, vec![KeyValue::new("track_status", track_status.unwrap().to_string())]);
});
None
}
}
struct Handler; struct Handler;
fn get_user_voice_channel(ctx: &Context, msg: &Message) -> Option<ChannelId> { fn get_user_voice_channel(ctx: &Context, msg: &Message) -> Option<ChannelId> {
let guild_id = msg.guild_id?; let guild_id = msg.guild_id?;
@@ -211,7 +242,8 @@ impl EventHandler for Handler {
.to_string(); .to_string();
let mut call = handler_lock.lock().await; let mut call = handler_lock.lock().await;
let input = Input::from(HlsRequest::new(reqwest::Client::new(), stream_url)); let input = Input::from(HlsRequest::new(reqwest::Client::new(), stream_url));
let _ = call.enqueue_input(input).await; let track_handle = call.enqueue_input(input).await;
let otel_ctx = opentelemetry::Context::current();
let position = call.queue().len(); let position = call.queue().len();
let response = if position == 1 { let response = if position == 1 {
cx.span().add_event( cx.span().add_event(
@@ -227,6 +259,33 @@ impl EventHandler for Handler {
format!("🎶 Added Song to Queue: #{}", position) format!("🎶 Added Song to Queue: #{}", position)
}; };
let _ = msg.channel_id.say(&ctx.http, response).await; let _ = msg.channel_id.say(&ctx.http, response).await;
let _ = track_handle.add_event(
Event::Track(songbird::events::TrackEvent::Play),
TrackTraceHandler {
otel_ctx: otel_ctx.clone(),
guild_id: guild_id.to_string().clone(),
track_url: yt_url.clone(),
event_name: "Track Started Playing",
},
);
let _ = track_handle.add_event(
Event::Track(songbird::events::TrackEvent::End),
TrackTraceHandler {
otel_ctx: otel_ctx.clone(),
guild_id: guild_id.to_string().clone(),
track_url: yt_url.clone(),
event_name: "Track Finished",
},
);
let _ = track_handle.add_event(
Event::Track(songbird::events::TrackEvent::Error),
TrackTraceHandler {
otel_ctx: otel_ctx.clone(),
guild_id: guild_id.to_string().clone(),
track_url: yt_url.clone(),
event_name: "Playback had an error",
},
);
} }
if msg.content == "!skip" { if msg.content == "!skip" {
let guild_id = match msg.guild_id { let guild_id = match msg.guild_id {