scheduled fix

This commit is contained in:
JiriUhlir
2026-06-23 07:33:31 +02:00
parent a7a53f064c
commit 44a36ffb20
2 changed files with 133 additions and 6 deletions
+22 -3
View File
@@ -10,6 +10,7 @@ from app.db.audit import log_audit_event
from app.db.jobs import create_job
from app.logging_config import get_logger
from app.db.scheduled_scripts import (
compute_next_run_at,
create_scheduled_script,
delete_scheduled_script,
get_scheduled_script,
@@ -401,7 +402,12 @@ def create_scheduled_script_action(
):
metadata = form_metadata(name, description, schedule_type, schedule_time, timeout_seconds, is_enabled)
metadata["script_name"] = validate_script_name(script_name)
script_id = create_scheduled_script(metadata)
# Zapnutý skript nesmí skončit s next_run_at = NULL. Když čas nelze spočítat,
# ukaž adminovi chybu místo tichého uložení nespustitelného skriptu.
try:
script_id = create_scheduled_script(metadata)
except ValueError as exc:
raise HTTPException(status_code=400, detail=f"Nelze spočítat další běh: {exc}")
created_name = metadata["script_name"]
if not script_path(created_name).exists():
save_script_file(created_name, DEFAULT_SCRIPT_CONTENT)
@@ -519,7 +525,11 @@ def update_scheduled_script_action(
if not script:
raise HTTPException(status_code=404, detail="Scheduled script not found")
metadata = form_metadata(name, description, schedule_type, schedule_time, timeout_seconds, is_enabled)
update_scheduled_script(script_id, metadata)
# Při editaci se přepočítává next_run_at; neplatnou kombinaci hlásíme adminovi.
try:
update_scheduled_script(script_id, metadata)
except ValueError as exc:
raise HTTPException(status_code=400, detail=f"Nelze spočítat další běh: {exc}")
log_audit_event(
user,
action="scheduled_script.updated",
@@ -590,7 +600,16 @@ def toggle_scheduled_script(script_id: int, user=Depends(require_user)):
if not script:
raise HTTPException(status_code=404, detail="Scheduled script not found")
enabled = not bool(script.get("is_enabled"))
set_scheduled_script_enabled(script_id, enabled)
# Zapnutí dopočítá next_run_at, vypnutí ho nastaví na NULL (řeší DB vrstva).
next_run_at = None
if enabled:
try:
next_run_at = compute_next_run_at(
script.get("schedule_type"), script.get("schedule_time")
)
except ValueError as exc:
raise HTTPException(status_code=400, detail=f"Nelze spočítat další běh: {exc}")
set_scheduled_script_enabled(script_id, enabled, next_run_at)
log_audit_event(
user,
action="scheduled_script.enabled" if enabled else "scheduled_script.disabled",