from __future__ import annotations from typing import Dict, Any, Optional, List, Literal from pydantic import BaseModel, Field class NodeHealthResponse(BaseModel): status: Literal["ok", "degraded", "down"] = "ok" node_id: str public_key: str uptime_seconds: Optional[int] = None cpu_usage: Optional[float] = None memory_usage_mb: Optional[float] = None disk_free_mb: Optional[float] = None last_sync_ts: Optional[int] = None details: Dict[str, Any] = Field(default_factory=dict) class ContentStatsItem(BaseModel): content_id: str total_chunks: int stored_chunks: int missing_chunks: int size_bytes: Optional[int] = None verified: Optional[bool] = None class NodeContentStatsResponse(BaseModel): total_contents: int total_chunks: int stored_chunks: int missing_chunks: int contents: List[ContentStatsItem] = Field(default_factory=list) class NodeStatsReport(BaseModel): action: Literal["stats_report"] = "stats_report" reporter_node_id: str reporter_public_key: str timestamp: int metrics: Dict[str, Any] = Field(default_factory=dict) signature: Optional[str] = None # подпись может быть и в заголовке