host_metrics.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. """
  2. Host metrics model for storing system monitoring data.
  3. """
  4. from datetime import datetime
  5. from sqlalchemy import BigInteger, DateTime, Float, Integer, JSON
  6. from sqlalchemy.orm import Mapped, mapped_column
  7. from app.core.database import Base
  8. class HostMetrics(Base):
  9. """Host system metrics - comprehensive monitoring."""
  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. cpu_per_core: Mapped[list | None] = mapped_column(JSON) # Per-core percentages
  17. cpu_steal: Mapped[float] = mapped_column(Float, nullable=False, default=0) # VM steal time
  18. context_switches_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  19. interrupts_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  20. # Memory
  21. memory_total: Mapped[int] = mapped_column(BigInteger, nullable=False)
  22. memory_used: Mapped[int] = mapped_column(BigInteger, nullable=False)
  23. memory_percent: Mapped[float] = mapped_column(Float, nullable=False)
  24. memory_available: Mapped[int] = mapped_column(BigInteger, nullable=False)
  25. memory_buffers: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  26. memory_cached: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  27. swap_total: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  28. swap_used: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  29. swap_percent: Mapped[float] = mapped_column(Float, nullable=False, default=0)
  30. # Load Average
  31. load_1: Mapped[float] = mapped_column(Float, nullable=False)
  32. load_5: Mapped[float] = mapped_column(Float, nullable=False)
  33. load_15: Mapped[float] = mapped_column(Float, nullable=False)
  34. # Disk I/O - cumulative + rates
  35. disk_read_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)
  36. disk_write_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)
  37. disk_read_iops: Mapped[int] = mapped_column(Integer, nullable=False, default=0) # Ops/sec
  38. disk_write_iops: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  39. disk_read_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0) # MB/s
  40. disk_write_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0)
  41. disk_io_time_ms: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) # Latency
  42. disk_usage_percent: Mapped[float] = mapped_column(Float, nullable=False)
  43. # Network - cumulative + rates
  44. net_sent_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)
  45. net_recv_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False)
  46. net_in_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0) # MB/s
  47. net_out_mbps: Mapped[float] = mapped_column(Float, nullable=False, default=0)
  48. net_packets_in_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  49. net_packets_out_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  50. net_errors_in: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  51. net_errors_out: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  52. net_drops_in: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  53. net_drops_out: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  54. # Processes
  55. process_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  56. thread_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  57. top_cpu_processes: Mapped[list | None] = mapped_column(JSON) # Top 5 by CPU
  58. top_mem_processes: Mapped[list | None] = mapped_column(JSON) # Top 5 by memory
  59. # PostgreSQL
  60. pg_active_connections: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  61. pg_total_connections: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  62. pg_database_size_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  63. pg_cache_hit_ratio: Mapped[float] = mapped_column(Float, nullable=False, default=0) # %
  64. pg_transactions_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  65. pg_deadlocks: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  66. pg_temp_files: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  67. # ClickHouse
  68. ch_active_queries: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  69. ch_database_size_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  70. ch_queries_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  71. ch_rows_read_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  72. ch_memory_usage_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
  73. # HTTP/API metrics
  74. http_requests_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
  75. http_avg_response_time_ms: Mapped[float] = mapped_column(Float, nullable=False, default=0)
  76. http_error_rate: Mapped[float] = mapped_column(Float, nullable=False, default=0) # %
  77. http_active_requests: Mapped[int] = mapped_column(Integer, nullable=False, default=0)