From 33e12f2a61e1587d6ce48ef9bd37bf2d31c0017e Mon Sep 17 00:00:00 2001 From: tv Date: Thu, 29 Oct 2026 00:05:43 +0100 Subject: f-341-relay-slot-recovery.patch --- docs/openapi.yaml | 261 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 143 insertions(+), 118 deletions(-) (limited to 'docs') diff --git a/docs/openapi.yaml b/docs/openapi.yaml index acd2ce0..bc9652e 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -342,13 +342,18 @@ paths: `text/plain` (as Prometheus does), the Prometheus text format (0.0.4) instead, with per-peer series labelled `peer` (the node ID). Aliases are only in `continuum_info` and `continuum_peer_info`, for joining. + + A node started with `--relay-only` answers `RelayOnlyStats` instead (and has + only `/health`, `/admin/stats` and `/admin/log`). responses: '200': description: Statistics. content: application/json: schema: - $ref: '#/components/schemas/Stats' + oneOf: + - $ref: '#/components/schemas/Stats' + - $ref: '#/components/schemas/RelayOnlyStats' text/plain; version=0.0.4: schema: type: string @@ -1270,6 +1275,142 @@ components: type: integer description: Age of the last sample. + TransportStats: + type: object + description: How the transports find and reach peers (`measurements.md`, Transports). + properties: + paths: + description: The paths layer's; null without one. + oneOf: + - type: 'null' + - type: object + required: [paths, probesSent, probesAnswered, probesUnanswered, sendFailures, failovers, switches] + properties: + paths: + type: array + description: Every path measured (of peers with several addresses used lately, and every path keepalives went over). + items: + type: object + required: [address, down] + properties: + address: + type: string + rttMs: + type: [number, 'null'] + down: + type: boolean + probesSent: + type: integer + probesAnswered: + type: integer + probesUnanswered: + type: integer + sendFailures: + type: integer + failovers: + type: integer + switches: + type: integer + identity: + description: The identity layer's; null without one. + oneOf: + - type: 'null' + - type: object + required: [proven, hinted, proofsRejected, addressChanges, droppedUnproven, refusedUnproven, seedsUnanswered] + properties: + proven: + type: object + description: Nodes proven at an address, by transport (scheme). + additionalProperties: + type: integer + hinted: + type: integer + description: Nodes known only from hints, proven nowhere. + proofsRejected: + type: integer + addressChanges: + type: integer + droppedUnproven: + type: integer + refusedUnproven: + type: integer + seedsUnanswered: + type: integer + libp2p: + description: The libp2p transport's; null if it isn't one of this node's. + oneOf: + - type: 'null' + - type: object + required: [reachability, connections, relaySlots, holePunches, dialFailures] + properties: + reachability: + type: string + enum: [unknown, private, public] + description: What AutoNAT says. + publicAddress: + type: [string, 'null'] + description: The address AutoNAT confirmed, while public. + connections: + type: object + required: [direct, relayed] + properties: + direct: + type: integer + relayed: + type: integer + relaySlots: + type: object + required: [held, paused, granted, lost, notGranted] + properties: + held: + type: integer + paused: + type: integer + description: Relays not picked again for a while, after refusing a slot or not granting it. + granted: + type: integer + lost: + type: integer + notGranted: + type: integer + holePunches: + type: object + required: [succeeded, failed] + properties: + succeeded: + type: integer + failed: + type: integer + dialFailures: + type: object + required: [unreachable, wrongPeerId, noAddresses, other] + properties: + unreachable: + type: integer + wrongPeerId: + type: integer + noAddresses: + type: integer + other: + type: integer + RelayOnlyStats: + type: object + description: '`/admin/stats` of a node started with `--relay-only`.' + required: [peerId, addresses, uptimeSecs, transports] + properties: + peerId: + type: string + description: The relay's libp2p peer ID. + addresses: + type: array + items: + type: string + description: Where nodes reach it, as `libp2p:` addresses to list in `_continuum/relays`. + uptimeSecs: + type: integer + transports: + $ref: '#/components/schemas/TransportStats' + Stats: type: object required: [nodeId, addresses, uptimeSecs, ready, epoch, document, catchUp, remakes, sync, relay, topology, stability, staleHelloReplies, traffic, incidents, propagation, disk, transports] @@ -1439,123 +1580,7 @@ components: $ref: '#/components/schemas/Traffic' description: All peers, including ones no longer listed. transports: - type: object - description: How the transports find and reach peers (`measurements.md`, Transports). - properties: - paths: - description: The paths layer's; null without one. - oneOf: - - type: 'null' - - type: object - required: [paths, probesSent, probesAnswered, probesUnanswered, sendFailures, failovers, switches] - properties: - paths: - type: array - description: Every path measured (of peers with several addresses used lately, and every path keepalives went over). - items: - type: object - required: [address, down] - properties: - address: - type: string - rttMs: - type: [number, 'null'] - down: - type: boolean - probesSent: - type: integer - probesAnswered: - type: integer - probesUnanswered: - type: integer - sendFailures: - type: integer - failovers: - type: integer - switches: - type: integer - identity: - description: The identity layer's; null without one. - oneOf: - - type: 'null' - - type: object - required: [proven, hinted, proofsRejected, addressChanges, droppedUnproven, refusedUnproven, seedsUnanswered] - properties: - proven: - type: object - description: Nodes proven at an address, by transport (scheme). - additionalProperties: - type: integer - hinted: - type: integer - description: Nodes known only from hints, proven nowhere. - proofsRejected: - type: integer - addressChanges: - type: integer - droppedUnproven: - type: integer - refusedUnproven: - type: integer - seedsUnanswered: - type: integer - libp2p: - description: The libp2p transport's; null if it isn't one of this node's. - oneOf: - - type: 'null' - - type: object - required: [reachability, connections, relaySlots, holePunches, dialFailures] - properties: - reachability: - type: string - enum: [unknown, private, public] - description: What AutoNAT says. - publicAddress: - type: [string, 'null'] - description: The address AutoNAT confirmed, while public. - connections: - type: object - required: [direct, relayed] - properties: - direct: - type: integer - relayed: - type: integer - relaySlots: - type: object - required: [held, paused, granted, lost, notGranted] - properties: - held: - type: integer - paused: - type: integer - description: Relays picked that never granted a slot, not picked again for a while. - granted: - type: integer - lost: - type: integer - notGranted: - type: integer - holePunches: - type: object - required: [succeeded, failed] - properties: - succeeded: - type: integer - failed: - type: integer - dialFailures: - type: object - required: [unreachable, wrongPeerId, noAddresses, other] - properties: - unreachable: - type: integer - wrongPeerId: - type: integer - noAddresses: - type: integer - other: - type: integer + $ref: '#/components/schemas/TransportStats' incidents: $ref: '#/components/schemas/Incidents' description: The peers currently listed. -- cgit v1.3.1