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