42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
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 # подпись может быть и в заголовке |