diff --git a/src/admin/query/mod.rs b/src/admin/query/mod.rs index 1aa28c48..1f0f5505 100644 --- a/src/admin/query/mod.rs +++ b/src/admin/query/mod.rs @@ -2,6 +2,7 @@ mod account_data; mod appservice; mod globals; mod presence; +mod pusher; mod resolver; mod room_alias; mod room_state_cache; @@ -13,7 +14,7 @@ use conduit::Result; use self::{ account_data::AccountDataCommand, appservice::AppserviceCommand, globals::GlobalsCommand, - presence::PresenceCommand, resolver::ResolverCommand, room_alias::RoomAliasCommand, + presence::PresenceCommand, pusher::PusherCommand, resolver::ResolverCommand, room_alias::RoomAliasCommand, room_state_cache::RoomStateCacheCommand, sending::SendingCommand, users::UsersCommand, }; use crate::admin_command_dispatch; @@ -57,4 +58,8 @@ pub(super) enum QueryCommand { /// - resolver service #[command(subcommand)] Resolver(ResolverCommand), + + /// - pusher service + #[command(subcommand)] + Pusher(PusherCommand), } diff --git a/src/admin/query/pusher.rs b/src/admin/query/pusher.rs new file mode 100644 index 00000000..637c57b6 --- /dev/null +++ b/src/admin/query/pusher.rs @@ -0,0 +1,32 @@ +use clap::Subcommand; +use conduit::Result; +use ruma::{events::room::message::RoomMessageEventContent, UserId}; + +use crate::Command; + +#[derive(Debug, Subcommand)] +pub(crate) enum PusherCommand { + /// - Returns all the pushers for the user. + GetPushers { + /// Full user ID + user_id: Box, + }, +} + +pub(super) async fn process(subcommand: PusherCommand, context: &Command<'_>) -> Result { + let services = context.services; + + match subcommand { + PusherCommand::GetPushers { + user_id, + } => { + let timer = tokio::time::Instant::now(); + let results = services.pusher.get_pushers(&user_id)?; + let query_time = timer.elapsed(); + + Ok(RoomMessageEventContent::notice_markdown(format!( + "Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```" + ))) + }, + } +}