83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
"""
|
|
Modelos de dados para recursos Kubernetes
|
|
"""
|
|
from typing import List, Dict, Any, Optional
|
|
from pydantic import BaseModel
|
|
|
|
class ContainerResource(BaseModel):
|
|
"""Recursos de um container"""
|
|
name: str
|
|
image: str
|
|
resources: Dict[str, Dict[str, str]]
|
|
|
|
class PodResource(BaseModel):
|
|
"""Recursos de um pod"""
|
|
name: str
|
|
namespace: str
|
|
node_name: Optional[str] = None
|
|
phase: str
|
|
containers: List[ContainerResource]
|
|
|
|
class NamespaceResources(BaseModel):
|
|
"""Recursos de um namespace"""
|
|
name: str
|
|
pods: List[PodResource]
|
|
total_cpu_requests: str = "0"
|
|
total_cpu_limits: str = "0"
|
|
total_memory_requests: str = "0"
|
|
total_memory_limits: str = "0"
|
|
|
|
class VPARecommendation(BaseModel):
|
|
"""Recomendação do VPA"""
|
|
name: str
|
|
namespace: str
|
|
target_ref: Dict[str, str]
|
|
recommendations: Dict[str, Any]
|
|
|
|
class ResourceValidation(BaseModel):
|
|
"""Resultado de validação de recursos"""
|
|
pod_name: str
|
|
namespace: str
|
|
container_name: str
|
|
validation_type: str # "missing_requests", "missing_limits", "invalid_ratio", "overcommit"
|
|
severity: str # "warning", "error", "critical"
|
|
message: str
|
|
recommendation: Optional[str] = None
|
|
|
|
class ClusterReport(BaseModel):
|
|
"""Cluster report"""
|
|
timestamp: str
|
|
total_pods: int
|
|
total_namespaces: int
|
|
total_nodes: int
|
|
validations: List[ResourceValidation]
|
|
vpa_recommendations: List[VPARecommendation]
|
|
overcommit_info: Dict[str, Any]
|
|
summary: Dict[str, Any]
|
|
|
|
class NamespaceReport(BaseModel):
|
|
"""Namespace report"""
|
|
namespace: str
|
|
timestamp: str
|
|
total_pods: int
|
|
validations: List[ResourceValidation]
|
|
resource_usage: Dict[str, Any]
|
|
recommendations: List[str]
|
|
|
|
class ExportRequest(BaseModel):
|
|
"""Request to export report"""
|
|
format: str # "json", "csv", "pdf"
|
|
namespaces: Optional[List[str]] = None
|
|
include_vpa: bool = True
|
|
include_validations: bool = True
|
|
|
|
class ApplyRecommendationRequest(BaseModel):
|
|
"""Request para aplicar recomendação"""
|
|
pod_name: str
|
|
namespace: str
|
|
container_name: str
|
|
resource_type: str # "cpu", "memory"
|
|
action: str # "requests", "limits"
|
|
value: str
|
|
dry_run: bool = True
|