use once_cell::sync::Lazy;
#[cfg(feature = "metrics")]
use tari_metrics::{Histogram, HistogramVec, IntCounter, IntCounterVec, IntGauge, IntGaugeVec};
use crate::protocol::{
ProtocolId,
rpc::{RpcServerError, RpcStatusCode},
};
pub fn num_sessions(protocol: &ProtocolId) -> IntGauge {
static METER: Lazy<IntGaugeVec> = Lazy::new(|| {
tari_metrics::register_int_gauge_vec(
"comms::rpc::server::num_sessions",
"The number of active server sessions per protocol",
&["protocol"],
)
.unwrap()
});
METER.with_label_values(&[String::from_utf8_lossy(protocol).as_ref()])
}
pub fn handshake_error_counter(protocol: &ProtocolId) -> IntCounter {
static METER: Lazy<IntCounterVec> = Lazy::new(|| {
tari_metrics::register_int_counter_vec(
"comms::rpc::server::handshake_error_count",
"The number of handshake errors per protocol",
&["protocol"],
)
.unwrap()
});
METER.with_label_values(&[String::from_utf8_lossy(protocol).as_ref()])
}
pub fn error_counter(protocol: &ProtocolId, err: &RpcServerError) -> IntCounter {
static METER: Lazy<IntCounterVec> = Lazy::new(|| {
tari_metrics::register_int_counter_vec(
"comms::rpc::server::error_count",
"The number of RPC errors per protocol",
&["protocol", "error"],
)
.unwrap()
});
METER.with_label_values(&[
String::from_utf8_lossy(protocol).as_ref(),
err.to_debug_string().as_str(),
])
}
pub fn status_error_counter(protocol: &ProtocolId, status_code: RpcStatusCode) -> IntCounter {
static METER: Lazy<IntCounterVec> = Lazy::new(|| {
tari_metrics::register_int_counter_vec(
"comms::rpc::server::status_error_count",
"The number of RPC errors by status code per protocol",
&["protocol", "status"],
)
.unwrap()
});
METER.with_label_values(&[
String::from_utf8_lossy(protocol).as_ref(),
status_code.to_debug_string().as_str(),
])
}
pub fn inbound_requests_bytes(protocol: &ProtocolId) -> Histogram {
static METER: Lazy<HistogramVec> = Lazy::new(|| {
tari_metrics::register_histogram_vec(
"comms::rpc::server::inbound_request_bytes",
"Avg. request bytes per protocol",
&["protocol"],
)
.unwrap()
});
METER.with_label_values(&[String::from_utf8_lossy(protocol).as_ref()])
}
pub fn outbound_response_bytes(protocol: &ProtocolId) -> Histogram {
static METER: Lazy<HistogramVec> = Lazy::new(|| {
tari_metrics::register_histogram_vec(
"comms::rpc::server::outbound_response_bytes",
"Avg. response bytes per protocol",
&["protocol"],
)
.unwrap()
});
METER.with_label_values(&[String::from_utf8_lossy(protocol).as_ref()])
}