mirror of
https://github.com/fawney19/Aether.git
synced 2026-10-09 18:59:50 +08:00
refactor(proxy): improve tunnel throughput and observability
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
use std::fmt;
|
||||
use std::net::SocketAddr;
|
||||
use std::path::Path;
|
||||
use std::time::Duration;
|
||||
|
||||
@@ -372,6 +373,11 @@ pub struct Config {
|
||||
)]
|
||||
pub aether_retry_max_delay_ms: u64,
|
||||
|
||||
/// Optional local diagnostics listener for /health, /metrics, and /stats.
|
||||
/// Bind only to loopback addresses, for example 127.0.0.1:9311.
|
||||
#[arg(long, env = "AETHER_PROXY_DIAGNOSTICS_BIND")]
|
||||
pub diagnostics_bind: Option<SocketAddr>,
|
||||
|
||||
/// Maximum concurrent TCP connections (defaults to hardware estimate)
|
||||
#[arg(long, env = "AETHER_PROXY_MAX_CONCURRENT_CONNECTIONS")]
|
||||
pub max_concurrent_connections: Option<u64>,
|
||||
@@ -479,6 +485,14 @@ pub struct Config {
|
||||
)]
|
||||
pub redirect_replay_budget_bytes: usize,
|
||||
|
||||
/// Emit detailed x-proxy-timing headers on tunneled upstream responses.
|
||||
#[arg(
|
||||
long,
|
||||
env = "AETHER_PROXY_EMIT_PROXY_TIMING_HEADER",
|
||||
default_value_t = true
|
||||
)]
|
||||
pub emit_proxy_timing_header: bool,
|
||||
|
||||
/// Log level (trace, debug, info, warn, error)
|
||||
#[arg(long, env = "AETHER_PROXY_LOG_LEVEL", default_value = "info")]
|
||||
pub log_level: String,
|
||||
@@ -686,6 +700,11 @@ impl Config {
|
||||
if self.aether_retry_max_attempts == 0 {
|
||||
anyhow::bail!("aether_retry_max_attempts must be >= 1");
|
||||
}
|
||||
if let Some(addr) = self.diagnostics_bind {
|
||||
if !addr.ip().is_loopback() {
|
||||
anyhow::bail!("diagnostics_bind must use a loopback address");
|
||||
}
|
||||
}
|
||||
if self.upstream_connect_timeout_secs == 0 {
|
||||
anyhow::bail!("upstream_connect_timeout_secs must be > 0");
|
||||
}
|
||||
@@ -886,6 +905,8 @@ pub struct ConfigFile {
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub aether_retry_max_delay_ms: Option<u64>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub diagnostics_bind: Option<SocketAddr>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub max_concurrent_connections: Option<u64>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub dns_cache_ttl_secs: Option<u64>,
|
||||
@@ -910,6 +931,8 @@ pub struct ConfigFile {
|
||||
)]
|
||||
pub redirect_replay_budget_bytes: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub emit_proxy_timing_header: Option<bool>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub log_level: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub log_destination: Option<ProxyLogDestinationArg>,
|
||||
@@ -1048,6 +1071,7 @@ impl ConfigFile {
|
||||
"AETHER_PROXY_AETHER_RETRY_MAX_DELAY_MS",
|
||||
self.aether_retry_max_delay_ms
|
||||
);
|
||||
set!("AETHER_PROXY_DIAGNOSTICS_BIND", self.diagnostics_bind);
|
||||
set!(
|
||||
"AETHER_PROXY_MAX_CONCURRENT_CONNECTIONS",
|
||||
self.max_concurrent_connections
|
||||
@@ -1079,6 +1103,10 @@ impl ConfigFile {
|
||||
"AETHER_PROXY_REDIRECT_REPLAY_BUDGET_BYTES",
|
||||
self.redirect_replay_budget_bytes
|
||||
);
|
||||
set!(
|
||||
"AETHER_PROXY_EMIT_PROXY_TIMING_HEADER",
|
||||
self.emit_proxy_timing_header
|
||||
);
|
||||
set!("AETHER_PROXY_LOG_LEVEL", self.log_level);
|
||||
set!(
|
||||
"AETHER_PROXY_LOG_DESTINATION",
|
||||
|
||||
Reference in New Issue
Block a user