Files
YG_FT/frontend/dist/assets/ComputeNodesView-DGj1xqt1.js

2 lines
15 KiB
JavaScript
Raw Normal View History

import{E as ve,a as ye}from"./el-form-item-BA3ZlfqF.js";import{E as we}from"./index-zJ9bqPrh.js";import{E as he}from"./index-D23K2h6y.js";import{E as Ve}from"./index-BjlLyKON.js";import{E as Ce,a as Ee}from"./el-select-CeiDjMzB.js";import{E as ke}from"./el-dialog-fpsmuz8Z.js";import{E as xe}from"./el-input-number-Ba6IqA7Z.js";import{E as Ne}from"./el-progress-Br676mBH.js";import{E as Ue}from"./el-space-9hUfFaMV.js";import{E as $e}from"./el-switch-EBBsaB1p.js";import{a as je,E as Pe}from"./el-table-b_qkWXYf.js";import{a as Ge,E as Ie}from"./el-tab-pane-DQY-HDUC.js";import{v as Te}from"./directive-DCr8Ae3g.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-CxbBjZKo.js";import"./el-scrollbar-B0E7ZTt3.js";import"./el-popper-OAwpEmER.js";/* empty css */import"./el-tooltip-l0sNRNKZ.js";import"./el-checkbox-C_TzqU9u.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";import"./castArray-CwVgzdTt.js";import"./_baseClone-B6d4qZbo.js";import"./raf-Bjl8yy5U.js";import"./index-C4wGR5UT.js";import"./index-DxP0p4ch.js";import"./index-DHcidAHK.js";import"./vnode-DIVHEdsp.js";import"./index-Bzaib5AU.js";import"./scroll-Dvb2mTx8.js";import"./clamp-Ow4I6lPc.js";import"./toNumber-Yuob3eJv.js";import"./_baseIteratee-C6JbNheX.js";import"./index-36LucyXi.js";import"./use-dialog-DGVjglW6.js";import"./index-C3HZL-2Y.js";import"./index-ZKnv_mga.js";import"./validator-AVoXfk3G.js";import"./debounce-BJxjS5F3.js";import"./omit-CbHF-OEy.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