async function refreshData() { try { // 获取运行概览 - 更新为新的API路径 const runMetrics = await fetch('/api/run/metrics').then(r => r.json()); document.getElementById('running-tasks').textContent = runMetrics.running_tasks; document.getElementById('pending-tasks').textContent = runMetrics.pending_tasks; document.getElementById('completed-tasks').textContent = runMetrics.completed_tasks; document.getElementById('total-tasks').textContent = runMetrics.total_tasks_24h; // 获取服务器状态 - 使用现有的list接口 const serverStatus = await fetch('/api/comfy/list').then(r => r.json()); updateServerStatus(serverStatus); // 获取运行列表 - 更新为新的API路径 const runs = await fetch('/api/run').then(r => r.json()); updateRecentTasks(runs); } catch (error) { console.error('刷新数据失败:', error); } } function updateServerStatus(servers) { const container = document.getElementById('server-status'); container.innerHTML = ''; if (servers.length === 0) { container.innerHTML = '
暂无服务器信息
'; return; } servers.forEach(server => { const statusClass = server.status === 'online' ? 'online' : 'offline'; const statusColor = server.status === 'online' ? 'status-online' : 'status-offline'; // 格式化时间 const formatTime = (timeStr) => { if (!timeStr) return 'N/A'; try { const date = new Date(timeStr); const now = new Date(); const diff = now - date; if (diff < 60000) return '刚刚'; if (diff < 3600000) return Math.floor(diff / 60000) + '分钟前'; if (diff < 86400000) return Math.floor(diff / 3600000) + '小时前'; return date.toLocaleDateString(); } catch { return timeStr; } }; // 格式化健康检查时间 const formatHealthCheck = (timeStr) => { if (!timeStr) return 'N/A'; try { const date = new Date(timeStr); const now = new Date(); const diff = now - date; if (diff > 86400000) return '⚠️ 检查超时'; // 超过1天 if (diff > 3600000) return '⚠️ 检查延迟'; // 超过1小时 if (diff < 60000) return '✅ 刚刚'; if (diff < 3600000) return `✅ ${Math.floor(diff / 60000)}分钟前`; return `✅ ${Math.floor(diff / 3600000)}小时前`; } catch { return timeStr; } }; container.innerHTML += `暂无任务记录
'; return; } tasks.forEach(task => { const statusClass = 'status-' + task.status.toLowerCase(); const statusText = { 'pending': '等待中', 'running': '运行中', 'completed': '已完成', 'failed': '失败' }[task.status] || task.status; // 格式化时间 const formatTime = (timeStr) => { if (!timeStr) return 'N/A'; try { return new Date(timeStr).toLocaleString(); } catch { return timeStr; } }; // 格式化结果数据 const formatResult = (result) => { if (!result) return '暂无结果'; try { const parsed = JSON.parse(result); if (typeof parsed === 'object') { // 如果是对象,尝试提取关键信息 if (parsed.images && Array.isArray(parsed.images)) { return `生成图片: ${parsed.images.length} 张\n完整结果: ${JSON.stringify(parsed, null, 2)}`; } if (parsed.output && typeof parsed.output === 'object') { return `输出数据: ${Object.keys(parsed.output).length} 项\n完整结果: ${JSON.stringify(parsed, null, 2)}`; } return `完整结果: ${JSON.stringify(parsed, null, 2)}`; } return `完整结果: ${String(result)}`; } catch { return `完整结果: ${String(result)}`; } }; container.innerHTML += `