@jonathanleelx/meddle 0.5.0-beta.14 → 0.5.0-beta.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/web/dist/assets/alert-DO7T3mut.js +1 -0
- package/web/dist/assets/arrow-right-DGB2MxsX.js +1 -0
- package/web/dist/assets/{body-diff-view-B-4XWmL6.js → body-diff-view-CO4FDdwK.js} +2 -2
- package/web/dist/assets/button-yArHqw81.js +1 -0
- package/web/dist/assets/check-ByTjANaY.js +1 -0
- package/web/dist/assets/{checkbox-DfpRw_5t.js → checkbox-Dd4_B7PJ.js} +1 -1
- package/web/dist/assets/chevron-down-vKjBY-BY.js +1 -0
- package/web/dist/assets/{circle-alert-Q8cZk9Rv.js → circle-alert-DAWy5HuM.js} +1 -1
- package/web/dist/assets/{circle-x-C9USji_R.js → circle-x-BjSs1hQK.js} +1 -1
- package/web/dist/assets/code-DAB_mRnu.js +1 -0
- package/web/dist/assets/{copy-BYjq1hdN.js → copy-qMUl4peN.js} +1 -1
- package/web/dist/assets/detail-panel-3Qo1aGrc.js +4 -0
- package/web/dist/assets/dist-BW-gQyc_.js +5 -0
- package/web/dist/assets/{dist-CEd_wnRC.js → dist-CjLkNKST.js} +1 -1
- package/web/dist/assets/{dist-C6eaYCUo.js → dist-CwP5Ad1_.js} +1 -1
- package/web/dist/assets/dist-CymFeFOA.js +1 -0
- package/web/dist/assets/{dist-DoE7uybN.js → dist-D2vbXHYx.js} +1 -1
- package/web/dist/assets/{dist-DWmDaXVN.js → dist-DGuRBXW6.js} +1 -1
- package/web/dist/assets/{es2015-DG46NGN7.js → es2015-BiaNLfVn.js} +1 -1
- package/web/dist/assets/{global-panel-shell-DZ4TKKlS.js → global-panel-shell-uD1rAdJu.js} +4 -4
- package/web/dist/assets/health-panel-BbfIoIlv.js +1 -0
- package/web/dist/assets/index-BYLl2Q6S.js +18 -0
- package/web/dist/assets/index-C-RXDbGt.css +2 -0
- package/web/dist/assets/mobile-proxy-panel-B4AbSF0h.js +8 -0
- package/web/dist/assets/mock-config-IWupj9Lm.js +1 -0
- package/web/dist/assets/mock-editor-panel-kCiocuZT.js +20 -0
- package/web/dist/assets/{monaco-editor-BQw_uavF.js → monaco-editor-DnP2y6oW.js} +2 -2
- package/web/dist/assets/{pencil-line-Cqe41E4h.js → pencil-line-jiAfwHPx.js} +1 -1
- package/web/dist/assets/plugin-code-editor-CHx7wKXJ.js +2 -0
- package/web/dist/assets/plugin-config-kDoUjUQX.js +1 -0
- package/web/dist/assets/plugin-generator-BhjalAD8.js +2 -0
- package/web/dist/assets/plugin-test-dialog-DM_tn7ZX.js +7 -0
- package/web/dist/assets/plus-BdrJey8J.js +1 -0
- package/web/dist/assets/{refresh-cw-CG3HaiQT.js → refresh-cw-DdzbeDXU.js} +1 -1
- package/web/dist/assets/rotate-ccw-_UaUgje4.js +1 -0
- package/web/dist/assets/route-preview-Du8Iq2qN.js +1 -0
- package/web/dist/assets/{rule-ai-assistant-panel-Crc13ODb.js → rule-ai-assistant-panel-DOu_JHOY.js} +2 -2
- package/web/dist/assets/rule-config-AiMHRZTk.js +15 -0
- package/web/dist/assets/rule-overview-panel-BkkI1pg1.js +1 -0
- package/web/dist/assets/{server-Cpj4KNwN.js → server-CktUTlNz.js} +1 -1
- package/web/dist/assets/settings-panel-DP_S8V4C.js +1 -0
- package/web/dist/assets/{shield-check-OqUmVLQt.js → shield-check-UHsTa1Dy.js} +1 -1
- package/web/dist/assets/smartphone-D5HBDIeh.js +1 -0
- package/web/dist/assets/switch-_QmVA6k1.js +1 -0
- package/web/dist/assets/{syntax-highlight-Dk0-ewLI.js → syntax-highlight-DF90eoRG.js} +1 -1
- package/web/dist/assets/{table-2-BR5e3z8m.js → table-2-BE3hfnr0.js} +1 -1
- package/web/dist/assets/table-BY-pIs96.js +1 -0
- package/web/dist/assets/tabs-DnFHv5gb.js +1 -0
- package/web/dist/assets/textarea-CQWqIFs-.js +1 -0
- package/web/dist/assets/{wand-sparkles-CJ7fSnom.js → wand-sparkles-B9ZnNs8E.js} +1 -1
- package/web/dist/assets/{wifi-CCLKyySQ.js → wifi-fTyrNPN8.js} +1 -1
- package/web/dist/assets/{zap-DR-xiUMe.js → zap-h2l6wVxY.js} +1 -1
- package/web/dist/index.html +14 -12
- package/web/dist/assets/alert-DCvlZAiv.js +0 -1
- package/web/dist/assets/arrow-right-B4Mrlj2-.js +0 -1
- package/web/dist/assets/button-BTToMaBW.js +0 -1
- package/web/dist/assets/chevron-down-CPngAx4M.js +0 -1
- package/web/dist/assets/chevron-right-V1DGIDbL.js +0 -1
- package/web/dist/assets/code-5_eJ_XpJ.js +0 -1
- package/web/dist/assets/code-fixer-BWFV7546.js +0 -20
- package/web/dist/assets/detail-panel-Mm27FyFh.js +0 -4
- package/web/dist/assets/dist-Blyulj4_.js +0 -1
- package/web/dist/assets/dist-C8RHq5At.js +0 -5
- package/web/dist/assets/dist-Ce4ujolc.js +0 -1
- package/web/dist/assets/file-system-access-_og-Tg9o.js +0 -1
- package/web/dist/assets/health-panel-DhLw8KKm.js +0 -1
- package/web/dist/assets/index-Cw0WJSVU.js +0 -18
- package/web/dist/assets/index-DlO3YLfJ.css +0 -2
- package/web/dist/assets/mobile-proxy-panel-rqw9ZZUP.js +0 -8
- package/web/dist/assets/mock-config-OWiFPvcg.js +0 -1
- package/web/dist/assets/mock-editor-panel-CeZYoHc3.js +0 -1
- package/web/dist/assets/plugin-code-editor-BXHzyirh.js +0 -2
- package/web/dist/assets/plugin-config-d4HeoImD.js +0 -1
- package/web/dist/assets/plugin-generator-DqQTPpcL.js +0 -2
- package/web/dist/assets/plugin-test-dialog-t0lJXL3D.js +0 -7
- package/web/dist/assets/plus-tVxSydJ8.js +0 -1
- package/web/dist/assets/rotate-ccw-CAYM6Vv0.js +0 -1
- package/web/dist/assets/route-preview-CPzLw9Ze.js +0 -1
- package/web/dist/assets/rule-config-LI7rxAJs.js +0 -15
- package/web/dist/assets/rule-overview-panel-Cq2mUmBQ.js +0 -1
- package/web/dist/assets/select-C6-okPSH.js +0 -1
- package/web/dist/assets/settings-panel-CmCxMJMm.js +0 -1
- package/web/dist/assets/smartphone-DKeDuJTU.js +0 -1
- package/web/dist/assets/switch-Bes_YiJu.js +0 -1
- package/web/dist/assets/table-nW7uQVcl.js +0 -1
- package/web/dist/assets/textarea-BSI0rnW6.js +0 -1
- /package/web/dist/assets/{ai-config-store-C8D_PUGV.js → ai-config-store-DQXVJVn_.js} +0 -0
- /package/web/dist/assets/{babel-DCr4VA1c.js → babel-DsprIpXZ.js} +0 -0
- /package/web/dist/assets/{clipboard-VhPXNN5m.js → clipboard-Dz6MgwV-.js} +0 -0
- /package/web/dist/assets/{dist-Bsv9ad5F.js → dist-DQDFV3o1.js} +0 -0
- /package/web/dist/assets/{estree-qO_m2Qaw.js → estree-BP7k0NIt.js} +0 -0
- /package/web/dist/assets/{html-VDGahtyk.js → html-6FIWbqxX.js} +0 -0
- /package/web/dist/assets/{postcss-BUm8EKMw.js → postcss-Dnf30fQU.js} +0 -0
- /package/web/dist/assets/{standalone-Bj8SSd8Q.js → standalone-CjxtLKw-.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,f as t,l as n,s as r,t as i,u as a}from"./button-yArHqw81.js";import"./dist-CwP5Ad1_.js";import{t as o}from"./circle-x-BjSs1hQK.js";import{n as s,t as c}from"./server-CktUTlNz.js";import{t as l}from"./refresh-cw-DdzbeDXU.js";import{t as ee}from"./shield-check-UHsTa1Dy.js";import{t as u}from"./wifi-fTyrNPN8.js";import{t as d}from"./switch-_QmVA6k1.js";import{$ as te,A as f,D as p,G as ne,J as m,K as h,O as g,T as _,U as v,W as y,X as b,Y as x,k as S,mt as re,q as C,xt as w,z as T}from"./index-BYLl2Q6S.js";import{n as E,r as D,t as O}from"./alert-DO7T3mut.js";import{a as k,i as A,n as j,o as M,r as N,t as P}from"./table-BY-pIs96.js";var F=n(`cpu`,[[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M17 20v2`,key:`1rnc9c`}],[`path`,{d:`M17 2v2`,key:`11trls`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M2 17h2`,key:`7oei6x`}],[`path`,{d:`M2 7h2`,key:`asdhe0`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`M20 17h2`,key:`1fpfkl`}],[`path`,{d:`M20 7h2`,key:`1o8tra`}],[`path`,{d:`M7 20v2`,key:`4gnj0m`}],[`path`,{d:`M7 2v2`,key:`1i4yhu`}],[`rect`,{x:`4`,y:`4`,width:`16`,height:`16`,rx:`2`,key:`1vbyd7`}],[`rect`,{x:`8`,y:`8`,width:`8`,height:`8`,rx:`1`,key:`z9xiuo`}]]),I=n(`gauge`,[[`path`,{d:`m12 14 4-4`,key:`9kzdfg`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`,key:`19p75a`}]]),L=n(`hard-drive`,[[`line`,{x1:`22`,x2:`2`,y1:`12`,y2:`12`,key:`1y58io`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}],[`line`,{x1:`6`,x2:`6.01`,y1:`16`,y2:`16`,key:`sgf278`}],[`line`,{x1:`10`,x2:`10.01`,y1:`16`,y2:`16`,key:`1l4acy`}]]),R=n(`network`,[[`rect`,{x:`16`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`4q2zg0`}],[`rect`,{x:`2`,y:`16`,width:`6`,height:`6`,rx:`1`,key:`8cvhb9`}],[`rect`,{x:`9`,y:`2`,width:`6`,height:`6`,rx:`1`,key:`1egb70`}],[`path`,{d:`M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3`,key:`1jsf9p`}],[`path`,{d:`M12 12V8`,key:`2874zd`}]]),z=t(a(),1),B=r(),V={ok:`正常`,degraded:`降级`,critical:`严重`},ie={cpu:`CPU`,rss:`RSS 内存`,connections:`连接数`,mitmServers:`MITM 服务`,eventLoopDelay:`事件循环延迟`,fds:`文件描述符`};function H(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.generatedAt==`number`&&typeof t.status==`string`&&typeof t.pid==`number`&&typeof t.uptimeSec==`number`&&!!t.memory&&!!t.cpu&&!!t.connections&&!!t.mitmServers&&Array.isArray(t.checks)}async function U(){let e=await fetch(`/api/health`,{cache:`no-store`});if(!e.ok)throw Error(`健康接口返回 ${e.status}`);let t=await e.json();if(!H(t))throw Error(`健康接口返回格式不正确`);return t}function W(e){if(!Number.isFinite(e))return`-`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=t[0];for(let e=1;e<t.length&&n>=1024;e+=1)n/=1024,r=t[e];return`${n>=10?n.toFixed(0):n.toFixed(1)} ${r}`}function G(e){if(!Number.isFinite(e)||e<0)return`-`;let t=Math.floor(e/86400),n=Math.floor(e%86400/3600),r=Math.floor(e%3600/60),i=Math.floor(e%60);return t>0?`${t}天 ${n}小时`:n>0?`${n}小时 ${r}分钟`:r>0?`${r}分钟 ${i}秒`:`${i}秒`}function K(e){return e?new Intl.DateTimeFormat(`zh-CN`,{month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`,hour12:!1}).format(new Date(e)):`-`}function q(e,t){return t===`bytes`?W(e):t===`%`?`${e.toFixed(1)}%`:t===`ms`?`${e.toFixed(1)} ms`:String(e)}function J(e,t){return t===`bytes`?W(e):t===`%`?`${e}%`:t===`ms`?`${e} ms`:String(e)}function ae(e){if(!e||typeof e!=`object`)return null;let t=e;return Array.isArray(t.keys)?{windowMs:Number(t.windowMs)||0,maxPerWindow:Number(t.maxPerWindow)||0,keys:t.keys,suppressedTotal:Number(t.suppressedTotal)||0}:null}function Y({status:e}){return(0,B.jsxs)(T,{variant:e===`critical`?`destructive`:e===`degraded`?`secondary`:`default`,children:[e===`ok`?(0,B.jsx)(w,{}):e===`degraded`?(0,B.jsx)(b,{}):(0,B.jsx)(o,{}),V[e]]})}function oe({icon:e,label:t,value:n,detail:r}){return(0,B.jsxs)(y,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsx)(m,{className:`border-b px-4 py-3`,children:(0,B.jsxs)(x,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,B.jsx)(e,{}),t]})}),(0,B.jsxs)(h,{className:`flex flex-col gap-1 p-4`,children:[(0,B.jsx)(`div`,{className:`text-2xl font-semibold tracking-tight`,children:n}),(0,B.jsx)(`div`,{className:`min-h-4 truncate text-xs text-muted-foreground`,title:r,children:r})]})]})}function X({label:e,value:t}){return(0,B.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 rounded-lg border bg-background p-3`,children:[(0,B.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e}),(0,B.jsx)(`span`,{className:`truncate text-sm font-medium`,title:t,children:t})]})}function se(){return(0,B.jsxs)(`div`,{className:`app-workspace-content`,"aria-label":`正在读取健康状态`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsx)(v,{className:`h-7 w-40`}),(0,B.jsx)(v,{className:`h-4 w-64`})]}),(0,B.jsx)(v,{className:`h-8 w-28`})]}),(0,B.jsx)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-6`,children:Array.from({length:6}).map((e,t)=>(0,B.jsx)(v,{className:`h-32 w-full`},t))}),(0,B.jsx)(v,{className:`h-80 w-full`})]})}function Z(){let[t,n]=(0,z.useState)(null),[r,a]=(0,z.useState)(!0),[o,v]=(0,z.useState)(!1),[w,V]=(0,z.useState)(``),[H,Z]=(0,z.useState)(!0),Q=(0,z.useCallback)(async(e=!1)=>{e?v(!0):a(!0),V(``);try{n(await U())}catch(e){V(e instanceof Error?e.message:`无法读取健康状态`)}finally{a(!1),v(!1)}},[]);(0,z.useEffect)(()=>{Q()},[Q]),(0,z.useEffect)(()=>{if(!H)return;let e=window.setInterval(()=>{Q(!0)},5e3);return()=>window.clearInterval(e)},[H,Q]);let $=(0,z.useMemo)(()=>ae(t?.logs),[t]);if(r&&!t)return(0,B.jsx)(se,{});if(!t)return(0,B.jsxs)(`div`,{className:`app-workspace-content`,children:[(0,B.jsxs)(O,{variant:`destructive`,children:[(0,B.jsx)(D,{children:`加载失败`}),(0,B.jsx)(E,{children:w||`无法读取健康状态`})]}),(0,B.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void Q(),children:[(0,B.jsx)(l,{"data-icon":`inline-start`}),`重新检测`]})]});let ce=[{icon:F,label:`CPU`,value:`${t.cpu.percent.toFixed(1)}%`,detail:`${t.cpu.cores} 核 · load ${t.cpu.loadAverage.map(e=>e.toFixed(2)).join(` / `)}`},{icon:L,label:`RSS 内存`,value:W(t.memory.rss),detail:`Heap ${W(t.memory.heapUsed)} / ${W(t.memory.heapTotal)}`},{icon:R,label:`TCP 连接`,value:String(t.connections.total),detail:`代理 ${t.connections.proxySockets} · TLS ${t.connections.mitmTlsSockets} · WS ${t.connections.webSockets}`},{icon:c,label:`MITM 服务`,value:String(t.mitmServers.count),detail:`${t.mitmServers.activeSockets} 个活跃 socket`},{icon:te,label:`文件描述符`,value:t.process.fdCount==null?`-`:String(t.process.fdCount),detail:`handles ${t.process.activeHandles??`-`} · requests ${t.process.activeRequests??`-`}`},{icon:I,label:`事件循环`,value:`${t.eventLoop.maxMs.toFixed(1)} ms`,detail:`mean ${t.eventLoop.meanMs.toFixed(1)} ms`}];return(0,B.jsxs)(`div`,{className:`meddle-thin-scroll app-workspace-content overflow-y-auto`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,B.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsx)(`h2`,{className:`text-xl font-semibold tracking-tight`,children:`运行健康`}),(0,B.jsx)(Y,{status:t.status})]}),(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-3 text-xs text-muted-foreground`,children:[(0,B.jsxs)(`span`,{children:[`PID `,t.pid]}),(0,B.jsxs)(`span`,{children:[`运行 `,G(t.uptimeSec)]}),(0,B.jsx)(`span`,{children:t.platform}),(0,B.jsxs)(`span`,{children:[`更新 `,K(t.generatedAt)]})]})]}),(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex h-8 items-center gap-2 rounded-md border bg-background px-3 text-sm`,children:[(0,B.jsx)(d,{checked:H,onCheckedChange:Z,"aria-label":`自动刷新健康信息`}),(0,B.jsx)(`span`,{children:`自动刷新`})]}),(0,B.jsxs)(i,{variant:`outline`,size:`sm`,onClick:()=>void Q(!0),disabled:o,children:[(0,B.jsx)(l,{"data-icon":`inline-start`,className:e(o&&`animate-spin`)}),`刷新`]})]})]}),w&&(0,B.jsxs)(O,{variant:`destructive`,children:[(0,B.jsx)(D,{children:`刷新失败`}),(0,B.jsx)(E,{children:w})]}),(0,B.jsx)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-6`,children:ce.map(e=>(0,B.jsx)(oe,{...e},e.label))}),(0,B.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1.3fr)_minmax(360px,0.7fr)]`,children:[(0,B.jsxs)(y,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(m,{className:`border-b py-4`,children:[(0,B.jsxs)(x,{className:`flex items-center gap-2`,children:[(0,B.jsx)(re,{}),`健康检查`]}),(0,B.jsx)(C,{children:`阈值来自当前进程的 MEDDLE_WATCHDOG 配置。`})]}),(0,B.jsx)(h,{className:`p-0`,children:(0,B.jsxs)(P,{children:[(0,B.jsx)(k,{children:(0,B.jsxs)(M,{children:[(0,B.jsx)(A,{children:`项目`}),(0,B.jsx)(A,{children:`状态`}),(0,B.jsx)(A,{children:`当前值`}),(0,B.jsx)(A,{children:`阈值`})]})}),(0,B.jsx)(j,{children:t.checks.map(e=>(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{className:`font-medium`,children:ie[e.name]||e.name}),(0,B.jsx)(N,{children:(0,B.jsx)(Y,{status:e.status})}),(0,B.jsx)(N,{children:q(e.value,e.unit)}),(0,B.jsx)(N,{className:`text-muted-foreground`,children:J(e.limit,e.unit)})]},e.name))})]})})]}),(0,B.jsxs)(y,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(m,{className:`border-b py-4`,children:[(0,B.jsxs)(x,{className:`flex items-center gap-2`,children:[(0,B.jsx)(ee,{}),`守护策略`]}),(0,B.jsx)(C,{children:`连续命中严重阈值后按策略处理。`}),(0,B.jsx)(ne,{children:(0,B.jsx)(T,{variant:t.watchdog.config.enabled?`default`:`secondary`,children:t.watchdog.config.enabled?`已启用`:`已关闭`})})]}),(0,B.jsxs)(h,{className:`grid gap-3 p-4 sm:grid-cols-2`,children:[(0,B.jsx)(X,{label:`动作`,value:t.watchdog.config.action===`exit`?`退出重启`:`仅告警`}),(0,B.jsx)(X,{label:`检测间隔`,value:G(t.watchdog.config.intervalMs/1e3)}),(0,B.jsx)(X,{label:`最小运行时间`,value:G(t.watchdog.config.minUptimeMs/1e3)}),(0,B.jsx)(X,{label:`失败阈值`,value:`${t.watchdog.consecutiveFailures}/${t.watchdog.config.failureThreshold}`}),(0,B.jsx)(X,{label:`CPU 阈值`,value:`${t.watchdog.config.cpuPercent}%`}),(0,B.jsx)(X,{label:`RSS 阈值`,value:W(t.watchdog.config.rssBytes)}),(0,B.jsx)(X,{label:`连接阈值`,value:String(t.watchdog.config.connectionCount)}),(0,B.jsx)(X,{label:`FD 阈值`,value:String(t.watchdog.config.fdCount)}),t.watchdog.lastReason&&(0,B.jsx)(`div`,{className:`sm:col-span-2`,children:(0,B.jsxs)(O,{children:[(0,B.jsx)(b,{}),(0,B.jsx)(D,{children:`最近命中`}),(0,B.jsx)(E,{children:t.watchdog.lastReason})]})})]})]})]}),(0,B.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,B.jsxs)(y,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(m,{className:`border-b py-4`,children:[(0,B.jsxs)(x,{className:`flex items-center gap-2`,children:[(0,B.jsx)(u,{}),`MITM 服务池`]}),(0,B.jsxs)(C,{children:[t.mitmServers.count,` 个动态 HTTPS 服务。`]})]}),(0,B.jsx)(h,{className:`p-0`,children:t.mitmServers.items.length>0?(0,B.jsxs)(P,{children:[(0,B.jsx)(k,{children:(0,B.jsxs)(M,{children:[(0,B.jsx)(A,{children:`Host`}),(0,B.jsx)(A,{children:`端口`}),(0,B.jsx)(A,{children:`Socket`}),(0,B.jsx)(A,{children:`空闲`})]})}),(0,B.jsx)(j,{children:t.mitmServers.items.map(e=>(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{className:`max-w-[260px] truncate font-medium`,title:e.host,children:e.host}),(0,B.jsx)(N,{children:e.port??`-`}),(0,B.jsxs)(N,{children:[e.activeSockets,` / `,e.webSockets,` WS`]}),(0,B.jsx)(N,{className:`text-muted-foreground`,children:e.idleForMs==null?`-`:G(e.idleForMs/1e3)})]},`${e.host}:${e.port??`dynamic`}`))})]}):(0,B.jsx)(_,{className:`border-0 py-10`,children:(0,B.jsxs)(g,{children:[(0,B.jsx)(S,{variant:`icon`,children:(0,B.jsx)(c,{})}),(0,B.jsx)(f,{children:`暂无动态 HTTPS 服务`}),(0,B.jsx)(p,{children:`当前没有活跃的 MITM 目标。`})]})})})]}),(0,B.jsxs)(y,{className:`gap-0 py-0 shadow-none`,children:[(0,B.jsxs)(m,{className:`border-b py-4`,children:[(0,B.jsxs)(x,{className:`flex items-center gap-2`,children:[(0,B.jsx)(s,{}),`日志限流`]}),(0,B.jsxs)(C,{children:[`已抑制 `,$?.suppressedTotal??0,` 条重复日志。`]})]}),(0,B.jsx)(h,{className:`p-0`,children:$&&$.keys.length>0?(0,B.jsxs)(P,{children:[(0,B.jsx)(k,{children:(0,B.jsxs)(M,{children:[(0,B.jsx)(A,{children:`Key`}),(0,B.jsx)(A,{children:`级别`}),(0,B.jsx)(A,{children:`输出 / 抑制`}),(0,B.jsx)(A,{children:`最近`})]})}),(0,B.jsx)(j,{children:$.keys.map(e=>(0,B.jsxs)(M,{children:[(0,B.jsx)(N,{className:`max-w-[260px] truncate font-medium`,title:e.key,children:e.key}),(0,B.jsx)(N,{children:(0,B.jsx)(T,{variant:e.level===`error`?`destructive`:e.level===`warn`?`secondary`:`outline`,children:e.level})}),(0,B.jsxs)(N,{children:[e.emitted,` / `,e.suppressed]}),(0,B.jsx)(N,{className:`text-muted-foreground`,children:K(e.lastSeenAt)})]},e.key))})]}):(0,B.jsx)(_,{className:`border-0 py-10`,children:(0,B.jsxs)(g,{children:[(0,B.jsx)(S,{variant:`icon`,children:(0,B.jsx)(s,{})}),(0,B.jsx)(f,{children:`暂无限流记录`}),(0,B.jsx)(p,{children:`当前没有被抑制的重复日志。`})]})})})]})]})]})}export{Z as HealthPanel};
|