diff --git a/src/admin/query/mod.rs b/src/admin/query/mod.rs index 7fe6a2a249398f528d6a593d4c6662ba3dba882c..2e5b0bb805ca81fba176182111d426bccd705c21 100644 --- a/src/admin/query/mod.rs +++ b/src/admin/query/mod.rs @@ -136,6 +136,11 @@ pub(crate) enum RoomAlias { #[cfg_attr(test, derive(Debug))] #[derive(Subcommand)] pub(crate) enum RoomStateCache { + ServerInRoom { + server: Box<ServerName>, + room_id: Box<RoomId>, + }, + RoomServers { room_id: Box<RoomId>, }, diff --git a/src/admin/query/room_state_cache.rs b/src/admin/query/room_state_cache.rs index 5b8ff8bb37888764e02b4a6a3b21190a43359eaa..c062497ed9546fb2090d9bb8438ea7df6bf93162 100644 --- a/src/admin/query/room_state_cache.rs +++ b/src/admin/query/room_state_cache.rs @@ -5,6 +5,22 @@ pub(crate) async fn room_state_cache(subcommand: RoomStateCache) -> Result<RoomMessageEventContent> { match subcommand { + RoomStateCache::ServerInRoom { + server, + room_id, + } => { + let timer = tokio::time::Instant::now(); + let result = services() + .rooms + .state_cache + .server_in_room(&server, &room_id); + let query_time = timer.elapsed(); + + Ok(RoomMessageEventContent::text_html( + format!("Query completed in {query_time:?}:\n\n```\n{result:?}```"), + format!("<p>Query completed in {query_time:?}:</p>\n<pre><code>{result:?}\n</code></pre>"), + )) + }, RoomStateCache::RoomServers { room_id, } => {