rust_web_server/metrics/
mod.rs1use std::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, Ordering};
6
7pub static SERVER_READY: AtomicBool = AtomicBool::new(false);
12
13pub static REQUESTS_TOTAL: AtomicU64 = AtomicU64::new(0);
15
16pub static ERRORS_TOTAL: AtomicU64 = AtomicU64::new(0);
18
19pub static ACTIVE_CONNECTIONS: AtomicI64 = AtomicI64::new(0);
21
22pub fn record_request() {
23 REQUESTS_TOTAL.fetch_add(1, Ordering::Relaxed);
24}
25
26pub fn record_error() {
27 ERRORS_TOTAL.fetch_add(1, Ordering::Relaxed);
28}
29
30pub fn connection_open() {
31 ACTIVE_CONNECTIONS.fetch_add(1, Ordering::Relaxed);
32}
33
34pub fn connection_close() {
35 ACTIVE_CONNECTIONS.fetch_sub(1, Ordering::Relaxed);
36}
37
38pub fn prometheus_text() -> String {
40 let requests = REQUESTS_TOTAL.load(Ordering::Relaxed);
41 let errors = ERRORS_TOTAL.load(Ordering::Relaxed);
42 let active = ACTIVE_CONNECTIONS.load(Ordering::Relaxed);
43
44 format!(
45 "# HELP rws_requests_total Total HTTP requests handled\n\
46 # TYPE rws_requests_total counter\n\
47 rws_requests_total {}\n\n\
48 # HELP rws_errors_total HTTP requests that returned an application error\n\
49 # TYPE rws_errors_total counter\n\
50 rws_errors_total {}\n\n\
51 # HELP rws_active_connections Currently open connections\n\
52 # TYPE rws_active_connections gauge\n\
53 rws_active_connections {}\n",
54 requests, errors, active
55 )
56}