2024-07-04 11:49:13 +00:00
|
|
|
use std::fmt::Write;
|
|
|
|
|
|
|
|
use conduit::{utils::time, Result};
|
|
|
|
use ruma::{events::room::message::RoomMessageEventContent, OwnedServerName};
|
|
|
|
|
|
|
|
use super::Resolver;
|
|
|
|
use crate::services;
|
|
|
|
|
|
|
|
/// All the getters and iterators in key_value/users.rs
|
|
|
|
pub(super) async fn resolver(subcommand: Resolver) -> Result<RoomMessageEventContent> {
|
|
|
|
match subcommand {
|
|
|
|
Resolver::DestinationsCache {
|
|
|
|
server_name,
|
|
|
|
} => destinations_cache(server_name).await,
|
|
|
|
Resolver::OverridesCache {
|
|
|
|
name,
|
|
|
|
} => overrides_cache(name).await,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn destinations_cache(server_name: Option<OwnedServerName>) -> Result<RoomMessageEventContent> {
|
2024-07-16 22:00:54 +00:00
|
|
|
use service::resolver::CachedDest;
|
2024-07-04 11:49:13 +00:00
|
|
|
|
|
|
|
let mut out = String::new();
|
|
|
|
writeln!(out, "| Server Name | Destination | Hostname | Expires |")?;
|
|
|
|
writeln!(out, "| ----------- | ----------- | -------- | ------- |")?;
|
|
|
|
let row = |(
|
|
|
|
name,
|
|
|
|
&CachedDest {
|
|
|
|
ref dest,
|
|
|
|
ref host,
|
|
|
|
expire,
|
|
|
|
},
|
|
|
|
)| {
|
|
|
|
let expire = time::format(expire, "%+");
|
|
|
|
writeln!(out, "| {name} | {dest} | {host} | {expire} |").expect("wrote line");
|
|
|
|
};
|
|
|
|
|
2024-07-16 22:00:54 +00:00
|
|
|
let map = services().resolver.destinations.read().expect("locked");
|
2024-07-04 11:49:13 +00:00
|
|
|
|
|
|
|
if let Some(server_name) = server_name.as_ref() {
|
|
|
|
map.get_key_value(server_name).map(row);
|
|
|
|
} else {
|
|
|
|
map.iter().for_each(row);
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(RoomMessageEventContent::notice_markdown(out))
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn overrides_cache(server_name: Option<String>) -> Result<RoomMessageEventContent> {
|
2024-07-16 22:00:54 +00:00
|
|
|
use service::resolver::CachedOverride;
|
2024-07-04 11:49:13 +00:00
|
|
|
|
|
|
|
let mut out = String::new();
|
|
|
|
writeln!(out, "| Server Name | IP | Port | Expires |")?;
|
|
|
|
writeln!(out, "| ----------- | --- | ----:| ------- |")?;
|
|
|
|
let row = |(
|
|
|
|
name,
|
|
|
|
&CachedOverride {
|
|
|
|
ref ips,
|
|
|
|
port,
|
|
|
|
expire,
|
|
|
|
},
|
|
|
|
)| {
|
|
|
|
let expire = time::format(expire, "%+");
|
|
|
|
writeln!(out, "| {name} | {ips:?} | {port} | {expire} |").expect("wrote line");
|
|
|
|
};
|
|
|
|
|
2024-07-16 22:00:54 +00:00
|
|
|
let map = services().resolver.overrides.read().expect("locked");
|
2024-07-04 11:49:13 +00:00
|
|
|
|
|
|
|
if let Some(server_name) = server_name.as_ref() {
|
|
|
|
map.get_key_value(server_name).map(row);
|
|
|
|
} else {
|
|
|
|
map.iter().for_each(row);
|
|
|
|
}
|
|
|
|
|
|
|
|
Ok(RoomMessageEventContent::notice_markdown(out))
|
|
|
|
}
|