Fixes a regression in 2.90.0, and makes health monitoring usable for fleets that include machines which are simply switched off sometimes.
Fixed: My Profile and the client detail page were blank in 2.90.0
Both drew their tab strip above an empty box. The sidebar rewrite in 2.90.0 left a variable behind that those two pages use to choose which section to show, so nothing matched and nothing rendered. It affected every browser and screen size, not only phones.
If you updated to 2.90.0, this is the fix.
Health only warns when a client is actually overdue (#409)
GET /api/v1/health reported a warning whenever any backup had failed in the last 24 hours. For a laptop that spends the weekend switched off, that is not a fault — but it made the endpoint unusable for monitoring, since anyone polling it from Uptime Kuma or similar got a steady stream of false alarms for machines that were simply off.
Retry attempts could not stand in for a threshold. They are capped at ten, which covers about eight hours, and raising the cap would only stack retries on top of the next day's scheduled runs.
So a client profile now says how long a machine of that kind may go without a successful backup before anyone should care: two weeks for laptops, a day for a database server, blank to follow a new server-wide default of 48 hours (Settings → Agent). Health asks that question per client and names the ones that are genuinely overdue, with how long they have been and how long they were allowed.
Failures in the last 24 hours are still reported for context, but they no longer decide the status — a failure inside a client's allowance is exactly what the allowance is for. Clients with no enabled backup plan are left out entirely: one of those is not overdue, it is unconfigured.
Thanks to @henfri for the report and for explaining precisely why the retry settings could not cover it.
New: export your repository passphrases
bin/bbs-export-repos writes every repository, its passphrase and its encryption mode to CSV or JSON. If this server is lost, the repositories on your storage are recoverable only with those passphrases — which live on the server that was lost.
It needs an API token with the Display Secrets capability, is standard-library Python so it runs from any machine, and writes its output file mode 0600. It also names any encrypted repository with no stored passphrase, since a silent gap in an escrow file is worse than no file at all.
Also
- The Settings entry in the sidebar is a full menu row with an icon, rather than a section label that happened to expand.
- The mobile menu drawer is about 20% tighter.
Notes
- The agent is unchanged in this release; clients on 2.90.0 do not need to update.
- Adds one database migration.