iso-builds: Dateigroesse speichern und ausliefern
Neue Spalte size_bytes (Migration 0024, analog zu sha256/Migration 0023) - wird direkt nach erfolgreichem Bau einmalig berechnet (output_path.stat(). st_size) und zusammen mit sha256 gespeichert, kein Neuberechnen bei jedem Seitenaufruf noetig. Nutzer-Feedback (01.09.2026, echter Hardware-Test): "Bitte nach ISO-Build auch die Größe anzeigen lassen" - kundenplattform zeigt sie jetzt auf /installationsmedium an (iso_build.size_bytes | filesizeformat).
This commit is contained in:
parent
0acb1b6b81
commit
fb87a2377a
17
app.py
17
app.py
@ -2147,7 +2147,7 @@ def recharge_enrollment_session(session_id: str, additional_devices: int, expire
|
|||||||
|
|
||||||
def iso_build_row_to_dict(row) -> dict:
|
def iso_build_row_to_dict(row) -> dict:
|
||||||
(build_id, organization_id, status, output_filename, error_message,
|
(build_id, organization_id, status, output_filename, error_message,
|
||||||
created_at, started_at, finished_at, expires_at, sha256) = row
|
created_at, started_at, finished_at, expires_at, sha256, size_bytes) = row
|
||||||
return {
|
return {
|
||||||
"id": str(build_id),
|
"id": str(build_id),
|
||||||
"organization_id": str(organization_id),
|
"organization_id": str(organization_id),
|
||||||
@ -2159,6 +2159,7 @@ def iso_build_row_to_dict(row) -> dict:
|
|||||||
"finished_at": finished_at.isoformat() if finished_at else None,
|
"finished_at": finished_at.isoformat() if finished_at else None,
|
||||||
"expires_at": expires_at.isoformat() if expires_at else None,
|
"expires_at": expires_at.isoformat() if expires_at else None,
|
||||||
"sha256": sha256,
|
"sha256": sha256,
|
||||||
|
"size_bytes": size_bytes,
|
||||||
}
|
}
|
||||||
|
|
||||||
def fetch_iso_build(build_id: str):
|
def fetch_iso_build(build_id: str):
|
||||||
@ -2167,7 +2168,7 @@ def fetch_iso_build(build_id: str):
|
|||||||
cur.execute(
|
cur.execute(
|
||||||
"""
|
"""
|
||||||
SELECT id, organization_id, status, output_filename, error_message,
|
SELECT id, organization_id, status, output_filename, error_message,
|
||||||
created_at, started_at, finished_at, expires_at, sha256
|
created_at, started_at, finished_at, expires_at, sha256, size_bytes
|
||||||
FROM iso_builds
|
FROM iso_builds
|
||||||
WHERE id = %s
|
WHERE id = %s
|
||||||
""",
|
""",
|
||||||
@ -2182,7 +2183,7 @@ def fetch_iso_builds(organization_id: str):
|
|||||||
cur.execute(
|
cur.execute(
|
||||||
"""
|
"""
|
||||||
SELECT id, organization_id, status, output_filename, error_message,
|
SELECT id, organization_id, status, output_filename, error_message,
|
||||||
created_at, started_at, finished_at, expires_at, sha256
|
created_at, started_at, finished_at, expires_at, sha256, size_bytes
|
||||||
FROM iso_builds
|
FROM iso_builds
|
||||||
WHERE organization_id = %s
|
WHERE organization_id = %s
|
||||||
ORDER BY created_at DESC
|
ORDER BY created_at DESC
|
||||||
@ -2209,6 +2210,7 @@ def update_iso_build(
|
|||||||
output_filename: str | None = None,
|
output_filename: str | None = None,
|
||||||
error_message: str | None = None,
|
error_message: str | None = None,
|
||||||
sha256: str | None = None,
|
sha256: str | None = None,
|
||||||
|
size_bytes: int | None = None,
|
||||||
mark_started: bool = False,
|
mark_started: bool = False,
|
||||||
mark_finished: bool = False,
|
mark_finished: bool = False,
|
||||||
):
|
):
|
||||||
@ -2226,13 +2228,14 @@ def update_iso_build(
|
|||||||
SET status = %s,
|
SET status = %s,
|
||||||
output_filename = COALESCE(%s, output_filename),
|
output_filename = COALESCE(%s, output_filename),
|
||||||
error_message = %s,
|
error_message = %s,
|
||||||
sha256 = COALESCE(%s, sha256)
|
sha256 = COALESCE(%s, sha256),
|
||||||
|
size_bytes = COALESCE(%s, size_bytes)
|
||||||
{", started_at = CURRENT_TIMESTAMP" if mark_started else ""}
|
{", started_at = CURRENT_TIMESTAMP" if mark_started else ""}
|
||||||
{", finished_at = CURRENT_TIMESTAMP" if mark_finished else ""}
|
{", finished_at = CURRENT_TIMESTAMP" if mark_finished else ""}
|
||||||
{f", expires_at = CURRENT_TIMESTAMP + INTERVAL '{ISO_BUILD_EXPIRY_DAYS} days'" if setzt_expiry else ""}
|
{f", expires_at = CURRENT_TIMESTAMP + INTERVAL '{ISO_BUILD_EXPIRY_DAYS} days'" if setzt_expiry else ""}
|
||||||
WHERE id = %s
|
WHERE id = %s
|
||||||
""",
|
""",
|
||||||
(status, output_filename, error_message, sha256, build_id),
|
(status, output_filename, error_message, sha256, size_bytes, build_id),
|
||||||
)
|
)
|
||||||
|
|
||||||
def cleanup_old_iso_builds(organization_id: str, keep_build_id) -> None:
|
def cleanup_old_iso_builds(organization_id: str, keep_build_id) -> None:
|
||||||
@ -2395,9 +2398,11 @@ def run_iso_build(build_id, organization_id: str, activation_code: str, wifi_ssi
|
|||||||
return
|
return
|
||||||
|
|
||||||
sha256 = compute_file_sha256(output_path)
|
sha256 = compute_file_sha256(output_path)
|
||||||
|
size_bytes = output_path.stat().st_size
|
||||||
|
|
||||||
update_iso_build(
|
update_iso_build(
|
||||||
build_id, status="completed", output_filename=output_path.name, sha256=sha256, mark_finished=True
|
build_id, status="completed", output_filename=output_path.name, sha256=sha256,
|
||||||
|
size_bytes=size_bytes, mark_finished=True
|
||||||
)
|
)
|
||||||
cleanup_old_iso_builds(organization_id, build_id)
|
cleanup_old_iso_builds(organization_id, build_id)
|
||||||
|
|
||||||
|
|||||||
5
migrations/0024_iso_build_size.sql
Normal file
5
migrations/0024_iso_build_size.sql
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
-- ISO-Groesse fuer die Kundenplattform-Anzeige (01.09.2026, Nutzer-Feedback
|
||||||
|
-- nach dem ersten echten Hardware-Test: "Bitte nach ISO-Build auch die
|
||||||
|
-- Groesse anzeigen lassen"). Analog zu sha256 (Migration 0023) einmalig
|
||||||
|
-- direkt nach erfolgreichem Bau berechnet, nicht bei jedem Seitenaufruf.
|
||||||
|
ALTER TABLE iso_builds ADD COLUMN size_bytes BIGINT;
|
||||||
Loading…
x
Reference in New Issue
Block a user