2024-06-16 22:26:52 +00:00
|
|
|
use conduit::Result;
|
2024-07-27 00:11:41 +00:00
|
|
|
use conduit_macros::implement;
|
2024-08-08 17:18:30 +00:00
|
|
|
use futures::StreamExt;
|
2024-04-21 19:37:52 -04:00
|
|
|
use ruma::events::room::message::RoomMessageEventContent;
|
|
|
|
|
2024-07-27 07:17:07 +00:00
|
|
|
use crate::Command;
|
2024-04-21 19:37:52 -04:00
|
|
|
|
|
|
|
/// Uses the iterator in `src/database/key_value/users.rs` to iterator over
|
|
|
|
/// every user in our database (remote and local). Reports total count, any
|
|
|
|
/// errors if there were any, etc
|
2024-07-27 00:11:41 +00:00
|
|
|
#[implement(Command, params = "<'_>")]
|
|
|
|
pub(super) async fn check_all_users(&self) -> Result<RoomMessageEventContent> {
|
2024-04-21 19:37:52 -04:00
|
|
|
let timer = tokio::time::Instant::now();
|
2024-08-08 17:18:30 +00:00
|
|
|
let users = self.services.users.iter().collect::<Vec<_>>().await;
|
2024-04-21 19:37:52 -04:00
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
|
|
|
let total = users.len();
|
2024-08-08 17:18:30 +00:00
|
|
|
let err_count = users.iter().filter(|_user| false).count();
|
|
|
|
let ok_count = users.iter().filter(|_user| true).count();
|
2024-04-21 19:37:52 -04:00
|
|
|
|
|
|
|
let message = format!(
|
2024-06-02 00:15:02 +00:00
|
|
|
"Database query completed in {query_time:?}:\n\n```\nTotal entries: {total:?}\nFailure/Invalid user count: \
|
2024-06-23 09:55:51 +00:00
|
|
|
{err_count:?}\nSuccess/Valid user count: {ok_count:?}\n```"
|
2024-04-21 19:37:52 -04:00
|
|
|
);
|
|
|
|
|
2024-06-19 01:55:21 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(message))
|
2024-04-21 19:37:52 -04:00
|
|
|
}
|