Skip to main content

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;