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