diff --git a/app/db/migration_readiness.py b/app/db/migration_readiness.py index f80891e..9bd0736 100644 --- a/app/db/migration_readiness.py +++ b/app/db/migration_readiness.py @@ -137,32 +137,6 @@ def _first_int(data: dict[str, Any], keys: tuple[str, ...]) -> int | None: return None -def _readiness_from_script_output(result_data: dict[str, Any], combined_text: str) -> bool: - ready_value = result_data.get("ready") - if isinstance(ready_value, bool): - return ready_value - - readiness_value = str( - result_data.get("readiness") - or result_data.get("migration_readiness") - or result_data.get("migrationReadiness") - or "" - ).strip().upper() - - if readiness_value == "READY": - return True - if readiness_value == "NOT READY": - return False - - upper_text = combined_text.upper() - if re.search(r"(? dict[str, Any]: if not job: return { @@ -170,18 +144,34 @@ def summarize_readiness(job: dict[str, Any] | None) -> dict[str, Any]: "ok_count": 0, "warn_count": 0, "fail_count": 0, - "raw_output": "", + "return_code": None, + "stdout": "", + "stderr": "", "job": None, } - raw_output = get_job_log_output(int(job["id"])) result_data = _result_data(job) + return_code = _result_value(job, ("returncode", "return_code", "exit_code", "exitCode")) + stdout = _result_value(job, ("stdout", "out")) + stderr = _result_value(job, ("stderr", "err")) + + if stdout is None: + stdout = get_job_log_output(int(job["id"]), stream="stdout", include_stream=False) + if stderr is None: + stderr = get_job_log_output(int(job["id"]), stream="stderr", include_stream=False) + + error_text = job.get("error_text") or "" + if error_text: + stderr = f"{stderr}\n{error_text}" if stderr else error_text + + stdout = _redact_sensitive_text(str(stdout or "")) + stderr = _redact_sensitive_text(str(stderr or "")) combined_text = "\n".join( value for value in ( - raw_output, + stdout, + stderr, job.get("result_json") or "", - job.get("error_text") or "", ) if value ) @@ -198,11 +188,13 @@ def summarize_readiness(job: dict[str, Any] | None) -> dict[str, Any]: fail_count = _count_token(combined_text, "FAIL") return { - "ready": _readiness_from_script_output(result_data, combined_text), + "ready": return_code == 0, "ok_count": ok_count, "warn_count": warn_count, "fail_count": fail_count, - "raw_output": raw_output, + "return_code": return_code, + "stdout": stdout, + "stderr": stderr, "job": job, } diff --git a/app/routes/migration_readiness.py b/app/routes/migration_readiness.py index f6799ce..03ee493 100644 --- a/app/routes/migration_readiness.py +++ b/app/routes/migration_readiness.py @@ -85,25 +85,27 @@ def migration_readiness_page(request: Request, user=Depends(require_user)): job_rows = 'Zatím není uložený žádný výsledek preflight kontroly.' if job: job_id = html.escape(str(job.get("id", ""))) + return_code = summary.get("return_code") + return_code_label = "" if return_code is None else html.escape(str(return_code)) job_rows = f""" Úloha#{job_id} Stav úlohy{render_job_status(job.get("status"))} + Return code{return_code_label} Vytvořeno{html.escape(job.get("created_at", "") or "")} Spuštěno{html.escape(job.get("started_at", "") or "")} Dokončeno{html.escape(job.get("finished_at", "") or "")} Worker{html.escape(job.get("worker_id", "") or "")} """ - raw_output = html.escape(summary.get("raw_output") or "") - if not raw_output: - raw_output = "Zatím není uložený žádný log výstup." + stdout = html.escape(summary.get("stdout") or "Zatím není uložený žádný stdout log.") + stderr = html.escape(summary.get("stderr") or "Zatím není uložený žádný stderr log.") return page( "Migration Readiness", f"""

Migration Readiness

-

Poslední výsledek maintenance skriptu {html.escape(PREFLIGHT_SCRIPT)} uložený v databázi. Stav vychází pouze z výstupu skriptu.

+

Poslední výsledek maintenance skriptu {html.escape(PREFLIGHT_SCRIPT)} uložený v databázi. Stav READY / NOT READY vychází pouze z return code jobu.

@@ -152,9 +154,15 @@ def migration_readiness_page(request: Request, user=Depends(require_user)):
-
-

Raw preflight log výstup

-
{raw_output}
+
+
+

Raw preflight stdout

+
{stdout}
+
+
+

Raw preflight stderr

+
{stderr}
+
{render_script_result("Poslední výsledek Bootstrap v2", BOOTSTRAP_SCRIPT, bootstrap_summary)}