Skip to content

traffic66 2.4.0 - #25

Merged
githubflyideas merged 13 commits into
mainfrom
claude/t66-evolution-u9rr22
Oct 21, 2026
Merged

githubflyideas merged 13 commits into
mainfrom
claude/t66-evolution-u9rr22

Conversation

@githubflyideas

Copy link
Copy Markdown
Owner

The changes for 2.4.0; CHANGELOG.md has them in full.

  • Report API (GET /api/report)
  • Top 66 opens on the two ends of each conversation; narrower map lines
  • Evaluation mark on every page, a little denser
  • Live pages refresh on a beat that follows the range
  • Network charts count traffic whose AS is unknown
  • Sponsor strip across the top; only the browser fetches it
  • 95th-percentile billing draws its chart (GET /api/billing/series)
  • Licence v3: individual or organization licensee
  • Asset ledger: address assignment removed; networks belong to a device

Generated by Claude Code

claude added 13 commits October 20, 2026 23:18
GET /api/report?from&to&if answers what a printable report needs in one
request: totals for the period, its average, peak and 95th percentile, a
row per interface, the top hosts, applications and countries, and the
findings by severity. With if=exporter/ifindex the whole report is about
that one interface.

Two measurements of an interface exist and they do not agree, so each row
says which one it is rather than mixing them: the device's own counters
where they were read (what a carrier bills against, with the share of the
period that was measured), the sampled flows where there are none.
Utilisation is given only where the interface speed is known.

The peak and the percentile leave out the bucket that is still filling, so
a report reaching up to now no longer takes its peak from a half-counted
minute.
Top 66 opened on the grouped table, which answers "what kind of traffic is
this" — but the question somebody opens the page with is "who is talking",
and that is the other tab. It now opens on the two ends of each
conversation, and only the table mode is written into the address so a
shared link still lands where the sender was.

The map's three line widths were 1.5 / 4 / 8 px. The widest was so much
heavier than the rest that it drowned the five shades that carry the same
figure. They are now 1.5 / 3 / 4.5 px: the widest is about what the middle
one was, and the colour is read again.
Four pages were left out of the mark: the overview, the sources, the
account and the help page. The overview is the one somebody screenshots
into a report, and keeping a list of exceptions right as pages are added
is work nobody will do, so there are no exceptions now. The login screen
is not one of these views and stays unmarked.

The tile is 360x235 instead of 460x300, which puts about half again as
many of the words on a screen. The glyph, its size and its faint ink are
unchanged: the mark is easier to see as a mark without making anything
under it harder to read.
The rule named four pages and two ranges, so the traffic, Top 66, flow
paths, geo and interface pages stood still on a 6-hour or 24-hour range
until somebody clicked something. The records were arriving and the
numbers were right; the page was simply old, which is what "the chart
lags" looks like from the outside.

Every page that shows incoming data now redraws on its own, once what is
on screen is older than its range's beat: 20 s on 15 minutes, 30 s on an
hour, a minute on 6 and 24 hours, five minutes on 7 and 30 days — the
width of the buckets the range is drawn in, so no redraw is asked for
figures that cannot have changed. A range typed by hand ends in the past
and has no beat. The check runs every 5 s, so changing the range takes
effect at once rather than at the end of a cycle nobody can see.
The source and destination network charts asked for peer_asn <> 0, so
traffic the AS database could not place was left out of them entirely.
The AS table on the same page counts it, as "unknown", so the two
disagreed; and where few flows carry an AS number, whole buckets came
back empty and the chart was drawn as blocks with nothing between them —
the shorter the range, the worse, because a one-minute bucket needs a
placed AS in that minute while an hour-long one only needs it somewhere
in the hour.

Unplaced traffic now counts as AS 0 and is drawn as "unknown", like the
table. A bucket is empty only when nothing went through it.
It sat at the foot of the sidebar, a 728x90 banner squeezed into 208 px
and shown one at a time. It is now the full width of the browser above
the sidebar and the content, and because the banners in the manifest are
728x90 the strip puts as many of them side by side as the window has room
for (one per 420 px, up to six fetched) rather than stretching one. The
rest rotate in together, with dots only when more exist than fit.

It scrolls away with the page instead of holding a band of every screen,
it is left out of print, and the sidebar's height is measured against it
so the language picker and the sign-out button stay on screen.
The top bar said "Refreshes every 30 s" on every range, which was one
number for a page that now redraws on its range's own beat. The line
takes the number from that beat, and is left off a range that ends in the
past and never moves.
The billing page was a table and nothing else: the 95th percentile, the
peak and the average as numbers, with no way to see the five-minute
samples behind them. GET /api/billing/series?from&to&if returns those
buckets for one interface, with the bill the table shows, and the page
draws one chart per billed interface: inbound and outbound, and a dashed
line at the figure charged.

Buckets the device reported nothing for stay empty in the chart as they
are left out of the percentile — drawing them at zero would say the
circuit was idle when nothing was collected. A month is more buckets than
a chart has pixels, so above ~600 they are grouped and the highest of each
group kept; the dashed line comes from the server, which saw them all.
An installation could only say "registered": the name on the licence was
in the footer, but nothing said whether that name was a person or a
company, so a licence bought by one person looked the same as a company's.

The signed message gains a third version: v3 is v2 with the licensee after
the customer. A file naming one is checked against v3 alone, so it cannot
be written in afterwards; v2 and v1 licences still verify as what they are
and carry no licensee rather than a guess.

The sidebar badge carries the name under the word, the footer and the
licence page say individual or organization beside it, and a licence
issued before this says "kind not stated" rather than inventing one.
Asset management was a group in the sidebar with three pages under it, one
of them an address book: subnets, assigned addresses, utilisation bars,
free-address suggestions and a conflict report. It was a second place to
keep what the system that hands out addresses already knows, and keeping
it right was work nobody signed up for.

What is left is a note beside the ports: a device's page lists the
networks it carries (prefix, name, VLAN, gateway, tags) and an
administrator adds one there. Nothing is looked up in it — no chart, name
or filter comes from that table — and it says so on the page.

The group is gone with it: rooms and racks, and names, now stand on their
own in the sidebar. Addresses, their CSV columns, and the two paste
formats that only fed them (show ip arp, show mac address-table) are
removed. The addrs table is still created and left alone, so a ledger
filled in before this keeps what was typed into it.
The banner had three sources: the browser straight from GitHub, a copy
the traffic66 server downloaded every six hours into <data>/sponsor and
served at /api/sponsor, and a built-in text. The middle one made the
installation itself reach out to GitHub on a schedule, which is a thing
an operator has to explain to a firewall team for an advert.

Only the viewer's browser fetches it now. A browser that cannot reach
GitHub shows the built-in text. The download loop, the cache and both
routes are removed, and the manuals say so.
@githubflyideas
githubflyideas merged commit 3db1b5e into main Oct 21, 2026
9 checks passed
@github-actions
github-actions Bot deleted the claude/t66-evolution-u9rr22 branch October 21, 2026 03:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants