mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-16 23:31:24 +01:00
add debug-state-cache admin command
This commit is contained in:
parent
0c2094a56f
commit
c8b810731a
1 changed files with 72 additions and 4 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
use std::{
|
use std::{
|
||||||
collections::BTreeMap,
|
collections::{BTreeMap, HashSet},
|
||||||
convert::{TryFrom, TryInto},
|
convert::{TryFrom, TryInto},
|
||||||
fmt::Write,
|
fmt::Write,
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
|
|
@ -28,8 +28,8 @@ use ruma::{
|
||||||
},
|
},
|
||||||
TimelineEventType,
|
TimelineEventType,
|
||||||
},
|
},
|
||||||
EventId, OwnedRoomAliasId, OwnedRoomId, RoomAliasId, RoomId, RoomVersionId,
|
EventId, OwnedRoomAliasId, OwnedRoomId, OwnedServerName, OwnedUserId,
|
||||||
ServerName, UserId,
|
RoomAliasId, RoomId, RoomVersionId, ServerName, UserId,
|
||||||
};
|
};
|
||||||
use serde_json::value::to_raw_value;
|
use serde_json::value::to_raw_value;
|
||||||
use tokio::sync::{mpsc, Mutex, RwLock};
|
use tokio::sync::{mpsc, Mutex, RwLock};
|
||||||
|
|
@ -204,6 +204,11 @@ enum AdminCommand {
|
||||||
// Allowed because the doc comment gets parsed by our code later
|
// Allowed because the doc comment gets parsed by our code later
|
||||||
#[allow(clippy::doc_markdown)]
|
#[allow(clippy::doc_markdown)]
|
||||||
VerifyJson,
|
VerifyJson,
|
||||||
|
|
||||||
|
/// Print out some of the cached state for the given room ID
|
||||||
|
DebugStateCache {
|
||||||
|
room_id: OwnedRoomId,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -268,7 +273,7 @@ impl Service {
|
||||||
&self,
|
&self,
|
||||||
event: AdminRoomEvent,
|
event: AdminRoomEvent,
|
||||||
grapevine_room: &OwnedRoomId,
|
grapevine_room: &OwnedRoomId,
|
||||||
grapevine_user: &ruma::OwnedUserId,
|
grapevine_user: &OwnedUserId,
|
||||||
) {
|
) {
|
||||||
let message_content = match event {
|
let message_content = match event {
|
||||||
AdminRoomEvent::SendMessage(content) => content,
|
AdminRoomEvent::SendMessage(content) => content,
|
||||||
|
|
@ -1092,6 +1097,9 @@ impl Service {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AdminCommand::DebugStateCache {
|
||||||
|
room_id,
|
||||||
|
} => debug_state_cache(room_id),
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(reply_message_content)
|
Ok(reply_message_content)
|
||||||
|
|
@ -1581,6 +1589,66 @@ impl Service {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Print out some of the cached state for the given room ID
|
||||||
|
#[allow(clippy::needless_pass_by_value)]
|
||||||
|
fn debug_state_cache(room_id: OwnedRoomId) -> RoomMessageEventContent {
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
struct Output {
|
||||||
|
our_real_users: Arc<HashSet<OwnedUserId>>,
|
||||||
|
servers_in_room: Vec<OwnedServerName>,
|
||||||
|
room_members: Vec<OwnedUserId>,
|
||||||
|
room_joined_count: Option<u64>,
|
||||||
|
room_invited_count: Option<u64>,
|
||||||
|
room_members_invited: Vec<OwnedUserId>,
|
||||||
|
}
|
||||||
|
|
||||||
|
let our_real_users =
|
||||||
|
services().rooms.state_cache.get_our_real_users(&room_id).unwrap();
|
||||||
|
|
||||||
|
let servers_in_room = services()
|
||||||
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.room_servers(&room_id)
|
||||||
|
.map(Result::unwrap)
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let room_members = services()
|
||||||
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.room_members(&room_id)
|
||||||
|
.map(Result::unwrap)
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let room_joined_count =
|
||||||
|
services().rooms.state_cache.room_joined_count(&room_id).unwrap();
|
||||||
|
|
||||||
|
let room_invited_count =
|
||||||
|
services().rooms.state_cache.room_invited_count(&room_id).unwrap();
|
||||||
|
|
||||||
|
let room_members_invited = services()
|
||||||
|
.rooms
|
||||||
|
.state_cache
|
||||||
|
.room_members_invited(&room_id)
|
||||||
|
.map(Result::unwrap)
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let output = Output {
|
||||||
|
our_real_users,
|
||||||
|
servers_in_room,
|
||||||
|
room_members,
|
||||||
|
room_joined_count,
|
||||||
|
room_invited_count,
|
||||||
|
room_members_invited,
|
||||||
|
};
|
||||||
|
|
||||||
|
let text = format!("{output:#?}");
|
||||||
|
let html =
|
||||||
|
format!(r#"<pre><code class="language-rust">{text}</code></pre>"#);
|
||||||
|
|
||||||
|
RoomMessageEventContent::text_html(text, html)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue