psocks/src/stats.rs
2026-03-22 09:18:09 +02:00

41 lines
1,014 B
Rust

use rocket::serde::Serialize;
use std::sync::atomic::{AtomicU64, Ordering};
#[derive(Serialize)]
pub struct Snapshot {
pub request: u64,
pub blocked: u64,
pub entries: u64,
}
#[derive(Default)]
pub struct Total {
entries: AtomicU64,
blocked: AtomicU64,
request: AtomicU64,
}
impl Total {
pub fn with_entries(entries: u64) -> Self {
Self {
entries: entries.into(),
..Self::default()
}
}
pub fn snapshot(&self) -> Snapshot {
Snapshot {
request: self.request.load(Ordering::Relaxed),
blocked: self.blocked.load(Ordering::Relaxed),
entries: self.entries.load(Ordering::Relaxed),
}
}
pub fn set_entries(&self, value: u64) {
self.entries.store(value, Ordering::Relaxed);
}
pub fn increase_blocked(&self) {
self.blocked.fetch_add(1, Ordering::Relaxed);
}
pub fn increase_request(&self) {
self.request.fetch_add(1, Ordering::Relaxed);
}
}