"""The newest sample of each metric, kept beside plugin_metrics (#5208) Revision ID: 0030_plugin_metric_latest Revises: 0029_alert_no_data Create Date: 2026-10-07 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa revision: str = "0030_plugin_metric_latest" down_revision: Union[str, None] = "0029_alert_no_data" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.create_table( "plugin_metric_latest", sa.Column("source_module", sa.String(64), primary_key=True), sa.Column("resource_name", sa.String(255), primary_key=True), sa.Column("metric_name", sa.String(128), primary_key=True), sa.Column("value", sa.Float, nullable=False), sa.Column("recorded_at", sa.DateTime(timezone=True), nullable=False), ) # Seed from history without a full scan: step through the distinct keys of # the (source, resource, metric, recorded_at) index one probe at a time, # then take each key's newest row with a backward probe of the same index. op.execute(""" WITH RECURSIVE k AS ( (SELECT source_module, resource_name, metric_name FROM plugin_metrics ORDER BY source_module, resource_name, metric_name LIMIT 1) UNION ALL SELECT n.source_module, n.resource_name, n.metric_name FROM k, LATERAL ( SELECT p.source_module, p.resource_name, p.metric_name FROM plugin_metrics p WHERE (p.source_module, p.resource_name, p.metric_name) > (k.source_module, k.resource_name, k.metric_name) ORDER BY p.source_module, p.resource_name, p.metric_name LIMIT 1 ) n ) INSERT INTO plugin_metric_latest (source_module, resource_name, metric_name, value, recorded_at) SELECT k.source_module, k.resource_name, k.metric_name, l.value, l.recorded_at FROM k, LATERAL ( SELECT p.value, p.recorded_at FROM plugin_metrics p WHERE p.source_module = k.source_module AND p.resource_name = k.resource_name AND p.metric_name = k.metric_name ORDER BY p.recorded_at DESC LIMIT 1 ) l """) def downgrade() -> None: op.drop_table("plugin_metric_latest")