feat(docker): 完善龙虾军团任务调度与提示

This commit is contained in:
晴天
2026-03-10 00:11:47 +08:00
parent 0f899e38ae
commit 117de4665d
6 changed files with 1493 additions and 1108 deletions

44
src/lib/docker-tasking.js Normal file
View File

@@ -0,0 +1,44 @@
export const DOCKER_TASK_TIMEOUT_MS = 10 * 60 * 1000
export function buildDockerDispatchTargets(targets = []) {
if (!Array.isArray(targets)) return []
return targets.map(target => ({
containerId: target.id,
containerName: target.name,
nodeId: target.nodeId || null,
}))
}
export function buildDockerInstanceSwitchContext({ containerId, name, port, gatewayPort, nodeId }) {
if (!containerId) throw new Error('缺少容器 ID')
if (!name) throw new Error('缺少容器名称')
const panelPort = parseRequiredPort(port, '面板端口')
const parsedGatewayPort = parseOptionalPort(gatewayPort, 18789)
return {
instanceId: `docker-${containerId.slice(0, 12)}`,
reloadRoute: true,
registration: {
name,
type: 'docker',
endpoint: `http://127.0.0.1:${panelPort}`,
gatewayPort: parsedGatewayPort,
containerId,
nodeId: nodeId || null,
note: 'Added from Docker page',
},
}
}
function parseRequiredPort(value, label) {
const port = Number.parseInt(value, 10)
if (Number.isInteger(port) && port > 0) return port
throw new Error(`${label}无效`)
}
function parseOptionalPort(value, fallback) {
const port = Number.parseInt(value, 10)
if (Number.isInteger(port) && port > 0) return port
return fallback
}