use iroh_metrics::{Counter, MetricsGroup};
#[derive(Debug, MetricsGroup)]
#[non_exhaustive]
#[metrics(name = "proxy-downstream", default)]
pub struct DownstreamMetrics {
pub requests_accepted: Counter,
pub requests_accepted_tcp: Counter,
pub requests_accepted_h1: Counter,
pub requests_accepted_h2: Counter,
pub requests_accepted_h1_connect: Counter,
pub requests_accepted_h1_upgrade: Counter,
pub requests_accepted_h2_connect: Counter,
pub requests_accepted_h2_extended_connect: Counter,
pub requests_denied: Counter,
pub requests_completed: Counter,
pub requests_failed: Counter,
pub iroh_connections_opened: Counter,
pub iroh_connections_closed_idle: Counter,
pub iroh_connections_closed_error: Counter,
pub bytes_to_upstream: Counter,
pub bytes_from_upstream: Counter,
}
impl DownstreamMetrics {
pub fn active_requests(&self) -> u64 {
self.requests_accepted
.get()
.saturating_sub(self.requests_completed.get())
.saturating_sub(self.requests_failed.get())
}
pub fn total_iroh_connections(&self) -> u64 {
self.iroh_connections_opened.get()
}
pub fn active_iroh_connections(&self) -> u64 {
self.iroh_connections_opened
.get()
.saturating_sub(self.iroh_connections_closed_idle.get())
.saturating_sub(self.iroh_connections_closed_error.get())
}
}