mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-16 17:55:26 -04:00
3e65326c3f
* fix: expand cookbook error output tail from 12 to 50 lines When a task reaches status 'error', the status endpoint was returning only the last 12 lines of the subprocess log. The existing context-menu 'Copy last 50 lines' action was therefore copying the same 12 lines, making it useless for diagnosing failures that produce long stack traces or build output. - Set _tail_lines = 50 when status == 'error', keep 12 for running tasks - Initialise exit_code = None before the status-classification block so it is always defined in the result dict (was only set inside the is_alive branch, potential NameError in the dead-session path) - Include exit_code in the task-status response dict - JS poller captures exit_code from live data into local task state The frontend output panel and 'Copy last 50 lines' now show the actual error context without any UI changes. * refactor: extract output-tail logic to testable helper + behavioral tests Addresses review feedback on #1538: the previous tests were source-level string guards. Extract the tail-slicing into a dependency-free helper (routes/cookbook_output.error_aware_output_tail) and replace the guards with behavioral tests that exercise the actual logic: - error status with a 200-line snapshot -> exactly the last 50 lines - running/ready/completed/stopped/unknown -> last 12 lines - short snapshot -> all lines, no padding - empty snapshot -> empty string - error tail is a strict superset (suffix-compatible) of the non-error tail The helper has no FastAPI/SQLAlchemy imports so it unit-tests without standing up the app. --------- Co-authored-by: Alexandre Teixeira <111787685+alteixeira20@users.noreply.github.com>
20 lines
779 B
Python
20 lines
779 B
Python
"""Pure helpers for shaping cookbook task output for the status response.
|
|
|
|
Kept dependency-free (no FastAPI / SQLAlchemy imports) so the behavior can be
|
|
unit-tested without standing up the whole app.
|
|
"""
|
|
|
|
|
|
def error_aware_output_tail(full_snapshot: str, status: str) -> str:
|
|
"""Return the trailing slice of a task log for the status response.
|
|
|
|
Failed tasks return the last 50 lines so the "Copy last 50 lines" action
|
|
surfaces the actual error context (stack traces, build output). Running and
|
|
other non-error tasks keep the cheaper 12-line tail to limit the payload on
|
|
the 10s polling interval.
|
|
"""
|
|
if not full_snapshot:
|
|
return ""
|
|
tail_lines = 50 if status == "error" else 12
|
|
return "\n".join(full_snapshot.splitlines()[-tail_lines:])
|