mirror of https://github.com/telemt/telemt.git
ME Adaptive Floor pull-up
Co-Authored-By: brekotis <93345790+brekotis@users.noreply.github.com>
This commit is contained in:
parent
1fe1acadd4
commit
cfec6dbb3c
|
|
@ -32,7 +32,7 @@ use notify::{EventKind, RecursiveMode, Watcher, recommended_watcher};
|
||||||
use tokio::sync::{mpsc, watch};
|
use tokio::sync::{mpsc, watch};
|
||||||
use tracing::{error, info, warn};
|
use tracing::{error, info, warn};
|
||||||
|
|
||||||
use crate::config::{LogLevel, MeSocksKdfPolicy, MeTelemetryLevel};
|
use crate::config::{LogLevel, MeFloorMode, MeSocksKdfPolicy, MeTelemetryLevel};
|
||||||
use super::load::ProxyConfig;
|
use super::load::ProxyConfig;
|
||||||
|
|
||||||
// ── Hot fields ────────────────────────────────────────────────────────────────
|
// ── Hot fields ────────────────────────────────────────────────────────────────
|
||||||
|
|
@ -58,6 +58,10 @@ pub struct HotFields {
|
||||||
pub telemetry_user_enabled: bool,
|
pub telemetry_user_enabled: bool,
|
||||||
pub telemetry_me_level: MeTelemetryLevel,
|
pub telemetry_me_level: MeTelemetryLevel,
|
||||||
pub me_socks_kdf_policy: MeSocksKdfPolicy,
|
pub me_socks_kdf_policy: MeSocksKdfPolicy,
|
||||||
|
pub me_floor_mode: MeFloorMode,
|
||||||
|
pub me_adaptive_floor_idle_secs: u64,
|
||||||
|
pub me_adaptive_floor_min_writers_single_endpoint: u8,
|
||||||
|
pub me_adaptive_floor_recover_grace_secs: u64,
|
||||||
pub me_route_backpressure_base_timeout_ms: u64,
|
pub me_route_backpressure_base_timeout_ms: u64,
|
||||||
pub me_route_backpressure_high_timeout_ms: u64,
|
pub me_route_backpressure_high_timeout_ms: u64,
|
||||||
pub me_route_backpressure_high_watermark_pct: u8,
|
pub me_route_backpressure_high_watermark_pct: u8,
|
||||||
|
|
@ -85,6 +89,14 @@ impl HotFields {
|
||||||
telemetry_user_enabled: cfg.general.telemetry.user_enabled,
|
telemetry_user_enabled: cfg.general.telemetry.user_enabled,
|
||||||
telemetry_me_level: cfg.general.telemetry.me_level,
|
telemetry_me_level: cfg.general.telemetry.me_level,
|
||||||
me_socks_kdf_policy: cfg.general.me_socks_kdf_policy,
|
me_socks_kdf_policy: cfg.general.me_socks_kdf_policy,
|
||||||
|
me_floor_mode: cfg.general.me_floor_mode,
|
||||||
|
me_adaptive_floor_idle_secs: cfg.general.me_adaptive_floor_idle_secs,
|
||||||
|
me_adaptive_floor_min_writers_single_endpoint: cfg
|
||||||
|
.general
|
||||||
|
.me_adaptive_floor_min_writers_single_endpoint,
|
||||||
|
me_adaptive_floor_recover_grace_secs: cfg
|
||||||
|
.general
|
||||||
|
.me_adaptive_floor_recover_grace_secs,
|
||||||
me_route_backpressure_base_timeout_ms: cfg.general.me_route_backpressure_base_timeout_ms,
|
me_route_backpressure_base_timeout_ms: cfg.general.me_route_backpressure_base_timeout_ms,
|
||||||
me_route_backpressure_high_timeout_ms: cfg.general.me_route_backpressure_high_timeout_ms,
|
me_route_backpressure_high_timeout_ms: cfg.general.me_route_backpressure_high_timeout_ms,
|
||||||
me_route_backpressure_high_watermark_pct: cfg.general.me_route_backpressure_high_watermark_pct,
|
me_route_backpressure_high_watermark_pct: cfg.general.me_route_backpressure_high_watermark_pct,
|
||||||
|
|
@ -309,6 +321,22 @@ fn log_changes(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if old_hot.me_floor_mode != new_hot.me_floor_mode
|
||||||
|
|| old_hot.me_adaptive_floor_idle_secs != new_hot.me_adaptive_floor_idle_secs
|
||||||
|
|| old_hot.me_adaptive_floor_min_writers_single_endpoint
|
||||||
|
!= new_hot.me_adaptive_floor_min_writers_single_endpoint
|
||||||
|
|| old_hot.me_adaptive_floor_recover_grace_secs
|
||||||
|
!= new_hot.me_adaptive_floor_recover_grace_secs
|
||||||
|
{
|
||||||
|
info!(
|
||||||
|
"config reload: me_floor: mode={:?} idle={}s min_single={} recover_grace={}s",
|
||||||
|
new_hot.me_floor_mode,
|
||||||
|
new_hot.me_adaptive_floor_idle_secs,
|
||||||
|
new_hot.me_adaptive_floor_min_writers_single_endpoint,
|
||||||
|
new_hot.me_adaptive_floor_recover_grace_secs,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if old_hot.me_route_backpressure_base_timeout_ms
|
if old_hot.me_route_backpressure_base_timeout_ms
|
||||||
!= new_hot.me_route_backpressure_base_timeout_ms
|
!= new_hot.me_route_backpressure_base_timeout_ms
|
||||||
|| old_hot.me_route_backpressure_high_timeout_ms
|
|| old_hot.me_route_backpressure_high_timeout_ms
|
||||||
|
|
|
||||||
|
|
@ -544,6 +544,10 @@ async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
|
||||||
config.general.me_single_endpoint_outage_backoff_min_ms,
|
config.general.me_single_endpoint_outage_backoff_min_ms,
|
||||||
config.general.me_single_endpoint_outage_backoff_max_ms,
|
config.general.me_single_endpoint_outage_backoff_max_ms,
|
||||||
config.general.me_single_endpoint_shadow_rotate_every_secs,
|
config.general.me_single_endpoint_shadow_rotate_every_secs,
|
||||||
|
config.general.me_floor_mode,
|
||||||
|
config.general.me_adaptive_floor_idle_secs,
|
||||||
|
config.general.me_adaptive_floor_min_writers_single_endpoint,
|
||||||
|
config.general.me_adaptive_floor_recover_grace_secs,
|
||||||
config.general.hardswap,
|
config.general.hardswap,
|
||||||
config.general.me_pool_drain_ttl_secs,
|
config.general.me_pool_drain_ttl_secs,
|
||||||
config.general.effective_me_pool_force_close_secs(),
|
config.general.effective_me_pool_force_close_secs(),
|
||||||
|
|
|
||||||
|
|
@ -620,6 +620,64 @@ async fn render_metrics(stats: &Stats, config: &ProxyConfig, ip_tracker: &UserIp
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"# HELP telemt_me_floor_mode Runtime ME writer floor policy mode"
|
||||||
|
);
|
||||||
|
let _ = writeln!(out, "# TYPE telemt_me_floor_mode gauge");
|
||||||
|
let floor_mode = config.general.me_floor_mode;
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"telemt_me_floor_mode{{mode=\"static\"}} {}",
|
||||||
|
if matches!(floor_mode, crate::config::MeFloorMode::Static) {
|
||||||
|
1
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"telemt_me_floor_mode{{mode=\"adaptive\"}} {}",
|
||||||
|
if matches!(floor_mode, crate::config::MeFloorMode::Adaptive) {
|
||||||
|
1
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"# HELP telemt_me_floor_mode_switch_all_total Runtime ME floor mode switches"
|
||||||
|
);
|
||||||
|
let _ = writeln!(out, "# TYPE telemt_me_floor_mode_switch_all_total counter");
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"telemt_me_floor_mode_switch_all_total {}",
|
||||||
|
if me_allows_normal {
|
||||||
|
stats.get_me_floor_mode_switch_total()
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"telemt_me_floor_mode_switch_total{{from=\"static\",to=\"adaptive\"}} {}",
|
||||||
|
if me_allows_normal {
|
||||||
|
stats.get_me_floor_mode_switch_static_to_adaptive_total()
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"telemt_me_floor_mode_switch_total{{from=\"adaptive\",to=\"static\"}} {}",
|
||||||
|
if me_allows_normal {
|
||||||
|
stats.get_me_floor_mode_switch_adaptive_to_static_total()
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
let _ = writeln!(out, "# HELP telemt_secure_padding_invalid_total Invalid secure frame lengths");
|
let _ = writeln!(out, "# HELP telemt_secure_padding_invalid_total Invalid secure frame lengths");
|
||||||
let _ = writeln!(out, "# TYPE telemt_secure_padding_invalid_total counter");
|
let _ = writeln!(out, "# TYPE telemt_secure_padding_invalid_total counter");
|
||||||
let _ = writeln!(
|
let _ = writeln!(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue