Files
wifi-densepose/vendor/ruvector/crates/ruvector-metrics/src/lib.rs

106 lines
3.3 KiB
Rust

use lazy_static::lazy_static;
use prometheus::{
register_counter, register_counter_vec, register_gauge, register_gauge_vec,
register_histogram_vec, Counter, CounterVec, Encoder, Gauge, GaugeVec, HistogramVec, Opts,
Registry, TextEncoder,
};
pub mod health;
pub mod recorder;
pub use health::{
CollectionHealth, HealthChecker, HealthResponse, HealthStatus, ReadinessResponse,
};
pub use recorder::MetricsRecorder;
lazy_static! {
pub static ref REGISTRY: Registry = Registry::new();
// Search metrics
pub static ref SEARCH_REQUESTS_TOTAL: CounterVec = register_counter_vec!(
Opts::new("ruvector_search_requests_total", "Total search requests"),
&["collection", "status"]
).unwrap();
pub static ref SEARCH_LATENCY_SECONDS: HistogramVec = register_histogram_vec!(
"ruvector_search_latency_seconds",
"Search latency in seconds",
&["collection"],
vec![0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0]
).unwrap();
// Insert metrics
pub static ref INSERT_REQUESTS_TOTAL: CounterVec = register_counter_vec!(
Opts::new("ruvector_insert_requests_total", "Total insert requests"),
&["collection", "status"]
).unwrap();
pub static ref INSERT_LATENCY_SECONDS: HistogramVec = register_histogram_vec!(
"ruvector_insert_latency_seconds",
"Insert latency in seconds",
&["collection"],
vec![0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1.0]
).unwrap();
pub static ref VECTORS_INSERTED_TOTAL: CounterVec = register_counter_vec!(
Opts::new("ruvector_vectors_inserted_total", "Total vectors inserted"),
&["collection"]
).unwrap();
// Delete metrics
pub static ref DELETE_REQUESTS_TOTAL: CounterVec = register_counter_vec!(
Opts::new("ruvector_delete_requests_total", "Total delete requests"),
&["collection", "status"]
).unwrap();
// Collection metrics
pub static ref VECTORS_TOTAL: GaugeVec = register_gauge_vec!(
Opts::new("ruvector_vectors_total", "Total vectors stored"),
&["collection"]
).unwrap();
pub static ref COLLECTIONS_TOTAL: Gauge = register_gauge!(
Opts::new("ruvector_collections_total", "Total number of collections")
).unwrap();
// System metrics
pub static ref MEMORY_USAGE_BYTES: Gauge = register_gauge!(
Opts::new("ruvector_memory_usage_bytes", "Memory usage in bytes")
).unwrap();
pub static ref UPTIME_SECONDS: Counter = register_counter!(
Opts::new("ruvector_uptime_seconds", "Uptime in seconds")
).unwrap();
}
/// Gather all metrics in Prometheus text format
pub fn gather_metrics() -> String {
let encoder = TextEncoder::new();
let metric_families = prometheus::gather();
let mut buffer = Vec::new();
encoder.encode(&metric_families, &mut buffer).unwrap();
String::from_utf8(buffer).unwrap()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_gather_metrics() {
let metrics = gather_metrics();
assert!(metrics.contains("ruvector"));
}
#[test]
fn test_record_search() {
SEARCH_REQUESTS_TOTAL
.with_label_values(&["test", "success"])
.inc();
SEARCH_LATENCY_SECONDS
.with_label_values(&["test"])
.observe(0.001);
}
}