use std::time::Duration;
use vise::{Buckets, EncodeLabelSet, EncodeLabelValue, Family, Gauge, Histogram, Metrics, Unit};
#[derive(Debug, Metrics)]
#[metrics(prefix = "server_state_keeper_secondary_storage")]
pub(super) struct RocksdbStorageMetrics {
#[metrics(buckets = Buckets::LATENCIES)]
pub update: Histogram<Duration>,
pub lag: Gauge<u64>,
pub size: Gauge<u64>,
}
#[vise::register]
pub(super) static METRICS: vise::Global<RocksdbStorageMetrics> = vise::Global::new();
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EncodeLabelValue, EncodeLabelSet)]
#[metrics(label = "stage", rename_all = "snake_case")]
pub(super) enum RecoveryStage {
LoadFactoryDeps,
SaveFactoryDeps,
LoadChunkStarts,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EncodeLabelValue, EncodeLabelSet)]
#[metrics(label = "stage", rename_all = "snake_case")]
pub(super) enum ChunkRecoveryStage {
LoadEntries,
SaveEntries,
}
#[derive(Debug, Metrics)]
#[metrics(prefix = "server_state_keeper_secondary_storage_recovery")]
pub(super) struct RocksdbRecoveryMetrics {
pub recovered_chunk_count: Gauge<u64>,
#[metrics(buckets = Buckets::LATENCIES, unit = Unit::Seconds)]
pub latency: Family<RecoveryStage, Histogram<Duration>>,
#[metrics(buckets = Buckets::LATENCIES, unit = Unit::Seconds)]
pub chunk_latency: Family<ChunkRecoveryStage, Histogram<Duration>>,
}
#[vise::register]
pub(super) static RECOVERY_METRICS: vise::Global<RocksdbRecoveryMetrics> = vise::Global::new();