| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """
- 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
|