feat: 公网反代部署漂移与全量重部署,仪表盘补公网穿透/系统资源/中国 IP 段/通知通道(v1.2.3)
仪表盘:新增「公网穿透」卡与运行状态「公网反代」行(新增 GET /api/frpmulti/routes/summary 逐台聚合);「性能」面板(今日异常/平均响应)与「流量 Top 5」;新增一行三卡「系统资源 / 中国 IP 段 / 通知通道」,系统资源来自新增跨平台采集 internal/sysinfo 仪表盘:「服务」卡不再写死「正常」,按 Fonu/Nginx/DDNS/证书四项实际状态聚合;/api/status 每 15 秒刷新并按页面可见性暂停轮询;删除死样式 公网反代:部署漂移清单(未部署/孤儿配置/未生效/内容不一致)+ 重新部署全部(逐条下发、单条失败不中断) 公网 Agent:端口矩阵补端口含义;frps 启动一致性核对;证书徽标补证书来源 FRP:frpc 版本探测失败时回落按二进制目录名推导,并逐台服务端探测 文档:新增 docs/agent-capability-plan.md(agent 能力扩展方案);VERSION 提升到 1.2.3
This commit is contained in:
@@ -290,6 +290,12 @@ export const api = {
|
||||
uninstallFrpAgent: (id: number, keepData: boolean) => request<{ ok: boolean; output: string }>(`/api/frpmulti/servers/${id}/agent/uninstall?keep_data=${keepData}`, { method: 'POST' }),
|
||||
sshDiagnoseFrpAgent: (id: number) => request<{ output: string }>(`/api/frpmulti/servers/${id}/agent/ssh-diagnose`, { method: 'POST' }),
|
||||
getFrpAgentStatus: (id: number) => request<import('./types').FrpAgentStatus>(`/api/frpmulti/servers/${id}/agent/status`),
|
||||
getFrpAgentRouteDrift: (id: number) =>
|
||||
request<import('./types').FrpRouteDriftReport>(`/api/frpmulti/servers/${id}/agent/routes/drift`),
|
||||
redeployFrpAgentRoutes: (id: number) =>
|
||||
request<import('./types').FrpRedeployAllResult>(`/api/frpmulti/servers/${id}/agent/routes/redeploy`, {
|
||||
method: 'POST',
|
||||
}),
|
||||
getFrpAgentRoutes: (id: number) => request<import('./types').FrpAgentRouteDetail[]>(`/api/frpmulti/servers/${id}/agent/routes`),
|
||||
getFrpAgentRouteCandidates: (id: number) => request<import('./types').FrpProxy[]>(`/api/frpmulti/servers/${id}/agent/route-candidates`),
|
||||
deployFrpAgentRoute: (serverId: number, proxyId: number) => request<{ ok: boolean }>(`/api/frpmulti/servers/${serverId}/agent/routes/${proxyId}`, { method: 'POST' }),
|
||||
|
||||
@@ -736,6 +736,39 @@ export interface FrpRouteHealthSummary {
|
||||
failed_servers?: string[]
|
||||
}
|
||||
|
||||
export interface FrpRouteDriftItem {
|
||||
domain: string
|
||||
kind: 'missing' | 'orphan' | 'not_loaded' | 'content_mismatch'
|
||||
detail: string
|
||||
expected?: string
|
||||
actual?: string
|
||||
}
|
||||
|
||||
export interface FrpRouteDriftReport {
|
||||
server_id: number
|
||||
expected: number
|
||||
deployed: number
|
||||
loaded: number
|
||||
items: FrpRouteDriftItem[]
|
||||
checked_at: string
|
||||
}
|
||||
|
||||
export interface FrpRedeployRouteResult {
|
||||
proxy_id: number
|
||||
name: string
|
||||
domains: string
|
||||
ok: boolean
|
||||
error?: string
|
||||
}
|
||||
|
||||
export interface FrpRedeployAllResult {
|
||||
server_id: number
|
||||
total: number
|
||||
succeeded: number
|
||||
failed: number
|
||||
results: FrpRedeployRouteResult[]
|
||||
}
|
||||
|
||||
export interface FrpAgentRouteDetail {
|
||||
domain: string
|
||||
file_exists: boolean
|
||||
|
||||
Reference in New Issue
Block a user