diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/measurements.md | 1 | ||||
| -rw-r--r-- | docs/openapi.yaml | 32 |
2 files changed, 33 insertions, 0 deletions
diff --git a/docs/measurements.md b/docs/measurements.md index 483e185..72d2a98 100644 --- a/docs/measurements.md +++ b/docs/measurements.md @@ -273,6 +273,7 @@ In `/peers`, and as `peer_…` series with a `peer` label: | `divergedForSecs` | `peer_diverged_seconds` | How long its heads have differed from ours with no sync message from it in between, nor both moving on; absent while they match. Long values precede a healing re-handshake ([`peers.md`](peers.md)). | | `syncThroughput` | `peer_sync_throughput_bytes_per_second` | Sync bytes per second over exchanges of at least 32 KiB, round trip taken off, smoothed. Absent before the first large exchange; comes with its age (`secsAgo`) since large exchanges are rare. This is the rate the peer delivers at in practice (its apply time included), not the path's capacity. | | `clock.offsetMs`, `.withinMs` | `peer_clock_offset_seconds`, `peer_clock_offset_within_seconds` | How far its clock is ahead of ours (behind if negative), give or take. Each PONG says when the peer answered, by its clock, which lies between our PING going and the PONG coming: within half the round trip of its middle, however unevenly the two ways took. Of its paths and the last 5 minutes, the narrowest bound is kept; a sample it contradicts (a clock set anew) replaces it at once. Absent before a PONG from it. | +| `hopDelay` | — | How long its sync messages take to come: each says when the peer generated it, by its clock; we take how long until we handle it, its clock offset (`clock`) taken off. So the transport, the network and the queues at both ends, which a PING's round trip leaves out (PINGs wait behind nothing); `halfRttMs` to compare. Good to the offset's error, half the round trip, but that error is the same for every message while the offset stands: the means of the last 15 minutes (`byMinuteMs`) show a link getting worse exactly. All since start in buckets (`halfWithinMs`, `p99WithinMs`), as propagation's. Absent before a message came while we knew its clock. | | `epoch`, `sameEpoch`, `heads` | — | What it last advertised; `sameEpoch: false` means we don't sync with it. | | `handshakeComplete`, `hasPendingDelivery` | — | Session state, for debugging. | diff --git a/docs/openapi.yaml b/docs/openapi.yaml index fd0b855..0509709 100644 --- a/docs/openapi.yaml +++ b/docs/openapi.yaml @@ -1686,6 +1686,10 @@ components: oneOf: - $ref: '#/components/schemas/ClockOffset' - type: 'null' + hopDelay: + oneOf: + - $ref: '#/components/schemas/HopDelay' + - type: 'null' Counter: type: object @@ -1765,6 +1769,34 @@ components: type: integer description: Give or take this much (half the round trip). + HopDelay: + type: object + description: How long a peer's sync messages take to come, from its clock when it generated one to ours when we handle it, its clock offset taken off (`measurements.md`, Per peer). Good to half the round trip, the offset's error; that error is the same for every message while the offset stands, so the minutes' means show a trend exactly. + required: [count, meanMs, halfWithinMs, p99WithinMs, belowZero, byMinuteMs, halfRttMs] + properties: + count: + type: integer + description: Messages measured since this node started. + meanMs: + type: integer + halfWithinMs: + type: [integer, 'null'] + description: The bucket bound by which half came (the propagation buckets of `/admin/stats`); null if beyond the last. + p99WithinMs: + type: [integer, 'null'] + description: The same for 99%. + belowZero: + type: integer + description: Messages that took less than nothing by the clocks (the offset's error was larger), counted as 0 above. + byMinuteMs: + type: array + items: + type: [integer, 'null'] + description: The mean of each of the last 15 minutes, oldest first, the last the current one; null for a minute without messages. May be negative. + halfRttMs: + type: [integer, 'null'] + description: Half the round trip to it now, from PINGs, which wait behind nothing; what the delay takes beyond it waits in queues (or is the offset's error). Null without a recent round trip. + Throughput: type: object required: [bytesPerSec, samples, secsAgo] |
