Add service for Prometheus, shows up in Grafana
This commit is contained in:
+13
-185
@@ -1,8 +1,5 @@
|
||||
use stats_types::*;
|
||||
use std::fmt;
|
||||
use std::sync::atomic::AtomicU64;
|
||||
use std::sync::atomic::Ordering::{self, AcqRel, Acquire, SeqCst};
|
||||
use std::sync::RwLock;
|
||||
use std::sync::atomic::Ordering;
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
const US: u64 = 1000;
|
||||
@@ -114,192 +111,23 @@ impl IntervalEma {
|
||||
}
|
||||
}
|
||||
|
||||
stats_proc::stats_struct2!((
|
||||
StatsStruct(
|
||||
stats_proc::stats_struct!((
|
||||
stats_struct(
|
||||
name(CaConnStats2),
|
||||
counters(
|
||||
//
|
||||
inserts_val,
|
||||
inserts_msp,
|
||||
inserts_discard,
|
||||
inserts_queue_len,
|
||||
poll_time_all,
|
||||
poll_time_handle_insert_futs,
|
||||
poll_time_get_series_futs,
|
||||
time_handle_conn_listen,
|
||||
time_handle_peer_ready,
|
||||
time_check_channels_state_init,
|
||||
time_handle_event_add_res,
|
||||
),
|
||||
),
|
||||
StatsStruct(name(SomeOtherStats), counters(c1, c2,),),
|
||||
agg(name(CaConnStats2Agg), parent(CaConnStats2)),
|
||||
diff(name(CaConnStats2AggDiff), input(CaConnStats2Agg)),
|
||||
));
|
||||
|
||||
pub struct CaConnStats {
|
||||
pub poll_time_all: AtomicU64,
|
||||
pub poll_time_handle_insert_futs: AtomicU64,
|
||||
pub poll_time_get_series_futs: AtomicU64,
|
||||
pub time_handle_conn_listen: AtomicU64,
|
||||
pub time_handle_peer_ready: AtomicU64,
|
||||
pub time_check_channels_state_init: AtomicU64,
|
||||
pub time_handle_event_add_res: AtomicU64,
|
||||
pub inserts_started: AtomicU64,
|
||||
pub inserts_discarded: AtomicU64,
|
||||
pub insert_queue_len: AtomicU64,
|
||||
}
|
||||
|
||||
impl CaConnStats {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
poll_time_all: AtomicU64::new(0),
|
||||
poll_time_handle_insert_futs: AtomicU64::new(0),
|
||||
poll_time_get_series_futs: AtomicU64::new(0),
|
||||
time_handle_conn_listen: AtomicU64::new(0),
|
||||
time_handle_peer_ready: AtomicU64::new(0),
|
||||
time_check_channels_state_init: AtomicU64::new(0),
|
||||
time_handle_event_add_res: AtomicU64::new(0),
|
||||
inserts_started: AtomicU64::new(0),
|
||||
inserts_discarded: AtomicU64::new(0),
|
||||
insert_queue_len: AtomicU64::new(0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CaConnVecStats {
|
||||
pub ts_create: RwLock<Instant>,
|
||||
pub nstats: AtomicU64,
|
||||
pub poll_time_all: AtomicU64,
|
||||
pub poll_time_handle_insert_futs: AtomicU64,
|
||||
pub poll_time_get_series_futs: AtomicU64,
|
||||
pub time_handle_conn_listen: AtomicU64,
|
||||
pub time_handle_peer_ready: AtomicU64,
|
||||
pub time_check_channels_state_init: AtomicU64,
|
||||
pub time_handle_event_add_res: AtomicU64,
|
||||
pub inserts_started: AtomicU64,
|
||||
pub inserts_discarded: AtomicU64,
|
||||
pub insert_queue_len: AtomicU64,
|
||||
}
|
||||
|
||||
pub struct CaConnVecStatsDiff {
|
||||
pub dt: AtomicU64,
|
||||
pub nstats: AtomicU64,
|
||||
pub poll_time_all: AtomicU64,
|
||||
pub poll_time_handle_insert_futs: AtomicU64,
|
||||
pub poll_time_get_series_futs: AtomicU64,
|
||||
pub time_handle_conn_listen: AtomicU64,
|
||||
pub time_handle_peer_ready: AtomicU64,
|
||||
pub time_check_channels_state_init: AtomicU64,
|
||||
pub time_handle_event_add_res: AtomicU64,
|
||||
pub inserts_started: AtomicU64,
|
||||
pub inserts_discarded: AtomicU64,
|
||||
pub insert_queue_len: AtomicU64,
|
||||
}
|
||||
|
||||
impl CaConnVecStats {
|
||||
pub fn new(ts_create: Instant) -> Self {
|
||||
Self {
|
||||
ts_create: RwLock::new(ts_create),
|
||||
nstats: AtomicU64::new(0),
|
||||
poll_time_all: AtomicU64::new(0),
|
||||
poll_time_handle_insert_futs: AtomicU64::new(0),
|
||||
poll_time_get_series_futs: AtomicU64::new(0),
|
||||
time_handle_conn_listen: AtomicU64::new(0),
|
||||
time_handle_peer_ready: AtomicU64::new(0),
|
||||
time_check_channels_state_init: AtomicU64::new(0),
|
||||
time_handle_event_add_res: AtomicU64::new(0),
|
||||
inserts_started: AtomicU64::new(0),
|
||||
inserts_discarded: AtomicU64::new(0),
|
||||
insert_queue_len: AtomicU64::new(0),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn push(&mut self, k: &CaConnStats) {
|
||||
self.nstats.fetch_add(1, AcqRel);
|
||||
self.poll_time_all.fetch_add(k.poll_time_all.load(Acquire), AcqRel);
|
||||
self.poll_time_handle_insert_futs
|
||||
.fetch_add(k.poll_time_handle_insert_futs.load(Acquire), AcqRel);
|
||||
self.poll_time_get_series_futs
|
||||
.fetch_add(k.poll_time_get_series_futs.load(Acquire), AcqRel);
|
||||
self.time_handle_conn_listen
|
||||
.fetch_add(k.time_handle_conn_listen.load(Acquire), AcqRel);
|
||||
self.time_handle_peer_ready
|
||||
.fetch_add(k.time_handle_peer_ready.load(Acquire), AcqRel);
|
||||
self.time_check_channels_state_init
|
||||
.fetch_add(k.time_check_channels_state_init.load(Acquire), AcqRel);
|
||||
self.time_handle_event_add_res
|
||||
.fetch_add(k.time_handle_event_add_res.load(Acquire), AcqRel);
|
||||
self.inserts_started.fetch_add(k.inserts_started.load(Acquire), AcqRel);
|
||||
self.inserts_discarded
|
||||
.fetch_add(k.inserts_discarded.load(Acquire), AcqRel);
|
||||
self.insert_queue_len
|
||||
.fetch_add(k.insert_queue_len.load(Acquire), SeqCst);
|
||||
}
|
||||
|
||||
pub fn diff_against(&self, k: &Self) -> CaConnVecStatsDiff {
|
||||
let dur = self
|
||||
.ts_create
|
||||
.read()
|
||||
.unwrap()
|
||||
.duration_since(*k.ts_create.read().unwrap());
|
||||
CaConnVecStatsDiff {
|
||||
dt: AtomicU64::new(dur.as_secs() * SEC + dur.subsec_nanos() as u64),
|
||||
nstats: AtomicU64::new(self.nstats.load(Acquire)),
|
||||
poll_time_all: AtomicU64::new(self.poll_time_all.load(Acquire) - k.poll_time_all.load(Acquire)),
|
||||
poll_time_handle_insert_futs: AtomicU64::new(
|
||||
self.poll_time_handle_insert_futs.load(Acquire) - k.poll_time_handle_insert_futs.load(Acquire),
|
||||
),
|
||||
poll_time_get_series_futs: AtomicU64::new(
|
||||
self.poll_time_get_series_futs.load(Acquire) - k.poll_time_get_series_futs.load(Acquire),
|
||||
),
|
||||
time_handle_conn_listen: AtomicU64::new(
|
||||
self.time_handle_conn_listen.load(Acquire) - k.time_handle_conn_listen.load(Acquire),
|
||||
),
|
||||
time_handle_peer_ready: AtomicU64::new(
|
||||
self.time_handle_peer_ready.load(Acquire) - k.time_handle_peer_ready.load(Acquire),
|
||||
),
|
||||
time_check_channels_state_init: AtomicU64::new(
|
||||
self.time_check_channels_state_init.load(Acquire) - k.time_check_channels_state_init.load(Acquire),
|
||||
),
|
||||
time_handle_event_add_res: AtomicU64::new(
|
||||
self.time_handle_event_add_res.load(Acquire) - k.time_handle_event_add_res.load(Acquire),
|
||||
),
|
||||
inserts_started: AtomicU64::new(self.inserts_started.load(Acquire) - k.inserts_started.load(Acquire)),
|
||||
inserts_discarded: AtomicU64::new(self.inserts_discarded.load(Acquire) - k.inserts_discarded.load(Acquire)),
|
||||
insert_queue_len: AtomicU64::new(self.insert_queue_len.load(Acquire)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for CaConnVecStatsDiff {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
let nstats = self.nstats.load(Acquire);
|
||||
let insert_freq = self.inserts_started.load(Acquire) / (self.dt.load(Acquire) / SEC);
|
||||
let poll_time = self.poll_time_all.load(Acquire);
|
||||
let poll_time_handle_insert_futs = self.poll_time_handle_insert_futs.load(Acquire);
|
||||
let poll_time_get_series_futs = self.poll_time_get_series_futs.load(Acquire);
|
||||
let time_handle_conn_listen = self.time_handle_conn_listen.load(Acquire);
|
||||
let time_handle_peer_ready = self.time_handle_peer_ready.load(Acquire);
|
||||
let time_check_channels_state_init = self.time_check_channels_state_init.load(Acquire);
|
||||
let time_handle_event_add_res = self.time_check_channels_state_init.load(Acquire);
|
||||
let poll_pct_handle_insert_futs = poll_time_handle_insert_futs * 100 / poll_time;
|
||||
let poll_pct_get_series_futs = poll_time_get_series_futs * 100 / poll_time;
|
||||
let pct_handle_conn_listen = time_handle_conn_listen * 100 / poll_time;
|
||||
let pct_handle_peer_ready = time_handle_peer_ready * 100 / poll_time;
|
||||
let pct_check_channels_state_init = time_check_channels_state_init * 100 / poll_time;
|
||||
let pct_handle_event_add_res = time_handle_event_add_res * 100 / poll_time;
|
||||
let inserts_discarded_freq = self.inserts_discarded.load(Acquire);
|
||||
let insert_queue_len = self.insert_queue_len.load(Acquire);
|
||||
let insqavg = insert_queue_len as f32 / nstats as f32;
|
||||
write!(
|
||||
fmt,
|
||||
"nstats {} insq {} insqavg {:.2}\n",
|
||||
nstats, insert_queue_len, insqavg
|
||||
)
|
||||
.unwrap();
|
||||
write!(
|
||||
fmt,
|
||||
"infr {} dis {} pt {:5} ins {:2}% sid {:2}% listen {:2}% peer {:2}% checkinit {:2}% evadd {:2}%",
|
||||
insert_freq,
|
||||
inserts_discarded_freq,
|
||||
poll_time / 1000,
|
||||
poll_pct_handle_insert_futs,
|
||||
poll_pct_get_series_futs,
|
||||
pct_handle_conn_listen,
|
||||
pct_handle_peer_ready,
|
||||
pct_check_channels_state_init,
|
||||
pct_handle_event_add_res
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user