Files
Nexus/reports/acceptance-full.json
T

1362 lines
31 KiB
JSON
Raw Normal View History

{
"started_at": "2026-06-01T16:32:37.130215+00:00",
"base_url": "https://api.synaglobal.vip",
"phases": {
"core_api": {
"exit_code": 0,
"checks": 25,
"duration_ms": 24923.245100013446,
"stdout_tail": ""
},
"extended_api": {
"exit_code": 0,
"checks": 30,
"duration_ms": 31914.95780000696,
"stdout_tail": ""
},
"extra_api": {
"checks": 3
},
"playwright_ui": {
"exit_code": 0,
"checks": 1
}
},
"features": [
{
"id": "infra_health",
"name": "健康检查 /health",
"layer": "infra",
"description": "Shell 守护与负载均衡探活",
"status": "pass",
"passed": 3,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /health",
"status": "pass",
"feature_id": "infra_health",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /health",
"status": "pass",
"feature_id": "infra_health",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /health/detail",
"status": "pass",
"feature_id": "infra_health",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "infra_app",
"name": "前端静态 /app/",
"layer": "infra",
"description": "SPA 入口可访问",
"status": "pass",
"passed": 1,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /app/ (SPA 入口)",
"status": "pass",
"feature_id": "infra_app",
"layer": "infra",
"message": "",
"duration_ms": 947.8227000072366
}
]
},
{
"id": "auth",
"name": "认证与 JWT",
"layer": "api",
"description": "登录、me、刷新",
"status": "pass",
"passed": 4,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "POST /api/auth/login",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/auth/me",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/auth/login",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/auth/webssh-token",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "dashboard",
"name": "仪表盘统计",
"layer": "api",
"description": "服务器统计与概览",
"status": "pass",
"passed": 2,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/servers/stats",
"status": "pass",
"feature_id": "dashboard",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/alert-history/stats",
"status": "pass",
"feature_id": "dashboard",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "servers",
"name": "服务器管理",
"layer": "api",
"description": "CRUD、分类、日志",
"status": "pass",
"passed": 13,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/servers/ (pre-cleanup)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/servers/ (create)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/ (list)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/54",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/servers/54 (update)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/servers/54",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/sync/browse (no server)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/categories",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/logs",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/meta/api_base_url",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/8/logs",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/sync/browse (real server)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "files",
"name": "文件管理",
"layer": "api",
"description": "browse、files-capability",
"status": "pass",
"passed": 3,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "POST /api/sync/validate-source-path",
"status": "pass",
"feature_id": "files",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/8/files-capability",
"status": "pass",
"feature_id": "files",
"layer": "api",
"message": "",
"duration_ms": 940.7884999964153
},
{
"name": "POST /api/sync/browse /tmp",
"status": "pass",
"feature_id": "files",
"layer": "api",
"message": "",
"duration_ms": 1093.0962999991607
}
]
},
{
"id": "terminal",
"name": "Web 终端",
"layer": "api",
"description": "快捷命令、webssh-token",
"status": "pass",
"passed": 1,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/terminal/quick-commands",
"status": "pass",
"feature_id": "terminal",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "push_sync",
"name": "推送与同步",
"layer": "api",
"description": "validate-source、sync",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "scripts",
"name": "脚本库",
"layer": "api",
"description": "脚本 CRUD、执行记录",
"status": "pass",
"passed": 6,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "POST /api/scripts/ (create)",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/ (list)",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/scripts/35",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/exec-config",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/executions",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/credentials",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "schedules",
"name": "调度任务",
"layer": "api",
"description": "调度 CRUD",
"status": "pass",
"passed": 4,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "POST /api/schedules/ (create)",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/schedules/ (list)",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/schedules/29 (disable)",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/schedules/29",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "credentials",
"name": "凭据预设",
"layer": "api",
"description": "密码/SSH 密钥预设",
"status": "pass",
"passed": 4,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "POST /api/presets/ (create)",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/presets/ (list)",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/presets/39",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/ssh-key-presets/",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "retries",
"name": "重试队列",
"layer": "api",
"description": "失败任务重试列表",
"status": "pass",
"passed": 1,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/retries/ (list)",
"status": "pass",
"feature_id": "retries",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "audit",
"name": "审计日志",
"layer": "api",
"description": "操作审计分页",
"status": "pass",
"passed": 1,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/audit/ (list)",
"status": "pass",
"feature_id": "audit",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "alerts",
"name": "告警历史",
"layer": "api",
"description": "告警列表与统计",
"status": "pass",
"passed": 1,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/alert-history/",
"status": "pass",
"feature_id": "alerts",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "assets",
"name": "资产管理",
"layer": "api",
"description": "平台/节点/命令日志",
"status": "pass",
"passed": 8,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/assets/platforms",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/nodes",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/nodes/tree",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/ssh-sessions",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/command-logs",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/assets/platforms (e2e)",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/assets/platforms/8",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/assets/platforms/8",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "search",
"name": "全局搜索",
"layer": "api",
"description": "跨资源搜索",
"status": "pass",
"passed": 1,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/search/",
"status": "pass",
"feature_id": "search",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "settings",
"name": "系统设置",
"layer": "api",
"description": "动态配置、IP 白名单",
"status": "pass",
"passed": 5,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "GET /api/settings/ (list)",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/settings/system_name",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/settings/",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/settings/ip-allowlist",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/settings/bing-wallpapers",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
}
]
},
{
"id": "health_detail",
"name": "健康详情",
"layer": "api",
"description": "/health/detail",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_dashboard",
"name": "页面·仪表盘",
"layer": "ui",
"description": "路由 /",
"status": "pass",
"passed": 1,
"failed": 0,
"skipped": 0,
"checks": [
{
"name": "playwright suite",
"status": "pass",
"feature_id": "ui_dashboard",
"layer": "ui",
"message": "",
"duration_ms": 87504.82109999575
}
]
},
{
"id": "ui_servers",
"name": "页面·服务器",
"layer": "ui",
"description": "路由 /servers",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_terminal",
"name": "页面·终端",
"layer": "ui",
"description": "路由 /terminal",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_files",
"name": "页面·文件",
"layer": "ui",
"description": "路由 /files",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_push",
"name": "页面·推送",
"layer": "ui",
"description": "路由 /push",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_scripts",
"name": "页面·脚本",
"layer": "ui",
"description": "路由 /scripts",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_credentials",
"name": "页面·凭据",
"layer": "ui",
"description": "路由 /credentials",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_schedules",
"name": "页面·调度",
"layer": "ui",
"description": "路由 /schedules",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_retries",
"name": "页面·重试",
"layer": "ui",
"description": "路由 /retries",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_commands",
"name": "页面·命令日志",
"layer": "ui",
"description": "路由 /commands",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_alerts",
"name": "页面·告警",
"layer": "ui",
"description": "路由 /alerts",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_audit",
"name": "页面·审计",
"layer": "ui",
"description": "路由 /audit",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_settings",
"name": "页面·设置",
"layer": "ui",
"description": "路由 /settings",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "ui_theme",
"name": "页面·主题与登出",
"layer": "ui",
"description": "主题切换、退出",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
},
{
"id": "unit_core",
"name": "单元测试(核心)",
"layer": "unit",
"description": "路径校验、权限、提权逻辑",
"status": "skip",
"passed": 0,
"failed": 0,
"skipped": 0,
"checks": []
}
],
"summary": {
"passed_checks": 59,
"failed_checks": 0,
"skipped_checks": 0,
"features_pass": 17,
"features_fail": 0,
"features_total": 17,
"ok": true
},
"checks": [
{
"name": "GET /health",
"status": "pass",
"feature_id": "infra_health",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/auth/login",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/auth/me",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/ (pre-cleanup)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/servers/ (create)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/ (list)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/stats",
"status": "pass",
"feature_id": "dashboard",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/54",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/servers/54 (update)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/servers/54",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/scripts/ (create)",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/ (list)",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/scripts/35",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/schedules/ (create)",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/schedules/ (list)",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/schedules/29 (disable)",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/schedules/29",
"status": "pass",
"feature_id": "schedules",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/presets/ (create)",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/presets/ (list)",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/presets/39",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/settings/ (list)",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/settings/system_name",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/audit/ (list)",
"status": "pass",
"feature_id": "audit",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/retries/ (list)",
"status": "pass",
"feature_id": "retries",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/sync/browse (no server)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /health",
"status": "pass",
"feature_id": "infra_health",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/auth/login",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/search/",
"status": "pass",
"feature_id": "search",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/alert-history/",
"status": "pass",
"feature_id": "alerts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/alert-history/stats",
"status": "pass",
"feature_id": "dashboard",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/platforms",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/nodes",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/nodes/tree",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/ssh-sessions",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/assets/command-logs",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/assets/platforms (e2e)",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "PUT /api/assets/platforms/8",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "DELETE /api/assets/platforms/8",
"status": "pass",
"feature_id": "assets",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/categories",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/logs",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/meta/api_base_url",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/servers/8/logs",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/exec-config",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/executions",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/scripts/credentials",
"status": "pass",
"feature_id": "scripts",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/ssh-key-presets/",
"status": "pass",
"feature_id": "credentials",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/sync/validate-source-path",
"status": "pass",
"feature_id": "files",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/sync/browse (real server)",
"status": "pass",
"feature_id": "servers",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "POST /api/auth/webssh-token",
"status": "pass",
"feature_id": "auth",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/settings/",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/settings/ip-allowlist",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/settings/bing-wallpapers",
"status": "pass",
"feature_id": "settings",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /health/detail",
"status": "pass",
"feature_id": "infra_health",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /api/terminal/quick-commands",
"status": "pass",
"feature_id": "terminal",
"layer": "api",
"message": "",
"duration_ms": 0
},
{
"name": "GET /app/ (SPA 入口)",
"status": "pass",
"feature_id": "infra_app",
"layer": "infra",
"message": "",
"duration_ms": 947.8227000072366
},
{
"name": "GET /api/servers/8/files-capability",
"status": "pass",
"feature_id": "files",
"layer": "api",
"message": "",
"duration_ms": 940.7884999964153
},
{
"name": "POST /api/sync/browse /tmp",
"status": "pass",
"feature_id": "files",
"layer": "api",
"message": "",
"duration_ms": 1093.0962999991607
},
{
"name": "playwright suite",
"status": "pass",
"feature_id": "ui_dashboard",
"layer": "ui",
"message": "",
"duration_ms": 87504.82109999575
}
]
}