homelab_automation/alembic/versions/0013_add_terminal_sessions_table.py
Bruno Charest 493668f746
Some checks failed
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled
Add comprehensive SSH terminal drawer feature with embedded and popout modes, integrate playbook lint results API with local cache fallback, and enhance host management UI with terminal access buttons
2025-12-17 23:59:17 -05:00

51 lines
2.1 KiB
Python

"""Add terminal_sessions table for SSH web terminal feature.
Revision ID: 0013
Revises: 0012_add_docker_unique_constraints
Create Date: 2024-12-17
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '0013'
down_revision: Union[str, None] = '0012'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
op.create_table(
'terminal_sessions',
sa.Column('id', sa.String(64), primary_key=True),
sa.Column('host_id', sa.String(), nullable=False, index=True),
sa.Column('host_name', sa.String(), nullable=False),
sa.Column('host_ip', sa.String(), nullable=False),
sa.Column('user_id', sa.String(), nullable=True),
sa.Column('username', sa.String(), nullable=True),
sa.Column('token_hash', sa.String(128), nullable=False),
sa.Column('ttyd_port', sa.Integer(), nullable=False),
sa.Column('ttyd_pid', sa.Integer(), nullable=True),
sa.Column('mode', sa.String(20), nullable=False, server_default='embedded'),
sa.Column('status', sa.String(20), nullable=False, server_default='active'),
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now()),
sa.Column('expires_at', sa.DateTime(timezone=True), nullable=False),
sa.Column('closed_at', sa.DateTime(timezone=True), nullable=True),
)
# Index for cleanup queries
op.create_index('ix_terminal_sessions_status', 'terminal_sessions', ['status'])
op.create_index('ix_terminal_sessions_expires_at', 'terminal_sessions', ['expires_at'])
op.create_index('ix_terminal_sessions_user_id', 'terminal_sessions', ['user_id'])
def downgrade() -> None:
op.drop_index('ix_terminal_sessions_user_id', table_name='terminal_sessions')
op.drop_index('ix_terminal_sessions_expires_at', table_name='terminal_sessions')
op.drop_index('ix_terminal_sessions_status', table_name='terminal_sessions')
op.drop_table('terminal_sessions')