You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.9 KiB
Python

"""
Request log model for storing all API requests
"""
from sqlalchemy import Column, Integer, String, Text, DateTime, JSON, Float, Boolean
from sqlalchemy.sql import func
from app.core.database import Base
class RequestLog(Base):
"""Model for storing API request logs"""
__tablename__ = "request_logs"
id = Column(Integer, primary_key=True, index=True)
# Request information
request_id = Column(String(50), index=True)
endpoint = Column(String(200), index=True)
method = Column(String(10))
path = Column(Text)
query_params = Column(JSON, nullable=True)
request_body = Column(JSON, nullable=True)
headers = Column(JSON, nullable=True)
# Response information
status_code = Column(Integer, index=True)
response_size = Column(Integer, nullable=True)
# Context information
user_agent = Column(String(500), nullable=True)
client_ip = Column(String(50), nullable=True)
session_id = Column(String(100), nullable=True)
user_id = Column(String(100), nullable=True)
# Performance metrics
response_time_ms = Column(Float, nullable=True)
# Timestamps
created_at = Column(DateTime(timezone=True), server_default=func.now(), index=True)
def to_dict(self):
"""Convert to dictionary for API responses"""
return {
"id": self.id,
"request_id": self.request_id,
"endpoint": self.endpoint,
"method": self.method,
"path": self.path,
"query_params": self.query_params,
"request_body": self.request_body,
"headers": self.headers,
"status_code": self.status_code,
"response_size": self.response_size,
"user_agent": self.user_agent,
"client_ip": self.client_ip,
"response_time_ms": self.response_time_ms,
"created_at": self.created_at.isoformat() if self.created_at else None
}