matrix-bridge-teams 0.1.0

A bridge between Matrix and Microsoft Teams written in Rust
use salvo::prelude::*;
use serde::Serialize;

#[handler]
pub async fn metrics(_req: &mut Request, _depot: &mut Depot, res: &mut Response) {
    let snapshot = MetricsResponse {
        messages_bridge_total: 0,
        messages_bridge_teams_to_matrix: 0,
        messages_bridge_matrix_to_teams: 0,
        errors_total: 0,
        uptime_seconds: 0,
    };

    res.render(Text::Plain(prometheus_format(&snapshot)));
}

#[derive(Serialize)]
struct MetricsResponse {
    messages_bridge_total: u64,
    messages_bridge_teams_to_matrix: u64,
    messages_bridge_matrix_to_teams: u64,
    errors_total: u64,
    uptime_seconds: u64,
}

fn prometheus_format(snapshot: &MetricsResponse) -> String {
    format!(
        r#"# HELP messages_bridge_total Total number of messages bridged
# TYPE messages_bridge_total counter
messages_bridge_total {}

# HELP messages_bridge_teams_to_matrix Number of messages bridged from Teams to Matrix
# TYPE messages_bridge_teams_to_matrix counter
messages_bridge_teams_to_matrix {}

# HELP messages_bridge_matrix_to_teams Number of messages bridged from Matrix to Teams
# TYPE messages_bridge_matrix_to_teams counter
messages_bridge_matrix_to_teams {}

# HELP errors_total Total number of errors
# TYPE errors_total counter
errors_total {}

# HELP uptime_seconds Bridge uptime in seconds
# TYPE uptime_seconds gauge
uptime_seconds {}
"#,
        snapshot.messages_bridge_total,
        snapshot.messages_bridge_teams_to_matrix,
        snapshot.messages_bridge_matrix_to_teams,
        snapshot.errors_total,
        snapshot.uptime_seconds
    )
}