2026-07-24 14:23:52 +08:00
|
|
|
|
import{E as ve,a as ye}from"./el-form-item-A78n4QB5.js";import{E as we}from"./index-DwX5DKZI.js";import{E as he}from"./index-D88lUnba.js";import{E as Ve}from"./index-DiBcb3b0.js";import{E as Ce,a as Ee}from"./el-select-CaOrtd8T.js";import{E as ke}from"./el-dialog-vomGQzmb.js";import{E as xe}from"./el-input-number-B9u0GRM3.js";import{E as Ne}from"./el-progress-CviUFs5U.js";import{E as Ue}from"./el-space-DbBNFrTk.js";import{E as $e}from"./el-switch-CB16xfIz.js";import{a as je,E as Pe}from"./el-table-Bt-xsuMz.js";import{a as Ge,E as Ie}from"./el-tab-pane-CMwRC8Ph.js";import{v as Te}from"./directive-De56YgNS.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-Cqlj7vcl.js";import"./el-scrollbar-Ouf4QXxU.js";import"./el-popper-BiOcgWnR.js";/* empty css */import"./el-tooltip-l0sNRNKZ.js";import"./el-checkbox-Skbm2yST.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-EioEbuNM.js";import"./_baseClone-CXWVM9KD.js";import"./raf-q_fay9c6.js";import"./index-CVnqIkly.js";import"./index-BoTiWnu7.js";import"./index-CcvEzrx9.js";import"./vnode-CbkaLjR-.js";import"./index-BzQ5uZ5s.js";import"./scroll-l-f8IXFz.js";import"./clamp-Q0qVCgXV.js";import"./toNumber-DUmW2q0M.js";import"./_baseIteratee-BLZ5vHSI.js";import"./index-BLAj6_BJ.js";import"./use-dialog-DDhg0h52.js";import"./index-D4Q0qoMq.js";import"./index-BRvPcFwU.js";import"./validator-BEjBlCgE.js";import"./debounce-De-xXXEq.js";import"./omit-cmH8l6ot.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
|