BBFbyOpus

This commit is contained in:
Artem Kokos
2026-04-01 22:51:24 +07:00
parent 732313a61c
commit b6b25fa2a1
11 changed files with 160 additions and 72 deletions

View File

@@ -14,6 +14,9 @@ logger = logging.getLogger(__name__)
router = APIRouter(dependencies=[Depends(require_admin)])
# Префиксы служебных задач -- не показываем на фронте
_INTERNAL_JOB_PREFIXES = ("cleanup_",)
async def run_group_command(target_id: str, is_group: bool, params: dict):
"""
@@ -35,9 +38,16 @@ async def run_group_command(target_id: str, is_group: bool, params: dict):
for ip in ips:
try:
await local_wiz.set_pilot(ip, params)
logger.info(f"Расписание: {target_id} -> {ip}: {params}")
logger.info(f"Расписание: {target_id} -> {ip}: {params}")
except Exception as e:
logger.error(f"Расписание: ошибка {ip}: {e}")
logger.error(f"Расписание: ошибка {ip}: {e}")
# Логируем toggle в event_log
# Импорт здесь, чтобы избежать циклической зависимости
from app.api.routes.control import log_toggle_by_name
target_type = "group" if is_group else "device"
await log_toggle_by_name("scheduler", target_type, target_id, params)
@router.post("/once")
@@ -122,6 +132,10 @@ async def add_cron_task(
async def get_all_tasks():
jobs = []
for job in scheduler.get_jobs():
# Пропускаем служебные задачи
if any(job.id.startswith(prefix) for prefix in _INTERNAL_JOB_PREFIXES):
continue
# Парсим имя
name_parts = job.name.split("|")
target = name_parts[0].replace("CRON:", "").replace("Once:", "").strip()
@@ -157,6 +171,10 @@ async def get_all_tasks():
@router.delete("/{job_id}")
async def cancel_task(job_id: str):
# Запрещаем удалять служебные задачи через API
if any(job_id.startswith(prefix) for prefix in _INTERNAL_JOB_PREFIXES):
raise HTTPException(status_code=403, detail="Нельзя удалить служебную задачу")
try:
scheduler.remove_job(job_id)
return {"status": "deleted"}