Skip to main content

gsm_telemetry/
lib.rs

1//! Lightweight helpers for Greentic telemetry.
2//! Provides span utilities, metric recorders, and message-context helpers
3//! built on top of the shared `greentic-telemetry` crate.
4
5use anyhow::Result;
6use greentic_telemetry::{TelemetryConfig, TelemetryCtx};
7use greentic_types::TenantCtx;
8
9mod auth;
10mod context;
11mod metrics;
12
13pub use auth::{
14    AuthRenderMode, record_auth_card_clicked, record_auth_card_render,
15    record_auth_card_render_with_labels,
16};
17pub use context::{MessageContext, TelemetryLabels};
18pub use metrics::{
19    record_counter, record_gauge, record_histogram, telemetry_enabled, with_common_fields,
20};
21
22/// Installs the shared telemetry subscriber configured from `RUST_LOG`.
23pub fn install(service_name: &str) -> Result<()> {
24    greentic_telemetry::init_telemetry(TelemetryConfig {
25        service_name: service_name.to_string(),
26    })
27}
28
29/// Stores the `TenantCtx` on the current Tokio task.
30pub fn set_current_tenant_ctx(ctx: TenantCtx) {
31    let mut telemetry_ctx = TelemetryCtx::new(ctx.tenant.as_str().to_string());
32    if let Some(session) = ctx.session_id() {
33        telemetry_ctx = telemetry_ctx.with_session(session.to_string());
34    }
35    if let Some(flow) = ctx.flow_id() {
36        telemetry_ctx = telemetry_ctx.with_flow(flow.to_string());
37    }
38    if let Some(node) = ctx.node_id() {
39        telemetry_ctx = telemetry_ctx.with_node(node.to_string());
40    }
41    if let Some(provider) = ctx.provider_id.as_ref() {
42        telemetry_ctx = telemetry_ctx.with_provider(provider.as_str().to_string());
43    }
44    greentic_telemetry::set_current_telemetry_ctx(telemetry_ctx);
45}
46
47#[macro_export]
48macro_rules! counter {
49    ($name:expr, $value:expr, $labels:expr) => {{ $crate::metrics::record_counter($name, $value, $labels) }};
50}
51
52#[macro_export]
53macro_rules! histogram {
54    ($name:expr, $value:expr, $labels:expr) => {{ $crate::metrics::record_histogram($name, $value, $labels) }};
55}
56
57#[macro_export]
58macro_rules! gauge {
59    ($name:expr, $value:expr, $labels:expr) => {{ $crate::metrics::record_gauge($name, $value, $labels) }};
60}