Added Extra Telemetry for Queue
This commit is contained in:
+60
-1
@@ -1,3 +1,4 @@
|
||||
use core::error;
|
||||
use dialoguer::Select;
|
||||
use dialoguer::theme::ColorfulTheme;
|
||||
use modules::*;
|
||||
@@ -11,7 +12,10 @@ use serenity::async_trait;
|
||||
use serenity::model::channel::Message;
|
||||
use serenity::model::gateway::Ready;
|
||||
use serenity::prelude::*;
|
||||
use songbird::Event;
|
||||
use songbird::EventContext;
|
||||
use songbird::SerenityInit;
|
||||
use songbird::events::EventHandler as VoiceEventHandler;
|
||||
use songbird::get;
|
||||
use songbird::input::HlsRequest;
|
||||
use songbird::input::Input;
|
||||
@@ -20,6 +24,33 @@ use std::process::Command;
|
||||
use std::process::Stdio;
|
||||
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;
|
||||
fn get_user_voice_channel(ctx: &Context, msg: &Message) -> Option<ChannelId> {
|
||||
let guild_id = msg.guild_id?;
|
||||
@@ -211,7 +242,8 @@ impl EventHandler for Handler {
|
||||
.to_string();
|
||||
let mut call = handler_lock.lock().await;
|
||||
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 response = if position == 1 {
|
||||
cx.span().add_event(
|
||||
@@ -227,6 +259,33 @@ impl EventHandler for Handler {
|
||||
format!("🎶 Added Song to Queue: #{}", position)
|
||||
};
|
||||
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" {
|
||||
let guild_id = match msg.guild_id {
|
||||
|
||||
Reference in New Issue
Block a user