scheduled fix
This commit is contained in:
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user