"""Prometheus scrape targets are rows edited on the Prometheus page Each row is a /metrics endpoint: where it is, its bearer token (encrypted), how often to scrape it, which series to keep, and the newest scrape's outcome (milestone 506). Revision ID: prometheus_001_targets Revises: (none — a branch off core via depends_on) Create Date: 2026-10-12 """ from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "prometheus_001_targets" down_revision: Union[str, None] = None branch_labels: Union[str, Sequence[str], None] = "prometheus" depends_on: Union[str, Sequence[str], None] = ("0004_app_settings",) def upgrade() -> None: op.create_table( "prometheus_targets", sa.Column("id", sa.String(36), primary_key=True), sa.Column("name", sa.String(100), nullable=False, unique=True), sa.Column("url", sa.String(500), nullable=False), sa.Column("token", sa.Text, nullable=False, server_default=""), sa.Column("verify_tls", sa.Boolean, nullable=False, server_default=sa.true()), sa.Column("interval_seconds", sa.Integer, nullable=False, server_default="60"), sa.Column("keep", sa.JSON, nullable=False, server_default="[]"), sa.Column("drop", sa.JSON, nullable=False, server_default="[]"), sa.Column("series_cap", sa.Integer, nullable=False, server_default="1000"), sa.Column("enabled", sa.Boolean, nullable=False, server_default=sa.true()), sa.Column("created_at", sa.DateTime(timezone=True), nullable=False), sa.Column("last_scraped_at", sa.DateTime(timezone=True), nullable=True), sa.Column("last_ok_at", sa.DateTime(timezone=True), nullable=True), sa.Column("last_error", sa.Text, nullable=True), sa.Column("last_kept", sa.Integer, nullable=False, server_default="0"), sa.Column("last_dropped", sa.Integer, nullable=False, server_default="0"), sa.Column("last_capped", sa.Integer, nullable=False, server_default="0"), ) def downgrade() -> None: op.drop_table("prometheus_targets")