Added Extra Telemetry for Queue
This commit is contained in:
+60
-1
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user