Skip to main content

tuwunel_admin/debug/
ping.rs

1use ruma::{OwnedServerName, api::federation::discovery::get_server_version::v1::Request};
2use tokio::time::Instant;
3use tuwunel_core::{Result, err};
4
5use crate::admin_command;
6
7#[admin_command]
8pub(super) async fn ping(&self, server: OwnedServerName) -> Result {
9	let timer = Instant::now();
10
11	let response = self
12		.services
13		.federation
14		.execute(&server, Request {})
15		.await
16		.map_err(|e| err!("Failed sending federation request to specified server:\n\n{e}"))?;
17
18	let ping_time = timer.elapsed();
19
20	let out = serde_json::to_string_pretty(&response.server).map_or_else(
21		|_| format!("Got non-JSON response which took {ping_time:?} time:\n{response:?}"),
22		|json| format!("Got response which took {ping_time:?} time:\n```json\n{json}\n```"),
23	);
24
25	self.write_str(&out).await
26}