2026-07-24 14:25:59 +08:00
|
|
|
|
import{E as ve,a as ye}from"./el-form-item-DFlzM9g_.js";import{E as we}from"./index-Bl2Fsjov.js";import{E as he}from"./index-COtHB4lx.js";import{E as Ve}from"./index-DvecKFrV.js";import{E as Ce,a as Ee}from"./el-select-CHKMfjyJ.js";import{E as ke}from"./el-dialog-BjL10OpB.js";import{E as xe}from"./el-input-number-mWm5mZ4P.js";import{E as Ne}from"./el-progress-CHMIHz3t.js";import{E as Ue}from"./el-space-D7BVcCSh.js";import{E as $e}from"./el-switch-DgzwIqYS.js";import{a as je,E as Pe}from"./el-table-DaKcBqZN.js";import{a as Ge,E as Ie}from"./el-tab-pane-CzojjDdh.js";import{v as Te}from"./directive-BNrYmpdY.js";import{aF as T,aG as N,aH as Le,d as Se,y as c,D as qe,G as De,ah as Be,K as Fe,c as v,q as i,aa as u,g as J,s as t,w as a,ac as ze,j as G,o as f,x as d,M as K,ad as Q,e as I,z as Re,A as x,v as Ae}from"./index-DS73WiJW.js";import"./el-scrollbar-DErsaip4.js";import"./el-popper-DwsDzc1A.js";/* empty css */import"./el-tooltip-l0sNRNKZ.js";import"./el-checkbox-CphtzscD.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-PcoOufI5.js";import"./_baseClone--zSegXWR.js";import"./raf-G_xTfKfR.js";import"./index-Cz3aNuv2.js";import"./index-CP7PpuwU.js";import"./index-oP6kINt_.js";import"./vnode-HiBZolW-.js";import"./index-D-GNa2lp.js";import"./scroll-qUQMUB2J.js";import"./clamp-Cyl0wpX2.js";import"./toNumber-B0hxpsP6.js";import"./_baseIteratee-BtAnsxgT.js";import"./index-TDTe-u1-.js";import"./use-dialog-CStKyxge.js";import"./index-CdYGcoRT.js";import"./index-CAsu3xTW.js";import"./validator-B_WzUu_x.js";import"./debounce-BVX_QT7H.js";import"./omit-BHigcQFy.js";const Oe=()=>T("/compute/nodes"),He=m=>N("/compute/nodes",m),Je=(m,U)=>Le(`/compute/nodes/${m}`,U),Ke=m=>N(`/compute/nodes/${m}/test-connection`),Qe=m=>N(`/compute/nodes/${m}/enable`),We=m=>N(`/compute/nodes/${m}/disable`),Xe=m=>N(`/compute/nodes/${m}/drain`),Ye=()=>T("/compute/gpus"),Ze=()=>T("/compute/queue"),et=m=>T(`/compute/nodes/${m}/replicas`),tt={class:"compute-page"},lt={class:"compute-header"},at={class:"header-actions"},ot={key:0,class:"last-updated"},nt={class:"summary-grid"},st={class:"summary-tile"},ut={class:"summary-tile"},it={class:"summary-tile"},dt={class:"summary-tile"},rt={class:"mono"},mt={class:"muted mono"},pt={class:"muted"},_t={class:"muted"},ct={key:0,class:"muted"},ft={class:"muted"},gt={class:"replica-toolbar"},bt={key:0,class:"muted"},vt={class:"node-form-grid"},yt=Se({__name:"ComputeNodesView",setup(m){const U=ze(),ee=Ae(),L=c(String(U.query.tab||"nodes")),S=c(!0),q=c(!1),y=c([]),$=c([]),D=c([]),B=c([]),b=c(""),F=c(""),h=c(!1),C=c("create"),z=c(!1),n=Re({id:"",code:"",name:"",api_base_url:"",file_gateway_url:"",enabled:!0,scheduler_status:"offline",scheduler_weight:100,tags_text:"",max_parallel_jobs:1,data_root:"/data/yg-ft",model_root:"/data/yg-ft/models",log_root:"/opt/yg-ft/logs/training",description:""});let R=null,A=!1;const W=G(()=>y.value.find(o=>o.id===b.value)),te=G(()=>y.value.filter(o=>o.enabled).length),le=G(()=>$.value.filter(o=>o.status==="busy"||o.status==="reserved").length),ae=G(()=>y.value.reduce((o,l)=>o+l.current_running_jobs,0));qe(()=>U.query.tab,o=>{L.value=String(o||"nodes")});async function E(o={}){if(A)return;A=!0;const l=o.showLoading??!1,r=o.showButtonLoading??!1;l&&(S.value=!0),r&&(q.value=!0);try{const[s,w,M]=await Promise.all([Oe(),Ye(),Ze()]);y.value=s,$.value=w,D.value=M,(!b.value||!s.some(V=>V.id===b.value))&&s.length&&(b.value=s[0].id),await X(),F.value=new Date().toLocaleTimeString("zh-CN",{hour12:!1})}finally{l&&(S.value=!1),r&&(q.value=!1),A=!1}}async function X(){if(!b.value){B.value=[];return}B.value=await et(b.value)}async function oe(o){await ee.replace({path:"/compute",query:{tab:String(o)}})}async function j(o,l){const r=String(l.id);if(o==="enable"&&await Qe(r),o==="disable"&&await We(r),o==="drain"&&await Xe(r),o==="test"){const s=await Ke(r);s.success?x.success(`连接成功,发现 ${s.gpu_count} 张 GPU,延迟 ${s.latency_ms}ms`):x.error(s.error||"连接失败")}await E()}function ne(){Object.assign(n,{id:"",code:"",name:"",api_base_url:"",file
|