Cybersecurity-Projects/PROJECTS/intermediate/siem-dashboard/backend/app/routes/scenarios.py

88 lines
1.6 KiB
Python

"""
©AngelaMos | 2026
scenarios.py
"""
from typing import Any
from flask import Blueprint
from app.controllers import scenario_ctrl
from app.core.decorators import endpoint, S, R
from app.schemas.scenario import ScenarioStartRequest, SpeedRequest
scenarios_bp = Blueprint("scenarios", __name__)
@scenarios_bp.get("/available")
@endpoint()
@R()
def list_available() -> Any:
"""
Return metadata for all available playbooks
"""
return scenario_ctrl.list_available()
@scenarios_bp.get("/running")
@endpoint()
@R()
def list_running() -> Any:
"""
Return all active scenario runs
"""
return scenario_ctrl.list_running()
@scenarios_bp.post("/start")
@endpoint()
@S(ScenarioStartRequest)
@R(status = 201)
def start_scenario() -> Any:
"""
Start a new scenario from a playbook file
"""
return scenario_ctrl.start_scenario()
@scenarios_bp.post("/<run_id>/stop")
@endpoint()
@R()
def stop_scenario(run_id: str) -> Any:
"""
Stop an active scenario run
"""
return scenario_ctrl.stop_scenario(run_id)
@scenarios_bp.post("/<run_id>/pause")
@endpoint()
@R()
def pause_scenario(run_id: str) -> Any:
"""
Pause an active scenario run
"""
return scenario_ctrl.pause_scenario(run_id)
@scenarios_bp.post("/<run_id>/resume")
@endpoint()
@R()
def resume_scenario(run_id: str) -> Any:
"""
Resume a paused scenario run
"""
return scenario_ctrl.resume_scenario(run_id)
@scenarios_bp.put("/<run_id>/speed")
@endpoint()
@S(SpeedRequest)
@R()
def set_speed(run_id: str) -> Any:
"""
Adjust playback speed of an active scenario
"""
return scenario_ctrl.set_speed(run_id)