host_metrics.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. """
  2. Host metrics model for storing system monitoring data.
  3. """
  4. from datetime import datetime
  5. from sqlalchemy import BigInteger, DateTime, Float, Integer, String
  6. from sqlalchemy.orm import Mapped, mapped_column
  7. from app.core.database import Base
  8. class HostMetrics(Base):
  9. """Host system metrics (CPU, RAM, Load, Disk, Network)."""
  10. __tablename__ = "host_metrics"
  11. id: Mapped[int] = mapped_column(primary_key=True)
  12. timestamp: Mapped[datetime] = mapped_column(DateTime(timezone=True), index=True)
  13. # CPU
  14. cpu_percent: Mapped[float] = mapped_column(Float, nullable=False)
  15. cpu_count: Mapped[int] = mapped_column(Integer, nullable=False)
  16. # Memory
  17. memory_total: Mapped[int] = mapped_column(BigInteger, nullable=False) # bytes
  18. memory_used: Mapped[int] = mapped_column(BigInteger, nullable=False)
  19. memory_percent: Mapped[float] = mapped_column(Float, nullable=False)
  20. # Load Average
  21. load_1: Mapped[float] = mapped_column(Float, nullable=False)
  22. load_5: Mapped[float] = mapped_column(Float, nullable=False)
  23. load_15: Mapped[float] = mapped_column(Float, nullable=False)
  24. # Disk I/O
  25. disk_read_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)
  26. disk_write_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)
  27. disk_usage_percent: Mapped[float] = mapped_column(Float, nullable=False)
  28. # Network
  29. net_sent_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)
  30. net_recv_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)