2024-04-21 15:00:54 -04:00
|
|
|
use ruma::events::room::message::RoomMessageEventContent;
|
|
|
|
|
|
|
|
|
|
use super::Sending;
|
2024-04-22 17:27:54 -04:00
|
|
|
use crate::{service::sending::Destination, services, Result};
|
2024-04-21 15:00:54 -04:00
|
|
|
|
|
|
|
|
/// All the getters and iterators in key_value/sending.rs
|
2024-06-16 22:26:52 +00:00
|
|
|
pub(super) async fn sending(subcommand: Sending) -> Result<RoomMessageEventContent> {
|
2024-04-21 15:00:54 -04:00
|
|
|
match subcommand {
|
|
|
|
|
Sending::ActiveRequests => {
|
|
|
|
|
let timer = tokio::time::Instant::now();
|
|
|
|
|
let results = services().sending.db.active_requests();
|
|
|
|
|
let active_requests: Result<Vec<(_, _, _)>> = results.collect();
|
2024-07-01 20:35:39 +00:00
|
|
|
let query_time = timer.elapsed();
|
2024-04-21 15:00:54 -04:00
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{active_requests:#?}\n```"
|
|
|
|
|
)))
|
2024-04-21 15:00:54 -04:00
|
|
|
},
|
2024-04-22 17:27:54 -04:00
|
|
|
Sending::QueuedRequests {
|
|
|
|
|
appservice_id,
|
|
|
|
|
server_name,
|
|
|
|
|
user_id,
|
|
|
|
|
push_key,
|
|
|
|
|
} => {
|
|
|
|
|
if appservice_id.is_none() && server_name.is_none() && user_id.is_none() && push_key.is_none() {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via arguments. See \
|
|
|
|
|
--help for more details.",
|
|
|
|
|
));
|
|
|
|
|
}
|
2024-07-01 20:35:39 +00:00
|
|
|
let timer = tokio::time::Instant::now();
|
|
|
|
|
let results = match (appservice_id, server_name, user_id, push_key) {
|
2024-04-22 17:27:54 -04:00
|
|
|
(Some(appservice_id), None, None, None) => {
|
|
|
|
|
if appservice_id.is_empty() {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via \
|
|
|
|
|
arguments. See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-01 20:35:39 +00:00
|
|
|
services()
|
2024-04-22 17:27:54 -04:00
|
|
|
.sending
|
|
|
|
|
.db
|
2024-07-01 20:35:39 +00:00
|
|
|
.queued_requests(&Destination::Appservice(appservice_id))
|
2024-04-22 17:27:54 -04:00
|
|
|
},
|
2024-07-01 20:35:39 +00:00
|
|
|
(None, Some(server_name), None, None) => services()
|
|
|
|
|
.sending
|
|
|
|
|
.db
|
|
|
|
|
.queued_requests(&Destination::Normal(server_name.into())),
|
2024-04-22 17:27:54 -04:00
|
|
|
(None, None, Some(user_id), Some(push_key)) => {
|
|
|
|
|
if push_key.is_empty() {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via \
|
|
|
|
|
arguments. See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-01 20:35:39 +00:00
|
|
|
services()
|
2024-04-22 17:27:54 -04:00
|
|
|
.sending
|
|
|
|
|
.db
|
2024-07-01 20:35:39 +00:00
|
|
|
.queued_requests(&Destination::Push(user_id.into(), push_key))
|
2024-04-22 17:27:54 -04:00
|
|
|
},
|
|
|
|
|
(Some(_), Some(_), Some(_), Some(_)) => {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via arguments. \
|
|
|
|
|
Not all of them See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
},
|
|
|
|
|
_ => {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via arguments. \
|
|
|
|
|
See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let queued_requests = results.collect::<Result<Vec<(_, _)>>>();
|
2024-07-01 20:35:39 +00:00
|
|
|
let query_time = timer.elapsed();
|
2024-04-22 17:27:54 -04:00
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{queued_requests:#?}\n```"
|
|
|
|
|
)))
|
2024-04-22 17:27:54 -04:00
|
|
|
},
|
|
|
|
|
Sending::ActiveRequestsFor {
|
|
|
|
|
appservice_id,
|
|
|
|
|
server_name,
|
|
|
|
|
user_id,
|
|
|
|
|
push_key,
|
|
|
|
|
} => {
|
|
|
|
|
if appservice_id.is_none() && server_name.is_none() && user_id.is_none() && push_key.is_none() {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via arguments. See \
|
|
|
|
|
--help for more details.",
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-01 20:35:39 +00:00
|
|
|
let timer = tokio::time::Instant::now();
|
|
|
|
|
let results = match (appservice_id, server_name, user_id, push_key) {
|
2024-04-22 17:27:54 -04:00
|
|
|
(Some(appservice_id), None, None, None) => {
|
|
|
|
|
if appservice_id.is_empty() {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via \
|
|
|
|
|
arguments. See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-01 20:35:39 +00:00
|
|
|
services()
|
2024-04-22 17:27:54 -04:00
|
|
|
.sending
|
|
|
|
|
.db
|
2024-07-01 20:35:39 +00:00
|
|
|
.active_requests_for(&Destination::Appservice(appservice_id))
|
2024-04-22 17:27:54 -04:00
|
|
|
},
|
2024-07-01 20:35:39 +00:00
|
|
|
(None, Some(server_name), None, None) => services()
|
|
|
|
|
.sending
|
|
|
|
|
.db
|
|
|
|
|
.active_requests_for(&Destination::Normal(server_name.into())),
|
2024-04-22 17:27:54 -04:00
|
|
|
(None, None, Some(user_id), Some(push_key)) => {
|
|
|
|
|
if push_key.is_empty() {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via \
|
|
|
|
|
arguments. See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-01 20:35:39 +00:00
|
|
|
services()
|
2024-04-22 17:27:54 -04:00
|
|
|
.sending
|
|
|
|
|
.db
|
2024-07-01 20:35:39 +00:00
|
|
|
.active_requests_for(&Destination::Push(user_id.into(), push_key))
|
2024-04-22 17:27:54 -04:00
|
|
|
},
|
|
|
|
|
(Some(_), Some(_), Some(_), Some(_)) => {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via arguments. \
|
|
|
|
|
Not all of them See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
},
|
|
|
|
|
_ => {
|
|
|
|
|
return Ok(RoomMessageEventContent::text_plain(
|
|
|
|
|
"An appservice ID, server name, or a user ID with push key must be specified via arguments. \
|
|
|
|
|
See --help for more details.",
|
|
|
|
|
));
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let active_requests = results.collect::<Result<Vec<(_, _)>>>();
|
2024-07-01 20:35:39 +00:00
|
|
|
let query_time = timer.elapsed();
|
2024-04-22 17:27:54 -04:00
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{active_requests:#?}\n```"
|
|
|
|
|
)))
|
2024-04-22 17:27:54 -04:00
|
|
|
},
|
2024-04-21 18:32:07 -04:00
|
|
|
Sending::GetLatestEduCount {
|
|
|
|
|
server_name,
|
|
|
|
|
} => {
|
|
|
|
|
let timer = tokio::time::Instant::now();
|
|
|
|
|
let results = services().sending.db.get_latest_educount(&server_name);
|
|
|
|
|
let query_time = timer.elapsed();
|
|
|
|
|
|
2024-06-17 10:12:44 +00:00
|
|
|
Ok(RoomMessageEventContent::notice_markdown(format!(
|
|
|
|
|
"Query completed in {query_time:?}:\n\n```rs\n{results:#?}\n```"
|
|
|
|
|
)))
|
2024-04-21 18:32:07 -04:00
|
|
|
},
|
2024-04-21 15:00:54 -04:00
|
|
|
}
|
|
|
|
|
}
|