UNPKG

p3x-redis-ui-material

Version:

💿 P3X Redis UI triple frontend — Angular + React/MUI + Vue/Vuetify with 54 languages, 7 themes, Socket.IO, desktop notifications, and full feature parity

4 lines • 13.8 kB
import{A as e,C as t,D as n,E as r,G as i,J as a,K as o,M as s,T as c,X as l,Yt as u,ht as d,it as f,k as p,nt as ee,t as te,w as m,y as h,z as ne}from"./i18n.store-B4krJCIS.js";import{t as g,x as _}from"./_plugin-vue_export-helper-67n0yneU.js";import{c as v,m as y,t as b}from"./VList-CldQCa9W.js";import{t as x}from"./VTextField-C3PCrz6s.js";import{t as re}from"./redis-state.store-DPDs81ZS.js";import{t as ie}from"./common.store-C_dWn4yG.js";import{i as S,r as ae}from"./socket.service-B85kYQEM.js";import{i as C}from"./index-CBO402jT.js";import{t as w}from"./P3xrAccordion-5b82nQm5.js";var oe={key:0,style:{padding:`12px 16px`,opacity:`0.6`}},se={key:1,style:{"white-space":`pre-wrap`,"font-family":`'Roboto Mono', monospace`,"font-size":`13px`,padding:`12px 16px`,margin:`0`}},ce={key:0,class:`p3xr-analysis-loading`},le={key:1,class:`p3xr-analysis-loading`},ue={class:`p3xr-pair-row`},de={class:`p3xr-pair-label`},fe={class:`p3xr-pair-value p3xr-mono`},pe={class:`p3xr-pair-row`},me={class:`p3xr-pair-label`},he={class:`p3xr-pair-value`},ge={class:`p3xr-pair-row`},_e={class:`p3xr-pair-label`},ve={class:`p3xr-pair-value`},ye={class:`p3xr-pair-row`},be={class:`p3xr-pair-label`},xe={class:`p3xr-pair-value p3xr-mono`},Se={class:`p3xr-pair-row`},Ce={class:`p3xr-pair-label`},we={class:`p3xr-pair-value p3xr-mono`},Te={class:`p3xr-pair-row`},Ee={class:`p3xr-pair-label`},De={class:`p3xr-pair-value p3xr-mono`},Oe={class:`p3xr-pair-row`},ke={class:`p3xr-pair-label`},Ae={class:`p3xr-pair-value p3xr-mono`},je={class:`p3xr-pair-row`},Me={class:`p3xr-pair-label`},Ne={class:`p3xr-pair-value p3xr-mono`},Pe={class:`p3xr-pair-row`},Fe={class:`p3xr-pair-label`},Ie={class:`p3xr-pair-value p3xr-mono`},Le={class:`p3xr-pair-row`},Re={class:`p3xr-pair-label`},ze={class:`p3xr-pair-value p3xr-mono`},Be={class:`p3xr-pair-row`},Ve={class:`p3xr-pair-label`},He={class:`p3xr-pair-value p3xr-mono`},Ue={class:`p3xr-pair-row`},We={class:`p3xr-pair-label`},Ge={style:{"font-weight":`500`}},Ke={class:`p3xr-analysis-sub`},qe={class:`p3xr-pair-value p3xr-mono`},Je={class:`p3xr-pair-row`},Ye={class:`p3xr-pair-label`},Xe={style:{opacity:`0.4`,"margin-right":`8px`}},Ze={class:`p3xr-mono`,style:{"font-size":`13px`}},Qe={class:`p3xr-analysis-sub`},$e={class:`p3xr-pair-value p3xr-mono`},et={class:`p3xr-pair-row`},tt={class:`p3xr-pair-label`},nt={class:`p3xr-pair-value p3xr-mono`},rt={class:`p3xr-pair-row`},it={class:`p3xr-pair-label`},at={class:`p3xr-pair-value p3xr-mono`},ot={class:`p3xr-pair-row`},st={class:`p3xr-pair-label`},ct={class:`p3xr-pair-value p3xr-mono`},T=g(s({__name:`MemoryAnalysisPage`,setup(s){let g=te(),T=re(),E=ie(),D=t(()=>g.strings),O=t(()=>D.value?.page?.analysis||{}),k=d(null),A=d(!1),j=d(20),M=d(5e3),N=d([]),P=d(null),F=d(!1),I=d(localStorage.getItem(`p3xr-monitor-auto-doctor`)===`true`),L=null,R=d(),z=d(),B=d(),V=t(()=>T.connection?.name),H=null,U=null,W,G=[];function K(e){return e==null||isNaN(e)?`-`:e<1024?e+` B`:e<1024*1024?(e/1024).toFixed(1)+` KB`:e<1024*1024*1024?(e/(1024*1024)).toFixed(1)+` MB`:(e/(1024*1024*1024)).toFixed(2)+` GB`}function q(e){return!e||e<=0?`-`:e<60?e+`s`:e<3600?Math.floor(e/60)+`m `+e%60+`s`:e<86400?Math.floor(e/3600)+`h `+Math.floor(e%3600/60)+`m`:Math.floor(e/86400)+`d `+Math.floor(e%86400/3600)+`h`}function J(e,t){let n=new Blob([e],{type:`text/plain`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t,i.click(),URL.revokeObjectURL(r)}function lt(){let e=document.body.classList.contains(`p3xr-theme-dark`),t=getComputedStyle(document.body),n=t.getPropertyValue(`--p3xr-btn-primary-bg`).trim(),r=t.getPropertyValue(`--p3xr-btn-accent-bg`).trim(),i=t.getPropertyValue(`--p3xr-btn-warn-bg`).trim();return{primary:n||(e?`#90caf9`:`#1976d2`),accent:r||(e?`#ce93d8`:`#9c27b0`),warn:i||(e?`#ef9a9a`:`#f44336`),text:e?`rgba(255,255,255,0.87)`:`rgba(0,0,0,0.87)`,grid:e?`rgba(255,255,255,0.08)`:`rgba(0,0,0,0.08)`,isDark:e}}function ut(e){let t=e.isDark;return[e.primary,e.accent,e.warn,t?`#ffb74d`:`#ff9800`,t?`#81c784`:`#4caf50`,t?`#4dd0e1`:`#00bcd4`,t?`#a1887f`:`#795548`,t?`#90a4ae`:`#607d8b`]}function dt(e,t){if(!e||t.length===0||e.offsetWidth<=0)return;e.innerHTML=``;let n=lt(),r=ut(n),i=document.createElement(`canvas`),a=window.devicePixelRatio||1,o=e.offsetWidth||500,s=o-80-8,c=s-128,l=8+t.length*28+8;i.width=o*a,i.height=l*a,i.style.width=o+`px`,i.style.height=l+`px`;let u=i.getContext(`2d`);u.scale(a,a);let d=Math.max(...t.map(e=>e.value),1);t.forEach((e,t)=>{let i=8+t*28;u.fillStyle=n.text,u.font=`12px Roboto, sans-serif`,u.textAlign=`right`,u.textBaseline=`middle`,u.fillText(e.label.length>15?e.label.substring(0,14)+`…`:e.label,120,i+24/2),u.fillStyle=n.grid,u.fillRect(128,i,c,24);let a=e.value/d*c;u.fillStyle=r[t%r.length],u.fillRect(128,i,a,24),u.fillStyle=n.text,u.font=`11px Roboto Mono, monospace`,u.textAlign=`left`,u.fillText(K(e.value),s+8,i+24/2)}),e.appendChild(i)}function Y(){dt(R.value,N.value.map(e=>({label:e.type,value:e.bytes}))),dt(z.value,(k.value?.prefixMemory||[]).slice(0,20).map(e=>({label:e.prefix,value:e.totalBytes})))}async function X(){if(!A.value){A.value=!0;try{k.value=(await S({action:`memory/analysis`,payload:{topN:j.value,maxScanKeys:M.value}})).data,N.value=Object.keys(k.value.typeDistribution).map(e=>({type:e,count:k.value.typeDistribution[e],bytes:k.value.typeMemory[e]||0})).sort((e,t)=>t.bytes-e.bytes),A.value=!1,ne(()=>setTimeout(()=>Y(),100))}catch(e){A.value=!1,E.generalHandleError(e)}}}async function Z(){F.value=!0;try{P.value=(await S({action:`memory/doctor`})).data.text}catch(e){E.generalHandleError(e)}finally{F.value=!1}}function ft(){I.value=!I.value,localStorage.setItem(`p3xr-monitor-auto-doctor`,String(I.value)),I.value?(Z(),pt()):Q()}function pt(){Q(),L=setInterval(()=>Z(),2e3)}function Q(){L&&=(clearInterval(L),null)}function mt(){P.value&&J(P.value,`${V.value}-memory-doctor.txt`)}function ht(){if(!k.value)return;let e=O.value;J([`${e.keysScanned}: ${k.value.totalScanned} / ${k.value.dbSize}`,`${e.topN}: ${j.value}`,`${e.maxScanKeys}: ${M.value}`].join(` `),`${V.value}-analysis-overview.txt`)}function gt(){if(!k.value)return;let e=O.value,t=k.value.memoryInfo;J([`${e.totalMemory}: ${t.usedHuman}`,`${e.rssMemory}: ${t.rssHuman}`,`${e.peakMemory}: ${t.peakHuman}`,`${e.overheadMemory}: ${K(t.overhead)}`,`${e.datasetMemory}: ${K(t.dataset)}`,`${e.luaMemory}: ${K(t.lua)}`,`${e.fragmentation}: ${t.fragRatio}x`,`${e.allocator}: ${t.allocator}`].join(` `),`${V.value}-memory-breakdown.txt`)}function _t(){if(!k.value)return;let e=O.value,t=k.value.expirationOverview;J([`${e.withTTL}: ${t.withTTL}`,`${e.persistent}: ${t.persistent}`,`${e.avgTTL}: ${q(t.avgTTL)}`].join(` `),`${V.value}-expiration.txt`)}function $(e,t){let n=e?.querySelector(`canvas`);if(!n)return;let r=document.createElement(`canvas`);r.width=n.width,r.height=n.height;let i=r.getContext(`2d`),a=document.body.classList.contains(`p3xr-theme-dark`);i.fillStyle=getComputedStyle(document.body).getPropertyValue(`--p3xr-body-bg`).trim()||(a?`#1e1e1e`:`#ffffff`),i.fillRect(0,0,r.width,r.height),i.drawImage(n,0,0);let o=r.toDataURL(`image/png`),s=document.createElement(`a`);s.href=o,s.download=`${V.value}-${t}.png`,s.click()}return ee([B,R,z],()=>{U?.disconnect(),U=null;let e=[B.value,R.value,z.value].filter(Boolean);e.length>0&&(U=new ResizeObserver(()=>{clearTimeout(W),W=setTimeout(()=>{k.value&&Y()},150)}),e.forEach(e=>U.observe(e)))}),i(()=>{I.value&&pt(),T.connection&&X(),G.push(ae(`connections`,()=>{k.value=null,T.connection&&X()})),H=new MutationObserver(()=>{k.value&&setTimeout(()=>Y(),100)}),H.observe(document.body,{attributes:!0,attributeFilter:[`class`]})}),o(()=>{Q(),H?.disconnect(),U?.disconnect(),G.forEach(e=>e())}),(t,i)=>(a(),n(h,null,[e(w,{title:O.value.memoryDoctor,"accordion-key":`analysis-doctor`},{actions:f(()=>[e(C,{onClick:i[0]||=e=>{ft(),e.stopPropagation()},label:D.value?.label?.autoRefresh,icon:I.value?`mdi-checkbox-marked`:`mdi-checkbox-blank-outline`},null,8,[`label`,`icon`]),I.value?r(``,!0):(a(),c(C,{key:0,onClick:i[1]||=e=>{Z(),e.stopPropagation()},label:F.value?D.value?.label?.loading:D.value?.intention?.refresh,icon:F.value?`mdi-timer-sand`:`mdi-refresh`,disabled:F.value},null,8,[`label`,`icon`,`disabled`])),e(C,{onClick:i[2]||=e=>{mt(),e.stopPropagation()},label:D.value?.intention?.export,icon:`mdi-download`},null,8,[`label`])]),default:f(()=>[P.value?(a(),n(`pre`,se,u(P.value),1)):(a(),n(`div`,oe,u(O.value.doctorNoData),1))]),_:1},8,[`title`]),i[17]||=m(`br`,null,null,-1),A.value&&!k.value?(a(),n(`div`,ce,[e(_,null,{default:f(()=>[...i[11]||=[p(`mdi-timer-sand`,-1)]]),_:1}),m(`span`,null,u(O.value.running),1)])):r(``,!0),!A.value&&!k.value?(a(),n(`div`,le,[e(_,null,{default:f(()=>[...i[12]||=[p(`mdi-chart-bar`,-1)]]),_:1}),m(`span`,null,u(O.value.noData),1)])):r(``,!0),k.value?(a(),n(`div`,{key:2,ref_key:`rootEl`,ref:B},[e(w,{title:O.value.title,"accordion-key":`analysis-controls`},{actions:f(()=>[e(C,{onClick:i[3]||=e=>{X(),e.stopPropagation()},label:A.value?O.value.running:O.value.runAnalysis,icon:A.value?`mdi-timer-sand`:`mdi-play`,disabled:A.value},null,8,[`label`,`icon`,`disabled`]),e(C,{onClick:i[4]||=e=>{ht(),e.stopPropagation()},label:D.value?.intention?.export,icon:`mdi-download`},null,8,[`label`])]),default:f(()=>[e(b,{density:`compact`,class:`pa-0`},{default:f(()=>[e(v,null,{default:f(()=>[m(`div`,ue,[m(`div`,de,u(O.value.keysScanned),1),m(`div`,fe,u(k.value.totalScanned?.toLocaleString())+` / `+u(k.value.dbSize?.toLocaleString()),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,pe,[m(`div`,me,u(O.value.topN),1),m(`div`,he,[e(x,{modelValue:j.value,"onUpdate:modelValue":i[5]||=e=>j.value=e,modelModifiers:{number:!0},type:`number`,min:`5`,max:`100`,"hide-details":``,style:{"max-width":`100px`}},null,8,[`modelValue`])])])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,ge,[m(`div`,_e,u(O.value.maxScanKeys),1),m(`div`,ve,[e(x,{modelValue:M.value,"onUpdate:modelValue":i[6]||=e=>M.value=e,modelModifiers:{number:!0},type:`number`,min:`100`,max:`100000`,step:`1000`,"hide-details":``,style:{"max-width":`120px`}},null,8,[`modelValue`])])])]),_:1})]),_:1})]),_:1},8,[`title`]),i[13]||=m(`br`,null,null,-1),e(w,{title:O.value.memoryBreakdown,"accordion-key":`analysis-memory-info`},{actions:f(()=>[e(C,{onClick:i[7]||=e=>{gt(),e.stopPropagation()},label:D.value?.intention?.export,icon:`mdi-download`},null,8,[`label`])]),default:f(()=>[e(b,{density:`compact`,class:`pa-0`},{default:f(()=>[e(v,null,{default:f(()=>[m(`div`,ye,[m(`div`,be,u(O.value.totalMemory),1),m(`div`,xe,u(k.value.memoryInfo.usedHuman),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,Se,[m(`div`,Ce,u(O.value.rssMemory),1),m(`div`,we,u(k.value.memoryInfo.rssHuman),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,Te,[m(`div`,Ee,u(O.value.peakMemory),1),m(`div`,De,u(k.value.memoryInfo.peakHuman),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,Oe,[m(`div`,ke,u(O.value.overheadMemory),1),m(`div`,Ae,u(K(k.value.memoryInfo.overhead)),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,je,[m(`div`,Me,u(O.value.datasetMemory),1),m(`div`,Ne,u(K(k.value.memoryInfo.dataset)),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,Pe,[m(`div`,Fe,u(O.value.luaMemory),1),m(`div`,Ie,u(K(k.value.memoryInfo.lua)),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,Le,[m(`div`,Re,u(O.value.fragmentation),1),m(`div`,ze,u(k.value.memoryInfo.fragRatio)+`x`,1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,Be,[m(`div`,Ve,u(O.value.allocator),1),m(`div`,He,u(k.value.memoryInfo.allocator),1)])]),_:1})]),_:1})]),_:1},8,[`title`]),i[14]||=m(`br`,null,null,-1),e(w,{title:O.value.typeDistribution,"accordion-key":`analysis-type-dist`},{actions:f(()=>[e(C,{onClick:i[8]||=e=>{$(R.value,`type-distribution`),e.stopPropagation()},label:D.value?.intention?.export,icon:`mdi-download`},null,8,[`label`])]),default:f(()=>[m(`div`,{ref_key:`typeChartEl`,ref:R,class:`p3xr-analysis-chart`},null,512),e(b,{density:`compact`,class:`pa-0`},{default:f(()=>[(a(!0),n(h,null,l(N.value,t=>(a(),n(h,{key:t.type},[e(v,null,{default:f(()=>[m(`div`,Ue,[m(`div`,We,[m(`span`,Ge,u(t.type),1),m(`span`,Ke,u(t.count)+` keys`,1)]),m(`div`,qe,u(K(t.bytes)),1)])]),_:2},1024),e(y)],64))),128))]),_:1})]),_:1},8,[`title`]),i[15]||=m(`br`,null,null,-1),e(w,{title:O.value.prefixMemory,"accordion-key":`analysis-prefix-mem`},{actions:f(()=>[e(C,{onClick:i[9]||=e=>{$(z.value,`memory-by-prefix`),e.stopPropagation()},label:D.value?.intention?.export,icon:`mdi-download`},null,8,[`label`])]),default:f(()=>[m(`div`,{ref_key:`prefixChartEl`,ref:z,class:`p3xr-analysis-chart`},null,512),e(b,{density:`compact`,class:`pa-0`},{default:f(()=>[(a(!0),n(h,null,l(k.value.prefixMemory,(t,r)=>(a(),n(h,{key:t.prefix},[e(v,null,{default:f(()=>[m(`div`,Je,[m(`div`,Ye,[m(`span`,Xe,`#`+u(r+1),1),m(`span`,Ze,u(t.prefix),1),m(`span`,Qe,u(t.keyCount)+` keys`,1)]),m(`div`,$e,u(K(t.totalBytes)),1)])]),_:2},1024),e(y)],64))),128))]),_:1})]),_:1},8,[`title`]),i[16]||=m(`br`,null,null,-1),e(w,{title:O.value.expirationOverview,"accordion-key":`analysis-expiration`},{actions:f(()=>[e(C,{onClick:i[10]||=e=>{_t(),e.stopPropagation()},label:D.value?.intention?.export,icon:`mdi-download`},null,8,[`label`])]),default:f(()=>[e(b,{density:`compact`,class:`pa-0`},{default:f(()=>[e(v,null,{default:f(()=>[m(`div`,et,[m(`div`,tt,u(O.value.withTTL),1),m(`div`,nt,u(k.value.expirationOverview.withTTL?.toLocaleString()),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,rt,[m(`div`,it,u(O.value.persistent),1),m(`div`,at,u(k.value.expirationOverview.persistent?.toLocaleString()),1)])]),_:1}),e(y),e(v,null,{default:f(()=>[m(`div`,ot,[m(`div`,st,u(O.value.avgTTL),1),m(`div`,ct,u(q(k.value.expirationOverview.avgTTL)),1)])]),_:1})]),_:1})]),_:1},8,[`title`])],512)):r(``,!0)],64))}}),[[`__scopeId`,`data-v-ba32756c`]]);export{T as default};