nodedb 0.3.0

Local-first, real-time, edge-to-cloud hybrid database for multi-modal workloads
Documentation
// SPDX-License-Identifier: BUSL-1.1

//! `GET /v1/cluster/debug/transport` — dump the QUIC transport's
//! connection cache + per-peer circuit-breaker state.

use axum::extract::State;
use axum::response::Response;

use nodedb_cluster::{BreakerSnapshot, TransportPeerSnapshot};

use super::super::super::auth::{AppState, ResolvedIdentity};
use super::guard::{cluster_disabled, ensure_debug_access, ok_json};

#[derive(serde::Serialize)]
struct TransportDebugResponse {
    node_id: u64,
    peers: Vec<TransportPeerSnapshot>,
    breakers: Vec<BreakerSnapshot>,
}

pub async fn transport_debug(
    identity: ResolvedIdentity,
    State(state): State<AppState>,
) -> Response {
    if let Some(resp) = ensure_debug_access(&state, &identity) {
        return resp;
    }
    let Some(transport) = state.shared.cluster_transport.as_ref() else {
        return cluster_disabled();
    };
    let response = TransportDebugResponse {
        node_id: state.shared.node_id,
        peers: transport.peer_snapshot(),
        breakers: transport.circuit_breaker().snapshot(),
    };
    ok_json(&response)
}