From 016270b33b9cdd852447d095e42ee247a234ae9d Mon Sep 17 00:00:00 2001
From: strawberry <strawberry@puppygock.gay>
Date: Sat, 8 Jun 2024 13:49:39 -0400
Subject: [PATCH] adminroom: add server_in_room state cache accessor

Signed-off-by: strawberry <strawberry@puppygock.gay>
---
 src/admin/query/mod.rs              |  5 +++++
 src/admin/query/room_state_cache.rs | 16 ++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/src/admin/query/mod.rs b/src/admin/query/mod.rs
index 7fe6a2a24..2e5b0bb80 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 5b8ff8bb3..c062497ed 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,
 		} => {
-- 
GitLab