Commit Graph

853 Commits

Author SHA1 Message Date
MacRimi
6b02c13e23 update v1.2.4 2026-07-18 21:22:02 +02:00
MacRimi
451f541342 new version 1.2.4 2026-07-18 21:09:40 +02:00
MacRimi
db79470d32 Update AppImage 1.2.3 2026-07-16 23:43:58 +02:00
MacRimi
2770c8172b Update notification_events.py 2026-07-16 23:07:25 +02:00
MacRimi
bcb8ec0f81 update roxmenux-monitor-v2 2026-07-16 22:53:57 +02:00
MacRimi
1872a309ec update version 1.2.3 2026-07-13 23:19:24 +02:00
MacRimi
87454b5b2d Update 1.2.2.3 beta 2026-07-08 19:17:13 +02:00
MacRimi
341681a3dc Update 1.2.2.3 beta 2026-07-08 12:18:52 +02:00
MacRimi
6f0fc68c3d Update 1.2.2.3 beta 2026-07-06 17:15:22 +02:00
MacRimi
63f82d971d update 1.2.2.3 beta 2026-07-06 12:00:43 +02:00
MacRimi
9c90722ef9 update 1.2.2.3 beta 2026-07-06 00:59:50 +02:00
MacRimi
7156af1965 update 1.2.2.3 beta 2026-07-06 00:39:43 +02:00
MacRimi
8df8a77bf1 update 1.2.2.3 beta 2026-07-06 00:30:47 +02:00
MacRimi
487ab04a14 update 1.2.2.3 beta 2026-07-05 23:58:58 +02:00
MacRimi
26b47e63d9 host-backup(pbs): fix scheduled-job encryption + surface real key import error + pass --keyfile on downloads
Three bugs against the PBS encryption flow:

1. Create-scheduled-job with encryption failed with "Recovery setup
   failed: no PBS keyfile present" whenever the operator picked
   "Generate a new keyfile" but had no keyfile installed yet. The
   frontend called /pbs-recovery/setup before creating the job, but
   the keyfile was only materialised later during job creation. The
   endpoint now generates the keyfile atomically if missing before
   building the escrow blob — same prompt-first order the CLI wizard
   applies. Existing keyfiles are still trusted and never rotated.

2. Importing a valid PBS keyfile via the Web dialog returned a
   generic "did not recognise this file as a valid PBS keyfile" that
   hid the real reason (kdf mismatch, missing passphrase, corrupt
   JSON, ...). The endpoint now attaches the stderr of
   `proxmox-backup-client key info` as `tool_output` and the frontend
   renders it verbatim inside the red banner. Also strips a leading
   UTF-8 BOM before validating so an editor-inserted BOM stops being
   silently classified as "invalid keyfile".

3. Downloading an encrypted PBS snapshot failed with "missing key —
   manifest was created with key XX:XX:..." even when the correct
   keyfile was installed at /usr/local/share/proxmenux/pbs-key.conf,
   because the restore worker invoked `proxmox-backup-client restore`
   without `--keyfile`. The flag is now passed whenever a local
   keyfile exists (PBS ignores it for unencrypted archives). On a
   fingerprint mismatch the error now appends the installed key's
   fingerprint so it can be compared side-by-side with the manifest's
   expected value — same fingerprint also exposed via
   /pbs-recovery/status for the UI.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-05 23:14:52 +02:00
MacRimi
5b22039600 Update 1.2.2.3 beta 2026-07-05 17:23:00 +02:00
MacRimi
7fc7125c71 create 1.2.2.3 beta 2026-07-05 16:50:06 +02:00
MacRimi
29bca610a0 update 1.2.2.2 beta 2026-07-05 09:30:13 +02:00
MacRimi
66dd3ec014 update 1.2.2.2 beta 2026-07-04 21:37:39 +02:00
MacRimi
35cb10ff44 update 1.2.2.2 beta 2026-07-03 18:59:45 +02:00
MacRimi
c455d66b91 update 1.2.2.2 beta 2026-07-02 23:52:04 +02:00
MacRimi
bc3c771137 update 1.2.2.2 beta 2026-07-02 18:12:13 +02:00
MacRimi
f2b0b1b039 Update notification_templates.py 2026-07-01 20:54:52 +02:00
MacRimi
33a8f4baa5 update 1.2.2.2 beta 2026-06-30 17:58:32 +02:00
MacRimi
b2753be204 update 1.2.2.2 beta 2026-06-28 15:17:30 +02:00
MacRimi
51b9285980 update 1.2.2.2 beta 2026-06-28 13:06:40 +02:00
MacRimi
ecfdcf1bac update 1.2.2.2 beta 2026-06-26 11:11:39 +02:00
MacRimi
63b9d69f3f update 1.2.2.2 beta 2026-06-26 10:25:06 +02:00
MacRimi
a56afecccf update 1.2.2.2 beta 2026-06-25 17:29:55 +02:00
MacRimi
484f0ce897 update 1.2.2.2 beta 2026-06-25 17:07:58 +02:00
MacRimi
cdb4522e5f update 1.2.2.2 beta 2026-06-25 00:26:03 +02:00
MacRimi
202068124b update 1.2.2.2 beta 2026-06-24 23:40:22 +02:00
MacRimi
cd2a075fab update 1.2.2.2 beta 2026-06-24 16:02:35 +02:00
MacRimi
93553574b3 Update 1.2.2.2 beta 2026-06-23 11:19:04 +02:00
MacRimi
68c8c03642 update 1.2.2.2 pre-beta 2026-06-22 11:38:06 +02:00
MacRimi
9d099ba358 Update 1.2.2.2 beta 2026-06-22 00:55:34 +02:00
MacRimi
d807c9f085 Update flask_server.py 2026-06-22 00:14:46 +02:00
MacRimi
09a67bf4e6 update 1.2.2.2 beta 2026-06-21 22:41:54 +02:00
MacRimi
8e92df5bd7 update 1.2.2.2 beta 2026-06-21 00:35:22 +02:00
MacRimi
57e936785d update 1.2.2.2 beta 2026-06-20 21:59:19 +02:00
MacRimi
3fd7f4b2a4 Update 1.2.2.2 beta 2026-06-19 23:38:57 +02:00
MacRimi
c4447eae5e update 1.2.2.2 beta 2026-06-13 19:05:00 +02:00
MacRimi
4dc8be7387 Add beta 1.2.2.2 2026-06-10 19:05:13 +02:00
MacRimi
61ff665cec update beta 1.2.2.2 2026-06-09 00:13:24 +02:00
MacRimi
61ff98e830 Update beta 1.2.2.1 2026-06-06 18:30:11 +02:00
MacRimi
66419777d8 Update beta 1.2.2.1 2026-06-06 11:37:54 +02:00
MacRimi
3191f5250d Update 1.2.2.1 beta 2026-06-05 19:22:07 +02:00
MacRimi
3629fe8848 Add beta 1.2.2.1 2026-06-05 17:12:23 +02:00
MacRimi
5a116e77b9 Discord channel: split oversized digests across embeds (#220)
A mass-backup webhook that exceeded ~2 KB used to be silently
truncated by `desc = message[:MAX_EMBED_DESC]` with MAX_EMBED_DESC
set to 2048 — half of Discord's real description limit and far
below what a multi-VM backup digest produces. The trailing jobs
just vanished from the channel.

Bring the channel up to Discord's actual webhook contract:

* description limit raised to the real 4096-char cap
* if the body still doesn't fit, split it on line boundaries into
  one embed per chunk so every backup entry is preserved
* keep title + fields on the first embed only; attach the footer
  and timestamp to the last embed so the rendered card has the
  normal head/tail framing even when split across many embeds
* enforce Discord's 6000-char-per-embed cap (title + description +
  every field name+value) — only kicks in when many large fields
  combine with a chunk already near the description ceiling
* batch up to 10 embeds per webhook POST (Discord's per-message
  limit) and POST additional messages sequentially with a 0.4 s
  gap so a >10-embed digest doesn't trip the 5/2 s webhook rate
  limit

Verified with synthetic mass-backup payloads:
* 14 KB / 200 jobs → 4 embeds, 1 POST
* 60 KB / 60 lines → 15 embeds, 2 POSTs (10 + 5)

New AppImage SHA-256:
  16ad59ea63a64e5be460cd73f87315e8b39b756bf1c61f3cb2019e9fa3e76361

Closes #220.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 17:30:59 +02:00
MacRimi
642bd8ecae health_persistence: stop leaking obs counts across NVMe device renames
`get_disks_observation_counts` maps each serial's count to that
serial's "most recent" device_name (so renames like ata8 -> sdh keep
the badge attached). When several physical disks have passed through
the same kernel name across reboots — common with NVMe, the kernel
probes in a different order depending on which slots are populated —
disk_registry keeps a row per (device_name, serial) seen and the
"most recent" device_name for a serial can now be in use by an
entirely different disk.

Concrete case from the wild: serial 211716800490 was nvme0n1 during
the previous boot and earned a real I/O observation. After removing
four of five NVMes, the surviving disk (serial 243332800236) booted
into nvme0n1. The badge layer mirrored 211716800490's count onto
nvme0n1 — which is now a different physical disk — and showed
"1 obs." on the wrong drive, while the modal (which scopes by the
current (device_name, serial) registry row) found nothing and
rendered an empty history.

Only mirror a serial's count onto its device_name when that
device_name is currently owned by the same serial, determined from
the freshest disk_registry row. The serial-keyed entry stays
unconditional so observations remain reachable when the disk is
re-plugged under another device name.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-01 23:52:11 +02:00