night 2026-09-13/14: first "be a customer" rotation (adventurelog) — 7 defects found, 13 rows closed
gates / gates (push) Successful in 18s
gates / gates (push) Successful in 18s
New runbooks/nightly-rotation.md; observations_gate.py reads every section (R-471); target-selection.md names real paths (R-461); R-93 carries the fact that drill-r50 is gone. Register: R-473/R-474/R-466/R-471/R-453/R-461 and v0.240.0's R-477/R-478/R-480/R-482/R-484/R-485/R-486 closed; R-481, R-483, R-487, R-488, R-489 opened. 09 §6.1, 07 §6, CONTEXT, STATUS note. Evidence: audits/nightly-2026-09-13-adventurelog/, audits/v0240-2026-09-13/.
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
=== NIGHT 2026-09-13 — adventurelog as a customer — step 1: install through POST /api/stacks/adventurelog/deploy — 2026-09-13T16:27:50Z ===
|
||||
catalog pin: ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 (catalog 48d2003); controller on demo-hp: gitea.dooplex.hu/admin/felhom-controller:0.239.0
|
||||
BEFORE — containers/volumes/units named adventurelog:
|
||||
0
|
||||
0
|
||||
ls: cannot access '/mnt/sys_drive/felhom-data/backups/primary/adventurelog': No such file or directory
|
||||
ls: cannot access '/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog': No such file or directory
|
||||
deploy at 2026-09-13T16:27:52Z (secrets generated locally, never printed/stored) -> HTTP 202 {"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
|
||||
after 190s: state=running updating=False phase=None err='' hold='' deploy_error=None
|
||||
adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 Up About a minute (healthy)
|
||||
adventurelog-postgres postgis/postgis:16-3.5-alpine Up About a minute (healthy)
|
||||
adventurelog-frontend ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 Up About a minute (healthy)
|
||||
--- controller log for the deploy ---
|
||||
2026/09/13 16:27:52 auth.go:134: [DEBUG] [web] auth: valid session for POST /api/stacks/adventurelog/deploy
|
||||
2026/09/13 16:27:52 router.go:81: [DEBUG] [api] POST /api/stacks/adventurelog/deploy (path=/stacks/adventurelog/deploy)
|
||||
2026/09/13 16:27:52 router.go:403: [INFO] [api] Deploy requested for stack: adventurelog
|
||||
2026/09/13 16:27:52 router.go:81: [DEBUG] [api] deployStack: name=adventurelog contentLength=165
|
||||
2026/09/13 16:27:52 deploy.go:249: [DEBUG] Deploy adventurelog: received 3 user values
|
||||
2026/09/13 16:27:52 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/adventurelog — 4 env vars, 2 encrypted, 2 sensitive fields
|
||||
2026/09/13 16:27:52 [INFO] [stacks] SaveAppConfig: saved config for adventurelog
|
||||
2026/09/13 16:27:52 deploy.go:379: [INFO] [stacks] Deploying stack adventurelog with 4 env vars: [SECRET_KEY, DB_PASSWORD, DOMAIN, SUBDOMAIN]
|
||||
2026/09/13 16:27:52 manager.go:1498: [INFO] [stacks] Deploying stack adventurelog — checking 3 images...
|
||||
2026/09/13 16:27:52 manager.go:1502: [DEBUG] ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 — not found locally, will pull
|
||||
2026/09/13 16:27:53 manager.go:1502: [DEBUG] ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 — not found locally, will pull
|
||||
2026/09/13 16:27:53 lifecycle.go:70: [DEBUG] [integrations] OnStackStart: stack=adventurelog, waiting 5s for state refresh
|
||||
2026/09/13 16:27:53 manager.go:1379: [DEBUG] Running: docker compose up -d (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/13 16:27:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:27:53 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:27:58 lifecycle.go:86: [DEBUG] [integrations] OnStackStart: stack=adventurelog integrationsFound=0
|
||||
2026/09/13 16:28:03 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:28:03 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:28:13 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:28:13 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:28:23 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:28:23 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:28:33 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:28:33 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:28:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:28:43 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:28:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:28:53 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:29:03 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:29:03 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:29:13 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:29:13 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:29:21 deploy.go:427: [INFO] [stacks] Stack adventurelog deployed successfully (took 88.3s)
|
||||
2026/09/13 16:29:21 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/adventurelog — 4 env vars, 2 encrypted, 2 sensitive fields
|
||||
2026/09/13 16:29:21 [INFO] [stacks] SaveAppConfig: saved config for adventurelog
|
||||
2026/09/13 16:29:21 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/adventurelog — 4 env vars, 0 encrypted, 2 sensitive fields
|
||||
2026/09/13 16:29:21 [INFO] [stacks] SaveAppConfig: saved config for adventurelog
|
||||
2026/09/13 16:29:21 installed.go:408: [INFO] [stacks] installed-images adventurelog: recorded 3 service(s) (adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 (sha256:7c759efab147…), adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 (sha256:edd79220f0de…), adventurelog-postgres=postgis/postgis:16-3.5-alpine (sha256:47e961a569fd…))
|
||||
2026/09/13 16:29:21 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/adventurelog — 4 env vars, 0 encrypted, 2 sensitive fields
|
||||
2026/09/13 16:29:21 [INFO] [stacks] SaveAppConfig: saved config for adventurelog
|
||||
2026/09/13 16:29:21 pin.go:93: [INFO] [stacks] pin adventurelog: adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1, adventurelog-postgres=postgis/postgis:16-3.5-alpine
|
||||
2026/09/13 16:29:22 manager.go:549: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=true composePath=/opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:29:22 backup.go:460: [DEBUG] groupStacksByDrive: /mnt/sys_drive → [adventurelog, bentopdf, bookstack, docmost, kimai, opengist, privatebin]
|
||||
2026/09/13 16:29:22 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: c9fff76e09c4 adventurelog adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1
|
||||
0dcf2da87848 adventurelog-postgres adventurelog postgis/postgis:16-3.5-alpine
|
||||
02c0d5ba11e2 adventurelog-frontend adventurelog ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1
|
||||
2026/09/13 16:29:22 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container adventurelog (image=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1, not a database)
|
||||
2026/09/13 16:29:22 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container adventurelog-postgres (image=postgis/postgis:16-3.5-alpine, not a database)
|
||||
2026/09/13 16:29:22 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container adventurelog-frontend (image=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1, not a database)
|
||||
2026/09/13 16:29:22 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:29:22 recovery_unit.go:224: [INFO] [backup] Recovery unit captured for adventurelog → /mnt/sys_drive/felhom-data/backups/primary/adventurelog (images=3, secrets-referenced=2, data_keys=1, portable-carried=2/2, withheld=0)
|
||||
2026/09/13 16:29:23 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:29:23 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:29:24 manager.go:1379: [DEBUG] Running: docker compose ps -a --format table {{.Name}} {{.Image}} {{.State}} {{.Status}} (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/13 16:29:24 manager.go:1459: [INFO] [stacks] Stack adventurelog post-start status:
|
||||
2026/09/13 16:29:24 manager.go:1462: [INFO] [stacks] adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 running Up 3 seconds (health: starting)
|
||||
2026/09/13 16:29:24 manager.go:1462: [INFO] [stacks] adventurelog-frontend ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 running Up 9 seconds (healthy)
|
||||
2026/09/13 16:29:24 manager.go:1462: [INFO] [stacks] adventurelog-postgres postgis/postgis:16-3.5-alpine running Up 9 seconds (healthy)
|
||||
2026/09/13 16:29:33 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:29:33 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:29:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:29:43 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:29:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:29:53 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:30:03 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:30:03 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:30:13 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:30:13 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:30:23 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:30:23 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:30:33 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:30:33 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:30:43 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:30:43 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:30:53 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:30:53 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:31:03 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:31:03 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
=== step 1 done 2026-09-13T16:31:04Z ===
|
||||
@@ -0,0 +1,5 @@
|
||||
GET / -> 200 <!doctype html> <html lang="en" data-theme=""> <head> <meta charset="utf-8" /> <link rel="icon" href="./favicon.png
|
||||
GET /api/ -> 308 /api
|
||||
GET /auth/browser/v1/config -> 200 {"status": 200, "data": {"account": {"authentication_method": "username", "is_open_for_signup": true}, "socialaccount": {"providers": []}, "mfa": {"supported_types": ["recovery_codes", "totp"]}}}
|
||||
GET /api/locations/ -> 308 /api/locations
|
||||
GET /api/collections/ -> 308 /api/collections
|
||||
@@ -0,0 +1,50 @@
|
||||
=== step 2: be a customer — sign up and put a trip in, through the app's own API — 2026-09-13T16:31:49Z ===
|
||||
signup (password from a 0600 file, never printed) -> 400 {"status": 400, "errors": [{"message": "This field is required.", "code": "required", "param": "first_name"}, {"message": "This field is required.", "code": "required", "param": "last_name"}]}
|
||||
session -> 401 {"status": 401, "user": null}
|
||||
API root -> 200 {"locations": "https://travelnight.enkisfelhom.hu/api/locations/?format=json", "collections": "https://travelnight.enkisfelhom.hu/api/collections/?format=json", "transportations": "https://travelnight.enkisfelhom.hu/api/transportations/?format=json", "notes":
|
||||
collection -> 308
|
||||
location Tihany -> 308
|
||||
location Badacsony -> 308
|
||||
location Keszthely -> 308
|
||||
note -> 308
|
||||
photo sha256: 2465d601e4ccefbbde1ceda68c0f06f8c7835f1b6c9cba3f19748ad460b46b95 bytes: 294
|
||||
extra place -> 308
|
||||
READ BACK locations: []
|
||||
READ BACK collections: []
|
||||
READ BACK notes: []
|
||||
image urls: []
|
||||
=== step 2 done 2026-09-13T16:31:49Z ===
|
||||
=== step 2 (second run: first_name/last_name added, no trailing slashes — the first run is kept above): be a customer — sign up and put a trip in, through the app's own API — 2026-09-13T16:32:02Z ===
|
||||
signup (password from a 0600 file, never printed) -> 200 {"status": 200, "meta": {"is_authenticated": true}}
|
||||
session -> 401 {"status": 401, "user": null}
|
||||
API root -> 200 {"locations": "https://travelnight.enkisfelhom.hu/api/locations/?format=json", "collections": "https://travelnight.enkisfelhom.hu/api/collections/?format=json", "transportations": "https://travelnight.enkisfelhom.hu/api/transportations/?format=json", "notes":
|
||||
collection -> 500 ValueError at /api/collections/ Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x704ff05b7950>": "Collection.user" must be a "CustomUser" instance. Request Method: POST Request URL: https://travelnight.enkisfelhom.hu/api/collections/ Djang
|
||||
location Tihany -> 401 {"detail": "Authentication credentials were not provided."}
|
||||
location Badacsony -> 401 {"detail": "Authentication credentials were not provided."}
|
||||
location Keszthely -> 401 {"detail": "Authentication credentials were not provided."}
|
||||
note -> 401 {"detail": "Authentication credentials were not provided."}
|
||||
photo sha256: 2465d601e4ccefbbde1ceda68c0f06f8c7835f1b6c9cba3f19748ad460b46b95 bytes: 294
|
||||
extra place -> 401 {"detail": "Authentication credentials were not provided."}
|
||||
READ BACK locations: []
|
||||
READ BACK collections: []
|
||||
READ BACK notes: []
|
||||
image urls: []
|
||||
=== step 2 done 2026-09-13T16:32:02Z ===
|
||||
=== step 2 (third run: the session cookie now carried by hand, login through the frontend's form; earlier runs kept above): be a customer — sign up and put a trip in, through the app's own API — 2026-09-13T16:34:26Z ===
|
||||
signup (password from a 0600 file, never printed) -> 400 {"status": 400, "errors": [{"message": "A user is already registered with this email address.", "code": "email_taken", "param": "email"}, {"message": "A user with that username already exists.", "code": "username_taken", "param": "username"}]}
|
||||
login through the frontend form -> (302, '/')
|
||||
session -> 200 {"status": 200, "user": "kovacscsalad"}
|
||||
API root -> 200 {"locations": "https://travelnight.enkisfelhom.hu/api/locations/?format=json", "collections": "https://travelnight.enkisfelhom.hu/api/collections/?format=json", "transportations": "https://travelnight.enkisfelhom.hu/api/transportations/?format=json", "notes":
|
||||
collection -> 201 {"id": "cb076e3c-28d3-463e-9ef9-e7ce082cc66c", "description": "Családi nyaralás a Balatonnál, két hét, három falu.", "user": "64dac784-a38b-45d9-b989-45945ef8003c", "name": "Balaton 2026 nyár", "is_public": false, "locations": [], "created_at": "2026-09-13T16:
|
||||
location Tihany -> 400 {"visits": [{"location": ["This field is required."]}]}
|
||||
location Badacsony -> 400 {"visits": [{"location": ["This field is required."]}]}
|
||||
location Keszthely -> 400 {"visits": [{"location": ["This field is required."]}]}
|
||||
note -> 201 {"id": "df9b8dbc-0671-4fb8-b31b-a9d2e7fefd1f", "user": "64dac784-a38b-45d9-b989-45945ef8003c", "name": "Csomaglista", "content": "napkrém, gumimatrac, a nagy kék hűtőtáska, Bence úszógumija", "date": "2026-07-05", "links": null, "is_public": false, "collection
|
||||
photo sha256: 2465d601e4ccefbbde1ceda68c0f06f8c7835f1b6c9cba3f19748ad460b46b95 bytes: 294
|
||||
extra place -> 201 {"id": "00f4eac1-95c8-4fb2-bff3-af63903d76b7", "name": "Siófok (tévedés)", "description": "ide nem mentünk", "rating": null, "tags": null, "location": null, "is_public": false, "collections": [], "created_at": "2026-09-13T16:34:27.689164Z", "updated_at": "2026
|
||||
delete extra place -> 204
|
||||
READ BACK locations: []
|
||||
READ BACK collections: [('Balaton 2026 nyár', 0)]
|
||||
READ BACK notes: []
|
||||
image urls: []
|
||||
=== step 2 done 2026-09-13T16:34:28Z ===
|
||||
@@ -0,0 +1,17 @@
|
||||
cookies in jar before: []
|
||||
login -> 200 b'{"status": 200, "data": {"user": {"id": 1, "display": "kovacscsalad", "has_usable_password": true, "email": "kovacs.csal'
|
||||
Set-Cookie: csrftoken=<redacted>; Max-Age=0; Path=/; HttpOnly; Secure; SameSite=Lax
|
||||
--- ALL response headers of a login through the frontend proxy ---
|
||||
200
|
||||
Access-Control-Allow-Credentials: true
|
||||
Access-Control-Allow-Origin: https://travelnight.enkisfelhom.hu
|
||||
Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private
|
||||
Content-Length: 292
|
||||
Content-Type: application/json
|
||||
Date: Sun, 13 Sep 2026 16:32:53 GMT
|
||||
Expires: Sun, 13 Sep 2026 16:32:53 GMT
|
||||
Server: gunicorn
|
||||
Set-Cookie: csrftoken=<redacted>; Max-Age=0; Path=/; HttpOnly; Secure; SameSite=Lax
|
||||
Vary: Cookie, origin
|
||||
X-Frame-Options: DENY
|
||||
Connection: close
|
||||
@@ -0,0 +1,8 @@
|
||||
GET /login -> 2409 bytes
|
||||
POST /login -> 302 location=/
|
||||
Set-Cookie: csrftoken=<redacted>; Max-Age=0; Path=/; HttpOnly; Secure; SameSite=Lax
|
||||
Set-Cookie: sessionid=<redacted>; Domain=.enkisfelhom.hu; Path=/; Expires=Sun, 27 Sep 2026 16:33:52 GMT; HttpOnly; Secure; SameSite=Lax
|
||||
body:
|
||||
POST /login?/login -> 404 location=None
|
||||
Set-Cookie: csrftoken=<redacted>; Max-Age=0; Path=/; HttpOnly; Secure; SameSite=Lax
|
||||
body: <!doctype html> <html lang="en" data-theme=""> <head> <meta charset="utf-8" /> <link rel="icon" href="./favicon.png" /> <meta name="viewport" content="wi
|
||||
@@ -0,0 +1,14 @@
|
||||
=== step 2, places and visits as their own records; the photo; the read-back — 2026-09-13T16:35:04Z ===
|
||||
login: (302, '/')
|
||||
collection id found: True
|
||||
location Tihany -> 201 {"id": "c1fd347e-4cb8-411a-869e-e94b73c6d05e", "name": "Tihany", "collections": ["cb076e3c-28d3-463e-9ef9-e7ce082cc66c"]}
|
||||
visit -> 201 {"id": "86ed7b45-6c30-4936-ad85-dc55312c7ab6", "start_date": "2026-07-06T00:00:00Z"}
|
||||
location Badacsony -> 201 {"id": "3f75d187-570e-40b4-9920-cd44020fee39", "name": "Badacsony", "collections": ["cb076e3c-28d3-463e-9ef9-e7ce082cc66c"]}
|
||||
visit -> 201 {"id": "2e8a7f5f-9e51-452e-ad8f-d47028ec02d2", "start_date": "2026-07-09T00:00:00Z"}
|
||||
location Keszthely -> 201 {"id": "40070a88-b302-40bc-a5b2-5fc7bcd5ee83", "name": "Keszthely", "collections": ["cb076e3c-28d3-463e-9ef9-e7ce082cc66c"]}
|
||||
visit -> 201 {"id": "782f2cef-495f-43b5-bb06-498cdc56ded6", "start_date": "2026-07-12T00:00:00Z"}
|
||||
photo upload (sha256 2465d601e4cc…) -> 500 {"id": null, "image": null}
|
||||
edit Badacsony -> 200 {"rating": 5.0}
|
||||
READ BACK: {"locations": [["Badacsony", 5.0, "Bazaltorgonák, szürkebarát a hegyoldalban. Árvíztűrő tükörfúrógép. (javítva)", 0, [["2026-07-09T00:00:00Z", "2026-07-11T00:00:00Z"]]], ["Keszthely", 4.0, "Festetics-kastély, a gyerekek a Balaton Múzeumot szerették.", 0, [["2026-07-12T00:00:00Z", "2026-07-15T00:00:00Z"]]], ["Tihany", 5.0, "Levendulamező és az apátság, ahonnan az egész tó látszik.", 0, [["2026-07-06T00:00:00Z", "2026-07-08T00:00:00Z"]]]], "collections": [["Balaton 2026 nyár", "Családi nyaralás a Balatonnál, két hét, három falu.", 0, []]], "photo": null}
|
||||
photo byte-identical to the upload: None
|
||||
=== done 2026-09-13T16:35:06Z ===
|
||||
@@ -0,0 +1,8 @@
|
||||
POST /api/images -> 500
|
||||
{"error":"Internal Server Error"}
|
||||
upload 'tihany-levendula.png' -> 500 {"id": null, "image": null}
|
||||
upload 'tihany-levendula-árvíztűrő.png' -> 500 {"id": null, "image": null}
|
||||
--- curl -F upload with header 'Transfer-Encoding: chunked' ---
|
||||
500
|
||||
--- curl -F upload with header 'X-none: 1' ---
|
||||
500
|
||||
@@ -0,0 +1,99 @@
|
||||
=== step 3: back it up through the backups page's own endpoints — 2026-09-13T16:36:50Z ===
|
||||
TRUTH before backup: {"locations": [["Badacsony", 5.0, "Bazaltorgonák, szürkebarát a hegyoldalban. Árvíztűrő tükörfúrógép. (javítva)", 0, [["2026-07-09T00:00:00Z", "2026-07-11T00:00:00Z"]]], ["Keszthely", 4.0, "Festetics-kastély, a gyerekek a Balaton Múzeumot szerették.", 0, [["2026-07-12T00:00:00Z", "2026-07-15T00:00:00Z"]]], ["Tihany", 5.0, "Levendulamező és az apátság, ahonnan az egész tó látszik.", 0, [["2026-07-06T00:00:00Z", "2026-07-08T00:00:00Z"]]]], "collections": [["Balaton 2026 nyár", "Családi nyaralás a Balatonnál, két hét, három falu.", 0, []]], "photo": null}
|
||||
--- units BEFORE ---
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
|
||||
2026-09-13T16:29:22.6226313000 1256 manifest.json
|
||||
2026-09-13T16:29:22.6226313000 452 compose/app.yaml
|
||||
2026-09-13T16:29:22.6226313000 2623 compose/.felhom.yml
|
||||
2026-09-13T16:29:22.6226313000 3540 compose/docker-compose.yml
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog: ABSENT
|
||||
--- POST /api/backup/run (Mentések: „Mentés most”) at 2026-09-13T16:36:52Z ---
|
||||
HTTP 200
|
||||
{"ok":true,"message":"Mentés elindítva"}
|
||||
backup run idle after 100s; status keys: ['db_dump', 'enabled', 'running']
|
||||
--- units AFTER the run ---
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 1350 manifest.json
|
||||
2026-09-13T16:38:33.2924199360 452 compose/app.yaml
|
||||
2026-09-13T16:38:33.2924199360 2623 compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 compose/docker-compose.yml
|
||||
2026-09-13T16:36:59.5722645580 200260608 volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 volume-dumps/adventurelog_adventurelog_media.tar
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog: ABSENT
|
||||
--- POST /api/backup/tier2 (Mentések: 2. mentés) at 2026-09-13T16:38:35Z ---
|
||||
HTTP 200
|
||||
{"ok":true,"message":"2. mentés elindítva"}
|
||||
tier2 idle after 5s
|
||||
--- units AFTER tier 2 ---
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 1350 manifest.json
|
||||
2026-09-13T16:38:33.2924199360 452 compose/app.yaml
|
||||
2026-09-13T16:38:33.2924199360 2623 compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 compose/docker-compose.yml
|
||||
2026-09-13T16:36:59.5722645580 200260608 volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 volume-dumps/adventurelog_adventurelog_media.tar
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 2623 recovery-unit/compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 recovery-unit/compose/docker-compose.yml
|
||||
2026-09-13T16:38:33.2924199360 452 recovery-unit/compose/app.yaml
|
||||
2026-09-13T16:36:59.5722645580 200260608 recovery-unit/volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 recovery-unit/volume-dumps/adventurelog_adventurelog_media.tar
|
||||
2026-09-13T16:38:33.2924199360 1350 recovery-unit/manifest.json
|
||||
2026-09-13T16:38:35.6164485870 1 .felhom-tier2-layout
|
||||
--- the app's backup card (GET /api/stacks/adventurelog/backup-data) ---
|
||||
HTTP 200 {"ok":true,"data":{"stack":"adventurelog","backup_paths":[{"path":"/mnt/sys_drive/felhom-data/backups/primary/adventurelog/db-dumps","size_bytes":0,"size_human":"","exists":false},{"path":"/mnt/sys_drive/felhom-data/backups/secondary/adventurelog/rsync","size_bytes":0,"size_human":"","exists":false}],"has_backups":false}}
|
||||
--- controller log, adventurelog backup lines ---
|
||||
2026/09/13 16:36:52 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 30s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:36:52 dbdump.go:147: [DEBUG] DiscoverDatabases: docker ps output: c9fff76e09c4 adventurelog adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1
|
||||
0dcf2da87848 adventurelog-postgres adventurelog postgis/postgis:16-3.5-alpine
|
||||
02c0d5ba11e2 adventurelog-frontend adventurelog ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1
|
||||
2026/09/13 16:36:52 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container adventurelog (image=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1, not a database)
|
||||
2026/09/13 16:36:52 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container adventurelog-postgres (image=postgis/postgis:16-3.5-alpine, not a database)
|
||||
2026/09/13 16:36:52 dbdump.go:169: [DEBUG] DiscoverDatabases: skipping container adventurelog-frontend (image=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1, not a database)
|
||||
2026/09/13 16:36:54 backup.go:903: [INFO] [backup] Stopping adventurelog for safe volume dump
|
||||
2026/09/13 16:36:54 manager.go:1199: [DEBUG] [stacks] StopStack adventurelog: current state=running deployed=true containers=3
|
||||
2026/09/13 16:36:54 manager.go:1202: [INFO] [stacks] Stopping stack: adventurelog
|
||||
2026/09/13 16:36:54 manager.go:1379: [DEBUG] Running: docker compose down (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/13 16:36:58 manager.go:1211: [INFO] [stacks] Stack adventurelog stopped successfully (took 3.3s)
|
||||
2026/09/13 16:36:58 backup.go:779: [DEBUG] [backup] Dumping volume adventurelog_adventurelog_media for adventurelog
|
||||
2026/09/13 16:36:58 backup.go:804: [INFO] [backup] Volume dump: adventurelog/adventurelog_adventurelog_media → 45.3 MB
|
||||
2026/09/13 16:36:58 backup.go:779: [DEBUG] [backup] Dumping volume adventurelog_adventurelog_postgres_data for adventurelog
|
||||
2026/09/13 16:37:00 backup.go:804: [INFO] [backup] Volume dump: adventurelog/adventurelog_adventurelog_postgres_data → 191.0 MB
|
||||
2026/09/13 16:37:00 backup.go:913: [INFO] [backup] Restarting adventurelog after volume dump
|
||||
2026/09/13 16:37:00 manager.go:1117: [DEBUG] [stacks] StartStack adventurelog: current state=stopped deployed=true
|
||||
2026/09/13 16:37:00 manager.go:1120: [INFO] [stacks] Starting stack: adventurelog
|
||||
2026/09/13 16:37:00 manager.go:1127: [DEBUG] [stacks] StartStack adventurelog: prepared 10 env vars for compose
|
||||
2026/09/13 16:37:00 manager.go:1379: [DEBUG] Running: docker compose up -d (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/13 16:37:02 manager.go:780: [DEBUG] [stacks] restart-policy of down member "adventurelog" = "unless-stopped"
|
||||
2026/09/13 16:37:02 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 40s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:37:07 manager.go:1135: [INFO] [stacks] Stack adventurelog started successfully (took 6.3s)
|
||||
2026/09/13 16:37:07 installed.go:397: [DEBUG] [stacks] installed-images adventurelog: unchanged (3 service(s)) — app.yaml not rewritten
|
||||
2026/09/13 16:37:10 manager.go:1379: [DEBUG] Running: docker compose ps -a --format table {{.Name}} {{.Image}} {{.State}} {{.Status}} (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/13 16:37:10 manager.go:1459: [INFO] [stacks] Stack adventurelog post-start status:
|
||||
2026/09/13 16:37:10 manager.go:1462: [INFO] [stacks] adventurelog ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 running Up 3 seconds (health: starting)
|
||||
2026/09/13 16:37:10 manager.go:1462: [INFO] [stacks] adventurelog-frontend ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 running Up 9 seconds (healthy)
|
||||
2026/09/13 16:37:10 manager.go:1462: [INFO] [stacks] adventurelog-postgres postgis/postgis:16-3.5-alpine running Up 9 seconds (healthy)
|
||||
2026/09/13 16:37:22 manager.go:549: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=true composePath=/opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:37:22 healthprobe.go:153: [DEBUG] Health probe adventurelog: API GET :8000/api/ → 200 (368ms)
|
||||
2026/09/13 16:37:32 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 10s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:37:42 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 20s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:37:52 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 30s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:38:02 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 40s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:38:12 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 50s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:38:22 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 1m0s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:38:32 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 1m10s ago, effective interval 5m0s, healthy=true
|
||||
2026/09/13 16:38:33 recovery_unit.go:224: [INFO] [backup] Recovery unit captured for adventurelog → /mnt/sys_drive/felhom-data/backups/primary/adventurelog (images=3, secrets-referenced=2, data_keys=1, portable-carried=2/2, withheld=0)
|
||||
2026/09/13 16:38:35 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:38:35 [INFO] [stacks] ParseComposeHDDMounts: found 0 HDD mounts for /opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:38:35 tier2.go:424: [INFO] [backup] Tier 2 copied adventurelog → /mnt/felhom-drives/hdd_1/backups/secondary/adventurelog (236.3 MB, 0 leg(s), 0s)
|
||||
2026/09/13 16:38:35 notifier.go:234: [INFO] Event pushed: crossdrive_completed (info) — Másodlagos mentés elkészült: adventurelog
|
||||
2026/09/13 16:38:41 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog/backup-data
|
||||
2026/09/13 16:38:41 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog/backup-data (path=/stacks/adventurelog/backup-data)
|
||||
2026/09/13 16:38:41 delete.go:631: [DEBUG] [stacks] GetStackBackupData adventurelog: checked path=/mnt/sys_drive/felhom-data/backups/primary/adventurelog/db-dumps exists=false size=
|
||||
2026/09/13 16:38:41 delete.go:631: [DEBUG] [stacks] GetStackBackupData adventurelog: checked path=/mnt/sys_drive/felhom-data/backups/secondary/adventurelog/rsync exists=false size=
|
||||
2026/09/13 16:38:41 delete.go:643: [DEBUG] [stacks] GetStackBackupData adventurelog: hasBackups=false
|
||||
2026/09/13 16:38:42 healthprobe.go:53: [DEBUG] [stacks] RunHealthProbes: skipping adventurelog — last check 1m20s ago, effective interval 5m0s, healthy=true
|
||||
=== step 3 done 2026-09-13T16:38:43Z ===
|
||||
@@ -0,0 +1,58 @@
|
||||
=== step 4: the disaster and the way back — IN PLACE (no scratch guest, R-481) — 2026-09-13T16:40:06Z ===
|
||||
--- 4a. the customer removes the app with 'delete my data' (backups kept) ---
|
||||
HTTP 200
|
||||
{"ok":true,"message":"Stack adventurelog stop completed"}
|
||||
HTTP 200
|
||||
{"ok":true,"data":{"removed":"adventurelog","volumes_removed":null,"hdd_paths_removed":[],"hdd_paths_preserved":[],"hdd_note":"Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem volt mit törölni."},"message":"Stack adventurelog removed"}
|
||||
after removal: state=not_deployed updating=False phase=None err='' hold=''
|
||||
containers: 0 | volumes: 0
|
||||
the app answers: 404
|
||||
--- 4b. the way back: POST /backup/tier2/unit-restore (Mentések → „Teljes visszaállítás”, form stack_name) ---
|
||||
HTTP/2 302
|
||||
location: /backups/apps?flash_error=nincs+m%C3%A1sodlagos+f%C3%A1jlm%C3%A1solat+ehhez+az+alkalmaz%C3%A1shoz
|
||||
|
||||
restore-status after 5s: {"running": false, "op": "restore", "stack": "gokapi", "started_at": "2026-09-13T15:40:16.222440489Z", "last": {"op": "restore", "stack": "gokapi", "ok": true, "message": "A(z) gokapi: a beállítások visszaálltak — az alkalmazás újraindult. FIGYELEM: ez a mentés csak a beállításokat tartalmazta, adatot nem. Az alkalmazás adatai NEM álltak vissza ebből a mentésből.", "finished_at": "2026-09-13T15:40:24.982262899Z"}}
|
||||
after restore: state=not_deployed updating=False phase=None err='' hold=''
|
||||
|
||||
--- 4c. read the data back through the front door ---
|
||||
login: (404, '')
|
||||
READ BACK after restore: {"locations": [], "collections": [], "photo": null}
|
||||
IDENTICAL to the truth recorded before the backup: False
|
||||
locations: DIFFERENT -> []
|
||||
collections: DIFFERENT -> []
|
||||
photo: same
|
||||
--- controller log: removal + restore ---
|
||||
2026/09/13 16:40:09 manager.go:1211: [INFO] [stacks] Stack adventurelog stopped successfully (took 3.6s)
|
||||
2026/09/13 16:40:09 lifecycle.go:24: [DEBUG] [integrations] OnStackStop: stack=adventurelog integrationsFound=0
|
||||
2026/09/13 16:40:09 auth.go:134: [DEBUG] [web] auth: valid session for POST /api/stacks/adventurelog/remove
|
||||
2026/09/13 16:40:09 router.go:81: [DEBUG] [api] POST /api/stacks/adventurelog/remove (path=/stacks/adventurelog/remove)
|
||||
2026/09/13 16:40:09 router.go:838: [INFO] [api] Remove requested for stack: adventurelog
|
||||
2026/09/13 16:40:09 router.go:81: [DEBUG] [api] removeStack: name=adventurelog
|
||||
2026/09/13 16:40:09 router.go:81: [DEBUG] [api] removeStack: name=adventurelog removeHDDData=true removeBackups=false
|
||||
2026/09/13 16:40:09 delete.go:418: [DEBUG] [stacks] RemoveStack called: name="adventurelog", removeHDDData=true, backupPathsToRemove=0
|
||||
2026/09/13 16:40:09 delete.go:432: [DEBUG] [stacks] RemoveStack adventurelog: state=stopped, deployed=true, orphaned=false, deploying=false
|
||||
2026/09/13 16:40:09 delete.go:461: [INFO] Removing deployed stack: adventurelog (removeHDDData=true, hddDeclared=false, backupPaths=0)
|
||||
2026/09/13 16:40:09 delete.go:473: [DEBUG] [stacks] RemoveStack adventurelog: found 0 HDD mounts from compose file
|
||||
2026/09/13 16:40:09 manager.go:1379: [DEBUG] Running: docker compose down --volumes (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/13 16:40:10 delete.go:483: [DEBUG] [stacks] RemoveStack adventurelog: compose down output:
|
||||
2026/09/13 16:40:10 delete.go:552: [DEBUG] [stacks] RemoveStack adventurelog: processing 0 backup paths for removal (base=/mnt/sys_drive/felhom-data/backups)
|
||||
2026/09/13 16:40:10 delete.go:577: [DEBUG] [stacks] RemoveStack adventurelog: removing app.yaml at /opt/docker/stacks/adventurelog/app.yaml
|
||||
2026/09/13 16:40:10 delete.go:584: [INFO] Stack adventurelog removed successfully (took 0.2s)
|
||||
2026/09/13 16:40:10 manager.go:549: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:40:10 lifecycle.go:176: [DEBUG] [integrations] OnStackRemove: stack=adventurelog integrationsFound=0
|
||||
2026/09/13 16:40:10 notifier.go:234: [INFO] Event pushed: app_removed (info) — Alkalmazás eltávolítva: adventurelog
|
||||
2026/09/13 16:40:14 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:40:14 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:40:16 auth.go:134: [DEBUG] [web] auth: valid session for POST /backup/tier2/unit-restore
|
||||
2026/09/13 16:40:16 server.go:393: [DEBUG] [web] ServeHTTP: POST /backup/tier2/unit-restore from 172.18.0.3:55178
|
||||
2026/09/13 16:40:16 handlers.go:1871: [WARN] [web] Tier-2 unit restore refused up front: stack=adventurelog: nincs másodlagos fájlmásolat ehhez az alkalmazáshoz — app NOT stopped
|
||||
2026/09/13 16:40:16 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:40:16 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
2026/09/13 16:40:21 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:40:21 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
2026/09/13 16:40:21 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:40:21 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
2026/09/13 16:41:22 manager.go:549: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:43:22 manager.go:549: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:45:22 manager.go:549: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
=== step 4 done 2026-09-13T16:46:02Z ===
|
||||
@@ -0,0 +1,54 @@
|
||||
=== step 4, second route: the app's own copy („helyi”) after the second-drive restore was refused (R-486) — 2026-09-13T16:46:44Z ===
|
||||
--- what the Mentések apps page shows for adventurelog (removed, backups kept) ---
|
||||
|
||||
--- the restore page mentions adventurelog: False | 'helyi' near it: None
|
||||
--- POST /backup/restore stack_name=adventurelog snapshot_id=helyi at 2026-09-13T16:47:10Z ---
|
||||
HTTP/2 302
|
||||
location: /backups/restore?flash=Vissza%C3%A1ll%C3%ADt%C3%A1s+elindult+%E2%80%94+az+%C3%A1llapot+itt+friss%C3%BCl.
|
||||
|
||||
restore-status after 25s: {"running": false, "op": "restore", "stack": "adventurelog", "started_at": "2026-09-13T16:47:11.027075525Z", "last": {"op": "restore", "stack": "adventurelog", "ok": true, "message": "A(z) adventurelog: 2 adatkötet visszaállítva — az alkalmazás újraindult.", "finished_at": "2026-09-13T16:47:33.529971164Z"}, "last_recent": true}
|
||||
after: state=running updating=False phase=None err='' hold=''
|
||||
adventurelog Up 18 seconds (healthy)
|
||||
adventurelog-frontend Up 24 seconds (healthy)
|
||||
adventurelog-postgres Up 24 seconds (healthy)
|
||||
login: (302, '/')
|
||||
READ BACK after the Tier-1 restore: {"locations": [["Badacsony", 5.0, "Bazaltorgonák, szürkebarát a hegyoldalban. Árvíztűrő tükörfúrógép. (javítva)", 0, [["2026-07-09T00:00:00Z", "2026-07-11T00:00:00Z"]]], ["Keszthely", 4.0, "Festetics-kastély, a gyerekek a Balaton Múzeumot szerették.", 0, [["2026-07-12T00:00:00Z", "2026-07-15T00:00:00Z"]]], ["Tihany", 5.0, "Levendulamező és az apátság, ahonnan az egész tó látszik.", 0, [["2026-07-06T00:00:00Z", "2026-07-08T00:00:00Z"]]]], "collections": [["Balaton 2026 nyár", "Családi nyaralás a Balatonnál, két hét, három falu.", 0, []]], "photo": null}
|
||||
IDENTICAL to the truth recorded before the backup: False
|
||||
locations: DIFFERENT
|
||||
collections: DIFFERENT
|
||||
photo: same
|
||||
--- controller log ---
|
||||
2026/09/13 16:47:11 auth.go:134: [DEBUG] [web] auth: valid session for POST /backup/restore
|
||||
2026/09/13 16:47:11 server.go:393: [DEBUG] [web] ServeHTTP: POST /backup/restore from 172.18.0.3:60630
|
||||
2026/09/13 16:47:11 handlers.go:1480: [DEBUG] [web] backupRestoreHandler: stack=adventurelog snapshot=helyi from 172.18.0.3:60630
|
||||
2026/09/13 16:47:11 handlers.go:1506: [WARN] [web] Restore requested (async): stack=adventurelog, snapshot=helyi from 172.18.0.3:60630
|
||||
2026/09/13 16:47:11 restore_unit.go:313: [INFO] [backup] Restoring adventurelog from recovery unit /mnt/sys_drive/felhom-data/backups/primary/adventurelog: images=3, secrets recovered=2/2, data_keys=1
|
||||
2026/09/13 16:47:11 manager.go:1199: [DEBUG] [stacks] StopStack adventurelog: current state=not_deployed deployed=false containers=0
|
||||
2026/09/13 16:47:11 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:47:11 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
2026/09/13 16:47:11 restore.go:148: [INFO] [backup] Restoring Docker volume adventurelog_adventurelog_media for adventurelog
|
||||
2026/09/13 16:47:11 restore.go:177: [DEBUG] [backup] Volume adventurelog_adventurelog_media restored successfully
|
||||
2026/09/13 16:47:11 restore.go:148: [INFO] [backup] Restoring Docker volume adventurelog_adventurelog_postgres_data for adventurelog
|
||||
2026/09/13 16:47:13 restore.go:177: [DEBUG] [backup] Volume adventurelog_adventurelog_postgres_data restored successfully
|
||||
2026/09/13 16:47:13 restore.go:182: [INFO] [backup] Restored 2 Docker volume(s) for adventurelog
|
||||
2026/09/13 16:47:13 pin.go:93: [INFO] [stacks] pin adventurelog: adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1, adventurelog-postgres=postgis/postgis:16-3.5-alpine
|
||||
2026/09/13 16:47:13 manager.go:1117: [DEBUG] [stacks] StartStack adventurelog: current state=not_deployed deployed=true
|
||||
2026/09/13 16:47:13 manager.go:1127: [DEBUG] [stacks] StartStack adventurelog: prepared 10 env vars for compose
|
||||
2026/09/13 16:47:16 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:47:16 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
2026/09/13 16:47:20 installed.go:408: [INFO] [stacks] installed-images adventurelog: recorded 3 service(s) (adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 (sha256:7c759efab147…), adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1 (sha256:edd79220f0de…), adventurelog-postgres=postgis/postgis:16-3.5-alpine (sha256:47e961a569fd…))
|
||||
2026/09/13 16:47:21 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:47:21 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
2026/09/13 16:47:23 restore.go:212: [DEBUG] [backup] Post-restore health check: adventurelog not yet running, waiting...
|
||||
2026/09/13 16:47:26 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:47:26 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
2026/09/13 16:47:28 restore.go:212: [DEBUG] [backup] Post-restore health check: adventurelog not yet running, waiting...
|
||||
2026/09/13 16:47:31 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:47:31 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
2026/09/13 16:47:32 healthprobe.go:153: [DEBUG] Health probe adventurelog: API GET :8000/api/ → 200 (320ms)
|
||||
2026/09/13 16:47:33 restore.go:207: [DEBUG] [backup] Post-restore health check: adventurelog is running
|
||||
2026/09/13 16:47:33 restore_unit.go:391: [INFO] [backup] Restore-from-unit completed: adventurelog — 2 volume(s) of 2 listed, 0 database(s) of 0 listed
|
||||
2026/09/13 16:47:33 handlers.go:1518: [INFO] [web] Restore completed (async): stack=adventurelog in 22.502843771s (volumes 2/2, dbs 0/0)
|
||||
2026/09/13 16:47:36 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/backup/restore-status
|
||||
2026/09/13 16:47:36 router.go:81: [DEBUG] [api] GET /api/backup/restore-status (path=/backup/restore-status)
|
||||
=== done 2026-09-13T16:47:40Z ===
|
||||
@@ -0,0 +1,11 @@
|
||||
== locations truth vs after
|
||||
TRUTH: ["Badacsony", 5.0, "Bazaltorgonák, szürkebarát a hegyoldalban. Árvíztűrő tükörfúrógép. (javítva)", 0, [["2026-07-09T00:00:00Z", "2026-07-11T00:00:00Z"]]]
|
||||
AFTER: ["Badacsony", 5.0, "Bazaltorgonák, szürkebarát a hegyoldalban. Árvíztűrő tükörfúrógép. (javítva)", 0, [["2026-07-09T00:00:00Z", "2026-07-11T00:00:00Z"]]]
|
||||
TRUTH: ["Keszthely", 4.0, "Festetics-kastély, a gyerekek a Balaton Múzeumot szerették.", 0, [["2026-07-12T00:00:00Z", "2026-07-15T00:00:00Z"]]]
|
||||
AFTER: ["Keszthely", 4.0, "Festetics-kastély, a gyerekek a Balaton Múzeumot szerették.", 0, [["2026-07-12T00:00:00Z", "2026-07-15T00:00:00Z"]]]
|
||||
TRUTH: ["Tihany", 5.0, "Levendulamező és az apátság, ahonnan az egész tó látszik.", 0, [["2026-07-06T00:00:00Z", "2026-07-08T00:00:00Z"]]]
|
||||
AFTER: ["Tihany", 5.0, "Levendulamező és az apátság, ahonnan az egész tó látszik.", 0, [["2026-07-06T00:00:00Z", "2026-07-08T00:00:00Z"]]]
|
||||
== collections truth vs after
|
||||
TRUTH: ["Balaton 2026 nyár", "Családi nyaralás a Balatonnál, két hét, három falu.", 0, []]
|
||||
AFTER: ["Balaton 2026 nyár", "Családi nyaralás a Balatonnál, két hét, három falu.", 0, []]
|
||||
EQUAL after JSON normalisation: True
|
||||
@@ -0,0 +1,45 @@
|
||||
=== step 5: the guarded Update — the catalog offers no newer version (pin == catalog v0.12.1; no promotion tonight), so this is the same-version pass — 2026-09-13T16:48:35Z ===
|
||||
card before: catalog_images={'adventurelog': 'ghcr.io/seanmorley15/adventurelog-backend:v0.12.1', 'adventurelog-frontend': 'ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1', 'adventurelog-postgres': 'postgis/postgis:16-3.5-alpine'} installed=None
|
||||
units before:
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 1350 manifest.json
|
||||
2026-09-13T16:38:33.2924199360 452 compose/app.yaml
|
||||
2026-09-13T16:38:33.2924199360 2623 compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 compose/docker-compose.yml
|
||||
2026-09-13T16:36:59.5722645580 200260608 volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 volume-dumps/adventurelog_adventurelog_media.tar
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 2623 recovery-unit/compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 recovery-unit/compose/docker-compose.yml
|
||||
2026-09-13T16:38:33.2924199360 452 recovery-unit/compose/app.yaml
|
||||
2026-09-13T16:36:59.5722645580 200260608 recovery-unit/volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 recovery-unit/volume-dumps/adventurelog_adventurelog_media.tar
|
||||
2026-09-13T16:38:33.2924199360 1350 recovery-unit/manifest.json
|
||||
2026-09-13T16:38:35.6164485870 1 .felhom-tier2-layout
|
||||
--- POST /api/stacks/adventurelog/update at 2026-09-13T16:48:37Z ---
|
||||
HTTP 202
|
||||
{"ok":true,"data":{"accepted":true,"completed":false},"message":"Frissítés elindult – az állapot a kártyán követhető"}
|
||||
+ 0s phase safety-dump
|
||||
+ 3s phase done
|
||||
end (2026-09-13T16:48:40Z, +3s): state=running updating=False phase=done err='' hold=''
|
||||
--- controller log ---
|
||||
2026/09/13 16:48:37 update.go:336: [INFO] [stacks] update adventurelog: accepted — guarded update started
|
||||
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase checking
|
||||
2026/09/13 16:48:37 update_guard.go:173: [DEBUG] [backup] update precondition for adventurelog: no Tier-2 copy (nincs másodlagos fájlmásolat ehhez az alkalmazáshoz)
|
||||
2026/09/13 16:48:37 update.go:450: [INFO] [stacks] update adventurelog: precondition met — Tier 1 (own recovery unit) copy from 2026-09-13T16:38:33Z (10m0s old, limit 24h0m0s)
|
||||
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase safety-dump
|
||||
2026/09/13 16:48:37 update_guard.go:403: [INFO] [backup] update safety dump for adventurelog: the app has no database — nothing to copy (no-op)
|
||||
2026/09/13 16:48:37 update.go:482: [INFO] [stacks] update adventurelog: safety dump done (0 file(s)) []
|
||||
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase pinning
|
||||
2026/09/13 16:48:37 pin.go:362: [INFO] [stacks] update adventurelog: pin advanced to the catalog's current definition (adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.1, adventurelog-postgres=postgis/postgis:16-3.5-alpine)
|
||||
2026/09/13 16:48:37 update.go:763: [INFO] [stacks] update adventurelog: phase pulling
|
||||
2026/09/13 16:48:38 update.go:763: [INFO] [stacks] update adventurelog: phase starting
|
||||
2026/09/13 16:48:39 update.go:763: [INFO] [stacks] update adventurelog: phase verifying
|
||||
2026/09/13 16:48:39 healthprobe.go:153: [DEBUG] Health probe adventurelog: API GET :8000/api/ → 200 (3ms)
|
||||
2026/09/13 16:48:39 update.go:558: [INFO] [stacks] update adventurelog: healthy after 0s (the app's health check passed)
|
||||
2026/09/13 16:48:39 installed.go:397: [DEBUG] [stacks] installed-images adventurelog: unchanged (3 service(s)) — app.yaml not rewritten
|
||||
2026/09/13 16:48:39 update.go:564: [INFO] [stacks] update adventurelog: DONE in 2s
|
||||
login: (302, '/')
|
||||
READ BACK after the update IDENTICAL to the truth: True
|
||||
=== step 5 done 2026-09-13T16:48:43Z ===
|
||||
@@ -0,0 +1,66 @@
|
||||
=== step 6: remove with 'delete my data' AND 'delete backups', then is the drive clean? — 2026-09-13T16:49:23Z ===
|
||||
BEFORE: 3 containers; 2 volumes
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 1350 manifest.json
|
||||
2026-09-13T16:38:33.2924199360 452 compose/app.yaml
|
||||
2026-09-13T16:38:33.2924199360 2623 compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 compose/docker-compose.yml
|
||||
2026-09-13T16:36:59.5722645580 200260608 volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 volume-dumps/adventurelog_adventurelog_media.tar
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 2623 recovery-unit/compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 recovery-unit/compose/docker-compose.yml
|
||||
2026-09-13T16:38:33.2924199360 452 recovery-unit/compose/app.yaml
|
||||
2026-09-13T16:36:59.5722645580 200260608 recovery-unit/volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 recovery-unit/volume-dumps/adventurelog_adventurelog_media.tar
|
||||
2026-09-13T16:38:33.2924199360 1350 recovery-unit/manifest.json
|
||||
2026-09-13T16:38:35.6164485870 1 .felhom-tier2-layout
|
||||
HTTP 200
|
||||
{"ok":true,"message":"Stack adventurelog stop completed"}
|
||||
HTTP 200
|
||||
{"ok":true,"data":{"removed":"adventurelog","volumes_removed":null,"hdd_paths_removed":[],"hdd_paths_preserved":[],"hdd_note":"Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem volt mit törölni."},"message":"Stack adventurelog removed"}
|
||||
AFTER: state=not_deployed updating=False phase=done err='' hold=''
|
||||
containers: 0 | volumes: 0 | app.yaml: ls: cannot access '/opt/docker/stacks/adventurelog/app.yaml': No such file or directory
|
||||
--- what is left on the drives (must be nothing) ---
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 1350 manifest.json
|
||||
2026-09-13T16:38:33.2924199360 452 compose/app.yaml
|
||||
2026-09-13T16:38:33.2924199360 2623 compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 compose/docker-compose.yml
|
||||
2026-09-13T16:36:59.5722645580 200260608 volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 volume-dumps/adventurelog_adventurelog_media.tar
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog:
|
||||
2026-09-13T16:38:33.2924199360 2623 recovery-unit/compose/.felhom.yml
|
||||
2026-09-13T16:38:33.2914199240 3540 recovery-unit/compose/docker-compose.yml
|
||||
2026-09-13T16:38:33.2924199360 452 recovery-unit/compose/app.yaml
|
||||
2026-09-13T16:36:59.5722645580 200260608 recovery-unit/volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T16:36:58.3152490620 47497728 recovery-unit/volume-dumps/adventurelog_adventurelog_media.tar
|
||||
2026-09-13T16:38:33.2924199360 1350 recovery-unit/manifest.json
|
||||
2026-09-13T16:38:35.6164485870 1 .felhom-tier2-layout
|
||||
images still present (by design? the pull cache): 3
|
||||
backup prefs left: {'enabled': False}
|
||||
--- controller log ---
|
||||
2026/09/13 16:49:31 manager.go:1211: [INFO] [stacks] Stack adventurelog stopped successfully (took 4.3s)
|
||||
2026/09/13 16:49:31 lifecycle.go:24: [DEBUG] [integrations] OnStackStop: stack=adventurelog integrationsFound=0
|
||||
2026/09/13 16:49:31 auth.go:134: [DEBUG] [web] auth: valid session for POST /api/stacks/adventurelog/remove
|
||||
2026/09/13 16:49:31 router.go:81: [DEBUG] [api] POST /api/stacks/adventurelog/remove (path=/stacks/adventurelog/remove)
|
||||
2026/09/13 16:49:31 router.go:838: [INFO] [api] Remove requested for stack: adventurelog
|
||||
2026/09/13 16:49:31 router.go:81: [DEBUG] [api] removeStack: name=adventurelog
|
||||
2026/09/13 16:49:31 router.go:81: [DEBUG] [api] removeStack: name=adventurelog removeHDDData=true removeBackups=true
|
||||
2026/09/13 16:49:31 delete.go:418: [DEBUG] [stacks] RemoveStack called: name="adventurelog", removeHDDData=true, backupPathsToRemove=1
|
||||
2026/09/13 16:49:31 delete.go:432: [DEBUG] [stacks] RemoveStack adventurelog: state=stopped, deployed=true, orphaned=false, deploying=false
|
||||
2026/09/13 16:49:31 delete.go:461: [INFO] Removing deployed stack: adventurelog (removeHDDData=true, hddDeclared=false, backupPaths=1)
|
||||
2026/09/13 16:49:31 delete.go:473: [DEBUG] [stacks] RemoveStack adventurelog: found 0 HDD mounts from compose file
|
||||
2026/09/13 16:49:31 manager.go:1379: [DEBUG] Running: docker compose down --volumes (in /opt/docker/stacks/adventurelog)
|
||||
2026/09/13 16:49:32 delete.go:483: [DEBUG] [stacks] RemoveStack adventurelog: compose down output:
|
||||
2026/09/13 16:49:32 delete.go:552: [DEBUG] [stacks] RemoveStack adventurelog: processing 1 backup paths for removal (base=/mnt/sys_drive/felhom-data/backups)
|
||||
2026/09/13 16:49:32 delete.go:577: [DEBUG] [stacks] RemoveStack adventurelog: removing app.yaml at /opt/docker/stacks/adventurelog/app.yaml
|
||||
2026/09/13 16:49:32 delete.go:584: [INFO] Stack adventurelog removed successfully (took 0.2s)
|
||||
2026/09/13 16:49:32 manager.go:549: [DEBUG] [stacks] ScanStacks: found stack "adventurelog" deployed=false composePath=/opt/docker/stacks/adventurelog/docker-compose.yml
|
||||
2026/09/13 16:49:32 lifecycle.go:176: [DEBUG] [integrations] OnStackRemove: stack=adventurelog integrationsFound=0
|
||||
2026/09/13 16:49:32 notifier.go:234: [INFO] Event pushed: app_removed (info) — Alkalmazás eltávolítva: adventurelog
|
||||
2026/09/13 16:49:36 auth.go:134: [DEBUG] [web] auth: valid session for GET /api/stacks/adventurelog
|
||||
2026/09/13 16:49:36 router.go:81: [DEBUG] [api] GET /api/stacks/adventurelog (path=/stacks/adventurelog)
|
||||
=== step 6 done 2026-09-13T16:49:43Z ===
|
||||
@@ -0,0 +1,17 @@
|
||||
=== R-473 live: a fresh glance install must land healthy — 2026-09-13T17:24:12Z ===
|
||||
sync: HTTP 200 {"ok":true,"data":{"ok":true,"updated":["adventurelog","glance"],"message":"Sablonok frissítve — frissítve: adventurelog, glance"},"message":"Sablonok frissítve — frissítve: adventurelog, glance"}
|
||||
cache carries the seed: 1
|
||||
HTTP 202 {"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
|
||||
after 21s: state=running updating=False phase=None err='' hold=''
|
||||
container: glanceapp/glance:v0.8.5 Up 20 seconds (healthy) restarts=20 seconds ago
|
||||
restart count: 0
|
||||
glance log head: [felhom] first boot — seeding a default glance.yml
|
||||
2026/09/13 19:24:16 Starting server on :8080 (base-url: "", assets-path: "")
|
||||
config in the volume: 31 /app/config/glance.yml
|
||||
pages:
|
||||
- name: Kezdőlap
|
||||
front door (Host glancenight.enkisfelhom.hu): 200
|
||||
--- teardown: remove the throwaway with data + backups ---
|
||||
HTTP 200 {"ok":true,"data":{"removed":"glance","volumes_removed":null,"hdd_paths_removed":[],"hdd_paths_preserved":[],"hdd_note":"Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem volt mit törölni."},"message":"Stack glance removed"}
|
||||
left: 0 containers, 0 volumes; unit: /mnt/sys_drive/felhom-data/backups/primary/glance
|
||||
=== done 2026-09-13T17:24:46Z ===
|
||||
@@ -0,0 +1,9 @@
|
||||
unstaged-left: []
|
||||
OK [felhom-controller]: 166 cited paths — exact 151, suffix 10, ambiguous 0, cross-repo 5, FAILED 0 (siblings searched: app-catalog-felhom.eu, felhom-agent, felhom.eu)
|
||||
all controller gates OK
|
||||
pre-push [felhom-controller]: gates OK - push proceeding.
|
||||
HEAD=bdcbd50b42bdf7c19942fb2a13de481cfa7f9ff8 origin=bdcbd50b42bdf7c19942fb2a13de481cfa7f9ff8 porcelain=[]
|
||||
/dev/sda1 9.1T 3.1T 5.5T 37% /mnt/5_hdd
|
||||
/dev/sdb1 445G 215G 208G 51% /
|
||||
build-rc=0
|
||||
0.240.0: digest: sha256:f073cb622669331a69b9bfe02442e1a2b3e12bbc64396ba7e8992ce16b5fcced size: 856
|
||||
@@ -0,0 +1,54 @@
|
||||
=== FLOOR RAISE: 0.240.0 with min_agent 0.129.0 (the delivery IS the release) ===
|
||||
T0 POST at 2026-09-13T17:28:00Z
|
||||
HTTP/1.1 303 See Other
|
||||
Location: /configuration?flash=floor_set
|
||||
DB floor + declared: id="global-floor-input" name="min_controller_version" value="0.240.0" | name="min_agent" value="0.129.0" placeholder="MinAgent from |
|
||||
demo-hp on 0.240.0 at 2026-09-13T17:28:17Z (+16s): gitea.dooplex.hu/admin/felhom-controller:0.240.0 Up 7 seconds (healthy)
|
||||
demo-felhom on 0.240.0 at 2026-09-13T17:28:18Z (+18s): gitea.dooplex.hu/admin/felhom-controller:0.240.0 Up 10 seconds (healthy)
|
||||
--- hub log since T0 (managed floor) ---
|
||||
2026/09/13 19:28:01 [INFO] Global controller-version floor set to "0.240.0" (declared MinAgent "0.129.0")
|
||||
2026/09/13 19:28:03 [INFO] managed floor SERVED for demo-felhom: floor 0.240.0, agent requirement "0.129.0" from declared (golden 0.236.0)
|
||||
2026/09/13 19:28:04 [INFO] managed floor SERVED for demo-hp: floor 0.240.0, agent requirement "0.129.0" from declared (golden 0.236.0)
|
||||
|
||||
--- demo-hp: controller log (SetFloor / self-update / version) ---
|
||||
2026/09/13 17:28:10 updater.go:96: [DEBUG] [selfupdate] VerifyStartup: checking update state in /opt/docker/felhom-controller/data
|
||||
2026/09/13 17:28:10 updater.go:96: [DEBUG] [selfupdate] VerifyStartup: pending update found — target=0.240.0 previous=0.239.0
|
||||
2026/09/13 17:28:10 updater.go:809: [INFO] [selfupdate] Post-update startup: update successful (0.239.0 → 0.240.0)
|
||||
2026/09/13 17:28:10 main.go:655: [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30)
|
||||
2026/09/13 17:28:10 offsiteapply.go:151: [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply
|
||||
2026/09/13 17:28:10 scheduler.go:102: [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
|
||||
2026/09/13 17:28:10 scheduler.go:67: [DEBUG] [scheduler] periodic job registered: name="selfupdate-check" interval=6h0m0s totalJobs=18
|
||||
2026/09/13 17:28:11 client.go:67: [DEBUG] [agentapi] agent version seen: 0.130.0 (was "")
|
||||
2026/09/13 17:28:15 builder.go:40: [DEBUG] [report] BuildReport: starting — version=0.240.0, storagePaths=1
|
||||
2026/09/13 17:28:16 updater.go:96: [DEBUG] [selfupdate] SetFloor: floor "" → "0.240.0"
|
||||
2026/09/13 17:28:16 updater.go:96: [DEBUG] [selfupdate] maybeAutoUpdate: current 0.240.0 >= floor 0.240.0 — no action
|
||||
2026/09/13 17:28:20 offsiteapply.go:151: [INFO] [offsite-apply] settle-gate: GO — at/above floor 0.240.0 (we are 0.240.0), no managed update running
|
||||
|
||||
--- demo-hp: bootstrap service journal ---
|
||||
Sep 13 17:28:09 demo-hp systemd[1]: felhom-controller-bootstrap.service: Deactivated successfully.
|
||||
Sep 13 17:28:09 demo-hp systemd[1]: Stopped felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount).
|
||||
Sep 13 17:28:09 demo-hp systemd[1]: Stopping felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount)...
|
||||
Sep 13 17:28:09 demo-hp systemd[1]: Starting felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount)...
|
||||
Sep 13 17:28:09 demo-hp felhom-controller-bootstrap.sh[2056435]: [ctrl-bootstrap] deploying gitea.dooplex.hu/admin/felhom-controller:0.240.0 from /etc/felhom-bootstrap/bootstrap.json (hostname=demo-hp)
|
||||
Sep 13 17:28:09 demo-hp felhom-controller-bootstrap.sh[2056503]: 48fe33a5ee1010db5156d9cb29fa6ea466cbc4ec4afd845743a01ac6cd69c302
|
||||
Sep 13 17:28:09 demo-hp felhom-controller-bootstrap.sh[2056435]: [ctrl-bootstrap] controller started
|
||||
Sep 13 17:28:09 demo-hp systemd[1]: Finished felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount).
|
||||
|
||||
--- demo-felhom: controller log (SetFloor / self-update / version) ---
|
||||
2026/09/13 17:28:09 [INFO] [selfupdate] Post-update startup: update successful (0.239.0 → 0.240.0)
|
||||
2026/09/13 17:28:09 [INFO] Self-update enabled (check every 6h, auto-update: false, auto-update time: 04:30)
|
||||
2026/09/13 17:28:09 [INFO] [offsite-apply] settle-gate: awaiting floor knowledge (first report ACK) before offsite apply
|
||||
2026/09/13 17:28:09 [INFO] [scheduler] Registered periodic job: selfupdate-check (every 6h0m0s)
|
||||
2026/09/13 17:28:19 [INFO] [offsite-apply] settle-gate: GO — at/above floor 0.240.0 (we are 0.240.0), no managed update running
|
||||
|
||||
--- demo-felhom: bootstrap service journal ---
|
||||
Sep 13 17:28:07 demo-felhom systemd[1]: felhom-controller-bootstrap.service: Deactivated successfully.
|
||||
Sep 13 17:28:07 demo-felhom systemd[1]: Stopped felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount).
|
||||
Sep 13 17:28:07 demo-felhom systemd[1]: Stopping felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount)...
|
||||
Sep 13 17:28:07 demo-felhom systemd[1]: Starting felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount)...
|
||||
Sep 13 17:28:07 demo-felhom felhom-controller-bootstrap.sh[3523538]: [ctrl-bootstrap] deploying gitea.dooplex.hu/admin/felhom-controller:0.240.0 from /etc/felhom-bootstrap/bootstrap.json (hostname=demo-felhom)
|
||||
Sep 13 17:28:07 demo-felhom felhom-controller-bootstrap.sh[3523587]: 47d56d3e7ee979f553f76d9f675780a17a6d90e3b4d0fed22ddf424dd4c60c6c
|
||||
Sep 13 17:28:08 demo-felhom felhom-controller-bootstrap.sh[3523538]: [ctrl-bootstrap] controller started
|
||||
Sep 13 17:28:08 demo-felhom systemd[1]: Finished felhom-controller-bootstrap.service - Felhom controller bootstrap (deploy the baked controller from the agent-populated config mount).
|
||||
|
||||
SUMMARY T0=2026-09-13T17:28:00Z {'demo-hp': ('2026-09-13T17:28:17Z', 16), 'demo-felhom': ('2026-09-13T17:28:18Z', 18)} not done: []
|
||||
@@ -0,0 +1,62 @@
|
||||
=== v0.240.0 live validation on demo-hp — 2026-09-13T17:28:41Z ===
|
||||
controller: gitea.dooplex.hu/admin/felhom-controller:0.240.0
|
||||
catalog-cache template carries DEBUG=False: 1
|
||||
--- deploy ---
|
||||
HTTP 202 {"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
|
||||
healthy: True
|
||||
--- R-482: a CSRF failure page must NOT be a debug page ---
|
||||
login with a bogus CSRF -> 403 | mentions 'DEBUG = True': False | length: 300
|
||||
--- sign up + a place, then backup now (R-484: a db-dump must appear) ---
|
||||
signup: 200
|
||||
login: (302, '/')
|
||||
location: 201
|
||||
HTTP 200 {"ok":true,"message":"Mentés elindítva"}
|
||||
backup idle after 100 s
|
||||
HTTP 200 {"ok":true,"message":"2. mentés elindítva"}
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog:
|
||||
2026-09-13T17:30:42.0264751580 8170290 db-dumps/adventurelog-postgres.sql
|
||||
2026-09-13T17:32:19.5796963680 1385 manifest.json
|
||||
2026-09-13T17:32:19.5796963680 452 compose/app.yaml
|
||||
2026-09-13T17:32:19.5786963550 2623 compose/.felhom.yml
|
||||
2026-09-13T17:32:19.5786963550 3844 compose/docker-compose.yml
|
||||
2026-09-13T17:30:47.5035437220 199777280 volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T17:30:46.3705295390 47497728 volume-dumps/adventurelog_adventurelog_media.tar
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog:
|
||||
2026-09-13T17:30:42.0264751580 8170290 recovery-unit/db-dumps/adventurelog-postgres.sql
|
||||
2026-09-13T17:32:19.5786963550 2623 recovery-unit/compose/.felhom.yml
|
||||
2026-09-13T17:32:19.5786963550 3844 recovery-unit/compose/docker-compose.yml
|
||||
2026-09-13T17:32:19.5796963680 452 recovery-unit/compose/app.yaml
|
||||
2026-09-13T17:30:47.5035437220 199777280 recovery-unit/volume-dumps/adventurelog_adventurelog_postgres_data.tar
|
||||
2026-09-13T17:30:46.3705295390 47497728 recovery-unit/volume-dumps/adventurelog_adventurelog_media.tar
|
||||
2026-09-13T17:32:19.5796963680 1385 recovery-unit/manifest.json
|
||||
2026-09-13T17:32:22.5337333470 1 .felhom-tier2-layout
|
||||
DB dump discovered: 2026/09/13 17:28:47 logscanner.go:69: [DEBUG] [metrics] logscanner: scanned adventurelog-postgres: errors=0 warnings=2 issues=2 (took 27ms)
|
||||
2026/09/13 17:28:56 installed.go:408: [INFO] [stacks] installed-images adventurelog: recorded 3 service(s) (adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1 (sha256:7c759efab147…), adv
|
||||
2026/09/13 17:28:56 pin.go:93: [INFO] [stacks] pin adventurelog: adventurelog=ghcr.io/seanmorley15/adventurelog-backend:v0.12.1, adventurelog-frontend=ghcr.io/seanmorley15/adventurelog-frontend:v0.12.
|
||||
--- R-485: the card ---
|
||||
HTTP 200 {"ok":true,"data":{"stack":"adventurelog","backup_paths":[{"path":"/mnt/sys_drive/felhom-data/backups/primary/adventurelog","size_bytes":255469986,"size_human":"244M","exists":true},{"path":"/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog","size_bytes":255474083,"size_human":"244M","exists":true}],"has_backups":true}}
|
||||
truth: [('Tihany', 5.0, 'Levendulamező.')]
|
||||
--- R-486: remove with backups KEPT, then the second-drive restore must WORK ---
|
||||
HTTP 200 {"ok":true,"data":{"removed":"adventurelog","volumes_removed":null,"hdd_paths_removed":[],"hdd_paths_preserved":[],"hdd_note":"Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem volt mit törölni."},"message":"Stack adventurelog removed"}
|
||||
volumes after removal: 0
|
||||
cross_drive record kept: True
|
||||
HTTP/2 302
|
||||
location: /backups/apps?flash=Teljes+vissza%C3%A1ll%C3%ADt%C3%A1s+elindult+%E2%80%94+az+%C3%A1llapot+itt+friss%C3%BCl.
|
||||
|
||||
restore-status: {"running": false, "op": "tier2-unit-restore", "stack": "adventurelog", "started_at": "2026-09-13T17:32:40.44475981Z", "last": {"op": "tier2-unit-restore", "stack": "adventurelog", "ok": true, "message": "A(z) adventurelog: 2 adatkötet és az adatbázis visszaállítva — az alkalmazás újraindult. A visszaállítás forrása a második meghajtón lévő másolat volt (2026-09-13 19:32).", "finished_at": "2026-0
|
||||
healthy: True
|
||||
login: (302, '/')
|
||||
READ BACK after the Tier-2 restore identical: True [('Tihany', 5.0, 'Levendulamező.')]
|
||||
--- R-480: card after a successful restore (no update failure here, so update_error must be empty) ---
|
||||
state=running updating=False phase=None err='' hold=''
|
||||
--- R-474: remove with delete my data AND delete backups → clean ---
|
||||
HTTP 200 {"ok":true,"data":{"removed":"adventurelog","volumes_removed":null,"hdd_paths_removed":[],"hdd_paths_preserved":[],"hdd_note":"Az alkalmazás nem tárolt saját adatot külső meghajtón, így ott nem volt mit törölni.","backup_paths_removed":["/mnt/sys_drive/felhom-data/backups/primary/adventurelog (244M)","/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog (243.6 MB)"]},"message":"Stack adventurelog removed"}
|
||||
/mnt/sys_drive/felhom-data/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/primary/adventurelog: ABSENT
|
||||
/mnt/felhom-drives/hdd_1/backups/secondary/adventurelog: ABSENT
|
||||
prefs left: None
|
||||
--- controller log (removal + mirror deletion) ---
|
||||
2026/09/13 17:33:12 delete.go:569: [INFO] Removed backup data: /mnt/sys_drive/felhom-data/backups/primary/adventurelog (244M)
|
||||
2026/09/13 17:33:12 r474_remove_mirrors.go:91: [INFO] [backup] remove adventurelog: Tier-2 mirror deleted: /mnt/felhom-drives/hdd_1/backups/secondary/adventurelog (243.6 MB)
|
||||
=== done 2026-09-13T17:33:18Z ===
|
||||
@@ -0,0 +1,37 @@
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/cmd/controller 10.379s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/agentapi 0.191s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/api 0.315s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/appbackup 0.023s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/appexport 0.974s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/assets [no test files]
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/backup 318.690s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/backupwindow 0.004s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/bootrecon 0.008s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/bootstrap 14.024s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/channelhealth 0.005s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/cloudflare [no test files]
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/config 0.005s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/crypto [no test files]
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/fillwatch 0.007s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/infra 0.010s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/integrations [no test files]
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/logx [no test files]
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/mailrelay 0.016s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/metrics 0.008s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/monitor 0.005s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/notify 0.786s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/offsiteapply 0.010s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/quiesce 0.081s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/recovery [no test files]
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/report 2.583s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/scheduler 0.155s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/selftest [no test files]
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/selfupdate 0.027s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/settings 0.011s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/setup 0.010s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/stacks 0.910s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/sync 0.018s
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/system 0.096s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/internal/util [no test files]
|
||||
ok gitea.dooplex.hu/admin/felhom-controller/internal/web 29.790s
|
||||
? gitea.dooplex.hu/admin/felhom-controller/scripts [no test files]
|
||||
@@ -0,0 +1,14 @@
|
||||
=== R-471 red-proof — the R-419 decoy shape: a second '## Observations' block appended to a real REPORT.md, holding one unmarked item ===
|
||||
--- OLD parser (git HEAD 681c3d6, first section only) ---
|
||||
OK 3. FILED R-479
|
||||
OK 4. FILED R-480
|
||||
OK 5. FILED R-474
|
||||
observations gate OK — every observation is either filed or explicitly declared
|
||||
old-rc=0 (0 = the unmarked item was NOT seen — LIVE HOLE)
|
||||
--- NEW parser (every section) ---
|
||||
item 1: A real finding. It carries no FILED marker and no NOT-A-FINDING marker at all.
|
||||
neither `FILED: R-NNN` nor `NOT-A-FINDING: <reason>`
|
||||
|
||||
An observation that lives only in REPORT.md has a lifetime of ONE SESSION — this file is overwritten every time. That is how the cooldown-grain finding was lost on 2026-08-23 and had to be re-derived the next day.
|
||||
Fix: add `FILED: R-NNN` naming the row you opened for it, or `NOT-A-FINDING: <why this is not worth a row>`. Opening the row is the default; declaring is the exception and needs its reason stated.
|
||||
new-rc=1
|
||||
@@ -0,0 +1,21 @@
|
||||
MUTATION in /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/backup/r474_remove_mirrors.go:
|
||||
- if !allowed[d] {
|
||||
+ if false {
|
||||
|
||||
=== RUN TestR474_OnlyTheAppsOwnMirrorIsRemoved
|
||||
[INFO] [settings] No settings.json found, using defaults
|
||||
[INFO] [settings] Settings saved
|
||||
[INFO] [settings] Added storage path: /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002
|
||||
[INFO] [settings] Settings saved
|
||||
[INFO] [backup] remove gokapi: Tier-2 mirror deleted: /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/gokapi (2 B)
|
||||
[INFO] [backup] remove gokapi: Tier-2 mirror deleted: /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/kimai (2 B)
|
||||
[INFO] [backup] remove gokapi: Tier-2 mirror deleted: /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/_shares (2 B)
|
||||
[INFO] [backup] remove gokapi: Tier-2 mirror deleted: /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/kimai (0 B)
|
||||
r477_r474_test.go:78: exactly the app's own mirror must be removed, got [/tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/gokapi (2 B) /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/kimai (2 B) /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/_shares (2 B) /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/kimai (0 B)]
|
||||
r477_r474_test.go:85: /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/kimai must survive: stat /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/kimai: no such file or directory
|
||||
r477_r474_test.go:85: /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/_shares must survive: stat /tmp/TestR474_OnlyTheAppsOwnMirrorIsRemoved281790753/002/backups/secondary/_shares: no such file or directory
|
||||
--- FAIL: TestR474_OnlyTheAppsOwnMirrorIsRemoved (0.01s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/backup 0.012s
|
||||
FAIL
|
||||
exit=1
|
||||
@@ -0,0 +1,20 @@
|
||||
MUTATION in /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/backup/update_guard.go:
|
||||
- times = m.OffsiteSnapshotTimes
|
||||
+ times = func(c context.Context) (map[string]time.Time, error) {
|
||||
inv, err := m.OffsiteInventoryList(c)
|
||||
out := map[string]time.Time{}
|
||||
for _, a := range inv.Apps {
|
||||
out[a.App] = a.LatestAt
|
||||
}
|
||||
return out, err
|
||||
}
|
||||
|
||||
=== RUN TestR477_TheUpdateOffsiteLookupRunsNoStats
|
||||
[INFO] [settings] No settings.json found, using defaults
|
||||
[INFO] [settings] Settings saved
|
||||
r477_r474_test.go:43: the update lookup must be one snapshots call and no stats; calls=[-r sftp:felhom@nas.local:/srv/repo -o sftp.command=ssh felhom@nas.local -p 22 -oBatchMode=yes -oConnectTimeout=10 -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/tmp/TestR477_TheUpdateOffsiteLookupRunsNoStats2946017940/001/offbox/known_hosts -i /tmp/TestR477_TheUpdateOffsiteLookupRunsNoStats2946017940/001/offbox/ssh_key -s sftp snapshots --json -r sftp:felhom@nas.local:/srv/repo -o sftp.command=ssh felhom@nas.local -p 22 -oBatchMode=yes -oConnectTimeout=10 -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/tmp/TestR477_TheUpdateOffsiteLookupRunsNoStats2946017940/001/offbox/known_hosts -i /tmp/TestR477_TheUpdateOffsiteLookupRunsNoStats2946017940/001/offbox/ssh_key -s sftp stats a1 --json -r sftp:felhom@nas.local:/srv/repo -o sftp.command=ssh felhom@nas.local -p 22 -oBatchMode=yes -oConnectTimeout=10 -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/tmp/TestR477_TheUpdateOffsiteLookupRunsNoStats2946017940/001/offbox/known_hosts -i /tmp/TestR477_TheUpdateOffsiteLookupRunsNoStats2946017940/001/offbox/ssh_key -s sftp stats b2 --json]
|
||||
--- FAIL: TestR477_TheUpdateOffsiteLookupRunsNoStats (0.00s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/backup 0.007s
|
||||
FAIL
|
||||
exit=1
|
||||
@@ -0,0 +1,11 @@
|
||||
MUTATION in /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/stacks/update.go:
|
||||
- if !deployedAt.IsZero() && p.ProvenAt.Before(deployedAt) {
|
||||
+ if false {
|
||||
|
||||
=== RUN TestR478_ACopyOlderThanThisInstallDoesNotCount
|
||||
r480_r478_test.go:87: a 2-hour-old unit under a 10-minute-old install belongs to the previous install — back up first; calls=[CanBackUp RestorePoints SafetyDump]
|
||||
--- FAIL: TestR478_ACopyOlderThanThisInstallDoesNotCount (0.19s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/stacks 0.191s
|
||||
FAIL
|
||||
exit=1
|
||||
@@ -0,0 +1,17 @@
|
||||
MUTATION in /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/stacks/update.go:
|
||||
- if st.updateHeld && !st.Updating && (!st.Deployed || (g != nil && !held)) {
|
||||
+ if st.updateHeld && false && !st.Updating && (!st.Deployed || (g != nil && !held)) {
|
||||
|
||||
=== RUN TestR480_TheFailureSentenceGoesWhenItsHoldIsLifted
|
||||
r480_r478_test.go:32: GetStack after the hold is lifted: phase="failed" err="HELD-SENTENCE" — the card would say a running app is stopped
|
||||
r480_r478_test.go:36: GetStacks after the hold is lifted still carries "HELD-SENTENCE"
|
||||
--- FAIL: TestR480_TheFailureSentenceGoesWhenItsHoldIsLifted (0.01s)
|
||||
=== RUN TestR480_ARemovedAppShowsNoUpdateOutcome
|
||||
r480_r478_test.go:47: a removed app must not carry the held update's sentence, got "HELD-SENTENCE"
|
||||
--- FAIL: TestR480_ARemovedAppShowsNoUpdateOutcome (0.01s)
|
||||
=== RUN TestR480_AFailureThatHeldNothingKeepsItsSentence
|
||||
--- PASS: TestR480_AFailureThatHeldNothingKeepsItsSentence (0.01s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/stacks 0.026s
|
||||
FAIL
|
||||
exit=1
|
||||
@@ -0,0 +1,11 @@
|
||||
MUTATION in /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/appbackup/dbservices.go:
|
||||
- , strings.Contains(img, "postgis")
|
||||
+
|
||||
|
||||
=== RUN TestDBTypeForImage
|
||||
dbservices_test.go:60: dbTypeForImage("postgis/postgis:16-3.5-alpine") = ("", false), want ("postgres", true)
|
||||
--- FAIL: TestDBTypeForImage (0.00s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/appbackup 0.005s
|
||||
FAIL
|
||||
exit=1
|
||||
@@ -0,0 +1,12 @@
|
||||
MUTATION in /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/stacks/delete.go:
|
||||
- resp.BackupPaths = append(resp.BackupPaths, buildPathInfo(appbackup.RecoveryUnitPath(drivePath, name)))
|
||||
+ resp.BackupPaths = append(resp.BackupPaths, buildPathInfo(filepath.Join(drivePath, "backups", "primary", name, "db-dumps")))
|
||||
|
||||
=== RUN TestR485_BackupCardSeesTheUnitAndTheMirror
|
||||
r485_backup_card_test.go:46: want the unit and the mirror, got [/tmp/TestR485_BackupCardSeesTheUnitAndTheMirror1453164814/003/backups/secondary/nextcloud]
|
||||
r485_backup_card_test.go:49: the unit's size must include its volume dumps, got 0
|
||||
--- FAIL: TestR485_BackupCardSeesTheUnitAndTheMirror (0.01s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/stacks 0.012s
|
||||
FAIL
|
||||
exit=1
|
||||
@@ -0,0 +1,14 @@
|
||||
MUTATION in /mnt/5_hdd/felhom.eu/git/felhom-controller/controller/internal/api/router.go:
|
||||
- if r.sett != nil && body.RemoveBackups {
|
||||
+ if r.sett != nil {
|
||||
_ = r.sett.SetCrossDriveConfig(name, nil)
|
||||
}
|
||||
if r.sett != nil && body.RemoveBackups {
|
||||
|
||||
=== RUN TestR486_RemovalKeepsTheTier2RecordUnlessBackupsGo
|
||||
r474_remove_wiring_test.go:57: removeStack calls SetCrossDriveConfig at line 904 — a removal with backups kept would forget the mirror it kept (R-486)
|
||||
--- FAIL: TestR486_RemovalKeepsTheTier2RecordUnlessBackupsGo (0.00s)
|
||||
FAIL
|
||||
FAIL gitea.dooplex.hu/admin/felhom-controller/internal/api 0.010s
|
||||
FAIL
|
||||
exit=1
|
||||
Reference in New Issue
Block a user