Skip to main content

tuwunel_admin/query/
resolver.rs

1use clap::Subcommand;
2use futures::StreamExt;
3use ruma::OwnedServerName;
4use tuwunel_core::{Result, utils::time};
5
6use crate::{admin_command, admin_command_dispatch};
7
8#[admin_command_dispatch]
9#[derive(Debug, Subcommand)]
10/// Resolver service and caches
11pub(crate) enum ResolverCommand {
12	/// Query the destinations cache
13	DestinationsCache {
14		server_name: Option<OwnedServerName>,
15	},
16
17	/// Query the overrides cache
18	OverridesCache {
19		name: Option<String>,
20	},
21}
22
23#[admin_command]
24async fn destinations_cache(&self, server_name: Option<OwnedServerName>) -> Result {
25	use tuwunel_service::resolver::cache::CachedDest;
26
27	writeln!(self, "| Server Name | Destination | Hostname | Expires |").await?;
28	writeln!(self, "| ----------- | ----------- | -------- | ------- |").await?;
29
30	let mut destinations = self
31		.services
32		.resolver
33		.cache
34		.destinations()
35		.boxed();
36
37	while let Some((name, CachedDest { dest, host, expire })) = destinations.next().await {
38		if let Some(server_name) = server_name.as_ref()
39			&& name != server_name
40		{
41			continue;
42		}
43
44		let expire = time::format(expire, "%+");
45		self.write_str(&format!("| {name} | {dest} | {host} | {expire} |\n"))
46			.await?;
47	}
48
49	Ok(())
50}
51
52#[admin_command]
53async fn overrides_cache(&self, server_name: Option<String>) -> Result {
54	use tuwunel_service::resolver::cache::CachedOverride;
55
56	writeln!(self, "| Server Name | IP  | Port | Expires | Overriding |").await?;
57	writeln!(self, "| ----------- | --- | ----:| ------- | ---------- |").await?;
58
59	let mut overrides = self.services.resolver.cache.overrides().boxed();
60
61	while let Some((name, CachedOverride { ips, port, expire, overriding })) =
62		overrides.next().await
63	{
64		if let Some(server_name) = server_name.as_ref()
65			&& name != server_name
66		{
67			continue;
68		}
69
70		let expire = time::format(expire, "%+");
71		self.write_str(&format!("| {name} | {ips:?} | {port} | {expire} | {overriding:?} |\n"))
72			.await?;
73	}
74
75	Ok(())
76}