v2.65 (07.06.2026)
Topolograph Release Notes v2.65
Features
API: new GET /api/events/{graph_time}/adjacency/timeline endpoint
Returns adjacency up/down events already grouped into chronological time waves, so a client can narrate a network incident without post-processing hundreds of raw events. Grouping is computed server-side.
- Waves are split by inter-event gaps: a new wave starts when the gap to the next event exceeds
TIMELINE_GAP_MULTIPLIER * median_gap_sec(median is robust to bursts).median_gap_secand the multiplier are echoed in the response. - Each wave is characterised with
start_ts,end_ts,duration_sec,event_count,density,distinct_devices,trigger_device,patternandconverged. start_ts/end_tsare ISO 8601 withZ(e.g.2025-05-10T17:08:17.707000Z), the same format as thestart_time/end_timequery params, so a client can re-query the existing/adjacencyendpoint for a wave's individual events.
pattern classifies the wave by device state, mirroring the graph-level status from /graph/{graph_time}/status:
pattern |
Meaning | Example | Related graph status |
|---|---|---|---|
outage |
At least one device is left down at the end of the wave (fell and did not come back). | R1 down (no later up); R1 down, R2 down→up (R1 still down) |
critical (single host down) |
flap |
Everything that went down came back up within the wave. Independent of device count. | R1 down→up; R1..R100 each down→up |
warning (host down then up) |
up |
Only up events, nothing went down in the wave (recovery or brand-new adjacency). | R1 up, R2 up |
ok (up-only events) |
converged is true when every device left down in the wave recovers later on the timeline (this or any later wave).
API: GET /api/graph/{graph_time}/status now includes top_unstable_devices
A top-N list of {device, event_count} sorted descending, answering "which device is worst" without a separate endpoint.
Fixes
Event time-range query is now inclusive at both ends
Re-querying a wave's [start_ts, end_ts] time window now returns exactly that wave's events (no boundary events lost). Previously, events at the exact end timestamp were excluded.
all_host_up_down_events is now returned in chronological order
GET /api/events/{graph_time}/adjacency sorts host up/down events by @timestamp in the DB query (previously returned in insertion order).
Configuration
TIMELINE_GAP_MULTIPLIER(default5): the multiplier used to detect wave boundaries. Override via the environment variable of the same name.