AI Agent 定时任务跟踪、监控、状态看板系统。 - FastAPI + Vue3 单体应用 - AI Agent 一键接入(批量注册 API) - 暗色主题 Dashboard - 后台调度器 + 超时告警 - 飞书/邮件/Webhook 多渠道通知 - Base URL 可配置 - Gunicorn 生产部署
58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
"""Pydantic schemas — Agent."""
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class AgentCreate(BaseModel):
|
|
name: str = Field(..., max_length=128)
|
|
description: str = Field(default="")
|
|
|
|
|
|
class AgentUpdate(BaseModel):
|
|
name: str | None = Field(None, max_length=128)
|
|
description: str | None = None
|
|
status: str | None = None # active / inactive
|
|
|
|
|
|
class AgentOut(BaseModel):
|
|
id: int
|
|
name: str
|
|
description: str
|
|
api_key: str
|
|
status: str
|
|
last_heartbeat_at: datetime | None = None
|
|
task_count: int = 0
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class AgentHeartbeat(BaseModel):
|
|
pass
|
|
|
|
|
|
# ── Batch registration (AI agent self-registers with tasks) ───────
|
|
|
|
class TaskRegistrationItem(BaseModel):
|
|
"""A single task an agent wants to register."""
|
|
name: str = Field(..., max_length=256)
|
|
description: str = Field(default="")
|
|
cron_expression: str = Field(..., max_length=64)
|
|
grace_period: int = Field(default=300, ge=0)
|
|
|
|
|
|
class AgentBatchRegister(BaseModel):
|
|
"""AI agent sends this to register itself + all its tasks in one call."""
|
|
name: str = Field(..., max_length=128)
|
|
description: str = Field(default="")
|
|
tasks: list[TaskRegistrationItem] = Field(default_factory=list)
|
|
|
|
|
|
class AgentBatchRegisterResult(BaseModel):
|
|
"""Response for batch registration."""
|
|
agent: AgentOut
|
|
tasks_created: int
|