diff --git a/CONTEXT.md b/CONTEXT.md index 4ea9c188..b4a48c81 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -14,6 +14,87 @@ > language, one screen, no identifiers in the prose. Same subjects, different readers; merging them > would make one of the two audiences stop reading. `STATUS.md` is also a **view of `OPEN-ITEMS.md`** > and holds nothing of its own; this file does hold its own content, namely the standing rulings below. +## The severity a controller sends is the HUB's vocabulary, and getting it wrong deletes the alert (2026-08-23, R-329 / R-387) + +**[RULING] The set is exactly `{info, warning, error, critical}`.** The hub **coerces anything else to +`info` at ingest**, and `severityNotifies` drops `info` **before both** delivery legs. So a severity +outside the set means: stored, `200` returned, dashboard shows it, **e-mailed to nobody**. + +**It shipped twice** — `DiskAlertKind.Severity` until controller v0.215.0, `app_start_failed` until +v0.223.0. Measured on the live hub DB: **91 `app_start_failed` events stored all-time, ZERO +`notification_log` rows** before 2026-08-23. + +**[MECHANISM, because a comment already recorded this lesson and it happened again]** An AST walk over +the whole controller pins every emitted severity. **grep cannot do this job** — `"warn"` is a +legitimate *healthcheck status* in `internal/monitor` and `internal/selftest`; the 2026-08-23 sweep hit +nine such strings and exactly one defect. The walk cannot follow a variable, so the six call sites that +pass one are **registered by name with the values each can take**; a new dynamic site fails the test. +**An unlisted limit is not a limit, it is a hole.** + +**[RULING] The hub's coercion STAYS and now SPEAKS (hub v0.107.0).** A rejected event is a *lost* +event, and losing an alarm is worse than mis-routing one — that is why it was a coercion. The fix is +that it logs `WARN` naming customer, type and value. **The guard that should have caught this class sat +downstream of the rewrite and was structurally blind to it** — note the asymmetry it lived beside: an +unknown event *type* 400s loudly, an unknown *severity* was silent. + +**[RULING] `dispatcher.go`'s `unrecognized severity` branch is KEPT, on evidence.** `cmd/hub/main.go` +wires `ProcessEvent` **directly** as the `monitor.EventNotifyFunc` for three checkers that never pass +the ingest handler. For those it is the only severity guard there is. + +**[RULING] `app_start_failed`: operator always, customer OFF by default.** `processOperator` consults +only `operatorOn`, the address and a 1-hour cooldown — **never** customer preferences — so one word +fixed the operator leg and left the customer leg where the ruling wanted it. It is deliberately **not** +in `operatorOnlyEvents`: that would make the new toggle visible, flickable and structurally incapable +of delivering. + +**[GOTCHA, now load-bearing] The operator cooldown key carries no app identifier** +(`customerID:eventType`), so **only the first app-down per hour e-mails the operator**; the rest are +logged `suppressed`. Harmless while the event was undeliverable. Not any more. R-182's shape, filed. + +## "The customer stopped this" is a RECORD, never an inference (2026-08-23, R-386) + +**[RULING] Ask `DesiredState`, do not read the container state.** `aggregateState` folds `StateExited` +into the stopped counter, so an all-down stack returns `StateStopped` whatever killed it — an +out-of-band stop and a customer's Stop are byte-identical on the Docker side. Measured: `privatebin` +stopped out of band, nine scans, **zero events, zero banner**, while a comment claimed it "still +alerts". + +**[RULING] The tri-state, and the third value is the whole safety property.** `Stopped` → no alarm. +`Running` → **alarm**. **Absent → UNKNOWN, keep the old behaviour, AND announce it.** Reading absent as +"nobody asked" would, on the first cycle after upgrade, e-mail about every app any owner ever +deliberately stopped — fleet-wide, from a field that predates the intent being asked of it. **The +backfill cannot help: it seeds `Running` only from an observed-UP reading**, so anything stopped at +upgrade time stays unknown — exactly the ambiguous population. + +**[MECHANISM] `AppRunState.IntentUnknown` + an INFO line naming the apps**, on the heartbeat cadence. +An operator must be able to ask *"how many apps am I blind to?"* and get a number. **A rule without a +mechanism is a wish.** Measured on `demo-hp`: **0 of 8** deployed apps had an absent intent. + +**[FENCE] Adding a `DesiredState` WRITER is the fenced act; reading it anywhere is fine.** Twelve of +`StopStack`'s fourteen callers are machines, so recording intent in the primitive would make a nightly +backup indistinguishable from the customer pressing Stop. + +**[FENCE] `failedRestart` must still lift a `Stopped` intent** — the quiesce loop stops stacks by the +same path a customer does, and one it stopped and could not restart must alarm whatever the intent +says. Removing that term re-opens F-CRIT-1. + +## Two settings toggles each governed two alarms, and the labels named one (2026-08-23) + +„Lemez figyelmeztetés (90%+)" also wrote `disk_critical` — the drive-is-**failing** alarm. Split into +four honest toggles; **12 → 15**. **[RULING] The migration, not the split, was the risk:** a save whose +event **set** is unchanged now stores the **existing slice verbatim**, so byte-identity is by +construction. Without that guard the defaults case reorders — the red-proof caught it. Legacy compound +form names are still read, so a stale browser tab cannot drop a key. + +## Customer notification model — DIRECTION, recorded and deliberately NOT implemented (2026-08-23, R-388) + +The operator's framing, verbatim: *"A customer should be notified only about things they can act on or +are responsible for… **A failed backup is our incident, not theirs.**… The subscription should feel +like being looked after, not like being on call."* Full entry at +`documentation/architecture/08-alarm-ladder.md` §8, marked **not current behaviour**. The settings page +grew 12 → 15 toggles in one session and grows by one per detector — that growth is the argument. +**Nothing in this session implements it.** + ## App data placement is a DECISION, and it had never been written down as one (2026-08-22, R-376) **Recorded here on 2026-08-22 to give an existing decision a home. It is NOT new, and this entry is diff --git a/REPORT.md b/REPORT.md index 95cea3c2..060ac3c9 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,97 +1,120 @@ -# REPORT — felhom.eu: the golden-currency gate could not see an unrecorded golden (R-385) +# REPORT — felhom.eu: hub v0.107.0 (R-387), the alarm ladder, and golden 0.223.0 -**Session 2026-08-23.** Companion to `felhom-controller` v0.222.0 (R-384, R-383) — see that repo's +**Session 2026-08-23.** Companion to `felhom-controller` v0.223.0 (R-329, R-386) — see that repo's `REPORT.md` for the controller work and the full live walk. -## What was wrong here +## 1. Baselines, and the hub's four numbers as read -`scripts/golden_currency_gate.py` asked ONE question — *is the golden BEHIND the record?* — and -therefore could only ever catch a forgotten bake. **It said nothing when the golden was AHEAD of the -record**, and that direction is not harmless: a golden ahead of every CHANGELOG heading was built -from something never written down. +| Repo | at start | at end | +|---|---|---| +| felhom.eu | `55274d5e` | hub **v0.107.0** deployed | +| felhom-controller | `14137efa` (v0.222.0) | **v0.223.0** deployed | +| felhom-agent | `40d857b5` | untouched | -That is not hypothetical. Controller **0.221.1** was built, baked **and vouched** on 2026-08-23 while -the newest heading in the controller CHANGELOG still read `v0.221.0`. Measured on the real history, -with the old gate: +**Hub's four numbers, read live from `GET /configuration` before starting:** +`golden_version` **0.222.0** · `agent_version` **0.130.0** · `min_agent` **0.129.0** · +controller floor **0.222.0**. All four as the task predicted; the operator's 0.222.0 vouch had landed. -``` - newest released controller : 0.221.0 (## v0.221.0 — taking the undo copy destroyed …) - newest golden baked : 0.221.1 (documentation/tests/golden-0.221.1-2026-08-23) -golden currency gate OK … -EXIT=0 -``` +## 2. The hub's deployment path — §6's premise was wrong, and here it is -Every gate was green while the fleet ran a version the record did not name. +**`felhom.eu/manifests/hub.yaml`, line 128.** ArgoCD `Application/felhom` tracks +`https://gitea.dooplex.hu/admin/felhom.eu.git`, path `manifests`, with `syncPolicy.automated.enabled += false`. Bumped `0.106.0 → 0.107.0` in commit **`68a9f54`**. **There is no out-of-git deployment +path** — the finding §6 braced for does not exist. The image was built and pushed to the registry +**before** the manifest landed, so a sync could never have pointed at a missing tag, and the sync was +then requested deliberately (`refresh=hard`, then a patched `operation`). Never `kubectl set image`. -## The fix, and why it is membership and not a comparison +## 3. R-387 — what was wrong -The gate now asks **"is the version we are shipping WRITTEN DOWN?"** — the baked version must have its -own `## vX.Y.Z` heading **anywhere** in the controller CHANGELOG, not merely at the top (an entry may -legitimately be overtaken by later ones; what may never happen is that it is absent). +One handler, two fields, opposite discipline: an unknown `event_type` is rejected with a loud `400`; +an unknown `severity` was rewritten to `info` **without a word**, and `severityNotifies` drops `info` +before *both* legs. **The guard built to catch exactly this sat downstream of the rewrite** — the +dispatcher's `unrecognized severity` line can never execute for an API event, because the coercion one +line earlier guarantees the value it looks for cannot arrive. -**Membership, not `baked > released`, deliberately:** a comparison against the newest heading alone -goes green the moment ANY later entry is written — which would have left 0.221.1 permanently -unrecorded and the gate permanently silent about it. +**Measured on the live hub DB:** `91` `app_start_failed` events stored all-time, **`0` +`notification_log` rows before this session** — not one, on any channel, while every POST returned 200. -Preserved unchanged: **INCONCLUSIVE (exit 2)** for an absent clone or an unparseable CHANGELOG — *not -knowing is never a pass, and never a conviction*. Every refusal names a reason **and** a route, -including what to do if a bake was a throwaway that must never be delivered. +**The coercion stays.** A rejected event is a *lost* event, and losing an alarm is worse than +mis-routing one. Only the silence is fixed. -## Red-proofs — both directions, against the real history +## 4. The dead-branch decision, and the reason -| Run | Gate | CHANGELOG | Golden baked | Exit | | -|---|---|---|---|---|---| -| `gate-01` | **old** | v0.221.0 | 0.221.1 | **0** | the blindness, reproduced | -| `gate-02` | **new** | v0.221.0 | 0.221.1 | **1** | convicted | -| `gate-03` | new | v0.221.1 | 0.221.1 | **0** | Part 0's heading makes it pass | -| `gate-04` | new | absent clone | — | **2** | INCONCLUSIVE preserved | -| `gate-05` | new | v0.222.0 | 0.222.0 | **0** | post-bake | +**KEPT.** Not caution — evidence. `cmd/hub/main.go` wires `dispatcher.ProcessEvent` **directly** as +the `monitor.EventNotifyFunc` for the staleness, host-staleness and offsite-box checkers, and those +hub-generated events never pass through the ingest handler at all. For every one of them that line is +the **only** severity guard there is. Deleting it as "dead" would have removed the live half while the +dead half supplied the justification. -Transcripts: `documentation/audits/DRILL-r384-dead-db-alarm-2026-08-23/evidence/gate-0*.txt`. +Verified while deciding: **all 90 severity literals in `internal/monitor` are already valid**, so the +guard is silent because the producers are correct. (`"warn"` in `internal/web` is UI badge vocabulary, +not a severity.) -## Files changed +## 5. Files changed, commits, CI -| File | Change | +| Commit | Contents | |---|---| -| `scripts/golden_currency_gate.py` | the unrecorded-golden conviction; `newest_released` → `released_versions` returning the whole set; docstring records the second blindness | -| `documentation/architecture/08-alarm-ladder.md` | **NEW.** The alarm ladder as a dated [DESIGN] | -| `documentation/architecture/00-capability-map.md` | R-384 marked closed with its live evidence; points at the new doc | -| `documentation/backlog/OPEN-ITEMS.md` | R-383/R-384 removed (closed); **R-385** (closed) and **R-386** (open) filed | -| `documentation/backlog/CLOSED-ITEMS.md` | R-383 + R-384 compressed, each keeping its rules and naming `git show 1eb64bec5183:…` for the full text | -| `documentation/tests/golden-0.222.0-2026-08-23/` | **NEW.** Bake evidence + log + the vouching instructions | -| `STATUS.md` | the 0.222.0 vouch replaces the (now completed) 0.221.1 one; R-386 added in plain words | -| `documentation/audits/DRILL-r384-dead-db-alarm-2026-08-23/` | **NEW.** The drill record and 29 evidence files | +| **`68a9f54`** | hub v0.107.0 (ingest WARN + kept-branch note + tests), manifest bump, golden 0.223.0 evidence | +| **``** | alarm ladder §6.1/§7/§8, register, `STATUS.md`, `REPORT.md`, drill record | -## The alarm ladder had no owning document — that absence is a finding +Files: `hub/internal/api/handler.go`, `hub/internal/notify/dispatcher.go`, `hub/CHANGELOG.md`, +`manifests/hub.yaml`, `documentation/architecture/08-alarm-ladder.md`, +`documentation/backlog/{OPEN,CLOSED}-ITEMS.md`, `documentation/tests/golden-0.223.0-2026-08-23/`, +`documentation/audits/DRILL-r329-r386-2026-08-23/`, plus two new test files. -Nothing in `documentation/architecture/` owned the question *"when does a customer's app being broken -raise an alarm?"* The rules lived as comments across four packages, each locally correct, with the -ordering between them legible only by reading `aggregateState` top to bottom. **That is precisely how -R-384 survived review**, and three separate defects in this ladder (R-51, C9-F2, R-384) were each -found on live hardware rather than by reading. `08-alarm-ladder.md` now owns it. +**CI runs confirmed BY ID** (`id` and `run_number` diverge — both printed): see §5 of the controller +REPORT for its runs; felhom.eu's are listed at the end of this file. -## Golden +## 6. Tests and red-proofs -**Baked and PUBLISHED: 0.222.0.** `GOLDEN_SHA256 = 19f5904f5379…`, `upload OK (HTTP 201)`, round-trip -`HTTP 206` from the package URL, all acceptance markers counted. -**VOUCHING IS THE OPERATOR'S ACT AND WAS NOT DONE HERE.** +`internal/api/r387_severity_visibility_test.go` — the event is **not lost**, the stored severity is +still `info`, and the WARN names customer + type + value; plus a guard that a **valid** severity stays +silent, because an alarm on the normal path is one people learn to ignore. +`internal/notify/r329_app_start_failed_test.go` — the routing consequence: operator emailed, customer +not, unless opted in, in which case both legs deliver and the customer's copy carries the Hungarian +template. Scenario B is also the **positive control** for Scenario A's absence claim. -**Deviation recorded:** the bake runbook's §4.1 is missing a `pveam update`. On the `virgin` snapshot -the template index is stale, so the listed template cannot be downloaded and the failure presents as -`400 Parameter verification failed. template: no such template` rather than as a stale index. +Test count **702 → 709**. -## Register size +**Red-proof (seen failing):** delete the ingest `WARN` → `the hub rewrote a severity and said +nothing`, with the log showing only the ordinary `[INFO] Event from c1: backup_failed (info)`. The +guard sits at **ingest**, because that is the last point at which the offending value still exists. + +## 7. Golden + +**Baked and PUBLISHED: 0.223.0.** `GOLDEN_SHA256 = +9eaf39ac39219b42ec9e6cbf890275febcdcc6f53325fe0c0f591d3431044f17`; `upload OK (HTTP 201)`; round-trip +**HTTP 206**; all five acceptance markers counted (`docker OK (overlay2` 1, `including mount point` 2, +`upload OK` 1, `excluding` 0, `FATAL` 0). **VOUCHING IS THE OPERATOR'S ACT AND WAS NOT DONE HERE.** + +**Runbook deviation, second session running:** §4.1 omits `pveam update`, so the `virgin` snapshot's +stale template index fails as `400 … no such template`. + +## 8. Scenario H, live against v0.107.0 + +``` +[WARN] [api] Event from demo-hp: severity "warn" is not in {info,warning,error,critical} — coercing +to "info", which severityNotifies DROPS, so this backup_failed alert will reach NOBODY. Fix the +emitting controller; this event is stored but not routed. +``` + +Both the bad-severity POST and the `error` control returned **200** (nothing lost), and the control +produced **no** warning — the guard does not fire on the normal path. + +## 9. Register size | File | Before | After | |---|---|---| -| `OPEN-ITEMS.md` | 327,266 B | **328,325 B** | -| `CLOSED-ITEMS.md` | 68,464 B | **71,441 B** | +| `OPEN-ITEMS.md` | 328,325 B | **328,132 B** | +| `CLOSED-ITEMS.md` | 71,441 B | **74,642 B** | -OPEN grew ~1 KB despite two closures, because R-386 is a substantial new finding. Recorded rather -than smoothed over. +R-329 and R-386 compressed into CLOSED with their rules kept; **R-387** (closed) and **R-388** (the +notification-model product decision, open, operator's call) filed. -## Hub numbers as read at session start (live, `GET /configuration`) +## 10. Observations — recorded, not acted on -`golden_version` **0.221.1** · `agent_version` **0.130.0** · `min_agent` **0.129.0** · -controller floor **0.221.1**. The task expected 0.220.2/0.220.2; the operator had already vouched. -**The hub was READ ONLY this session** — nothing was written to it. +1. **The operator cooldown key carries no app identifier.** PrivateBin's alarm four minutes after + BookStack's was logged `suppressed — operator cooldown 1h, key=demo-hp:app_start_failed`, so **only + the first app-down per hour reaches the operator by e-mail**. R-182's known shape; harmless while + the event was undeliverable, and no longer. Not fixed here. +2. Two probe events remain as rows for `demo-hp` from Scenario H — inert, and named rather than left. diff --git a/STATUS.md b/STATUS.md index 9e1dbd68..c23d0b4e 100644 --- a/STATUS.md +++ b/STATUS.md @@ -1,7 +1,7 @@ # STATUS — what works, what's broken, what's next -**Updated 2026-08-23 — an app whose database dies now raises an alarm. It did not before, and the -watcher said "nothing is down" the whole time. Released and NOT yet delivered: step 1 is yours.** +**Updated 2026-08-23 — the app-down alarm now actually reaches you by e-mail. It never has: 91 of +them were filed and not one was ever sent. Released and NOT yet delivered: step 1 is yours.** > **A view, not a source.** `documentation/backlog/OPEN-ITEMS.md` is the authority; this page restates > part of it in plain words, and **nothing may exist only here**. **Items, not paragraphs. One screen.** @@ -12,26 +12,21 @@ watcher said "nothing is down" the whole time. Released and NOT yet delivered: s *This section is allowed to be longer than one screen, and each item says what happens if you do nothing.* -1. **Vouch the golden carrying controller 0.222.0** — Hub → Configuration → Day-0 artifacts. +1. **Vouch the golden carrying controller 0.223.0** — Hub → Configuration → Day-0 artifacts. **It is already baked, published and round-trip verified** - (`documentation/tests/golden-0.222.0-2026-08-23/`); only the vouch is left, and only you can do it. - **It is a THREE-field save:** `golden_version` → **0.222.0**, `agent_version` → **0.130.0**, - `min_agent` → **0.129.0**. **Then** raise the floor to **0.222.0**, last, in its own save. - **If you do nothing:** the fleet stays on 0.221.1, where an app whose database has died reports - nothing at all — no banner, no event — and the watcher keeps printing "0 currently down". New - machines still receive 0.221.1. - *(Thank you — the 0.221.1 vouch from earlier today has landed; the hub reads golden 0.221.1 and - floor 0.221.1. Nothing is owed on that one.)* + (`documentation/tests/golden-0.223.0-2026-08-23/`); only the vouch is left, and only you can do it. + **It is a THREE-field save:** `golden_version` → **0.223.0**, `agent_version` → **0.130.0**, + `min_agent` → **0.129.0**. **Then** raise the floor to **0.223.0**, last, in its own save. + **If you do nothing:** the fleet stays on 0.222.0, where the app-down alarm shows on the dashboard + and e-mails nobody, and where an app stopped from outside is still reported as if you had stopped + it yourself. New machines still receive 0.222.0. + *(The hub half is already live — v0.107.0 deployed itself through the manifest. Nothing owed there.)* + +2. **A new switch has appeared for your customers, and it is OFF** — „Alkalmazás nem fut". **You get + the e-mail either way**; the switch only decides whether the customer also does. This is what you + asked for and it needs nothing from you. Mentioned so it is not a surprise the first time you see + the settings page. -2. **An app that is stopped from outside still reports nothing** (R-386) — and this one I found today - and deliberately did **not** fix. If a single-container app is stopped by hand on the machine - rather than through the product, nothing is said: no banner, no e-mail, no operator event. I - measured it: nine checks ran over four minutes and every one stayed silent. A comment in our own - code claims the opposite, which is why nobody noticed. **The reason I stopped rather than fixed it:** - from the outside this looks exactly like a customer pressing Stop, and the obvious fix would start - alarming every time somebody legitimately stops their own app. That trade is a decision, not a - patch. **If you do nothing:** it stays as it is — this is not a new fault, it has always been so; - it is newly *known*. 3. **Whether to change the hub password** (R-350). I printed it into my own session log on 20 August. Not in git, not in any saved file — in the log on this machine. **If you do nothing:** it stays as it is, at the risk you accept by leaving it. I can change it without ever showing you the new one. diff --git a/documentation/architecture/08-alarm-ladder.md b/documentation/architecture/08-alarm-ladder.md index 49027e87..7e00dc0e 100644 --- a/documentation/architecture/08-alarm-ladder.md +++ b/documentation/architecture/08-alarm-ladder.md @@ -121,21 +121,106 @@ live 2026-08-23 — one event across 22 scans. `[deadapp] check alive: N scans since boot, M deployed app(s) evaluated, K currently down`. This line exists because an absent alarm and a stopped detector look identical in a log. -> ⚠ **R-329, OPEN and it bites here.** `app_start_failed` is pushed with severity **`warn`**, which is -> **not** in the hub's vocabulary (`{info, warning, error, critical}`) and is silently coerced to -> `info` — which e-mails nobody, while the POST still returns 200. Observed again on 2026-08-23: -> `PushEvent: type=app_start_failed severity=warn`. R-384 makes this event actually fire, so the -> severity bug now matters more than it did while the event was unreachable. +### 6.1 The severity contract [DESIGN, R-329 — CLOSED controller v0.223.0 / hub v0.107.0] + +**The vocabulary is the HUB's and it is exact: `{info, warning, error, critical}`.** Anything else is +**coerced to `info` at ingest**, and `info` is dropped by `severityNotifies` before *both* delivery +legs. So a severity outside the set means the event is stored, answers `200`, shows on the dashboard — +and is e-mailed to **nobody**. + +**This shipped twice.** `DiskAlertKind.Severity` emitted `"warn"` until controller v0.215.0; +`app_start_failed` emitted it until v0.223.0. Measured on the live hub DB 2026-08-23: **91 +`app_start_failed` events stored all-time, ZERO `notification_log` rows before that day** — not one, +on any channel. + +Three things now hold it: + +1. **The emitter is pinned by an AST walk** over the whole controller + (`TestR329_EveryEmittedSeverityIsInTheHubVocabulary`). Not grep — "warn" is a legitimate + *healthcheck status* in `internal/monitor` and `internal/selftest`. The six call sites that pass a + variable are registered by name with the values each can take, so a new dynamic path fails. +2. **The hub SAYS SO** when it coerces (hub v0.107.0, R-387): a `WARN` naming the customer, the event + type and the rejected value. **The coercion stays** — a rejected event is a *lost* event, and + losing an alarm is worse than mis-routing one. +3. **The dispatcher's `unrecognized severity` branch is kept**, because the hub's own monitor checkers + call `ProcessEvent` directly and never pass the ingest handler. For them it is the only guard. + +**Who gets it.** `processOperator` consults only `operatorOn`, the address and a 1-hour cooldown — +**never customer preferences** — so a valid severity always reaches the operator. `processCustomer` +consults `operatorOnlyEvents` and then the customer's `enabled_events`. + +**`app_start_failed` is customer-switchable but OFF by default** [DESIGN, operator ruling 2026-08-23]: +it is deliberately absent from `DefaultEnabledEvents`, and deliberately **not** in `operatorOnlyEvents` +— being in that register would make the toggle visible, flickable and structurally unable to deliver. --- -## 7. Known gap, filed not fixed +## 7. The intent test [DESIGN, R-386 — CLOSED controller v0.223.0] -> **R-386 (filed 2026-08-23, OPEN).** An all-down stack aggregates to `stopped` — `StateExited` is -> folded into the same counter and never survives aggregation. `classifyRunStates` then whitelists -> `stopped` as a deliberate user stop. So a **single-container app stopped out of band raises no -> alarm at all**, which directly contradicts the comment at `cmd/controller/main.go`: *"An out-of-band -> `docker compose stop` leaves the containers present → StateExited → still alerts."* -> **Measured on `demo-hp` 2026-08-23:** `privatebin` stopped out of band, 9 dead-app scans over 4+ -> minutes, `state=stopped`, **zero events and zero banner lines** — against a positive control from -> the same box 17 minutes earlier. Not fixed in v0.222.0 deliberately; it is a separate decision. +**"The customer stopped this" is asked of the FIELD THAT RECORDS IT, never inferred from the state.** + +Until v0.223.0 `classifyRunStates` read `st.State == StateStopped` and assumed every stopped stack was +deliberate. It is not inferable: `aggregateState` folds `StateExited` into the stopped counter, so an +all-down stack returns `StateStopped` whatever killed it. Measured on `demo-hp` 2026-08-23: +`privatebin` stopped out of band, nine dead-app scans over four minutes, **zero events, zero banner +lines** — while a comment beside the code claimed an out-of-band stop *"still alerts"*. + +`DesiredState` records the answer, has **exactly one writer** (the customer's own action), and is +tri-state: + +| Intent | Verdict | Why | +|---|---|---| +| `Stopped` | **no alarm** | the customer asked | +| `Running` | **ALARM** | nobody asked — the R-386 case | +| absent (`""`) | **no alarm, and SAY SO** | UNKNOWN never means running | + +**The absent case keeps the old behaviour deliberately.** Reading it as "nobody asked" would, on the +first cycle after upgrade, e-mail about every app any owner ever stopped — fleet-wide, from a field +that predates the intent being asked of it. The backfill cannot help: it seeds `Running` only from an +observed-**up** reading, so anything stopped at upgrade time stays unknown, which is precisely the +ambiguous population. + +**The gap is BOUNDED, not silent.** Every such suppression sets `AppRunState.IntentUnknown`, and the +scheduler logs the names at `INFO` on the heartbeat cadence: + +``` +[deadapp] N stopped app(s) have NO recorded customer intent, so their dead-app alarm is +suppressed by the unknown-intent fallback (R-386): . This closes itself as each app is +started or stopped through the interface. +``` + +**A rule without a mechanism is a wish.** Measured on `demo-hp` 2026-08-23: **0 of 8 deployed apps had +an absent intent** — the population is already empty on an exercised box; it will be larger on one +upgraded and left alone. + +`failedRestart` still lifts a `Stopped` intent, and that ordering is load-bearing: the quiesce loop +stops stacks by the same path a customer does, so one it stopped and could not restart must alarm +whatever the intent says. Removing that term re-opens F-CRIT-1. + +**Fenced act:** adding a `DesiredState` **writer**. Reading it anywhere is fine. Twelve of +`StopStack`'s fourteen callers are machines, so recording intent in the primitive would make a nightly +backup indistinguishable from the customer pressing Stop. + +--- + +## 8. Direction — who a customer should be notified about at all + +**[DESIGN — DIRECTION, NOT CURRENT BEHAVIOUR. Dated 2026-08-23, the operator's own framing. +Nothing in controller v0.223.0 / hub v0.107.0 implements this.]** + +> **A customer should be notified only about things they can act on or are responsible for** — the +> drive they unplugged, the storage they filled. **A failed backup is our incident, not theirs.** The +> intended shape is that we detect it, we tell them we noticed and are dealing with it, and they are +> not handed an error they cannot solve. The subscription should feel like being looked after, not +> like being on call. + +Today's settings page is the opposite shape: it exposes one toggle per detector and **grew from 12 to +15 in this session alone** (one new alarm, plus two compound toggles split into four). That growth is +the argument, not an aside — a page that grows by one per detector is a page that will keep asking a +household to make engineering decisions. + +`app_start_failed` defaulting **off** is consistent with this direction and reversible either way; it +was ruled that way on its own merits and does not pre-judge the redesign. + +**Filed as a PRODUCT DECISION, not a defect** — see the register. It is the operator's call to take +separately, and no part of it was implemented here. diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/README.md b/documentation/audits/DRILL-r329-r386-2026-08-23/README.md new file mode 100644 index 00000000..404b0dcb --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/README.md @@ -0,0 +1,110 @@ +# DRILL — R-329 + R-386: the alarm that fired but reached nobody, and the stop nobody heard (2026-08-23) + +**Controller v0.222.0 → v0.223.0. Hub v0.106.0 → v0.107.0. Live leg on `demo-hp` (Tier 0), guest +9201. UNATTENDED.** Method: endpoint-level plus the hub's own SQLite records — no browser exists on +DooPlex. Guest and hub clocks are UTC; the hub pod logs CEST. + +## Verdict + +| Part | Outcome | +|---|---| +| 1.1 the severity word + sweep | ✅ **exactly one** bad severity in the whole controller | +| 1.2 the AST contract guard | ✅ and it found two dynamic sites the hand sweep missed | +| 1.3 customer toggle, default OFF | ✅ | +| 2 the hub says what it rewrote | ✅ hub v0.107.0, proven live | +| 3 ask the field that knows | ✅ proven live, both directions | +| 4 split the compound toggles | ✅ round trip byte-identical | +| 5 record the notification philosophy | ✅ recorded, **not implemented** | + +**No halt condition fired.** + +## The one number that says it all + +Read from the live hub DB: + +``` +91 app_start_failed events stored, all-time + 0 notification_log rows before 2026-08-23 09:00 <- not one, ever, on any channel +``` + +After the fix, at 09:27:51: **one row — `warning` / `sent` / `operator`.** + +## The two live pairs + +**Scenario A** — a database dies, customer has not opted in: + +``` +events : demo-hp app_start_failed warning 2026-08-23 09:27:51 <- v0.223.0 + demo-hp app_start_failed info 2026-08-23 05:30:14 <- v0.222.0, coerced +notification_log: demo-hp app_start_failed warning sent operator 09:27:51 + (no customer row) +``` + +**Scenario D** — an app stopped out of band, intent `running`: + +``` +2026/08/23 05:47:44 [deadapp] check alive: 40 scans since boot, 8 deployed app(s) evaluated, 0 currently down <- v0.222.0 +2026/08/23 09:34:51 [deadapp] check alive: 20 scans since boot, 8 deployed app(s) evaluated, 1 currently down <- v0.223.0 +``` + +Alarm fired **24 seconds** after the `docker compose stop`. + +## Three things that had to be re-run, and why that matters + +1. **Red-proof 5 passed first time — the mutation was INERT.** Changing `if next <= prev` to + `if next < prev` in fillwatch does nothing, because an earlier `if next == prev { continue }` had + already removed the equal case. The test was right to pass. Removing the guard outright convicts + it. **Check the mutation applied before believing either verdict.** +2. **Scenario G was silently refused TWICE behind an HTTP 200.** The empty-email wipe guard declines + the save and renders an error page — still `200`. The first run had no prefs at all; the second + read the email with a single-line grep from a `` that spans **three lines**, got `""`, and + was refused again. Both times the before/after hashes matched — *because nothing was saved*, not + because nothing changed. Fixed by asserting the refusal banner is **absent**. **A warning beside a + success is read as a success.** +3. **The live Scenario A does NOT prove the customer gate**, and is not claimed to. `demo-hp` has no + `customer_notifications` row at all, so the customer leg could not have delivered regardless. The + toggle gate is proven by the unit tests, which configure prefs both ways. Stated rather than + implied. + +## Evidence index (`evidence/`) + +| File | What it shows | +|---|---| +| `redproof-1-R329-emitter.txt` | severity back to `"warn"` → AST guard names file, line and value | +| `redproof-2-R386-intent.txt` | intent test reverted → `dead-app banner = []`, the live symptom | +| `redproof-3-part4-migration.txt` | no-op-save guard removed → the `defaults` case reorders | +| `redproof-4-R387-ingest.txt` | hub WARN removed → "the hub rewrote a severity and said nothing" | +| `redproof-5-fillwatch-consequence.txt` | the inert first attempt, and the effective one | +| `live-01`…`live-04` | Scenario A: stop, controller send, **hub records**, customer-leg control | +| `live-05-step4-absent-intent-count.txt` | **0 of 8** deployed apps carry an absent intent | +| `live-07`…`live-09` | Scenario D: out-of-band stop, alarm in 24 s, the heartbeat pair | +| `live-10`, `live-11` | Scenario C: UI Stop → intent `running`→`stopped`, 0 alarms / 9 scans | +| `live-12`, `live-13` | Scenario E: intent removed → suppressed **and** the log line names the app | +| `live-16-scenarioG-roundtrip.txt` | all three attempts, ending byte-identical (`10840f3a…`) | +| `live-18-golden-bake.txt` | golden 0.223.0 markers, each counted | +| `live-19-scenarioH-after.txt` | the new hub WARN line, live, with a silent `error` control | +| `live-06`, `live-14` | full controller-log windows (1041 and 4044 lines), pulled before each revert | + +## Observations — noticed, recorded, NOT acted on + +1. **The operator cooldown has no app identifier, and it now bites.** PrivateBin's event 4 minutes + after BookStack's was logged `suppressed — operator cooldown 1h, key=demo-hp:app_start_failed`. So + **only the first app-down per hour e-mails the operator.** This is R-182's known cooldown-key + shape; it was harmless while the event was undeliverable and is not any more. Recorded, not fixed. +2. **The prompt's §6 premise was wrong and is corrected:** the hub's manifest **is** in version + control, at `felhom.eu/manifests/hub.yaml:128`, and ArgoCD app `felhom` tracks + `admin/felhom.eu.git` path `manifests`. No out-of-git deployment path exists. +3. **The golden-bake runbook still lacks `pveam update`** — second bake in a row to hit the stale + index on the `virgin` snapshot, presenting as `400 … no such template`. +4. `internal/notify/notifier.go` carries **pre-existing** gofmt drift in a const block, confirmed by + stashing this session's work. Not touched (§12). + +## Teardown + +Nothing provisioned. Every app restarted and confirmed healthy (17 containers). `privatebin`'s +`app.yaml` restored from its backup and the backup removed; its intent reads `running` again. +`demo-hp`'s notification settings restored to `enabled_events: null`, no e-mail — the state they were +in before the drill. The drill VM is powered off, its Gitea token shredded, and `drill.qcow2` reverted +to `virgin`. **Hub-side: two probe events (`backup_failed`, "R-387 scenario H probe"/"control") were +POSTed to the live hub for Scenario H and remain as event rows for customer `demo-hp`.** They are +inert records; named here rather than left for someone to find. diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-00-prestate.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-00-prestate.txt new file mode 100644 index 00000000..c87f0de2 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-00-prestate.txt @@ -0,0 +1,10 @@ +=== LIVE WALK PRE-STATE (controller v0.223.0) === +2026-08-23T09:25:42Z +gitea.dooplex.hu/admin/felhom-controller:0.223.0 Up About a minute (healthy) + +docmost Up 4 hours (healthy) +docmost-postgres Up 4 hours (healthy) +docmost-redis Up 4 hours (healthy) +privatebin Up 4 hours (healthy) +bookstack Up 7 hours (healthy) +bookstack-db Up 4 hours (healthy) diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-01-scenarioA-stop.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-01-scenarioA-stop.txt new file mode 100644 index 00000000..f8b71d06 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-01-scenarioA-stop.txt @@ -0,0 +1,6 @@ +=== SCENARIO A — an app's database dies; customer has NOT opted in === +waiting out the 90s dead-app boot grace first... +T0=2026-08-23T09:27:27Z +2026-08-23T09:27:32Z +bookstack Up 7 hours (healthy) +bookstack-db Exited (0) 5 seconds ago diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-02-scenarioA-controller-sent.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-02-scenarioA-controller-sent.txt new file mode 100644 index 00000000..0e0ebaa3 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-02-scenarioA-controller-sent.txt @@ -0,0 +1,4 @@ +-- the CONTROLLER only proves it SENT (quoted for the severity word) -- +2026/08/23 09:27:51 notifier.go:206: [DEBUG] PushEvent: type=app_start_failed severity=warning url=https://hub.felhom.eu/api/v1/event +2026/08/23 09:27:51 notifier.go:232: [DEBUG] PushEvent: app_start_failed pushed OK (HTTP 200) +2026/08/23 09:27:51 notifier.go:234: [INFO] Event pushed: app_start_failed (warning) — Telepített alkalmazás nem fut: BookStack diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-03-scenarioA-hub-records.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-03-scenarioA-hub-records.txt new file mode 100644 index 00000000..c1e1b778 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-03-scenarioA-hub-records.txt @@ -0,0 +1,14 @@ +=== SCENARIO A — THE HUB'S OWN RECORDS (not the controller's) === + +-- 1. the STORED event: severity as the hub filed it -- +customer_id event_type severity message created_at +----------- ---------------- -------- ---------------------------------------- ------------------- +demo-hp app_start_failed warning Telepített alkalmazás nem fut: BookStack 2026-08-23 09:27:51 +demo-hp app_start_failed info Telepített alkalmazás nem fut: BookStack 2026-08-23 05:30:14 +demo-hp app_start_failed info Telepített alkalmazás nem fut: BookStack 2026-08-22 21:27:18 +demo-hp app_start_failed info Telepített alkalmazás nem fut: Kimai 2026-08-22 14:19:12 + +-- 2. the NOTIFICATION LOG: which channel actually delivered -- +customer_id event_type severity status channel created_at +----------- ---------------- -------- ------ -------- ------------------- +demo-hp app_start_failed warning sent operator 2026-08-23 09:27:51 diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-04-scenarioA-customer-leg-control.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-04-scenarioA-customer-leg-control.txt new file mode 100644 index 00000000..2549a99a --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-04-scenarioA-customer-leg-control.txt @@ -0,0 +1,26 @@ +-- 3. IS THE CUSTOMER LEG EVEN CAPABLE? (or is 'no customer row' true for the wrong reason) -- +Error: in prepare, no such table: notification_prefs + +-- the customer leg DOES deliver other event types for this same customer: -- +event_type severity status channel created_at +------------------- -------- ------- -------- ------------------- +backup_run_failures error skipped customer 2026-08-22 22:20:32 +backup_run_failures error skipped customer 2026-08-22 22:17:44 +backup_run_failures error skipped customer 2026-08-22 21:11:19 +backup_run_failures error skipped customer 2026-08-22 16:06:21 +backup_run_failures error skipped customer 2026-08-21 21:20:36 + +-- 4. HOW MANY notification rows did app_start_failed EVER produce before today? -- +0 rows before 2026-08-23 09:00 +91 app_start_failed EVENTS stored, all-time +-- 3b. the customer's own preferences (does app_start_failed appear?) -- +-- 3b. the customer's own preferences (does app_start_failed appear?) -- +-- HONESTY CHECK: demo-hp has NO customer_notifications row at all -- +0 prefs rows for demo-hp + +-- why the customer channel logs 'skipped' for other types: -- +event_type status reason +------------------- ------- ------------- +backup_run_failures skipped operator_only +backup_run_failures skipped operator_only +backup_run_failures skipped operator_only diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-05-step4-absent-intent-count.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-05-step4-absent-intent-count.txt new file mode 100644 index 00000000..53592601 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-05-step4-absent-intent-count.txt @@ -0,0 +1,11 @@ +=== STEP 4 — THE ABSENT-INTENT COUNT ON demo-hp (deployed apps only) === + bookstack running + calibre-web running + docmost running + kimai running + opengist running + paperless-ngx running + privatebin running + romm running + +DEPLOYED=8 running=8 stopped=0 ABSENT=0 diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-06-scenarioA-full-controller-log.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-06-scenarioA-full-controller-log.txt new file mode 100644 index 00000000..89481149 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-06-scenarioA-full-controller-log.txt @@ -0,0 +1,1041 @@ +perl: warning: Setting locale failed. +perl: warning: Please check that your locale settings: + LANGUAGE = (unset), + LC_ALL = (unset), + LC_CTYPE = "UTF-8", + LC_NUMERIC = (unset), + LC_COLLATE = (unset), + LC_TIME = (unset), + LC_MESSAGES = (unset), + LC_MONETARY = (unset), + LC_ADDRESS = (unset), + LC_IDENTIFICATION = (unset), + LC_MEASUREMENT = (unset), + LC_PAPER = (unset), + LC_TELEPHONE = (unset), + LC_NAME = (unset), + LANG = "en_US.UTF-8" + are supported and installed on your system. +perl: warning: Falling back to a fallback locale ("en_US.UTF-8"). +2026/08/23 09:25:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:25:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:25:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:25:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:25:03 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:25:03 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:25:03 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:25:03Z, active_sessions=4 +2026/08/23 09:25:03 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:25:03 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:25:03 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:25:03 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:25:03 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:25:03 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:25:03 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:25:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:25:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:25:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:25:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:25:20 info.go:13: [DEBUG] [system] GetDiskUsage: path="/" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:25:20 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:25:20 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:25:20 fillwatch.go:256: [INFO] [fillwatch] checked 3 filesystem(s), 0 unreadable/skipped, 0 notification(s); bands: all ok +2026/08/23 09:25:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:25:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:25:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:25:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:25:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:25:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:25:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (733ms) +2026/08/23 09:25:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (688ms) +2026/08/23 09:25:24 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:25:24 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:25:24 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:25:24Z, active_sessions=5 +2026/08/23 09:25:24 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:25:24 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:25:24 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:25:24 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:25:24 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:25:24 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:25:24 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:25:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:25:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:25:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:25:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:25:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:25:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:25:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:25:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:25:46 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:25:46 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:25:46 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:25:46Z, active_sessions=6 +2026/08/23 09:25:46 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:25:46 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:25:46 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:25:46 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:25:46 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:25:46 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:25:46 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4163MB avail≈21735MB +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25776616 → total=25898MB avail=21735MB used=4163MB (16.1%) +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.78 0.55 0.54 5/919 915" → 1m=0.78 5m=0.55 15m=0.54 +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:25:50 info.go:13: [DEBUG] [system] GetInfo done in 60ms — mem=4163MB/25898MB (16.1%), rootDisk=10.2GB/68.7GB (14.9%), load=0.78/0.55/0.54, temp=52.9°C (hwmon1), cpu=2.0% +2026/08/23 09:25:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:25:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:25:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:25:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:25:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:25:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:25:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:25:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:25:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:25:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:25:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:25:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:25:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:25:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 45ms) +2026/08/23 09:25:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:25:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:25:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:25:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (543ms) +2026/08/23 09:25:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 544ms) +2026/08/23 09:25:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (655ms) +2026/08/23 09:25:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (608ms) +2026/08/23 09:26:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:26:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:26:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:26:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:26:07 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:26:07 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:26:07 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:26:07Z, active_sessions=7 +2026/08/23 09:26:07 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:26:07 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:26:07 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:26:07 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:26:07 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:26:07 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:26:07 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:26:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:26:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:26:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:26:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:26:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:26:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:26:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:26:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:26:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:26:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:26:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (646ms) +2026/08/23 09:26:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (603ms) +2026/08/23 09:26:28 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:26:28 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:26:28 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:26:28Z, active_sessions=8 +2026/08/23 09:26:28 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:26:28 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:26:28 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:26:28 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:26:28 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:26:28 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:26:28 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:26:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:26:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:26:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:26:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:26:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:26:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:26:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:26:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:26:49 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:26:49 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:26:49 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:26:49Z, active_sessions=9 +2026/08/23 09:26:49 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:26:49 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:26:49 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:26:49 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:26:49 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:26:49 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:26:49 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4084MB avail≈21814MB +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25870480 → total=25898MB avail=21814MB used=4084MB (15.8%) +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.62 0.56 0.55 2/921 1042" → 1m=0.62 5m=0.56 15m=0.55 +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:26:50 info.go:13: [DEBUG] [system] GetInfo done in 62ms — mem=4084MB/25898MB (15.8%), rootDisk=10.2GB/68.7GB (14.9%), load=0.62/0.56/0.55, temp=52.9°C (hwmon1), cpu=4.4% +2026/08/23 09:26:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:26:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:26:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:26:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:26:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:26:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:26:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:26:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:26:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:26:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (515ms) +2026/08/23 09:26:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 516ms) +2026/08/23 09:26:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (664ms) +2026/08/23 09:26:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (630ms) +2026/08/23 09:27:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:27:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:27:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:27:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:27:10 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:27:10 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:27:10 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:27:10Z, active_sessions=10 +2026/08/23 09:27:10 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:27:10 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:27:10 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:27:10 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:27:10 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:27:10 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:27:10 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:27:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:27:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:27:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:27:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:27:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:27:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:27:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:27:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:27:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:27:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:27:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (610ms) +2026/08/23 09:27:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (608ms) +2026/08/23 09:27:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:27:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:27:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:27:31 manager.go:703: [DEBUG] [stacks] restart-policy of down member "bookstack-db" = "unless-stopped" +2026/08/23 09:27:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:27:32 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:27:32 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:27:32 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:27:32Z, active_sessions=11 +2026/08/23 09:27:32 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:27:32 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:27:32 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:27:32 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:27:32 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:27:32 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:27:32 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:27:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:27:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:27:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:27:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4018MB avail≈21880MB +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25948320 → total=25898MB avail=21880MB used=4018MB (15.5%) +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.68 0.61 0.57 3/898 1167" → 1m=0.68 5m=0.61 15m=0.57 +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:27:50 info.go:13: [DEBUG] [system] GetInfo done in 57ms — mem=4018MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.68/0.61/0.57, temp=52.9°C (hwmon1), cpu=2.4% +2026/08/23 09:27:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:27:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:27:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:27:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:27:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:27:51 notifier.go:206: [DEBUG] PushEvent: type=app_start_failed severity=warning url=https://hub.felhom.eu/api/v1/event +2026/08/23 09:27:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:27:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:27:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:27:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:27:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:27:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:27:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:27:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:27:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:27:51 notifier.go:232: [DEBUG] PushEvent: app_start_failed pushed OK (HTTP 200) +2026/08/23 09:27:51 notifier.go:234: [INFO] Event pushed: app_start_failed (warning) — Telepített alkalmazás nem fut: BookStack +2026/08/23 09:27:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:27:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 48ms) +2026/08/23 09:27:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:27:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (563ms) +2026/08/23 09:27:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 564ms) +2026/08/23 09:27:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (688ms) +2026/08/23 09:27:53 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:27:53 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:27:53 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:27:53Z, active_sessions=12 +2026/08/23 09:27:53 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:27:53 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:27:53 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:27:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:27:53 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:27:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:27:53 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:27:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (628ms) +2026/08/23 09:28:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:28:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:28:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:28:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:28:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:28:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:28:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:28:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:28:14 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:28:14 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:28:14 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:28:14Z, active_sessions=13 +2026/08/23 09:28:14 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:28:14 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:28:14 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:28:14 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:28:14 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:28:14 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:28:14 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:28:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:28:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:28:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:28:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:28:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:28:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:28:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (613ms) +2026/08/23 09:28:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (663ms) +2026/08/23 09:28:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:28:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:28:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:28:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:28:35 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:28:35 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:28:35 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:28:35Z, active_sessions=14 +2026/08/23 09:28:35 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:28:35 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:28:35 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:28:35 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:28:35 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:28:35 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:28:35 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:28:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:28:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:28:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:28:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈3962MB avail≈21936MB +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=26015448 → total=25898MB avail=21936MB used=3962MB (15.3%) +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.68 0.64 0.58 6/899 1292" → 1m=0.68 5m=0.64 15m=0.58 +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:28:50 info.go:13: [DEBUG] [system] GetInfo done in 59ms — mem=3962MB/25898MB (15.3%), rootDisk=10.2GB/68.7GB (14.9%), load=0.68/0.64/0.58, temp=52.9°C (hwmon1), cpu=4.8% +2026/08/23 09:28:51 scheduler.go:346: [INFO] [scheduler] Running job: backup-cache +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:28:51 scheduler.go:346: [INFO] [scheduler] Running job: system-health +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job system-health: execution starting +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:28:51 scheduler.go:346: [INFO] [scheduler] Running job: offsite-credential-retry +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job offsite-credential-retry: execution starting +2026/08/23 09:28:51 scheduler.go:363: [INFO] [scheduler] Job offsite-credential-retry completed (took 0s) +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job backup-cache: execution starting +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:28:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:28:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:28:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:28:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:28:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:28:51 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [bookstack, docmost, kimai, opengist, privatebin] +2026/08/23 09:28:51 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/felhom-drives/hdd_1 → [calibre-web, paperless-ngx, romm] +2026/08/23 09:28:51 backup.go:1063: [INFO] [backup] Found 13 DB dump files across drives +2026/08/23 09:28:51 dbdump.go:128: [DEBUG] DiscoverDatabases: running docker ps to find database containers +2026/08/23 09:28:51 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: 1c05a812256b felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.223.0 +13cfb077ecf8 docmost docmost docmost/docmost:0.95.0 +91041c89bd0d docmost-postgres docmost postgres:16-alpine +41c830a66b1d docmost-redis docmost redis:7-alpine +77031a0c1319 romm romm rommapp/romm:5.0.0 +aa6fe6fa459e romm-redis romm redis:7-alpine +e076270a7d75 romm-db romm mariadb:11.4 +aa40544a01f2 privatebin privatebin privatebin/pdo:2.0.5 +1c704643bc4c paperless-webserver paperless-ngx ghcr.io/paperless-ngx/paperless-... +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container felhom-controller (image=gitea.dooplex.hu/admin/felhom-controller:0.223.0, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost (image=docmost/docmost:0.95.0, not a database) +2026/08/23 09:28:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: docmost-postgres (id=91041c89bd0d) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈3951MB avail≈21947MB +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=26027792 → total=25898MB avail=21947MB used=3951MB (15.3%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.68 0.64 0.58 5/921 1341" → 1m=0.68 5m=0.64 15m=0.58 +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetInfo done in 74ms — mem=3951MB/25898MB (15.3%), rootDisk=10.2GB/68.7GB (14.9%), load=0.68/0.64/0.58, temp=52.9°C (hwmon1), cpu=2.0% +2026/08/23 09:28:51 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=15.3% (3951MB/25898MB), cpu=2.0%, temp=52.9°C (hwmon1) +2026/08/23 09:28:51 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:28:51 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (15%) +2026/08/23 09:28:51 healthcheck.go:125: [DEBUG] [monitor] CPU: OK (2%) +2026/08/23 09:28:51 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (53°C) +2026/08/23 09:28:51 dbdump.go:196: [DEBUG] DiscoverDatabases: docmost-postgres → stack=docmost, dbUser=docmost, dbName=docmost +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost-redis (image=redis:7-alpine, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm (image=rommapp/romm:5.0.0, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm-redis (image=redis:7-alpine, not a database) +2026/08/23 09:28:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: romm-db (id=e076270a7d75) +2026/08/23 09:28:51 dbdump.go:196: [DEBUG] DiscoverDatabases: romm-db → stack=romm, dbUser=root, dbName=romm +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container privatebin (image=privatebin/pdo:2.0.5, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-webserver (image=ghcr.io/paperless-ngx/paperless-ngx:2.20.15, not a database) +2026/08/23 09:28:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: paperless-postgres (id=e31aa0b09dbb) +2026/08/23 09:28:51 dbdump.go:894: [DEBUG] DiscoverDatabases: paperless-postgres → stack "paperless-ngx" from the compose project label (the container name would have given "paperless") +2026/08/23 09:28:51 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:28:51 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:28:51 dbdump.go:196: [DEBUG] DiscoverDatabases: paperless-postgres → stack=paperless-ngx, dbUser=paperless, dbName=paperless +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-redis (image=redis:7-alpine, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container opengist (image=ghcr.io/thomiceli/opengist:1.13, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container kimai (image=kimai/kimai2:apache-2.57.0, not a database) +2026/08/23 09:28:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: kimai-db (id=9849469a8b29) +2026/08/23 09:28:51 dbdump.go:196: [DEBUG] DiscoverDatabases: kimai-db → stack=kimai, dbUser=root, dbName=kimai +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container calibre-web (image=crocodilestick/calibre-web-automated:v4.0.6, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container bookstack (image=lscr.io/linuxserver/bookstack:26.05.2, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.3.3-stable, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container cloudflared (image=cloudflare/cloudflared:2026.6.0, not a database) +2026/08/23 09:28:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container traefik (image=traefik:v3.6.7, not a database) +2026/08/23 09:28:51 dbdump.go:203: [DEBUG] DiscoverDatabases: found 4 database(s), skipped 15 non-DB container(s) +2026/08/23 09:28:51 dbdump.go:206: [INFO] [backup] Discovered 4 databases +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:28:51 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:28:51 [INFO] [backup] Discovered app data: 8 apps +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:28:51 backup.go:1133: [INFO] [backup] Backup status cache refreshed +2026/08/23 09:28:51 scheduler.go:363: [INFO] [scheduler] Job backup-cache completed (took 174ms) +2026/08/23 09:28:51 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:28:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:28:51 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:28:51 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/08/23 09:28:51 scheduler.go:363: [INFO] [scheduler] Job system-health completed (took 215ms) +2026/08/23 09:28:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (569ms) +2026/08/23 09:28:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 570ms) +2026/08/23 09:28:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (608ms) +2026/08/23 09:28:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (593ms) +2026/08/23 09:28:56 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:28:56 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:28:56 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:28:56Z, active_sessions=15 +2026/08/23 09:28:56 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:28:56 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:28:56 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:28:56 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:28:56 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:28:56 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:28:56 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:29:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:29:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:29:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:29:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:29:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:29:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:29:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 6 targets (1 skipped not due, 1 skipped no container) +2026/08/23 09:29:11 healthprobe.go:153: [DEBUG] Health probe romm: HTTP GET :8080/ → 200 (3ms) +2026/08/23 09:29:11 healthprobe.go:153: [DEBUG] Health probe opengist: API GET :6157/healthcheck → 200 (3ms) +2026/08/23 09:29:11 healthprobe.go:153: [DEBUG] Health probe privatebin: HTTP GET :8080/ → 200 (5ms) +2026/08/23 09:29:11 healthprobe.go:153: [DEBUG] Health probe calibre-web: HTTP GET :8083/ → 302 (8ms) +2026/08/23 09:29:11 healthprobe.go:153: [DEBUG] Health probe kimai: HTTP GET :8001/ → 302 (24ms) +2026/08/23 09:29:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:29:11 healthprobe.go:153: [DEBUG] Health probe bookstack: HTTP GET :80/ → 500 (52ms) +2026/08/23 09:29:11 healthprobe.go:133: [INFO] Health probes: 6 ok (of 6 probed) +2026/08/23 09:29:18 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:29:18 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:29:18 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:29:18Z, active_sessions=16 +2026/08/23 09:29:18 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:29:18 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:29:18 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:29:18 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:29:18 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:29:18 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:29:18 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:29:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:29:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:29:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:29:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:29:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:29:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:29:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (783ms) +2026/08/23 09:29:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (788ms) +2026/08/23 09:29:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:29:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:29:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 1 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:29:31 healthprobe.go:153: [DEBUG] Health probe docmost: HTTP GET :3000/ → 200 (2ms) +2026/08/23 09:29:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:29:31 healthprobe.go:133: [INFO] Health probes: 1 ok (of 1 probed) +2026/08/23 09:29:39 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:29:39 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:29:39 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:29:39Z, active_sessions=17 +2026/08/23 09:29:39 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:29:39 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:29:39 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:29:39 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:29:39 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:29:39 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:29:39 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:29:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:29:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:29:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:29:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4016MB avail≈21882MB +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25950788 → total=25898MB avail=21882MB used=4016MB (15.5%) +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.50 0.61 0.57 6/906 1602" → 1m=0.50 5m=0.61 15m=0.57 +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 54.8°C (hwmon2) +2026/08/23 09:29:50 info.go:13: [DEBUG] [system] GetInfo done in 69ms — mem=4016MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.50/0.61/0.57, temp=54.8°C (hwmon2), cpu=1.9% +2026/08/23 09:29:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:29:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:29:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:29:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:29:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:29:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:29:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:29:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:29:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:29:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:29:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:29:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:29:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:29:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:29:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:29:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:29:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 84ms) +2026/08/23 09:29:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (544ms) +2026/08/23 09:29:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 545ms) +2026/08/23 09:29:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (606ms) +2026/08/23 09:29:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (595ms) +2026/08/23 09:30:00 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:30:00 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:30:00 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:30:00Z, active_sessions=18 +2026/08/23 09:30:00 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:30:00 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:30:00 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:30:00 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:30:00 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:30:00 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:30:00 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:30:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:30:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:30:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:30:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:30:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:30:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:30:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:30:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:30:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:30:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:30:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:30:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:30:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:30:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:30:21 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:30:21 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:30:21 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:30:21Z, active_sessions=19 +2026/08/23 09:30:21 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:30:21 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:30:21 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:30:21 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:30:21 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:30:21 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:30:21 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:30:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (623ms) +2026/08/23 09:30:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (614ms) +2026/08/23 09:30:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:30:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:30:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:30:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:30:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:30:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:30:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:30:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:30:42 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:30:42 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:30:42 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:30:42Z, active_sessions=20 +2026/08/23 09:30:42 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:30:43 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:30:43 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:30:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:30:43 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:30:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:30:43 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4021MB avail≈21877MB +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25945392 → total=25898MB avail=21877MB used=4021MB (15.5%) +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.35 0.55 0.55 6/901 1725" → 1m=0.35 5m=0.55 15m=0.55 +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:30:50 info.go:13: [DEBUG] [system] GetInfo done in 59ms — mem=4021MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.35/0.55/0.55, temp=52.9°C (hwmon1), cpu=4.9% +2026/08/23 09:30:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:30:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:30:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:30:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:30:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:30:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:30:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:30:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:30:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:30:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (545ms) +2026/08/23 09:30:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 545ms) +2026/08/23 09:30:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (592ms) +2026/08/23 09:30:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (602ms) +2026/08/23 09:31:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:31:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:04 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:31:04 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:31:04 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:31:04Z, active_sessions=21 +2026/08/23 09:31:04 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:31:04 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:31:04 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:31:04 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:31:04 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:31:04 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:31:04 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:31:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:31:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-07-scenarioD-stop.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-07-scenarioD-stop.txt new file mode 100644 index 00000000..96291939 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-07-scenarioD-stop.txt @@ -0,0 +1,8 @@ +=== SCENARIO D — an app stopped OUT OF BAND, intent recorded as Running === +subject: privatebin (single container, desired_state: running) — R-386's measured-silent case +desired_state: running +T0=2026-08-23T09:31:27Z +2026-08-23T09:31:33Z +privatebin Exited (0) 5 seconds ago +bookstack Up 7 hours (healthy) +bookstack-db Up 10 seconds (healthy) diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-08-scenarioD-verdict.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-08-scenarioD-verdict.txt new file mode 100644 index 00000000..70b2eb32 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-08-scenarioD-verdict.txt @@ -0,0 +1,6 @@ +-- SCENARIO D verdict (T0=09:31:27Z) -- +2026-08-23T09:32:41Z +privatebin Exited (0) About a minute ago + +app_start_failed events since T0: 1 +2026/08/23 09:31:51 notifier.go:234: [INFO] Event pushed: app_start_failed (warning) — Telepített alkalmazás nem fut: PrivateBin diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-09-scenarioD-heartbeat.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-09-scenarioD-heartbeat.txt new file mode 100644 index 00000000..4f2c6ad1 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-09-scenarioD-heartbeat.txt @@ -0,0 +1,17 @@ +-- SCENARIO D: the heartbeat, new beside last session's -- +LAST SESSION (v0.222.0, R-386 open, privatebin stopped out of band): + 2026/08/23 05:5x [deadapp] check alive: ... 8 deployed app(s) evaluated, 0 currently down + (9 scans, 0 events, 0 banner lines — evidence: DRILL-r384-.../live-18-sec4-verdict.txt) + +NOW (v0.223.0): +2026/08/23 09:34:51 main.go:1731: [INFO] [deadapp] check alive: 20 scans since boot, 8 deployed app(s) evaluated, 1 currently down + +THE PAIR, exactly as logged — same box, same fixture (privatebin stopped out of band), same 8 apps: + 2026/08/23 05:47:44 [deadapp] check alive: 40 scans since boot, 8 deployed app(s) evaluated, 0 currently down <- v0.222.0 + 2026/08/23 09:34:51 [deadapp] check alive: 20 scans since boot, 8 deployed app(s) evaluated, 1 currently down <- v0.223.0 + +-- and the hub's own record for it -- +event_type severity status channel message created_at +---------------- -------- ---------- -------- ----------------------------------------- ------------------- +app_start_failed warning suppressed operator Telepített alkalmazás nem fut: PrivateBin 2026-08-23 09:31:51 +app_start_failed warning sent operator Telepített alkalmazás nem fut: BookStack 2026-08-23 09:27:51 diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-10-scenarioC-ui-stop.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-10-scenarioC-ui-stop.txt new file mode 100644 index 00000000..dcd600cb --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-10-scenarioC-ui-stop.txt @@ -0,0 +1,11 @@ +=== SCENARIO C — the customer presses Stop in the interface === +-- intent BEFORE -- +desired_state: running +-- restart it first, so the Stop is a real transition -- +{"ok":true,"message":"Stack privatebin start completed"} + start=200 +T_STOP=2026-08-23T09:36:13Z +{"ok":true,"message":"Stack privatebin stop completed"} + stop=200 +-- intent AFTER -- +desired_state: stopped diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-11-scenarioC-verdict.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-11-scenarioC-verdict.txt new file mode 100644 index 00000000..79fedbdd --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-11-scenarioC-verdict.txt @@ -0,0 +1,7 @@ +-- SCENARIO C verdict: 4 minutes past the Stop (T=09:36:13Z), every grace elapsed -- +2026-08-23T09:40:37Z + +app_start_failed since the Stop : 0 +deadapp scans since the Stop : 9 +unknown-intent log lines : 0 + diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-12-scenarioE-setup.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-12-scenarioE-setup.txt new file mode 100644 index 00000000..5fdfa0fb --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-12-scenarioE-setup.txt @@ -0,0 +1,7 @@ +=== SCENARIO E — an app with NO recorded intent (the legacy/upgrade population) === +demo-hp has ZERO such apps (all 8 read 'running'), so one is CREATED for the measurement: +the desired_state key is removed from privatebin's app.yaml, exactly as a box upgraded from +before R-166 would look. Backed up and restored afterwards. No code writer was added. +desired_state line now: [0 found] +T0=2026-08-23T09:40:55Z +Up 30 seconds (healthy) diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-13-scenarioE-verdict.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-13-scenarioE-verdict.txt new file mode 100644 index 00000000..7ffba6c5 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-13-scenarioE-verdict.txt @@ -0,0 +1,11 @@ +-- SCENARIO E verdict -- +2026-08-23T09:51:48Z +app_start_failed events : 0 +deadapp scans : 21 + +-- is privatebin actually being EVALUATED? (a suppression nobody reaches proves nothing) -- +privatebin deployed=True state=stopped + +-- waiting for the heartbeat scan (deadAppScans lags the log count by the boot grace) -- +2026/08/23 09:51:56 main.go:1731: [INFO] [deadapp] check alive: 20 scans since boot, 8 deployed app(s) evaluated, 0 currently down +2026/08/23 09:51:56 main.go:1760: [INFO] [deadapp] 1 stopped app(s) have NO recorded customer intent, so their dead-app alarm is suppressed by the unknown-intent fallback (R-386): privatebin. This closes itself as each app is started or stopped through the interface. diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-14-scenarioCDE-full-log.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-14-scenarioCDE-full-log.txt new file mode 100644 index 00000000..c9fd8f31 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-14-scenarioCDE-full-log.txt @@ -0,0 +1,4044 @@ +perl: warning: Setting locale failed. +perl: warning: Please check that your locale settings: + LANGUAGE = (unset), + LC_ALL = (unset), + LC_CTYPE = "UTF-8", + LC_NUMERIC = (unset), + LC_COLLATE = (unset), + LC_TIME = (unset), + LC_MESSAGES = (unset), + LC_MONETARY = (unset), + LC_ADDRESS = (unset), + LC_IDENTIFICATION = (unset), + LC_MEASUREMENT = (unset), + LC_PAPER = (unset), + LC_TELEPHONE = (unset), + LC_NAME = (unset), + LANG = "en_US.UTF-8" + are supported and installed on your system. +perl: warning: Falling back to a fallback locale ("en_US.UTF-8"). +2026/08/23 09:31:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:31:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:04 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:31:04 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:31:04 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:31:04Z, active_sessions=21 +2026/08/23 09:31:04 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:31:04 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:31:04 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:31:04 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:31:04 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:31:04 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:31:04 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:31:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:31:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:31:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (684ms) +2026/08/23 09:31:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (696ms) +2026/08/23 09:31:25 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:31:25 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:31:25 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:31:25Z, active_sessions=22 +2026/08/23 09:31:25 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:31:25 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:31:25 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:31:25 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:31:25 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:31:25 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:31:25 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:31:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:31:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:31:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:46 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:31:46 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:31:46 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:31:46Z, active_sessions=23 +2026/08/23 09:31:46 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:31:46 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:31:46 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:31:46 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:31:46 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:31:46 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:31:46 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4068MB avail≈21830MB +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25889704 → total=25898MB avail=21830MB used=4068MB (15.7%) +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.55 0.57 0.56 4/897 1837" → 1m=0.55 5m=0.57 15m=0.56 +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:31:50 info.go:13: [DEBUG] [system] GetInfo done in 58ms — mem=4068MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.55/0.57/0.56, temp=52.9°C (hwmon1), cpu=5.7% +2026/08/23 09:31:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:31:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:31:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:31:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:31:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:31:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:31:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:31:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:31:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:31:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:31:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:51 notifier.go:206: [DEBUG] PushEvent: type=app_start_failed severity=warning url=https://hub.felhom.eu/api/v1/event +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:31:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:31:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:31:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:31:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:31:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:31:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 73ms) +2026/08/23 09:31:51 notifier.go:232: [DEBUG] PushEvent: app_start_failed pushed OK (HTTP 200) +2026/08/23 09:31:51 notifier.go:234: [INFO] Event pushed: app_start_failed (warning) — Telepített alkalmazás nem fut: PrivateBin +2026/08/23 09:31:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (533ms) +2026/08/23 09:31:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 534ms) +2026/08/23 09:31:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (651ms) +2026/08/23 09:31:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (655ms) +2026/08/23 09:32:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:32:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:32:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:32:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:32:07 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:32:07 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:32:07 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:32:07Z, active_sessions=24 +2026/08/23 09:32:07 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:32:07 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:32:07 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:32:07 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:32:07 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:32:07 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:32:07 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:32:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:32:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:32:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:32:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:32:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:32:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:32:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:32:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:32:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:32:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:32:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (605ms) +2026/08/23 09:32:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (593ms) +2026/08/23 09:32:28 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:32:28 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:32:28 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:32:28Z, active_sessions=25 +2026/08/23 09:32:28 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:32:28 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:32:28 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:32:28 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:32:28 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:32:29 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:32:29 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:32:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:32:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:32:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:32:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:32:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:32:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:32:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:32:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:32:50 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:32:50 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:32:50 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:32:50Z, active_sessions=26 +2026/08/23 09:32:50 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:32:50 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:32:50 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:32:50 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:32:50 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:32:50 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:32:50 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4171MB avail≈21727MB +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25767140 → total=25898MB avail=21727MB used=4171MB (16.1%) +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.52 0.56 0.55 4/894 1960" → 1m=0.52 5m=0.56 15m=0.55 +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 53.4°C (hwmon2) +2026/08/23 09:32:50 info.go:13: [DEBUG] [system] GetInfo done in 57ms — mem=4171MB/25898MB (16.1%), rootDisk=10.2GB/68.7GB (14.9%), load=0.52/0.56/0.55, temp=53.4°C (hwmon2), cpu=2.3% +2026/08/23 09:32:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:32:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:32:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:32:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:32:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:32:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:32:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:32:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:32:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:32:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (536ms) +2026/08/23 09:32:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 537ms) +2026/08/23 09:32:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (610ms) +2026/08/23 09:32:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (594ms) +2026/08/23 09:33:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:33:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:33:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:33:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:33:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:33:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:33:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:33:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:33:11 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:33:11 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:33:11 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:33:11Z, active_sessions=27 +2026/08/23 09:33:11 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:33:11 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:33:11 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:33:11 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:33:11 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:33:11 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:33:11 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:33:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:33:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:33:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:33:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:33:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:33:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:33:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (653ms) +2026/08/23 09:33:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (594ms) +2026/08/23 09:33:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:33:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:33:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:33:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:33:32 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:33:32 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:33:32 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:33:32Z, active_sessions=28 +2026/08/23 09:33:32 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:33:32 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:33:32 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:33:32 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:33:32 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:33:32 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:33:32 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:33:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:33:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:33:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:33:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈3977MB avail≈21921MB +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25997592 → total=25898MB avail=21921MB used=3977MB (15.4%) +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.41 0.53 0.54 6/898 2072" → 1m=0.41 5m=0.53 15m=0.54 +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:33:50 info.go:13: [DEBUG] [system] GetInfo done in 60ms — mem=3977MB/25898MB (15.4%), rootDisk=10.2GB/68.7GB (14.9%), load=0.41/0.53/0.54, temp=52.9°C (hwmon1), cpu=4.4% +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:33:51 scheduler.go:346: [INFO] [scheduler] Running job: offsite-credential-retry +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:33:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job offsite-credential-retry: execution starting +2026/08/23 09:33:51 scheduler.go:363: [INFO] [scheduler] Job offsite-credential-retry completed (took 0s) +2026/08/23 09:33:51 scheduler.go:346: [INFO] [scheduler] Running job: system-health +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job system-health: execution starting +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:33:51 scheduler.go:346: [INFO] [scheduler] Running job: backup-cache +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job backup-cache: execution starting +2026/08/23 09:33:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:33:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:33:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:33:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:33:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:33:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:33:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:33:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:33:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈3983MB avail≈21915MB +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25990576 → total=25898MB avail=21915MB used=3983MB (15.4%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.41 0.53 0.54 7/925 2115" → 1m=0.41 5m=0.53 15m=0.54 +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetInfo done in 72ms — mem=3983MB/25898MB (15.4%), rootDisk=10.2GB/68.7GB (14.9%), load=0.41/0.53/0.54, temp=52.9°C (hwmon1), cpu=4.4% +2026/08/23 09:33:51 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=15.4% (3983MB/25898MB), cpu=4.4%, temp=52.9°C (hwmon1) +2026/08/23 09:33:51 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:33:51 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (15%) +2026/08/23 09:33:51 healthcheck.go:125: [DEBUG] [monitor] CPU: OK (4%) +2026/08/23 09:33:51 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (53°C) +2026/08/23 09:33:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:33:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 88ms) +2026/08/23 09:33:51 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [bookstack, docmost, kimai, opengist, privatebin] +2026/08/23 09:33:51 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/felhom-drives/hdd_1 → [calibre-web, paperless-ngx, romm] +2026/08/23 09:33:51 backup.go:1063: [INFO] [backup] Found 13 DB dump files across drives +2026/08/23 09:33:51 dbdump.go:128: [DEBUG] DiscoverDatabases: running docker ps to find database containers +2026/08/23 09:33:51 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: 1c05a812256b felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.223.0 +13cfb077ecf8 docmost docmost docmost/docmost:0.95.0 +91041c89bd0d docmost-postgres docmost postgres:16-alpine +41c830a66b1d docmost-redis docmost redis:7-alpine +77031a0c1319 romm romm rommapp/romm:5.0.0 +aa6fe6fa459e romm-redis romm redis:7-alpine +e076270a7d75 romm-db romm mariadb:11.4 +1c704643bc4c paperless-webserver paperless-ngx ghcr.io/paperless-ngx/paperless-ngx:2.20.15 +e31aa0b09dbb paperless-postgres paperless-ng... +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container felhom-controller (image=gitea.dooplex.hu/admin/felhom-controller:0.223.0, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost (image=docmost/docmost:0.95.0, not a database) +2026/08/23 09:33:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: docmost-postgres (id=91041c89bd0d) +2026/08/23 09:33:51 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:33:51 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:33:51 dbdump.go:196: [DEBUG] DiscoverDatabases: docmost-postgres → stack=docmost, dbUser=docmost, dbName=docmost +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost-redis (image=redis:7-alpine, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm (image=rommapp/romm:5.0.0, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm-redis (image=redis:7-alpine, not a database) +2026/08/23 09:33:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: romm-db (id=e076270a7d75) +2026/08/23 09:33:51 dbdump.go:196: [DEBUG] DiscoverDatabases: romm-db → stack=romm, dbUser=root, dbName=romm +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-webserver (image=ghcr.io/paperless-ngx/paperless-ngx:2.20.15, not a database) +2026/08/23 09:33:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: paperless-postgres (id=e31aa0b09dbb) +2026/08/23 09:33:51 dbdump.go:894: [DEBUG] DiscoverDatabases: paperless-postgres → stack "paperless-ngx" from the compose project label (the container name would have given "paperless") +2026/08/23 09:33:51 dbdump.go:196: [DEBUG] DiscoverDatabases: paperless-postgres → stack=paperless-ngx, dbUser=paperless, dbName=paperless +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-redis (image=redis:7-alpine, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container opengist (image=ghcr.io/thomiceli/opengist:1.13, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container kimai (image=kimai/kimai2:apache-2.57.0, not a database) +2026/08/23 09:33:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: kimai-db (id=9849469a8b29) +2026/08/23 09:33:51 dbdump.go:196: [DEBUG] DiscoverDatabases: kimai-db → stack=kimai, dbUser=root, dbName=kimai +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container calibre-web (image=crocodilestick/calibre-web-automated:v4.0.6, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container bookstack (image=lscr.io/linuxserver/bookstack:26.05.2, not a database) +2026/08/23 09:33:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: bookstack-db (id=95dcda149d29) +2026/08/23 09:33:51 dbdump.go:196: [DEBUG] DiscoverDatabases: bookstack-db → stack=bookstack, dbUser=root, dbName=bookstack +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.3.3-stable, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container cloudflared (image=cloudflare/cloudflared:2026.6.0, not a database) +2026/08/23 09:33:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container traefik (image=traefik:v3.6.7, not a database) +2026/08/23 09:33:51 dbdump.go:203: [DEBUG] DiscoverDatabases: found 5 database(s), skipped 14 non-DB container(s) +2026/08/23 09:33:51 dbdump.go:206: [INFO] [backup] Discovered 5 databases +2026/08/23 09:33:51 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:33:51 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:33:51 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/08/23 09:33:51 scheduler.go:363: [INFO] [scheduler] Job system-health completed (took 229ms) +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:33:51 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:33:51 [INFO] [backup] Discovered app data: 8 apps +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:33:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:33:51 backup.go:1133: [INFO] [backup] Backup status cache refreshed +2026/08/23 09:33:51 scheduler.go:363: [INFO] [scheduler] Job backup-cache completed (took 246ms) +2026/08/23 09:33:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (601ms) +2026/08/23 09:33:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 601ms) +2026/08/23 09:33:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (620ms) +2026/08/23 09:33:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (680ms) +2026/08/23 09:33:53 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:33:53 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:33:53 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:33:53Z, active_sessions=29 +2026/08/23 09:33:53 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:33:53 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:33:53 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:33:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:33:53 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:33:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:33:53 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:34:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:34:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:34:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:34:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:34:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:34:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 5 targets (1 skipped not due, 1 skipped no container) +2026/08/23 09:34:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:34:11 healthprobe.go:153: [DEBUG] Health probe opengist: API GET :6157/healthcheck → 200 (1ms) +2026/08/23 09:34:11 healthprobe.go:153: [DEBUG] Health probe romm: HTTP GET :8080/ → 200 (2ms) +2026/08/23 09:34:11 healthprobe.go:153: [DEBUG] Health probe calibre-web: HTTP GET :8083/ → 302 (6ms) +2026/08/23 09:34:11 healthprobe.go:153: [DEBUG] Health probe kimai: HTTP GET :8001/ → 302 (21ms) +2026/08/23 09:34:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:34:11 healthprobe.go:153: [DEBUG] Health probe bookstack: HTTP GET :80/ → 302 (46ms) +2026/08/23 09:34:11 healthprobe.go:133: [INFO] Health probes: 5 ok (of 5 probed) +2026/08/23 09:34:15 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:34:15 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:34:15 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:34:15Z, active_sessions=30 +2026/08/23 09:34:15 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:34:15 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:34:15 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:34:15 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:34:15 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:34:15 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:34:15 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:34:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:34:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:34:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:34:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:34:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:34:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:34:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (621ms) +2026/08/23 09:34:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (642ms) +2026/08/23 09:34:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:34:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:34:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:34:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:34:36 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:34:36 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:34:36 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:34:36Z, active_sessions=31 +2026/08/23 09:34:36 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:34:36 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:34:36 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:34:36 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:34:36 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:34:36 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:34:36 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:34:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:34:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:34:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:34:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 1 targets (5 skipped not due, 1 skipped no container) +2026/08/23 09:34:41 healthprobe.go:153: [DEBUG] Health probe docmost: HTTP GET :3000/ → 200 (2ms) +2026/08/23 09:34:41 healthprobe.go:133: [INFO] Health probes: 1 ok (of 1 probed) +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4002MB avail≈21896MB +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25968132 → total=25898MB avail=21896MB used=4002MB (15.5%) +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.35 0.49 0.53 4/903 2387" → 1m=0.35 5m=0.49 15m=0.53 +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 55.0°C (hwmon2) +2026/08/23 09:34:50 info.go:13: [DEBUG] [system] GetInfo done in 66ms — mem=4002MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.35/0.49/0.53, temp=55.0°C (hwmon2), cpu=1.9% +2026/08/23 09:34:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:34:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:34:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:34:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:34:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:34:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:34:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:34:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:34:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:34:51 main.go:1731: [INFO] [deadapp] check alive: 20 scans since boot, 8 deployed app(s) evaluated, 1 currently down +2026/08/23 09:34:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (580ms) +2026/08/23 09:34:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 581ms) +2026/08/23 09:34:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (600ms) +2026/08/23 09:34:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (584ms) +2026/08/23 09:34:57 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:34:57 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:34:57 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:34:57Z, active_sessions=32 +2026/08/23 09:34:57 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:34:57 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:34:57 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:34:57 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:34:57 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:34:57 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:34:57 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:35:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:35:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:35:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:35:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:35:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:35:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:35:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:18 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:35:18 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:35:18 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:35:18Z, active_sessions=33 +2026/08/23 09:35:18 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:35:18 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:35:18 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:35:18 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:35:18 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:35:18 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:35:18 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:35:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:35:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:35:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:35:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:35:21 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:35:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (611ms) +2026/08/23 09:35:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (638ms) +2026/08/23 09:35:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:35:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:35:31 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:35:39 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:35:39 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:35:39 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:35:39Z, active_sessions=34 +2026/08/23 09:35:39 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:35:39 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:35:39 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:35:39 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:35:39 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:35:39 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:35:39 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:35:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:35:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:35:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:35:41 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4078MB avail≈21820MB +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25877564 → total=25898MB avail=21820MB used=4078MB (15.7%) +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.49 0.53 0.54 7/894 2500" → 1m=0.49 5m=0.53 15m=0.54 +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 55.0°C (hwmon2) +2026/08/23 09:35:50 info.go:13: [DEBUG] [system] GetInfo done in 68ms — mem=4078MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.49/0.53/0.54, temp=55.0°C (hwmon2), cpu=2.1% +2026/08/23 09:35:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:35:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:35:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:35:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:35:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:35:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:35:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:35:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:35:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:35:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:35:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:35:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:35:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:35:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:35:51 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 80ms) +2026/08/23 09:35:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (605ms) +2026/08/23 09:35:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 606ms) +2026/08/23 09:35:52 auth.go:146: [DEBUG] [web] login attempt from 172.17.0.1:44266 (X-Forwarded-For: ) +2026/08/23 09:35:52 auth.go:194: [DEBUG] [web] login successful from 172.17.0.1, creating session +2026/08/23 09:35:52 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:35:52Z, active_sessions=35 +2026/08/23 09:35:52 auth.go:214: [INFO] [web] Login from 172.17.0.1:44266 +2026/08/23 09:35:52 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:35:52 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.17.0.1:44282 +2026/08/23 09:35:52 auth.go:134: [DEBUG] [web] auth: valid session for POST /api/stacks/privatebin/start +2026/08/23 09:35:52 router.go:80: [DEBUG] [api] POST /api/stacks/privatebin/start (path=/stacks/privatebin/start) +2026/08/23 09:35:52 router.go:566: [INFO] [api] start requested for stack: privatebin +2026/08/23 09:35:52 router.go:80: [DEBUG] [api] actionStack: action=start name=privatebin +2026/08/23 09:35:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (629ms) +2026/08/23 09:35:52 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4199MB avail≈21699MB +2026/08/23 09:35:52 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25733328 → total=25898MB avail=21699MB used=4199MB (16.2%) +2026/08/23 09:35:52 manager.go:1036: [DEBUG] [stacks] StartStack privatebin: current state=stopped deployed=true +2026/08/23 09:35:52 manager.go:1039: [INFO] [stacks] Starting stack: privatebin +2026/08/23 09:35:52 manager.go:1046: [DEBUG] [stacks] StartStack privatebin: prepared 8 env vars for compose +2026/08/23 09:35:52 manager.go:1311: [DEBUG] Env vars for compose: [PATH, HOSTNAME, FELHOM_BOOTSTRAP_PATH, HOME, DOMAIN, DOMAIN, SUBDOMAIN, IMPORT_PATH] (8 app + 0 system) +2026/08/23 09:35:52 manager.go:1320: [DEBUG] Running: docker compose up -d (in /opt/docker/stacks/privatebin) +2026/08/23 09:35:53 manager.go:1340: [DEBUG] Command completed: docker compose up -d (took 0.3s) +2026/08/23 09:35:53 manager.go:1054: [INFO] [stacks] Stack privatebin started successfully (took 0.3s) +2026/08/23 09:35:53 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:35:53 lifecycle.go:70: [DEBUG] [integrations] OnStackStart: stack=privatebin, waiting 5s for state refresh +2026/08/23 09:35:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (640ms) +2026/08/23 09:35:56 manager.go:1311: [DEBUG] Env vars for compose: [PATH, HOSTNAME, FELHOM_BOOTSTRAP_PATH, HOME, DOMAIN, DOMAIN, SUBDOMAIN, IMPORT_PATH] (8 app + 0 system) +2026/08/23 09:35:56 manager.go:1320: [DEBUG] Running: docker compose ps -a --format table {{.Name}} {{.Image}} {{.State}} {{.Status}} (in /opt/docker/stacks/privatebin) +2026/08/23 09:35:56 manager.go:1340: [DEBUG] Command completed: docker compose ps -a --format table {{.Name}} {{.Image}} {{.State}} {{.Status}} (took 0.1s) +2026/08/23 09:35:56 manager.go:1400: [INFO] [stacks] Stack privatebin post-start status: +2026/08/23 09:35:56 manager.go:1403: [INFO] [stacks] privatebin privatebin/pdo:2.0.5 running Up 3 seconds (health: starting) +2026/08/23 09:35:58 lifecycle.go:86: [DEBUG] [integrations] OnStackStart: stack=privatebin integrationsFound=0 +2026/08/23 09:36:00 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:36:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:36:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:36:01 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:36:01 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:36:01Z, active_sessions=36 +2026/08/23 09:36:01 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:36:01 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:36:01 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:36:01 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:36:01 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:36:01 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:36:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 1 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:36:01 healthprobe.go:153: [DEBUG] Health probe privatebin: HTTP GET :8080/ → 200 (4ms) +2026/08/23 09:36:01 healthprobe.go:133: [INFO] Health probes: 1 ok (of 1 probed) +2026/08/23 09:36:01 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:36:01 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:36:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:36:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping privatebin — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (7 skipped not due, 1 skipped no container) +2026/08/23 09:36:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:36:11 manager.go:621: [INFO] [stacks] Status refresh: 19 containers across 56 stacks +2026/08/23 09:36:13 auth.go:134: [DEBUG] [web] auth: valid session for POST /api/stacks/privatebin/stop +2026/08/23 09:36:13 router.go:80: [DEBUG] [api] POST /api/stacks/privatebin/stop (path=/stacks/privatebin/stop) +2026/08/23 09:36:13 router.go:566: [INFO] [api] stop requested for stack: privatebin +2026/08/23 09:36:13 router.go:80: [DEBUG] [api] actionStack: action=stop name=privatebin +2026/08/23 09:36:13 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/privatebin — 2 env vars, 0 encrypted, 0 sensitive fields +2026/08/23 09:36:13 desiredstate.go:81: [INFO] [stacks] desired state for privatebin recorded as "stopped" (was "running") +2026/08/23 09:36:13 manager.go:1117: [DEBUG] [stacks] StopStack privatebin: current state=running deployed=true containers=1 +2026/08/23 09:36:13 manager.go:1120: [INFO] [stacks] Stopping stack: privatebin +2026/08/23 09:36:13 [INFO] [stacks] SaveAppConfig: saved config for privatebin +2026/08/23 09:36:13 manager.go:1311: [DEBUG] Env vars for compose: [PATH, HOSTNAME, FELHOM_BOOTSTRAP_PATH, HOME, DOMAIN, DOMAIN, SUBDOMAIN, IMPORT_PATH] (8 app + 0 system) +2026/08/23 09:36:13 manager.go:1320: [DEBUG] Running: docker compose down (in /opt/docker/stacks/privatebin) +2026/08/23 09:36:13 manager.go:1340: [DEBUG] Command completed: docker compose down (took 0.3s) +2026/08/23 09:36:13 manager.go:1129: [INFO] [stacks] Stack privatebin stopped successfully (took 0.3s) +2026/08/23 09:36:13 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:36:13 lifecycle.go:24: [DEBUG] [integrations] OnStackStop: stack=privatebin integrationsFound=0 +2026/08/23 09:36:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:36:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:36:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:36:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:36:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:36:21 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:36:22 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:36:22 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:36:22 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:36:22Z, active_sessions=37 +2026/08/23 09:36:22 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:36:22 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:36:22 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:36:22 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:36:22 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:36:22 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:36:22 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:36:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (614ms) +2026/08/23 09:36:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (604ms) +2026/08/23 09:36:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:36:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:36:31 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:36:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:36:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:36:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:36:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:36:41 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:36:43 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:36:43 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:36:43 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:36:43Z, active_sessions=38 +2026/08/23 09:36:43 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:36:43 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:36:43 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:36:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:36:43 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:36:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:36:43 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4035MB avail≈21863MB +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25927912 → total=25898MB avail=21863MB used=4035MB (15.6%) +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.66 0.56 0.55 4/893 2765" → 1m=0.66 5m=0.56 15m=0.55 +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:36:50 info.go:13: [DEBUG] [system] GetInfo done in 59ms — mem=4035MB/25898MB (15.6%), rootDisk=10.2GB/68.7GB (14.9%), load=0.66/0.56/0.55, temp=52.9°C (hwmon1), cpu=7.7% +2026/08/23 09:36:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:36:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:36:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:36:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:36:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:36:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:36:51 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:36:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:36:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:36:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (532ms) +2026/08/23 09:36:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 533ms) +2026/08/23 09:36:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (631ms) +2026/08/23 09:36:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (624ms) +2026/08/23 09:37:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:37:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:37:01 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:37:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:37:04 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:37:04 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:37:04 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:37:04Z, active_sessions=39 +2026/08/23 09:37:04 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:37:04 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:37:04 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:37:04 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:37:04 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:37:04 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:37:04 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:37:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:37:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:37:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:37:11 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:37:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:37:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:37:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:37:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:37:21 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:37:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:37:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (651ms) +2026/08/23 09:37:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (625ms) +2026/08/23 09:37:25 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:37:25 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:37:25 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:37:25Z, active_sessions=40 +2026/08/23 09:37:25 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:37:25 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:37:25 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:37:25 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:37:25 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:37:25 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:37:25 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:37:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:37:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:37:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:37:31 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:37:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:37:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:37:41 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:37:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:37:46 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:37:47 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:37:47 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:37:47Z, active_sessions=41 +2026/08/23 09:37:47 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:37:47 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:37:47 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:37:47 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:37:47 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:37:47 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:37:47 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4009MB avail≈21889MB +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25959152 → total=25898MB avail=21889MB used=4009MB (15.5%) +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.37 0.50 0.53 6/894 2878" → 1m=0.37 5m=0.50 15m=0.53 +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon2) +2026/08/23 09:37:50 info.go:13: [DEBUG] [system] GetInfo done in 61ms — mem=4009MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.37/0.50/0.53, temp=52.9°C (hwmon2), cpu=2.7% +2026/08/23 09:37:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:37:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:37:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:37:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:37:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:37:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:37:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:37:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:37:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:37:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:37:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:37:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:37:51 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:37:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 44ms) +2026/08/23 09:37:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:37:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:37:51 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:37:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (535ms) +2026/08/23 09:37:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 536ms) +2026/08/23 09:37:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (614ms) +2026/08/23 09:37:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (616ms) +2026/08/23 09:38:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:38:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:38:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:38:01 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:38:08 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:38:08 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:38:08 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:38:08Z, active_sessions=42 +2026/08/23 09:38:08 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:38:08 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:38:08 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:38:08 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:38:08 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:38:08 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:38:08 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:38:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:38:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:38:11 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:38:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:38:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:38:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:38:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:38:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:38:21 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:38:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:38:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (632ms) +2026/08/23 09:38:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (688ms) +2026/08/23 09:38:29 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:38:29 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:38:29 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:38:29Z, active_sessions=43 +2026/08/23 09:38:29 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:38:29 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:38:29 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:38:29 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:38:29 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:38:29 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:38:29 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:38:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:38:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:38:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:38:31 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:38:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:38:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:38:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:38:41 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:38:50 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:38:50 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:38:50 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:38:50Z, active_sessions=44 +2026/08/23 09:38:50 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:38:50 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:38:50 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:38:50 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:38:50 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:38:50 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:38:50 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:38:50 sync.go:189: [INFO] [sync] Starting catalog sync +2026/08/23 09:38:50 sync.go:277: [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main) +2026/08/23 09:38:50 sync.go:279: [DEBUG] [sync] git fetch --depth 1 origin main in /opt/docker/felhom-controller/data/catalog-cache +2026/08/23 09:38:50 sync.go:449: [DEBUG] [sync] Running: git fetch --depth 1 origin main +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4120MB avail≈21778MB +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25828120 → total=25898MB avail=21778MB used=4120MB (15.9%) +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.68 0.56 0.55 5/899 3005" → 1m=0.68 5m=0.56 15m=0.55 +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:38:50 info.go:13: [DEBUG] [system] GetInfo done in 65ms — mem=4120MB/25898MB (15.9%), rootDisk=10.2GB/68.7GB (14.9%), load=0.68/0.56/0.55, temp=52.9°C (hwmon1), cpu=4.3% +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:38:51 scheduler.go:346: [INFO] [scheduler] Running job: hub-report +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job hub-report: execution starting +2026/08/23 09:38:51 builder.go:37: [INFO] [report] Building system report +2026/08/23 09:38:51 builder.go:40: [DEBUG] [report] BuildReport: starting — version=0.223.0, storagePaths=1 +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:38:51 scheduler.go:346: [INFO] [scheduler] Running job: system-health +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job system-health: execution starting +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:38:51 builder.go:62: [DEBUG] [report] BuildReport: configHash=042b71a3123d... (2989 bytes) +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:38:51 scheduler.go:346: [INFO] [scheduler] Running job: offsite-credential-retry +2026/08/23 09:38:51 scheduler.go:346: [INFO] [scheduler] Running job: backup-cache +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job backup-cache: execution starting +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job offsite-credential-retry: execution starting +2026/08/23 09:38:51 scheduler.go:363: [INFO] [scheduler] Job offsite-credential-retry completed (took 0s) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:38:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:38:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:38:51 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:38:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:38:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:38:51 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [bookstack, docmost, kimai, opengist, privatebin] +2026/08/23 09:38:51 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/felhom-drives/hdd_1 → [calibre-web, paperless-ngx, romm] +2026/08/23 09:38:51 backup.go:1063: [INFO] [backup] Found 13 DB dump files across drives +2026/08/23 09:38:51 dbdump.go:128: [DEBUG] DiscoverDatabases: running docker ps to find database containers +2026/08/23 09:38:51 sync.go:449: [DEBUG] [sync] Running: git reset --hard origin/main +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4122MB avail≈21776MB +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25825024 → total=25898MB avail=21776MB used=4122MB (15.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.68 0.56 0.55 11/939 3078" → 1m=0.68 5m=0.56 15m=0.55 +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetInfo done in 79ms — mem=4122MB/25898MB (15.9%), rootDisk=10.2GB/68.7GB (14.9%), load=0.68/0.56/0.55, temp=52.9°C (hwmon1), cpu=4.3% +2026/08/23 09:38:51 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=15.9% (4122MB/25898MB), cpu=4.3%, temp=52.9°C (hwmon1) +2026/08/23 09:38:51 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:38:51 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (16%) +2026/08/23 09:38:51 healthcheck.go:125: [DEBUG] [monitor] CPU: OK (4%) +2026/08/23 09:38:51 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (53°C) +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] actualbudget/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] actualbudget/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] adventurelog/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] adventurelog/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] audiobookshelf/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] audiobookshelf/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] bentopdf/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] bentopdf/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] bookstack/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] bookstack/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] calcom/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] calcom/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] calibre-web/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] calibre-web/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] claper/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] claper/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] code-server/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] code-server/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] crafty-controller/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] crafty-controller/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] docmost/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] docmost/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] emby/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] emby/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] ghost/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] ghost/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] gitea/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] gitea/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] glance/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] glance/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] gokapi/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] gokapi/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] grafana/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] grafana/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] gramps-web/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] gramps-web/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] home-assistant/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] home-assistant/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] homebox/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] homebox/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] homepage/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] homepage/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] immich/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] immich/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] jellyfin/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] jellyfin/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] kimai/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] kimai/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] komga/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] komga/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] mealie/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] mealie/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] n8n/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] n8n/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] navidrome/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] navidrome/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] nextcloud/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] nextcloud/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] onlyoffice/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] onlyoffice/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] opengist/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] opengist/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] outline/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] outline/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] paperless-ngx/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] paperless-ngx/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] papra/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] papra/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] plant-it/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] plant-it/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] plex/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] plex/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] privatebin/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] privatebin/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] radarr/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: 1c05a812256b felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.223.0 +13cfb077ecf8 docmost docmost docmost/docmost:0.95.0 +91041c89bd0d docmost-postgres docmost postgres:16-alpine +41c830a66b1d docmost-redis docmost redis:7-alpine +77031a0c1319 romm romm rommapp/romm:5.0.0 +aa6fe6fa459e romm-redis romm redis:7-alpine +e076270a7d75 romm-db romm mariadb:11.4 +1c704643bc4c paperless-webserver paperless-ngx ghcr.io/paperless-ngx/paperless-ngx:2.20.15 +e31aa0b09dbb paperless-postgres paperless-ng... +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] radarr/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container felhom-controller (image=gitea.dooplex.hu/admin/felhom-controller:0.223.0, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost (image=docmost/docmost:0.95.0, not a database) +2026/08/23 09:38:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: docmost-postgres (id=91041c89bd0d) +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] rallly/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] rallly/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] recipe-importer/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] recipe-importer/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] romm/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] romm/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] seerr/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] seerr/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] sonarr/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] sonarr/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] sparkyfitness/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] sparkyfitness/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] tandoor/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] tandoor/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] termix/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] termix/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] uptime-kuma/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] uptime-kuma/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] vaultwarden/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] vaultwarden/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] vikunja/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] vikunja/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] wanderer/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] wanderer/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] wger/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] wger/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] wishlist/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] wishlist/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] zipline/docker-compose.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:371: [DEBUG] [sync] zipline/.felhom.yml: hash match, skipped +2026/08/23 09:38:51 sync.go:244: [INFO] [sync] Catalog sync complete +2026/08/23 09:38:51 sync.go:116: [INFO] [sync] Periodic sync: Sablonok naprakészek — nincs változás +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4122MB avail≈21776MB +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25825024 → total=25898MB avail=21776MB used=4122MB (15.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.68 0.56 0.55 18/936 3092" → 1m=0.68 5m=0.56 15m=0.55 +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 56.8°C (hwmon2) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetInfo done in 97ms — mem=4122MB/25898MB (15.9%), rootDisk=10.2GB/68.7GB (14.9%), load=0.68/0.56/0.55, temp=56.8°C (hwmon2), cpu=4.3% +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 builder.go:128: [DEBUG] [report] BuildReport: system info collected — cpu=4.3%, mem=4122/25898MB, temp=56.8C +2026/08/23 09:38:51 builder.go:130: [DEBUG] [report] BuildReport: storage entries=2 +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:38:51 dbdump.go:196: [DEBUG] DiscoverDatabases: docmost-postgres → stack=docmost, dbUser=docmost, dbName=docmost +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost-redis (image=redis:7-alpine, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm (image=rommapp/romm:5.0.0, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm-redis (image=redis:7-alpine, not a database) +2026/08/23 09:38:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: romm-db (id=e076270a7d75) +2026/08/23 09:38:51 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:38:51 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:38:51 dbdump.go:196: [DEBUG] DiscoverDatabases: romm-db → stack=romm, dbUser=root, dbName=romm +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-webserver (image=ghcr.io/paperless-ngx/paperless-ngx:2.20.15, not a database) +2026/08/23 09:38:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: paperless-postgres (id=e31aa0b09dbb) +2026/08/23 09:38:51 dbdump.go:894: [DEBUG] DiscoverDatabases: paperless-postgres → stack "paperless-ngx" from the compose project label (the container name would have given "paperless") +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4137MB avail≈21761MB +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25807428 → total=25898MB avail=21761MB used=4137MB (16.0%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.68 0.56 0.55 12/933 3149" → 1m=0.68 5m=0.56 15m=0.55 +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 56.8°C (hwmon2) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetInfo done in 67ms — mem=4137MB/25898MB (16.0%), rootDisk=10.2GB/68.7GB (14.9%), load=0.68/0.56/0.55, temp=56.8°C (hwmon2), cpu=4.3% +2026/08/23 09:38:51 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=16.0% (4137MB/25898MB), cpu=4.3%, temp=56.8°C (hwmon2) +2026/08/23 09:38:51 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:38:51 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (16%) +2026/08/23 09:38:51 healthcheck.go:125: [DEBUG] [monitor] CPU: OK (4%) +2026/08/23 09:38:51 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (57°C) +2026/08/23 09:38:51 dbdump.go:196: [DEBUG] DiscoverDatabases: paperless-postgres → stack=paperless-ngx, dbUser=paperless, dbName=paperless +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-redis (image=redis:7-alpine, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container opengist (image=ghcr.io/thomiceli/opengist:1.13, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container kimai (image=kimai/kimai2:apache-2.57.0, not a database) +2026/08/23 09:38:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: kimai-db (id=9849469a8b29) +2026/08/23 09:38:51 dbdump.go:196: [DEBUG] DiscoverDatabases: kimai-db → stack=kimai, dbUser=root, dbName=kimai +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container calibre-web (image=crocodilestick/calibre-web-automated:v4.0.6, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container bookstack (image=lscr.io/linuxserver/bookstack:26.05.2, not a database) +2026/08/23 09:38:51 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: bookstack-db (id=95dcda149d29) +2026/08/23 09:38:51 dbdump.go:196: [DEBUG] DiscoverDatabases: bookstack-db → stack=bookstack, dbUser=root, dbName=bookstack +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.3.3-stable, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container cloudflared (image=cloudflare/cloudflared:2026.6.0, not a database) +2026/08/23 09:38:51 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container traefik (image=traefik:v3.6.7, not a database) +2026/08/23 09:38:51 dbdump.go:203: [DEBUG] DiscoverDatabases: found 5 database(s), skipped 14 non-DB container(s) +2026/08/23 09:38:51 dbdump.go:206: [INFO] [backup] Discovered 5 databases +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:38:51 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:38:51 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:38:51 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:38:51 [INFO] [backup] Discovered app data: 8 apps +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:38:51 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 scheduler.go:363: [INFO] [scheduler] Job system-health completed (took 232ms) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 backup.go:1133: [INFO] [backup] Backup status cache refreshed +2026/08/23 09:38:51 scheduler.go:363: [INFO] [scheduler] Job backup-cache completed (took 239ms) +2026/08/23 09:38:51 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:38:51 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:38:51 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:38:51 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: starting log scan for 16 containers (since 15m0s) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned bookstack: errors=0 warnings=0 issues=0 (took 22ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned bookstack-db: errors=0 warnings=2 issues=2 (took 19ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned calibre-web: errors=0 warnings=0 issues=0 (took 19ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost: errors=0 warnings=0 issues=0 (took 19ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost-postgres: errors=0 warnings=0 issues=0 (took 20ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost-redis: errors=0 warnings=0 issues=0 (took 21ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned kimai: errors=0 warnings=0 issues=0 (took 24ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned kimai-db: errors=0 warnings=0 issues=0 (took 20ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned opengist: errors=0 warnings=0 issues=0 (took 21ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-webserver: errors=0 warnings=0 issues=0 (took 20ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-postgres: errors=0 warnings=0 issues=0 (took 20ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-redis: errors=0 warnings=0 issues=0 (took 20ms) +2026/08/23 09:38:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (557ms) +2026/08/23 09:38:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 558ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm: errors=0 warnings=0 issues=0 (took 23ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm-redis: errors=0 warnings=0 issues=0 (took 20ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm-db: errors=0 warnings=0 issues=0 (took 19ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned felhom-controller: errors=0 warnings=0 issues=0 (took 29ms) +2026/08/23 09:38:51 logscanner.go:69: [DEBUG] [metrics] logscanner: log scan completed: 16 containers in 338ms +2026/08/23 09:38:51 builder.go:197: [DEBUG] [report] BuildReport: complete — containers=15, health=ok, deployed=8, available=45, app_telemetry=8 +2026/08/23 09:38:51 pusher.go:100: [DEBUG] [report] Push: url=https://hub.felhom.eu/api/v1/report payload=7318 bytes +2026/08/23 09:38:51 pusher.go:134: [INFO] [report] Hub report pushed successfully (7318 bytes) +2026/08/23 09:38:51 settings.go:711: [DEBUG] [settings] saved to /opt/docker/felhom-controller/data/settings.json (9760 bytes) +2026/08/23 09:38:51 settings.go:714: [INFO] [settings] Settings saved +2026/08/23 09:38:51 updater.go:96: [DEBUG] [selfupdate] maybeAutoUpdate: current 0.223.0 >= floor 0.222.0 — no action +2026/08/23 09:38:51 scheduler.go:363: [INFO] [scheduler] Job hub-report completed (took 783ms) +2026/08/23 09:38:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (631ms) +2026/08/23 09:38:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (619ms) +2026/08/23 09:39:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:39:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:39:01 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:39:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:39:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:39:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:39:11 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:39:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 5 targets (1 skipped not due, 1 skipped no container) +2026/08/23 09:39:11 healthprobe.go:153: [DEBUG] Health probe romm: HTTP GET :8080/ → 200 (1ms) +2026/08/23 09:39:11 healthprobe.go:153: [DEBUG] Health probe opengist: API GET :6157/healthcheck → 200 (2ms) +2026/08/23 09:39:11 healthprobe.go:153: [DEBUG] Health probe calibre-web: HTTP GET :8083/ → 302 (6ms) +2026/08/23 09:39:11 healthprobe.go:153: [DEBUG] Health probe kimai: HTTP GET :8001/ → 302 (20ms) +2026/08/23 09:39:11 healthprobe.go:153: [DEBUG] Health probe bookstack: HTTP GET :80/ → 302 (44ms) +2026/08/23 09:39:11 healthprobe.go:133: [INFO] Health probes: 5 ok (of 5 probed) +2026/08/23 09:39:11 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:39:11 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:39:11 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:39:11Z, active_sessions=45 +2026/08/23 09:39:11 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:39:11 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:39:11 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:39:11 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:39:11 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:39:11 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:39:11 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:39:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:39:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:39:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:39:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:39:21 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:39:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:39:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (636ms) +2026/08/23 09:39:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (633ms) +2026/08/23 09:39:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:39:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:39:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:39:31 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:39:32 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:39:33 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:39:33 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:39:33Z, active_sessions=46 +2026/08/23 09:39:33 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:39:33 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:39:33 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:39:33 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:39:33 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:39:33 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:39:33 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:39:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:39:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:39:41 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:39:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈3997MB avail≈21901MB +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25973744 → total=25898MB avail=21901MB used=3997MB (15.4%) +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.51 0.55 0.54 3/895 3588" → 1m=0.51 5m=0.55 15m=0.54 +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:39:50 info.go:13: [DEBUG] [system] GetInfo done in 59ms — mem=3997MB/25898MB (15.4%), rootDisk=10.2GB/68.7GB (14.9%), load=0.51/0.55/0.54, temp=52.9°C (hwmon1), cpu=5.0% +2026/08/23 09:39:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:39:51 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:39:51 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:39:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:39:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:39:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:39:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:39:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:39:51 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:39:51 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:39:51 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:39:51 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:39:51 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:39:51 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 45ms) +2026/08/23 09:39:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:39:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 1 targets (5 skipped not due, 1 skipped no container) +2026/08/23 09:39:51 healthprobe.go:153: [DEBUG] Health probe docmost: HTTP GET :3000/ → 200 (2ms) +2026/08/23 09:39:51 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:39:51 healthprobe.go:133: [INFO] Health probes: 1 ok (of 1 probed) +2026/08/23 09:39:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (549ms) +2026/08/23 09:39:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 550ms) +2026/08/23 09:39:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (686ms) +2026/08/23 09:39:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (642ms) +2026/08/23 09:39:54 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:39:54 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:39:54 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:39:54Z, active_sessions=47 +2026/08/23 09:39:54 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:39:54 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:39:54 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:39:54 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:39:54 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:39:54 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:39:54 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:40:01 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:40:01 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:40:01 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:40:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:01 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:01 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:40:11 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:40:11 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:40:11 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:40:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:11 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:11 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:40:15 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:40:15 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:40:15 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:40:15Z, active_sessions=48 +2026/08/23 09:40:15 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:40:15 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:40:15 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:40:15 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:40:15 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:40:15 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:40:15 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:40:21 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:40:21 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:40:21 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:40:21 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:40:21 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:40:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:21 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:21 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:40:22 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (620ms) +2026/08/23 09:40:23 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (618ms) +2026/08/23 09:40:31 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:40:31 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:40:31 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:40:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:31 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:31 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:40:36 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:45464 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:40:36 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:40:36 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:40:36Z, active_sessions=49 +2026/08/23 09:40:36 auth.go:214: [INFO] [web] Login from 172.18.0.4:45464 +2026/08/23 09:40:36 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:40:36 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:45464 +2026/08/23 09:40:36 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:40:36 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:45464 +2026/08/23 09:40:36 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:40:36 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:45464 +2026/08/23 09:40:41 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:40:41 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:40:41 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:40:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:41 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:41 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4056MB avail≈21842MB +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25903928 → total=25898MB avail=21842MB used=4056MB (15.7%) +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.93 0.65 0.58 3/895 3714" → 1m=0.93 5m=0.65 15m=0.58 +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:40:50 info.go:13: [DEBUG] [system] GetInfo done in 57ms — mem=4056MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.93/0.65/0.58, temp=52.9°C (hwmon1), cpu=2.5% +2026/08/23 09:40:51 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:40:51 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:40:51 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:40:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:51 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:40:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:51 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:40:51 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:40:51 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:40:51 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:40:51 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:40:51 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (544ms) +2026/08/23 09:40:51 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 545ms) +2026/08/23 09:40:52 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (649ms) +2026/08/23 09:40:53 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (641ms) +2026/08/23 09:40:55 main.go:1681: [INFO] Received signal terminated, shutting down... +2026/08/23 09:40:55 quiesce.go:182: [INFO] [quiesce] loop stopping +2026/08/23 09:40:55 scheduler.go:67: [DEBUG] [scheduler] daily job offbox-backup: context cancelled, stopping +2026/08/23 09:40:55 scheduler.go:67: [DEBUG] [scheduler] daily job metrics-prune: context cancelled, stopping +2026/08/23 09:40:55 scheduler.go:67: [DEBUG] [scheduler] daily job db-dump: context cancelled, stopping +2026/08/23 09:40:55 scheduler.go:67: [DEBUG] [scheduler] daily job fill-watch: context cancelled, stopping +2026/08/23 09:40:55 scheduler.go:67: [DEBUG] [scheduler] daily job offsite-abandon-sweep: context cancelled, stopping +2026/08/23 09:40:55 scheduler.go:67: [DEBUG] [scheduler] daily job tier2-backup: context cancelled, stopping +2026/08/23 09:40:55 main.go:1705: [INFO] felhom-controller stopped +2026/08/23 09:40:55 scheduler.go:232: [INFO] [scheduler] Stopping scheduler +2026/08/23 09:40:55 scheduler.go:245: [INFO] [scheduler] All jobs stopped +2026/08/23 09:40:56 main.go:2945: [INFO] local-api: channel up (agent 169.254.253.1:8443) — guest 9201, 3 mount(s) visible +2026/08/23 09:40:56 main.go:2948: [INFO] local-api: mount mp9 → /etc/felhom-bootstrap (storage=/var/lib/felhom-agent/guests/9201/bootstrap, class=, backup=false) +2026/08/23 09:40:56 main.go:2948: [INFO] local-api: mount mp8 → /mnt/felhom-drives (storage=/mnt/felhom-drives, class=, backup=false) +2026/08/23 09:40:56 main.go:2948: [INFO] local-api: mount mp0 → /var/lib/felhom (storage=local-lvm, class=, backup=true) +2026/08/23 09:40:56 main.go:334: [INFO] felhom-controller 0.223.0 starting (customer: demo-hp, domain: enkisfelhom.hu) +2026/08/23 09:40:56 settings.go:620: [INFO] [settings] Loaded settings from /opt/docker/felhom-controller/data/settings.json +2026/08/23 09:40:56 settings.go:1452: [DEBUG] [settings] AutoDiscoverStoragePaths discovered=[/mnt/felhom-drives/hdd_1] fallback="" existing=1 +2026/08/23 09:40:56 main.go:355: [INFO] Encryption key loaded from /opt/docker/felhom-controller/data/encryption.key +2026/08/23 09:40:56 manager.go:222: [INFO] [stacks] Using compose command: docker compose +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:40:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:40:56 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:40:56 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:40:56 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:40:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:40:56 deploy.go:1029: [DEBUG] [stacks] InjectMissingFields: checking 8 stacks +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack privatebin — 2 deploy fields, 2 existing env vars +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack opengist — 2 deploy fields, 2 existing env vars +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack kimai — 5 deploy fields, 5 existing env vars +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack paperless-ngx — 8 deploy fields, 8 existing env vars +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack docmost — 4 deploy fields, 4 existing env vars +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack romm — 6 deploy fields, 6 existing env vars +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack bookstack — 4 deploy fields, 4 existing env vars +2026/08/23 09:40:56 deploy.go:1051: [DEBUG] [stacks] InjectMissingFields: checking stack calibre-web — 3 deploy fields, 3 existing env vars +2026/08/23 09:40:56 deploy.go:1114: [INFO] [stacks] InjectMissingFields: processed 8 stacks +2026/08/23 09:40:56 manager.go:361: [DEBUG] [stacks] MigrateEncryption: checking 8 deployed stacks for plaintext sensitive values +2026/08/23 09:40:56 manager.go:381: [DEBUG] [stacks] MigrateEncryption: checking stack "kimai" (2 sensitive fields) +2026/08/23 09:40:56 manager.go:381: [DEBUG] [stacks] MigrateEncryption: checking stack "paperless-ngx" (3 sensitive fields) +2026/08/23 09:40:56 manager.go:381: [DEBUG] [stacks] MigrateEncryption: checking stack "docmost" (2 sensitive fields) +2026/08/23 09:40:56 manager.go:381: [DEBUG] [stacks] MigrateEncryption: checking stack "romm" (3 sensitive fields) +2026/08/23 09:40:56 manager.go:381: [DEBUG] [stacks] MigrateEncryption: checking stack "bookstack" (2 sensitive fields) +2026/08/23 09:40:56 manager.go:405: [INFO] [stacks] Encryption migration: no stacks needed migration +2026/08/23 09:40:56 sync.go:98: [INFO] [sync] Starting catalog sync (repo: https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git, interval: 15m0s) +2026/08/23 09:40:56 sync.go:189: [INFO] [sync] Starting catalog sync +2026/08/23 09:40:56 desiredstate.go:137: [INFO] [stacks] desired-state backfill: 0 app(s) recorded as running, 1 left unrecorded (state ambiguous — legacy boot behaviour retained) +2026/08/23 09:40:56 sync.go:277: [INFO] [sync] Pulling latest from https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git (branch: main) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] CPUCollector.Start: sampleRate=5s +2026/08/23 09:40:56 quiesce.go:176: [INFO] [quiesce] loop started (poll 5m0s, max-quiesce 30m0s) +2026/08/23 09:40:56 sync.go:279: [DEBUG] [sync] git fetch --depth 1 origin main in /opt/docker/felhom-controller/data/catalog-cache +2026/08/23 09:40:56 sync.go:449: [DEBUG] [sync] Running: git fetch --depth 1 origin main +2026/08/23 09:40:56 main.go:463: [INFO] Metrics store opened at /opt/docker/felhom-controller/data/metrics.db +2026/08/23 09:40:56 main.go:475: [INFO] Metrics collector started (60s interval) +2026/08/23 09:40:56 notifier.go:64: [INFO] Notifier enabled (hub: https://hub.felhom.eu) +2026/08/23 09:40:56 updater.go:96: [DEBUG] [selfupdate] VerifyStartup: checking update state in /opt/docker/felhom-controller/data +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:40:56 updater.go:96: [DEBUG] [selfupdate] VerifyStartup: no pending update (state=&{success 0.216.0 gitea.dooplex.hu/admin/felhom-controller:0.216.0 0.217.0 gitea.dooplex.hu/admin/felhom-controller:0.217.0 2026-08-21T19:48:40Z auto-floor 2026-08-21T19:48:46Z }) +2026/08/23 09:40:56 main.go:597: [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30) +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: status-refresh (every 10s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="status-refresh" interval=10s totalJobs=1 +2026/08/23 09:40:56 offsiteapply.go:151: [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: stack-scan (every 2m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="stack-scan" interval=2m0s totalJobs=2 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: health-probes (every 10s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="health-probes" interval=10s totalJobs=3 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: system-health (every 5m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="system-health" interval=5m0s totalJobs=4 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: deadapp-check (every 30s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="deadapp-check" interval=30s totalJobs=5 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: ring-spill (every 30s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="ring-spill" interval=30s totalJobs=6 +2026/08/23 09:40:56 scheduler.go:132: [INFO] [scheduler] Daily job db-dump scheduled for 2026-08-24 02:30 CEST +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job registered: name="db-dump" schedule="02:30" nextRun=2026-08-24T02:30:00+02:00 totalJobs=7 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: offsite-credential-retry (every 5m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="offsite-credential-retry" interval=5m0s totalJobs=8 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: backup-cache (every 5m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="backup-cache" interval=5m0s totalJobs=9 +2026/08/23 09:40:56 scheduler.go:132: [INFO] [scheduler] Daily job tier2-backup scheduled for 2026-08-24 03:30 CEST +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job registered: name="tier2-backup" schedule="03:30" nextRun=2026-08-24T03:30:00+02:00 totalJobs=10 +2026/08/23 09:40:56 scheduler.go:132: [INFO] [scheduler] Daily job offbox-backup scheduled for 2026-08-24 04:15 CEST +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job registered: name="offbox-backup" schedule="04:15" nextRun=2026-08-24T04:15:00+02:00 totalJobs=11 +2026/08/23 09:40:56 scheduler.go:132: [INFO] [scheduler] Daily job offsite-abandon-sweep scheduled for 2026-08-24 05:10 CEST +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job registered: name="offsite-abandon-sweep" schedule="05:10" nextRun=2026-08-24T05:10:00+02:00 totalJobs=12 +2026/08/23 09:40:56 scheduler.go:132: [INFO] [scheduler] Daily job metrics-prune scheduled for 2026-08-24 04:00 CEST +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job registered: name="metrics-prune" schedule="04:00" nextRun=2026-08-24T04:00:00+02:00 totalJobs=13 +2026/08/23 09:40:56 scheduler.go:132: [INFO] [scheduler] Daily job fill-watch scheduled for 2026-08-24 03:30 CEST +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job registered: name="fill-watch" schedule="03:30" nextRun=2026-08-24T03:30:00+02:00 totalJobs=14 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: hub-report (every 15m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="hub-report" interval=15m0s totalJobs=15 +2026/08/23 09:40:56 main.go:1222: [INFO] Hub reporting enabled (every 15m0s to https://hub.felhom.eu) +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="selfupdate-check" interval=6h0m0s totalJobs=16 +2026/08/23 09:40:56 selftest.go:50: [INFO] ========== Startup Self-Test ========== +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] Docker socket: reachable (v29.7.2) +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] Stacks directory: /opt/docker/stacks +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4063MB avail≈21835MB +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25894952 → total=25898MB avail=21835MB used=4063MB (15.7%) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.94 0.65 0.58 8/904 120" → 1m=0.94 5m=0.65 15m=0.58 +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] Data directory: /opt/docker/felhom-controller/data (writable) +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] System data path: /mnt/sys_drive +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] Storage paths: 1 connected, 0 disconnected +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] GetInfo done in 74ms — mem=4063MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.94/0.65/0.58, temp=52.9°C (hwmon1), cpu=0.0% +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] Git catalog: 53 app definitions found +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] Hub connectivity: https://hub.felhom.eu reachable (HTTP 200) +2026/08/23 09:40:56 selftest.go:68: [INFO] [PASS] Metrics DB: 4.2 MB +2026/08/23 09:40:56 selftest.go:70: [INFO] ======================================== +2026/08/23 09:40:56 selftest.go:71: [INFO] Self-test complete: 8 passed, 0 warnings, 0 failed +2026/08/23 09:40:56 scheduler.go:206: [INFO] [scheduler] Starting scheduler with 16 jobs +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] scheduler started: periodic=10 daily=6 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: geo-verify (every 6h0m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job tier2-backup: next run at 2026-08-24 03:30:00 CEST (waiting 15h49m3s) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:40:56 waiter.go:95: [INFO] [report] hub wait channel active (hold ≤240s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job offsite-abandon-sweep: next run at 2026-08-24 05:10:00 CEST (waiting 17h29m3s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="geo-verify" interval=6h0m0s totalJobs=17 +2026/08/23 09:40:56 main.go:1461: [INFO] Geo-restriction support enabled (CF API token configured) +2026/08/23 09:40:56 server.go:240: [DEBUG] [web] NewServer: initializing web server v0.223.0 +2026/08/23 09:40:56 server.go:241: [DEBUG] [web] NewServer: backup=true scheduler=true alertMgr=true notifier=true updater=true +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job fill-watch: next run at 2026-08-24 03:30:00 CEST (waiting 15h49m3s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job metrics-prune: next run at 2026-08-24 04:00:00 CEST (waiting 16h19m3s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job db-dump: next run at 2026-08-24 02:30:00 CEST (waiting 14h49m3s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] daily job offbox-backup: next run at 2026-08-24 04:15:00 CEST (waiting 16h34m3s) +2026/08/23 09:40:56 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [bookstack, docmost, kimai, opengist, privatebin] +2026/08/23 09:40:56 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/felhom-drives/hdd_1 → [calibre-web, paperless-ngx, romm] +2026/08/23 09:40:56 backup.go:1063: [INFO] [backup] Found 13 DB dump files across drives +2026/08/23 09:40:56 dbdump.go:128: [DEBUG] DiscoverDatabases: running docker ps to find database containers +2026/08/23 09:40:56 server.go:293: [DEBUG] [web] loadTemplates: loaded 79 templates +2026/08/23 09:40:56 server.go:260: [INFO] [web] Auth: using password from settings.json +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: disk-health-check (every 1h0m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="disk-health-check" interval=1h0m0s totalJobs=18 +2026/08/23 09:40:56 scheduler.go:102: [INFO] [scheduler] Registered periodic job: agent-channel-health (every 1m0s) +2026/08/23 09:40:56 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="agent-channel-health" interval=1m0s totalJobs=19 +2026/08/23 09:40:56 server.go:647: [DEBUG] [web] CatchAllMiddleware: controller host=felhom.enkisfelhom.hu +2026/08/23 09:40:56 main.go:1700: [INFO] Web UI listening on :8080 +2026/08/23 09:40:56 manager.go:258: [DEBUG] [integrations] ReapplyConfigForTarget: target=filebrowser integrations=0 +2026/08/23 09:40:56 sync.go:449: [DEBUG] [sync] Running: git reset --hard origin/main +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] actualbudget/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] actualbudget/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] adventurelog/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] adventurelog/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] audiobookshelf/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] audiobookshelf/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] bentopdf/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] bentopdf/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] bookstack/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] bookstack/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] calcom/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] calcom/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] calibre-web/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] calibre-web/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] claper/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] claper/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] code-server/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] code-server/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] crafty-controller/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] crafty-controller/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] docmost/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] docmost/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] emby/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] emby/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] ghost/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] ghost/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] gitea/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] gitea/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] glance/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] glance/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] gokapi/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] gokapi/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] grafana/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] grafana/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] gramps-web/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] gramps-web/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] home-assistant/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] home-assistant/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 waiter.go:132: [DEBUG] [report] wait baseline generation=6 +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] homebox/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] homebox/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] homepage/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] homepage/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] immich/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] immich/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] jellyfin/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] jellyfin/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] kimai/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] kimai/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] komga/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] komga/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] mealie/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] mealie/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] n8n/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] n8n/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] navidrome/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] navidrome/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] nextcloud/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] nextcloud/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] onlyoffice/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] onlyoffice/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] opengist/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] opengist/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] outline/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] outline/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] paperless-ngx/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] paperless-ngx/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] papra/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] papra/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] plant-it/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] plant-it/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] plex/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] plex/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] privatebin/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] privatebin/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] radarr/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] radarr/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] rallly/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] rallly/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] recipe-importer/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] recipe-importer/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] romm/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] romm/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] seerr/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] seerr/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] sonarr/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] sonarr/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] sparkyfitness/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] sparkyfitness/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] tandoor/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] tandoor/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] termix/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] termix/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] uptime-kuma/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] uptime-kuma/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] vaultwarden/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] vaultwarden/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] vikunja/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] vikunja/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] wanderer/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] wanderer/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] wger/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] wger/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] wishlist/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] wishlist/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] zipline/docker-compose.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:371: [DEBUG] [sync] zipline/.felhom.yml: hash match, skipped +2026/08/23 09:40:56 sync.go:244: [INFO] [sync] Catalog sync complete +2026/08/23 09:40:56 sync.go:103: [INFO] [sync] Initial sync: Sablonok naprakészek — nincs változás +2026/08/23 09:40:56 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: 1c05a812256b felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.223.0 +13cfb077ecf8 docmost docmost docmost/docmost:0.95.0 +91041c89bd0d docmost-postgres docmost postgres:16-alpine +41c830a66b1d docmost-redis docmost redis:7-alpine +77031a0c1319 romm romm rommapp/romm:5.0.0 +aa6fe6fa459e romm-redis romm redis:7-alpine +e076270a7d75 romm-db romm mariadb:11.4 +1c704643bc4c paperless-webserver paperless-ngx ghcr.io/paperless-ngx/paperless-ngx:2.20.15 +e31aa0b09dbb paperless-postgres paperless-ng... +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container felhom-controller (image=gitea.dooplex.hu/admin/felhom-controller:0.223.0, not a database) +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost (image=docmost/docmost:0.95.0, not a database) +2026/08/23 09:40:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: docmost-postgres (id=91041c89bd0d) +2026/08/23 09:40:56 dbdump.go:196: [DEBUG] DiscoverDatabases: docmost-postgres → stack=docmost, dbUser=docmost, dbName=docmost +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost-redis (image=redis:7-alpine, not a database) +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm (image=rommapp/romm:5.0.0, not a database) +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm-redis (image=redis:7-alpine, not a database) +2026/08/23 09:40:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: romm-db (id=e076270a7d75) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4065MB avail≈21833MB +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25892764 → total=25898MB avail=21833MB used=4065MB (15.7%) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.94 0.65 0.58 6/923 225" → 1m=0.94 5m=0.65 15m=0.58 +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 56.8°C (hwmon2) +2026/08/23 09:40:56 info.go:13: [DEBUG] [system] GetInfo done in 70ms — mem=4065MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.94/0.65/0.58, temp=56.8°C (hwmon2), cpu=0.0% +2026/08/23 09:40:56 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=15.7% (4065MB/25898MB), cpu=0.0%, temp=56.8°C (hwmon2) +2026/08/23 09:40:56 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:40:56 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (16%) +2026/08/23 09:40:56 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (57°C) +2026/08/23 09:40:56 dbdump.go:196: [DEBUG] DiscoverDatabases: romm-db → stack=romm, dbUser=root, dbName=romm +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-webserver (image=ghcr.io/paperless-ngx/paperless-ngx:2.20.15, not a database) +2026/08/23 09:40:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: paperless-postgres (id=e31aa0b09dbb) +2026/08/23 09:40:56 dbdump.go:894: [DEBUG] DiscoverDatabases: paperless-postgres → stack "paperless-ngx" from the compose project label (the container name would have given "paperless") +2026/08/23 09:40:56 dbdump.go:196: [DEBUG] DiscoverDatabases: paperless-postgres → stack=paperless-ngx, dbUser=paperless, dbName=paperless +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-redis (image=redis:7-alpine, not a database) +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container opengist (image=ghcr.io/thomiceli/opengist:1.13, not a database) +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container kimai (image=kimai/kimai2:apache-2.57.0, not a database) +2026/08/23 09:40:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: kimai-db (id=9849469a8b29) +2026/08/23 09:40:56 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:40:56 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:40:56 dbdump.go:196: [DEBUG] DiscoverDatabases: kimai-db → stack=kimai, dbUser=root, dbName=kimai +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container calibre-web (image=crocodilestick/calibre-web-automated:v4.0.6, not a database) +2026/08/23 09:40:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container bookstack (image=lscr.io/linuxserver/bookstack:26.05.2, not a database) +2026/08/23 09:40:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: bookstack-db (id=95dcda149d29) +2026/08/23 09:40:56 handlers.go:2844: [INFO] [web] FileBrowser sync — no config/compose change, ensured running without recreate (1 storage path(s)) +2026/08/23 09:40:57 dbdump.go:196: [DEBUG] DiscoverDatabases: bookstack-db → stack=bookstack, dbUser=root, dbName=bookstack +2026/08/23 09:40:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.3.3-stable, not a database) +2026/08/23 09:40:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container cloudflared (image=cloudflare/cloudflared:2026.6.0, not a database) +2026/08/23 09:40:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container traefik (image=traefik:v3.6.7, not a database) +2026/08/23 09:40:57 dbdump.go:203: [DEBUG] DiscoverDatabases: found 5 database(s), skipped 14 non-DB container(s) +2026/08/23 09:40:57 dbdump.go:206: [INFO] [backup] Discovered 5 databases +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:40:57 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:40:57 [INFO] [backup] Discovered app data: 8 apps +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:40:57 backup.go:1133: [INFO] [backup] Backup status cache refreshed +2026/08/23 09:40:57 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:40:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:40:57 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:40:57 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=4) +2026/08/23 09:40:57 client.go:67: [DEBUG] [agentapi] agent version seen: 0.130.0 (was "") +2026/08/23 09:40:57 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (695ms) +2026/08/23 09:40:57 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:40:57 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:40:57 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:40:57Z, active_sessions=1 +2026/08/23 09:40:57 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:40:58 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:40:58 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:40:58 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:40:58 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:40:58 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:40:58 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:40:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (668ms) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] CPUCollector: first sample — cpu=13.6% (idle=3412 total=3951) +2026/08/23 09:41:01 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:01 builder.go:37: [INFO] [report] Building system report +2026/08/23 09:41:01 builder.go:40: [DEBUG] [report] BuildReport: starting — version=0.223.0, storagePaths=1 +2026/08/23 09:41:01 builder.go:62: [DEBUG] [report] BuildReport: configHash=042b71a3123d... (2989 bytes) +2026/08/23 09:41:01 notifier.go:206: [DEBUG] PushEvent: type=controller_started severity=info url=https://hub.felhom.eu/api/v1/event +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:41:01 notifier.go:232: [DEBUG] PushEvent: controller_started pushed OK (HTTP 200) +2026/08/23 09:41:01 notifier.go:234: [INFO] Event pushed: controller_started (info) — Controller elindult (0.223.0) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4139MB avail≈21759MB +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25805764 → total=25898MB avail=21759MB used=4139MB (16.0%) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.86 0.64 0.58 3/898 376" → 1m=0.86 5m=0.64 15m=0.58 +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] GetInfo done in 57ms — mem=4139MB/25898MB (16.0%), rootDisk=10.2GB/68.7GB (14.9%), load=0.86/0.64/0.58, temp=52.9°C (hwmon1), cpu=13.6% +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:41:01 builder.go:128: [DEBUG] [report] BuildReport: system info collected — cpu=13.6%, mem=4139/25898MB, temp=52.9C +2026/08/23 09:41:01 builder.go:130: [DEBUG] [report] BuildReport: storage entries=2 +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4139MB avail≈21759MB +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25805768 → total=25898MB avail=21759MB used=4139MB (16.0%) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.86 0.64 0.58 4/898 397" → 1m=0.86 5m=0.64 15m=0.58 +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:41:01 info.go:13: [DEBUG] [system] GetInfo done in 60ms — mem=4139MB/25898MB (16.0%), rootDisk=10.2GB/68.7GB (14.9%), load=0.86/0.64/0.58, temp=52.9°C (hwmon1), cpu=13.6% +2026/08/23 09:41:01 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=16.0% (4139MB/25898MB), cpu=13.6%, temp=52.9°C (hwmon1) +2026/08/23 09:41:01 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:41:01 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (16%) +2026/08/23 09:41:01 healthcheck.go:125: [DEBUG] [monitor] CPU: OK (14%) +2026/08/23 09:41:01 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (53°C) +2026/08/23 09:41:02 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:41:02 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:41:02 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:41:02 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:41:02 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:41:02 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: starting log scan for 16 containers (since 15m0s) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned bookstack: errors=0 warnings=0 issues=0 (took 21ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned bookstack-db: errors=0 warnings=2 issues=2 (took 24ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned calibre-web: errors=0 warnings=0 issues=0 (took 23ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost: errors=0 warnings=0 issues=0 (took 23ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost-postgres: errors=0 warnings=0 issues=0 (took 23ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned docmost-redis: errors=0 warnings=0 issues=0 (took 28ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned kimai: errors=0 warnings=0 issues=0 (took 30ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned kimai-db: errors=0 warnings=0 issues=0 (took 23ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned opengist: errors=0 warnings=0 issues=0 (took 21ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-webserver: errors=0 warnings=0 issues=0 (took 22ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-postgres: errors=0 warnings=0 issues=0 (took 22ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned paperless-redis: errors=0 warnings=0 issues=0 (took 22ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm: errors=0 warnings=0 issues=0 (took 28ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm-redis: errors=0 warnings=0 issues=0 (took 21ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned romm-db: errors=0 warnings=0 issues=0 (took 24ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned felhom-controller: errors=0 warnings=0 issues=0 (took 32ms) +2026/08/23 09:41:02 logscanner.go:69: [DEBUG] [metrics] logscanner: log scan completed: 16 containers in 386ms +2026/08/23 09:41:02 builder.go:197: [DEBUG] [report] BuildReport: complete — containers=15, health=ok, deployed=8, available=45, app_telemetry=8 +2026/08/23 09:41:02 pusher.go:100: [DEBUG] [report] Push: url=https://hub.felhom.eu/api/v1/report payload=7263 bytes +2026/08/23 09:41:02 pusher.go:134: [INFO] [report] Hub report pushed successfully (7263 bytes) +2026/08/23 09:41:02 settings.go:711: [DEBUG] [settings] saved to /opt/docker/felhom-controller/data/settings.json (9760 bytes) +2026/08/23 09:41:02 settings.go:714: [INFO] [settings] Settings saved +2026/08/23 09:41:02 updater.go:96: [DEBUG] [selfupdate] SetFloor: floor "" → "0.222.0" +2026/08/23 09:41:02 updater.go:96: [DEBUG] [selfupdate] maybeAutoUpdate: current 0.223.0 >= floor 0.222.0 — no action +2026/08/23 09:41:02 main.go:1320: [INFO] Startup hub report sent +2026/08/23 09:41:06 offsiteapply.go:151: [INFO] [offsite-apply] settle-gate: GO — at/above floor 0.222.0 (we are 0.223.0), no managed update running +2026/08/23 09:41:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:41:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:41:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 6 targets (0 skipped not due, 1 skipped no container) +2026/08/23 09:41:06 healthprobe.go:153: [DEBUG] Health probe opengist: API GET :6157/healthcheck → 200 (2ms) +2026/08/23 09:41:06 healthprobe.go:153: [DEBUG] Health probe romm: HTTP GET :8080/ → 200 (3ms) +2026/08/23 09:41:06 healthprobe.go:153: [DEBUG] Health probe docmost: HTTP GET :3000/ → 200 (4ms) +2026/08/23 09:41:06 healthprobe.go:153: [DEBUG] Health probe calibre-web: HTTP GET :8083/ → 302 (6ms) +2026/08/23 09:41:06 healthprobe.go:153: [DEBUG] Health probe kimai: HTTP GET :8001/ → 302 (19ms) +2026/08/23 09:41:06 healthprobe.go:153: [DEBUG] Health probe bookstack: HTTP GET :80/ → 302 (31ms) +2026/08/23 09:41:06 healthprobe.go:133: [INFO] Health probes: 6 ok (of 6 probed) +2026/08/23 09:41:11 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:11 main.go:2108: [INFO] [bootrecon] boot window: fleet settled after 10s (3 identical samples 5s apart) — sweeping +2026/08/23 09:41:11 bootrecon.go:255: [INFO] [bootrecon] Boot reconciliation: no boot-orphaned apps (nothing to start) +2026/08/23 09:41:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:41:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:41:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:41:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:19 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:41:19 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:41:19 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:41:19Z, active_sessions=2 +2026/08/23 09:41:19 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:41:19 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:41:19 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:41:19 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:41:19 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:41:19 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:41:19 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:41:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:41:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:41:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:41:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:41:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:41:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:27 updater.go:96: [DEBUG] [selfupdate] queryRegistry: anonymous mode, url=https://gitea.dooplex.hu/v2/admin/felhom-controller/tags/list +2026/08/23 09:41:27 updater.go:96: [DEBUG] [selfupdate] queryRegistry: anonymous plain GET HTTP 401 +2026/08/23 09:41:27 updater.go:96: [DEBUG] [selfupdate] queryRegistry: anonymous token request: https://gitea.dooplex.hu/v2/token?scope=repository%3Aadmin%2Ffelhom-controller%3Apull&service=container_registry +2026/08/23 09:41:27 updater.go:96: [DEBUG] [selfupdate] queryRegistry: anonymous tags/list with Bearer HTTP 200 +2026/08/23 09:41:27 updater.go:96: [DEBUG] [selfupdate] queryRegistry: 15 tags returned: [0.213.0 0.214.0 0.215.0 0.216.0 0.217.0 0.218.0 0.219.0 0.220.0 0.220.1 0.220.2 0.221.0 0.221.1 0.222.0 0.223.0 latest] +2026/08/23 09:41:27 updater.go:178: [INFO] [selfupdate] Current version 0.223.0 is up to date +2026/08/23 09:41:27 updater.go:96: [DEBUG] [selfupdate] version comparison: current=0.223.0 (0.223.0), latest=0.223.0 (0.223.0), cmp=0, updateAvailable=false +2026/08/23 09:41:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (621ms) +2026/08/23 09:41:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (610ms) +2026/08/23 09:41:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:41:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:41:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:41:40 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:41:40 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:41:40 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:41:40Z, active_sessions=3 +2026/08/23 09:41:40 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:41:40 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:41:40 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:41:40 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:41:40 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:41:40 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:41:40 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:41:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:41:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:41:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4078MB avail≈21820MB +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25878452 → total=25898MB avail=21820MB used=4078MB (15.7%) +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.73 0.64 0.58 4/894 743" → 1m=0.73 5m=0.64 15m=0.58 +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 53.1°C (hwmon2) +2026/08/23 09:41:56 info.go:13: [DEBUG] [system] GetInfo done in 62ms — mem=4078MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.73/0.64/0.58, temp=53.1°C (hwmon2), cpu=6.0% +2026/08/23 09:41:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:41:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:41:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:41:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:41:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:41:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:41:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:41:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:41:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:41:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (544ms) +2026/08/23 09:41:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 544ms) +2026/08/23 09:41:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (665ms) +2026/08/23 09:41:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (625ms) +2026/08/23 09:42:01 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:42:01 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:42:01 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:42:01Z, active_sessions=4 +2026/08/23 09:42:01 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:42:01 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:42:01 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:42:01 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:42:01 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:42:01 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:42:01 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:42:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:42:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:42:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:42:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:42:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:42:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:42:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:42:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:42:22 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:42:22 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:42:22 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:42:22Z, active_sessions=5 +2026/08/23 09:42:22 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:42:22 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:42:22 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:42:22 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:42:22 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:42:22 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:42:22 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:42:26 info.go:13: [DEBUG] [system] GetDiskUsage: path="/" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:42:26 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:42:26 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:42:26 fillwatch.go:256: [INFO] [fillwatch] checked 3 filesystem(s), 0 unreadable/skipped, 0 notification(s); bands: all ok +2026/08/23 09:42:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:42:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:42:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:42:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:42:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:42:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:42:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (680ms) +2026/08/23 09:42:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (648ms) +2026/08/23 09:42:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:42:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:42:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:42:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:42:43 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:42:43 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:42:43 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:42:43Z, active_sessions=6 +2026/08/23 09:42:43 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:42:43 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:42:43 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:42:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:42:43 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:42:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:42:43 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:42:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:42:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:42:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:42:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4016MB avail≈21882MB +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25950324 → total=25898MB avail=21882MB used=4016MB (15.5%) +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.85 0.70 0.61 3/893 855" → 1m=0.85 5m=0.70 15m=0.61 +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:42:56 info.go:13: [DEBUG] [system] GetInfo done in 63ms — mem=4016MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.85/0.70/0.61, temp=52.9°C (hwmon1), cpu=3.5% +2026/08/23 09:42:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:42:56 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:42:56 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:42:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:42:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:42:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:42:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:42:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:42:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:42:56 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:42:56 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:42:56 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:42:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:42:56 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 50ms) +2026/08/23 09:42:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:42:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:42:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:42:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (555ms) +2026/08/23 09:42:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 556ms) +2026/08/23 09:42:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (641ms) +2026/08/23 09:42:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (626ms) +2026/08/23 09:43:05 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:43:05 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:43:05 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:43:05Z, active_sessions=7 +2026/08/23 09:43:05 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:43:05 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:43:05 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:43:05 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:43:05 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:43:05 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:43:05 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:43:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:43:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:43:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:43:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:43:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:43:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:43:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:43:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:43:26 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:43:26 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:43:26 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:43:26Z, active_sessions=8 +2026/08/23 09:43:26 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:43:26 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:43:26 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:43:26 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:43:26 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:43:26 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:43:26 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:43:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:43:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:43:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:43:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:43:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:43:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:43:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (641ms) +2026/08/23 09:43:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (615ms) +2026/08/23 09:43:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:43:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:43:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:43:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:43:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:43:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:43:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:43:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:43:47 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:43:47 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:43:47 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:43:47Z, active_sessions=9 +2026/08/23 09:43:47 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:43:47 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:43:47 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:43:47 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:43:47 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:43:47 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:43:47 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4018MB avail≈21880MB +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25948952 → total=25898MB avail=21880MB used=4018MB (15.5%) +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.59 0.66 0.60 6/893 981" → 1m=0.59 5m=0.66 15m=0.60 +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:43:56 info.go:13: [DEBUG] [system] GetInfo done in 62ms — mem=4018MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.59/0.66/0.60, temp=52.9°C (hwmon1), cpu=4.3% +2026/08/23 09:43:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:43:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:43:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:43:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:43:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:43:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:43:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:43:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:43:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:43:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (586ms) +2026/08/23 09:43:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 587ms) +2026/08/23 09:43:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (633ms) +2026/08/23 09:43:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (611ms) +2026/08/23 09:44:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:44:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:44:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:44:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:44:08 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:44:08 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:44:08 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:44:08Z, active_sessions=10 +2026/08/23 09:44:08 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:44:08 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:44:08 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:44:08 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:44:08 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:44:08 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:44:08 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:44:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:44:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:44:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:44:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:44:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:44:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:44:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:44:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:44:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:44:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:44:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (615ms) +2026/08/23 09:44:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (700ms) +2026/08/23 09:44:29 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:44:29 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:44:29 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:44:29Z, active_sessions=11 +2026/08/23 09:44:29 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:44:29 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:44:29 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:44:29 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:44:29 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:44:29 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:44:29 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:44:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:44:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:44:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:44:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:44:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:44:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:44:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:44:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:44:51 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:44:51 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:44:51 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:44:51Z, active_sessions=12 +2026/08/23 09:44:51 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:44:51 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:44:51 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:44:51 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:44:51 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:44:51 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:44:51 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4043MB avail≈21855MB +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25919228 → total=25898MB avail=21855MB used=4043MB (15.6%) +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.63 0.66 0.60 4/893 1100" → 1m=0.63 5m=0.66 15m=0.60 +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:44:56 info.go:13: [DEBUG] [system] GetInfo done in 58ms — mem=4043MB/25898MB (15.6%), rootDisk=10.2GB/68.7GB (14.9%), load=0.63/0.66/0.60, temp=52.9°C (hwmon1), cpu=4.2% +2026/08/23 09:44:56 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:44:56 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:44:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:44:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:44:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:44:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:44:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:44:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:44:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:44:56 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:44:56 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:44:56 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:44:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:44:56 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 47ms) +2026/08/23 09:44:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:44:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:44:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:44:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (697ms) +2026/08/23 09:44:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 697ms) +2026/08/23 09:44:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (609ms) +2026/08/23 09:44:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (638ms) +2026/08/23 09:45:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:45:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:45:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:45:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:45:12 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:45:12 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:45:12 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:45:12Z, active_sessions=13 +2026/08/23 09:45:12 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:45:12 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:45:12 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:45:12 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:45:12 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:45:12 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:45:12 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:45:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:45:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:45:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:45:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:45:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:45:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:45:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:45:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:45:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:45:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:45:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (648ms) +2026/08/23 09:45:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (669ms) +2026/08/23 09:45:33 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:45:33 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:45:33 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:45:33Z, active_sessions=14 +2026/08/23 09:45:33 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:45:33 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:45:33 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:45:33 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:45:33 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:45:33 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:45:33 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:45:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:45:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:45:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:45:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:45:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:45:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:45:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:45:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:45:54 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:45:54 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:45:54 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:45:54Z, active_sessions=15 +2026/08/23 09:45:54 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:45:54 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:45:54 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:45:54 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:45:54 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:45:54 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:45:54 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4097MB avail≈21801MB +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25855604 → total=25898MB avail=21801MB used=4097MB (15.8%) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.75 0.68 0.62 5/894 1221" → 1m=0.75 5m=0.68 15m=0.62 +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] GetInfo done in 64ms — mem=4097MB/25898MB (15.8%), rootDisk=10.2GB/68.7GB (14.9%), load=0.75/0.68/0.62, temp=52.9°C (hwmon1), cpu=4.1% +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:45:56 scheduler.go:346: [INFO] [scheduler] Running job: backup-cache +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:45:56 scheduler.go:346: [INFO] [scheduler] Running job: offsite-credential-retry +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job offsite-credential-retry: execution starting +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job backup-cache: execution starting +2026/08/23 09:45:56 scheduler.go:363: [INFO] [scheduler] Job offsite-credential-retry completed (took 0s) +2026/08/23 09:45:56 scheduler.go:346: [INFO] [scheduler] Running job: system-health +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job system-health: execution starting +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:45:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:45:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:45:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:45:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:45:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:45:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:45:56 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [bookstack, docmost, kimai, opengist, privatebin] +2026/08/23 09:45:56 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/felhom-drives/hdd_1 → [calibre-web, paperless-ngx, romm] +2026/08/23 09:45:56 backup.go:1063: [INFO] [backup] Found 13 DB dump files across drives +2026/08/23 09:45:56 dbdump.go:128: [DEBUG] DiscoverDatabases: running docker ps to find database containers +2026/08/23 09:45:56 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: 1c05a812256b felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.223.0 +13cfb077ecf8 docmost docmost docmost/docmost:0.95.0 +91041c89bd0d docmost-postgres docmost postgres:16-alpine +41c830a66b1d docmost-redis docmost redis:7-alpine +77031a0c1319 romm romm rommapp/romm:5.0.0 +aa6fe6fa459e romm-redis romm redis:7-alpine +e076270a7d75 romm-db romm mariadb:11.4 +1c704643bc4c paperless-webserver paperless-ngx ghcr.io/paperless-ngx/paperless-ngx:2.20.15 +e31aa0b09dbb paperless-postgres paperless-ng... +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container felhom-controller (image=gitea.dooplex.hu/admin/felhom-controller:0.223.0, not a database) +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost (image=docmost/docmost:0.95.0, not a database) +2026/08/23 09:45:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: docmost-postgres (id=91041c89bd0d) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4071MB avail≈21827MB +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25886216 → total=25898MB avail=21827MB used=4071MB (15.7%) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.75 0.68 0.62 4/906 1273" → 1m=0.75 5m=0.68 15m=0.62 +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:45:56 info.go:13: [DEBUG] [system] GetInfo done in 71ms — mem=4071MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.75/0.68/0.62, temp=52.9°C (hwmon1), cpu=7.4% +2026/08/23 09:45:56 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=15.7% (4071MB/25898MB), cpu=7.4%, temp=52.9°C (hwmon1) +2026/08/23 09:45:56 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:45:56 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (16%) +2026/08/23 09:45:56 healthcheck.go:125: [DEBUG] [monitor] CPU: OK (7%) +2026/08/23 09:45:56 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (53°C) +2026/08/23 09:45:56 dbdump.go:196: [DEBUG] DiscoverDatabases: docmost-postgres → stack=docmost, dbUser=docmost, dbName=docmost +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost-redis (image=redis:7-alpine, not a database) +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm (image=rommapp/romm:5.0.0, not a database) +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm-redis (image=redis:7-alpine, not a database) +2026/08/23 09:45:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: romm-db (id=e076270a7d75) +2026/08/23 09:45:56 dbdump.go:196: [DEBUG] DiscoverDatabases: romm-db → stack=romm, dbUser=root, dbName=romm +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-webserver (image=ghcr.io/paperless-ngx/paperless-ngx:2.20.15, not a database) +2026/08/23 09:45:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: paperless-postgres (id=e31aa0b09dbb) +2026/08/23 09:45:56 dbdump.go:894: [DEBUG] DiscoverDatabases: paperless-postgres → stack "paperless-ngx" from the compose project label (the container name would have given "paperless") +2026/08/23 09:45:56 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:45:56 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:45:56 dbdump.go:196: [DEBUG] DiscoverDatabases: paperless-postgres → stack=paperless-ngx, dbUser=paperless, dbName=paperless +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-redis (image=redis:7-alpine, not a database) +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container opengist (image=ghcr.io/thomiceli/opengist:1.13, not a database) +2026/08/23 09:45:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container kimai (image=kimai/kimai2:apache-2.57.0, not a database) +2026/08/23 09:45:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: kimai-db (id=9849469a8b29) +2026/08/23 09:45:57 dbdump.go:196: [DEBUG] DiscoverDatabases: kimai-db → stack=kimai, dbUser=root, dbName=kimai +2026/08/23 09:45:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container calibre-web (image=crocodilestick/calibre-web-automated:v4.0.6, not a database) +2026/08/23 09:45:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container bookstack (image=lscr.io/linuxserver/bookstack:26.05.2, not a database) +2026/08/23 09:45:57 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: bookstack-db (id=95dcda149d29) +2026/08/23 09:45:57 dbdump.go:196: [DEBUG] DiscoverDatabases: bookstack-db → stack=bookstack, dbUser=root, dbName=bookstack +2026/08/23 09:45:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.3.3-stable, not a database) +2026/08/23 09:45:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container cloudflared (image=cloudflare/cloudflared:2026.6.0, not a database) +2026/08/23 09:45:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container traefik (image=traefik:v3.6.7, not a database) +2026/08/23 09:45:57 dbdump.go:203: [DEBUG] DiscoverDatabases: found 5 database(s), skipped 14 non-DB container(s) +2026/08/23 09:45:57 dbdump.go:206: [INFO] [backup] Discovered 5 databases +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:45:57 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:45:57 [INFO] [backup] Discovered app data: 8 apps +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:45:57 backup.go:1133: [INFO] [backup] Backup status cache refreshed +2026/08/23 09:45:57 scheduler.go:363: [INFO] [scheduler] Job backup-cache completed (took 200ms) +2026/08/23 09:45:57 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:45:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:45:57 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:45:57 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/08/23 09:45:57 scheduler.go:363: [INFO] [scheduler] Job system-health completed (took 210ms) +2026/08/23 09:45:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (633ms) +2026/08/23 09:45:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 634ms) +2026/08/23 09:45:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (695ms) +2026/08/23 09:45:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (644ms) +2026/08/23 09:46:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:46:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:46:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 5m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:46:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:46:15 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:46:15 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:46:15 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:46:15Z, active_sessions=16 +2026/08/23 09:46:15 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:46:15 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:46:15 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:46:15 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:46:15 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:46:16 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:46:16 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:46:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:46:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:46:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:46:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 6 targets (0 skipped not due, 1 skipped no container) +2026/08/23 09:46:16 healthprobe.go:153: [DEBUG] Health probe romm: HTTP GET :8080/ → 200 (1ms) +2026/08/23 09:46:16 healthprobe.go:153: [DEBUG] Health probe opengist: API GET :6157/healthcheck → 200 (2ms) +2026/08/23 09:46:16 healthprobe.go:153: [DEBUG] Health probe docmost: HTTP GET :3000/ → 200 (4ms) +2026/08/23 09:46:16 healthprobe.go:153: [DEBUG] Health probe calibre-web: HTTP GET :8083/ → 302 (6ms) +2026/08/23 09:46:16 healthprobe.go:153: [DEBUG] Health probe kimai: HTTP GET :8001/ → 302 (26ms) +2026/08/23 09:46:16 healthprobe.go:153: [DEBUG] Health probe bookstack: HTTP GET :80/ → 302 (42ms) +2026/08/23 09:46:16 healthprobe.go:133: [INFO] Health probes: 6 ok (of 6 probed) +2026/08/23 09:46:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:46:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:46:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:46:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:46:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:46:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:46:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (640ms) +2026/08/23 09:46:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (663ms) +2026/08/23 09:46:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:46:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:46:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:46:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:46:37 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:46:37 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:46:37 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:46:37Z, active_sessions=17 +2026/08/23 09:46:37 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:46:37 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:46:37 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:46:37 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:46:37 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:46:37 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:46:37 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:46:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:46:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:46:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:46:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4052MB avail≈21846MB +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25908740 → total=25898MB avail=21846MB used=4052MB (15.6%) +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.51 0.63 0.60 3/893 1536" → 1m=0.51 5m=0.63 15m=0.60 +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 53.0°C (hwmon2) +2026/08/23 09:46:56 info.go:13: [DEBUG] [system] GetInfo done in 63ms — mem=4052MB/25898MB (15.6%), rootDisk=10.2GB/68.7GB (14.9%), load=0.51/0.63/0.60, temp=53.0°C (hwmon2), cpu=1.2% +2026/08/23 09:46:56 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:46:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:46:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:46:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:46:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:46:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:46:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:46:56 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:46:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:46:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:46:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:46:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:46:56 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:46:56 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:46:56 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:46:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:46:56 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 78ms) +2026/08/23 09:46:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (620ms) +2026/08/23 09:46:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 621ms) +2026/08/23 09:46:58 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:46:58 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:46:58 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:46:58Z, active_sessions=18 +2026/08/23 09:46:58 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:46:58 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:46:58 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:46:58 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:46:58 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:46:58 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:46:58 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:46:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (646ms) +2026/08/23 09:46:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (630ms) +2026/08/23 09:47:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:47:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:47:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:47:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:47:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:47:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:47:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:47:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:47:19 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:47:19 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:47:19 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:47:19Z, active_sessions=19 +2026/08/23 09:47:19 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:47:19 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:47:19 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:47:19 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:47:19 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:47:19 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:47:19 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:47:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:47:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:47:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:47:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:47:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:47:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:47:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (745ms) +2026/08/23 09:47:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (699ms) +2026/08/23 09:47:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:47:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:47:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:47:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:47:40 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:47:40 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:47:40 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:47:40Z, active_sessions=20 +2026/08/23 09:47:40 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:47:40 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:47:40 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:47:40 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:47:40 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:47:40 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:47:40 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:47:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:47:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:47:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:47:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈3998MB avail≈21900MB +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25972356 → total=25898MB avail=21900MB used=3998MB (15.4%) +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.32 0.56 0.58 4/893 1660" → 1m=0.32 5m=0.56 15m=0.58 +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.0°C (hwmon0) +2026/08/23 09:47:56 info.go:13: [DEBUG] [system] GetInfo done in 56ms — mem=3998MB/25898MB (15.4%), rootDisk=10.2GB/68.7GB (14.9%), load=0.32/0.56/0.58, temp=52.0°C (hwmon0), cpu=3.7% +2026/08/23 09:47:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:47:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:47:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:47:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:47:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:47:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:47:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:47:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:47:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:47:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (564ms) +2026/08/23 09:47:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 565ms) +2026/08/23 09:47:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (649ms) +2026/08/23 09:47:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (639ms) +2026/08/23 09:48:01 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:48:02 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:48:02 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:48:02Z, active_sessions=21 +2026/08/23 09:48:02 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:48:02 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:48:02 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:48:02 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:48:02 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:48:02 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:48:02 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:48:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:48:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:48:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:48:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:48:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:48:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:48:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:48:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:48:23 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:48:23 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:48:23 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:48:23Z, active_sessions=22 +2026/08/23 09:48:23 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:48:23 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:48:23 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:48:23 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:48:23 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:48:23 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:48:23 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:48:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:48:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:48:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:48:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:48:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:48:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:48:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (629ms) +2026/08/23 09:48:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (615ms) +2026/08/23 09:48:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:48:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:48:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:48:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:48:44 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:48:44 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:48:44 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:48:44Z, active_sessions=23 +2026/08/23 09:48:44 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:48:44 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:48:44 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:48:44 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:48:44 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:48:44 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:48:44 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:48:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:48:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:48:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:48:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈3977MB avail≈21921MB +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25997412 → total=25898MB avail=21921MB used=3977MB (15.4%) +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.49 0.56 0.58 5/893 1773" → 1m=0.49 5m=0.56 15m=0.58 +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.0°C (hwmon0) +2026/08/23 09:48:56 info.go:13: [DEBUG] [system] GetInfo done in 61ms — mem=3977MB/25898MB (15.4%), rootDisk=10.2GB/68.7GB (14.9%), load=0.49/0.56/0.58, temp=52.0°C (hwmon0), cpu=1.2% +2026/08/23 09:48:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:48:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:48:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:48:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:48:56 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:48:56 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:48:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:48:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:48:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:48:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:48:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:48:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:48:56 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:48:56 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:48:56 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:48:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:48:56 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 71ms) +2026/08/23 09:48:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (594ms) +2026/08/23 09:48:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 595ms) +2026/08/23 09:48:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (605ms) +2026/08/23 09:48:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (648ms) +2026/08/23 09:49:05 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:49:05 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:49:05 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:49:05Z, active_sessions=24 +2026/08/23 09:49:05 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:49:05 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:49:05 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:49:05 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:49:05 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:49:05 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:49:05 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:49:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:49:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:49:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 2m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:49:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:49:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:49:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:49:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:49:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:49:26 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:49:26 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:49:26 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:49:26Z, active_sessions=25 +2026/08/23 09:49:26 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:49:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:49:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:49:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:49:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:49:26 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:49:26 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:49:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:49:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:26 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:49:26 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:49:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:49:26 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:49:26 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:49:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (617ms) +2026/08/23 09:49:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (637ms) +2026/08/23 09:49:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:49:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:49:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:49:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:49:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:49:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:49:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:49:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:49:47 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:49:48 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:49:48 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:49:48Z, active_sessions=26 +2026/08/23 09:49:48 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:49:48 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:49:48 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:49:48 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:49:48 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:49:48 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:49:48 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4073MB avail≈21825MB +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25882852 → total=25898MB avail=21825MB used=4073MB (15.7%) +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.33 0.50 0.55 3/893 1903" → 1m=0.33 5m=0.50 15m=0.55 +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:49:56 info.go:13: [DEBUG] [system] GetInfo done in 61ms — mem=4073MB/25898MB (15.7%), rootDisk=10.2GB/68.7GB (14.9%), load=0.33/0.50/0.55, temp=52.9°C (hwmon1), cpu=3.7% +2026/08/23 09:49:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:49:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:49:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:49:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:49:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:49:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:49:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:49:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:49:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:49:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (526ms) +2026/08/23 09:49:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 527ms) +2026/08/23 09:49:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (620ms) +2026/08/23 09:49:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (635ms) +2026/08/23 09:50:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:50:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:50:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:50:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 3m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:50:09 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:50:09 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:50:09 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:50:09Z, active_sessions=27 +2026/08/23 09:50:09 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:50:09 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:50:09 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:50:09 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:50:09 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:50:09 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:50:09 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:50:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:50:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:50:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:50:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:50:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:50:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:50:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:50:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:50:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:50:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:50:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (617ms) +2026/08/23 09:50:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (649ms) +2026/08/23 09:50:30 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:50:30 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:50:30 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:50:30Z, active_sessions=28 +2026/08/23 09:50:30 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:50:30 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:50:30 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:50:30 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:50:30 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:50:30 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:50:30 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:50:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:50:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:50:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:50:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:50:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:50:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:50:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:50:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:50:51 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:50:51 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:50:51 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:50:51Z, active_sessions=29 +2026/08/23 09:50:51 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:50:51 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:50:51 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:50:51 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:50:51 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:50:51 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:50:51 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4014MB avail≈21884MB +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25952764 → total=25898MB avail=21884MB used=4014MB (15.5%) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.66 0.58 0.58 4/894 2018" → 1m=0.66 5m=0.58 15m=0.58 +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] GetInfo done in 62ms — mem=4014MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.66/0.58/0.58, temp=52.9°C (hwmon1), cpu=6.5% +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:50:56 scheduler.go:346: [INFO] [scheduler] Running job: backup-cache +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:50:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:50:56 scheduler.go:346: [INFO] [scheduler] Running job: stack-scan +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job stack-scan: execution starting +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job backup-cache: execution starting +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:50:56 scheduler.go:346: [INFO] [scheduler] Running job: system-health +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job system-health: execution starting +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:50:56 scheduler.go:346: [INFO] [scheduler] Running job: offsite-credential-retry +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job offsite-credential-retry: execution starting +2026/08/23 09:50:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:50:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:50:56 scheduler.go:363: [INFO] [scheduler] Job offsite-credential-retry completed (took 0s) +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "actualbudget" deployed=false composePath=/opt/docker/stacks/actualbudget/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "audiobookshelf" deployed=false composePath=/opt/docker/stacks/audiobookshelf/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bentopdf" deployed=false composePath=/opt/docker/stacks/bentopdf/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "bookstack" deployed=true composePath=/opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calcom" deployed=false composePath=/opt/docker/stacks/calcom/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "calibre-web" deployed=true composePath=/opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "claper" deployed=false composePath=/opt/docker/stacks/claper/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "cloudflared" deployed=false composePath=/opt/docker/stacks/cloudflared/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "code-server" deployed=false composePath=/opt/docker/stacks/code-server/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "crafty-controller" deployed=false composePath=/opt/docker/stacks/crafty-controller/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "docmost" deployed=true composePath=/opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "emby" deployed=false composePath=/opt/docker/stacks/emby/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "filebrowser" deployed=false composePath=/opt/docker/stacks/filebrowser/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "ghost" deployed=false composePath=/opt/docker/stacks/ghost/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gitea" deployed=false composePath=/opt/docker/stacks/gitea/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "glance" deployed=false composePath=/opt/docker/stacks/glance/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gokapi" deployed=false composePath=/opt/docker/stacks/gokapi/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "grafana" deployed=false composePath=/opt/docker/stacks/grafana/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "gramps-web" deployed=false composePath=/opt/docker/stacks/gramps-web/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "home-assistant" deployed=false composePath=/opt/docker/stacks/home-assistant/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homebox" deployed=false composePath=/opt/docker/stacks/homebox/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "homepage" deployed=false composePath=/opt/docker/stacks/homepage/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "immich" deployed=false composePath=/opt/docker/stacks/immich/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "jellyfin" deployed=false composePath=/opt/docker/stacks/jellyfin/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "kimai" deployed=true composePath=/opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "komga" deployed=false composePath=/opt/docker/stacks/komga/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "mealie" deployed=false composePath=/opt/docker/stacks/mealie/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "n8n" deployed=false composePath=/opt/docker/stacks/n8n/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "navidrome" deployed=false composePath=/opt/docker/stacks/navidrome/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "nextcloud" deployed=false composePath=/opt/docker/stacks/nextcloud/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "onlyoffice" deployed=false composePath=/opt/docker/stacks/onlyoffice/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "opengist" deployed=true composePath=/opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "outline" deployed=false composePath=/opt/docker/stacks/outline/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "paperless-ngx" deployed=true composePath=/opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:50:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:50:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "papra" deployed=false composePath=/opt/docker/stacks/papra/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plant-it" deployed=false composePath=/opt/docker/stacks/plant-it/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "plex" deployed=false composePath=/opt/docker/stacks/plex/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "privatebin" deployed=true composePath=/opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "radarr" deployed=false composePath=/opt/docker/stacks/radarr/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "rallly" deployed=false composePath=/opt/docker/stacks/rallly/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "recipe-importer" deployed=false composePath=/opt/docker/stacks/recipe-importer/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "romm" deployed=true composePath=/opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "seerr" deployed=false composePath=/opt/docker/stacks/seerr/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sonarr" deployed=false composePath=/opt/docker/stacks/sonarr/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "tandoor" deployed=false composePath=/opt/docker/stacks/tandoor/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "termix" deployed=false composePath=/opt/docker/stacks/termix/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "traefik" deployed=false composePath=/opt/docker/stacks/traefik/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "uptime-kuma" deployed=false composePath=/opt/docker/stacks/uptime-kuma/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vaultwarden" deployed=false composePath=/opt/docker/stacks/vaultwarden/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "vikunja" deployed=false composePath=/opt/docker/stacks/vikunja/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wanderer" deployed=false composePath=/opt/docker/stacks/wanderer/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wger" deployed=false composePath=/opt/docker/stacks/wger/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "wishlist" deployed=false composePath=/opt/docker/stacks/wishlist/docker-compose.yml +2026/08/23 09:50:56 manager.go:502: [DEBUG] [stacks] ScanStacks: found stack "zipline" deployed=false composePath=/opt/docker/stacks/zipline/docker-compose.yml +2026/08/23 09:50:56 manager.go:1547: [DEBUG] [stacks] getCatalogTemplateSlugs: found 53 template slugs in /opt/docker/felhom-controller/data/catalog-cache/templates +2026/08/23 09:50:56 manager.go:539: [DEBUG] [stacks] ScanStacks: catalog has 53 template slugs for orphan detection +2026/08/23 09:50:56 manager.go:570: [INFO] [stacks] ScanStacks complete: 56 stacks found (8 deployed, 48 available) +2026/08/23 09:50:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:50:56 scheduler.go:363: [INFO] [scheduler] Job stack-scan completed (took 53ms) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4002MB avail≈21896MB +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25967212 → total=25898MB avail=21896MB used=4002MB (15.5%) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.66 0.58 0.58 6/911 2066" → 1m=0.66 5m=0.58 15m=0.58 +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 52.9°C (hwmon1) +2026/08/23 09:50:56 info.go:13: [DEBUG] [system] GetInfo done in 70ms — mem=4002MB/25898MB (15.5%), rootDisk=10.2GB/68.7GB (14.9%), load=0.66/0.58/0.58, temp=52.9°C (hwmon1), cpu=6.5% +2026/08/23 09:50:56 healthcheck.go:42: [DEBUG] [monitor] Raw values: disk=14.9%, hdd=0.6% (configured=true), mem=15.5% (4002MB/25898MB), cpu=6.5%, temp=52.9°C (hwmon1) +2026/08/23 09:50:56 healthcheck.go:74: [DEBUG] [monitor] SSD disk: OK (15%) +2026/08/23 09:50:56 healthcheck.go:107: [DEBUG] [monitor] Memory: OK (15%) +2026/08/23 09:50:56 healthcheck.go:125: [DEBUG] [monitor] CPU: OK (7%) +2026/08/23 09:50:56 healthcheck.go:143: [DEBUG] [monitor] Temperature: OK (53°C) +2026/08/23 09:50:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:50:56 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [bookstack, docmost, kimai, opengist, privatebin] +2026/08/23 09:50:56 backup.go:434: [DEBUG] groupStacksByDrive: /mnt/felhom-drives/hdd_1 → [calibre-web, paperless-ngx, romm] +2026/08/23 09:50:56 backup.go:1063: [INFO] [backup] Found 13 DB dump files across drives +2026/08/23 09:50:56 dbdump.go:128: [DEBUG] DiscoverDatabases: running docker ps to find database containers +2026/08/23 09:50:56 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: 1c05a812256b felhom-controller gitea.dooplex.hu/admin/felhom-controller:0.223.0 +13cfb077ecf8 docmost docmost docmost/docmost:0.95.0 +91041c89bd0d docmost-postgres docmost postgres:16-alpine +41c830a66b1d docmost-redis docmost redis:7-alpine +77031a0c1319 romm romm rommapp/romm:5.0.0 +aa6fe6fa459e romm-redis romm redis:7-alpine +e076270a7d75 romm-db romm mariadb:11.4 +1c704643bc4c paperless-webserver paperless-ngx ghcr.io/paperless-ngx/paperless-ngx:2.20.15 +e31aa0b09dbb paperless-postgres paperless-ng... +2026/08/23 09:50:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container felhom-controller (image=gitea.dooplex.hu/admin/felhom-controller:0.223.0, not a database) +2026/08/23 09:50:56 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost (image=docmost/docmost:0.95.0, not a database) +2026/08/23 09:50:56 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: docmost-postgres (id=91041c89bd0d) +2026/08/23 09:50:56 healthcheck.go:157: [DEBUG] [monitor] Docker daemon: OK +2026/08/23 09:50:56 healthcheck.go:165: [DEBUG] [monitor] Checking 4 protected containers: [traefik cloudflared felhom-controller filebrowser] +2026/08/23 09:50:57 dbdump.go:196: [DEBUG] DiscoverDatabases: docmost-postgres → stack=docmost, dbUser=docmost, dbName=docmost +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container docmost-redis (image=redis:7-alpine, not a database) +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm (image=rommapp/romm:5.0.0, not a database) +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container romm-redis (image=redis:7-alpine, not a database) +2026/08/23 09:50:57 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: romm-db (id=e076270a7d75) +2026/08/23 09:50:57 dbdump.go:196: [DEBUG] DiscoverDatabases: romm-db → stack=romm, dbUser=root, dbName=romm +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-webserver (image=ghcr.io/paperless-ngx/paperless-ngx:2.20.15, not a database) +2026/08/23 09:50:57 dbdump.go:176: [DEBUG] DiscoverDatabases: found postgres container: paperless-postgres (id=e31aa0b09dbb) +2026/08/23 09:50:57 dbdump.go:894: [DEBUG] DiscoverDatabases: paperless-postgres → stack "paperless-ngx" from the compose project label (the container name would have given "paperless") +2026/08/23 09:50:57 dbdump.go:196: [DEBUG] DiscoverDatabases: paperless-postgres → stack=paperless-ngx, dbUser=paperless, dbName=paperless +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container paperless-redis (image=redis:7-alpine, not a database) +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container opengist (image=ghcr.io/thomiceli/opengist:1.13, not a database) +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container kimai (image=kimai/kimai2:apache-2.57.0, not a database) +2026/08/23 09:50:57 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: kimai-db (id=9849469a8b29) +2026/08/23 09:50:57 dbdump.go:196: [DEBUG] DiscoverDatabases: kimai-db → stack=kimai, dbUser=root, dbName=kimai +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container calibre-web (image=crocodilestick/calibre-web-automated:v4.0.6, not a database) +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container bookstack (image=lscr.io/linuxserver/bookstack:26.05.2, not a database) +2026/08/23 09:50:57 dbdump.go:176: [DEBUG] DiscoverDatabases: found mariadb container: bookstack-db (id=95dcda149d29) +2026/08/23 09:50:57 healthcheck.go:175: [DEBUG] [monitor] All protected containers running +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:50:57 healthcheck.go:192: [INFO] [monitor] Health check: status=ok +2026/08/23 09:50:57 healthcheck.go:196: [DEBUG] [monitor] Final status: ok (issues=0, warnings=0, info=5) +2026/08/23 09:50:57 scheduler.go:363: [INFO] [scheduler] Job system-health completed (took 217ms) +2026/08/23 09:50:57 dbdump.go:196: [DEBUG] DiscoverDatabases: bookstack-db → stack=bookstack, dbUser=root, dbName=bookstack +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container filebrowser (image=gtstef/filebrowser:1.3.3-stable, not a database) +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container cloudflared (image=cloudflare/cloudflared:2026.6.0, not a database) +2026/08/23 09:50:57 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container traefik (image=traefik:v3.6.7, not a database) +2026/08/23 09:50:57 dbdump.go:203: [DEBUG] DiscoverDatabases: found 5 database(s), skipped 14 non-DB container(s) +2026/08/23 09:50:57 dbdump.go:206: [INFO] [backup] Discovered 5 databases +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/bookstack/docker-compose.yml +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/calibre-web/docker-compose.yml +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/docmost/docker-compose.yml +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/kimai/docker-compose.yml +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/opengist/docker-compose.yml +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 2 HDD mounts for /opt/docker/stacks/paperless-ngx/docker-compose.yml +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/privatebin/docker-compose.yml +2026/08/23 09:50:57 [INFO] [stacks] ParseComposeHDDMounts: found 1 HDD mounts for /opt/docker/stacks/romm/docker-compose.yml +2026/08/23 09:50:57 [INFO] [backup] Discovered app data: 8 apps +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/sys_drive" total=68.7 GB used=10.2 GB avail=55.0GB (14.9%) +2026/08/23 09:50:57 info.go:13: [DEBUG] [system] GetDiskUsage: path="/mnt/felhom-drives/hdd_1" total=937.8 GB used=5.9 GB avail=884.2GB (0.6%) +2026/08/23 09:50:57 backup.go:1133: [INFO] [backup] Backup status cache refreshed +2026/08/23 09:50:57 scheduler.go:363: [INFO] [scheduler] Job backup-cache completed (took 249ms) +2026/08/23 09:50:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (596ms) +2026/08/23 09:50:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 598ms) +2026/08/23 09:50:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (626ms) +2026/08/23 09:50:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (725ms) +2026/08/23 09:51:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:51:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:51:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:51:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 4m50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:51:12 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:51:12 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:51:12 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:51:12Z, active_sessions=30 +2026/08/23 09:51:12 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:51:12 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:51:12 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:51:12 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:51:12 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:51:12 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:51:12 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:51:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:51:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:51:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:51:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 6 targets (0 skipped not due, 1 skipped no container) +2026/08/23 09:51:16 healthprobe.go:153: [DEBUG] Health probe romm: HTTP GET :8080/ → 200 (2ms) +2026/08/23 09:51:16 healthprobe.go:153: [DEBUG] Health probe opengist: API GET :6157/healthcheck → 200 (2ms) +2026/08/23 09:51:16 healthprobe.go:153: [DEBUG] Health probe docmost: HTTP GET :3000/ → 200 (3ms) +2026/08/23 09:51:16 healthprobe.go:153: [DEBUG] Health probe calibre-web: HTTP GET :8083/ → 302 (6ms) +2026/08/23 09:51:16 healthprobe.go:153: [DEBUG] Health probe kimai: HTTP GET :8001/ → 302 (21ms) +2026/08/23 09:51:16 healthprobe.go:153: [DEBUG] Health probe bookstack: HTTP GET :80/ → 302 (35ms) +2026/08/23 09:51:16 healthprobe.go:133: [INFO] Health probes: 6 ok (of 6 probed) +2026/08/23 09:51:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:51:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:51:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:51:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:51:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:51:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:51:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (618ms) +2026/08/23 09:51:29 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (623ms) +2026/08/23 09:51:33 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:51:34 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:51:34 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:51:34Z, active_sessions=31 +2026/08/23 09:51:34 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:51:34 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:51:34 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:51:34 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:51:34 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:51:34 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:51:34 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:51:36 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:51:36 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:51:36 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:51:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:36 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 20s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:36 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:51:46 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:51:46 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:51:46 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:51:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:46 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 30s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:46 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:51:55 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:51:55 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:51:55 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:51:55Z, active_sessions=32 +2026/08/23 09:51:55 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:51:55 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:51:55 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:51:55 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:51:55 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:51:55 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:51:55 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] GetInfo starting (hddPath="/mnt/felhom-drives/hdd_1", hasCPUCollector=true) +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] readMemInfo: guest cap=25898MB (host total was 30714460KB) → used≈4095MB avail≈21803MB +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] readMemInfo: totalKB=30714460 availKB=25857048 → total=25898MB avail=21803MB used=4095MB (15.8%) +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/" bsize=4096 total=68.7GB used=10.2GB avail=55.0GB (14.9%) +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] readDiskUsage: path="/mnt/felhom-drives/hdd_1" bsize=4096 total=937.8GB used=5.9GB avail=884.2GB (0.6%) +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] readLoadAvg: raw="0.48 0.53 0.56 3/891 2343" → 1m=0.48 5m=0.53 15m=0.56 +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] readThermalZones: /sys — found 1 zones +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] readTemperature: found via hwmon at /sys — 54.1°C (hwmon2) +2026/08/23 09:51:56 info.go:13: [DEBUG] [system] GetInfo done in 65ms — mem=4095MB/25898MB (15.8%), rootDisk=10.2GB/68.7GB (14.9%), load=0.48/0.53/0.56, temp=54.1°C (hwmon2), cpu=4.0% +2026/08/23 09:51:56 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:51:56 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:51:56 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:51:56 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:51:56 scheduler.go:346: [INFO] [scheduler] Running job: agent-channel-health +2026/08/23 09:51:56 scheduler.go:67: [DEBUG] [scheduler] job agent-channel-health: execution starting +2026/08/23 09:51:56 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:51:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:56 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 40s ago, effective interval 5m0s, healthy=true +2026/08/23 09:51:56 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:51:56 main.go:1731: [INFO] [deadapp] check alive: 20 scans since boot, 8 deployed app(s) evaluated, 0 currently down +2026/08/23 09:51:56 main.go:1760: [INFO] [deadapp] 1 stopped app(s) have NO recorded customer intent, so their dead-app alarm is suppressed by the unknown-intent fallback (R-386): privatebin. This closes itself as each app is started or stopped through the interface. +2026/08/23 09:51:57 client.go:1142: [DEBUG] [agentapi] GET /storage -> 200 (569ms) +2026/08/23 09:51:57 scheduler.go:363: [INFO] [scheduler] Job agent-channel-health completed (took 569ms) +2026/08/23 09:51:58 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (659ms) +2026/08/23 09:51:59 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (636ms) +2026/08/23 09:52:06 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:52:06 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:52:06 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:52:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:06 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 50s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:06 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:52:09 auth.go:146: [DEBUG] [web] login attempt from 172.17.0.1:54596 (X-Forwarded-For: ) +2026/08/23 09:52:09 auth.go:194: [DEBUG] [web] login successful from 172.17.0.1, creating session +2026/08/23 09:52:09 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:52:09Z, active_sessions=33 +2026/08/23 09:52:09 auth.go:214: [INFO] [web] Login from 172.17.0.1:54596 +2026/08/23 09:52:09 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks +2026/08/23 09:52:09 router.go:80: [DEBUG] [api] GET /api/stacks (path=/stacks) +2026/08/23 09:52:16 auth.go:146: [DEBUG] [web] login attempt from 172.18.0.4:59100 (X-Forwarded-For: 172.18.0.1) +2026/08/23 09:52:16 auth.go:194: [DEBUG] [web] login successful from 172.18.0.1, creating session +2026/08/23 09:52:16 auth.go:260: [DEBUG] [web] session created, expires=2026-08-30T09:52:16Z, active_sessions=34 +2026/08/23 09:52:16 auth.go:214: [INFO] [web] Login from 172.18.0.4:59100 +2026/08/23 09:52:16 auth.go:134: [DEBUG] [web] auth: valid session for GET / +2026/08/23 09:52:16 server.go:393: [DEBUG] [web] ServeHTTP: GET / from 172.18.0.4:59100 +2026/08/23 09:52:16 auth.go:134: [DEBUG] [web] auth: valid session for GET /launcher +2026/08/23 09:52:16 server.go:393: [DEBUG] [web] ServeHTTP: GET /launcher from 172.18.0.4:59100 +2026/08/23 09:52:16 auth.go:134: [DEBUG] [web] auth: valid session for GET /backup/offbox/status +2026/08/23 09:52:16 server.go:393: [DEBUG] [web] ServeHTTP: GET /backup/offbox/status from 172.18.0.4:59100 +2026/08/23 09:52:16 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:52:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:16 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m0s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:16 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:52:16 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:52:16 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:52:26 scheduler.go:67: [DEBUG] [scheduler] job deadapp-check: execution starting +2026/08/23 09:52:26 scheduler.go:67: [DEBUG] [scheduler] job ring-spill: execution starting +2026/08/23 09:52:26 scheduler.go:67: [DEBUG] [scheduler] job health-probes: execution starting +2026/08/23 09:52:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping opengist — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping kimai — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping docmost — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping romm — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping bookstack — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:26 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping calibre-web — last check 1m10s ago, effective interval 5m0s, healthy=true +2026/08/23 09:52:26 healthprobe.go:76: [DEBUG] [stacks] RunHealthProbes: collected 0 targets (6 skipped not due, 1 skipped no container) +2026/08/23 09:52:26 scheduler.go:67: [DEBUG] [scheduler] job status-refresh: execution starting +2026/08/23 09:52:26 manager.go:621: [INFO] [stacks] Status refresh: 18 containers across 56 stacks +2026/08/23 09:52:28 client.go:1142: [DEBUG] [agentapi] GET /disks -> 200 (665ms) diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-15-scenarioG-before.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-15-scenarioG-before.txt new file mode 100644 index 00000000..1c247b7b --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-15-scenarioG-before.txt @@ -0,0 +1,4 @@ +=== SCENARIO G — open the settings page and Save, changing NOTHING === +-- stored BEFORE -- +/var/lib/felhom/docker/volumes/felhom-controller-data/_data/data/settings.json +/var/lib/docker/volumes/felhom-controller-data/_data/data/settings.json diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-16-scenarioG-roundtrip.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-16-scenarioG-roundtrip.txt new file mode 100644 index 00000000..e8ae790a --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-16-scenarioG-roundtrip.txt @@ -0,0 +1,46 @@ +=== SCENARIO G — open the settings page and Save, changing NOTHING === +-- stored BEFORE (sha256 + value) -- + enabled_events: null + sha256 : 74234e98afe7498fb5daf1f36ac2d78a + email set : False + +-- RENDER the page, take exactly what it ticked, POST it back unchanged -- + render=200 + ticked boxes : 10 + save=200 + +-- stored AFTER -- + enabled_events: null + sha256 : 74234e98afe7498fb5daf1f36ac2d78a +=== SCENARIO G — REDONE === +First attempt was INCONCLUSIVE and is reported: demo-hp has NO notification prefs, so the +page rendered the DEFAULTS ticked and the save was refused by the empty-email wipe guard. +Stored bytes were unchanged — but for the wrong reason. Seeding prefs makes it a real round trip. + + seed=200 + BEFORE: ["backup_failed", "db_dump_failed", "node_down", "disk_warning", "disk_critical", "expected_backup_missed", "expected_dbdump_missed"] + sha : 10840f3a95bac168f0d7c79760998138 + + -- now RENDER and SAVE, changing nothing -- + render=200 + ticked: 7 email= + save=200 + AFTER : ["backup_failed", "db_dump_failed", "node_down", "disk_warning", "disk_critical", "expected_backup_missed", "expected_dbdump_missed"] + sha : 10840f3a95bac168f0d7c79760998138 +=== SCENARIO G — THIRD attempt, and the first CONCLUSIVE one === +Attempt 2 also refused: the email spans THREE LINES, so a single-line grep read it as +empty and the wipe guard declined the save — while still answering 200. A warning beside a +success reads as a success; the sha matching meant NOTHING was saved, not that nothing changed. + + BEFORE: ["backup_failed", "db_dump_failed", "node_down", "disk_warning", "disk_critical", "expected_backup_missed", "expected_dbdump_missed"] + sha : 10840f3a95bac168f0d7c79760998138 + render=200 + email read : [drill@felhom.eu] ticked: 7 + HTTP=200 + refusal banner present? : 0 (0 = a REAL save) + AFTER : ["backup_failed", "db_dump_failed", "node_down", "disk_warning", "disk_critical", "expected_backup_missed", "expected_dbdump_missed"] + sha : 10840f3a95bac168f0d7c79760998138 +-- restoring demo-hp's notification settings to their pre-drill state (no email, no events) -- + restore=200 + enabled_events: null + email set : False diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-17-scenarioH-before.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-17-scenarioH-before.txt new file mode 100644 index 00000000..ac10e463 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-17-scenarioH-before.txt @@ -0,0 +1,6 @@ +=== SCENARIO H — the hub receives an unknown severity === +NOTE: the LIVE hub is still v0.106.0 (the manifest bump is not synced yet), so this run is the +BEFORE picture. It is repeated after the hub deploy. + +-- hub version now -- +gitea.dooplex.hu/admin/felhom-hub:0.106.0 diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-18-golden-bake.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-18-golden-bake.txt new file mode 100644 index 00000000..1c2e35bb --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-18-golden-bake.txt @@ -0,0 +1,11 @@ +=== GOLDEN 0.223.0 — acceptance markers, each counted === +docker OK (overlay2 : 1 +including mount point : 2 +upload OK (HTTP 201) : 1 +excluding (must be 0) : 0 +FATAL (must be 0) : 0 + docker OK (overlay2; data-root /var/lib/docker) +GOLDEN_VERSION=0.223.0 +GOLDEN_SHA256=9eaf39ac39219b42ec9e6cbf890275febcdcc6f53325fe0c0f591d3431044f17 +-- round trip from the published URL -- + ranged GET http=206 diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-19-scenarioH-after.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-19-scenarioH-after.txt new file mode 100644 index 00000000..aada3ab2 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-19-scenarioH-after.txt @@ -0,0 +1,9 @@ +=== SCENARIO H — LIVE hub v0.107.0, bad severity === + api key length: 64 + POST /event (severity=warn) http=200 + POST /event (severity=error, control) http=200 + +-- THE NEW LINE in the hub's own log -- +2026/08/23 11:59:07 [WARN] [api] Event from demo-hp: severity "warn" is not in {info,warning,error,critical} — coercing to "info", which severityNotifies DROPS, so this backup_failed alert will reach NOBODY. Fix the emitting controller; this event is stored but not routed. +2026/08/23 11:59:07 [INFO] Event from demo-hp: backup_failed (info) — R-387 scenario H probe +2026/08/23 11:59:07 [INFO] Event from demo-hp: backup_failed (error) — R-387 scenario H control diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-20-endstate.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-20-endstate.txt new file mode 100644 index 00000000..5231bf02 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/live-20-endstate.txt @@ -0,0 +1,30 @@ +=== END STATE — every app healthy, planted data untouched === +2026-08-23T09:59:32Z +controller: gitea.dooplex.hu/admin/felhom-controller:0.223.0 Up 18 minutes (healthy) + +bookstack Up 7 hours (healthy) +bookstack-db Up 28 minutes (healthy) +calibre-web Up 7 hours (healthy) +docmost Up 4 hours (healthy) +docmost-postgres Up 4 hours (healthy) +docmost-redis Up 4 hours (healthy) +filebrowser Up 42 hours (healthy) +kimai Up 7 hours (healthy) +kimai-db Up 7 hours (healthy) +opengist Up 7 hours (healthy) +paperless-postgres Up 7 hours (healthy) +paperless-redis Up 7 hours (healthy) +paperless-webserver Up 7 hours (healthy) +privatebin Up 7 minutes (healthy) +romm Up 7 hours (healthy) +romm-db Up 7 hours (healthy) +romm-redis Up 7 hours (healthy) +traefik Up 42 hours + +-- intents restored -- + privatebin desired_state: running + bookstack desired_state: running + docmost desired_state: running +/root/privatebin-app.yaml.bak + (backup file still present — removing) + notification prefs: null email_set= False diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-1-R329-emitter.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-1-R329-emitter.txt new file mode 100644 index 00000000..a431f305 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-1-R329-emitter.txt @@ -0,0 +1,8 @@ +### RED-PROOF 1 (R-329) — mutation: app_start_failed severity back to "warn" ### +### layer: the EMITTER — the last point at which the bad value still exists ### +--- FAIL: TestR329_EveryEmittedSeverityIsInTheHubVocabulary (0.16s) + r329_severity_contract_test.go:203: /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/notify/notifier.go:561:30: emit(...) emits severity "warn", which is NOT in the hub's vocabulary {info, warning, error, critical}. + r329_severity_contract_test.go:138: checked 30 severity literals across the controller +FAIL +FAIL gitea.dooplex.hu/admin/felhom-controller/internal/notify 0.163s +FAIL diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-2-R386-intent.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-2-R386-intent.txt new file mode 100644 index 00000000..f67dd1f4 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-2-R386-intent.txt @@ -0,0 +1,11 @@ +### RED-PROOF 2 (R-386) — mutation: userStopped reverted to the state guess ### +### layer: classifyRunStates — the single derivation point where the guess was made ### +--- FAIL: TestR386_OutOfBandStopWithRunningIntentAlarms (0.00s) + r386_intent_test.go:51: dead-app banner = [], want exactly privatebin — nobody asked for this app to be stopped, so its being stopped is a fault (measured silent on demo-hp 2026-08-23) +--- FAIL: TestR386_AbsentIntentSuppressesButIsAnnounced (0.00s) + r386_intent_test.go:94: IntentUnknown = false — the suppression happened but nothing records it, so an operator cannot answer 'how many apps am I blind to?'. A rule without a mechanism is not a rule +--- FAIL: TestR386_TheSchedulerWiresBothHalves (0.01s) + r386_intent_test.go:243: stacks.DesiredStateOf is never called from main.go — the classifier is back to guessing from the state (R-386) +FAIL +FAIL gitea.dooplex.hu/admin/felhom-controller/cmd/controller 0.023s +FAIL diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-3-part4-migration.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-3-part4-migration.txt new file mode 100644 index 00000000..397a8c50 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-3-part4-migration.txt @@ -0,0 +1,8 @@ +### RED-PROOF 3 (Part 4) — mutation: sameEventSet no-op guard removed ### +### layer: the SAVE handler — where a render-then-save would rewrite stored bytes ### +--- FAIL: TestR329Part4_RoundTripIsByteIdentical (0.04s) + --- FAIL: TestR329Part4_RoundTripIsByteIdentical/defaults (0.01s) + r329_toggle_split_test.go:115: a no-op save CHANGED the stored settings. +FAIL +FAIL gitea.dooplex.hu/admin/felhom-controller/internal/web 0.048s +FAIL diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-4-R387-ingest.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-4-R387-ingest.txt new file mode 100644 index 00000000..5278ae15 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-4-R387-ingest.txt @@ -0,0 +1,7 @@ +### RED-PROOF 4 (R-387) — mutation: the ingest WARN line removed ### +### layer: INGEST — the last point at which the offending value still exists ### +--- FAIL: TestR387_UnknownSeverityIsCoercedAndAnnounced (0.02s) + r387_severity_visibility_test.go:89: the hub rewrote a severity and said nothing — this is R-387, and it is how two features shipped undeliverable for months. log="[INFO] Event from c1: backup_failed (info) — test message\n" +FAIL +FAIL gitea.dooplex.hu/admin/felhom-hub/internal/api 0.143s +FAIL diff --git a/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-5-fillwatch-consequence.txt b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-5-fillwatch-consequence.txt new file mode 100644 index 00000000..5e7e2a57 --- /dev/null +++ b/documentation/audits/DRILL-r329-r386-2026-08-23/evidence/redproof-5-fillwatch-consequence.txt @@ -0,0 +1,11 @@ +### RED-PROOF 5 (R-329, fillwatch) — REDONE ### +### first attempt was INERT: an earlier 'if next == prev { continue }' makes 'next < prev' +### and 'next <= prev' behave identically. Reported as a finding. ### +### mutation: the de-escalation guard REMOVED, so BandOK reaches the notify seam ### +### layer: Check() — the invariant lives THERE, not in Severity() ### +--- FAIL: TestR329_FillwatchNeverEmitsTheEmptySeverity (0.00s) + r329_severity_test.go:62: notified with band ok → severity "" (event type ""): the hub coerces an unknown severity to "info" and then drops it, so this alert would reach NOBODY + r329_severity_test.go:67: notified with severity "", outside the hub vocabulary + r329_severity_test.go:70: 4 crossings notified, every one with a routable severity +FAIL +FAIL gitea.dooplex.hu/admin/felhom-controller/internal/fillwatch 0.004s diff --git a/documentation/backlog/CLOSED-ITEMS.md b/documentation/backlog/CLOSED-ITEMS.md index 9eaf9607..ee00264a 100644 --- a/documentation/backlog/CLOSED-ITEMS.md +++ b/documentation/backlog/CLOSED-ITEMS.md @@ -162,3 +162,5 @@ | **R-107** | **No offsite action unpacks the named-volume tars Tier-3 captures on every run.** Shipped in v0.218.0. | **CLOSED — migrated from ROADMAP 2026-08-22** | full text: `git show fddfe00ce268:documentation/backlog/OPEN-ITEMS.md` | | **R-383** | **The double-failure message told the customer their previous state was saved, and named a file that was not there.** Shipped in controller v0.222.0. Evidence: `audits/DRILL-r384-dead-db-alarm-2026-08-23/`. **Reasoning kept:** *One of the two ways a rollback fails is that the undo copy is missing — so the sentence was most likely to be false in exactly the case it was printed.* **Do NOT simply drop the filename:** an operator needs it, and R-351's lesson is that a refusal naming nothing forces someone to remember what the product already knows — so the absent case still names WHERE the file should have been. **A zero-length dump counts as MISSING**, because a 0-byte file restores nothing and calling it present is the same false reassurance one step smaller. The check is `os.Stat` and deliberately not an integrity test: this runs at the end of a failed restore on a machine that may be unwell, and presence is the honest claim available there. | **CLOSED — SHIPPED** (controller v0.222.0, 2026-08-23; `undoCopyPhrase`, four cases, plus an AST seam test that the message is still wired to the builder) | full text: `git show 1eb64bec5183:documentation/backlog/OPEN-ITEMS.md` | | **R-384** | **An app whose DATABASE had died raised no dead-app alarm — the wrong question answered first.** Shipped in controller v0.222.0. Evidence: `audits/DRILL-r384-dead-db-alarm-2026-08-23/`. **Reasoning kept:** *The defect was the ORDER of two questions, not the `unhealthy` exclusion.* "Is a SUPERVISED member dead?" and "is a RUNNING member failing its healthcheck?" are different questions, and the second was answering the first — a dying database drags its own front end `unhealthy`, so the symptom the fault causes was what suppressed the alarm for it. **`IsDownState` is byte-identical and `unhealthy` stays excluded** — an unhealthy container is RUNNING, and folding it in reintroduces the flapping that exclusion exists to stop; **no new state was minted**, `StateDegraded` already means this. **Two things had to move and either alone leaves the defect standing:** the hoist, AND widening "some members are up" from `running > 0` to *any member not in the down bucket* — the old guard made the R-51 block unreachable in precisely the case it was written for. **The register's own suggested fix was WRONG and is recorded as such:** it proposed a sustained-`unhealthy` threshold on the `crashLoopAfter` model; the actual defect needed no threshold at all. **PROVEN LIVE the only way it can be** — the same fixture that printed `0 currently down` on 2026-08-22 printed **`1 currently down`** on 2026-08-23, with `app_start_failed` 7 s after the stop and the banner reading *„…nem fut: BookStack (degraded)"*. Scenario D measured **0 alarms across 9 scans** through a full stop→start cycle. | **CLOSED — SHIPPED + PROVEN-LIVE** (controller v0.222.0, 2026-08-23) | full text: `git show 1eb64bec5183:documentation/backlog/OPEN-ITEMS.md` | +| **R-329** | **`app_start_failed` was emitted with severity `"warn"`, so every one of them was delivered to nobody.** Shipped in controller v0.223.0 (+ hub v0.107.0). Evidence: `audits/DRILL-r329-r386-2026-08-23/`. **Reasoning kept:** *The vocabulary is EXACT and it is the HUB's, not ours* — `{info, warning, error, critical}`; anything else is coerced to `info` at ingest and dropped by `severityNotifies` before BOTH legs. **This was the SECOND occurrence** (`DiskAlertKind.Severity` until v0.215.0), and its comment had recorded the lesson — **a comment is not a guard**, so the guard is now an AST walk over the whole controller, with the six variable-passing call sites registered by name because a walk cannot follow a variable and *an unlisted limit is not a limit, it is a hole*. **The register's own framing was that the DECISION was the work** — should a stopped app mail the customer at all? Answered: **operator always, customer OFF by default**, because `processOperator` never consults customer preferences, so one word fixed the operator leg and left the customer leg exactly where the ruling wanted it. **Deliberately NOT added to `operatorOnlyEvents`** — that would make the new toggle visible, flickable and structurally incapable of delivering. **Measured on the live hub DB: 91 events stored all-time, ZERO notification rows before the fix; one operator row, `warning`/`sent`, after it.** | **CLOSED — SHIPPED + PROVEN-LIVE** (controller v0.223.0 + hub v0.107.0, 2026-08-23) | full text: `git show 68a9f5475cd2:documentation/backlog/OPEN-ITEMS.md` | +| **R-386** | **A single-container app stopped out of band raised no alarm, and a comment stated the opposite as settled fact.** Shipped in controller v0.223.0. Evidence: `audits/DRILL-r329-r386-2026-08-23/`. **Reasoning kept:** *the state test was guessing at something the product already knows.* `DesiredState` records the customer's intent, has **exactly one writer**, and is tri-state; `StateExited` never survives aggregation, so no state test can separate an out-of-band stop from a customer stop. The ruling: `Stopped` → no alarm, `Running` → **alarm**, **absent → UNKNOWN, keep today's behaviour AND announce it**. *Reading unknown as "nobody asked" would, on the first cycle after upgrade, e-mail about every app any owner ever deliberately stopped — fleet-wide, from a field that predates the intent it is being asked about.* **A rule without a mechanism is a wish:** every such suppression sets `IntentUnknown` and the names are logged at INFO, so an operator can answer *"how many apps am I blind to?"*. **`failedRestart` must still lift a `Stopped` intent or F-CRIT-1 re-opens.** **Fenced act: adding a `DesiredState` WRITER** — twelve of `StopStack`'s fourteen callers are machines. Proven live: alarm 24 s after an out-of-band `docker compose stop`, heartbeat `1 currently down` against the previous day's `0`; and with intent removed, suppressed *plus* the log line naming the app. **0 of 8 deployed apps on `demo-hp` carry an absent intent.** | **CLOSED — SHIPPED + PROVEN-LIVE** (controller v0.223.0, 2026-08-23) | full text: `git show 68a9f5475cd2:documentation/backlog/OPEN-ITEMS.md` | diff --git a/documentation/backlog/OPEN-ITEMS.md b/documentation/backlog/OPEN-ITEMS.md index f2c561eb..81473ee5 100644 --- a/documentation/backlog/OPEN-ITEMS.md +++ b/documentation/backlog/OPEN-ITEMS.md @@ -137,7 +137,8 @@ the fault was real. Full observables: `tests/campaign11-evidence-2026-08-05/jour | ID | What | State | |---|---|---| | **R-385** | **A controller was built, baked AND vouched with no CHANGELOG entry of its own, and every gate stayed green.** Controller **0.221.1** shipped on 2026-08-23 while the newest heading in `felhom-controller/CHANGELOG.md` still read `v0.221.0` — the prune-ordering fix (commit `810b18a`) had been written INSIDE the v0.221.0 entry instead of getting its own. The image was never in question; the RECORD was, and the fleet ran a version the record did not name. **`scripts/golden_currency_gate.py` could not catch it by construction:** it failed only on `released > baked`, so a golden AHEAD of the record passed silently. Measured on the real history: `newest released 0.221.0 / newest golden baked 0.221.1 → OK, exit 0`. | **CLOSED — 2026-08-23** | — | **Both halves fixed, both directions red-proofed.** The record: `v0.221.1` has its own heading carrying the MOVED (not duplicated, not deleted) reasoning — commit `da75603`, pushed alone before anything else. The gate now asks *"is the baked version WRITTEN DOWN?"* — the baked version must have its own `## vX.Y.Z` heading **anywhere** in the CHANGELOG. **Membership, not `baked > released`, deliberately:** a comparison against the newest heading alone goes green the moment any later entry is written, leaving the unrecorded version permanently unrecorded and the gate permanently silent about it. INCONCLUSIVE (exit 2) preserved. Evidence: `audits/DRILL-r384-dead-db-alarm-2026-08-23/evidence/gate-0*.txt` — old gate/old record `exit 0`, new gate/old record `exit 1`, new gate/fixed record `exit 0`. | CC | -| **R-386** | **A single-container app stopped OUT OF BAND raises no alarm at all — and a comment states the opposite as settled fact.** `aggregateState` folds `StateExited` into the `stopped` counter, so an all-down stack returns `StateStopped` and **`StateExited` never survives aggregation**. `classifyRunStates` then whitelists `StateStopped` as a deliberate user stop unless the quiesce loop reports a failed restart. The comment at `cmd/controller/main.go` says: *"(An out-of-band `docker compose stop` leaves the containers present → StateExited → still alerts, which is correct: out-of-band tampering IS reportable.)"* — **measured FALSE.** The neighbouring I2 claim (*"a CRASHING app never comes to rest at `stopped` — faults surface as StateExited"*) is false in the same way. **Measured live on `demo-hp` 2026-08-23 (controller v0.222.0):** `privatebin` (1 container, `unless-stopped`) stopped out of band at 05:47:35Z; at 05:51:53Z it read `state=stopped`, **9 dead-app scans had run, and there were ZERO `app_start_failed` events and ZERO banner lines.** **The absence is trustworthy — positive control from the same box 17 minutes earlier:** `app_start_failed` fired for BookStack at 05:30:14Z, so the detector demonstrably works there. **SCOPE, stated so it is not overclaimed:** a genuine crash under `unless-stopped` is RESTARTED by Docker and surfaces as `restarting` → the 5-minute crash-loop path, which does alarm. The silent case is an explicit out-of-band stop of a stack with no surviving member. **This is case #10 of "a comment asserting an invariant the code does not provide".** Found by §4 of the R-384 task, which asked for a measurement and explicitly forbade a fix in that session. | **OPEN — MEDIUM** | — | Decide whether an out-of-band stop is distinguishable from a customer stop at all — they are byte-identical on the Docker side, exactly as invariant I1 says, so the answer is probably NOT a state test but a recorded intent (`DesiredStateOf` already exists and `bootrecon` already consumes it). **Do NOT simply un-whitelist `StateStopped`** — that re-alarms every genuine customer stop, which is the over-correction F-CRIT-1's fix was careful to avoid. **And fix the comment either way:** it is load-bearing and it is false. Evidence: `audits/DRILL-r384-dead-db-alarm-2026-08-23/evidence/live-17-sec4-stop.txt`, `live-18-sec4-verdict.txt`, `live-19-scenarioD-sec4-full-log.txt`. | CC | +| **R-387** | **The hub REWRITES an unknown severity and says nothing, and the guard built to catch that sits downstream of the rewrite.** One handler, two fields, opposite discipline: an unknown `event_type` is rejected with a loud `400`, while an unknown `severity` was silently coerced to `info` — after which `severityNotifies` drops it and NEITHER delivery leg runs. **Two shipped features went out that way**: `DiskAlertKind.Severity` emitted `"warn"` until controller v0.215.0, `app_start_failed` until v0.223.0. **Measured on the live hub DB 2026-08-23: 91 `app_start_failed` events stored all-time and ZERO `notification_log` rows before that day** — not one, on any channel, while every POST returned 200. **The dispatcher's `unrecognized severity` line could never execute** for an API event, because the coercion one line upstream guarantees the value it looks for cannot arrive. | **CLOSED — hub v0.107.0, 2026-08-23** | — | **The coercion STAYS; only the silence is fixed** — a rejected event is a LOST event, and losing an alarm is worse than mis-routing one. A `WARN` now names the customer, the event type, the rejected value and the consequence. **The dispatcher branch was KEPT, on evidence not caution:** `cmd/hub/main.go` wires `dispatcher.ProcessEvent` DIRECTLY as the `monitor.EventNotifyFunc` for the staleness, host-staleness and offsite-box checkers, which never pass through the handler — for them it is the only severity guard there is; deleting it as "dead" would have removed the live half while the dead half supplied the justification. All 90 severity literals in `internal/monitor` verified already valid. Proven live: `[WARN] [api] Event from demo-hp: severity "warn" is not in {info,warning,error,critical}…`, with an `error` control silent. Evidence: `audits/DRILL-r329-r386-2026-08-23/evidence/live-19-scenarioH-after.txt`. | CC | +| **R-388** | **PRODUCT DECISION (not a defect): the customer notification model is the wrong shape, and the settings page grows by one toggle per detector.** The operator's framing, recorded verbatim 2026-08-23: *"A customer should be notified only about things they can act on or are responsible for — the drive they unplugged, the storage they filled. **A failed backup is our incident, not theirs.** The intended shape is that we detect it, we tell them we noticed and are dealing with it, and they are not handed an error they cannot solve. The subscription should feel like being looked after, not like being on call."* Today's page is the opposite shape — one switch per detector, and it **grew from 12 to 15 in a single session** (one new alarm plus two compound toggles split into four). That growth is the argument, not an aside: a page that grows per detector keeps asking a household to make engineering decisions. | **OPEN — DIRECTION, operator's call** | a decision on scope; nothing here is a bug | Recorded as a dated **[DESIGN — DIRECTION]** entry at `documentation/architecture/08-alarm-ladder.md` §8, marked plainly as *not current behaviour*. **Deliberately NOT implemented in the session that recorded it.** `app_start_failed` defaulting OFF is consistent with the direction and reversible either way, but was ruled on its own merits and does not pre-judge the redesign. | Viktor | | **R-229** | **The instruction-file rightsizing landed for `felhom-controller` and the workspace root; three pieces were deliberately deferred.** Done 2026-08-06: controller split into a 92-effective-line core plus four `paths:`-scoped `.claude/rules/*.md`; workspace root 208→142 effective lines with its versioned copy kept byte-identical; surgical corrections to `felhom-agent` and `felhom.eu` (expired TEMPORARY block, every version literal, the Legacy-Windows copies, the duplicated health-check rule); five contradictions resolved — including a drill-VM claim **measured live** (`qm list` on demo-hp shows VM 300 `drill-r50`; `felhom-agent` was right, `felhom-controller` was wrong); new shared `felhom.eu/scripts/instructions_gate.py` registered in `controller_gates.py` and `agent_gates.py`, 20 fixture tests + red-proof. **Leg (a) CLOSED 2026-08-06 (part 2):** `felhom.eu/CLAUDE.md` **227 → 115 effective lines**, split into a core plus `.claude/rules/{hub,website,manifests,docs}.md`; `instructions_gate` **registered in `scripts/repo_gates.py`** (six gates, all OK) in the required order — trim first, register second, because a registered-but-failing gate refuses every push. Scoping proven from the `InstructionsLoaded` hook log in two fresh sessions, not from frontmatter. **Still deferred:** (b) **CLOSED 2026-08-06 (close-out)** — `felhom-agent/CLAUDE.md` **175 → 99 effective lines** (measured 175, not 173: the CI correction added two), split into a core plus `.claude/rules/{proxmox,localapi,backup,storage}.md` beside the existing `health-checks.md`. The release section now points at the `felhom-build-deploy` skill instead of restating a table that drifts from the script. **Every `CLAUDE.md` in the workspace is now ≤120 effective lines except the workspace root at 142, which is deliberate — it is the only file re-injected after `/compact`.** (c) **CLOSED 2026-08-06 (part 2)** — all 44 orphans resolved with **zero deletions** (file count 158 before and after): 4 durable `reference`-type files indexed, 40 dated episode records moved to `.claude-memory/archive/`. `MEMORY.md` 145 → **150 lines / 17,977 bytes**, and `instructions_gate` check 6 now watches it (over-limit FAILS, orphan WARNS, absent store PASSES *printing its reason*). (d) **The spec-as-failing-test pilot** — moved to R-230. Full accounting: `audits/LEDGER-instruction-trim-2026-08-06.md` + `audits/LEDGER-instruction-trim-part2-2026-08-06.md` | **READY** — owner Viktor | | **R-230** | **Three instruction/memory follow-ups deliberately left by the part-2 session (2026-08-06), each needing a decision rather than an implementation.** (a) **A ruling is owed on auto-written staleness.** The hand-written `CLAUDE.md` files are now clean of version literals and expired blocks — the gate enforces it — but `MEMORY.md`, which Claude writes and which is the LARGER half of what loads (8.4k tokens vs the root file's 6.6k), carries **21 lines with component version literals**, **5 with bare host addresses**, and an entry still reading *"demo boxes REMOTE till ~08-02"* — the same expired-TEMPORARY class the gate was built to kill, now surviving in the one file the gate's content rules do not cover. **Partly actioned 2026-08-06 (close-out), and the ruling is STILL OWED:** the **three statements that were actively false** were corrected — `R-193 decision open` (closed 2026-08-05), `demo boxes REMOTE till ~08-02` (the box answers on the home LAN), `OPEN R-25b` (shipped 2026-07-21) — and gate check 6 now **WARNs** on version literals, host addresses, expired statements and stale-open citations in the index. WARN, never FAIL: Claude writes that file between sessions, so a hard failure would refuse a human's push over a line no human typed, and the warning is read by the model that will next edit it. **The remaining 32 version literals and 4 host addresses were deliberately left** for that loop. What is still owed is the bulk-correction ruling. **Correcting the premise:** the earlier report's "three expired statements" were all FALSE POSITIVES — each matched an ISO date inside a markdown link target, i.e. a filename — while the one real expired claim carried no ISO date at all. (b) **CLOSED 2026-08-06 (close-out)** — the workspace-root `CLAUDE.md` **is now a relative symlink** to the versioned copy, so the divergence class is gone rather than policed. Check 5 learned two shapes: for a link it asserts the target resolves to a real file (**a dangling link is worse than a diverged copy — the instructions load NOTHING and there is no content left to notice is wrong**), for two files byte-identity as before, so a clone elsewhere is unaffected. **Proven, not assumed:** three fresh sessions logged `session_start` for the link path, and a fourth **with no tools at all** quoted standing rule 1 verbatim — the content reaches the model, not just the path. (c) **The spec-as-failing-test pilot**, approved in principle and not started (was R-229(d)). | **READY** — owner Viktor | | **R-232** | **DooPlex's backup makes every copy inside the same box — and nothing tells anyone when it fails.** Surveyed read-only 2026-08-06 (`audits/RECON-dooplex-backup-2026-08-06.md`). **What works:** five sets, 14/14 successful runs in 14 days; a file was restored from the `data` repo and matched the live original **byte for byte**; every set except two is cross-disk; k3s is integrity-checked on every run. **What the matrix exposes, ranked:** (a) **`notify_failure` is a no-op** — `NOTIFY_ON_FAILURE=true` but `NOTIFY_WEBHOOK_URL` is commented out, so a failed backup notifies **nobody**; the project already has a working Resend path that CI uses. Cheapest item, and it makes every other failure visible. (b) **Nothing leaves the box** — no rclone, no remote repo, no off-site target anywhere; Longhorn's target is `nfs://192.168.0.180:` pointing at DooPlex itself, and the only outbound-looking cron pulls *inbound* from Hetzner for a different project. The machine that runs the hub managing the customers' off-site chain has no off-site copy of its own. (c) **The backup tree is a single writable path** and the restic repos are not append-only — one bad script or ransomware destroys every copy at once. (d) **Two same-disk sets**: `.claude-memory` and the PostgreSQL dumps, whose source directory sits *inside* the backup tree. (e) **Longhorn `retain=1`** — one generation per volume, so a corruption noticed a day late has no earlier copy. (f) **`/opt/backup/docs/BACKUP-RESTORE.md` does not exist** though the systemd unit advertises it. (g) **`secrets/restic-repo` has never held a snapshot** — `backup-secrets.sh` contains no `restic` call; the secrets are GPG files on `sda1` only. (h) **No restore has ever been run** beyond today's single-file probe — the matrix's "ever demonstrated?" column is otherwise entirely empty. **Not a finding:** the restic passphrase. The on-box copy is on `sdb1`, a different disk from the backups, and the **operator holds an offline copy out of band** — so a disk loss is recoverable. The narrow residual is that it is operator-held rather than system-held, unlike the customer case's hub-vaulted escrow, so it should be confirmed current and findable by someone else. **Nothing was changed by the recon.** | **READY** — owner Viktor | @@ -509,7 +510,6 @@ class (an image `VOLUME` at an unmounted path) is still live — `immich-server` | **R-317** | **The agent decides whether to install dnsmasq by stat-ing a file the OTHER package owns.** `EnsureDnsmasq` (`felhom-agent/internal/lanresolver/lanresolver.go:105`) does `os.Stat("/usr/sbin/dnsmasq")` and skips the apt install when it exists — but that path is shipped by **`dnsmasq-base`**, while the systemd unit comes from **`dnsmasq`** (confirmed on the box: `dpkg -S /usr/sbin/dnsmasq` → `dnsmasq-base`; `dpkg -S /usr/lib/systemd/system/dnsmasq.service` → `dnsmasq`). So on any host carrying `dnsmasq-base` without `dnsmasq`, the agent skips the install and then runs `systemctl enable --now dnsmasq` against a unit that is not there: the resolver never comes up and the failure is a retried WARN in the journal rather than anything a customer or the install sees. **Pre-existing, NOT introduced by R-316** — but R-316 makes the shape reachable, because a host whose `dnsmasq-base` pre-dated Felhom now keeps it while `dnsmasq` is removed. R-316's uninstall says so explicitly instead of leaving it to be found from a silent resolver. **Ranked 2 (costs time), not 1:** the box installs fine, only LAN name resolution is missing | **READY (S) — NEW 2026-08-13** | R-316 | Probe what is actually needed — the unit or the `dnsmasq` package — rather than a path a sibling package owns. One-line change in the agent; deliberately NOT made here to keep this session to one repo | CC | | **R-325** | **The shared copy vocabulary is imported by ONE of its two consumers, and drift-checked into the other.** `customer_copy_vocab.py` is the single list; `hub_copy_gate.py` imports it. **`felhom-controller/controller/scripts/retrieval_promise_gate.py` still carries its own `STEMS` literal**, because the session that created the shared module was under a hard end-state requirement to leave `felhom-controller` untouched — its target box was being re-deployed the same evening. **Two copies of a word list is not a theoretical risk in this project: it is the R-299 defect exactly**, where a guard asserted one inflection of a Hungarian verb and the plural walked past it. **So the gap is instrumented rather than left open: `hub_copy_gate.py` READS the controller gate's `STEMS` and FAILS if the two disagree** — single-source semantics tonight without a cross-repo edit. **Watched failing:** removing one stem from the shared list produced *"the shared vocabulary is no longer shared"* with both lists printed, and restoring it returned the gate to green. An ABSENT sibling clone is **INCONCLUSIVE (exit 2), never a pass** — the G-1 lesson. **This is a scaffold, not the destination** | **READY (S) — NEW 2026-08-13, RANK 3** | R-299, R-324 | Make `retrieval_promise_gate.py` import `felhom.eu/scripts/customer_copy_vocab.py` and delete its own literal — a felhom-controller change of a few lines, needing no bake (a gate is not shipped code). Then the drift check becomes redundant and should be removed with it, rather than left as a second mechanism nobody re-reads | CC | | **R-327** | **The standing picture still describes a defect that has been fixed twice over.** Found by the first run of `unproven.py` (R-326), which is the argument for having built it. `where-felhom-stands.yaml`'s `claim.code-naming` is `status: partial` and its title reads *"The same word is used for two different secrets across three surfaces; the email points at a page a rebuilt machine does not show"* — **both halves of which are now false.** The box side shipped 2026-08-10 (R-295), the hub half and the page-naming fix on 2026-08-13 (R-295 hub, new `reenroll` mail kind), and the third near-homograph on 2026-08-13 (R-323). **NOT MOVED BY THIS SESSION, deliberately and by the dataset's own rule:** *"A status may not be RAISED here — if the evidence supports a stronger status than the capability map records, the MAP changes first and this file follows it."* Raising it here would be the exact inversion the file's header forbids, and the map edit is a separate judgement about what "walked" means for a naming change that no customer has yet met | **READY (S) — NEW 2026-08-13, RANK 4** | R-295, R-323, R-326 | Decide the capability-map status for the naming arc, then let the dataset follow it. **Note the honest difficulty: no customer has typed „Tulajdonosi jelmondat” yet**, so `walked` would be an over-claim; `built` is probably right, and the title needs rewriting either way because it describes a defect rather than a capability | operator + CC | -| **R-329** | **`app_start_failed` carries the IDENTICAL defect and was deliberately left alone.** `notifier.go` ~L546 emits severity `"warn"` for *„Telepített alkalmazás nem fut: %s"* — the same string that made R-328 undeliverable, so this event is also stored as `info` and emailed to nobody. It was NOT changed while fixing R-328 because it needs a decision first: **should a stopped app email the customer at all?** Flipping the string without answering that turns a silent event into a mail flood on a box where an app crash-loops. **Whoever changes it must check the hub side too** — a `customerMessages` entry and `DefaultEnabledEvents` membership decide who hears it, and the R-158/R-167 lesson is that routing a can't-act-on-it failure to a customer-enabled type is its own defect | **READY (XS code, the DECISION is the work) — NEW 2026-08-14** | a decision on whether `app_start_failed` should notify, and on which leg | Decide operator-only vs customer; then set the severity and the hub routing to match | Viktor | | **R-330** | **Disk health Phase 2 — the three SMART attributes the wire does not carry.** The failing drive's most telling counter was **187 `Reported_Uncorrect`**, sitting at normalized **1** against threshold **0** with a raw count of **1001** — one point from failing and structurally unable to get there. Also wanted: **199 `UDMA_CRC_Error_Count`** (cabling) and **188 `Command_Timeout`**. None are on the agent→controller wire today, so v0.215.0's ladder could not use them. Phase 2 also persists periodic SMART **samples** (the right home is `metrics.MetricsStore`, NOT the Phase-1 state file, which is one record per disk and must stay that way). **This is a declared WIRE change, so under the G-1 gate the hub must model the new fields in the SAME session** — that is precisely why it was kept out of Phase 1, where it would have turned a one-word severity fix into a three-repo change | **READY (M) — NEW 2026-08-14** | R-328 (closed) | Add 187/199/188 to the agent's `SmartSummary` + hub model in one session; then persist samples | CC | | **R-331** | **Disk health Phase 3 — growth-rate detection, and retiring the static 64.** The v0.215.0 count backstop (64 unreadable sectors → Hiba) is **a judgement from ONE drive**: the observed benign excursion peaked at 16 and cleared inside an hour, and the terminal run passed 64 at 13 Aug 11:28 and never came back. It is deliberately a backstop BEHIND the sustain rule, not the primary signal, but it is still a magic number tuned on a single sample and it will be wrong for some drive. With Phase 2's history the box can ask the question that actually matters — *is this count climbing, and how fast* — which distinguishes a drive with eight stable aging sectors from one adding forty a day, something no static threshold can do. Revisit 64 when that exists | **READY (M) — NEW 2026-08-14** | R-330 | Growth-rate rule over persisted samples; re-derive or delete the static 64 | CC | | **R-332** | **The new Hiba-from-counters path has never fired on real hardware.** v0.215.0's whole point is a verdict the product could not previously reach, and it is proven only against the committed fixture's values in unit tests (12 scenario groups, 11 of 12 red-proofs failing as required). The live validation on demo-hp proved the **negative** — three healthy disks still read Rendben across the deploy, no false alert — and the **severity wire** end to end, but no live disk has actually reached Hiba. **This is the honest gap and it must not be closed by pointing at the fixture tests**: the drive that produced the fixture is in DooPlex, which is Tier 2 and never a drill target, and the demo boxes are all-flash and healthy | **WATCHING — NEW 2026-08-14, NARROWED same day.** One item originally in this gap is now PROVEN LIVE: the **persisted state surviving a controller restart**. The v0.215.0→v0.216.0 redeploy destroyed and rebuilt the container, and the new one read back a `changed_at` written by the PREVIOUS version (`2026-08-14T07:23:14.640216851Z`, still intact at 09:31:35Z) instead of re-baselining — Scenario L on real hardware, not just the production-path unit test. **What remains unproven is the verdict itself, plus the stronger restart half: an already-ALERTED disk not re-alerting** | a real degrading disk, or an injection harness | **Closing condition:** a live disk reaching Hiba from counters, OR a deliberate injection through the REAL pipeline (agent `/disks` → controller check → hub event), not a hand-set verdict | CC |