This commit is contained in:
2026-05-17 20:54:53 +05:00
parent 65a0babeab
commit 27eb4fd606
90 changed files with 12343 additions and 0 deletions
View File
+19
View File
@@ -0,0 +1,19 @@
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel
class AlertOut(BaseModel):
id: int
severity: str
category: str
source: str | None = None
title: str
message: str | None = None
acknowledged: bool
created_at: datetime
class Config:
from_attributes = True
+31
View File
@@ -0,0 +1,31 @@
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel
class UserOut(BaseModel):
id: int
email: str
role: str
is_active: bool
created_at: datetime
class Config:
from_attributes = True
class LoginIn(BaseModel):
email: str
password: str
class TokenPair(BaseModel):
access_token: str
refresh_token: str
token_type: str = "bearer"
class RefreshIn(BaseModel):
refresh_token: str
+17
View File
@@ -0,0 +1,17 @@
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel
class BackupOut(BaseModel):
id: int
device_id: int
filename: str
fmt: str
size: int
created_at: datetime
class Config:
from_attributes = True
+65
View File
@@ -0,0 +1,65 @@
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel, Field
class DeviceBase(BaseModel):
name: str = Field(min_length=1, max_length=128)
host: str
port: int = 8729
use_tls: bool = True
username: str
kind: str = "router"
class DeviceCreate(DeviceBase):
password: str
class DeviceUpdate(BaseModel):
name: str | None = None
host: str | None = None
port: int | None = None
use_tls: bool | None = None
username: str | None = None
password: str | None = None
kind: str | None = None
monitored_interfaces: str | None = None
uplink_interfaces: str | None = None
interface_history_hours: int | None = None
class DeviceOut(DeviceBase):
id: int
identity: str | None = None
model: str | None = None
serial: str | None = None
ros_version: str | None = None
architecture: str | None = None
status: str
last_error: str | None = None
last_seen: datetime | None = None
internet_ok: bool | None = None
last_uptime_seconds: int | None = None
abnormal_reboot: bool = False
last_log_warning: str | None = None
monitored_interfaces: str | None = None
uplink_interfaces: str | None = None
interface_history_hours: int = 24
created_at: datetime
class Config:
from_attributes = True
class DeviceResource(BaseModel):
"""Срез `/system/resource`."""
cpu_load: int | None = None
free_memory: int | None = None
total_memory: int | None = None
uptime: str | None = None
version: str | None = None
board_name: str | None = None
architecture_name: str | None = None
+55
View File
@@ -0,0 +1,55 @@
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel, Field, HttpUrl
class FirmwareImportIn(BaseModel):
url: HttpUrl
name: str | None = None
version: str | None = None
architecture: str | None = None
channel: str | None = None
class FirmwareBulkImportIn(BaseModel):
version: str = Field(..., description="Например: 7.16.1")
channel: str | None = "stable"
architectures: list[str] = Field(..., min_length=1)
class FirmwareBulkResult(BaseModel):
architecture: str
ok: bool
firmware_id: int | None = None
error: str | None = None
skipped: bool = False
class FirmwareBulkOut(BaseModel):
version: str
channel: str | None
results: list[FirmwareBulkResult]
class FirmwareUpdateIn(BaseModel):
name: str | None = Field(default=None, max_length=255)
version: str | None = None
architecture: str | None = None
channel: str | None = None
class FirmwareOut(BaseModel):
id: int
name: str
version: str | None
architecture: str | None
channel: str | None
size: int
sha256: str | None
source_url: str | None
created_at: datetime
class Config:
from_attributes = True
+15
View File
@@ -0,0 +1,15 @@
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel
class MetricPoint(BaseModel):
ts: datetime
cpu_load: float | None = None
mem_used_pct: float | None = None
uptime_seconds: int | None = None
internet_ok: bool | None = None
rx_bps: int | None = None
tx_bps: int | None = None