tuwunel_admin/debug/
ping.rs1use 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}