Files
ss-tools/backend/alembic/versions/y4z5a6b7c8d9_add_scenario_investigation_tables.py

41 lines
2.8 KiB
Python

# #region Alembic.ScenarioInvestigationTables [C:3] [TYPE Module] [SEMANTICS alembic,scenario,investigation,queue,case,action,episode]
# @ingroup Alembic
# @BRIEF Add 047 investigation queue, case, agent action and recurring failure episode tables.
# @LAYER Database
"""add scenario investigation queue and case tables (047)"""
from collections.abc import Sequence
import sqlalchemy as sa
from alembic import op
revision: str = "y4z5a6b7c8d9"
down_revision: str | Sequence[str] | None = "x3y4z5a6b7c8"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
def upgrade() -> None:
op.create_table("scenario_investigation_queue",
sa.Column("id", sa.String(36), primary_key=True), sa.Column("fingerprint", sa.String(128), nullable=False),
sa.Column("scenario_id", sa.String(36), nullable=False), sa.Column("run_id", sa.String(36)),
sa.Column("severity", sa.String(16), nullable=False), sa.Column("status", sa.String(24), nullable=False),
sa.Column("occurrence_count", sa.Integer(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(["scenario_id"], ["scenario_registry_entries.scenario_id"], ondelete="CASCADE"))
op.create_index("ix_scenario_investigation_queue_fingerprint", "scenario_investigation_queue", ["fingerprint"])
op.create_index("ix_scenario_investigation_queue_status", "scenario_investigation_queue", ["status"])
op.create_table("scenario_investigation_cases",
sa.Column("id", sa.String(36), primary_key=True), sa.Column("fingerprint", sa.String(128), nullable=False, unique=True),
sa.Column("scenario_id", sa.String(36), nullable=False), sa.Column("status", sa.String(24), nullable=False),
sa.Column("disposition", sa.String(32)), sa.Column("decision_version", sa.Integer(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(["scenario_id"], ["scenario_registry_entries.scenario_id"], ondelete="CASCADE"))
op.create_table("scenario_agent_actions",
sa.Column("id", sa.String(36), primary_key=True), sa.Column("case_id", sa.String(36), nullable=False),
sa.Column("action_type", sa.String(32), nullable=False), sa.Column("payload", sa.JSON(), nullable=False), sa.Column("created_at", sa.DateTime(), nullable=False),
sa.ForeignKeyConstraint(["case_id"], ["scenario_investigation_cases.id"], ondelete="CASCADE"))
def downgrade() -> None:
op.drop_table("scenario_agent_actions")
op.drop_table("scenario_investigation_cases")
op.drop_index("ix_scenario_investigation_queue_status", table_name="scenario_investigation_queue")
op.drop_index("ix_scenario_investigation_queue_fingerprint", table_name="scenario_investigation_queue")
op.drop_table("scenario_investigation_queue")
# #endregion Alembic.ScenarioInvestigationTables