Skip to content

Syspeek 0.10.0

Choose a tag to compare

@github-actions github-actions released this 31 Oct 04:09
· 461 commits to main since this release

Billed spend — what you were actually charged

The Cloud page could already estimate what this instance costs from a rate and its uptime. It now also reads what the provider actually billed the account, and keeps the two numbers labelled differently on purpose:

  • AWS via Cost Explorer — ce get-cost-and-usage with UnblendedCost (not blended: blended averages the organization's rates, so a single-account user cannot reconcile it against the invoice), then ce get-cost-forecast for the rest of the month.
  • Azure via consumption usage list (--top 1000, filtered on properties/usageStart).
  • GCP (billing lives in a BigQuery export, there is no CLI cost API) and OCI (usage API not wired) are gated before anything spawns — the page says so instead of showing a zero.
  • Both are queried through the CLI you already logged in with. Syspeek never reads or stores your credentials.

The window is UTC — CE's TimePeriod and Azure's usageStart are UTC dates, so a machine in IST and one in UTC ask for the same month.

what you see meaning
MTD billed so far this month
month end MTD + the provider's own forecast
daily chart per-day billed amount, syspeek.cloud.spend_daily
by service each service's share of the spend

Cost Explorer and Azure consumption calls are billable to your account, so this runs every 6 h, has its own switch ([cloud] spend, default on) and its own budget (spend_timeout_ms, 30 s), and is named in the CLOUD FOOTPRINT card next to the link-local read and the inventory listing.

Prometheus gains syspeek_cloud_spend_month_usd, syspeek_cloud_spend_forecast_usd and syspeek_cloud_spend_service_usd{provider,service}, emitted only when the query actually answered.

AppImage auto-update works again

Every release since 0.5.0 shipped an AppImage advertising an UPDATE_INFORMATION channel that 404'd — appimagetool writes the .zsync into the current directory, so it landed gitignored in the repo root and never reached the release. build_appimage.sh now moves it next to the image and hard-fails the build if none was produced. An image that advertises an update channel that does not exist is worse than a failed build.

Syspeek-0.10.0-x86_64.AppImage.zsync is attached to this release and served from releases/latest/download/.

What this release's CI actually proves

  • Runs on every push, all five jobs (ubuntu-24.04, macos-14, windows-latest, .deb clean-room on ubuntu:22.04 and ubuntu:24.04): 14/14 ctest, --probe with a worstMs blocking-call gate, --record CSV/JSON, and the --dump self-tests including all fifteen cloud ones (rate lookup, cost maths, app share, top consumers, staleness, four-provider fleet parsing, fleet age/self/cost, AWS + Azure spend parsing, forecast fold, UTC window, provider gate).
  • Cloud CLI end-to-end (synthetic accounts): generated aws/az/gcloud/oci executables on PATH drive the real probeCloudFleet, CloudFleetRunner and --cloud-prices — exact argv per provider, listing→rows with resolved ages, a logged-out CLI surfacing the credential gate that names aws configure, non-JSON refused rather than half-parsed, a hanging CLI killed at its budget, a missing CLI surfacing the install gate, and the polled runner delivering with no update blocking.
  • The identity path runs against a real cloud metadata service on every push: the GitHub runners are Azure VMs, so the ubuntu and windows jobs read a genuine IMDS answer (instance id, Standard_D4ads_v5, region, 4 vCPU, uptime).

What is proven by fixtures and maths, not by a live account

  • The AWS CE and Azure consumption parsers are proven against the documented response shapes (botocore 1.43.120 ce/2017-10-25 model, azure-cli 2.91.0 consumption usage list), including the {"value":[…]} wrapper, string-or-numeric pretaxCost, the 1000-row page cap and the Estimated flag.
  • Forecast fold, service aggregation and money formatting are unit-tested; the --dump self-tests fold a fixture of 12.5 + 1.5 + 10.0 into $24.00 billed / $74.00 month end with a $50 forecast.
  • Never run on real hardware / a real account: a live Cost Explorer answer, a live Azure invoice comparison, and --cloud-prices against a credentialed CLI. There is no cloud account behind this project — that is why the CLI stub tests exist, and why the page states its gates instead of guessing.

Everything else from 0.9.0 is unchanged

GPU page, sensors + battery, process/unit/container actions, the history ring with rewind, alert silences with chart bands, the token-guarded /metrics bind, cloud identity/inventory, and the Qt 6.2/6.4 floor with the clean-room container install gate.