77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
"""
|
|
Models for API Gateway
|
|
"""
|
|
|
|
from pydantic import BaseModel, Field
|
|
from typing import Dict, Any, Optional, List
|
|
from datetime import datetime
|
|
|
|
class ServiceConfig(BaseModel):
|
|
"""Configuration for a microservice"""
|
|
name: str
|
|
base_url: str
|
|
health_endpoint: str = "/health"
|
|
auth_required: bool = True
|
|
timeout_seconds: int = 30
|
|
retry_attempts: int = 3
|
|
|
|
class ServiceHealth(BaseModel):
|
|
"""Health status of a service"""
|
|
service: str
|
|
status: str # healthy, unhealthy, unknown
|
|
response_time_ms: Optional[float] = None
|
|
last_check: datetime
|
|
error_message: Optional[str] = None
|
|
|
|
class HealthResponse(BaseModel):
|
|
"""Gateway health response"""
|
|
service: str
|
|
status: str
|
|
timestamp: datetime
|
|
version: str
|
|
services: Optional[Dict[str, Any]] = None
|
|
healthy_services: Optional[int] = None
|
|
total_services: Optional[int] = None
|
|
|
|
class Config:
|
|
json_encoders = {
|
|
datetime: lambda v: v.isoformat()
|
|
}
|
|
|
|
class GatewayStats(BaseModel):
|
|
"""API Gateway statistics"""
|
|
total_requests: int
|
|
successful_requests: int
|
|
failed_requests: int
|
|
success_rate: float
|
|
uptime_seconds: float
|
|
service_requests: Dict[str, int]
|
|
timestamp: datetime
|
|
|
|
class Config:
|
|
json_encoders = {
|
|
datetime: lambda v: v.isoformat()
|
|
}
|
|
|
|
class AuthToken(BaseModel):
|
|
"""Authentication token model"""
|
|
token: str
|
|
user_id: Optional[str] = None
|
|
permissions: List[str] = Field(default_factory=list)
|
|
|
|
class ProxyRequest(BaseModel):
|
|
"""Proxy request model"""
|
|
service: str
|
|
path: str
|
|
method: str
|
|
headers: Dict[str, str]
|
|
query_params: Dict[str, Any]
|
|
body: Optional[bytes] = None
|
|
|
|
class ProxyResponse(BaseModel):
|
|
"""Proxy response model"""
|
|
status_code: int
|
|
headers: Dict[str, str]
|
|
body: bytes
|
|
service: str
|
|
response_time_ms: float |