1 line
4.8 KiB
JavaScript
1 line
4.8 KiB
JavaScript
import{n as e,t}from"./VRow-qjxp2VJ5.js";import{$ as n,C as r,Ct as i,Dr as a,Er as o,L as s,Nr as c,Or as l,St as u,Tr as d,Xt as f,Yr as p,Zt as m,br as h,in as g,jr as _,qr as v,ri as y,ui as b,xi as x,xr as S,xt as C,yi as w,yr as T}from"./index-a0fi5f-0.js";import{t as E}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{n as D,t as O}from"./VCard-BwwttBcf.js";import{t as k}from"./VSkeletonLoader-BW_kZu-c.js";var A={cpu:`cpu_avg`,mem:`mem_avg`,disk:`disk_avg`,online:null};function j(e,t){if(t===`online`)return e.map(e=>e.online_count);let n=A[t];return e.map(e=>e[n])}function M(e){let t=e.filter(e=>e!=null),n=e.length?e[e.length-1]:null,r=e.length>1?e[e.length-2]:null,i=n!=null&&r!=null?Math.round((n-r)*10)/10:null;if(!t.length)return{current:n,previous:r,delta:i,min:null,max:null,avg:null};let a=t.reduce((e,t)=>e+t,0);return{current:n,previous:r,delta:i,min:Math.min(...t),max:Math.max(...t),avg:Math.round(a/t.length)}}function N(e,t,n){let r=e.slice(t,n+1);return{cpu:M(j(r,`cpu`)),mem:M(j(r,`mem`)),disk:M(j(r,`disk`)),online:M(j(r,`online`))}}function P(e){let t=new Map(e.map(e=>[e.key,e.value])),n=(e,n)=>{let r=Number(t.get(e));return Number.isFinite(r)&&r>0?r:n};return{cpu:n(`cpu_alert_threshold`,80),mem:n(`mem_alert_threshold`,80),disk:n(`disk_alert_threshold`,80)}}function F(e){let t=m(e);return t?f(t.toISOString()):e}function I(e,t=`%`){return e==null?`—`:e===0?`0${t}`:`${e>0?`+`:``}${e}${t}`}function L(e){let t=m(e);return t?t.getTime():null}function R(e,t){if(!e.length)return-1;let n=0,r=1/0;return e.forEach((e,i)=>{let a=L(e.recorded_at);if(a==null)return;let o=Math.abs(a-t);o<r&&(r=o,n=i)}),r<=301e3?n:-1}function z(e,t,n){return e<=0?{startIdx:0,endIdx:0}:{startIdx:Math.max(0,Math.floor(t/100*(e-1))),endIdx:Math.min(e-1,Math.ceil(n/100*(e-1)))}}var B=[`total`,`online`,`offline`,`unset-path-offline`,`unset-path`,`alerts`];function V(){return[{subtitle:`服务器总数`,title:`0`,icon:`mdi-server-network`,color:`blue`},{subtitle:`在线`,title:`0`,icon:`mdi-check-circle-outline`,color:`green`},{subtitle:`离线`,title:`0`,icon:`mdi-alert-circle-outline`,color:`orange`},{subtitle:`未设路径·离线`,title:`0`,icon:`mdi-folder-alert-outline`,color:`deep-orange`},{subtitle:`未设路径`,title:`0`,icon:`mdi-folder-off-outline`,color:`amber`},{subtitle:`告警中`,title:`0`,icon:`mdi-bell-alert-outline`,color:`red`}]}function H(e,t){switch(e){case`total`:return String(t.total);case`online`:return String(t.online);case`offline`:return String(t.offline_list??t.offline);case`unset-path-offline`:return String(t.unset_path_offline??0);case`unset-path`:return String(t.unset_path??0);case`alerts`:return String(t.alerts??0);default:return`0`}}function U(e,t){e.value.forEach((e,n)=>{let r=B[n];r&&(e.title=H(r,t))})}async function W(){let{data:e}=await u(C.serverStats,()=>g.get(`/servers/stats`));return e}async function G(e){i(C.serverStats);let t=await W();return U(e,t),t}function K(){return{statItems:b(V())}}var q={class:`stat-cards-row`},J={key:0,class:`d-flex justify-end align-center mb-2`},Y={class:`text-caption text-medium-emphasis mb-1`,style:{"font-size":`14px`,"letter-spacing":`0.5px`,"text-transform":`uppercase`}},X=E(c({__name:`StatCardsRow`,props:{items:{},loading:{type:Boolean,default:!1},refreshing:{type:Boolean,default:!1},showRefresh:{type:Boolean,default:!0}},emits:[`click`,`refresh`],setup(i,{emit:c}){let u=c;function f(e){e.clickable===!1||!e.key||u(`click`,e.key)}return(c,m)=>(v(),l(`div`,q,[i.showRefresh?(v(),l(`div`,J,[_(s,{icon:`mdi-refresh`,size:`small`,variant:`text`,loading:i.refreshing,disabled:i.loading,title:`刷新统计`,"aria-label":`刷新统计`,onClick:m[0]||=e=>u(`refresh`)},null,8,[`loading`,`disabled`])])):a(``,!0),i.loading?(v(),o(k,{key:1,type:`heading`,class:`mb-1`})):(v(),o(t,{key:2},{default:y(()=>[(v(!0),l(S,null,p(i.items,(t,a)=>(v(),o(e,{key:t.key??a,cols:`6`,sm:i.items.length>4?4:3,lg:i.items.length>4?2:3},{default:y(()=>[_(O,{elevation:`0`,rounded:`xl`,border:``,class:w([`stat-card`,{"stat-card--clickable":t.clickable!==!1&&t.key,"stat-card--active":t.active,"stat-card--refreshing":i.refreshing}]),role:t.clickable!==!1&&t.key?`button`:void 0,tabindex:t.clickable!==!1&&t.key?0:void 0,onClick:e=>f(t),onKeydown:T(h(e=>f(t),[`prevent`]),[`enter`])},{default:y(()=>[_(D,{class:`pa-4 d-flex align-center justify-space-between`},{default:y(()=>[d(`div`,null,[d(`div`,Y,x(t.subtitle),1),d(`div`,{class:w([`font-weight-bold`,`text-`+t.color]),style:{"font-size":`36px`,"line-height":`1.1`}},x(t.title),3)]),_(r,{color:t.color,size:`48`,rounded:`lg`,class:`stat-icon`},{default:y(()=>[_(n,{icon:t.icon,size:`24`,color:`white`},null,8,[`icon`])]),_:2},1032,[`color`])]),_:2},1024)]),_:2},1032,[`class`,`role`,`tabindex`,`onClick`,`onKeydown`])]),_:2},1032,[`sm`,`lg`]))),128))]),_:1}))]))}}),[[`__scopeId`,`data-v-c6013623`]]);export{G as a,R as c,z as d,P as f,W as i,I as l,B as n,K as o,L as p,U as r,N as s,X as t,F as u}; |