mirror of
https://github.com/0glabs/0g-storage-node.git
synced 2024-12-28 01:05:18 +00:00
73 lines
2.6 KiB
Rust
73 lines
2.6 KiB
Rust
use std::sync::atomic::{AtomicUsize, Ordering};
|
|
|
|
lazy_static! {
|
|
pub static ref METRICS: InternalMetrics = InternalMetrics::default();
|
|
}
|
|
|
|
/// A collection of metrics used throughout the server.
|
|
pub struct InternalMetrics {
|
|
/// The number of active UDP sessions that are currently established.
|
|
pub active_sessions: AtomicUsize,
|
|
/// The number of seconds to store received packets to taking a moving average over.
|
|
pub moving_window: u64,
|
|
/// The number of unsolicited requests received per moving window.
|
|
pub unsolicited_requests_per_window: AtomicUsize,
|
|
/// The number of bytes sent.
|
|
pub bytes_sent: AtomicUsize,
|
|
/// The number of bytes received.
|
|
pub bytes_recv: AtomicUsize,
|
|
}
|
|
|
|
impl Default for InternalMetrics {
|
|
fn default() -> Self {
|
|
InternalMetrics {
|
|
moving_window: 5,
|
|
active_sessions: AtomicUsize::new(0),
|
|
unsolicited_requests_per_window: AtomicUsize::new(0),
|
|
bytes_sent: AtomicUsize::new(0),
|
|
bytes_recv: AtomicUsize::new(0),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl InternalMetrics {
|
|
pub fn add_recv_bytes(&self, bytes: usize) {
|
|
let current_bytes_recv = self.bytes_recv.load(Ordering::Relaxed);
|
|
self.bytes_recv
|
|
.store(current_bytes_recv.saturating_add(bytes), Ordering::Relaxed);
|
|
}
|
|
|
|
pub fn add_sent_bytes(&self, bytes: usize) {
|
|
let current_bytes_sent = self.bytes_sent.load(Ordering::Relaxed);
|
|
self.bytes_sent
|
|
.store(current_bytes_sent.saturating_add(bytes), Ordering::Relaxed);
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Debug)]
|
|
/// The publicly accessible metrics that can be obtained from the Discv5 server.
|
|
pub struct Metrics {
|
|
/// The number of active UDP sessions that are currently established.
|
|
pub active_sessions: usize,
|
|
/// The number of unsolicited requests received per second (averaged over a moving window).
|
|
pub unsolicited_requests_per_second: f64,
|
|
/// The number of bytes sent.
|
|
pub bytes_sent: usize,
|
|
/// The number of bytes received.
|
|
pub bytes_recv: usize,
|
|
}
|
|
|
|
impl From<&METRICS> for Metrics {
|
|
fn from(internal_metrics: &METRICS) -> Self {
|
|
Metrics {
|
|
active_sessions: internal_metrics.active_sessions.load(Ordering::Relaxed),
|
|
unsolicited_requests_per_second: internal_metrics
|
|
.unsolicited_requests_per_window
|
|
.load(Ordering::Relaxed) as f64
|
|
/ internal_metrics.moving_window as f64,
|
|
bytes_sent: internal_metrics.bytes_sent.load(Ordering::Relaxed),
|
|
bytes_recv: internal_metrics.bytes_recv.load(Ordering::Relaxed),
|
|
}
|
|
}
|
|
}
|