Files

46 lines
1.3 KiB
Python

"""Agent 上报数据 Schema"""
from typing import List, Optional
from pydantic import Field
from sqlmodel import SQLModel
class MetricsIn(SQLModel):
cpu_pct: Optional[float] = None
mem_pct: Optional[float] = None
disk_pct: Optional[float] = None
net_in_mb: Optional[float] = None
net_out_mb: Optional[float] = None
load_1m: Optional[float] = None
uptime_sec: Optional[int] = None
class ServerInfoIn(SQLModel):
hostname: Optional[str] = None
os: Optional[str] = None
kernel: Optional[str] = None
cpu_cores: Optional[int] = None
mem_total_gb: Optional[float] = None
disk_total_gb: Optional[float] = None
public_ip: Optional[str] = None
tailscale_ip: Optional[str] = None
status: Optional[str] = "online"
class SecurityCheckIn(SQLModel):
check_item: str
status: str = "unknown" # pass/warn/fail/unknown
detail: Optional[str] = None
suggestion: Optional[str] = None
class AgentReport(SQLModel):
"""Agent 单次上报的完整数据包"""
asset_id: int
metrics: Optional[MetricsIn] = None
server_info: Optional[ServerInfoIn] = None
# 限制单次上报的检查项数量,防止恶意/异常 Agent 发送超大数组撑爆内存
security: Optional[List[SecurityCheckIn]] = Field(default=None, max_length=100)