46 lines
1.3 KiB
Python
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)
|