| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- """
- 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
- # PostgreSQL
- pg_active_connections: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- pg_total_connections: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- pg_database_size_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
- pg_cache_hit_ratio: Mapped[float] = mapped_column(Float, nullable=False, default=0) # %
- pg_transactions_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- pg_deadlocks: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- pg_temp_files: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- # ClickHouse
- ch_active_queries: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- ch_database_size_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
- ch_queries_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- ch_rows_read_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- ch_memory_usage_bytes: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0)
- # HTTP/API metrics
- http_requests_per_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
- http_avg_response_time_ms: Mapped[float] = mapped_column(Float, nullable=False, default=0)
- http_error_rate: Mapped[float] = mapped_column(Float, nullable=False, default=0) # %
- http_active_requests: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|