""" Host metrics model for storing system monitoring data. """ from datetime import datetime from sqlalchemy import BigInteger, DateTime, Float, Integer, JSON from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base class HostMetrics(Base): """Host system metrics - comprehensive monitoring.""" __tablename__ = "host_metrics" id: Mapped[int] = mapped_column(primary_key=True) timestamp: Mapped[datetime] = mapped_column(DateTime(timezone=True), index=True) # CPU cpu_percent: Mapped[float] = mapped_column(Float, nullable=False) cpu_count: Mapped[int] = mapped_column(Integer, nullable=False) cpu_per_core: Mapped[list | None] = mapped_column(JSON) # Per-core percentages cpu_steal: Mapped[float] = mapped_column(Float, nullable=False, default=0) # VM steal time context_switches_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0) interrupts_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0) # Memory memory_total: Mapped[int] = mapped_column(BigInteger, nullable=False) memory_used: Mapped[int] = mapped_column(BigInteger, nullable=False) memory_percent: Mapped[float] = mapped_column(Float, nullable=False) memory_available: Mapped[int] = mapped_column(BigInteger, nullable=False) memory_buffers: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) memory_cached: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) swap_total: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) swap_used: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) swap_percent: Mapped[float] = mapped_column(Float, nullable=False, default=0) # Load Average load_1: Mapped[float] = mapped_column(Float, nullable=False) load_5: Mapped[float] = mapped_column(Float, nullable=False) load_15: Mapped[float] = mapped_column(Float, nullable=False) # Disk I/O - cumulative + rates disk_read_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False) disk_write_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False) disk_read_iops: Mapped[int] = mapped_column(Integer, nullable=False, default=0) # Ops/sec disk_write_iops: Mapped[int] = mapped_column(Integer, nullable=False, default=0) disk_read_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0) # MB/s disk_write_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0) disk_io_time_ms: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) # Latency disk_usage_percent: Mapped[float] = mapped_column(Float, nullable=False) # Network - cumulative + rates net_sent_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False) net_recv_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False) net_in_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0) # MB/s net_out_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0) net_packets_in_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0) net_packets_out_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0) net_errors_in: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) net_errors_out: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) net_drops_in: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) net_drops_out: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) # Processes process_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0) thread_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0) top_cpu_processes: Mapped[list | None] = mapped_column(JSON) # Top 5 by CPU top_mem_processes: Mapped[list | None] = mapped_column(JSON) # Top 5 by memory