uploader-bot/app/core/models/api/stats_models.py

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