first commit
This commit is contained in:
77
microservices/api-gateway/models.py
Normal file
77
microservices/api-gateway/models.py
Normal file
@@ -0,0 +1,77 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user