use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, Ordering};
pub static SERVER_READY: AtomicBool = AtomicBool::new(false);
pub static REQUESTS_TOTAL: AtomicU64 = AtomicU64::new(0);
pub static ERRORS_TOTAL: AtomicU64 = AtomicU64::new(0);
pub static ACTIVE_CONNECTIONS: AtomicI64 = AtomicI64::new(0);
pub fn record_request() {
REQUESTS_TOTAL.fetch_add(1, Ordering::Relaxed);
}
pub fn record_error() {
ERRORS_TOTAL.fetch_add(1, Ordering::Relaxed);
}
pub fn connection_open() {
ACTIVE_CONNECTIONS.fetch_add(1, Ordering::Relaxed);
}
pub fn connection_close() {
ACTIVE_CONNECTIONS.fetch_sub(1, Ordering::Relaxed);
}
pub fn prometheus_text() -> String {
let requests = REQUESTS_TOTAL.load(Ordering::Relaxed);
let errors = ERRORS_TOTAL.load(Ordering::Relaxed);
let active = ACTIVE_CONNECTIONS.load(Ordering::Relaxed);
format!(
"# HELP rws_requests_total Total HTTP requests handled\n\
# TYPE rws_requests_total counter\n\
rws_requests_total {}\n\n\
# HELP rws_errors_total HTTP requests that returned an application error\n\
# TYPE rws_errors_total counter\n\
rws_errors_total {}\n\n\
# HELP rws_active_connections Currently open connections\n\
# TYPE rws_active_connections gauge\n\
rws_active_connections {}\n",
requests, errors, active
)
}