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.

50 lines
1.4 KiB
Python

"""
Request log schemas for API responses
"""
from datetime import datetime
from typing import Dict, List, Optional, Any
from pydantic import BaseModel
class RequestLogResponse(BaseModel):
"""Response schema for individual request log"""
id: int
request_id: str
endpoint: str
method: str
path: str
query_params: Optional[Dict[str, Any]] = None
request_body: Optional[Dict[str, Any]] = None
headers: Optional[Dict[str, Any]] = None
status_code: int
response_size: Optional[int] = None
user_agent: Optional[str] = None
client_ip: Optional[str] = None
response_time_ms: Optional[float] = None
created_at: Optional[str] = None
class RequestLogListResponse(BaseModel):
"""Response schema for paginated request logs"""
items: List[RequestLogResponse]
total: int
page: int
page_size: int
total_pages: int
class RequestLogStats(BaseModel):
"""Response schema for request log statistics"""
total_requests: int
success_requests: int # 2xx status codes
client_error_requests: int # 4xx status codes
server_error_requests: int # 5xx status codes
success_rate: float # percentage
requests_by_method: Dict[str, int]
requests_by_status_code: Dict[str, int]
requests_by_endpoint: Dict[str, int]
average_response_time_ms: float
hourly_trend: Dict[str, int] # Hour -> count
start_date: str
end_date: str