Repository navigation
Releases: steamvogue/wstat
Release list
v0.3.1 — Startup progress and private demo documentation
wstat v0.3.1
Startup now shows an animated loading line while configuration and sources are
loaded, and quitting leaves a fresh line for your shell prompt.
Startup and exit
- Show a single-line ASCII spinner during interactive startup, including
configuration loading and source detection. - Stop the animation and clear its line before opening the dashboard or
printing startup diagnostics, so progress never overwrites those messages. - Keep redirected diagnostics,
TERM=dumband non-dashboard commands such as
--versionfree of animation/control sequences. - Print a newline after the dashboard returns, so
qleaves the next shell
prompt on a clean line.
README preview
Replace the old ASCII diagram with an edited copy of a user-provided dashboard
screenshot. Animal-domain labels, example client addresses, a generic window
title and demo paths replace identifying data. The README labels it as edited
for privacy; the original attachment and hostname/address mapping are not
included in the repository.
The README also shows CI, Go version, latest release and MIT license badges.
Public documentation and test fixtures now use consistent animal-domain host
examples. Project agent instructions record this convention for future changes;
configuration attribution, wildcard and rotation tests retain their distinct
cases with anonymized names.
Validation
Full local Go tests, vet, lint and static builds passed. Regression tests check
changing animation frames on one line, cleanup before diagnostics, repeated
cleanup, redirected stderr and non-dashboard CLI output.
The compiled CLI passed an isolated TERM=xterm-256color PTY check using a
FIFO to delay configuration reading. Both successful startup and invalid
configuration produced changing spinner frames, then cleared progress before
the UI/error. Quitting with q left the next shell prompt on a fresh line;
exit codes were zero for normal quit and one for the config error.
See usage and
reusable terminal check. Exact-commit
CI race tests, the release workflow and downloaded artifact verification are
recorded in the GitHub release notes. The local race detector limitation is
recorded in local tooling.
Downloads
Static Linux binaries for x86_64 and aarch64, packaged as .tar.gz, plus
checksums.txt. The native binary reports wstat 0.3.1 with --version.
Published verification
- Source:
2641163; annotated tagv0.3.1. - CI including race tests and release build succeeded on that exact commit.
- Downloaded both archives and verified SHA-256, static ELF architecture,
CGO_ENABLED=0, exact source revision andvcs.modified=false. - Executed the native ARM64 binary:
wstat 0.3.1; its PTY startup/config-error/quit checks passed with five animated frames, cleared progress and a fresh shell prompt. The x86_64 binary was verified by metadata and checksum on this ARM64 host.
| Archive | SHA-256 |
|---|---|
wstat_0.3.1_linux_aarch64.tar.gz |
e0dbf0709c0ae5ae01d17a0afcc4dd938a22191cbd3723e581a8f1862e2f7789 |
wstat_0.3.1_linux_x86_64.tar.gz |
2c7224d098f7bef702410277acfbd88210873670c7b07450a2a51580381a5423 |
v0.3.0 — Freeze any pane
Freeze any focused pane with f, keep several panes stable for copying, and
resume them all with Shift+F. Other panes, ingestion and totals keep updating.
Independent pane snapshots
- Hosts, Top URLs, Clients, Live Requests, PHP-FPM and Source Health each have
their own freeze state. The stream shares its state between both views. ffreezes or resumes the focused pane immediately. This replaces the
previous binding that always toggled Hosts, regardless of focus.- Shift+F unfreezes every pane, including panes in the hidden view. It preserves
the separatezstream auto-follow pause and current filters. - Frozen panes show
[frozen] f resumeand are named in the header. Bottom help
includesf freezeandF thaw allin Dashboard and Services. - Frozen snapshots retain rows, values and order while logs keep arriving.
Scroll, search, zoom and resize within the retained data. Frozen requests
remain available even after leaving the live recent buffer. - Filter/sort changes and clearing filters keep panes frozen. Current settings
apply on resume; frozen table labels/markers describe the captured settings. - On stream resume, auto-follow selects the latest request. With auto-follow
paused, selection stays on the inspected request if still available, or
falls back to the oldest visible request if it has expired. - PHP-FPM pool counters and source diagnostics stay stable in frozen panes;
header alerts and source counts continue to reflect live data.
z pauses auto-follow while records continue updating; f on Live Requests
retains its data. Exit search entry before pressing these shortcuts, since
letters are query text while typing a search.
Project presentation
The README includes a new friendly goblin Linux admin pixel-art banner and a brief reference to
callm, a CLI for calling LLMs, and
htmlmd, a CLI/API for converting HTML to
Markdown, both from the same owner.
Validation
Full local Go tests, vet, lint and the static build passed. Regression coverage
includes every pane's bindings, simultaneous freezes, individual/global resume,
stream rollover, retained selection, search/zoom/resize, filter-map isolation,
live FPM alerts, real source discovery, empty panes and Shift+F event forms.
An isolated compiled-CLI TERM=xterm-256color PTY check froze Hosts, URLs and
stream together while twenty requests were appended to a real access log.
Scrolling kept the stream stable, resuming URLs left other panes frozen, and
uppercase F resumed them all while preserving z. The process exited zero.
See usage and keys and
implementation evidence. Exact-commit
CI race tests, release workflow results and published artifact verification
are recorded in the GitHub release notes. The local race detector remains
unavailable on this host; see local tooling.
Downloads
Static Linux binaries for x86_64 and aarch64, packaged as .tar.gz, plus
checksums.txt. The extracted binary reports wstat 0.3.0 with --version.
Published build verification
Release commit: 43b3bc7f4e9dd318881bf4b796d51ed6cb94fb0c.
- Exact-commit CI passed, including Ubuntu race tests,
lint/vet/formatting, static builds and version wiring. - Release workflow passed for the same revision.
- Both downloaded Linux archives match
checksums.txt, contain the expected
x86_64/aarch64 ELF binaries, are statically linked (CGO_ENABLED=0), and have
clean build metadata for this exact commit (vcs.modified=false). - The downloaded native ARM64 binary reports
wstat 0.3.0. The x86_64 binary
was checked by checksum, architecture and build metadata on the ARM64 host.
v0.2.2 — Brighter URLs and live request details
URL paths, client addresses and agents now use brighter grey text in every theme. Live requests show bot markers and compact browser/bot identities while keeping the URL visible.
Changes
- Use readable light-grey request text in amber, ocean and mono.
- Show a leading
bfor live requests classified as bots. - Show compact identities such as
Chrome/124.0,Googlebot/2.1andcurl/8.5.0beside live URLs when space permits; Clients retain longer platform/agent text. - Shorten or omit the agent before cutting a URL that otherwise fits. Narrow live rows omit time/client columns to retain URL, status and byte count.
- Truncate/pad by terminal-cell width so wide Unicode URLs do not push later columns outside the row.
Validation
Local full Go tests, vet, lint, formatting and workflow checks passed. Both static Linux architectures build; the native ARM64 build reports wstat 0.2.2. Regressions cover 38–248-cell live rows, short/long/wide Unicode URLs, bot/human markers, missing agents, complete-URL preservation, browser/bot identities and all three themes.
A compiled CLI check in a TERM=xterm-256color PTY displayed URLs, Chrome/Googlebot identities and the bot marker. URL text used light-grey palette index 251, with no RGB sequences in the captured frame. The process exited normally. Captured theme frames were also visually reviewed with illustrative sample data.
See release details, readability evidence, and current usage.
CI for commit f3c23080be690dfbc946ee0885281a8e075e97c0 passed, including race tests, lint, static builds and version wiring: CI run.
The release workflow succeeded for the same commit. Both published archives were downloaded and verified against checksums.txt; their ELF architectures, static linkage, embedded revision and clean build metadata were checked. The native ARM64 binary reported wstat 0.2.2; the x86_64 binary was verified by checksum and metadata on this ARM64 host.
Downloads
Static Linux archives for x86_64 and aarch64, plus checksums.txt, are attached below.
v0.2.1 — Clear freeze and pause controls
Hosts freeze and stream auto-follow pause now have separate lowercase keys and clear resume indicators.
Controls when upgrading from v0.2.0
ffreezes/resumes Hosts rows and values; resume catches up immediately.zpauses/resumes stream auto-follow; resume jumps to the latest visible request.pcontinues to filter the selected URL path. UppercaseFis no longer assigned.
The toggles are independent in Dashboard and Services. Search input treats these letters as text. Panel titles show [frozen] f resume and [paused] z resume; header chips identify the affected panel, and bottom help uses the new bindings.
Generated release output is ignored by Git, and a reusable verifier checks downloaded archive checksums, ELF architecture/static linkage and embedded source revision.
Validation
Local full Go tests, vet, lint, formatting and workflow checks passed. CI for commit 6ce14abd9759d1fd38bded5b4d6d0cb59d49ce41 passed, including race tests, lint, static builds and version wiring: CI run.
A compiled CLI terminal check with TERM=xterm-256color exercised f, z, z, f: a new host remained hidden through both stream toggles while Hosts were frozen, then appeared immediately on Hosts resume. The process exited normally. Regression tests cover both views/all focused panels, independent indicators, immediate catch-up, path filtering, search input and help visibility across terminal sizes.
See release details, keymap, and verification tool.
The release workflow succeeded for the same commit. Both published archives were downloaded and verified against checksums.txt; their ELF architectures, static linkage, embedded revision and clean build metadata were checked. The native ARM64 binary reported wstat 0.2.1; the x86_64 binary was verified by checksum and metadata on this ARM64 host.
Downloads
Static Linux archives for x86_64 and aarch64, plus checksums.txt, are attached below.
v0.2.0 — Stable panel navigation and Hosts freeze
wstat v0.2.0
This release makes dashboard navigation more stable and adds independent Hosts
freeze plus navigation in the Services panes.
New controls
F(Shift+f): freeze/resume Hosts rows and values. A[frozen]marker
appears; ingestion and other panes continue updating.f: pause stream auto-follow; press again to jump to the latest visible
request and resume.Up/gstops follow;Gor Down to the end resumes it
unlessfis active.- Services: Tab / Shift+Tab cycles pools, sources and stream.
1selects
pools,2sources, and3/4the stream. Arrows /j/k,g/G, search and
zoom now work in these panes, with separate table selections and zoom state.
Fixes
- Keep compact key hints on the bottom row and include the view switch.
- Apply filters/sorts immediately and return affected tables to the top;
monitoring at row zero keeps live leaders visible. - Follow the same request when scrolling through incoming traffic, including
identical requests; navigation and rendering use the same search matches. - Keep search scoped to the selected pane, preserve other pane positions,
remove whole UTF-8 characters on backspace and clamp empty selections. - Correct bordered panel sizing so selected rows and the latest request stay
visible across resizing and zoom. - Document and verify existing
TERM=xterm-256colorsupport.
Behaviour to know
Changing the Hosts sort, status/bot/static filters, or clearing filters resumes
Hosts updates. The recent stream snapshot contains at most 100 records matching
the global filters; if a selected request expires, selection falls back to the
oldest visible record. At minimum terminal heights, zoom provides room to read
panels that otherwise show only a title.
Validation
Local full Go tests, vet and lint, formatting and workflow validation passed.
Both static Linux architectures build with version wiring. The regression
suite covers filter scopes, all
dashboard panes, search/cancel/empty results, reorder, stream rollover,
duplicates/expiry, freeze/resume, resize/zoom, real source fixtures and Services
navigation. The compiled Linux/ARM64 CLI passed a PTY smoke check with 54,000
seeded requests and 299 live records emitted; the final sentinel was visible and
the process exited normally. Indexed 256-colour output was verified.
The final checks also exposed a timing race in the fake FastCGI server: it
answered at the PARAMS terminator before the client finished STDIN. The fixture
now waits for complete request input before responding; the corrected roundtrip
passed 100 consecutive repetitions.
See scrolling review and use cases and
keymap. The GitHub release notes include the successful
CI run (with race tests), release workflow and published artifact verification.
Downloads
Static Linux binaries for x86_64 and aarch64, packaged as .tar.gz, plus
checksums.txt. Verify your downloaded archive's checksum before extracting it;
the extracted binary reports wstat 0.2.0 with --version.
Release verification
- Exact-commit CI passed lint, vet, static/version builds and the full race suite on Ubuntu.
- Release workflow completed successfully on the same commit.
- Both published archive SHA-256 checksums, Linux architectures,
CGO_ENABLED=0and embedded commit48ae2b7b4f757d57c491faab7475de97d6b10f69were verified. - The published ARM64 binary executed successfully and printed
wstat 0.2.0; the x86_64 archive was checked for architecture and build metadata but was not executed on the ARM64 host.
v0.1.1 — CPU and monitoring correctness fixes
wstat v0.1.1
This patch release fixes performance and monitoring-correctness problems found
in the project review. PHP access requests now appear only in Services, so the
same request in web and PHP logs no longer doubles web requests or treats PHP
memory as network traffic.
Changes
- Select displayed rows with bounded top-K heaps, cache unchanged snapshots and
honor Go'sGOMEMLIMITinstead of forcing a 48 MiB limit. - Replace old URL/client detail at capacity, bound hosts and client/host
associations, expose eviction counters and preserve selected rows on refresh. - Calculate exact joint status/bot/static metrics on supported dimensions.
- Preserve partial lines and descriptors across seed/follow and rename/recreate;
follow extensionless and empty log paths with bounded replay and diagnostics. - Read slowlogs incrementally and probe FPM asynchronously with cancellation.
- Parse configured PHP duration/memory units, show separate service measurements
and correct/procRSS units and malformed-field handling. - Report invalid config, validate edited files, retain explicit zero/false values,
honor cache/FPM controls and vhost pins, and invalidate included-config changes. - Add opt-in CPU/heap profiles and reusable benchmarks/workload diagnostics;
remove unused tailing dependencies.
Measurements and limits
On the controlled Raspberry Pi 5 workload with 54,000 seed requests, 63 files and
a 500 ms dashboard refresh, idle CPU fell from 16.4% to 2.8%; at 100 requests/s it
fell from 18.1% to 4.7%. Snapshot rebuild allocation fell about 99.5%.
Peak RSS increased from roughly 53–54 MiB to 72–78 MiB. These are short fixture
measurements, not universal resource guarantees or verification of the original
200% CPU incident.
Local regression tests, static build, vet, lint and formatting pass. The local
ARM64 race detector cannot execute because of its virtual-address layout;
Ubuntu CI, including the race suite,
passes for implementation commit 19ddb688. Controlled
FastCGI fixtures pass; disposable real-PHP-FPM E2E remains optional and was skipped.
Concurrent copytruncate has an inherent unread-data loss window. Evicted table
detail is partial even though global web totals continue counting.
Complete implementation evidence and
changelog.
Assets
The existing GoReleaser workflow builds static Linux x86_64 and aarch64 archives,
with version linker wiring and checksums.txt. Verify the downloaded archive
against that checksum file before installation.
Release validation: CI for the tagged commit, GoReleaser workflow.
Published artifacts verified: both archives match checksums.txt, contain the expected ELF architecture, use CGO_ENABLED=0, and embed commit 404768ff3794e21abc569a9cf11a910cdee5d204. The aarch64 executable reports wstat 0.1.1; x86_64 build metadata was verified on the ARM host.
v0.1.0-rc1
Changelog
- 79e3288 CI: amd64-only test matrix (user preference); fix rescanEvery data race
- c10423d P1: detection engine, wstat doctor/detect; root package layout
- f00ed9c P3: full filter layer, sort cycling, freeze, themes, gz history replay
- 3af246b add cmd/wstat entrypoint; anchor binary ignore pattern to repo root
- aec6bc1 changelog: stamp 0.1.0-rc1
- a9eeab3 go public: module path github.com/steamvogue/wstat, release + CI scaffolding
- 832cbbd goreleaser: drop sbom step (needs syft on the runner; revisit with an installer step)
- 05f7bb1 logsrc: self-healing tailers; robust rotation test deadlines
- bb88757 plan: CI matrix is amd64-only per maintainer decision
- f0f10b3 plan: going public — GitHub, CI matrix, release mechanics, launch checklist (§8.1)
- e7b2874 release: trim targets to linux amd64 + arm64 (maintainer decision)
- bcde716 tune against real remote-host samples (77 domains, 242k lines)
- 5b2bc44 wstat MVP: realtime Apache/nginx access-log monitor TUI