Four networks, eleven interactive plots, two languages — and a little more magic for reading the past.
An IRC network has a rhythm of its own. Its population rises and falls, channels appear, server counts change, and the occasional unusual dip deserves a closer look.
/LUSERS gives us a snapshot of that activity. I wanted Mediabot to turn those snapshots into something we could explore: a proper network observatory, with readable curves, useful statistics and enough history to understand what happened.
The latest work, from MB830 through MB833, brings the Undernet and Libera streams into that observatory, refines its presentation, adds English/French support, and makes historical comparisons much more useful. The Marauder’s Map now has a timeline. 🗺️
The observatory now covers four streams, all available on teuk.org:
| Observatory | Network | Dashboard |
|---|---|---|
| Mediabot development | TeuK | teuk.org/mbdev |
| Production | EpikNet | teuk.org/epiknet |
| Production | Undernet | teuk.org/undernet |
| Production | Libera | teuk.org/libera |
Some bots run on teuk.org; others run on remote hosts. Each publishes its own aggregate observations to the shared hub, which maintains separate histories and presents them through the same interface.
That gives us one place to explore several networks while keeping their measurements distinct. Adding Undernet or Libera preserves the streams and history already collected.
The dashboard has a subdued dark theme, restrained colours and eleven interactive plots. The aim is to make changes easy to spot without turning the page into a flashing spell duel.
The plots cover:
IRC operators here are network operators. The users/channels ratio is an aggregate indicator; overlapping channel memberships prevent it from representing actual average channel size.
Synchronized cursors, hover details, keyboard navigation, drag zoom, clickable legends and optional zero-origin axes help explore the curves. Small sparklines give the headline counters a little context before you even reach the larger plots.
The statistics table exposes all twelve supported raw counters, when the network reports them. For the selected period, it includes observed lows and highs, their timestamps, changes, means, medians, P95 values, standard deviations and sample counts.
Collection coverage and gaps are visible too. An absent counter remains unknown, while an explicitly reported zero remains zero. Long gaps break the curves instead of becoming invented activity.
The hourly population rate describes the change in the observed total. It does not count individual joins and departures.
Long-range charts use a bounded selection of actual observations to keep rendering responsive. Summary statistics still use the underlying measurements, and the new extrema markers can highlight a raw peak that was not selected for the displayed curve.
MB833 adds Earlier, Later and Live controls. Choose a range, step through the retained history and return to the moving live view when you are done. The date strip makes the selected interval explicit.
Enable Compare previous period to overlay the preceding equal-length interval. Its curves appear as subdued dashed lines, making it easier to see whether a rise, dip or plateau repeats.
The table then adds previous-period means, differences between means and percentage changes. Each period has its own sample count and coverage, so a sparse baseline is visible rather than silently treated as complete.
There are a few deliberate rules behind the comparison:
History is retained for 90 days. A recently added stream may therefore have little earlier data to compare, and a 90-day view can legitimately have no retained preceding period. No Time-Turner can recover measurements collected before the observatory existed. ⏳
Copy view link captures the selected range, a fixed endpoint and the comparison setting.
That makes it possible to point someone at a particular period instead of asking them to chase a live graph. Copying a live view leaves the original page updating normally; the recipient opens its fixed historical counterpart.
Shared links remain useful while their measurements are retained. Language stays a local preference, and drag zoom or hidden-series settings are not included in the link.
For closer inspection, an accessible observations table includes both comparison periods with their actual timestamps. CSV exports retain the existing raw field names and UTC timestamps, and export the selected period’s displayed observations.
MB832 makes English the default, with a persistent English / Français selector shared across the observatory pages.
The translation covers chart titles, legends, tooltips, statistics, notices, accessibility labels and methodology. Numbers and dates follow the chosen language while keeping the browser’s time zone.
Switching language preserves the current range, comparison, zoom, hidden series and zero-axis setting. You can change languages halfway through investigating a curve without losing your place in the spellbook. 📖
The deployment updates the shared hub and dashboard assets while retaining stream credentials, routes, history and publisher settings. The interface upgrade requires no IRC bot or publisher restart.
The work also retains the corrected Libera host-identity check and stabilizes a Partyline regression test against imported clocks, without changing the production throttle.
On teuk.org, the final validation completed with:
| Check | Result |
|---|---|
| Targeted integration assertions | 323 / 323 passed |
| Fast validation lane | 8,287 / 8,287 passed |
| Full suite | 23,638 / 23,638 passed across 1,093 test files |
| Security audit | 37 / 37 invariants passed |
The changes are committed and pushed as f4153bd, version 3.6dev-20261017_220314.
The four observatories are live. Pick a network, light your wand, and follow the curves. 🪄📈
You must be logged in to reply.