| 12 |
- import{bc as re,bd as ne,d as Q,F as oe,c as h,o as Y,i as le,be as ue,n as l,p as R,m as ie,bf as de,bg as ce,bh as ve,Q as me,f as P,b5 as fe,j as pe,Z as L,a1 as A,a7 as d,a0 as v,T as r,b3 as k,b8 as ge,a5 as b,a6 as m,$ as H,a2 as W,a3 as _e,bi as K,a9 as z,b9 as q,bj as he,bb as G}from"./index-8a67e3df.js";import"./dayjs-919e6097.js";import{u as ye}from"./index-c6560d80.js";import{s as xe,c as Se,S as y,a as we}from"./Statistic-421016fc.js";import{t as Ce}from"./toInteger-9a80771f.js";import{_ as D}from"./index-a5661619.js";import{P as j}from"./index-6a257713.js";function be(c,u,f){c=re(c),u=Ce(u);var i=u?xe(c):0;return u&&i<u?Se(u-i,f)+c:c}var ke=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]];function Te(c,u){var f=c,i=/\[[^\]]*]/g,x=(u.match(i)||[]).map(function(n){return n.slice(1,-1)}),g=u.replace(i,"[]"),S=ke.reduce(function(n,$){var T=ne($,2),s=T[0],w=T[1];if(n.indexOf(s)!==-1){var p=Math.floor(f/w);return f-=p*w,n.replace(new RegExp("".concat(s,"+"),"g"),function(C){var I=C.length;return be(p.toString(),I,"0")})}return n},g),o=0;return S.replace(i,function(){var n=x[o];return o+=1,n})}function De(c,u){var f=u.format,i=f===void 0?"":f,x=new Date(c).getTime(),g=Date.now(),S=Math.max(x-g,0);return Te(S,i)}var $e=1e3/30;function O(c){return new Date(c).getTime()}var Le=function(){return R(R({},we()),{},{value:[Number,String,Object],format:String,onFinish:Function,onChange:Function})};const Re=Q({compatConfig:{MODE:3},name:"AStatisticCountdown",props:oe(Le(),{format:"HH:mm:ss"}),setup:function(u,f){var i=f.emit,x=f.slots,g=h(),S=h(),o=function(){var p=u.value,C=O(p);C>=Date.now()?n():$()},n=function(){if(!g.value){var p=O(u.value);g.value=setInterval(function(){S.value.$forceUpdate(),p>Date.now()&&i("change",p-Date.now()),o()},$e)}},$=function(){var p=u.value;if(g.value){clearInterval(g.value),g.value=void 0;var C=O(p);C<Date.now()&&i("finish")}},T=function(p){var C=p.value,I=p.config,U=u.format;return De(C,R(R({},I),{},{format:U}))},s=function(p){return p};return Y(function(){o()}),le(function(){o()}),ue(function(){$()}),function(){var w=u.value;return l(y,R({ref:S},R(R({},ie(u,["onFinish","onChange"])),{},{value:w,valueRender:s,formatter:T})),x)}}});y.Countdown=Re;y.install=function(c){return c.component(y.name,y),c.component(y.Countdown.name,y.Countdown),c};y.Countdown;const B=de({requestOptions:{apiUrl:()=>ce("cluster")}});function Ie(){return B.get({url:"/roles"})}function Ae(){return B.get({url:"/servers"})}function Ue(){return B.get({url:"/summaries"})}function ze(c){return B.get({url:`/servers/${c}/streams`})}const Be=ve("cluster",()=>{const c=h([]),u=h({version:0,updated_at:0,servers:[],owner:""}),f=h([]),i=async()=>{try{const o=await Ie(),n=o.data||o;c.value=n,c.value}catch(o){console.error(`getRoles-err: ${o}`)}},x=async()=>{try{const o=await Ae(),n=o.data||o;n&&n.updatedAt&&(n.updated_at=n.updatedAt,delete n.updatedAt),u.value=n,u.value}catch(o){console.error(`getServerList-err: ${o}`)}},g=async()=>{try{const o=await Ue(),n=o.data||o;f.value=n||[],f.value}catch(o){console.error(`getServerSummaries-err: ${o}`)}},S=async()=>{await Promise.all([i(),x(),g()])};return S(),{roles:c,serverList:u,serverSummaries:f,loadAll:S,loadServerSummaries:g}}),Fe={class:"flex"},Me={class:"mt-4",style:{height:"calc(100vh - 200px)"}},Ne={key:0,class:"space-y-4"},Pe={class:"flex items-center space-x-4"},We={class:"text-lg font-medium"},je={class:"space-y-2"},Oe={class:"flex justify-between text-sm"},Ve={class:"text-center text-sm text-gray-500"},Ee={class:"space-y-2"},He={class:"flex justify-between text-sm"},Ke={class:"text-center text-sm text-gray-500"},qe={class:"space-y-3"},Ge={class:"flex justify-between items-center mb-2"},Qe={class:"grid grid-cols-2 gap-4 text-sm"},Ye={class:"font-medium"},Ze={class:"text-xs text-gray-400"},Je={class:"font-medium"},Xe={class:"text-xs text-gray-400"},et={class:"mb-2 text-sm text-gray-500"},ut=Q({__name:"index",setup(c){const u=Be(),{roles:f,serverList:i,serverSummaries:x}=me(u),g=h(!1),S=P(()=>{const e=i.value?.servers||[];return i.value,[...e].sort((t,_)=>t.status==="online"&&_.status!=="online"?-1:t.status!=="online"&&_.status==="online"?1:t.id.localeCompare(_.id))}),o=e=>{const a=i.value?.servers?.find(t=>t.id===e);return a?x.value?.find(t=>t.address===a.address):null},n=e=>{if(typeof e=="string"&&(e=parseFloat(e)),isNaN(e)||e<0)return"0 B";const a=["B","KB","MB","GB","TB"];let t=e,_=0;for(;t>=1024&&_<a.length-1;)t/=1024,_++;return`${t.toFixed(1)} ${a[_]}`},$=e=>{if(!e)return"未知";const a=Date.now();let t;typeof e=="string"?t=new Date(e).getTime():t=e<1e12?e*1e3:e;const _=a-t;if(_<0)return"刚刚";const V=Math.floor(_/1e3),M=Math.floor(V/60),N=Math.floor(M/60),E=Math.floor(N/24);return V<60?"刚刚":M<60?`${M}分钟前`:N<24?`${N}小时前`:E<30?`${E}天前`:new Date(t).toLocaleDateString("zh-CN",{year:"numeric",month:"short",day:"numeric"})},T=h(!1),s=h(null),w=e=>{const a=o(e);a&&(s.value=a,T.value=!0)},p=h(!1),C=h(!1),I=h(""),U=h(""),F=h([]),Z=async e=>{I.value=e;const a=i.value?.servers?.find(t=>t.id===e);U.value=a?.address||"",p.value=!0,F.value=[],C.value=!0;try{const t=await ze(e);t.code===0&&t.data?F.value=t.data:G.error(t.message||"获取流列表失败")}catch(t){G.error(t.message||"获取流列表失败")}finally{C.value=!1}},J=P(()=>(i.value?.servers||[]).filter(t=>t.status==="online").length),X=P(()=>{const e=i.value?.servers||[];return e.length,e.length}),ee=ye(),{pause:te,resume:ae}=fe(async()=>{await u.loadAll()});Y(async()=>{g.value=!0;try{await u.loadAll(),f.value,i.value,x.value,f.value?.length,i.value&&Object.keys(i.value),x.value?.length}finally{g.value=!1}ae()}),pe(()=>{te()});const se={height:"100%",rowConfig:{keyField:"id",useKey:!0},columnConfig:{useKey:!0},columns:[{field:"id",title:"ID",minWidth:"100px",showOverflow:"tooltip",formatter:({cellValue:e})=>e===i.value?.owner?`${e} (当前)`:e,cellRender:{name:"VxeTag",props:({row:e})=>e.id===i.value?.owner?{type:"primary",content:`${e.id} (当前)`}:{content:e.id}}},{field:"address",title:"Address",minWidth:"150px",showOverflow:"tooltip"},{field:"status",title:"Status",minWidth:"100px",align:"center",formatter:({cellValue:e})=>e==="online"?"在线":"离线",cellRender:{name:"VxeTag",props:({row:e})=>({type:e.status==="online"?"success":"danger",content:e.status==="online"?"在线":"离线"})}},{field:"roles",title:"Roles",minWidth:"200px",formatter:({cellValue:e})=>Array.isArray(e)?e.join(", "):e},{field:"lastSeen",title:"Last Seen",minWidth:"180px",formatter:({cellValue:e})=>$(e)},{field:"streams",title:"流/订阅",minWidth:"150px",align:"center",formatter:({row:e})=>{const a=o(e.id);return a?`流: ${a.streamCount||0} | 订阅: ${a.subscribeCount||0}`:"暂无数据"}},{field:"summary",title:"摘要",minWidth:"200px",align:"center",formatter:({row:e})=>{const a=o(e.id);return a?`CPU: ${(a.cpuUsage||0).toFixed(1)}% | 内存: ${n((a.memory?.used||0)<<10)}`:"暂无数据"},cellRender:{name:"VxeButton",props:({row:e})=>{const a=o(e.id);return{type:"text",size:"mini",content:a?"查看详情":"暂无数据",disabled:!a,onClick:()=>w(e.id)}}}},{field:"streamList",title:"流列表",minWidth:"120px",align:"center",cellRender:{name:"VxeButton",props:({row:e})=>({type:"primary",size:"mini",content:"查看流列表",onClick:()=>Z(e.id)})}}]};return(e,a)=>(L(),A(W,null,[d("div",Fe,[l(r(k),{class:"w-1/4"},{default:v(()=>[l(r(y),{title:"节点总数",value:X.value},null,8,["value"])]),_:1}),l(r(k),{class:"w-1/4 ml-4"},{default:v(()=>[l(r(y),{title:"在线节点",value:J.value},null,8,["value"])]),_:1}),l(r(k),{class:"w-1/4 ml-4"},{default:v(()=>[l(r(y),{title:"角色数量",value:r(f)?.length||0},null,8,["value"])]),_:1}),l(r(k),{class:"w-1/4 ml-4"},{default:v(()=>[l(r(y),{title:"同步版本",value:r(i)?.version||0},null,8,["value"])]),_:1})]),d("div",Me,[l(r(ge),{uid:r(ee).uid,gridOptions:se,data:S.value,loading:g.value},null,8,["uid","data","loading"])]),l(r(q),{open:T.value,"onUpdate:open":a[0]||(a[0]=t=>T.value=t),title:"服务器详情",width:"800px",footer:null},{default:v(()=>[s.value?(L(),A("div",Ne,[l(r(k),{title:"基本信息",size:"small"},{default:v(()=>[l(r(D),{column:2,size:"small"},{default:v(()=>[l(r(D).Item,{label:"地址"},{default:v(()=>[b(m(s.value.value?.address||"N/A"),1)]),_:1}),l(r(D).Item,{label:"流数量"},{default:v(()=>[b(m(s.value.value?.streamCount||0),1)]),_:1}),l(r(D).Item,{label:"订阅数量"},{default:v(()=>[b(m(s.value.value?.subscribeCount||0),1)]),_:1}),l(r(D).Item,{label:"拉流数量"},{default:v(()=>[b(m(s.value.value?.pullCount||0),1)]),_:1}),l(r(D).Item,{label:"推流数量"},{default:v(()=>[b(m(s.value.value?.pushCount||0),1)]),_:1}),l(r(D).Item,{label:"录制数量"},{default:v(()=>[b(m(s.value.value?.recordCount||0),1)]),_:1}),l(r(D).Item,{label:"转换数量"},{default:v(()=>[b(m(s.value.value?.transformCount||0),1)]),_:1})]),_:1})]),_:1}),l(r(k),{title:"CPU使用率",size:"small"},{default:v(()=>[d("div",Pe,[l(r(j),{percent:s.value.value?.cpuUsage||0,"stroke-color":(s.value.value?.cpuUsage||0)>80?"#ff4d4f":(s.value.value?.cpuUsage||0)>60?"#faad14":"#52c41a","show-info":!0,style:{flex:"1"}},null,8,["percent","stroke-color"]),d("span",We,m((s.value.value?.cpuUsage||0).toFixed(1))+"%",1)])]),_:1}),l(r(k),{title:"内存使用情况",size:"small"},{default:v(()=>[d("div",je,[d("div",Oe,[d("span",null,"已使用: "+m(n(s.value.value?.memory?.used||0)),1),d("span",null,"总计: "+m(n(s.value.value?.memory?.total||0)),1)]),l(r(j),{percent:s.value.value?.memory?.usage||0,"stroke-color":(s.value.value?.memory?.usage||0)>80?"#ff4d4f":(s.value.value?.memory?.usage||0)>60?"#faad14":"#52c41a","show-info":!0},null,8,["percent","stroke-color"]),d("div",Ve," 使用率: "+m((s.value.value?.memory?.usage||0).toFixed(1))+"% ",1)])]),_:1}),l(r(k),{title:"硬盘使用情况",size:"small"},{default:v(()=>[d("div",Ee,[d("div",He,[d("span",null,"已使用: "+m(n(s.value.value?.hardDisk?.used||0)),1),d("span",null,"总计: "+m(n(s.value.value?.hardDisk?.total||0)),1)]),l(r(j),{percent:s.value.value?.hardDisk?.usage||0,"stroke-color":(s.value.value?.hardDisk?.usage||0)>80?"#ff4d4f":(s.value.value?.hardDisk?.usage||0)>60?"#faad14":"#52c41a","show-info":!0},null,8,["percent","stroke-color"]),d("div",Ke," 使用率: "+m((s.value.value?.hardDisk?.usage||0).toFixed(1))+"% ",1)])]),_:1}),s.value.value?.netWork&&s.value.value.netWork.length>0?(L(),H(r(k),{key:0,title:"网络信息",size:"small"},{default:v(()=>[d("div",qe,[(L(!0),A(W,null,_e(s.value.value.netWork,(t,_)=>(L(),A("div",{key:_,class:"border rounded p-3"},[d("div",Ge,[l(r(K),{color:"blue"},{default:v(()=>[b(m(t?.name||"N/A"),1)]),_:2},1024)]),d("div",Qe,[d("div",null,[a[2]||(a[2]=d("div",{class:"text-gray-500"},"接收",-1)),d("div",Ye,m(n(t?.receive||0)),1),d("div",Ze," 速度: "+m(n(t?.receiveSpeed||0))+"/s ",1)]),d("div",null,[a[3]||(a[3]=d("div",{class:"text-gray-500"},"发送",-1)),d("div",Je,m(n(t?.sent||0)),1),d("div",Xe," 速度: "+m(n(t?.sentSpeed||0))+"/s ",1)])])]))),128))])]),_:1})):z("",!0)])):z("",!0)]),_:1},8,["open"]),l(r(q),{open:p.value,"onUpdate:open":a[1]||(a[1]=t=>p.value=t),title:`服务器流列表 - ${I.value}`,width:"900px",footer:null},{default:v(()=>[d("div",et," 服务器地址: "+m(U.value),1),l(r(he),{columns:[{title:"流路径",dataIndex:"stream_path",key:"stream_path",ellipsis:!0},{title:"状态",dataIndex:"status",key:"status",width:100,align:"center"},{title:"更新时间",dataIndex:"updated_at",key:"updated_at",width:180,align:"center"}],"data-source":F.value,loading:C.value,pagination:{pageSize:20,showSizeChanger:!0,showTotal:t=>`共 ${t} 条`},"row-key":"stream_path",size:"small"},{bodyCell:v(({column:t,record:_})=>[t.key==="status"?(L(),H(r(K),{key:0,color:_.status==="online"?"success":"default"},{default:v(()=>[b(m(_.status==="online"?"在线":"离线"),1)]),_:2},1032,["color"])):z("",!0),t.key==="updated_at"?(L(),A(W,{key:1},[b(m($(_.updated_at)),1)],64)):z("",!0)]),_:1},8,["data-source","loading","pagination"])]),_:1},8,["open","title"])],64))}});export{ut as default};
- //# sourceMappingURL=index-69355fa6.js.map
|