mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-07-05 17:32:33 +02:00
a48b29837a
- Add pre-restart config preflight to RestartModal with pass/warning/fail result panel and "Restart Anyway" confirmation for warnings - Add Site Identification (site_name) config field shown as browser title and login page caption - Add GET /api/validate_config and GET /api/site_info backend endpoints - Sync document.title with site_name via system store watchEffect - Fix authRegression.test.ts TS2367 type narrowing error - add new radio hardware and radio settings tabs
2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/plotly.min-BmxIBpZZ.js","assets/chunk-DECur_0Z.js"])))=>i.map(i=>d[i]);
|
|
import{r as e}from"./chunk-DECur_0Z.js";import{B as t,Ct as n,E as r,K as i,Q as a,R as o,S as s,Y as c,g as ee,j as l,k as u,l as d,m as f,nt as p,o as m,r as h,s as g,u as _,w as te,xt as v}from"./runtime-core.esm-bundler-C5QBTNWE.js";import{o as y}from"./api-3gMnsCKh.js";import{t as b}from"./_plugin-vue_export-helper-B7aGp3iI.js";import{t as ne}from"./useTheme-B2sN4eXt.js";import{t as re}from"./index-DTUpsCzx.js";import{t as x}from"./formatters-CHyWlnnq.js";import{_ as ie,a as ae,c as oe,d as se,f as ce,g as le,i as ue,l as de,m as fe,n as S,o as pe,r as me,s as C,t as w,u as he,v as ge,y as _e}from"./ChartCard-Dv7_dbhW.js";import{t as T}from"./chartjs-adapter-date-fns.esm-CUNlL-Mn.js";var ve={class:`p-6 space-y-6`},ye={class:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4`},be={class:`grid grid-cols-1 lg:grid-cols-2 gap-6`},xe={class:`glass-card rounded-[15px] p-6`},Se={key:0,class:`grid grid-cols-2 gap-4 text-sm`},Ce={class:`text-content-primary dark:text-content-primary font-semibold`},we={class:`text-content-primary dark:text-content-primary font-semibold`},Te={class:`text-content-primary dark:text-content-primary font-semibold`},E={class:`text-content-primary dark:text-content-primary font-semibold`},D={class:`glass-card rounded-[15px] p-6`},O={key:0,class:`grid grid-cols-2 gap-4 text-sm`},Ee={class:`text-content-primary dark:text-content-primary font-semibold`},De={class:`text-content-primary dark:text-content-primary font-semibold`},Oe={class:`text-content-primary dark:text-content-primary font-semibold`},ke={class:`text-content-primary dark:text-content-primary font-semibold`},Ae={class:`grid grid-cols-1 lg:grid-cols-2 gap-6`},je={class:`glass-card rounded-[15px] p-6`},Me={class:`relative h-48`},Ne={key:0,class:`grid grid-cols-3 gap-4 text-sm mt-4`},Pe={class:`text-center`},Fe={class:`text-content-primary dark:text-content-primary font-semibold`},Ie={class:`text-center`},Le={class:`font-semibold text-accent-red`},Re={class:`text-center`},ze={class:`font-semibold text-accent-green`},Be={class:`glass-card rounded-[15px] p-6`},Ve={key:0,class:`space-y-4`},He={class:`grid grid-cols-2 gap-4 text-sm`},Ue={class:`text-content-primary dark:text-content-primary font-semibold`},We={class:`text-content-primary dark:text-content-primary font-semibold`},Ge={class:`text-content-primary dark:text-content-primary font-semibold`},Ke={class:`text-content-primary dark:text-content-primary font-semibold`},qe={key:0,class:`pt-4 border-t border-stroke-subtle dark:border-stroke/10`},Je={class:`grid grid-cols-2 gap-2 text-sm`},k={class:`text-content-secondary dark:text-content-muted`},Ye={class:`text-content-primary dark:text-content-primary font-semibold ml-1`},Xe={class:`glass-card rounded-[15px] p-6`},Ze={key:0,class:`overflow-x-auto`},Qe={class:`w-full text-sm`},$e={class:`text-content-secondary dark:text-content-primary/80 py-2 transition-all duration-300`},et={class:`text-content-primary dark:text-content-primary font-semibold py-2 transition-all duration-300`},tt={class:`text-center text-secondary py-2 transition-all duration-300`},nt={class:`text-center text-accent-green py-2 transition-all duration-300`},rt={class:`text-right text-content-secondary dark:text-content-primary/80 py-2 transition-all duration-300`},it={key:0,class:`mt-4 text-center text-content-secondary dark:text-content-muted text-sm transition-all duration-300`},at={key:1,class:`text-center text-content-secondary dark:text-content-muted py-8`},A=b(ee({name:`SystemStatsView`,__name:`SystemStats`,setup(ee){C.register(pe,se,ce,he,de,ue,oe,ge,_e,ie,me,ae,le,fe);let{theme:b}=ne(),A=()=>{let e=document.documentElement.classList.contains(`dark`);return{labelColor:e?`rgba(255, 255, 255, 0.5)`:`rgba(0, 0, 0, 0.5)`,textColor:e?`rgba(255, 255, 255, 0.8)`:`rgba(0, 0, 0, 0.8)`}},j={cpu:`#FFC246`,memory:`#A5E5B6`,disk:`#FB787B`,free:`#A5E5B6`,uptime:`#EBA0FC`},M=c(null),N=c(null),P=c([]),F=c(null),I=c({cpuChart:!0,memoryChart:!0,diskChart:!1,processChart:!0}),L=c(null),R=c(null),z=c(`Connecting...`),B=c(`Connecting...`),V=c(null),H=c(null),U=c(null),W=c(null),G=c(null),K=m(()=>M.value?{cpuUsage:M.value.cpu.usage_percent,memoryUsage:M.value.memory.usage_percent,diskUsage:M.value.disk.usage_percent,uptime:M.value.system.uptime}:{cpuUsage:0,memoryUsage:0,diskUsage:0,uptime:0}),q=m(()=>P.value.length===0?{cpu:[],memory:[],disk:[],network:[]}:{cpu:P.value.map(e=>e.cpu.usage_percent),memory:P.value.map(e=>e.memory.usage_percent),disk:P.value.map(e=>e.disk.usage_percent),network:P.value.map(e=>e.network.bytes_recv/1024/1024)}),J=m(()=>{let e=P.value.length;if(e<2)return``;let t=e*5;return t<120?`last ${t}s`:`last ${Math.round(t/60)}m`}),ot=e=>{let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60);return t>0?`${t}d ${n}h ${r}m`:n>0?`${n}h ${r}m`:`${r}m`},Y=async()=>{z.value=`Connecting...`,B.value=`Connecting...`;try{let e=await S(`/hardware_stats`,void 0,{onPhaseChange:e=>{let t=e===`receiving`?`Receiving data...`:`Connecting...`;z.value=t,B.value=t}});if(e?.success&&e.data){let t=e.data;M.value=t,P.value.push(t),P.value.length>20&&P.value.shift(),L.value=null,R.value=null,await s(),Z()}else L.value=`No data in server response`,R.value=`No data in server response`}catch(e){let t=e instanceof Error?e.message:`Failed to load data`;L.value=t,R.value=t}finally{I.value.cpuChart=!1,I.value.memoryChart=!1}},st=async()=>{try{let e=await S(`/hardware_processes`);e?.success&&e.data&&(F.value=N.value,N.value=e.data)}catch(e){console.error(`Failed to fetch process stats:`,e)}finally{I.value.processChart=!1}},X=(e,t)=>{if(!F.value)return!1;let n=F.value.processes.find(t=>t.pid===e.pid);return n?n[t]!==e[t]:!0},ct=()=>{Y(),st()},Z=()=>{M.value&&(lt(),ut(),dt())},lt=()=>{if(!U.value||!M.value){I.value.cpuChart=!1;return}let e=U.value.getContext(`2d`);if(!e){I.value.cpuChart=!1;return}let t=M.value.cpu.usage_percent,n=100-t;if(V.value)try{V.value.data.datasets[0].data=[t,n],V.value.update(`none`);return}catch(e){console.warn(`Failed to update CPU chart, recreating...`,e),V.value.destroy(),V.value=null}let r=j.cpu,a=A(),o=document.documentElement.classList.contains(`dark`),s=o?`rgba(255, 255, 255, 0.1)`:`rgba(0, 0, 0, 0.1)`,c=o?`rgba(255, 255, 255, 0.2)`:`rgba(0, 0, 0, 0.2)`;try{V.value=i(new C(e,{type:`doughnut`,data:{labels:[`Used`,`Available`],datasets:[{data:[t,n],backgroundColor:[r,s],borderColor:[r,c],borderWidth:2}]},options:{responsive:!0,maintainAspectRatio:!1,cutout:`70%`,animation:{animateRotate:!1,animateScale:!1,duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){return`${e.label}: ${e.parsed.toFixed(1)}%`}}}}},plugins:[{id:`centerText`,beforeDraw:function(e){let t=e.ctx;t.save();let n=e.data.datasets[0].data[0],i=(e.chartArea.left+e.chartArea.right)/2,o=(e.chartArea.top+e.chartArea.bottom)/2;t.textAlign=`center`,t.textBaseline=`middle`,t.fillStyle=r,t.font=`bold 18px sans-serif`,t.fillText(`${n.toFixed(1)}%`,i,o-5),t.fillStyle=a.labelColor,t.font=`10px sans-serif`,t.fillText(`CPU`,i,o+12),t.restore()}}]})),L.value=null,I.value.cpuChart=!1}catch(e){console.error(`Error creating CPU chart:`,e),L.value=`Failed to create CPU chart`,I.value.cpuChart=!1}},ut=()=>{if(!W.value||!M.value){I.value.memoryChart=!1;return}let e=W.value.getContext(`2d`);if(!e){I.value.memoryChart=!1;return}let t=M.value.memory.usage_percent,n=100-t;if(H.value)try{H.value.data.datasets[0].data=[t,n],H.value.update(`none`);return}catch(e){console.warn(`Failed to update Memory chart, recreating...`,e),H.value.destroy(),H.value=null}let r=j.memory,a=A(),o=document.documentElement.classList.contains(`dark`),s=o?`rgba(255, 255, 255, 0.1)`:`rgba(0, 0, 0, 0.1)`,c=o?`rgba(255, 255, 255, 0.2)`:`rgba(0, 0, 0, 0.2)`;try{H.value=i(new C(e,{type:`doughnut`,data:{labels:[`Used`,`Available`],datasets:[{data:[t,n],backgroundColor:[r,s],borderColor:[r,c],borderWidth:2}]},options:{responsive:!0,maintainAspectRatio:!1,cutout:`70%`,animation:{animateRotate:!1,animateScale:!1,duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){return`${e.label}: ${e.parsed.toFixed(1)}%`}}}}},plugins:[{id:`centerText`,beforeDraw:function(e){let t=e.ctx;t.save();let n=e.data.datasets[0].data[0],i=(e.chartArea.left+e.chartArea.right)/2,o=(e.chartArea.top+e.chartArea.bottom)/2;t.textAlign=`center`,t.textBaseline=`middle`,t.fillStyle=r,t.font=`bold 18px sans-serif`,t.fillText(`${n.toFixed(1)}%`,i,o-5),t.fillStyle=a.labelColor,t.font=`10px sans-serif`,t.fillText(`Memory`,i,o+12),t.restore()}}]})),R.value=null,I.value.memoryChart=!1}catch(e){console.error(`Error creating Memory chart:`,e),R.value=`Failed to create Memory chart`,I.value.memoryChart=!1}},dt=()=>{if(!G.value||!M.value)return;let t=A().textColor;try{y(()=>import(`./plotly.min-BmxIBpZZ.js`).then(t=>e(t.t(),1)).then(e=>{let n=e.default||e,r=M.value.disk,i=[{type:`pie`,labels:[`Used`,`Free`],values:[r.used,r.free],marker:{colors:[j.disk,j.free]},hovertemplate:`<b>%{label}</b><br>Size: %{value}<br>Percentage: %{percent}<extra></extra>`,textinfo:`label+percent`,textposition:`auto`,hole:.4}],a={title:{text:``,font:{color:t}},paper_bgcolor:`rgba(0,0,0,0)`,plot_bgcolor:`rgba(0,0,0,0)`,font:{color:t,size:11},margin:{t:20,b:20,l:20,r:20},showlegend:!0,legend:{orientation:`h`,x:0,y:-.2,font:{color:t,size:10}}};n.newPlot(G.value,i,a,{responsive:!0,displayModeBar:!1,staticPlot:!1})}),__vite__mapDeps([0,1]))}catch(e){console.error(`Error creating disk chart:`,e)}},Q=()=>{try{if(V.value&&=(V.value.destroy(),null),H.value&&=(H.value.destroy(),null),G.value)try{y(()=>import(`./plotly.min-BmxIBpZZ.js`).then(t=>e(t.t(),1)).then(e=>{let t=e?.default||e;t?.purge&&t.purge(G.value)}),__vite__mapDeps([0,1])).catch(()=>{})}catch{}}catch(e){console.error(`Error destroying charts:`,e)}};o(b,()=>{Q(),s(()=>Z())});let $=()=>{setTimeout(()=>{a(V.value)?.resize(),a(H.value)?.resize();try{y(()=>import(`./plotly.min-BmxIBpZZ.js`).then(t=>e(t.t(),1)).then(e=>{let t=e?.default||e;t?.Plots&&t.Plots.resize(G.value)}),__vite__mapDeps([0,1])).catch(()=>{})}catch{}},100)};return re(ct,{intervalMs:5e3,immediate:!0}),r(async()=>{await s(),window.addEventListener(`resize`,$)}),te(()=>{window.removeEventListener(`resize`,$),Q()}),(e,r)=>(u(),_(`div`,ve,[r[22]||=g(`div`,{class:`flex justify-between items-center`},[g(`h2`,{class:`text-2xl font-bold text-content-primary dark:text-content-primary`},` System Statistics `),g(`div`,{class:`text-content-secondary dark:text-content-muted text-sm`},` Updates every 5 seconds `)],-1),g(`div`,ye,[f(T,{title:`CPU Usage`,value:`${K.value.cpuUsage.toFixed(1)}%`,color:j.cpu,data:q.value.cpu,"min-y":0,"max-y":100,subtitle:J.value},null,8,[`value`,`color`,`data`,`subtitle`]),f(T,{title:`Memory Usage`,value:`${K.value.memoryUsage.toFixed(1)}%`,color:j.memory,data:q.value.memory,"min-y":0,"max-y":100,subtitle:J.value},null,8,[`value`,`color`,`data`,`subtitle`]),f(T,{title:`Disk Usage`,value:`${K.value.diskUsage.toFixed(1)}%`,color:j.disk,data:q.value.disk,"min-y":0,"max-y":100,subtitle:J.value},null,8,[`value`,`color`,`data`,`subtitle`]),f(T,{title:`Uptime`,value:ot(K.value.uptime),color:j.uptime,data:[],"show-chart":!1},null,8,[`value`,`color`])]),g(`div`,be,[g(`div`,xe,[r[4]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-xl font-semibold mb-4`},` CPU Performance `,-1),f(w,{class:`h-32 mb-4`,"is-loading":I.value.cpuChart,error:L.value,status:z.value,onRetry:Y},{default:t(()=>[g(`canvas`,{ref_key:`cpuCanvasRef`,ref:U,class:`w-full h-full`},null,512)]),_:1},8,[`is-loading`,`error`,`status`]),M.value?(u(),_(`div`,Se,[g(`div`,null,[r[0]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`CPU Count`,-1),g(`div`,Ce,n(M.value.cpu.count)+` cores `,1)]),g(`div`,null,[r[1]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Frequency`,-1),g(`div`,we,n(M.value.cpu.frequency.toFixed(0))+` MHz `,1)]),g(`div`,null,[r[2]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Load (1m)`,-1),g(`div`,Te,n(M.value.cpu.load_avg[`1min`].toFixed(2)),1)]),g(`div`,null,[r[3]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Load (5m)`,-1),g(`div`,E,n(M.value.cpu.load_avg[`5min`].toFixed(2)),1)])])):d(``,!0)]),g(`div`,D,[r[9]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-xl font-semibold mb-4`},` Memory Usage `,-1),f(w,{class:`h-32 mb-4`,"is-loading":I.value.memoryChart,error:R.value,status:B.value,onRetry:Y},{default:t(()=>[g(`canvas`,{ref_key:`memoryCanvasRef`,ref:W,class:`w-full h-full`},null,512)]),_:1},8,[`is-loading`,`error`,`status`]),M.value?(u(),_(`div`,O,[g(`div`,null,[r[5]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Total`,-1),g(`div`,Ee,n(p(x)(M.value.memory.total)),1)]),g(`div`,null,[r[6]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Used`,-1),g(`div`,De,n(p(x)(M.value.memory.used)),1)]),g(`div`,null,[r[7]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Available`,-1),g(`div`,Oe,n(p(x)(M.value.memory.available)),1)]),g(`div`,null,[r[8]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Usage`,-1),g(`div`,ke,n(M.value.memory.usage_percent.toFixed(1))+`% `,1)])])):d(``,!0)])]),g(`div`,Ae,[g(`div`,je,[r[13]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-xl font-semibold mb-4`},` Storage Usage `,-1),g(`div`,Me,[g(`div`,{ref_key:`diskCanvasRef`,ref:G,class:`w-full h-full`},null,512)]),M.value?(u(),_(`div`,Ne,[g(`div`,Pe,[r[10]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Total`,-1),g(`div`,Fe,n(p(x)(M.value.disk.total)),1)]),g(`div`,Ie,[r[11]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Used`,-1),g(`div`,Le,n(p(x)(M.value.disk.used)),1)]),g(`div`,Re,[r[12]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Free`,-1),g(`div`,ze,n(p(x)(M.value.disk.free)),1)])])):d(``,!0)]),g(`div`,Be,[r[19]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-xl font-semibold mb-4`},` Network Statistics `,-1),M.value?(u(),_(`div`,Ve,[g(`div`,He,[g(`div`,null,[r[14]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Bytes Sent`,-1),g(`div`,Ue,n(p(x)(M.value.network.bytes_sent)),1)]),g(`div`,null,[r[15]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Bytes Received`,-1),g(`div`,We,n(p(x)(M.value.network.bytes_recv)),1)]),g(`div`,null,[r[16]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Packets Sent`,-1),g(`div`,Ge,n(M.value.network.packets_sent.toLocaleString()),1)]),g(`div`,null,[r[17]||=g(`div`,{class:`text-content-secondary dark:text-content-muted`},`Packets Received`,-1),g(`div`,Ke,n(M.value.network.packets_recv.toLocaleString()),1)])]),M.value.temperatures&&Object.keys(M.value.temperatures).length>0?(u(),_(`div`,qe,[r[18]||=g(`div`,{class:`text-content-secondary dark:text-content-muted mb-2`},` System Temperatures `,-1),g(`div`,Je,[(u(!0),_(h,null,l(M.value.temperatures,(e,t)=>(u(),_(`div`,{key:t},[g(`span`,k,n(t)+`:`,1),g(`span`,Ye,n(e.toFixed(1))+`°C`,1)]))),128))])])):d(``,!0)])):d(``,!0)])]),g(`div`,Xe,[r[21]||=g(`h3`,{class:`text-content-primary dark:text-content-primary text-xl font-semibold mb-4`},` Top Processes `,-1),N.value?.processes&&N.value.processes.length>0?(u(),_(`div`,Ze,[g(`table`,Qe,[r[20]||=g(`thead`,null,[g(`tr`,{class:`border-b border-stroke-subtle dark:border-stroke/10`},[g(`th`,{class:`text-left text-content-secondary dark:text-content-muted py-2`},`PID`),g(`th`,{class:`text-left text-content-secondary dark:text-content-muted py-2`},`Name`),g(`th`,{class:`text-center text-content-secondary dark:text-content-muted py-2`},`CPU %`),g(`th`,{class:`text-center text-content-secondary dark:text-content-muted py-2`},` Memory % `),g(`th`,{class:`text-right text-content-secondary dark:text-content-muted py-2`},`Memory`)])],-1),g(`tbody`,null,[(u(!0),_(h,null,l(N.value.processes.slice(0,10),e=>(u(),_(`tr`,{key:e.pid,class:`border-b border-stroke-subtle dark:border-white/5 process-row`},[g(`td`,$e,n(e.pid),1),g(`td`,et,n(e.name),1),g(`td`,tt,[g(`span`,{class:v([`cpu-value`,{"value-updated":X(e,`cpu_percent`)}])},n(e.cpu_percent.toFixed(1))+`% `,3)]),g(`td`,nt,[g(`span`,{class:v([`memory-value`,{"value-updated":X(e,`memory_percent`)}])},n(e.memory_percent.toFixed(1))+`% `,3)]),g(`td`,rt,[g(`span`,{class:v({"value-updated":X(e,`memory_mb`)})},n(e.memory_mb.toFixed(1))+` MB `,3)])]))),128))])]),N.value.total_processes?(u(),_(`div`,it,` Showing top 10 of `+n(N.value.total_processes)+` total processes `,1)):d(``,!0)])):I.value.processChart?d(``,!0):(u(),_(`div`,at,` No process data available `))])]))}}),[[`__scopeId`,`data-v-d0fbc86b`]]);export{A as default}; |