Skip to content

Releases

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 10 Nov 19:32
  • Heatmap colours that hold without hue. Warning, critical and down cells now step clearly in lightness in
    both themes (in the light theme warning and critical had almost the same lightness, so with red-green colour
    blindness they read as one). The cells, the table's history strips, the loss bars and their legends have their
    own colours for this; status text and icons keep theirs.
  • The page is locked to its own server: a Content-Security-Policy (it loads and talks to this server only,
    nothing may frame it, forms post here only) and Referrer-Policy: no-referrer, on the page and the sign-in.

v0.15.1

Choose a tag to compare

@github-actions github-actions released this 08 Nov 01:01
  • The image runs Python 3.15 (was 3.14); CI tests 3.10 to 3.15.
  • CI actions updated: actions/setup-python 7.1.0, docker/login-action 4.7.0.

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 20:34
  • New versions are announced. Every 6 hours the server asks GitHub for the latest release. When it is newer,
    the sidebar says so (with a dot on the menu button on phones), with what changed and how to update, for the
    server and for every site; one alert goes out per version (Discord, ntfy, webhook), remembered across restarts;
    agents log it. UPDATE_CHECK=0 turns the check off.
  • Update from the page. With UPDATE_URL (the webhook or HTTP API of an updater you run, one that pulls the
    image and recreates the container) and PASSWORD, an Update button asks the updater, waits for the new
    version to answer and reloads the page. It updates the server; each site runs its own command. smoketrace is
    never given the Docker socket.
  • Every site's version on the Sites page, marked when it is not on the server's (agents now say their
    version; older ones show none).
  • A review of the page in every style (dark and light, English and Portuguese, 390, 768 and 1440 px), measured,
    not eyeballed, on the overview, a target, Targets with its form, Sites, the update dialog and the sign-in: no
    sideways scroll and no clipped text; every HTML text reaches 4.5:1 contrast (the light theme's secondary grey
    and the amber of warning text were 3.8 to 4.4; the amber of heatmap cells and icons stays as it was, so the
    cells still darken with severity); every control that stands alone is at least 24 px (table headers, Edit, the
    sidebar's buttons); "Sign out" no longer breaks over two lines; the update commands wrap instead of hiding
    their end; focus shows on every keyboard stop of the overview. Not measured: text drawn on the charts' canvas.

v0.14.1

Choose a tag to compare

@github-actions github-actions released this 24 Oct 19:58

A review of the whole project; what it found:

  • Fixed: DEMO=1 deleted the real history. The demo starts by deleting its database, and in the image DB is
    /data/smoketrace.db, so turning the demo on in an existing compose file wiped it (and, since 0.14.0, dropped
    every table of a MariaDB DB). The demo now keeps its own demo.db next to DB, refuses a MariaDB DB, and a
    test checks it can never pick the database DB names.
  • Fixed: an agent behind a proxy could lose every round. 0.13.1 dropped any round answered 400, but a 400 may
    come from a proxy in front of the server (plain HTTP sent to an HTTPS port, a firewall) and then every round was
    thrown away. A round is dropped only when smoketrace itself refused it (its bad round answer, any version) or
    it is too large to ever pass; any other answer keeps it until the path is fixed.
  • Fixed: a pull agent's container was always "unhealthy". Its health check built the address from LISTEN
    wrongly (127.0.0.1:81000.0.0.0:8100). CI now starts a pull agent and waits for Docker to call it healthy.
  • Fixed: PINGS=1 broke every chart longer than a day (a division by PINGS - 1).
  • Errors inside a request are answered (500; 503 to an agent's push, which keeps that round and sends it again)
    instead of the connection being dropped; a trace whose row the daily prune already removed reads as empty.
  • All sites lines its sites' heatmap cells up: a site's board made a cell earlier is made again.
  • Sign-in: wrong passwords go one a second however many are sent at once, even all at the same moment (the
    rest are answered 429 at once, without a thread held for each).
  • The image's one package, PyMySQL, is pinned by hash (requirements.txt, kept current by Dependabot), and a
    failed install fails the build.
  • Docs: the compose files' pinned-version example and the ASN=0 notes; SECURITY.md lists the Sites page, the
    outside lookups and MariaDB.

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 14:32
  • MariaDB as the database, if you want it. SQLite stays the default. DB=mariadb://user:password@host:3306/name
    (or mysql://, MySQL 8 too) keeps the history in MariaDB instead; the password can go in DB_PASSWORD.
    smoketrace makes its tables at the first start. docker-compose.mariadb.yml
    runs it with a MariaDB of its own. The image now carries PyMySQL for this; without Docker, pip install PyMySQL.
  • --copy-from (COPY_FROM): one-off, copies another database's history into DB, SQLite to MariaDB or
    back; rows already there are kept.
  • Rounds stored at the same moment from several sites retry when MariaDB reports a deadlock, and the daily
    clean-up of old rows runs apart from the round that triggers it.

v0.13.1

Choose a tag to compare

@github-actions github-actions released this 22 Oct 22:45
  • Fixed: one refused round stopped an agent for good. The agent kept a round the server refused (HTTP 400)
    at the head of its queue and sent it again before any other, so every round after it piled up behind it
    ("push failed, 6 round(s) kept: HTTP Error 400"). It now drops a refused round, logs the server's reason, and
    sends the rest; a wrong token or a server error still keeps the rounds for later.
  • The server refuses less. A target the agent is no longer given (removed, or its agent unticked, between
    the agent's fetch and its push) or one target's bad figures used to refuse the whole round. Now only that
    target's part is left out and logged; the round is kept. A round that is wrong as a whole (its time, its shape)
    is still refused, now with the reason in the answer.

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 22:57
  • Sites page: every site (this server and its agents) with its public address, the network and country that
    address is announced from, its last round and how many targets it probes. Type a place, a country, a provider
    or a note where what was found is wrong; what you type wins, everywhere the site is named. Editing needs
    PASSWORD, like the targets.
  • Where a site is, measured, not guessed. 0.12 took a site's provider from the first hop of its traceroutes
    with an AS number, which is often the upstream, and its country from that AS's name, which is where the AS is
    registered. Each site now asks for its own public address once an hour (one DNS question to Google's name
    servers) and sends it with its rounds; the network, prefix and country come from Team Cymru's origin lookup of
    that address. A 0.12 agent sends no address: its push's own address is used when it is public. ASN=0 turns
    the lookups off.
  • Charts no longer wait after a quiet spell. A board nobody had looked at for 10 minutes was thrown away, so
    the next visitor waited for a new one (seconds for a week of 555 targets). It is now kept and shown at once, a
    fresh one is made behind it, and the page fetches that a few seconds later. The overview's first board is made
    when the server starts, and each board is compressed once for every viewer instead of once per request.
  • OK cells in the heatmap are a muted green (and so are the OK stretches of the table's history strips), so
    a working target reads as working at a glance.

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 21:41
  • Fixed: the heatmap's buttons stopped working. A click on empty space in the page (between the controls, on the
    heatmap's header) was read as a click on a view button, because the page itself carried a data-view marker.
    The view became "dash", was saved, and from then on no view button was pressed and the heatmap's colour buttons
    did nothing; it survived reloads. The marker is renamed, a saved view must be heatmap, table or cards, and
    test_ui.py clicks empty space to keep it so. 1200 random clicks across the overview found nothing else.
  • The overview no longer waits on a new round. Each round made the next visitor wait while the board was
    rebuilt: up to 15 s for a week of every site on 555 targets. The last board is now served at once while the new
    one is made behind it, and the boards someone looked at in the last 10 minutes are rebuilt right after each
    round (only those, so a view opened once does not cost CPU every round from then on).
  • A target's page asks for its data and the other sites' together instead of one after the other.
  • Working targets are green again: the status dot of an OK target, in the list, the heatmap rows and the cards.
  • Names as you write them: host names may have capitals and _ (My_Host.lan), and so may site names in
    NAME and AGENTS (FS_OPO). A host that starts with - is still refused.
  • Where each site is: Seen from shows each site's country, and its provider in the tooltip, taken from its
    own traceroutes (the network of its first hop with an AS number). The same line heads each site's traceroute.
    Nothing is sent to an outside service.
  • The probe timeout kill also works where there are no process groups (Windows, for development).

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 00:30
  • Agents and servers no longer run out of processes. In the image, Python was PID 1: each mtr killed for
    running too long left its helpers (mtr-packet, the child that looks up AS numbers) as zombies nobody reaped,
    until mtr could not fork, fping failed with "Resource temporarily unavailable" and every round stopped with
    "can't start new thread". tini is now PID 1 and reaps them, and a probe that times out is killed with its
    whole process group. CI checks that the containers run under tini with no zombies.
  • Every site's traceroute. When a target's page compares sites (always with All), the traceroute panel
    shows each site's traceroute of the same moment, one under the other with the site's name, and Latency by hop
    draws one chart per site.

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 23:55
  • Every site on one page. With agents, Seen from starts with All, now the default: each target shows
    the status of the site where it is worst, with that site's latency and loss, and a heatmap cell is the worst any
    site saw. The problems say which site sees each one, the timeline says where each change happened, and a target's
    page shows its worst site with every site drawn on the chart. Picking home, porto or another site shows the
    targets from there only, as before; the choice is remembered.