warm_channels 0.3.0

Always-ready HTTP client channels for gRPC or other RPC-like requests.
Documentation
use lazy_static::lazy_static;
use prometheus::{register_counter_vec, register_gauge_vec};

lazy_static! {
    static ref N_CHANNELS_WANT: prometheus::GaugeVec = register_gauge_vec!(
        "client_channels_target",
        "Desired number of client channels",
        &["client_name"]
    )
    .unwrap();
    static ref N_CHANNELS_CURRENT: prometheus::GaugeVec = register_gauge_vec!(
        "client_channels_current",
        "Number of client channels currently connected",
        &["client_name"]
    )
    .unwrap();
    static ref N_CHANNELS_HEALTHY: prometheus::GaugeVec = register_gauge_vec!(
        "client_channels_healthy",
        "Number of client channels currently healthy",
        &["client_name"]
    )
    .unwrap();
    static ref N_CHANNELS_OPENED: prometheus::CounterVec = register_counter_vec!(
        "client_channels_opened",
        "Total counter of client channels opened",
        &["client_name"]
    )
    .unwrap();
}

pub(crate) fn n_channels_want(name: &str, n: usize) {
    N_CHANNELS_WANT.with_label_values(&[name]).set(n as f64);
}

pub(crate) fn n_channels_update(name: &str, total: usize, healthy: usize) {
    N_CHANNELS_CURRENT
        .with_label_values(&[name])
        .set(total as f64);
    N_CHANNELS_HEALTHY
        .with_label_values(&[name])
        .set(healthy as f64);
}

pub(crate) fn n_channels_inc(name: &str) {
    N_CHANNELS_OPENED.with_label_values(&[name]).inc();
}