Base code
This commit is contained in:
102
backend/models/api_monitoring.py
Normal file
102
backend/models/api_monitoring.py
Normal file
@@ -0,0 +1,102 @@
|
||||
"""
|
||||
API Monitoring Database Models
|
||||
Persistent storage for API monitoring statistics.
|
||||
"""
|
||||
|
||||
from sqlalchemy import Column, Integer, String, DateTime, Float, Boolean, JSON, Index, Text
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from datetime import datetime
|
||||
import json
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
class APIRequest(Base):
|
||||
"""Store individual API requests for monitoring."""
|
||||
|
||||
__tablename__ = "api_requests"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
timestamp = Column(DateTime, default=datetime.utcnow, nullable=False)
|
||||
path = Column(String(500), nullable=False)
|
||||
method = Column(String(10), nullable=False)
|
||||
status_code = Column(Integer, nullable=False)
|
||||
duration = Column(Float, nullable=False) # Response time in seconds
|
||||
user_id = Column(String(50), nullable=True)
|
||||
cache_hit = Column(Boolean, nullable=True)
|
||||
request_size = Column(Integer, nullable=True)
|
||||
response_size = Column(Integer, nullable=True)
|
||||
user_agent = Column(String(500), nullable=True)
|
||||
ip_address = Column(String(45), nullable=True)
|
||||
|
||||
# Indexes for fast queries
|
||||
__table_args__ = (
|
||||
Index('idx_timestamp', 'timestamp'),
|
||||
Index('idx_path_method', 'path', 'method'),
|
||||
Index('idx_status_code', 'status_code'),
|
||||
Index('idx_user_id', 'user_id'),
|
||||
)
|
||||
|
||||
class APIEndpointStats(Base):
|
||||
"""Aggregated statistics per endpoint."""
|
||||
|
||||
__tablename__ = "api_endpoint_stats"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
endpoint = Column(String(500), nullable=False, unique=True) # "GET /api/endpoint"
|
||||
total_requests = Column(Integer, default=0)
|
||||
total_errors = Column(Integer, default=0)
|
||||
total_duration = Column(Float, default=0.0)
|
||||
avg_duration = Column(Float, default=0.0)
|
||||
min_duration = Column(Float, nullable=True)
|
||||
max_duration = Column(Float, nullable=True)
|
||||
last_called = Column(DateTime, nullable=True)
|
||||
cache_hits = Column(Integer, default=0)
|
||||
cache_misses = Column(Integer, default=0)
|
||||
cache_hit_rate = Column(Float, default=0.0)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
__table_args__ = (
|
||||
Index('idx_endpoint', 'endpoint'),
|
||||
Index('idx_total_requests', 'total_requests'),
|
||||
Index('idx_avg_duration', 'avg_duration'),
|
||||
)
|
||||
|
||||
class SystemHealth(Base):
|
||||
"""System health snapshots."""
|
||||
|
||||
__tablename__ = "system_health"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
timestamp = Column(DateTime, default=datetime.utcnow, nullable=False)
|
||||
status = Column(String(20), nullable=False) # healthy, warning, critical
|
||||
total_requests = Column(Integer, default=0)
|
||||
total_errors = Column(Integer, default=0)
|
||||
error_rate = Column(Float, default=0.0)
|
||||
avg_response_time = Column(Float, default=0.0)
|
||||
cache_hit_rate = Column(Float, default=0.0)
|
||||
active_endpoints = Column(Integer, default=0)
|
||||
metrics = Column(JSON, nullable=True) # Additional metrics
|
||||
|
||||
__table_args__ = (
|
||||
Index('idx_timestamp', 'timestamp'),
|
||||
Index('idx_status', 'status'),
|
||||
)
|
||||
|
||||
class CachePerformance(Base):
|
||||
"""Cache performance metrics."""
|
||||
|
||||
__tablename__ = "cache_performance"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
timestamp = Column(DateTime, default=datetime.utcnow, nullable=False)
|
||||
cache_type = Column(String(50), nullable=False) # "comprehensive_user_data", "redis", etc.
|
||||
hits = Column(Integer, default=0)
|
||||
misses = Column(Integer, default=0)
|
||||
hit_rate = Column(Float, default=0.0)
|
||||
avg_response_time = Column(Float, default=0.0)
|
||||
total_requests = Column(Integer, default=0)
|
||||
|
||||
__table_args__ = (
|
||||
Index('idx_timestamp', 'timestamp'),
|
||||
Index('idx_cache_type', 'cache_type'),
|
||||
)
|
||||
Reference in New Issue
Block a user