"""Every target holds its own token: one that took it from a sign-in goes Revision ID: prometheus_005_own_tokens Revises: prometheus_004_token_from Create Date: 2026-11-01 """ from typing import Sequence, Union import sqlalchemy as sa from alembic import op revision: str = "prometheus_005_own_tokens" down_revision: Union[str, None] = "prometheus_004_token_from" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: # Left in place, such a target would ask with no token, and some services ban # an address for that. Its newest values go with it; history ages out. op.execute(""" DELETE FROM plugin_metric_latest l USING prometheus_targets t WHERE t.token_from IS NOT NULL AND l.source_module = 'prometheus' AND (l.resource_name = t.name OR left(l.resource_name, length(t.name) + 1) = t.name || ':')""") op.execute("DELETE FROM prometheus_targets WHERE token_from IS NOT NULL") op.drop_column("prometheus_targets", "token_from") def downgrade() -> None: op.add_column("prometheus_targets", sa.Column("token_from", sa.String(50), nullable=True))