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
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
|
|
} |