"""权限指标快照模型 - 每小时聚合""" from __future__ import annotations import uuid from datetime import datetime from sqlalchemy import DateTime, Float, Index, Integer from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.sql import func from app.db.base_class import Base class PermissionMetricSnapshot(Base): __tablename__ = "permission_metric_snapshots" __table_args__ = ( Index("ix_perm_snapshot_bucket", "bucket_time"), ) id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4 ) bucket_time: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False ) total_checks: Mapped[int] = mapped_column(Integer, nullable=False, default=0) allowed_checks: Mapped[int] = mapped_column(Integer, nullable=False, default=0) denied_checks: Mapped[int] = mapped_column(Integer, nullable=False, default=0) avg_elapsed_ms: Mapped[float] = mapped_column(Float, nullable=False, default=0.0) max_elapsed_ms: Mapped[float] = mapped_column(Float, nullable=False, default=0.0) cache_hits: Mapped[int] = mapped_column(Integer, nullable=False, default=0) cache_misses: Mapped[int] = mapped_column(Integer, nullable=False, default=0) error_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, server_default=func.now() )