{{ t('auth.loginSubtitle') }}
{{ t('auth.noAccount') }}
{{ t('auth.registerSubtitle') }}
{{ t('auth.hasAccount') }}
{{ t('dashboard.dateZipHint') }}
{{ t('dashboard.exportRetention') }}
{{ taskFilter ? t('dashboard.noTasksFilter') : t('dashboard.noTasksHint') }}
{{ t('resources.intro') }}
{{ item.desc }}
{{ t('upload.intro') }}
{{ t('upload.annotationLanguageHint') }}
{{ t('upload.fullSegmentHint') }}
{{ t('upload.folderHintStereo') }}
| {{ t('taskDetail.taskId') }} | {{ selectedTask.id }} |
|---|---|
| {{ t('taskDetail.taskNo') }} | {{ selectedTask.task_number }} |
| {{ t('taskDetail.fileSize') }} | {{ formatSize(selectedTask.file_size) }} |
| {{ t('taskDetail.sliceCount') }} | {{ selectedTask.slice_count || '-' }} |
| {{ t('taskDetail.createdAt') }} | {{ formatTime(selectedTask.created_at) }} |
| {{ t('taskDetail.updatedAt') }} | {{ formatTime(selectedTask.updated_at) }} |
| {{ t('taskDetail.completedAt') }} | {{ formatTime(selectedTask.completed_at) }} |
| {{ t('taskDetail.errorMsg') }} | {{ selectedTask.error_message }} |
| {{ t('taskDetail.failedStage') }} | {{ stageLabel(selectedTask.failed_stage) }} |
{{ prettyJson(selectedTask.qwen_result_json) }}
| 管道 | 运行中 | 成功 | 失败 | 重试中 | 等待中 |
|---|---|---|---|---|---|
| {{ stageLabel(s.stage) }} | {{ s.running }} | {{ s.success }} | {{ s.failed }} | {{ s.retrying }} | {{ s.pending }} |
暂无失败任务
| 用户名 | 邮箱 | 角色 | 状态 | 公司标签 | 剩余额度(GB) | 进行中 | 已完成 | 失败 | 总计 | 注册时间 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ u.username }} | {{ u.email }} | {{ u.is_admin ? '管理员' : '普通' }} | {{ u.is_active ? '正常' : '禁用' }} | {{ u.company_tag || '-' }} |
|
{{ u.active_task_count }} | {{ u.completed_task_count }} | {{ u.failed_task_count }} | {{ u.task_count }} | {{ formatTime(u.created_at) }} |
|
| 实例 ID | {{ nodeOverview.services.api_instance?.instance_id }} |
| 部署角色 | {{ nodeOverview.services.api_instance?.deploy_role || 'api' }} |
| 监听地址 | {{ nodeOverview.services.api_instance?.listen_addr }} |
| 整体状态 | {{ nodeOverview.services.overall === 'ok' ? '正常' : '降级' }} |
| 数据库 | {{ nodeOverview.services.api_instance?.database }} |
| Redis | {{ nodeOverview.services.api_instance?.redis }} |
| Temporal | {{ nodeOverview.services.api_instance?.temporal }} {{ nodeOverview.services.api_instance?.temporal_address }} |
节点地址保存在数据库(RDS),在此增删改查;健康检查通过各实例 /health 探测。
截流后该节点不再创建新任务(会转到其他 API 节点),进行中的请求继续完成。关闭更新并重新启动后仍保持截流,确认后再恢复接单。
多实例部署时建议为每个 API 设置 PUBLIC_BASE_URL(与这里登记的地址一致),便于重启后继续识别自己。
| 名称 | 地址 | 启用 | 健康 | 接单 | 版本 | 延迟(ms) | DB / Temporal | 操作 |
|---|---|---|---|---|---|---|---|---|
| {{ row.probe.healthy ? '正常' : '异常' }} — |
{{ row.draining ? '已截流' : '接单中' }}
节点未确认
|
{{ row.probe?.version || '—' }} | {{ row.probe?.latency_ms ?? '—' }} | {{ row.probe.detail.database }} / {{ row.probe.detail.temporal }} {{ row.probe?.error || '—' }} | ||||
| 暂无 API 节点,请添加 | ||||||||
| 队列 | 轮询器 | 在线轮询 | 积压 | 可达 |
|---|---|---|---|---|
| {{ q.name }} | {{ q.pollers || 0 }} | {{ q.online_pollers || 0 }} | {{ q.backlog || 0 }} | {{ q.reachable !== false ? '是' : '否' }} |
| 节点ID | 运行任务数 | 过期Lease | 最近心跳 | 状态分布 |
|---|---|---|---|---|
| {{ n.node_id }} | {{ n.running_tasks }} | {{ n.stale_leases || 0 }} | {{ formatTime(n.latest_heartbeat_at) }} | {{ status }}: {{ count }} |
V2 使用 Temporal 调度;需运行 go run ./cmd/worker 且 API 能连上 Temporal。
IP 是服务器地址,同一台机器上的节点 IP 相同。节点名用来区分这台机器上的不同 Worker,截流只作用于这一行,不会停掉同机的其他节点。
同一台机器跑多个 Worker 时,给每个容器设置不同的 NODE_NAME(例如 worker-a)。未设置时用容器主机名区分。
关闭该节点更新并重新启动后仍保持截流,确认后再恢复接单。
| 服务器 IP | 节点 | Worker 标识 | 在线 | 接单 | 最近轮询 | Task Queue | 操作 |
|---|---|---|---|---|---|---|---|
| {{ w.node_ip || '—' }} | {{ w.node_key || w.hostname || '—' }} | {{ w.worker_name }} | {{ w.online ? '在线' : '离线' }} | {{ w.draining ? '已截流' : '接单中' }} | {{ formatTime(w.last_access_at) }} | {{ (w.queue_names || []).join(', ') || '-' }} |
截流后不再向该服务器提交新的推理任务,已经在队列里的任务会继续处理。恢复接单前,新任务会调度到其他推理服务器。
| 名称 | 地址 | 健康 | 接单 | 队列 | 处理中 | 待处理 | 操作 |
|---|---|---|---|---|---|---|---|
| {{ s.name || '-' }} | {{ s.url }} | {{ s.healthy ? '正常' : '异常' }} | {{ s.draining ? '已截流' : '接单中' }} | {{ s.queue_size || 0 }} | {{ s.processing_tasks || 0 }} | {{ s.pending_tasks || 0 }} |
{{ prettyJson(srv.raw_status) }}
未配置推理服务器