o_sfu_telemetry/prometheus/mod.rs
1//! Prometheus text rendering for runtime metrics.
2//!
3//! The renderer emits `RuntimeMetrics` in the Prometheus text exposition format
4//! used by the server `/metrics` route.
5//!
6//! ```
7//! use o_sfu_telemetry::{
8//! metrics::{HttpRoute, RoomGaugeValues, RuntimeMetrics},
9//! prometheus::render_prometheus,
10//! };
11//!
12//! let metrics = RuntimeMetrics::default();
13//! let request = metrics.track_http_request(HttpRoute::Noop);
14//! let rendered = render_prometheus(&metrics, RoomGaugeValues::default());
15//! drop(request);
16//!
17//! let expected_lines = [
18//! "# TYPE osfu_http_noop_requests_total counter",
19//! "osfu_http_noop_requests_total 1",
20//! "# TYPE osfu_http_inflight_requests gauge",
21//! "osfu_http_inflight_requests{route=\"noop\"} 1",
22//! "# TYPE osfu_http_request_duration_seconds histogram",
23//! "osfu_http_request_duration_seconds_count{route=\"noop\"} 0",
24//! ];
25//!
26//! for line in expected_lines {
27//! assert!(rendered.contains(line), "missing Prometheus line: {line}");
28//! }
29//! ```
30
31use crate::metrics::{RoomGaugeValues, RuntimeMetrics, render_prometheus_text};
32
33pub const PROMETHEUS_CONTENT_TYPE: &str = "text/plain; version=0.0.4; charset=utf-8";
34
35pub fn render_prometheus(metrics: &RuntimeMetrics, room_gauges: RoomGaugeValues) -> String {
36 render_prometheus_text(metrics, room_gauges)
37}
38
39#[cfg(test)]
40#[path = "TESTS/mod.rs"]
41mod tests;