Skip to main content

tuwunel_admin/debug/
ping.rs

1use ruma::{OwnedServerName, api::federation::discovery::get_server_version};
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, get_server_version::v1::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 = if let Ok(json) = serde_json::to_string_pretty(&response.server) {
21		format!("Got response which took {ping_time:?} time:\n```json\n{json}\n```")
22	} else {
23		format!("Got non-JSON response which took {ping_time:?} time:\n{response:?}")
24	};
25
26	self.write_str(&out).await
27}