@lunora/studio 1.0.0-alpha.85 → 1.0.0-alpha.87
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/dist/index.d.ts +18 -3
- package/dist/index.js +1 -1
- package/dist/mount.js +1 -1
- package/dist/packem_chunks/AdvisorHealthPanel.js +1 -1
- package/dist/packem_chunks/ApiTab.js +1 -1
- package/dist/packem_chunks/AuditPanel.js +1 -1
- package/dist/packem_chunks/ExportImportPanel.js +1 -1
- package/dist/packem_chunks/FileBrowser.js +1 -1
- package/dist/packem_chunks/FunctionRunner.js +1 -1
- package/dist/packem_chunks/FunctionStatsPanel.js +1 -1
- package/dist/packem_chunks/HealthPanel.js +1 -1
- package/dist/packem_chunks/InsightsPanel.js +1 -1
- package/dist/packem_chunks/LogsPanel.js +1 -1
- package/dist/packem_chunks/MailPanel.js +1 -1
- package/dist/packem_chunks/MetricsPanel.js +1 -1
- package/dist/packem_chunks/NotificationsPanel.js +1 -1
- package/dist/packem_chunks/PitrPanel.js +1 -1
- package/dist/packem_chunks/SchemaViewer.js +1 -1
- package/dist/packem_chunks/SecurityAdvisorPanel.js +1 -1
- package/dist/packem_chunks/SettingsPanel.js +1 -1
- package/dist/packem_chunks/SqlEditorPanel.js +6 -6
- package/dist/packem_chunks/TableEditor.js +1 -1
- package/dist/packem_chunks/agents-panel.js +1 -1
- package/dist/packem_chunks/auth-audit-panel.js +1 -1
- package/dist/packem_chunks/containers-panel.js +1 -1
- package/dist/packem_chunks/dashboards-panel.js +1 -1
- package/dist/packem_chunks/fanout-panel.js +1 -1
- package/dist/packem_chunks/flags-panel.js +1 -1
- package/dist/packem_chunks/issues-panel.js +1 -1
- package/dist/packem_chunks/kv-browser.js +1 -1
- package/dist/packem_chunks/migrations-route.js +1 -1
- package/dist/packem_chunks/payments-panel.js +1 -1
- package/dist/packem_chunks/permissions-panel.js +1 -1
- package/dist/packem_chunks/queues-panel.js +1 -1
- package/dist/packem_chunks/rls-panel.js +1 -1
- package/dist/packem_chunks/storage-rules-panel.js +1 -1
- package/dist/packem_chunks/subscriptions-panel.js +1 -1
- package/dist/packem_chunks/traces-panel.js +1 -1
- package/dist/packem_chunks/users-panel.js +1 -1
- package/dist/packem_chunks/workflows-panel.js +1 -1
- package/dist/packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js +1 -0
- package/dist/packem_shared/{ApiDocsPanel-fYS9NiLg.js → ApiDocsPanel-DLMeLZ5-.js} +1 -1
- package/dist/packem_shared/DataBrowser-CZZ_WkJ-.js +1 -0
- package/dist/packem_shared/{GlobalDataBrowser-CSttudUx.js → GlobalDataBrowser-DpkjHfDg.js} +1 -1
- package/dist/packem_shared/{HomePanel-BYsfMhKh.js → HomePanel-3baDsDBU.js} +1 -1
- package/dist/packem_shared/MigrationsPanel-dygzHUvg.js +1 -0
- package/dist/packem_shared/{Studio-Ba9x0dG_.js → Studio-forQt-PC.js} +1 -1
- package/dist/packem_shared/{StudioApp-B_PRdg4h.js → StudioApp-B1AWsBzi.js} +1 -1
- package/dist/packem_shared/{home-panel-B60-5YfI.js → home-panel-CeeqqV0z.js} +1 -1
- package/dist/packem_shared/{studio-CPuoAmjh.js → studio-BtC7WPbz.js} +1 -1
- package/dist/packem_shared/table-list-sidebar-D9Bd4qgi.js +1 -0
- package/dist/packem_shared/use-shard-key-B2JtNa5m.js +1 -0
- package/dist/packem_shared/{use-sql-assistant-BLG9unQN.js → use-sql-assistant-C6dl2_Ty.js} +1 -1
- package/dist/packem_shared/useDebounced-CU-uftxO.js +1 -0
- package/dist/standalone/chunk-2VWWXVWK.js +1 -0
- package/dist/standalone/chunk-3CWGJYBB.js +1 -0
- package/dist/standalone/{chunk-52OYJHM7.js → chunk-4JIOFDMR.js} +1 -1
- package/dist/standalone/{chunk-MN64D74P.js → chunk-4LCY5XUR.js} +1 -1
- package/dist/standalone/{chunk-JE3WK77V.js → chunk-5KRD6F67.js} +1 -1
- package/dist/standalone/{chunk-RC3H4OP3.js → chunk-5X4OZ7OD.js} +1 -1
- package/dist/standalone/{chunk-TO45V3L6.js → chunk-6MGI5IN6.js} +1 -1
- package/dist/standalone/{chunk-HJR42BJY.js → chunk-7DNDRUMZ.js} +1 -1
- package/dist/standalone/chunk-7FO57AZY.js +1 -0
- package/dist/standalone/{chunk-YNBIW2GN.js → chunk-B5S6GSUC.js} +1 -1
- package/dist/standalone/{chunk-QZ6TCNWR.js → chunk-B5UFGO4E.js} +1 -1
- package/dist/standalone/{chunk-RFBU5RZI.js → chunk-BDNDSBYM.js} +1 -1
- package/dist/standalone/{chunk-QS4IFAFJ.js → chunk-CLNB7I3O.js} +1 -1
- package/dist/standalone/{chunk-QSFKPGK4.js → chunk-D3JTCLSF.js} +1 -1
- package/dist/standalone/chunk-DABW4OOI.js +1 -0
- package/dist/standalone/{chunk-SPT3KPV7.js → chunk-EAIUBZA5.js} +1 -1
- package/dist/standalone/{chunk-FUBR2PAD.js → chunk-EJ2CHD4G.js} +1 -1
- package/dist/standalone/chunk-EVTCXQ5D.js +1 -0
- package/dist/standalone/{chunk-OLM62NLS.js → chunk-EWDLYYJM.js} +1 -1
- package/dist/standalone/{chunk-ZOX6X2DL.js → chunk-F7NVC7YK.js} +1 -1
- package/dist/standalone/chunk-FURI47Z2.js +1 -0
- package/dist/standalone/chunk-FW75RYZU.js +1 -0
- package/dist/standalone/chunk-GE5WTIWX.js +1 -0
- package/dist/standalone/{chunk-BAAU4OTI.js → chunk-GZS3ORGS.js} +1 -1
- package/dist/standalone/chunk-HYCMT2V5.js +1 -0
- package/dist/standalone/{chunk-5YADKLAQ.js → chunk-IAKPXGTQ.js} +1 -1
- package/dist/standalone/chunk-IVCIG5J7.js +4 -0
- package/dist/standalone/chunk-KJIBL5D4.js +1 -0
- package/dist/standalone/chunk-L4RW5BFD.js +1 -0
- package/dist/standalone/{chunk-PWTURL56.js → chunk-LYRAWNV7.js} +1 -1
- package/dist/standalone/chunk-MIFLRBVS.js +11 -0
- package/dist/standalone/{chunk-OOL3FV6A.js → chunk-MV4A2PAK.js} +1 -1
- package/dist/standalone/{chunk-347H2BQO.js → chunk-NBUBAW3V.js} +1 -1
- package/dist/standalone/{chunk-232MBXB2.js → chunk-NCWUTRZB.js} +1 -1
- package/dist/standalone/{chunk-D67BVBQW.js → chunk-NMLCYY4H.js} +1 -1
- package/dist/standalone/{chunk-MDHUWMFD.js → chunk-OOWHAURL.js} +1 -1
- package/dist/standalone/{chunk-UOQ24BAY.js → chunk-ORVR33FM.js} +1 -1
- package/dist/standalone/{chunk-7AG3T4DK.js → chunk-OUCGTB3Y.js} +2 -2
- package/dist/standalone/chunk-PDMZITZZ.js +1 -0
- package/dist/standalone/{chunk-VORDESEQ.js → chunk-PNAVAJAF.js} +1 -1
- package/dist/standalone/{chunk-LVJ5IHEU.js → chunk-QJTGO4JG.js} +1 -1
- package/dist/standalone/{chunk-EDOMDMVI.js → chunk-QP7IQOKF.js} +1 -1
- package/dist/standalone/chunk-QXDMHM2V.js +1 -0
- package/dist/standalone/{chunk-VKEJTZY7.js → chunk-S2CXYDNT.js} +1 -1
- package/dist/standalone/{chunk-AQKXMWNF.js → chunk-S3DWUXGY.js} +1 -1
- package/dist/standalone/{chunk-YSMJN36P.js → chunk-SJZQPIZB.js} +1 -1
- package/dist/standalone/{chunk-ETZYJL7Z.js → chunk-SMEW3ZTU.js} +1 -1
- package/dist/standalone/chunk-SNK7TOOO.js +6 -0
- package/dist/standalone/{chunk-QI25LTPH.js → chunk-T2Q7I3V2.js} +1 -1
- package/dist/standalone/{chunk-ESKVOZLC.js → chunk-T3CGXSXO.js} +1 -1
- package/dist/standalone/{chunk-YGKR536O.js → chunk-TS6346VY.js} +1 -1
- package/dist/standalone/{chunk-ENBTOX7N.js → chunk-TVGKSIIW.js} +1 -1
- package/dist/standalone/{chunk-U5IIRHZ6.js → chunk-UNVK2VZP.js} +1 -1
- package/dist/standalone/{chunk-U44CWN7H.js → chunk-UR3X4K4T.js} +1 -1
- package/dist/standalone/chunk-VDW32UET.js +1 -0
- package/dist/standalone/chunk-VQK34A2H.js +1 -0
- package/dist/standalone/{chunk-MBVSXVTV.js → chunk-WPUINKEO.js} +1 -1
- package/dist/standalone/chunk-XNGYYOLS.js +14 -0
- package/dist/standalone/{chunk-2SC3EG5Y.js → chunk-XR7RBXKA.js} +1 -1
- package/dist/standalone/{chunk-KNHWIHC7.js → chunk-XZN645UJ.js} +1 -1
- package/dist/standalone/chunk-YFJXQUPW.js +1 -0
- package/dist/standalone/chunk-YKAO3JNJ.js +1 -0
- package/dist/standalone/{chunk-AHVDZWB3.js → chunk-YRYEZHOJ.js} +1 -1
- package/dist/standalone/{chunk-TIR6CWHO.js → chunk-ZCFDQW4U.js} +1 -1
- package/dist/standalone/studio.js +1 -1
- package/package.json +6 -6
- package/dist/packem_shared/ADMIN_FUNCTIONS-CZESgd10.js +0 -1
- package/dist/packem_shared/DataBrowser-C4J4gVUu.js +0 -1
- package/dist/packem_shared/MigrationsPanel-2JbQ2HwG.js +0 -1
- package/dist/packem_shared/table-list-sidebar-BRv3hTLX.js +0 -1
- package/dist/packem_shared/useDebounced-Ihdiid_k.js +0 -1
- package/dist/standalone/chunk-22LOWEEC.js +0 -1
- package/dist/standalone/chunk-2EJADIPC.js +0 -1
- package/dist/standalone/chunk-4I2TBTZS.js +0 -1
- package/dist/standalone/chunk-6IEBRNDW.js +0 -1
- package/dist/standalone/chunk-D3FRQZ4X.js +0 -1
- package/dist/standalone/chunk-ERMTJYQF.js +0 -1
- package/dist/standalone/chunk-JAT5ZBQK.js +0 -1
- package/dist/standalone/chunk-JOFD43OI.js +0 -1
- package/dist/standalone/chunk-LFKCLLPT.js +0 -1
- package/dist/standalone/chunk-MLULN4R2.js +0 -1
- package/dist/standalone/chunk-MUGKOGZG.js +0 -1
- package/dist/standalone/chunk-NPKNFZUW.js +0 -6
- package/dist/standalone/chunk-OV63HVE4.js +0 -4
- package/dist/standalone/chunk-QFJRZR4U.js +0 -1
- package/dist/standalone/chunk-QNRAMF4X.js +0 -1
- package/dist/standalone/chunk-QNUWWC3N.js +0 -14
- package/dist/standalone/chunk-S67SBGB3.js +0 -1
- package/dist/standalone/chunk-SHD2IWQI.js +0 -1
- package/dist/standalone/chunk-SKFZXESP.js +0 -1
- package/dist/standalone/chunk-UBR4KB6K.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as U}from"react/compiler-runtime";import{useState as W}from"react";import{E as G}from"../packem_shared/error-alert-t6cpEi0z.js";import{L as J}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as Q}from"../packem_shared/ShardInput-BVn2iCU0.js";import{g as V}from"../packem_shared/badge-BbuuAio7.js";import{u as X}from"../packem_shared/button-BkCrNcAs.js";import{c as Y,u as Z}from"../packem_shared/card-CIDGUN6K.js";import{E as ee}from"../packem_shared/empty-state-Cg7t_8qu.js";import{n as te,d as re,m as j,p as l,f as ae,u as n}from"../packem_shared/table-DdJBrClo.js";import{N as se}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{S as le}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as ne}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as oe}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as ie}from"../packem_shared/internal-BSIsQVC6.js";import{c as P}from"../packem_shared/utils-bhneXptQ.js";import{jsx as t,jsxs as y}from"react/jsx-runtime";const ce={action:"outline",mutation:"default",query:"secondary"},z=r=>r<1e3?`${r<10?r.toFixed(1):Math.round(r).toString()}ms`:`${(r/1e3).toFixed(2)}s`,de=r=>r.calls===0?"—":r.errors===0?"0":`${r.errors.toString()} (${(r.errors/r.calls*100).toFixed(1)}%)`,me=r=>{const e=r.conflicts??0;return r.calls===0?"—":e===0?"0":`${e.toString()} (${(e/r.calls*100).toFixed(1)}%)`},ue={calls:(r,e)=>e.calls-r.calls,recent:(r,e)=>e.lastCalledAt-r.lastCalledAt,slowest:(r,e)=>e.maxDurationMs-r.maxDurationMs},Ae=r=>{const e=U(47),{functions:K,initialShardKey:O}=r,s=ne(),{queryShardKey:_,setShardKey:N,shardKey:v}=le(O),[o,R]=W("recent");let M;e[0]===Symbol.for("react.memo_cache_sentinel")?(M={},e[0]=M):M=e[0];let w;e[1]!==_?(w={live:!0,shardKey:_},e[1]=_,e[2]=w):w=e[2];const{data:B,error:i,errorSource:$,liveError:S}=se(oe.getFunctionStats,M,w),k=B?.functions??null;let E;e[3]!==K?(E=new Map((K??[]).map(he)),e[3]=K,e[4]=E):E=e[4];const L=E;let C;e[5]===Symbol.for("react.memo_cache_sentinel")?(C=b=>{R(b.currentTarget.dataset.sort)},e[5]=C):C=e[5];const H=C;let F;if(e[6]!==i||e[7]!==$||e[8]!==L||e[9]!==S||e[10]!==N||e[11]!==v||e[12]!==o||e[13]!==k||e[14]!==s){const b=k===null?[]:k.toSorted(ue[o]);let c;e[16]!==s?(c=s("Recent"),e[16]=s,e[17]=c):c=e[17];let d;e[18]!==c?(d={key:"recent",label:c},e[18]=c,e[19]=d):d=e[19];let m;e[20]!==s?(m=s("Most called"),e[20]=s,e[21]=m):m=e[21];let u;e[22]!==m?(u={key:"calls",label:m},e[22]=m,e[23]=u):u=e[23];let h;e[24]!==s?(h=s("Slowest"),e[24]=s,e[25]=h):h=e[25];let f;e[26]!==h?(f={key:"slowest",label:h},e[26]=h,e[27]=f):f=e[27];let I;e[28]!==f||e[29]!==d||e[30]!==u?(I=[d,u,f],e[28]=f,e[29]=d,e[30]=u,e[31]=I):I=e[31];const T=I;let p;e[32]!==N||e[33]!==v?(p=t(Q,{onChange:N,testId:"fs-shard-input",value:v}),e[32]=N,e[33]=v,e[34]=p):p=e[34];let x;e[35]!==S?(x=t(J,{message:S,prefix:"fs"}),e[35]=S,e[36]=x):x=e[36];let g;e[37]!==T||e[38]!==o?(g=t("div",{className:"ml-auto flex items-center gap-1",role:"group",children:T.map(a=>t(X,{"data-sort":a.key,"data-testid":`fs-sort-${a.key}`,onClick:H,size:"sm",type:"button",variant:o===a.key?"secondary":"ghost",children:a.label},a.key))}),e[37]=T,e[38]=o,e[39]=g):g=e[39];let A;e[40]!==p||e[41]!==x||e[42]!==g?(A=y("div",{className:"flex flex-wrap items-center gap-2",children:[p,x,g]}),e[40]=p,e[41]=x,e[42]=g,e[43]=A):A=e[43];let D;e[44]!==i||e[45]!==$?(D=i!==null&&t(G,{error:$,testId:"fs-error"}),e[44]=i,e[45]=$,e[46]=D):D=e[46],F=y("div",{className:"flex flex-col gap-4","data-testid":"lunora-function-stats",children:[A,D,k!==null&&b.length===0&&i===null&&t(ee,{description:s("Per-function call counts, error rates, and latency land here after your first request."),icon:y("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[t("path",{d:"M3 3v18h18"}),t("path",{d:"M7 14l4-4 3 3 5-6"})]}),testId:"fs-empty",title:s("No functions have run on this shard yet.")}),b.length>0&&t(Y,{className:"overflow-hidden py-0",children:t(Z,{className:"px-0",children:y(te,{"data-testid":"fs-table",children:[t(re,{children:y(j,{children:[t(l,{children:s("function")}),t(l,{children:s("kind")}),t(l,{className:"text-right",children:s("calls")}),t(l,{className:"text-right",children:s("errors")}),t(l,{className:"text-right",children:s("conflicts")}),t(l,{className:"text-right",children:s("avg")}),t(l,{className:"text-right",children:s("max")}),t(l,{children:s("last run")}),t(l,{children:s("last error")})]})}),t(ae,{children:b.map(a=>{const q=L.get(a.path);return y(j,{"data-testid":`fs-row-${a.path}`,children:[t(n,{className:"font-medium",children:a.path}),t(n,{children:q===void 0?t("span",{className:"text-muted-foreground",children:"—"}):t(V,{variant:ce[q],children:q})}),t(n,{className:"text-right tabular-nums",children:a.calls}),t(n,{className:P("text-right tabular-nums",a.errors>0&&"text-destructive"),children:de(a)}),t(n,{className:P("text-right tabular-nums",(a.conflicts??0)>0&&"text-warning"),children:me(a)}),t(n,{className:"text-right tabular-nums",children:a.calls===0?"—":z(a.totalDurationMs/a.calls)}),t(n,{className:"text-right tabular-nums",children:a.calls===0?"—":z(a.maxDurationMs)}),t(n,{className:"text-muted-foreground",children:ie(a.lastCalledAt,"—")}),t(n,{className:"max-w-[24ch] truncate text-destructive",title:a.lastErrorMessage??void 0,children:a.lastErrorMessage??t("span",{className:"text-muted-foreground",children:"—"})})]},a.path)})})]})})})]}),e[6]=i,e[7]=$,e[8]=L,e[9]=S,e[10]=N,e[11]=v,e[12]=o,e[13]=k,e[14]=s,e[15]=F}else F=e[15];return F};function he(r){return[r.path,r.kind]}export{Ae as FunctionStatsPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as ae}from"react/compiler-runtime";import{useLunora as he}from"@lunora/react";import{useState as y,useRef as L,useEffect as O,useCallback as ge}from"react";import xe from"../packem_shared/ConnectionBadge-DOk0CQWo.js";import{L as ve}from"../packem_shared/live-status-CmuRLFKf.js";import{g as z}from"../packem_shared/badge-BbuuAio7.js";import{c as A}from"../packem_shared/card-CIDGUN6K.js";import{N as Ne}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as le}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as M}from"../packem_shared/ADMIN_FUNCTIONS-CZESgd10.js";import{i as be,f as G,d as ee,b as te,g as j}from"../packem_shared/internal-BSIsQVC6.js";import{l as we}from"../packem_shared/shard-history-DMEW5VBE.js";import{c as $}from"../packem_shared/utils-bhneXptQ.js";import{jsx as l,jsxs as d}from"react/jsx-runtime";import{shardsToAggregate as ye}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{S as Q}from"../packem_shared/sparkline-CgjeUU2I.js";const ke={crit:"destructive",ok:"secondary",warn:"default"},_=(s,e)=>e===0?"—":`${(s/e*100).toFixed(1)}%`,V=(s,e,r)=>Number.isNaN(s)?"ok":s>=r?"crit":s>=e?"warn":"ok",ne=.01,oe=.05,Se=s=>{const e=ae(36),{errorCount:r,logsError:t,topErrors:a,worstFunctions:f}=s,n=le();let o;e[0]!==n?(o=n("Functions by error rate"),e[0]=n,e[1]=o):o=e[1];let p;e[2]!==o?(p=l("header",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:o})}),e[2]=o,e[3]=p):p=e[3];let m;e[4]!==n||e[5]!==f?(m=f.length===0?l("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-functions-empty",children:n("No function activity yet.")}):l("ul",{className:"divide-y divide-border",children:f.map(b=>d("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2 text-xs","data-testid":"hl-fn-row",children:[l("span",{className:"truncate font-mono text-foreground",children:b.path}),d("span",{className:"flex shrink-0 items-center gap-2",children:[l("span",{className:"tabular-nums text-muted-foreground",children:n("{count} calls",{count:b.calls.toString()})}),l(z,{variant:ke[V(b.errors/b.calls,ne,oe)],children:_(b.errors,b.calls)})]})]},b.path))}),e[4]=n,e[5]=f,e[6]=m):m=e[6];let h;e[7]!==p||e[8]!==m?(h=d(A,{className:"gap-0 py-0","data-testid":"hl-functions",children:[p,m]}),e[7]=p,e[8]=m,e[9]=h):h=e[9];let v;e[10]!==n?(v=n("Recent errors"),e[10]=n,e[11]=v):v=e[11];let i;e[12]!==v?(i=l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:v}),e[12]=v,e[13]=i):i=e[13];const c=r>0?"destructive":"outline";let g;e[14]!==r||e[15]!==c?(g=l(z,{"data-testid":"hl-error-count",variant:c,children:r}),e[14]=r,e[15]=c,e[16]=g):g=e[16];let x;e[17]!==i||e[18]!==g?(x=d("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[i,g]}),e[17]=i,e[18]=g,e[19]=x):x=e[19];let k;e[20]!==t?(k=t!==null&&l("p",{className:"px-4 py-8 text-center text-sm text-destructive","data-testid":"hl-logs-error",role:"alert",children:t}),e[20]=t,e[21]=k):k=e[21];let S;e[22]!==t||e[23]!==n||e[24]!==a.length?(S=t===null&&a.length===0&&l("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-errors-empty",children:n("No recent errors.")}),e[22]=t,e[23]=n,e[24]=a.length,e[25]=S):S=e[25];let E;e[26]!==a?(E=a.length>0&&l("ul",{className:"divide-y divide-border",children:a.map(Ee)}),e[26]=a,e[27]=E):E=e[27];let N;e[28]!==k||e[29]!==S||e[30]!==E||e[31]!==x?(N=d(A,{className:"gap-0 py-0",children:[x,k,S,E]}),e[28]=k,e[29]=S,e[30]=E,e[31]=x,e[32]=N):N=e[32];let w;return e[33]!==N||e[34]!==h?(w=d("div",{className:"grid gap-3 lg:grid-cols-2",children:[h,N]}),e[33]=N,e[34]=h,e[35]=w):w=e[35],w};function Ee(s,e){return d("li",{className:"flex flex-col gap-0.5 px-4 py-2 text-xs","data-testid":"hl-error-row",children:[d("span",{className:"flex items-center gap-2",children:[l("time",{className:"shrink-0 text-muted-foreground",children:be(s.timestamp)}),s.functionPath!==void 0&&l("span",{className:"truncate font-mono text-foreground",children:s.functionPath})]}),l("span",{className:"text-destructive",children:s.message})]},`${s.timestamp.toString()}-${e.toString()}`)}const re={completed:0,failed:2,in_progress:1},Me=s=>{let e=0,r=0,t=0,a=0;const f=[];for(const{metrics:n}of s){if(n===null){a+=1;continue}t+=1,e+=n.requests,r+=n.errors,f.push(...n.history??[])}return{errors:r,failed:a,history:f,reachable:t,requests:e}},qe=s=>{const e=new Map;for(const r of s)for(const t of r){const a=e.get(t.path);if(a===void 0){e.set(t.path,{...t});continue}a.calls+=t.calls,a.errors+=t.errors,a.totalDurationMs+=t.totalDurationMs,a.scans=(a.scans??0)+(t.scans??0),a.maxDurationMs=Math.max(a.maxDurationMs,t.maxDurationMs),a.lastCalledAt=Math.max(a.lastCalledAt,t.lastCalledAt),(t.lastErrorAt??0)>(a.lastErrorAt??0)&&(a.lastErrorAt=t.lastErrorAt,a.lastErrorMessage=t.lastErrorMessage)}return[...e.values()]},$e=s=>{const e=new Map;for(const r of s)for(const t of r){const a=e.get(t.id);if(a===void 0){e.set(t.id,t);continue}const f=re[t.status]-re[a.status];(f>0||f===0&&(t.updatedAt??0)>(a.updatedAt??0))&&e.set(t.id,t)}return[...e.values()]},Ae=j(M.getAuthMetrics),je=j(M.getFunctionStats),Ie=j(M.getLogs),Pe=j(M.getMetrics),Re=j(M.migrationStatus),Ce=5,se=2e3,De=5,Fe=.1,Le=.3,Oe=1,Te=50,_e=(s,e,r)=>s>=r?"crit":s>=e?"warn":"ok",ze=s=>{const e=new Map;for(const t of s??[]){const a=e.get(t.bucketMs)??{calls:0,errors:0};a.calls+=t.calls,a.errors+=t.errors,e.set(t.bucketMs,a)}const r=[...e.entries()].toSorted((t,a)=>t[0]-a[0]);return{errors:r.map(([,t])=>t.errors),requests:r.map(([,t])=>t.calls)}},Ke=s=>{let e=0,r=0;for(const a of s)a.status==="failed"?e+=1:a.status==="in_progress"&&(r+=1);let t="ok";return e>0?t="crit":r>0&&(t="warn"),{failed:e,level:t,running:r}},He=(s,e)=>s.failed>0?e("{count} failed",{count:s.failed.toString()}):s.running>0?e("{count} running",{count:s.running.toString()}):e("OK"),ie={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},ce={crit:"text-destructive",ok:"text-foreground",warn:"text-warning"},Ue={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},Be=s=>s.includes("crit")?"crit":s.includes("warn")?"warn":"ok",T=s=>{const e=ae(19),{chart:r,label:t,level:a,testId:f,value:n}=s,o=ie[a];let p;e[0]!==o?(p=$("size-1.5 shrink-0 rounded-full",o),e[0]=o,e[1]=p):p=e[1];let m;e[2]!==p?(m=l("span",{"aria-hidden":"true",className:p}),e[2]=p,e[3]=m):m=e[3];let h;e[4]!==t||e[5]!==m?(h=d("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[m,t]}),e[4]=t,e[5]=m,e[6]=h):h=e[6];const v=ce[a];let i;e[7]!==v?(i=$("truncate text-2xl font-semibold tabular-nums",v),e[7]=v,e[8]=i):i=e[8];let c;e[9]!==i||e[10]!==f||e[11]!==n?(c=l("span",{className:i,"data-testid":f,children:n}),e[9]=i,e[10]=f,e[11]=n,e[12]=c):c=e[12];let g;e[13]!==r||e[14]!==c?(g=d("div",{className:"flex items-center justify-between gap-3",children:[c,r]}),e[13]=r,e[14]=c,e[15]=g):g=e[15];let x;return e[16]!==h||e[17]!==g?(x=l(A,{className:"gap-0 py-0",children:d("div",{className:"flex flex-col gap-2.5 p-4",children:[h,g]})}),e[16]=h,e[17]=g,e[18]=x):x=e[18],x},Ge=async(s,e,r)=>{const t=await Promise.all(r.map(i=>{const c=ee(i);return Promise.allSettled([s.query(Pe,{},c),s.query(je,{},c),s.query(Re,{},c)])})),a=ee(e),f=typeof s.schedulerStatus=="function"?s.schedulerStatus():Promise.reject(new Error("scheduler status unavailable")),[n,o,p]=await Promise.allSettled([s.query(Ie,{},a),s.query(Ae,{},a),f]),m=t.map(([i,c,g])=>({functions:c.status==="fulfilled"?c.value.functions:[],metrics:i.status==="fulfilled"?i.value:null,migrations:g.status==="fulfilled"?g.value.migrations:[]})),h=Me(m),v=t[0]?.[0];return{auth:o.status==="fulfilled"?o.value:null,entries:n.status==="fulfilled"?n.value.entries:[],functions:qe(m.map(i=>i.functions)),logsError:n.status==="rejected"?te(n.reason):null,metricsError:h.reachable===0&&v?.status==="rejected"?te(v.reason):null,migrations:$e(m.map(i=>i.migrations)),scheduler:p.status==="fulfilled"?p.value:null,totals:h}},Qe=s=>{const e=s?.history??[];return{attempts:e.map(r=>r.attempts),failures:e.map(r=>r.failures)}},dt=({initialShardKey:s})=>{const e=he(),r=le(),[t,a]=y([]),[f,n]=y(null),[o,p]=y(null),[m,h]=y(null),[v,i]=y([]),[c,g]=y(null),[x,k]=y(null),[S,E]=y([]),[N]=y(we),w=L(!1),b=L(!0);O(()=>(b.current=!0,()=>{b.current=!1}),[]);const I=s??"",P=ge(async()=>{if(w.current)return;w.current=!0;const u=await Ge(e,I,ye(I,N));if(!b.current){w.current=!1;return}p(u.totals),h(u.metricsError),i(u.functions),E(u.migrations),a(u.entries),n(u.logsError),g(u.auth),k(u.scheduler),w.current=!1},[e,N,I]);O(()=>{G(P())},[P]);const K=L(0),q=L(null),de=()=>{const u=Date.now()-K.current;if(u>=se){K.current=Date.now(),G(P());return}q.current===null&&(q.current=setTimeout(()=>{q.current=null,K.current=Date.now(),G(P())},se-u))};O(()=>()=>{q.current!==null&&clearTimeout(q.current)},[]);const{data:W,liveError:ue}=Ne(M.getMetrics,{},{live:!0,shardKey:I});O(()=>{W!==void 0&&de()},[W]);const Z=t.filter(u=>u.level==="error"),me=Z.slice(0,Ce),R=ze(o?.history),J=Qe(c),fe=v.filter(u=>u.calls>0).toSorted((u,B)=>B.errors/B.calls-u.errors/u.calls||B.calls-u.calls).slice(0,De),H=Ke(S),pe=o===null||o.requests===0?0:o.errors/o.requests,U=V(pe,ne,oe),X=c===null?"ok":V(c.failureRate,Fe,Le),Y=x===null?"ok":_e(x.backlog,Oe,Te),C=Be([U,X,Y,H.level]);let D,F;return C==="crit"?(D=r("Critical"),F=r("One or more service levels are breached.")):C==="warn"?(D=r("Degraded"),F=r("Some service levels need attention.")):(D=r("All systems healthy"),F=r("All service levels are within target.")),d("div",{className:"flex flex-col gap-6","data-testid":"lunora-health",children:[d(A,{className:"gap-0 py-0",children:[d("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[d("div",{className:"flex items-center gap-3",children:[l("span",{"aria-hidden":"true",className:$("flex size-10 shrink-0 items-center justify-center rounded-full",Ue[C]),children:l("span",{className:$("size-3 rounded-full",ie[C])})}),d("div",{className:"grid leading-tight",children:[l("span",{className:"text-sm font-semibold text-foreground","data-testid":"hl-status",children:D}),l("span",{className:"text-[13px] text-muted-foreground",children:F})]})]}),d("div",{className:"flex flex-wrap items-center gap-4",children:[d("div",{className:"text-end",children:[l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Requests")}),d("div",{className:"flex items-center justify-end gap-2",children:[R.requests.length>=2&&l(Q,{ariaLabel:r("Requests over time"),className:"h-6 w-20 text-foreground",series:R.requests,testId:"hl-spark-requests"}),l("span",{className:"text-lg font-semibold tabular-nums text-foreground","data-testid":"hl-requests",children:(o?.requests??0).toString()})]})]}),l("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),d("div",{className:"text-end",children:[l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Error rate")}),l("div",{className:$("text-lg font-semibold tabular-nums",ce[U]),"data-testid":"hl-error-rate",children:o===null?"—":_(o.errors,o.requests)})]}),l("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),d("div",{className:"flex items-center gap-2",children:[l(xe,{}),l(ve,{message:ue,prefix:"hl"})]})]})]}),m!==null&&l("div",{className:"border-t border-border bg-destructive/5 px-4 py-2 text-sm text-destructive","data-testid":"hl-metrics-error",role:"alert",children:m})]}),d("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4","data-testid":"hl-slo",children:[l(T,{chart:R.errors.length>=2?l(Q,{ariaLabel:r("Errors over time"),className:"h-7 w-20 text-destructive",series:R.errors,testId:"hl-spark-errors"}):void 0,label:r("Error rate"),level:U,testId:"hl-slo-errorrate",value:o===null?"—":_(o.errors,o.requests)}),l(T,{chart:J.failures.length>=2?l(Q,{ariaLabel:r("Auth failures over time"),className:"h-7 w-20 text-destructive",series:J.failures,testId:"hl-spark-auth"}):void 0,label:r("Auth failures"),level:X,testId:"hl-slo-auth",value:c===null?"—":_(c.failures,c.attempts)}),l(T,{label:r("Scheduler backlog"),level:Y,testId:"hl-slo-backlog",value:x===null?"—":x.backlog.toString()}),l(T,{label:r("Migrations"),level:H.level,testId:"hl-slo-migrations",value:He(H,r)})]}),l(Se,{errorCount:Z.length,logsError:f,topErrors:me,worstFunctions:fe}),d(A,{className:"gap-0 py-0",children:[d("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Shards seen")}),l(z,{"data-testid":"hl-shard-count",variant:"outline",children:N.length})]}),N.length>0&&l("ul",{className:"flex flex-wrap gap-1.5 p-4",children:N.map(u=>l("li",{"data-testid":"hl-shard",children:l(z,{variant:"secondary",children:u})},u))})]})]})};export{dt as HealthPanel};
|
|
1
|
+
import{c as ae}from"react/compiler-runtime";import{useLunora as pe}from"@lunora/react";import{useState as w,useRef as F,useEffect as L,useCallback as ge}from"react";import xe from"../packem_shared/ConnectionBadge-DOk0CQWo.js";import{L as ve}from"../packem_shared/live-status-CmuRLFKf.js";import{g as z}from"../packem_shared/badge-BbuuAio7.js";import{c as A}from"../packem_shared/card-CIDGUN6K.js";import{N as be}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useT as le}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as E}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{i as Ne,f as G,d as ee,b as te,g as j}from"../packem_shared/internal-BSIsQVC6.js";import{l as ye}from"../packem_shared/shard-history-DMEW5VBE.js";import{c as $}from"../packem_shared/utils-bhneXptQ.js";import{jsx as l,jsxs as d}from"react/jsx-runtime";import{shardsToAggregate as we}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{S as Q}from"../packem_shared/sparkline-CgjeUU2I.js";const ke={crit:"destructive",ok:"secondary",warn:"default"},_=(s,e)=>e===0?"—":`${(s/e*100).toFixed(1)}%`,V=(s,e,r)=>Number.isNaN(s)?"ok":s>=r?"crit":s>=e?"warn":"ok",ne=.01,oe=.05,Se=s=>{const e=ae(36),{errorCount:r,logsError:t,topErrors:a,worstFunctions:h}=s,o=le();let n;e[0]!==o?(n=o("Functions by error rate"),e[0]=o,e[1]=n):n=e[1];let f;e[2]!==n?(f=l("header",{className:"border-b border-border px-4 py-3",children:l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:n})}),e[2]=n,e[3]=f):f=e[3];let m;e[4]!==o||e[5]!==h?(m=h.length===0?l("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-functions-empty",children:o("No function activity yet.")}):l("ul",{className:"divide-y divide-border",children:h.map(N=>d("li",{className:"flex flex-wrap items-center justify-between gap-2 px-4 py-2 text-xs","data-testid":"hl-fn-row",children:[l("span",{className:"truncate font-mono text-foreground",children:N.path}),d("span",{className:"flex shrink-0 items-center gap-2",children:[l("span",{className:"tabular-nums text-muted-foreground",children:o("{count} calls",{count:N.calls.toString()})}),l(z,{variant:ke[V(N.errors/N.calls,ne,oe)],children:_(N.errors,N.calls)})]})]},N.path))}),e[4]=o,e[5]=h,e[6]=m):m=e[6];let p;e[7]!==f||e[8]!==m?(p=d(A,{className:"gap-0 py-0","data-testid":"hl-functions",children:[f,m]}),e[7]=f,e[8]=m,e[9]=p):p=e[9];let v;e[10]!==o?(v=o("Recent errors"),e[10]=o,e[11]=v):v=e[11];let i;e[12]!==v?(i=l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:v}),e[12]=v,e[13]=i):i=e[13];const c=r>0?"destructive":"outline";let g;e[14]!==r||e[15]!==c?(g=l(z,{"data-testid":"hl-error-count",variant:c,children:r}),e[14]=r,e[15]=c,e[16]=g):g=e[16];let x;e[17]!==i||e[18]!==g?(x=d("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[i,g]}),e[17]=i,e[18]=g,e[19]=x):x=e[19];let k;e[20]!==t?(k=t!==null&&l("p",{className:"px-4 py-8 text-center text-sm text-destructive","data-testid":"hl-logs-error",role:"alert",children:t}),e[20]=t,e[21]=k):k=e[21];let S;e[22]!==t||e[23]!==o||e[24]!==a.length?(S=t===null&&a.length===0&&l("p",{className:"px-4 py-8 text-center text-sm text-muted-foreground","data-testid":"hl-errors-empty",children:o("No recent errors.")}),e[22]=t,e[23]=o,e[24]=a.length,e[25]=S):S=e[25];let q;e[26]!==a?(q=a.length>0&&l("ul",{className:"divide-y divide-border",children:a.map(qe)}),e[26]=a,e[27]=q):q=e[27];let b;e[28]!==k||e[29]!==S||e[30]!==q||e[31]!==x?(b=d(A,{className:"gap-0 py-0",children:[x,k,S,q]}),e[28]=k,e[29]=S,e[30]=q,e[31]=x,e[32]=b):b=e[32];let y;return e[33]!==b||e[34]!==p?(y=d("div",{className:"grid gap-3 lg:grid-cols-2",children:[p,b]}),e[33]=b,e[34]=p,e[35]=y):y=e[35],y};function qe(s,e){return d("li",{className:"flex flex-col gap-0.5 px-4 py-2 text-xs","data-testid":"hl-error-row",children:[d("span",{className:"flex items-center gap-2",children:[l("time",{className:"shrink-0 text-muted-foreground",children:Ne(s.timestamp)}),s.functionPath!==void 0&&l("span",{className:"truncate font-mono text-foreground",children:s.functionPath})]}),l("span",{className:"text-destructive",children:s.message})]},`${s.timestamp.toString()}-${e.toString()}`)}const re={completed:0,failed:2,in_progress:1},Ee=s=>{let e=0,r=0,t=0,a=0,h=!1;const o=[];for(const{metrics:n}of s){if(n===null){a+=1;continue}t+=1,e+=n.requests,r+=n.errors,o.push(...n.history??[]),h||=n.historyTruncated===!0}return{errors:r,failed:a,history:o,historyTruncated:h,reachable:t,requests:e}},Me=s=>{const e=new Map;for(const r of s)for(const t of r){const a=e.get(t.path);if(a===void 0){e.set(t.path,{...t});continue}a.calls+=t.calls,a.errors+=t.errors,a.totalDurationMs+=t.totalDurationMs,a.scans=(a.scans??0)+(t.scans??0),a.maxDurationMs=Math.max(a.maxDurationMs,t.maxDurationMs),a.lastCalledAt=Math.max(a.lastCalledAt,t.lastCalledAt),(t.lastErrorAt??0)>(a.lastErrorAt??0)&&(a.lastErrorAt=t.lastErrorAt,a.lastErrorMessage=t.lastErrorMessage)}return[...e.values()]},$e=s=>{const e=new Map;for(const r of s)for(const t of r){const a=e.get(t.id);if(a===void 0){e.set(t.id,t);continue}const h=re[t.status]-re[a.status];(h>0||h===0&&(t.updatedAt??0)>(a.updatedAt??0))&&e.set(t.id,t)}return[...e.values()]},Ae=j(E.getAuthMetrics),je=j(E.getFunctionStats),Ie=j(E.getLogs),Te=j(E.getMetrics),Pe=j(E.migrationStatus),Re=5,se=2e3,Ce=5,De=.1,Fe=.3,Le=1,Oe=50,_e=(s,e,r)=>s>=r?"crit":s>=e?"warn":"ok",ze=s=>{const e=new Map;for(const t of s??[]){const a=e.get(t.bucketMs)??{calls:0,errors:0};a.calls+=t.calls,a.errors+=t.errors,e.set(t.bucketMs,a)}const r=[...e.entries()].toSorted((t,a)=>t[0]-a[0]);return{errors:r.map(([,t])=>t.errors),requests:r.map(([,t])=>t.calls)}},Ke=s=>{let e=0,r=0;for(const a of s)a.status==="failed"?e+=1:a.status==="in_progress"&&(r+=1);let t="ok";return e>0?t="crit":r>0&&(t="warn"),{failed:e,level:t,running:r}},He=(s,e)=>s.failed>0?e("{count} failed",{count:s.failed.toString()}):s.running>0?e("{count} running",{count:s.running.toString()}):e("OK"),ie={crit:"bg-destructive",ok:"bg-success",warn:"bg-warning"},ce={crit:"text-destructive",ok:"text-foreground",warn:"text-warning"},Ue={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},Be=s=>s.includes("crit")?"crit":s.includes("warn")?"warn":"ok",O=s=>{const e=ae(19),{chart:r,label:t,level:a,testId:h,value:o}=s,n=ie[a];let f;e[0]!==n?(f=$("size-1.5 shrink-0 rounded-full",n),e[0]=n,e[1]=f):f=e[1];let m;e[2]!==f?(m=l("span",{"aria-hidden":"true",className:f}),e[2]=f,e[3]=m):m=e[3];let p;e[4]!==t||e[5]!==m?(p=d("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[m,t]}),e[4]=t,e[5]=m,e[6]=p):p=e[6];const v=ce[a];let i;e[7]!==v?(i=$("truncate text-2xl font-semibold tabular-nums",v),e[7]=v,e[8]=i):i=e[8];let c;e[9]!==i||e[10]!==h||e[11]!==o?(c=l("span",{className:i,"data-testid":h,children:o}),e[9]=i,e[10]=h,e[11]=o,e[12]=c):c=e[12];let g;e[13]!==r||e[14]!==c?(g=d("div",{className:"flex items-center justify-between gap-3",children:[c,r]}),e[13]=r,e[14]=c,e[15]=g):g=e[15];let x;return e[16]!==p||e[17]!==g?(x=l(A,{className:"gap-0 py-0",children:d("div",{className:"flex flex-col gap-2.5 p-4",children:[p,g]})}),e[16]=p,e[17]=g,e[18]=x):x=e[18],x},Ge=async(s,e,r)=>{const t=await Promise.all(r.map(i=>{const c=ee(i);return Promise.allSettled([s.query(Te,{},c),s.query(je,{},c),s.query(Pe,{},c)])})),a=ee(e),h=typeof s.schedulerStatus=="function"?s.schedulerStatus():Promise.reject(new Error("scheduler status unavailable")),[o,n,f]=await Promise.allSettled([s.query(Ie,{},a),s.query(Ae,{},a),h]),m=t.map(([i,c,g])=>({functions:c.status==="fulfilled"?c.value.functions:[],metrics:i.status==="fulfilled"?i.value:null,migrations:g.status==="fulfilled"?g.value.migrations:[]})),p=Ee(m),v=t[0]?.[0];return{auth:n.status==="fulfilled"?n.value:null,entries:o.status==="fulfilled"?o.value.entries:[],functions:Me(m.map(i=>i.functions)),logsError:o.status==="rejected"?te(o.reason):null,metricsError:p.reachable===0&&v?.status==="rejected"?te(v.reason):null,migrations:$e(m.map(i=>i.migrations)),scheduler:f.status==="fulfilled"?f.value:null,totals:p}},Qe=s=>{const e=s?.history??[];return{attempts:e.map(r=>r.attempts),failures:e.map(r=>r.failures)}},dt=({initialShardKey:s})=>{const e=pe(),r=le(),[t,a]=w([]),[h,o]=w(null),[n,f]=w(null),[m,p]=w(null),[v,i]=w([]),[c,g]=w(null),[x,k]=w(null),[S,q]=w([]),[b]=w(ye),y=F(!1),N=F(!0);L(()=>(N.current=!0,()=>{N.current=!1}),[]);const I=s??"",T=ge(async()=>{if(y.current)return;y.current=!0;const u=await Ge(e,I,we(I,b));if(!N.current){y.current=!1;return}f(u.totals),p(u.metricsError),i(u.functions),q(u.migrations),a(u.entries),o(u.logsError),g(u.auth),k(u.scheduler),y.current=!1},[e,b,I]);L(()=>{G(T())},[T]);const K=F(0),M=F(null),de=()=>{const u=Date.now()-K.current;if(u>=se){K.current=Date.now(),G(T());return}M.current===null&&(M.current=setTimeout(()=>{M.current=null,K.current=Date.now(),G(T())},se-u))};L(()=>()=>{M.current!==null&&clearTimeout(M.current)},[]);const{data:W,liveError:ue}=be(E.getMetrics,{},{live:!0,shardKey:I});L(()=>{W!==void 0&&de()},[W]);const Z=t.filter(u=>u.level==="error"),me=Z.slice(0,Re),P=ze(n?.history),J=Qe(c),he=v.filter(u=>u.calls>0).toSorted((u,B)=>B.errors/B.calls-u.errors/u.calls||B.calls-u.calls).slice(0,Ce),H=Ke(S),fe=n===null||n.requests===0?0:n.errors/n.requests,U=V(fe,ne,oe),X=c===null?"ok":V(c.failureRate,De,Fe),Y=x===null?"ok":_e(x.backlog,Le,Oe),R=Be([U,X,Y,H.level]);let C,D;return R==="crit"?(C=r("Critical"),D=r("One or more service levels are breached.")):R==="warn"?(C=r("Degraded"),D=r("Some service levels need attention.")):(C=r("All systems healthy"),D=r("All service levels are within target.")),d("div",{className:"flex flex-col gap-6","data-testid":"lunora-health",children:[d(A,{className:"gap-0 py-0",children:[d("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[d("div",{className:"flex items-center gap-3",children:[l("span",{"aria-hidden":"true",className:$("flex size-10 shrink-0 items-center justify-center rounded-full",Ue[R]),children:l("span",{className:$("size-3 rounded-full",ie[R])})}),d("div",{className:"grid leading-tight",children:[l("span",{className:"text-sm font-semibold text-foreground","data-testid":"hl-status",children:C}),l("span",{className:"text-[13px] text-muted-foreground",children:D})]})]}),d("div",{className:"flex flex-wrap items-center gap-4",children:[d("div",{className:"text-end",children:[l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Requests")}),d("div",{className:"flex items-center justify-end gap-2",children:[P.requests.length>=2&&l(Q,{ariaLabel:r("Requests over time"),className:"h-6 w-20 text-foreground",series:P.requests,testId:"hl-spark-requests"}),l("span",{className:"text-lg font-semibold tabular-nums text-foreground","data-testid":"hl-requests",children:(n?.requests??0).toString()})]})]}),l("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),d("div",{className:"text-end",children:[l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Error rate")}),l("div",{className:$("text-lg font-semibold tabular-nums",ce[U]),"data-testid":"hl-error-rate",children:n===null?"—":_(n.errors,n.requests)})]}),l("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),d("div",{className:"flex items-center gap-2",children:[l(xe,{}),l(ve,{message:ue,prefix:"hl"})]})]})]}),m!==null&&l("div",{className:"border-t border-border bg-destructive/5 px-4 py-2 text-sm text-destructive","data-testid":"hl-metrics-error",role:"alert",children:m}),m===null&&n?.historyTruncated===!0&&l("div",{className:"border-t border-border bg-warning/5 px-4 py-2 text-sm text-muted-foreground","data-testid":"hl-history-truncated",children:r("Showing a partial request/error history — one or more shards have more data than the trend chart can display.")})]}),d("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4","data-testid":"hl-slo",children:[l(O,{chart:P.errors.length>=2?l(Q,{ariaLabel:r("Errors over time"),className:"h-7 w-20 text-destructive",series:P.errors,testId:"hl-spark-errors"}):void 0,label:r("Error rate"),level:U,testId:"hl-slo-errorrate",value:n===null?"—":_(n.errors,n.requests)}),l(O,{chart:J.failures.length>=2?l(Q,{ariaLabel:r("Auth failures over time"),className:"h-7 w-20 text-destructive",series:J.failures,testId:"hl-spark-auth"}):void 0,label:r("Auth failures"),level:X,testId:"hl-slo-auth",value:c===null?"—":_(c.failures,c.attempts)}),l(O,{label:r("Scheduler backlog"),level:Y,testId:"hl-slo-backlog",value:x===null?"—":x.backlog.toString()}),l(O,{label:r("Migrations"),level:H.level,testId:"hl-slo-migrations",value:He(H,r)})]}),l(Se,{errorCount:Z.length,logsError:h,topErrors:me,worstFunctions:he}),d(A,{className:"gap-0 py-0",children:[d("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:r("Shards seen")}),l(z,{"data-testid":"hl-shard-count",variant:"outline",children:b.length})]}),b.length>0&&l("ul",{className:"flex flex-wrap gap-1.5 p-4",children:b.map(u=>l("li",{"data-testid":"hl-shard",children:l(z,{variant:"secondary",children:u})},u))})]})]})};export{dt as HealthPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as
|
|
1
|
+
import{c as P}from"react/compiler-runtime";import{useLunora as te}from"@lunora/react";import{useNavigate as ne}from"@tanstack/react-router";import{useState as H,useRef as ae,useEffectEvent as R,useEffect as D,useCallback as re,useMemo as ie}from"react";import{ShardInput as se}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as oe}from"../packem_shared/button-BkCrNcAs.js";import{N as k}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{S as le}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as M}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as T}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{f as E,d as A,g as C}from"../packem_shared/internal-BSIsQVC6.js";import{r as ce}from"../packem_shared/shard-history-DMEW5VBE.js";import{E as U,A as de}from"../packem_shared/advisor-view-Pa8HLtBv.js";import{ConfirmButton as ue}from"../packem_shared/ConfirmButton-CTL3f3kr.js";import{jsx as S}from"react/jsx-runtime";import{deriveInsights as fe}from"../packem_shared/DEFAULT_INSIGHT_THRESHOLDS-B-hcFVoi.js";import{runAdvisor as he,RUNTIME_LINTS as me}from"@lunora/advisor";const pe=t=>{const{suggestedIndex:e,table:r}=t;return!(typeof r!="string"||r.length===0||typeof e!="object"||e===null||!Array.isArray(e.fields)||e.fields.length===0)},ge=(t,e,r)=>{const n=`"${t}"`,a=`"${e}"`,o=r.map(l=>`"${l}"`).join(", ");return`CREATE INDEX IF NOT EXISTS ${a} ON ${n} (${o});`},be=t=>{const e=P(19),{fields:r,indexName:n,table:a,testId:o}=t,l=M(),[$,h]=H(!1);let d;e[0]!==r||e[1]!==n||e[2]!==a?(d=()=>{const v="navigator"in globalThis?globalThis.navigator.clipboard:void 0;if(v===void 0)return;const x=ge(a,n,r);E(v.writeText(x)),h(!0)},e[0]=r,e[1]=n,e[2]=a,e[3]=d):d=e[3];const g=d;if($){const v=`${o}-applied`;let x;e[4]!==l?(x=l("CREATE INDEX SQL copied to clipboard."),e[4]=l,e[5]=x):x=e[5];let w;return e[6]!==v||e[7]!==x?(w=S("span",{className:"text-xs text-muted-foreground","data-testid":v,children:x}),e[6]=v,e[7]=x,e[8]=w):w=e[8],w}let y;e[9]!==l?(y=l("Apply?"),e[9]=l,e[10]=y):y=e[10];let u;e[11]!==l||e[12]!==a?(u=l("Apply index on {table}",{table:a}),e[11]=l,e[12]=a,e[13]=u):u=e[13];let b;return e[14]!==g||e[15]!==y||e[16]!==u||e[17]!==o?(b=S(ue,{confirmLabel:y,onConfirm:g,testId:o,children:u}),e[14]=g,e[15]=y,e[16]=u,e[17]=o,e[18]=b):b=e[18],b},xe=(t,e)=>{const r=new Map;for(const n of e){const a=`${n.table} ${n.index}`;r.set(a,(r.get(a)??0)+n.reads)}return t.map(n=>({index:n.index,reads:r.get(`${n.table} ${n.index}`)??0,table:n.table}))},ye=t=>{const e=new Map;for(const r of t)for(const n of r.scannedTables??[])e.set(n.table,(e.get(n.table)??0)+n.scans);return[...e].map(([r,n])=>({scans:n,table:r}))},X=(t,e)=>e.map(r=>({index:r.name,table:t})),ve=t=>{const e=xe(t.declaredIndexes??[],t.indexHits??[]),r=ye(t.functions??[]),n=t.shardTraffic??[],a=t.analyticsMetrics,o=a&&a.indexHits.length>0?a.indexHits:e,l=a&&a.tableScans.length>0?a.tableScans:r,$=a&&a.shardTraffic.length>0?a.shardTraffic:n,h=he({indexHits:o,schema:{tables:[]},shardTraffic:$,tableScans:l},{lints:me,source:"runtime"}),d=t.suppressHotScanTables;return(d===void 0?h:h.filter(g=>!(g.metadata.kind==="hot_scan"&&typeof g.metadata.table=="string"&&d.has(g.metadata.table)))).map(g=>U(g))},$e=C(T.listTables),Se=C(T.listTableIndexes),we=C(T.listTablesIndexes),K=t=>`${(t*100).toFixed(1)}%`,B=t=>`${(t/1e3).toFixed(2)}s`,Te=t=>{if(t.length<=1)return t[0]??"";const e=t[t.length-1]??"";return`${t.slice(0,-1).join(", ")} and ${e}`},Ie=(t,e)=>({"high-error-rate":t("High error rate"),"high-evictions":t("High cache eviction rate"),"high-write-contention":t("High write contention"),"low-cache-hit-rate":t("Low cache hit rate"),"missing-index":t("Missing index"),"slow-function":t("Slow function")})[e.kind],J=(t,e)=>({"high-error-rate":t("{rate} of calls failed.",{rate:K(e.value)}),"high-evictions":t("{count} entries evicted recently.",{count:e.value}),"high-write-contention":t("{rate} of calls hit a write conflict — consider sharding to cut contention.",{rate:K(e.value)}),"low-cache-hit-rate":t("{rate} hit rate over recent traffic.",{rate:K(e.value)}),"missing-index":t("Slowest call took {duration} — it full-scanned {tables} with no index.",{duration:B(e.value),tables:Te(e.tables??[])}),"slow-function":t("Slowest call took {duration}.",{duration:B(e.value)})})[e.kind],Ee=t=>{const e=P(10),{onJump:r,table:n}=t,a=M();let o;e[0]!==r||e[1]!==n?(o=()=>{r(n)},e[0]=r,e[1]=n,e[2]=o):o=e[2];const l=o,$=`in-add-index-${n}`;let h;e[3]!==a||e[4]!==n?(h=a("Add index on {table}",{table:n}),e[3]=a,e[4]=n,e[5]=h):h=e[5];let d;return e[6]!==l||e[7]!==$||e[8]!==h?(d=S(oe,{"data-testid":$,onClick:l,size:"sm",type:"button",variant:"outline",children:h}),e[6]=l,e[7]=$,e[8]=h,e[9]=d):d=e[9],d},Je=({initialShardKey:t,loadShardTraffic:e})=>{const r=te(),n=ne(),a=M(),{queryShardKey:o,setShardKey:l,shardKey:$}=le(t),[h,d]=H(null),[g,y]=H(null),u=ae(""),b=k(T.getMetrics,{},{live:!0,shardKey:o}),v=k(T.getFunctionStats,{},{live:!0,shardKey:o}),x=k(T.getAdvisories,{},{live:!0,shardKey:o}),w=b.data??null,L=v.data?.functions??null,_=x.data?.advisories??null,z=b.data?.indexHits??null,q=b.error!==null&&v.error!==null?b.error:null,Q=e??(i=>r.shardTraffic(i)),V=async(i,m)=>{const s=i[0];if(s===void 0||s===""){u.current===m&&y(null);return}try{const f=await Q(s);if(u.current!==m)return;const c=new Map;for(const p of f.shards)c.has(p.shardKey)||c.set(p.shardKey,{requests:p.requests,shardKey:p.shardKey});y([...c.values()])}catch{u.current===m&&y(null)}},G=async(i,m)=>{const s=await Promise.allSettled(i.map(async c=>[c,await r.query(Se,{table:c},A(m))])),f=[];for(const c of s)if(c.status==="fulfilled"){const[p,I]=c.value;f.push(...X(p,I.indexes))}return f},F=R(async i=>{u.current=i;let m=[];try{const s=await r.query($e,{},A(i));if(u.current!==i)return;ce(i),m=s.map(c=>c.name);let f=[];if(m.length>0)try{const c=await r.query(we,{tables:m},A(i));if(u.current!==i)return;for(const[p,I]of Object.entries(c.indexesByTable))f.push(...X(p,I))}catch{if(f=await G(m,i),u.current!==i)return}d(f)}catch{u.current===i&&d(null)}await V(m,i)});D(()=>{E(F(o))},[o]);const W=R(()=>{b.refetch(),v.refetch(),x.refetch(),E(F(o))});D(()=>{const i=()=>{document.visibilityState==="visible"&&W()};return document.addEventListener("visibilitychange",i),()=>{document.removeEventListener("visibilitychange",i)}},[]);const j=re(i=>{E(n({search:{table:i},to:"/schema"}))},[n]),N=fe(w,L),Y=new Set(N.filter(i=>i.kind==="missing-index").flatMap(i=>i.tables??[])),O=ve({declaredIndexes:h??[],functions:L,indexHits:z,shardTraffic:g,suppressHotScanTables:Y}),Z=ie(()=>{const i=N.map(s=>{const f=s.kind==="missing-index"?s.tables??[]:[];return{action:f.length>0?f.map(c=>S(Ee,{onJump:j,table:c},c)):void 0,description:s.message===void 0?J(a,s):`${J(a,s)} — ${s.message}`,entity:s.fn,issueType:Ie(a,s),key:`${s.kind}:${s.fn??""}`,level:s.severity}}),m=new Set(["unindexed_foreign_key","unindexed_relation_target"]);return[...(_??[]).map(s=>{const f=U(s);if(m.has(s.name)&&pe(s.metadata)){const{table:c,suggestedIndex:p}=s.metadata,I=`in-apply-index-${c}-${p.name}`;return{...f,action:S(be,{fields:p.fields,indexName:p.name,table:c,testId:I})}}return f}),...O,...i]},[_,N,j,O,a]),ee=S(se,{onChange:l,testId:"in-shard-input",value:$});return S(de,{error:q,errorSource:q===null?void 0:b.errorSource,rows:Z,testId:"lunora-insights",toolbar:ee})};export{Je as InsightsPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as M}from"react/compiler-runtime";import{useVirtualizer as we}from"@tanstack/react-virtual";import{useState as F,useReducer as Ne,useRef as me,useEffect as he,useMemo as Ce}from"react";import{f as re}from"../packem_shared/log-fields-CoL3hsIQ.js";import{E as Le}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as le}from"../packem_shared/badge-BbuuAio7.js";import{E as Z}from"../packem_shared/empty-state-Cg7t_8qu.js";import{N as ne}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import ee from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as z}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as se}from"../packem_shared/ADMIN_FUNCTIONS-CZESgd10.js";import{r as Se}from"../packem_shared/shard-history-DMEW5VBE.js";import{l as ke}from"../packem_shared/virtual-rect-1o1veP7R.js";import{useLunora as $e}from"@lunora/react";import{u as Re}from"../packem_shared/button-BkCrNcAs.js";import{u as j}from"../packem_shared/input-JHu63lTv.js";import{n as Ie,d as Pe,m as ge,p as D,f as Te,u as V}from"../packem_shared/table-DdJBrClo.js";import{a as fe}from"../packem_shared/cf-links-Dmg86v1D.js";import{f as ie,l as Ee,b as de}from"../packem_shared/internal-BSIsQVC6.js";import{jsx as r,jsxs as T,Fragment as Fe}from"react/jsx-runtime";import{c as G}from"../packem_shared/utils-bhneXptQ.js";import{L as qe}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as _e}from"../packem_shared/ShardInput-BVn2iCU0.js";const ae=["trace","debug","log","info","warn","error","fatal"],Ae="LOG_ARCHIVE_NOT_CONFIGURED",pe={debug:"secondary",error:"destructive",fatal:"destructive",info:"outline",log:"outline",trace:"outline",warn:"secondary"},Oe={cursor:void 0,error:null,loading:!1,notConfigured:!1,rows:null},Me=(i,e)=>{switch(e.type){case"append":return{...i,cursor:e.cursor,error:null,loading:!1,rows:[...i.rows??[],...e.rows]};case"failed":return{cursor:void 0,error:e.message,loading:!1,notConfigured:!1,rows:null};case"loaded":return{cursor:e.cursor,error:null,loading:!1,notConfigured:!1,rows:e.rows};case"loading":return{...i,error:null,loading:!0,notConfigured:!1};case"notConfigured":return{cursor:void 0,error:null,loading:!1,notConfigured:!0,rows:null};case"pageFailed":return{...i,error:e.message,loading:!1};default:return i}},Ke=i=>{const e=M(33),{row:t}=i;let n;e[0]!==t.fields?(n=re(t.fields),e[0]=t.fields,e[1]=n):n=e[1];const c=n,o=`lg-archive-row-${String(t.ts)}`;let m;e[2]!==t.ts?(m=new Date(t.ts).toLocaleString(),e[2]=t.ts,e[3]=m):m=e[3];let p;e[4]!==m?(p=r(V,{className:"tabular-nums whitespace-nowrap text-xs text-muted-foreground",children:m}),e[4]=m,e[5]=p):p=e[5];const g=pe[t.level];let s;e[6]!==t.level||e[7]!==g?(s=r(V,{children:r(le,{variant:g,children:t.level})}),e[6]=t.level,e[7]=g,e[8]=s):s=e[8];let l;e[9]!==t.functionPath?(l=r(V,{className:"font-mono text-xs",children:t.functionPath}),e[9]=t.functionPath,e[10]=l):l=e[10];let v;e[11]!==t.message?(v=r("div",{className:"truncate",title:t.message,children:t.message}),e[11]=t.message,e[12]=v):v=e[12];let a;e[13]!==c?(a=c!==""&&r("div",{className:"truncate font-mono text-[11px] text-muted-foreground",title:c,children:c}),e[13]=c,e[14]=a):a=e[14];let d;e[15]!==v||e[16]!==a?(d=T(V,{className:"max-w-md",children:[v,a]}),e[15]=v,e[16]=a,e[17]=d):d=e[17];const u=t.traceId??"—";let h;e[18]!==u?(h=r(V,{className:"font-mono text-[11px] text-muted-foreground",children:u}),e[18]=u,e[19]=h):h=e[19];const x=t.shardKey??"—";let f;e[20]!==x?(f=r(V,{className:"font-mono text-[11px] text-muted-foreground",children:x}),e[20]=x,e[21]=f):f=e[21];const b=t.userId??"—";let y;e[22]!==b?(y=r(V,{className:"font-mono text-[11px] text-muted-foreground",children:b}),e[22]=b,e[23]=y):y=e[23];let C;return e[24]!==d||e[25]!==h||e[26]!==f||e[27]!==y||e[28]!==o||e[29]!==p||e[30]!==s||e[31]!==l?(C=T(ge,{"data-testid":o,children:[p,s,l,d,h,f,y]}),e[24]=d,e[25]=h,e[26]=f,e[27]=y,e[28]=o,e[29]=p,e[30]=s,e[31]=l,e[32]=C):C=e[32],C},Ue=({shardKey:i})=>{const e=$e(),t=z(),[n,c]=F(""),[o,m]=F(""),[p,g]=F(""),[{cursor:s,error:l,loading:v,notConfigured:a,rows:d},u]=Ne(Me,Oe),h=ee(n.trim(),400),x=ee(o.trim(),400),f={...h===""?{}:{functionPathPrefix:h},...p===""?{}:{minLevel:p},...i===""?{}:{shardKey:i},...x===""?{}:{userId:x}},b=JSON.stringify(f),y=me(b);he(()=>{const w={cancelled:!1};return y.current=b,ie((async()=>{u({type:"loading"});try{const N=await e.queryLogArchive(f);w.cancelled||u({cursor:N.nextCursor,rows:N.rows,type:"loaded"})}catch(N){w.cancelled||u(Ee(N)===Ae?{type:"notConfigured"}:{message:de(N),type:"failed"})}})()),()=>{w.cancelled=!0}},[e,b]);const C=async()=>{if(s===void 0)return;const w=b;u({type:"loading"});try{const N=await e.queryLogArchive({...f,cursor:s});y.current===w&&u({cursor:N.nextCursor,rows:N.rows,type:"append"})}catch(N){y.current===w&&u({message:de(N),type:"pageFailed"})}},$=w=>{c(w.target.value)},L=w=>{m(w.target.value)},k=w=>{g(w.target.value)},R=()=>{ie(C())};return a?r(Z,{action:r("a",{className:"text-sm text-primary underline-offset-4 hover:underline",href:fe,rel:"noreferrer",target:"_blank",children:t("Open in Cloudflare")}),description:t("Wire pipelineLogSink to a Cloudflare Pipeline → R2 Data Catalog table and set R2_SQL_ACCOUNT_ID, R2_SQL_TOKEN, R2_SQL_BUCKET to browse the durable log archive here."),testId:"lg-archive-not-configured",title:t("Log archive not configured")}):T("div",{className:"flex flex-col gap-4","data-testid":"lg-archive",children:[T("div",{className:"flex flex-wrap items-center gap-2",children:[r(j,{"aria-label":t("Function path prefix"),className:"h-8 w-48","data-testid":"lg-archive-path",onChange:$,placeholder:t("function path…"),value:n}),r(j,{"aria-label":t("User id"),className:"h-8 w-40","data-testid":"lg-archive-user",onChange:L,placeholder:t("user id…"),value:o}),T("select",{"aria-label":t("Minimum level"),className:"h-8 rounded-md border border-border bg-background px-2 text-sm","data-testid":"lg-archive-min-level",onChange:k,value:p,children:[r("option",{value:"",children:t("min level")}),ae.map(w=>r("option",{value:w,children:w},w))]})]}),l!==null&&r("p",{className:"text-sm text-destructive","data-testid":"lg-archive-error",role:"alert",children:l}),v&&d===null&&l===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"lg-archive-loading",children:t("Loading…")}),d!==null&&d.length===0&&r(Z,{description:t("No archived logs match these filters. The durable archive fills as pipelineLogSink flushes records to R2."),testId:"lg-archive-empty",title:t("No archived logs.")}),d!==null&&d.length>0&&r("div",{className:"overflow-hidden rounded-xl border border-border shadow-xs",children:T(Ie,{"data-testid":"lg-archive-table",children:[r(Pe,{children:T(ge,{children:[r(D,{children:t("Time")}),r(D,{children:t("Level")}),r(D,{children:t("Function")}),r(D,{children:t("Message")}),r(D,{children:t("Trace")}),r(D,{children:t("Shard")}),r(D,{children:t("User")})]})}),r(Te,{children:d.map((w,N)=>r(Ke,{row:w},`${String(w.ts)}-${String(N)}`))})]})}),s!==void 0&&r("div",{children:r(Re,{"data-testid":"lg-archive-more",disabled:v,onClick:R,size:"sm",variant:"outline",children:t(v?"Loading…":"Load more")})})]})},De=i=>{const e=M(11),{level:t,onToggle:n,selected:c}=i;let o;e[0]!==t||e[1]!==n?(o=()=>{n(t)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const m=o,p=c?"border-border bg-muted font-medium":"border-input text-muted-foreground";let g;e[3]!==p?(g=G("rounded-md border px-2 py-1 text-xs",p),e[3]=p,e[4]=g):g=e[4];const s=`logs-level-${t}`;let l;return e[5]!==t||e[6]!==m||e[7]!==c||e[8]!==g||e[9]!==s?(l=r("button",{"aria-pressed":c,className:g,"data-testid":s,onClick:m,type:"button",children:t}),e[5]=t,e[6]=m,e[7]=c,e[8]=g,e[9]=s,e[10]=l):l=e[10],l},Ve=i=>{const e=M(68),{levelFilter:t,onLogPathChange:n,onSearchChange:c,onTimeRangeChange:o,onToggleLevel:m,onToggleSummary:p,pathFilter:g,search:s,showSummary:l,timeRange:v}=i,a=z();let d;e[0]!==a?(d=a("Search messages"),e[0]=a,e[1]=d):d=e[1];let u;e[2]!==a?(u=a("search message"),e[2]=a,e[3]=u):u=e[3];let h;e[4]!==c||e[5]!==s||e[6]!==d||e[7]!==u?(h=r(j,{"aria-label":d,className:"h-8 w-48","data-testid":"lg-search",onChange:c,placeholder:u,value:s}),e[4]=c,e[5]=s,e[6]=d,e[7]=u,e[8]=h):h=e[8];let x;e[9]!==a?(x=a("Function path"),e[9]=a,e[10]=x):x=e[10];let f;e[11]!==a?(f=a("filter path"),e[11]=a,e[12]=f):f=e[12];let b;e[13]!==n||e[14]!==g||e[15]!==x||e[16]!==f?(b=r(j,{"aria-label":x,className:"h-8 w-40","data-testid":"logs-path-filter",onChange:n,placeholder:f,value:g}),e[13]=n,e[14]=g,e[15]=x,e[16]=f,e[17]=b):b=e[17];let y;e[18]!==a?(y=a("Level filter"),e[18]=a,e[19]=y):y=e[19];let C;e[20]!==t||e[21]!==m?(C=ae.map(U=>r(De,{level:U,onToggle:m,selected:t.has(U)},U)),e[20]=t,e[21]=m,e[22]=C):C=e[22];let $;e[23]!==y||e[24]!==C?($=r("div",{"aria-label":y,className:"inline-flex items-center gap-1","data-testid":"logs-level-filter",role:"group",children:C}),e[23]=y,e[24]=C,e[25]=$):$=e[25];let L;e[26]!==a?(L=a("Time range"),e[26]=a,e[27]=L):L=e[27];let k;e[28]!==a?(k=a("All time"),e[28]=a,e[29]=k):k=e[29];let R;e[30]!==k?(R=r("option",{value:"all",children:k}),e[30]=k,e[31]=R):R=e[31];let w;e[32]!==a?(w=a("Last 5m"),e[32]=a,e[33]=w):w=e[33];let N;e[34]!==w?(N=r("option",{value:"5m",children:w}),e[34]=w,e[35]=N):N=e[35];let I;e[36]!==a?(I=a("Last 15m"),e[36]=a,e[37]=I):I=e[37];let P;e[38]!==I?(P=r("option",{value:"15m",children:I}),e[38]=I,e[39]=P):P=e[39];let E;e[40]!==a?(E=a("Last hour"),e[40]=a,e[41]=E):E=e[41];let q;e[42]!==E?(q=r("option",{value:"1h",children:E}),e[42]=E,e[43]=q):q=e[43];let A;e[44]!==o||e[45]!==L||e[46]!==R||e[47]!==N||e[48]!==P||e[49]!==q||e[50]!==v?(A=T("select",{"aria-label":L,className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"logs-time-range",onChange:o,value:v,children:[R,N,P,q]}),e[44]=o,e[45]=L,e[46]=R,e[47]=N,e[48]=P,e[49]=q,e[50]=v,e[51]=A):A=e[51];const W=l?"border-border bg-muted font-medium":"border-input text-muted-foreground";let K;e[52]!==W?(K=G("h-8 rounded-md border px-3 text-sm",W),e[52]=W,e[53]=K):K=e[53];let O;e[54]!==l||e[55]!==a?(O=a(l?"List":"Summary"),e[54]=l,e[55]=a,e[56]=O):O=e[56];let _;e[57]!==p||e[58]!==l||e[59]!==K||e[60]!==O?(_=r("button",{"aria-pressed":l,className:K,"data-testid":"logs-summary-toggle",onClick:p,type:"button",children:O}),e[57]=p,e[58]=l,e[59]=K,e[60]=O,e[61]=_):_=e[61];let B;return e[62]!==A||e[63]!==_||e[64]!==h||e[65]!==b||e[66]!==$?(B=T("div",{className:"flex flex-wrap items-center gap-2",children:[h,b,$,A,_]}),e[62]=A,e[63]=_,e[64]=h,e[65]=b,e[66]=$,e[67]=B):B=e[67],B},je=i=>{const e=M(53),{onOutcomeChange:t,onPathChange:n,onTableChange:c,onUserChange:o,outcomeFilter:m,pathPrefix:p,tableFilter:g,userIdFilter:s}=i,l=z();let v;e[0]!==l?(v=l("Function path"),e[0]=l,e[1]=v):v=e[1];let a;e[2]!==l?(a=l("file:function"),e[2]=l,e[3]=a):a=e[3];let d;e[4]!==n||e[5]!==p||e[6]!==v||e[7]!==a?(d=r(j,{"aria-label":v,className:"h-8 w-44","data-testid":"lg-req-path",onChange:n,placeholder:a,value:p}),e[4]=n,e[5]=p,e[6]=v,e[7]=a,e[8]=d):d=e[8];let u;e[9]!==l?(u=l("User id"),e[9]=l,e[10]=u):u=e[10];let h;e[11]!==l?(h=l("userId"),e[11]=l,e[12]=h):h=e[12];let x;e[13]!==o||e[14]!==u||e[15]!==h||e[16]!==s?(x=r(j,{"aria-label":u,className:"h-8 w-32","data-testid":"lg-req-user",onChange:o,placeholder:h,value:s}),e[13]=o,e[14]=u,e[15]=h,e[16]=s,e[17]=x):x=e[17];let f;e[18]!==l?(f=l("Table touched"),e[18]=l,e[19]=f):f=e[19];let b;e[20]!==l?(b=l("table"),e[20]=l,e[21]=b):b=e[21];let y;e[22]!==c||e[23]!==f||e[24]!==b||e[25]!==g?(y=r(j,{"aria-label":f,className:"h-8 w-32","data-testid":"lg-req-table",onChange:c,placeholder:b,value:g}),e[22]=c,e[23]=f,e[24]=b,e[25]=g,e[26]=y):y=e[26];let C;e[27]!==l?(C=l("Outcome filter"),e[27]=l,e[28]=C):C=e[28];let $;e[29]!==l?($=l("all"),e[29]=l,e[30]=$):$=e[30];let L;e[31]!==$?(L=r("option",{value:"all",children:$}),e[31]=$,e[32]=L):L=e[32];let k;e[33]!==l?(k=l("ok"),e[33]=l,e[34]=k):k=e[34];let R;e[35]!==k?(R=r("option",{value:"ok",children:k}),e[35]=k,e[36]=R):R=e[36];let w;e[37]!==l?(w=l("error"),e[37]=l,e[38]=w):w=e[38];let N;e[39]!==w?(N=r("option",{value:"error",children:w}),e[39]=w,e[40]=N):N=e[40];let I;e[41]!==t||e[42]!==m||e[43]!==C||e[44]!==L||e[45]!==R||e[46]!==N?(I=T("select",{"aria-label":C,className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"lg-req-outcome",onChange:t,value:m,children:[L,R,N]}),e[41]=t,e[42]=m,e[43]=C,e[44]=L,e[45]=R,e[46]=N,e[47]=I):I=e[47];let P;return e[48]!==I||e[49]!==d||e[50]!==x||e[51]!==y?(P=T("div",{className:"flex flex-wrap items-center gap-2",children:[d,x,y,I]}),e[48]=I,e[49]=d,e[50]=x,e[51]=y,e[52]=P):P=e[52],P},ve=i=>{const e=M(7),{bucket:t}=i;let n;e[0]!==t.key?(n=r("span",{className:"truncate text-muted-foreground",role:"gridcell",children:t.key}),e[0]=t.key,e[1]=n):n=e[1];let c;e[2]!==t.count?(c=r("span",{className:"shrink-0 tabular-nums",role:"gridcell",children:t.count}),e[2]=t.count,e[3]=c):c=e[3];let o;return e[4]!==n||e[5]!==c?(o=T("div",{className:"flex items-center justify-between gap-4 px-3 py-1 font-mono text-xs","data-testid":"logs-summary-row",role:"row",children:[n,c]}),e[4]=n,e[5]=c,e[6]=o):o=e[6],o},Be=i=>{const e=M(31),{summary:t}=i,n=z();let c;e[0]!==t.total||e[1]!==n?(c=n("{count} entries",{count:t.total}),e[0]=t.total,e[1]=n,e[2]=c):c=e[2];let o;e[3]!==c?(o=r("p",{className:"text-xs text-muted-foreground","data-testid":"logs-summary-total",children:c}),e[3]=c,e[4]=o):o=e[4];let m;e[5]!==n?(m=n("By level"),e[5]=n,e[6]=m):m=e[6];let p;e[7]!==m?(p=r("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:m}),e[7]=m,e[8]=p):p=e[8];let g;e[9]!==t.byLevel?(g=t.byLevel.map(ze),e[9]=t.byLevel,e[10]=g):g=e[10];let s;e[11]!==g?(s=r("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-levels",role:"grid",children:g}),e[11]=g,e[12]=s):s=e[12];let l;e[13]!==p||e[14]!==s?(l=T("div",{children:[p,s]}),e[13]=p,e[14]=s,e[15]=l):l=e[15];let v;e[16]!==n?(v=n("By function"),e[16]=n,e[17]=v):v=e[17];let a;e[18]!==v?(a=r("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:v}),e[18]=v,e[19]=a):a=e[19];let d;e[20]!==t.byPath?(d=t.byPath.map(We),e[20]=t.byPath,e[21]=d):d=e[21];let u;e[22]!==d?(u=r("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-paths",role:"grid",children:d}),e[22]=d,e[23]=u):u=e[23];let h;e[24]!==u||e[25]!==a?(h=T("div",{children:[a,u]}),e[24]=u,e[25]=a,e[26]=h):h=e[26];let x;return e[27]!==h||e[28]!==o||e[29]!==l?(x=T("div",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"logs-summary",children:[o,l,h]}),e[27]=h,e[28]=o,e[29]=l,e[30]=x):x=e[30],x};function ze(i){return r(ve,{bucket:i},i.key)}function We(i){return r(ve,{bucket:i},i.key)}const Ge=i=>{const e=M(46),{liveError:t,onShardKeyChange:n,onShowArchive:c,onShowErrors:o,onShowRequests:m,shardKey:p,view:g}=i,s=z(),l=g==="requests",v=g==="requests"?"bg-muted font-medium":"text-muted-foreground";let a;e[0]!==v?(a=G("px-3 py-1 text-sm",v),e[0]=v,e[1]=a):a=e[1];let d;e[2]!==s?(d=s("Requests"),e[2]=s,e[3]=d):d=e[3];let u;e[4]!==m||e[5]!==l||e[6]!==a||e[7]!==d?(u=r("button",{"aria-selected":l,className:a,"data-testid":"lg-view-requests",onClick:m,role:"tab",type:"button",children:d}),e[4]=m,e[5]=l,e[6]=a,e[7]=d,e[8]=u):u=e[8];const h=g==="errors",x=g==="errors"?"bg-muted font-medium":"text-muted-foreground";let f;e[9]!==x?(f=G("px-3 py-1 text-sm",x),e[9]=x,e[10]=f):f=e[10];let b;e[11]!==s?(b=s("Errors"),e[11]=s,e[12]=b):b=e[12];let y;e[13]!==o||e[14]!==h||e[15]!==f||e[16]!==b?(y=r("button",{"aria-selected":h,className:f,"data-testid":"lg-view-errors",onClick:o,role:"tab",type:"button",children:b}),e[13]=o,e[14]=h,e[15]=f,e[16]=b,e[17]=y):y=e[17];const C=g==="archive",$=g==="archive"?"bg-muted font-medium":"text-muted-foreground";let L;e[18]!==$?(L=G("px-3 py-1 text-sm",$),e[18]=$,e[19]=L):L=e[19];let k;e[20]!==s?(k=s("Archive"),e[20]=s,e[21]=k):k=e[21];let R;e[22]!==c||e[23]!==C||e[24]!==L||e[25]!==k?(R=r("button",{"aria-selected":C,className:L,"data-testid":"lg-view-archive",onClick:c,role:"tab",type:"button",children:k}),e[22]=c,e[23]=C,e[24]=L,e[25]=k,e[26]=R):R=e[26];let w;e[27]!==y||e[28]!==R||e[29]!==u?(w=T("div",{className:"inline-flex overflow-hidden rounded-lg border border-border",role:"tablist",children:[u,y,R]}),e[27]=y,e[28]=R,e[29]=u,e[30]=w):w=e[30];let N;e[31]!==n||e[32]!==p?(N=r(_e,{onChange:n,testId:"lg-shard-input",value:p}),e[31]=n,e[32]=p,e[33]=N):N=e[33];let I;e[34]!==t||e[35]!==g?(I=g!=="archive"&&r(qe,{message:t,prefix:"lg"}),e[34]=t,e[35]=g,e[36]=I):I=e[36];let P;e[37]!==s?(P=s("Open in Cloudflare"),e[37]=s,e[38]=P):P=e[38];let E;e[39]!==P?(E=r("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"lg-cf-link",href:fe,rel:"noreferrer",target:"_blank",children:P}),e[39]=P,e[40]=E):E=e[40];let q;return e[41]!==w||e[42]!==N||e[43]!==I||e[44]!==E?(q=T("div",{className:"flex flex-wrap items-center gap-2",children:[w,N,I,E]}),e[41]=w,e[42]=N,e[43]=I,e[44]=E,e[45]=q):q=e[45],q},te=400,Qe=36,Ye={height:te,overflow:"auto"},be={left:0,position:"absolute",top:0,width:"100%"},He={error:"destructive",ok:"secondary"},Je=i=>{const e=M(26),{entry:t,index:n,measureRef:c,start:o}=i,m=`translateY(${String(o)}px)`;let p;e[0]!==m?(p={...be,transform:m},e[0]=m,e[1]=p):p=e[1];const g=p;let s;e[2]!==t.fields?(s=re(t.fields),e[2]=t.fields,e[3]=s):s=e[3];const l=s;let v;e[4]!==t.timestamp?(v=new Date(t.timestamp).toLocaleString(),e[4]=t.timestamp,e[5]=v):v=e[5];let a;e[6]!==v?(a=r("span",{className:"w-44 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:v}),e[6]=v,e[7]=a):a=e[7];const d=pe[t.level];let u;e[8]!==t.level||e[9]!==d?(u=r("span",{className:"w-20 shrink-0",role:"gridcell",children:r(le,{variant:d,children:t.level})}),e[8]=t.level,e[9]=d,e[10]=u):u=e[10];const h=t.functionPath??"—";let x;e[11]!==h?(x=r("span",{className:"w-48 shrink-0 truncate text-muted-foreground",role:"gridcell",children:h}),e[11]=h,e[12]=x):x=e[12];let f;e[13]!==l?(f=l===""?null:r("span",{className:"ml-2 text-muted-foreground","data-testid":"lg-fields",children:l}),e[13]=l,e[14]=f):f=e[14];let b;e[15]!==t.message||e[16]!==f?(b=T("span",{className:"flex-1 truncate",role:"gridcell",children:[t.message,f]}),e[15]=t.message,e[16]=f,e[17]=b):b=e[17];let y;return e[18]!==n||e[19]!==c||e[20]!==g||e[21]!==b||e[22]!==a||e[23]!==u||e[24]!==x?(y=T("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":n,"data-testid":"lg-row",ref:c,role:"row",style:g,children:[a,u,x,b]}),e[18]=n,e[19]=c,e[20]=g,e[21]=b,e[22]=a,e[23]=u,e[24]=x,e[25]=y):y=e[25],y},ce=i=>i.length===0?"—":i.join(", "),Xe=i=>{const e=M(37),{entry:t,index:n,measureRef:c,start:o}=i,m=`translateY(${String(o)}px)`;let p;e[0]!==m?(p={...be,transform:m},e[0]=m,e[1]=p):p=e[1];const g=p;let s;e[2]!==t.ts?(s=new Date(t.ts).toLocaleString(),e[2]=t.ts,e[3]=s):s=e[3];let l;e[4]!==s?(l=r("span",{className:"w-40 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:s}),e[4]=s,e[5]=l):l=e[5];const v=He[t.outcome];let a;e[6]!==t.outcome||e[7]!==v?(a=r("span",{className:"w-16 shrink-0",role:"gridcell",children:r(le,{variant:v,children:t.outcome})}),e[6]=t.outcome,e[7]=v,e[8]=a):a=e[8];let d;e[9]!==t.functionPath?(d=r("span",{className:"w-44 shrink-0 truncate",role:"gridcell",title:t.functionPath,children:t.functionPath}),e[9]=t.functionPath,e[10]=d):d=e[10];const u=t.shardKey??"—";let h;e[11]!==u?(h=r("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:u}),e[11]=u,e[12]=h):h=e[12];const x=t.userId??"—";let f;e[13]!==x?(f=r("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:x}),e[13]=x,e[14]=f):f=e[14];let b;e[15]!==t.durationMs?(b=Math.round(t.durationMs),e[15]=t.durationMs,e[16]=b):b=e[16];const y=`${String(b)}ms`;let C;e[17]!==y?(C=r("span",{className:"w-16 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:y}),e[17]=y,e[18]=C):C=e[18];let $;e[19]!==t.errorMessage||e[20]!==t.outcome||e[21]!==t.tablesRead||e[22]!==t.tablesWritten?($=t.outcome==="error"&&t.errorMessage!==void 0?t.errorMessage:`r:${ce(t.tablesRead)} · w:${ce(t.tablesWritten)}`,e[19]=t.errorMessage,e[20]=t.outcome,e[21]=t.tablesRead,e[22]=t.tablesWritten,e[23]=$):$=e[23];let L;e[24]!==$?(L=r("span",{className:"flex-1 truncate text-muted-foreground",role:"gridcell",children:$}),e[24]=$,e[25]=L):L=e[25];let k;return e[26]!==n||e[27]!==c||e[28]!==g||e[29]!==f||e[30]!==C||e[31]!==L||e[32]!==l||e[33]!==a||e[34]!==d||e[35]!==h?(k=T("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":n,"data-testid":"lg-req-row",ref:c,role:"row",style:g,children:[l,a,d,h,f,C,L]}),e[26]=n,e[27]=c,e[28]=g,e[29]=f,e[30]=C,e[31]=L,e[32]=l,e[33]=a,e[34]=d,e[35]=h,e[36]=k):k=e[36],k},ue=i=>{const{entries:e}=i??{};return Array.isArray(e)?e:[]},Ze=i=>{const e={};return i.functionPathPrefix.trim()!==""&&(e.functionPathPrefix=i.functionPathPrefix.trim()),i.userId.trim()!==""&&(e.userId=i.userId.trim()),i.tableTouched.trim()!==""&&(e.tableTouched=i.tableTouched.trim()),(i.outcome==="ok"||i.outcome==="error")&&(e.outcome=i.outcome),e},et={"5m":300*1e3,"15m":900*1e3,"1h":3600*1e3},tt=(i,e)=>{const t=e.search.trim().toLowerCase(),n=e.path.trim().toLowerCase(),c=e.range==="all"?Number.NEGATIVE_INFINITY:e.now-et[e.range];return i.filter(o=>e.levels.size>0&&!e.levels.has(o.level)||o.timestamp<c||n!==""&&!(o.functionPath??"").toLowerCase().includes(n)?!1:t===""||o.message.toLowerCase().includes(t)||re(o.fields).toLowerCase().includes(t))},rt="—",lt=i=>{const e=new Map,t=new Map;for(const o of i){e.set(o.level,(e.get(o.level)??0)+1);const m=o.functionPath??rt;t.set(m,(t.get(m)??0)+1)}const n=ae.filter(o=>e.has(o)).map(o=>({count:e.get(o)??0,key:o})),c=[...t.entries()].map(([o,m])=>({count:m,key:o})).toSorted((o,m)=>m.count===o.count?o.key.localeCompare(m.key):m.count-o.count);return{byLevel:n,byPath:c,total:i.length}},$t=({initialShardKey:i})=>{const e=z(),[t,n]=F("requests"),[c,o]=F(i??""),[m,p]=F(""),[g,s]=F(()=>new Set),[l,v]=F(""),[a,d]=F("all"),[u,h]=F(!1),[x,f]=F(""),[b,y]=F(""),[C,$]=F(""),[L,k]=F("all"),R=ee(c.trim(),400),w=Ze({functionPathPrefix:x,outcome:L,tableTouched:C,userId:b}),N=ne(se.getRequestLog,w,{enabled:t==="requests",live:!0,shardKey:R}),I=ne(se.getLogs,{},{enabled:t==="errors",live:!0,shardKey:R}),P=t==="requests"?N:I,{error:E,errorSource:q,isLoading:A,liveError:W}=P,K=ue(I.data),O=ue(N.data);he(()=>{P.data!==void 0&&Se(R)},[P.data,R]);const _=tt(K,{levels:g,now:Date.now(),path:l,range:a,search:m}),B=lt(_),U=t==="requests"?O.length:_.length,J=t==="errors"&&u,Q=Ce(()=>E!==null?"error":U===0?A?J?"summary":"list":"empty":J?"summary":"list",[U,A,E,J]),oe=me(null),Y=we({count:U,estimateSize:()=>Qe,getScrollElement:()=>oe.current,initialRect:{height:te,width:800},observeElementRect:(S,X)=>ke(S,X,te),overscan:8}),xe=Y.getVirtualItems(),ye={height:Y.getTotalSize(),position:"relative",width:"100%"};return T("div",{className:"flex flex-col gap-4","data-testid":"lunora-logs",children:[r(Ge,{liveError:W,onShardKeyChange:o,onShowArchive:()=>{n("archive"),h(!1)},onShowErrors:()=>{n("errors"),h(!1)},onShowRequests:()=>{n("requests"),h(!1)},shardKey:c,view:t}),t==="errors"&&r(Ve,{levelFilter:g,onLogPathChange:S=>{v(S.target.value)},onSearchChange:S=>{p(S.target.value)},onTimeRangeChange:S=>{d(S.target.value)},onToggleLevel:S=>{s(X=>{const H=new Set(X);return H.has(S)?H.delete(S):H.add(S),H})},onToggleSummary:()=>{h(S=>!S)},pathFilter:l,search:m,showSummary:u,timeRange:a}),t==="requests"&&r(je,{onOutcomeChange:S=>{k(S.target.value)},onPathChange:S=>{f(S.target.value)},onTableChange:S=>{$(S.target.value)},onUserChange:S=>{y(S.target.value)},outcomeFilter:L,pathPrefix:x,tableFilter:C,userIdFilter:b}),t==="archive"?r(Ue,{shardKey:R}):T(Fe,{children:[Q==="error"&&r(Le,{error:q,testId:"lg-error"}),Q==="empty"&&r(Z,{description:e("Function and request logs for this shard show up here as your app handles traffic."),icon:r("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"M4 5h16M4 12h16M4 19h10"})}),testId:"lg-empty",title:e("No logs.")}),Q==="summary"&&r(Be,{summary:B}),Q==="list"&&r("div",{className:"rounded-xl border border-border shadow-xs","data-testid":"lg-scroll",ref:oe,style:Ye,children:r("div",{"aria-label":e("Recent logs"),"data-testid":"lg-table",role:"grid",style:ye,children:xe.map(S=>t==="requests"?r(Xe,{entry:O[S.index],index:S.index,measureRef:Y.measureElement,start:S.start},S.key):r(Je,{entry:_[S.index],index:S.index,measureRef:Y.measureElement,start:S.start},S.key))})})]})]})};export{$t as LogsPanel,tt as filterLogs,lt as summarizeLogs};
|
|
1
|
+
import{c as M}from"react/compiler-runtime";import{useVirtualizer as we}from"@tanstack/react-virtual";import{useState as q,useReducer as Ne,useRef as me,useEffect as he,useMemo as Ce}from"react";import{f as te}from"../packem_shared/log-fields-CoL3hsIQ.js";import{E as Le}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as re}from"../packem_shared/badge-BbuuAio7.js";import{E as Z}from"../packem_shared/empty-state-Cg7t_8qu.js";import{N as oe}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{S as Se}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as z}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as ne}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{r as ke}from"../packem_shared/shard-history-DMEW5VBE.js";import{l as $e}from"../packem_shared/virtual-rect-1o1veP7R.js";import{useLunora as Re}from"@lunora/react";import{u as Pe}from"../packem_shared/button-BkCrNcAs.js";import{u as j}from"../packem_shared/input-JHu63lTv.js";import{n as Ie,d as Te,m as ge,p as D,f as Ee,u as V}from"../packem_shared/table-DdJBrClo.js";import se from"../packem_shared/useDebounced-CU-uftxO.js";import{a as fe}from"../packem_shared/cf-links-Dmg86v1D.js";import{f as ie,l as Fe,b as de}from"../packem_shared/internal-BSIsQVC6.js";import{jsx as r,jsxs as T,Fragment as qe}from"react/jsx-runtime";import{c as W}from"../packem_shared/utils-bhneXptQ.js";import{L as _e}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as Oe}from"../packem_shared/ShardInput-BVn2iCU0.js";const le=["trace","debug","log","info","warn","error","fatal"],Ae="LOG_ARCHIVE_NOT_CONFIGURED",pe={debug:"secondary",error:"destructive",fatal:"destructive",info:"outline",log:"outline",trace:"outline",warn:"secondary"},Me={cursor:void 0,error:null,loading:!1,notConfigured:!1,rows:null},Ke=(c,e)=>{switch(e.type){case"append":return{...c,cursor:e.cursor,error:null,loading:!1,rows:[...c.rows??[],...e.rows]};case"failed":return{cursor:void 0,error:e.message,loading:!1,notConfigured:!1,rows:null};case"loaded":return{cursor:e.cursor,error:null,loading:!1,notConfigured:!1,rows:e.rows};case"loading":return{...c,error:null,loading:!0,notConfigured:!1};case"notConfigured":return{cursor:void 0,error:null,loading:!1,notConfigured:!0,rows:null};case"pageFailed":return{...c,error:e.message,loading:!1};default:return c}},Ue=c=>{const e=M(33),{row:t}=c;let n;e[0]!==t.fields?(n=te(t.fields),e[0]=t.fields,e[1]=n):n=e[1];const i=n,o=`lg-archive-row-${String(t.ts)}`;let m;e[2]!==t.ts?(m=new Date(t.ts).toLocaleString(),e[2]=t.ts,e[3]=m):m=e[3];let p;e[4]!==m?(p=r(V,{className:"tabular-nums whitespace-nowrap text-xs text-muted-foreground",children:m}),e[4]=m,e[5]=p):p=e[5];const f=pe[t.level];let s;e[6]!==t.level||e[7]!==f?(s=r(V,{children:r(re,{variant:f,children:t.level})}),e[6]=t.level,e[7]=f,e[8]=s):s=e[8];let l;e[9]!==t.functionPath?(l=r(V,{className:"font-mono text-xs",children:t.functionPath}),e[9]=t.functionPath,e[10]=l):l=e[10];let v;e[11]!==t.message?(v=r("div",{className:"truncate",title:t.message,children:t.message}),e[11]=t.message,e[12]=v):v=e[12];let a;e[13]!==i?(a=i!==""&&r("div",{className:"truncate font-mono text-[11px] text-muted-foreground",title:i,children:i}),e[13]=i,e[14]=a):a=e[14];let d;e[15]!==v||e[16]!==a?(d=T(V,{className:"max-w-md",children:[v,a]}),e[15]=v,e[16]=a,e[17]=d):d=e[17];const u=t.traceId??"—";let h;e[18]!==u?(h=r(V,{className:"font-mono text-[11px] text-muted-foreground",children:u}),e[18]=u,e[19]=h):h=e[19];const b=t.shardKey??"—";let g;e[20]!==b?(g=r(V,{className:"font-mono text-[11px] text-muted-foreground",children:b}),e[20]=b,e[21]=g):g=e[21];const x=t.userId??"—";let y;e[22]!==x?(y=r(V,{className:"font-mono text-[11px] text-muted-foreground",children:x}),e[22]=x,e[23]=y):y=e[23];let C;return e[24]!==d||e[25]!==h||e[26]!==g||e[27]!==y||e[28]!==o||e[29]!==p||e[30]!==s||e[31]!==l?(C=T(ge,{"data-testid":o,children:[p,s,l,d,h,g,y]}),e[24]=d,e[25]=h,e[26]=g,e[27]=y,e[28]=o,e[29]=p,e[30]=s,e[31]=l,e[32]=C):C=e[32],C},De=({shardKey:c})=>{const e=Re(),t=z(),[n,i]=q(""),[o,m]=q(""),[p,f]=q(""),[{cursor:s,error:l,loading:v,notConfigured:a,rows:d},u]=Ne(Ke,Me),h=se(n.trim(),400),b=se(o.trim(),400),g={...h===""?{}:{functionPathPrefix:h},...p===""?{}:{minLevel:p},...c===""?{}:{shardKey:c},...b===""?{}:{userId:b}},x=JSON.stringify(g),y=me(x);he(()=>{const w={cancelled:!1};return y.current=x,ie((async()=>{u({type:"loading"});try{const N=await e.queryLogArchive(g);w.cancelled||u({cursor:N.nextCursor,rows:N.rows,type:"loaded"})}catch(N){w.cancelled||u(Fe(N)===Ae?{type:"notConfigured"}:{message:de(N),type:"failed"})}})()),()=>{w.cancelled=!0}},[e,x]);const C=async()=>{if(s===void 0)return;const w=x;u({type:"loading"});try{const N=await e.queryLogArchive({...g,cursor:s});y.current===w&&u({cursor:N.nextCursor,rows:N.rows,type:"append"})}catch(N){y.current===w&&u({message:de(N),type:"pageFailed"})}},$=w=>{i(w.target.value)},L=w=>{m(w.target.value)},S=w=>{f(w.target.value)},R=()=>{ie(C())};return a?r(Z,{action:r("a",{className:"text-sm text-primary underline-offset-4 hover:underline",href:fe,rel:"noreferrer",target:"_blank",children:t("Open in Cloudflare")}),description:t("Wire pipelineLogSink to a Cloudflare Pipeline → R2 Data Catalog table and set R2_SQL_ACCOUNT_ID, R2_SQL_TOKEN, R2_SQL_BUCKET to browse the durable log archive here."),testId:"lg-archive-not-configured",title:t("Log archive not configured")}):T("div",{className:"flex flex-col gap-4","data-testid":"lg-archive",children:[T("div",{className:"flex flex-wrap items-center gap-2",children:[r(j,{"aria-label":t("Function path prefix"),className:"h-8 w-48","data-testid":"lg-archive-path",onChange:$,placeholder:t("function path…"),value:n}),r(j,{"aria-label":t("User id"),className:"h-8 w-40","data-testid":"lg-archive-user",onChange:L,placeholder:t("user id…"),value:o}),T("select",{"aria-label":t("Minimum level"),className:"h-8 rounded-md border border-border bg-background px-2 text-sm","data-testid":"lg-archive-min-level",onChange:S,value:p,children:[r("option",{value:"",children:t("min level")}),le.map(w=>r("option",{value:w,children:w},w))]})]}),l!==null&&r("p",{className:"text-sm text-destructive","data-testid":"lg-archive-error",role:"alert",children:l}),v&&d===null&&l===null&&r("p",{className:"text-sm text-muted-foreground","data-testid":"lg-archive-loading",children:t("Loading…")}),d!==null&&d.length===0&&r(Z,{description:t("No archived logs match these filters. The durable archive fills as pipelineLogSink flushes records to R2."),testId:"lg-archive-empty",title:t("No archived logs.")}),d!==null&&d.length>0&&r("div",{className:"overflow-hidden rounded-xl border border-border shadow-xs",children:T(Ie,{"data-testid":"lg-archive-table",children:[r(Te,{children:T(ge,{children:[r(D,{children:t("Time")}),r(D,{children:t("Level")}),r(D,{children:t("Function")}),r(D,{children:t("Message")}),r(D,{children:t("Trace")}),r(D,{children:t("Shard")}),r(D,{children:t("User")})]})}),r(Ee,{children:d.map((w,N)=>r(Ue,{row:w},`${String(w.ts)}-${String(N)}`))})]})}),s!==void 0&&r("div",{children:r(Pe,{"data-testid":"lg-archive-more",disabled:v,onClick:R,size:"sm",variant:"outline",children:t(v?"Loading…":"Load more")})})]})},Ve=c=>{const e=M(11),{level:t,onToggle:n,selected:i}=c;let o;e[0]!==t||e[1]!==n?(o=()=>{n(t)},e[0]=t,e[1]=n,e[2]=o):o=e[2];const m=o,p=i?"border-border bg-muted font-medium":"border-input text-muted-foreground";let f;e[3]!==p?(f=W("rounded-md border px-2 py-1 text-xs",p),e[3]=p,e[4]=f):f=e[4];const s=`logs-level-${t}`;let l;return e[5]!==t||e[6]!==m||e[7]!==i||e[8]!==f||e[9]!==s?(l=r("button",{"aria-pressed":i,className:f,"data-testid":s,onClick:m,type:"button",children:t}),e[5]=t,e[6]=m,e[7]=i,e[8]=f,e[9]=s,e[10]=l):l=e[10],l},je=c=>{const e=M(68),{levelFilter:t,onLogPathChange:n,onSearchChange:i,onTimeRangeChange:o,onToggleLevel:m,onToggleSummary:p,pathFilter:f,search:s,showSummary:l,timeRange:v}=c,a=z();let d;e[0]!==a?(d=a("Search messages"),e[0]=a,e[1]=d):d=e[1];let u;e[2]!==a?(u=a("search message"),e[2]=a,e[3]=u):u=e[3];let h;e[4]!==i||e[5]!==s||e[6]!==d||e[7]!==u?(h=r(j,{"aria-label":d,className:"h-8 w-48","data-testid":"lg-search",onChange:i,placeholder:u,value:s}),e[4]=i,e[5]=s,e[6]=d,e[7]=u,e[8]=h):h=e[8];let b;e[9]!==a?(b=a("Function path"),e[9]=a,e[10]=b):b=e[10];let g;e[11]!==a?(g=a("filter path"),e[11]=a,e[12]=g):g=e[12];let x;e[13]!==n||e[14]!==f||e[15]!==b||e[16]!==g?(x=r(j,{"aria-label":b,className:"h-8 w-40","data-testid":"logs-path-filter",onChange:n,placeholder:g,value:f}),e[13]=n,e[14]=f,e[15]=b,e[16]=g,e[17]=x):x=e[17];let y;e[18]!==a?(y=a("Level filter"),e[18]=a,e[19]=y):y=e[19];let C;e[20]!==t||e[21]!==m?(C=le.map(U=>r(Ve,{level:U,onToggle:m,selected:t.has(U)},U)),e[20]=t,e[21]=m,e[22]=C):C=e[22];let $;e[23]!==y||e[24]!==C?($=r("div",{"aria-label":y,className:"inline-flex items-center gap-1","data-testid":"logs-level-filter",role:"group",children:C}),e[23]=y,e[24]=C,e[25]=$):$=e[25];let L;e[26]!==a?(L=a("Time range"),e[26]=a,e[27]=L):L=e[27];let S;e[28]!==a?(S=a("All time"),e[28]=a,e[29]=S):S=e[29];let R;e[30]!==S?(R=r("option",{value:"all",children:S}),e[30]=S,e[31]=R):R=e[31];let w;e[32]!==a?(w=a("Last 5m"),e[32]=a,e[33]=w):w=e[33];let N;e[34]!==w?(N=r("option",{value:"5m",children:w}),e[34]=w,e[35]=N):N=e[35];let P;e[36]!==a?(P=a("Last 15m"),e[36]=a,e[37]=P):P=e[37];let I;e[38]!==P?(I=r("option",{value:"15m",children:P}),e[38]=P,e[39]=I):I=e[39];let E;e[40]!==a?(E=a("Last hour"),e[40]=a,e[41]=E):E=e[41];let F;e[42]!==E?(F=r("option",{value:"1h",children:E}),e[42]=E,e[43]=F):F=e[43];let O;e[44]!==o||e[45]!==L||e[46]!==R||e[47]!==N||e[48]!==I||e[49]!==F||e[50]!==v?(O=T("select",{"aria-label":L,className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"logs-time-range",onChange:o,value:v,children:[R,N,I,F]}),e[44]=o,e[45]=L,e[46]=R,e[47]=N,e[48]=I,e[49]=F,e[50]=v,e[51]=O):O=e[51];const G=l?"border-border bg-muted font-medium":"border-input text-muted-foreground";let K;e[52]!==G?(K=W("h-8 rounded-md border px-3 text-sm",G),e[52]=G,e[53]=K):K=e[53];let A;e[54]!==l||e[55]!==a?(A=a(l?"List":"Summary"),e[54]=l,e[55]=a,e[56]=A):A=e[56];let _;e[57]!==p||e[58]!==l||e[59]!==K||e[60]!==A?(_=r("button",{"aria-pressed":l,className:K,"data-testid":"logs-summary-toggle",onClick:p,type:"button",children:A}),e[57]=p,e[58]=l,e[59]=K,e[60]=A,e[61]=_):_=e[61];let B;return e[62]!==O||e[63]!==_||e[64]!==h||e[65]!==x||e[66]!==$?(B=T("div",{className:"flex flex-wrap items-center gap-2",children:[h,x,$,O,_]}),e[62]=O,e[63]=_,e[64]=h,e[65]=x,e[66]=$,e[67]=B):B=e[67],B},Be=c=>{const e=M(53),{onOutcomeChange:t,onPathChange:n,onTableChange:i,onUserChange:o,outcomeFilter:m,pathPrefix:p,tableFilter:f,userIdFilter:s}=c,l=z();let v;e[0]!==l?(v=l("Function path"),e[0]=l,e[1]=v):v=e[1];let a;e[2]!==l?(a=l("file:function"),e[2]=l,e[3]=a):a=e[3];let d;e[4]!==n||e[5]!==p||e[6]!==v||e[7]!==a?(d=r(j,{"aria-label":v,className:"h-8 w-44","data-testid":"lg-req-path",onChange:n,placeholder:a,value:p}),e[4]=n,e[5]=p,e[6]=v,e[7]=a,e[8]=d):d=e[8];let u;e[9]!==l?(u=l("User id"),e[9]=l,e[10]=u):u=e[10];let h;e[11]!==l?(h=l("userId"),e[11]=l,e[12]=h):h=e[12];let b;e[13]!==o||e[14]!==u||e[15]!==h||e[16]!==s?(b=r(j,{"aria-label":u,className:"h-8 w-32","data-testid":"lg-req-user",onChange:o,placeholder:h,value:s}),e[13]=o,e[14]=u,e[15]=h,e[16]=s,e[17]=b):b=e[17];let g;e[18]!==l?(g=l("Table touched"),e[18]=l,e[19]=g):g=e[19];let x;e[20]!==l?(x=l("table"),e[20]=l,e[21]=x):x=e[21];let y;e[22]!==i||e[23]!==g||e[24]!==x||e[25]!==f?(y=r(j,{"aria-label":g,className:"h-8 w-32","data-testid":"lg-req-table",onChange:i,placeholder:x,value:f}),e[22]=i,e[23]=g,e[24]=x,e[25]=f,e[26]=y):y=e[26];let C;e[27]!==l?(C=l("Outcome filter"),e[27]=l,e[28]=C):C=e[28];let $;e[29]!==l?($=l("all"),e[29]=l,e[30]=$):$=e[30];let L;e[31]!==$?(L=r("option",{value:"all",children:$}),e[31]=$,e[32]=L):L=e[32];let S;e[33]!==l?(S=l("ok"),e[33]=l,e[34]=S):S=e[34];let R;e[35]!==S?(R=r("option",{value:"ok",children:S}),e[35]=S,e[36]=R):R=e[36];let w;e[37]!==l?(w=l("error"),e[37]=l,e[38]=w):w=e[38];let N;e[39]!==w?(N=r("option",{value:"error",children:w}),e[39]=w,e[40]=N):N=e[40];let P;e[41]!==t||e[42]!==m||e[43]!==C||e[44]!==L||e[45]!==R||e[46]!==N?(P=T("select",{"aria-label":C,className:"h-8 rounded-md border border-input bg-transparent px-2 text-sm shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none","data-testid":"lg-req-outcome",onChange:t,value:m,children:[L,R,N]}),e[41]=t,e[42]=m,e[43]=C,e[44]=L,e[45]=R,e[46]=N,e[47]=P):P=e[47];let I;return e[48]!==P||e[49]!==d||e[50]!==b||e[51]!==y?(I=T("div",{className:"flex flex-wrap items-center gap-2",children:[d,b,y,P]}),e[48]=P,e[49]=d,e[50]=b,e[51]=y,e[52]=I):I=e[52],I},ve=c=>{const e=M(7),{bucket:t}=c;let n;e[0]!==t.key?(n=r("span",{className:"truncate text-muted-foreground",role:"gridcell",children:t.key}),e[0]=t.key,e[1]=n):n=e[1];let i;e[2]!==t.count?(i=r("span",{className:"shrink-0 tabular-nums",role:"gridcell",children:t.count}),e[2]=t.count,e[3]=i):i=e[3];let o;return e[4]!==n||e[5]!==i?(o=T("div",{className:"flex items-center justify-between gap-4 px-3 py-1 font-mono text-xs","data-testid":"logs-summary-row",role:"row",children:[n,i]}),e[4]=n,e[5]=i,e[6]=o):o=e[6],o},ze=c=>{const e=M(31),{summary:t}=c,n=z();let i;e[0]!==t.total||e[1]!==n?(i=n("{count} entries",{count:t.total}),e[0]=t.total,e[1]=n,e[2]=i):i=e[2];let o;e[3]!==i?(o=r("p",{className:"text-xs text-muted-foreground","data-testid":"logs-summary-total",children:i}),e[3]=i,e[4]=o):o=e[4];let m;e[5]!==n?(m=n("By level"),e[5]=n,e[6]=m):m=e[6];let p;e[7]!==m?(p=r("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:m}),e[7]=m,e[8]=p):p=e[8];let f;e[9]!==t.byLevel?(f=t.byLevel.map(Ge),e[9]=t.byLevel,e[10]=f):f=e[10];let s;e[11]!==f?(s=r("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-levels",role:"grid",children:f}),e[11]=f,e[12]=s):s=e[12];let l;e[13]!==p||e[14]!==s?(l=T("div",{children:[p,s]}),e[13]=p,e[14]=s,e[15]=l):l=e[15];let v;e[16]!==n?(v=n("By function"),e[16]=n,e[17]=v):v=e[17];let a;e[18]!==v?(a=r("h4",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:v}),e[18]=v,e[19]=a):a=e[19];let d;e[20]!==t.byPath?(d=t.byPath.map(We),e[20]=t.byPath,e[21]=d):d=e[21];let u;e[22]!==d?(u=r("div",{className:"overflow-hidden rounded-lg border border-border","data-testid":"logs-summary-paths",role:"grid",children:d}),e[22]=d,e[23]=u):u=e[23];let h;e[24]!==u||e[25]!==a?(h=T("div",{children:[a,u]}),e[24]=u,e[25]=a,e[26]=h):h=e[26];let b;return e[27]!==h||e[28]!==o||e[29]!==l?(b=T("div",{className:"flex flex-col gap-4 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"logs-summary",children:[o,l,h]}),e[27]=h,e[28]=o,e[29]=l,e[30]=b):b=e[30],b};function Ge(c){return r(ve,{bucket:c},c.key)}function We(c){return r(ve,{bucket:c},c.key)}const Qe=c=>{const e=M(46),{liveError:t,onShardKeyChange:n,onShowArchive:i,onShowErrors:o,onShowRequests:m,shardKey:p,view:f}=c,s=z(),l=f==="requests",v=f==="requests"?"bg-muted font-medium":"text-muted-foreground";let a;e[0]!==v?(a=W("px-3 py-1 text-sm",v),e[0]=v,e[1]=a):a=e[1];let d;e[2]!==s?(d=s("Requests"),e[2]=s,e[3]=d):d=e[3];let u;e[4]!==m||e[5]!==l||e[6]!==a||e[7]!==d?(u=r("button",{"aria-selected":l,className:a,"data-testid":"lg-view-requests",onClick:m,role:"tab",type:"button",children:d}),e[4]=m,e[5]=l,e[6]=a,e[7]=d,e[8]=u):u=e[8];const h=f==="errors",b=f==="errors"?"bg-muted font-medium":"text-muted-foreground";let g;e[9]!==b?(g=W("px-3 py-1 text-sm",b),e[9]=b,e[10]=g):g=e[10];let x;e[11]!==s?(x=s("Errors"),e[11]=s,e[12]=x):x=e[12];let y;e[13]!==o||e[14]!==h||e[15]!==g||e[16]!==x?(y=r("button",{"aria-selected":h,className:g,"data-testid":"lg-view-errors",onClick:o,role:"tab",type:"button",children:x}),e[13]=o,e[14]=h,e[15]=g,e[16]=x,e[17]=y):y=e[17];const C=f==="archive",$=f==="archive"?"bg-muted font-medium":"text-muted-foreground";let L;e[18]!==$?(L=W("px-3 py-1 text-sm",$),e[18]=$,e[19]=L):L=e[19];let S;e[20]!==s?(S=s("Archive"),e[20]=s,e[21]=S):S=e[21];let R;e[22]!==i||e[23]!==C||e[24]!==L||e[25]!==S?(R=r("button",{"aria-selected":C,className:L,"data-testid":"lg-view-archive",onClick:i,role:"tab",type:"button",children:S}),e[22]=i,e[23]=C,e[24]=L,e[25]=S,e[26]=R):R=e[26];let w;e[27]!==y||e[28]!==R||e[29]!==u?(w=T("div",{className:"inline-flex overflow-hidden rounded-lg border border-border",role:"tablist",children:[u,y,R]}),e[27]=y,e[28]=R,e[29]=u,e[30]=w):w=e[30];let N;e[31]!==n||e[32]!==p?(N=r(Oe,{onChange:n,testId:"lg-shard-input",value:p}),e[31]=n,e[32]=p,e[33]=N):N=e[33];let P;e[34]!==t||e[35]!==f?(P=f!=="archive"&&r(_e,{message:t,prefix:"lg"}),e[34]=t,e[35]=f,e[36]=P):P=e[36];let I;e[37]!==s?(I=s("Open in Cloudflare"),e[37]=s,e[38]=I):I=e[38];let E;e[39]!==I?(E=r("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"lg-cf-link",href:fe,rel:"noreferrer",target:"_blank",children:I}),e[39]=I,e[40]=E):E=e[40];let F;return e[41]!==w||e[42]!==N||e[43]!==P||e[44]!==E?(F=T("div",{className:"flex flex-wrap items-center gap-2",children:[w,N,P,E]}),e[41]=w,e[42]=N,e[43]=P,e[44]=E,e[45]=F):F=e[45],F},ee=400,Ye=36,He={height:ee,overflow:"auto"},be={left:0,position:"absolute",top:0,width:"100%"},Je={error:"destructive",ok:"secondary"},Xe=c=>{const e=M(26),{entry:t,index:n,measureRef:i,start:o}=c,m=`translateY(${String(o)}px)`;let p;e[0]!==m?(p={...be,transform:m},e[0]=m,e[1]=p):p=e[1];const f=p;let s;e[2]!==t.fields?(s=te(t.fields),e[2]=t.fields,e[3]=s):s=e[3];const l=s;let v;e[4]!==t.timestamp?(v=new Date(t.timestamp).toLocaleString(),e[4]=t.timestamp,e[5]=v):v=e[5];let a;e[6]!==v?(a=r("span",{className:"w-44 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:v}),e[6]=v,e[7]=a):a=e[7];const d=pe[t.level];let u;e[8]!==t.level||e[9]!==d?(u=r("span",{className:"w-20 shrink-0",role:"gridcell",children:r(re,{variant:d,children:t.level})}),e[8]=t.level,e[9]=d,e[10]=u):u=e[10];const h=t.functionPath??"—";let b;e[11]!==h?(b=r("span",{className:"w-48 shrink-0 truncate text-muted-foreground",role:"gridcell",children:h}),e[11]=h,e[12]=b):b=e[12];let g;e[13]!==l?(g=l===""?null:r("span",{className:"ml-2 text-muted-foreground","data-testid":"lg-fields",children:l}),e[13]=l,e[14]=g):g=e[14];let x;e[15]!==t.message||e[16]!==g?(x=T("span",{className:"flex-1 truncate",role:"gridcell",children:[t.message,g]}),e[15]=t.message,e[16]=g,e[17]=x):x=e[17];let y;return e[18]!==n||e[19]!==i||e[20]!==f||e[21]!==x||e[22]!==a||e[23]!==u||e[24]!==b?(y=T("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":n,"data-testid":"lg-row",ref:i,role:"row",style:f,children:[a,u,b,x]}),e[18]=n,e[19]=i,e[20]=f,e[21]=x,e[22]=a,e[23]=u,e[24]=b,e[25]=y):y=e[25],y},ce=c=>c.length===0?"—":c.join(", "),Ze=c=>{const e=M(37),{entry:t,index:n,measureRef:i,start:o}=c,m=`translateY(${String(o)}px)`;let p;e[0]!==m?(p={...be,transform:m},e[0]=m,e[1]=p):p=e[1];const f=p;let s;e[2]!==t.ts?(s=new Date(t.ts).toLocaleString(),e[2]=t.ts,e[3]=s):s=e[3];let l;e[4]!==s?(l=r("span",{className:"w-40 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:s}),e[4]=s,e[5]=l):l=e[5];const v=Je[t.outcome];let a;e[6]!==t.outcome||e[7]!==v?(a=r("span",{className:"w-16 shrink-0",role:"gridcell",children:r(re,{variant:v,children:t.outcome})}),e[6]=t.outcome,e[7]=v,e[8]=a):a=e[8];let d;e[9]!==t.functionPath?(d=r("span",{className:"w-44 shrink-0 truncate",role:"gridcell",title:t.functionPath,children:t.functionPath}),e[9]=t.functionPath,e[10]=d):d=e[10];const u=t.shardKey??"—";let h;e[11]!==u?(h=r("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:u}),e[11]=u,e[12]=h):h=e[12];const b=t.userId??"—";let g;e[13]!==b?(g=r("span",{className:"w-24 shrink-0 truncate text-muted-foreground",role:"gridcell",children:b}),e[13]=b,e[14]=g):g=e[14];let x;e[15]!==t.durationMs?(x=Math.round(t.durationMs),e[15]=t.durationMs,e[16]=x):x=e[16];const y=`${String(x)}ms`;let C;e[17]!==y?(C=r("span",{className:"w-16 shrink-0 tabular-nums text-muted-foreground",role:"gridcell",children:y}),e[17]=y,e[18]=C):C=e[18];let $;e[19]!==t.errorMessage||e[20]!==t.outcome||e[21]!==t.tablesRead||e[22]!==t.tablesWritten?($=t.outcome==="error"&&t.errorMessage!==void 0?t.errorMessage:`r:${ce(t.tablesRead)} · w:${ce(t.tablesWritten)}`,e[19]=t.errorMessage,e[20]=t.outcome,e[21]=t.tablesRead,e[22]=t.tablesWritten,e[23]=$):$=e[23];let L;e[24]!==$?(L=r("span",{className:"flex-1 truncate text-muted-foreground",role:"gridcell",children:$}),e[24]=$,e[25]=L):L=e[25];let S;return e[26]!==n||e[27]!==i||e[28]!==f||e[29]!==g||e[30]!==C||e[31]!==L||e[32]!==l||e[33]!==a||e[34]!==d||e[35]!==h?(S=T("div",{className:"flex items-center border-b border-border px-3 py-1.5 font-mono text-xs hover:bg-muted/50","data-index":n,"data-testid":"lg-req-row",ref:i,role:"row",style:f,children:[l,a,d,h,g,C,L]}),e[26]=n,e[27]=i,e[28]=f,e[29]=g,e[30]=C,e[31]=L,e[32]=l,e[33]=a,e[34]=d,e[35]=h,e[36]=S):S=e[36],S},ue=c=>{const{entries:e}=c??{};return Array.isArray(e)?e:[]},et=c=>{const e={};return c.functionPathPrefix.trim()!==""&&(e.functionPathPrefix=c.functionPathPrefix.trim()),c.userId.trim()!==""&&(e.userId=c.userId.trim()),c.tableTouched.trim()!==""&&(e.tableTouched=c.tableTouched.trim()),(c.outcome==="ok"||c.outcome==="error")&&(e.outcome=c.outcome),e},tt={"5m":300*1e3,"15m":900*1e3,"1h":3600*1e3},rt=(c,e)=>{const t=e.search.trim().toLowerCase(),n=e.path.trim().toLowerCase(),i=e.range==="all"?Number.NEGATIVE_INFINITY:e.now-tt[e.range];return c.filter(o=>e.levels.size>0&&!e.levels.has(o.level)||o.timestamp<i||n!==""&&!(o.functionPath??"").toLowerCase().includes(n)?!1:t===""||o.message.toLowerCase().includes(t)||te(o.fields).toLowerCase().includes(t))},lt="—",at=c=>{const e=new Map,t=new Map;for(const o of c){e.set(o.level,(e.get(o.level)??0)+1);const m=o.functionPath??lt;t.set(m,(t.get(m)??0)+1)}const n=le.filter(o=>e.has(o)).map(o=>({count:e.get(o)??0,key:o})),i=[...t.entries()].map(([o,m])=>({count:m,key:o})).toSorted((o,m)=>m.count===o.count?o.key.localeCompare(m.key):m.count-o.count);return{byLevel:n,byPath:i,total:c.length}},Pt=({initialShardKey:c})=>{const e=z(),[t,n]=q("requests"),{queryShardKey:i,setShardKey:o,shardKey:m}=Se(c),[p,f]=q(""),[s,l]=q(()=>new Set),[v,a]=q(""),[d,u]=q("all"),[h,b]=q(!1),[g,x]=q(""),[y,C]=q(""),[$,L]=q(""),[S,R]=q("all"),w=et({functionPathPrefix:g,outcome:S,tableTouched:$,userId:y}),N=oe(ne.getRequestLog,w,{enabled:t==="requests",live:!0,shardKey:i}),P=oe(ne.getLogs,{},{enabled:t==="errors",live:!0,shardKey:i}),I=t==="requests"?N:P,{error:E,errorSource:F,isLoading:O,liveError:G}=I,K=ue(P.data),A=ue(N.data);he(()=>{I.data!==void 0&&ke(i)},[I.data,i]);const _=rt(K,{levels:s,now:Date.now(),path:v,range:d,search:p}),B=at(_),U=t==="requests"?A.length:_.length,J=t==="errors"&&h,Q=Ce(()=>E!==null?"error":U===0?O?J?"summary":"list":"empty":J?"summary":"list",[U,O,E,J]),ae=me(null),Y=we({count:U,estimateSize:()=>Ye,getScrollElement:()=>ae.current,initialRect:{height:ee,width:800},observeElementRect:(k,X)=>$e(k,X,ee),overscan:8}),xe=Y.getVirtualItems(),ye={height:Y.getTotalSize(),position:"relative",width:"100%"};return T("div",{className:"flex flex-col gap-4","data-testid":"lunora-logs",children:[r(Qe,{liveError:G,onShardKeyChange:o,onShowArchive:()=>{n("archive"),b(!1)},onShowErrors:()=>{n("errors"),b(!1)},onShowRequests:()=>{n("requests"),b(!1)},shardKey:m,view:t}),t==="errors"&&r(je,{levelFilter:s,onLogPathChange:k=>{a(k.target.value)},onSearchChange:k=>{f(k.target.value)},onTimeRangeChange:k=>{u(k.target.value)},onToggleLevel:k=>{l(X=>{const H=new Set(X);return H.has(k)?H.delete(k):H.add(k),H})},onToggleSummary:()=>{b(k=>!k)},pathFilter:v,search:p,showSummary:h,timeRange:d}),t==="requests"&&r(Be,{onOutcomeChange:k=>{R(k.target.value)},onPathChange:k=>{x(k.target.value)},onTableChange:k=>{L(k.target.value)},onUserChange:k=>{C(k.target.value)},outcomeFilter:S,pathPrefix:g,tableFilter:$,userIdFilter:y}),t==="archive"?r(De,{shardKey:i}):T(qe,{children:[Q==="error"&&r(Le,{error:F,testId:"lg-error"}),Q==="empty"&&r(Z,{description:e("Function and request logs for this shard show up here as your app handles traffic."),icon:r("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:r("path",{d:"M4 5h16M4 12h16M4 19h10"})}),testId:"lg-empty",title:e("No logs.")}),Q==="summary"&&r(ze,{summary:B}),Q==="list"&&r("div",{className:"rounded-xl border border-border shadow-xs","data-testid":"lg-scroll",ref:ae,style:He,children:r("div",{"aria-label":e("Recent logs"),"data-testid":"lg-table",role:"grid",style:ye,children:xe.map(k=>t==="requests"?r(Ze,{entry:A[k.index],index:k.index,measureRef:Y.measureElement,start:k.start},k.key):r(Xe,{entry:_[k.index],index:k.index,measureRef:Y.measureElement,start:k.start},k.key))})})]})]})};export{Pt as LogsPanel,rt as filterLogs,at as summarizeLogs};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{E as ie}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as le}from"../packem_shared/badge-BbuuAio7.js";import{u as v}from"../packem_shared/button-BkCrNcAs.js";import{E as oe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as se}from"../packem_shared/input-JHu63lTv.js";import{p as ne}from"../packem_shared/scroll-area-DTEq6Jec.js";import{Separator as de}from"@base-ui/react/separator";import{c as ce}from"../packem_shared/utils-bhneXptQ.js";import{jsx as t,jsxs as s,Fragment as me}from"react/jsx-runtime";import{useT as ue}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{d as Y,b as Z,f as ee,c as he,g as re,i as te}from"../packem_shared/internal-BSIsQVC6.js";import{c as pe}from"react/compiler-runtime";import{useLunora as fe}from"@lunora/react";import{useState as H}from"react";import{N as be}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useAutoRefresh as ge}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{ADMIN_FUNCTIONS as Q}from"../packem_shared/ADMIN_FUNCTIONS-
|
|
1
|
+
import{E as ie}from"../packem_shared/error-alert-t6cpEi0z.js";import{g as le}from"../packem_shared/badge-BbuuAio7.js";import{u as v}from"../packem_shared/button-BkCrNcAs.js";import{E as oe}from"../packem_shared/empty-state-Cg7t_8qu.js";import{u as se}from"../packem_shared/input-JHu63lTv.js";import{p as ne}from"../packem_shared/scroll-area-DTEq6Jec.js";import{Separator as de}from"@base-ui/react/separator";import{c as ce}from"../packem_shared/utils-bhneXptQ.js";import{jsx as t,jsxs as s,Fragment as me}from"react/jsx-runtime";import{useT as ue}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{d as Y,b as Z,f as ee,c as he,g as re,i as te}from"../packem_shared/internal-BSIsQVC6.js";import{c as pe}from"react/compiler-runtime";import{useLunora as fe}from"@lunora/react";import{useState as H}from"react";import{N as be}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{useAutoRefresh as ge}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-BCC8_4BQ.js";import{ADMIN_FUNCTIONS as Q}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";function xe({className:a,orientation:e="horizontal",...l}){return t(de,{"data-slot":"separator",orientation:e,className:ce("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",a),...l})}const ve=/https?:\/\/[^\s"'<>)]+/i,ae=a=>a===void 0?void 0:ve.exec(a)?.[0],N=a=>a===void 0?"":Array.isArray(a)?a.join(", "):a,Ne=a=>{if(a!==void 0)return ae(a.html)??ae(a.text)},ye=(a,e)=>{const l=e.trim().toLowerCase();return l===""?a:a.filter(o=>`${o.subject} ${N(o.to)} ${N(o.cc)}`.toLowerCase().includes(l))},we=(a,e)=>{if(a.length!==0)return a.find(l=>l.id===e)??a[0]},Ce=re(Q.clearCapturedMail),ke=re(Q.sendTestMail),Se=a=>{const e=pe(38),{limit:l}=a,o=fe();let p;e[0]!==l?(p={limit:l},e[0]=l,e[1]=p):p=e[1];const{data:P,error:y,errorSource:w,isLoading:g,refetch:n}=be(Q.getCapturedMail,p),[C,f]=H(null),[q,k]=H(null),[x,i]=H("html"),[c,D]=H(""),b=P?.entries??[],r=y??C,u=y===null?C:w;let S;e[2]!==o||e[3]!==n?(S=async()=>{f(null);try{await o.query(Ce,{},Y("")),k(null),n()}catch(m){f(Z(m))}},e[2]=o,e[3]=n,e[4]=S):S=e[4];const R=S;let $;e[5]!==o||e[6]!==n?($=async()=>{f(null);try{await o.query(ke,{},Y("")),n()}catch(m){f(Z(m))}},e[5]=o,e[6]=n,e[7]=$):$=e[7];const B=$;let T;e[8]!==n?(T=()=>{n()},e[8]=n,e[9]=T):T=e[9],ge(T,!0);let L;e[10]!==R?(L=()=>{ee(R())},e[10]=R,e[11]=L):L=e[11];const U=L;let j;e[12]!==B?(j=()=>{ee(B())},e[12]=B,e[13]=j):j=e[13];const W=j;let M;e[14]===Symbol.for("react.memo_cache_sentinel")?(M=m=>{D(m.currentTarget.value)},e[14]=M):M=e[14];const J=M;let _;e[15]===Symbol.for("react.memo_cache_sentinel")?(_=m=>{const{id:h}=m.currentTarget.dataset;h!==void 0&&k(h)},e[15]=_):_=e[15];const K=_;let z;e[16]===Symbol.for("react.memo_cache_sentinel")?(z=m=>{const h=m.currentTarget.dataset.tab;(h==="headers"||h==="html"||h==="text")&&i(h)},e[16]=z):z=e[16];const V=z,A=ye(b,c),F=we(A,q),d=Ne(F);let O;e[17]!==d?(O=()=>{d!==void 0&&he(d)},e[17]=d,e[18]=O):O=e[18];const X=O;let E;e[19]!==d?(E=()=>{d!==void 0&&"window"in globalThis&&globalThis.window.open(d,"_blank","noopener")},e[19]=d,e[20]=E):E=e[20];const G=E;let I;return e[21]!==b||e[22]!==r||e[23]!==u||e[24]!==c||e[25]!==g||e[26]!==d||e[27]!==U||e[28]!==X||e[29]!==J||e[30]!==G||e[31]!==K||e[32]!==V||e[33]!==W||e[34]!==F||e[35]!==x||e[36]!==A?(I={entries:b,error:r,errorSource:u,filter:c,isLoading:g,link:d,onClear:U,onCopyLink:X,onFilterChange:J,onOpenLink:G,onSelectMessage:K,onSelectTab:V,onSendTest:W,selected:F,tab:x,visible:A},e[21]=b,e[22]=r,e[23]=u,e[24]=c,e[25]=g,e[26]=d,e[27]=U,e[28]=X,e[29]=J,e[30]=G,e[31]=K,e[32]=V,e[33]=W,e[34]=F,e[35]=x,e[36]=A,e[37]=I):I=e[37],I},$e=`<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data:; style-src 'unsafe-inline'; font-src data:">`,Te=a=>`${$e}${a}`,We=({limit:a=100})=>{const e=ue(),{entries:l,error:o,errorSource:p,filter:P,isLoading:y,link:w,onClear:g,onCopyLink:n,onFilterChange:C,onOpenLink:f,onSelectMessage:q,onSelectTab:k,onSendTest:x,selected:i,tab:c,visible:D}=Se({limit:a}),b=r=>e(r==="html"?"HTML":r==="text"?"Plain text":"Headers");return s("div",{className:"flex flex-col gap-4","data-testid":"mail-panel",children:[s("div",{className:"flex flex-wrap items-center gap-2",children:[t(v,{"data-testid":"mail-send-test",onClick:x,size:"sm",type:"button",variant:"outline",children:e("Send test")}),t(v,{"data-testid":"mail-clear",disabled:l.length===0,onClick:g,size:"sm",type:"button",variant:"outline",children:e("Clear inbox")}),l.length>0&&t(le,{className:"ml-auto","data-testid":"mail-count",variant:"secondary",children:e("{count} messages",{count:l.length})})]}),o!==null&&t(ie,{error:p,testId:"mail-error"}),o===null&&!y&&l.length===0&&t(oe,{description:e("Email your app sends in dev is captured here — nothing is delivered."),icon:s("svg",{"aria-hidden":"true",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.6,viewBox:"0 0 24 24",children:[t("path",{d:"M4 5h16v14H4z"}),t("path",{d:"m4 6 8 6 8-6"})]}),testId:"mail-empty",title:e("No captured email.")}),l.length>0&&s("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-[minmax(0,22rem)_1fr]","data-testid":"mail-reader",children:[s("div",{className:"flex flex-col gap-2",children:[t(se,{"aria-label":e("Search messages"),"data-testid":"mail-search",onChange:C,placeholder:e("Filter messages"),type:"search",value:P}),t(ne,{className:"max-h-[32rem] rounded-xl border border-border bg-card shadow-xs","data-testid":"mail-list",children:t("ul",{className:"divide-y",children:D.map(r=>{const u=r.id===i?.id;return t("li",{children:s("button",{className:`flex w-full flex-col items-start gap-0.5 px-3 py-2 text-left text-sm hover:bg-muted/60 ${u?"bg-muted":""}`,"data-active":u,"data-id":r.id,"data-testid":"mail-list-item",onClick:q,type:"button",children:[t("span",{className:"w-full truncate font-medium",children:r.subject||e("(no subject)")}),t("span",{className:"w-full truncate text-xs text-muted-foreground",children:N(r.to)}),t("span",{className:"text-xs text-muted-foreground tabular-nums",children:te(r.capturedAt,"—")})]})},r.id)})})})]}),i!==void 0&&s("div",{className:"flex min-w-0 flex-col gap-3 rounded-xl border border-border bg-card p-4 shadow-xs","data-testid":"mail-detail",children:[s("div",{className:"flex flex-col gap-1",children:[t("h2",{className:"truncate text-base font-semibold","data-testid":"mail-subject",children:i.subject||e("(no subject)")}),s("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs text-muted-foreground",children:[t("dt",{children:e("From")}),t("dd",{className:"truncate font-mono",children:i.from??"—"}),t("dt",{children:e("To")}),t("dd",{className:"truncate font-mono",children:N(i.to)}),i.cc!==void 0&&i.cc.length>0&&s(me,{children:[t("dt",{children:e("Cc")}),t("dd",{className:"truncate font-mono",children:N(i.cc)})]}),t("dt",{children:e("Sent")}),t("dd",{className:"tabular-nums",children:te(i.capturedAt,"—")})]})]}),s("div",{className:"flex flex-wrap items-center gap-2","data-testid":"mail-actions",children:[t(v,{"data-testid":"mail-copy-link",disabled:w===void 0,onClick:n,size:"sm",type:"button",variant:"outline",children:e("Copy link")}),t(v,{"data-testid":"mail-open-link",disabled:w===void 0,onClick:f,size:"sm",type:"button",variant:"outline",children:e("Open in new tab")})]}),t(xe,{}),t("div",{className:"flex items-center gap-1","data-testid":"mail-tabs",role:"tablist",children:["html","text","headers"].map(r=>t(v,{"aria-selected":c===r,"data-tab":r,"data-testid":`mail-tab-${r}`,onClick:k,role:"tab",size:"sm",type:"button",variant:c===r?"secondary":"ghost",children:b(r)},r))}),s("div",{className:"min-h-[12rem]",children:[c==="html"&&(i.html===void 0?t("p",{className:"text-sm text-muted-foreground",children:e("No HTML body.")}):t("iframe",{className:"h-[24rem] w-full rounded-md border bg-white","data-testid":"mail-preview-html",sandbox:"",srcDoc:Te(i.html),title:e("Email preview")})),c==="text"&&(i.text===void 0?t("p",{className:"text-sm text-muted-foreground",children:e("No text body.")}):t("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-text",children:i.text})),c==="headers"&&(i.headers===void 0||Object.keys(i.headers).length===0?t("p",{className:"text-sm text-muted-foreground",children:e("No headers.")}):t("pre",{className:"overflow-auto whitespace-pre-wrap rounded-md border bg-muted/30 p-3 text-xs","data-testid":"mail-preview-headers",children:Object.entries(i.headers).map(([r,u])=>`${r}: ${u}`).join(`
|
|
2
2
|
`)}))]})]})]})]})};export{We as MailPanel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useLunora as pt}from"@lunora/react";import{useNavigate as xt}from"@tanstack/react-router";import{useState as he,useRef as We,useEffect as tt,useMemo as bt}from"react";import{L as vt}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as yt}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as rt}from"../packem_shared/button-BkCrNcAs.js";import{N as Je}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import Nt from"../packem_shared/useDebounced-Ihdiid_k.js";import{useT as pe}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as ze}from"../packem_shared/ADMIN_FUNCTIONS-CZESgd10.js";import{c as St}from"../packem_shared/cf-links-Dmg86v1D.js";import{l as $t,k as Ye,f as at,d as wt,b as qt,g as kt}from"../packem_shared/internal-BSIsQVC6.js";import{r as Mt,l as _t}from"../packem_shared/shard-history-DMEW5VBE.js";import{w as It}from"../packem_shared/trace-handoff-Dw7mwjxu.js";import{c as Le}from"react/compiler-runtime";import{f as Ct}from"../packem_shared/log-fields-CoL3hsIQ.js";import{g as et}from"../packem_shared/badge-BbuuAio7.js";import{c as ge,u as fe,n as Pe,f as Qe,m as Rt}from"../packem_shared/card-CIDGUN6K.js";import{p as de,d as dt,m as He,u as oe,n as mt,f as ut}from"../packem_shared/table-DdJBrClo.js";import{S as ht}from"../packem_shared/sparkline-CgjeUU2I.js";import{jsx as t,jsxs as o,Fragment as Ve}from"react/jsx-runtime";import{aggregateMetrics as Dt,computeLatencyPercentiles as Ft,enrichQueryStats as Tt,shardsToAggregate as Lt}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{g as me}from"../packem_shared/stat-card-fm_TF1mo.js";import{ResponsiveContainer as lt,AreaChart as Ot,CartesianGrid as st,XAxis as nt,YAxis as it,Tooltip as ot,Area as zt,LineChart as At,Line as Et}from"recharts";import{E as Kt}from"../packem_shared/empty-state-Cg7t_8qu.js";import{c as jt}from"../packem_shared/utils-bhneXptQ.js";import{N as Pt,y as Qt,k as Ue,_ as Ut,w as Bt}from"../packem_shared/select-Bul-DeII.js";const Jt=(l,e)=>l<e?-1:l>e?1:0,Ze=l=>{if(l===void 0)return"null";if(typeof l=="bigint")throw new TypeError("stableStringify: cannot use a bigint in a stable JSON cache key — pass it as a string, or use stableWireKey");if(l===null||typeof l!="object")return JSON.stringify(l);if(Array.isArray(l))return`[${l.map(d=>Ze(d)).join(",")}]`;const e=Object.getPrototypeOf(l);if(e!==null&&e!==Object.prototype){const d=l.constructor?.name??"value";throw new TypeError(`stableStringify: cannot use a ${d} in a stable JSON cache key — only plain objects, arrays, and JSON primitives are supported (wire-typed values key via stableWireKey)`)}const s=l,a=Object.keys(s).toSorted(Jt),r=[];for(const d of a){const i=s[d];i!==void 0&&r.push(`${JSON.stringify(d)}:${Ze(i)}`)}return`{${r.join(",")}}`},gt=(l,e,s)=>`${l}:${e}:${Ze(s??{})}`,ft=(l,e)=>l==="gauge"?e.last:l==="histogram"?e.sum/Math.max(1,e.count):e.sum,Ht=(l,e)=>ft(l,e),Gt=l=>ft(l.kind,l),Xe=l=>Number.isInteger(l)?l.toLocaleString():l.toLocaleString(void 0,{maximumFractionDigits:2}),Wt=l=>Array.isArray(l?.series)?l.series:[],Xt="FUNCTION_NOT_FOUND",Yt=l=>{const e=new Map;if(!Array.isArray(l?.series))return e;for(const s of l.series)e.set(gt(s.kind,s.name,s.attributes),s.points);return e},Vt={counter:"secondary",gauge:"default",histogram:"outline"},Zt=l=>{const e=Le(18),{name:s,onOpenTrace:a,traceId:r}=l,d=pe();if(r===void 0){let u;return e[0]===Symbol.for("react.memo_cache_sentinel")?(u=t("span",{className:"text-muted-foreground",children:"—"}),e[0]=u):u=e[0],u}let i;e[1]!==r?(i=r.slice(0,8),e[1]=r,e[2]=i):i=e[2];const n=i;if(a===void 0){const u=`mt-instrument-trace-${s}`;let m;return e[3]!==n||e[4]!==u||e[5]!==r?(m=t("span",{className:"text-muted-foreground","data-testid":u,title:r,children:n}),e[3]=n,e[4]=u,e[5]=r,e[6]=m):m=e[6],m}const S=`mt-instrument-trace-${s}`;let x;e[7]!==a||e[8]!==r?(x=()=>{a(r)},e[7]=a,e[8]=r,e[9]=x):x=e[9];let $;e[10]!==d||e[11]!==r?($=d("Open the exemplar trace {trace}",{trace:r}),e[10]=d,e[11]=r,e[12]=$):$=e[12];let f;return e[13]!==n||e[14]!==S||e[15]!==x||e[16]!==$?(f=t("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":S,onClick:x,title:$,type:"button",children:n}),e[13]=n,e[14]=S,e[15]=x,e[16]=$,e[17]=f):f=e[17],f},er=l=>{const e=Le(105),{onOpenTrace:s,shardKey:a}=l,r=pe();let d;e[0]===Symbol.for("react.memo_cache_sentinel")?(d={},e[0]=d):d=e[0];let i;e[1]!==a?(i={live:!0,shardKey:a},e[1]=a,e[2]=i):i=e[2];const{data:n,error:S,errorSource:x}=Je(ze.getMetricSeries,d,i);let $;e[3]===Symbol.for("react.memo_cache_sentinel")?($={},e[3]=$):$=e[3];let f;e[4]!==a?(f={live:!0,shardKey:a},e[4]=a,e[5]=f):f=e[5];const{data:u}=Je(ze.getMetricHistory,$,f);let m,M,b,w,_,c,g,p,q,k,y,I,C;if(e[6]!==n||e[7]!==S||e[8]!==x||e[9]!==u||e[10]!==s||e[11]!==r){p=Symbol.for("react.early_return_sentinel");e:{const z=Wt(n),E=$t(x)===Xt;if(S!==null&&!E){let h;e[25]!==r?(h=r("Instruments"),e[25]=r,e[26]=h):h=e[26];let K;e[27]!==h?(K=t("h3",{className:"text-sm font-semibold text-foreground",children:h}),e[27]=h,e[28]=K):K=e[28];let j;e[29]!==S||e[30]!==r?(j=r("Instruments unavailable: {error}",{error:S}),e[29]=S,e[30]=r,e[31]=j):j=e[31];let P;e[32]!==j?(P=t("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:j}),e[32]=j,e[33]=P):P=e[33];let ie;e[34]!==K||e[35]!==P?(ie=o("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[K,P]}),e[34]=K,e[35]=P,e[36]=ie):ie=e[36],p=ie;break e}if(z.length===0){p=null;break e}const Q=Yt(u);let L;e[37]!==r?(L=h=>r(h==="counter"?"Counter":h==="gauge"?"Gauge":"Histogram"),e[37]=r,e[38]=L):L=e[38];const U=L;_="flex flex-col gap-2",c="mt-instruments";let O;e[39]!==r?(O=r("Instruments"),e[39]=r,e[40]=O):O=e[40],e[41]!==O?(g=t("h3",{className:"text-sm font-semibold text-foreground",children:O}),e[41]=O,e[42]=g):g=e[42],w=ge,C="overflow-hidden py-0",b=fe,I="px-0",M=mt,k="mt-instruments-table";let A;e[43]!==r?(A=r("name"),e[43]=r,e[44]=A):A=e[44];let J;e[45]!==A?(J=t(de,{children:A}),e[45]=A,e[46]=J):J=e[46];let H;e[47]!==r?(H=r("kind"),e[47]=r,e[48]=H):H=e[48];let G;e[49]!==H?(G=t(de,{children:H}),e[49]=H,e[50]=G):G=e[50];let W;e[51]!==r?(W=r("value"),e[51]=r,e[52]=W):W=e[52];let X;e[53]!==W?(X=t(de,{className:"text-right",children:W}),e[53]=W,e[54]=X):X=e[54];let Y;e[55]!==r?(Y=r("count"),e[55]=r,e[56]=Y):Y=e[56];let V;e[57]!==Y?(V=t(de,{className:"text-right",children:Y}),e[57]=Y,e[58]=V):V=e[58];let Z;e[59]!==r?(Z=r("range"),e[59]=r,e[60]=Z):Z=e[60];let ee;e[61]!==Z?(ee=t(de,{className:"text-right",children:Z}),e[61]=Z,e[62]=ee):ee=e[62];let te;e[63]!==r?(te=r("trend"),e[63]=r,e[64]=te):te=e[64];let re;e[65]!==te?(re=t(de,{children:te}),e[65]=te,e[66]=re):re=e[66];let ae;e[67]!==r?(ae=r("trace"),e[67]=r,e[68]=ae):ae=e[68];let le;e[69]!==ae?(le=t(de,{children:ae}),e[69]=ae,e[70]=le):le=e[70];let se;e[71]!==r?(se=r("dimensions"),e[71]=r,e[72]=se):se=e[72];let ne;e[73]!==se?(ne=t(de,{children:se}),e[73]=se,e[74]=ne):ne=e[74],e[75]!==J||e[76]!==G||e[77]!==X||e[78]!==V||e[79]!==ee||e[80]!==re||e[81]!==le||e[82]!==ne?(y=t(dt,{children:o(He,{children:[J,G,X,V,ee,re,le,ne]})}),e[75]=J,e[76]=G,e[77]=X,e[78]=V,e[79]=ee,e[80]=re,e[81]=le,e[82]=ne,e[83]=y):y=e[83],m=ut,q=z.map(h=>{const K=Ct(h.attributes),j=gt(h.kind,h.name,h.attributes),P=(Q.get(j)??[]).map(ie=>Ht(h.kind,ie));return o(He,{"data-testid":`mt-instrument-${h.name}`,children:[t(oe,{className:"font-mono text-xs",title:h.functionPath,children:h.name}),t(oe,{children:t(et,{variant:Vt[h.kind],children:U(h.kind)})}),t(oe,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${h.name}`,children:Xe(Gt(h))}),t(oe,{className:"text-right tabular-nums text-muted-foreground",children:h.count.toLocaleString()}),t(oe,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:h.min===h.max?"—":`${Xe(h.min)}–${Xe(h.max)}`}),t(oe,{children:P.length>=2?t(ht,{ariaLabel:r("{name} trend",{name:h.name}),className:"h-6 w-24 text-foreground",series:P,testId:`mt-instrument-trend-${h.name}`}):t("span",{className:"text-xs text-muted-foreground",children:"—"})}),t(oe,{className:"font-mono text-xs",children:t(Zt,{name:h.name,onOpenTrace:s,traceId:h.exemplarTraceId})}),t(oe,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:K,children:K===""?"—":K})]},j)})}e[6]=n,e[7]=S,e[8]=x,e[9]=u,e[10]=s,e[11]=r,e[12]=m,e[13]=M,e[14]=b,e[15]=w,e[16]=_,e[17]=c,e[18]=g,e[19]=p,e[20]=q,e[21]=k,e[22]=y,e[23]=I,e[24]=C}else m=e[12],M=e[13],b=e[14],w=e[15],_=e[16],c=e[17],g=e[18],p=e[19],q=e[20],k=e[21],y=e[22],I=e[23],C=e[24];if(p!==Symbol.for("react.early_return_sentinel"))return p;let R;e[84]!==m||e[85]!==q?(R=t(m,{children:q}),e[84]=m,e[85]=q,e[86]=R):R=e[86];let D;e[87]!==M||e[88]!==R||e[89]!==k||e[90]!==y?(D=o(M,{"data-testid":k,children:[y,R]}),e[87]=M,e[88]=R,e[89]=k,e[90]=y,e[91]=D):D=e[91];let N;e[92]!==b||e[93]!==D||e[94]!==I?(N=t(b,{className:I,children:D}),e[92]=b,e[93]=D,e[94]=I,e[95]=N):N=e[95];let v;e[96]!==w||e[97]!==N||e[98]!==C?(v=t(w,{className:C,children:N}),e[96]=w,e[97]=N,e[98]=C,e[99]=v):v=e[99];let T;return e[100]!==_||e[101]!==c||e[102]!==g||e[103]!==v?(T=o("section",{className:_,"data-testid":c,children:[g,v]}),e[100]=_,e[101]=c,e[102]=g,e[103]=v,e[104]=T):T=e[104],T},tr=l=>{const e=Le(74),{aggregate:s,shardResults:a}=l,r=pe();let d;e[0]!==r?(d=r("Shards"),e[0]=r,e[1]=d):d=e[1];let i;e[2]!==s.failed||e[3]!==s.reachable||e[4]!==r?(i=s.failed>0?r("{reachable} reachable, {failed} unreachable",{failed:s.failed,reachable:s.reachable}):r("{reachable} reachable",{reachable:s.reachable}),e[2]=s.failed,e[3]=s.reachable,e[4]=r,e[5]=i):i=e[5];let n;e[6]!==d||e[7]!==i?(n=t(me,{label:d,testId:"mt-agg-shards",value:i}),e[6]=d,e[7]=i,e[8]=n):n=e[8];let S;e[9]!==r?(S=r("Total requests"),e[9]=r,e[10]=S):S=e[10];let x;e[11]!==s.totalRequests||e[12]!==S?(x=t(me,{label:S,testId:"mt-agg-requests",value:s.totalRequests}),e[11]=s.totalRequests,e[12]=S,e[13]=x):x=e[13];let $;e[14]!==r?($=r("Total errors"),e[14]=r,e[15]=$):$=e[15];let f;e[16]!==s.totalErrors||e[17]!==$?(f=t(me,{label:$,testId:"mt-agg-errors",value:s.totalErrors}),e[16]=s.totalErrors,e[17]=$,e[18]=f):f=e[18];let u;e[19]!==r?(u=r("Total database size"),e[19]=r,e[20]=u):u=e[20];let m;e[21]!==s.totalDatabaseSize?(m=Ye(s.totalDatabaseSize),e[21]=s.totalDatabaseSize,e[22]=m):m=e[22];let M;e[23]!==u||e[24]!==m?(M=t(me,{label:u,testId:"mt-agg-db-size",value:m}),e[23]=u,e[24]=m,e[25]=M):M=e[25];let b;e[26]!==r?(b=r("Combined cache hit rate"),e[26]=r,e[27]=b):b=e[27];let w;e[28]!==s.hitRate||e[29]!==r?(w=s.hitRate===null?r("no cache configured"):`${(s.hitRate*100).toFixed(1)}%`,e[28]=s.hitRate,e[29]=r,e[30]=w):w=e[30];let _;e[31]!==b||e[32]!==w?(_=t(me,{label:b,testId:"mt-agg-cache",value:w}),e[31]=b,e[32]=w,e[33]=_):_=e[33];let c;e[34]!==M||e[35]!==_||e[36]!==n||e[37]!==x||e[38]!==f?(c=o("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[n,x,f,M,_]}),e[34]=M,e[35]=_,e[36]=n,e[37]=x,e[38]=f,e[39]=c):c=e[39];let g;e[40]!==r?(g=r("shard"),e[40]=r,e[41]=g):g=e[41];let p;e[42]!==g?(p=t(de,{children:g}),e[42]=g,e[43]=p):p=e[43];let q;e[44]!==r?(q=r("requests"),e[44]=r,e[45]=q):q=e[45];let k;e[46]!==q?(k=t(de,{children:q}),e[46]=q,e[47]=k):k=e[47];let y;e[48]!==r?(y=r("errors"),e[48]=r,e[49]=y):y=e[49];let I;e[50]!==y?(I=t(de,{children:y}),e[50]=y,e[51]=I):I=e[51];let C;e[52]!==r?(C=r("db size"),e[52]=r,e[53]=C):C=e[53];let R;e[54]!==C?(R=t(de,{children:C}),e[54]=C,e[55]=R):R=e[55];let D;e[56]!==p||e[57]!==k||e[58]!==I||e[59]!==R?(D=t(dt,{children:o(He,{children:[p,k,I,R]})}),e[56]=p,e[57]=k,e[58]=I,e[59]=R,e[60]=D):D=e[60];let N;if(e[61]!==a||e[62]!==r){let E;e[64]!==r?(E=Q=>o(He,{"data-testid":`mt-agg-row-${Q.shard}`,children:[t(oe,{children:Q.shard}),Q.metrics===null?t(oe,{className:"text-destructive",colSpan:3,children:Q.error??r("unreachable")}):o(Ve,{children:[t(oe,{className:"tabular-nums",children:Q.metrics.requests}),t(oe,{className:"tabular-nums",children:Q.metrics.errors}),t(oe,{className:"tabular-nums",children:Ye(Q.metrics.databaseSize)})]})]},Q.shard),e[64]=r,e[65]=E):E=e[65],N=a.map(E),e[61]=a,e[62]=r,e[63]=N}else N=e[63];let v;e[66]!==N?(v=t(ut,{children:N}),e[66]=N,e[67]=v):v=e[67];let T;e[68]!==D||e[69]!==v?(T=t(ge,{className:"overflow-hidden py-0",children:t(fe,{className:"px-0",children:o(mt,{"data-testid":"mt-agg-table",children:[D,v]})})}),e[68]=D,e[69]=v,e[70]=T):T=e[70];let z;return e[71]!==c||e[72]!==T?(z=o("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[c,T]}),e[71]=c,e[72]=T,e[73]=z):z=e[73],z},rr=l=>{const e=Math.floor(l/1e3),s=Math.floor(e/3600),a=Math.floor(e%3600/60),r=e%60;return s>0?`${s.toString()}h ${a.toString()}m`:a>0?`${a.toString()}m ${r.toString()}s`:`${r.toString()}s`},ar=(l,e)=>{const s=l+e;return s===0?"—":`${(l/s*100).toFixed(1)}%`},ct=l=>l<=0?"—":l<1?`${(l*1e3).toFixed(0)}μs`:l<1e3?`${l.toFixed(1)}ms`:`${(l/1e3).toFixed(2)}s`,lr=l=>{const e=Le(75),{currentDelta:s,errorRate:a,history:r,latencyPercentiles:d,metrics:i}=l,n=pe();let S;e[0]!==r||e[1]!==n?(S=r.length>=2?t(ht,{ariaLabel:n("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:r,testId:"mt-sparkline"}):void 0,e[0]=r,e[1]=n,e[2]=S):S=e[2];let x;e[3]!==s||e[4]!==r.length||e[5]!==n?(x=r.length>=2?o(Ve,{children:[t("span",{className:"font-semibold text-foreground",children:`+${s.toLocaleString()}`})," ",n("last interval")]}):t("span",{"data-testid":"mt-sparkline-empty",children:n("collecting samples…")}),e[3]=s,e[4]=r.length,e[5]=n,e[6]=x):x=e[6];let $;e[7]!==n?($=n("Requests"),e[7]=n,e[8]=$):$=e[8];let f;e[9]!==i.requests||e[10]!==S||e[11]!==x||e[12]!==$?(f=t(me,{chart:S,footer:x,label:$,testId:"mt-requests",value:i.requests}),e[9]=i.requests,e[10]=S,e[11]=x,e[12]=$,e[13]=f):f=e[13];let u;e[14]!==a||e[15]!==n?(u=n("{rate} error rate",{rate:a}),e[14]=a,e[15]=n,e[16]=u):u=e[16];let m;e[17]!==n?(m=n("Errors"),e[17]=n,e[18]=m):m=e[18];let M;e[19]!==a||e[20]!==i.errors?(M=o(Ve,{children:[i.errors," (",a,")"]}),e[19]=a,e[20]=i.errors,e[21]=M):M=e[21];let b;e[22]!==u||e[23]!==m||e[24]!==M?(b=t(me,{footer:u,label:m,testId:"mt-errors",value:M}),e[22]=u,e[23]=m,e[24]=M,e[25]=b):b=e[25];let w;e[26]!==d.p90?(w=d.p90>0?`P90 ${ct(d.p90)}`:void 0,e[26]=d.p90,e[27]=w):w=e[27];let _;e[28]!==n?(_=n("P95 latency"),e[28]=n,e[29]=_):_=e[29];let c;e[30]!==d.p95?(c=d.p95>0?ct(d.p95):"—",e[30]=d.p95,e[31]=c):c=e[31];let g;e[32]!==_||e[33]!==c||e[34]!==w?(g=t(me,{footer:w,label:_,testId:"mt-p95",value:c}),e[32]=_,e[33]=c,e[34]=w,e[35]=g):g=e[35];let p;e[36]!==i.cache||e[37]!==n?(p=i.cache===null?void 0:`${i.cache.entries.toLocaleString()} ${n("cache entries")}`,e[36]=i.cache,e[37]=n,e[38]=p):p=e[38];let q;e[39]!==n?(q=n("Database size"),e[39]=n,e[40]=q):q=e[40];let k;e[41]!==i.databaseSize?(k=Ye(i.databaseSize),e[41]=i.databaseSize,e[42]=k):k=e[42];let y;e[43]!==p||e[44]!==q||e[45]!==k?(y=t(me,{footer:p,label:q,testId:"mt-db-size",value:k}),e[43]=p,e[44]=q,e[45]=k,e[46]=y):y=e[46];let I;e[47]!==n?(I=n("Shard"),e[47]=n,e[48]=I):I=e[48];let C;e[49]!==i.shard||e[50]!==I?(C=t(me,{label:I,testId:"mt-shard",value:i.shard}),e[49]=i.shard,e[50]=I,e[51]=C):C=e[51];let R;e[52]!==n?(R=n("Uptime"),e[52]=n,e[53]=R):R=e[53];let D;e[54]!==i.uptimeMs?(D=rr(i.uptimeMs),e[54]=i.uptimeMs,e[55]=D):D=e[55];let N;e[56]!==R||e[57]!==D?(N=t(me,{label:R,testId:"mt-uptime",value:D}),e[56]=R,e[57]=D,e[58]=N):N=e[58];let v;e[59]!==n?(v=n("Cache hit rate"),e[59]=n,e[60]=v):v=e[60];let T;e[61]!==i.cache||e[62]!==n?(T=i.cache===null?n("no cache configured"):n("{rate} ({count} entries)",{count:i.cache.entries,rate:ar(i.cache.hits,i.cache.misses)}),e[61]=i.cache,e[62]=n,e[63]=T):T=e[63];let z;e[64]!==v||e[65]!==T?(z=t(me,{label:v,testId:"mt-cache",value:T}),e[64]=v,e[65]=T,e[66]=z):z=e[66];let E;return e[67]!==g||e[68]!==y||e[69]!==C||e[70]!==N||e[71]!==z||e[72]!==f||e[73]!==b?(E=o("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[f,b,g,y,C,N,z]}),e[67]=g,e[68]=y,e[69]=C,e[70]=N,e[71]=z,e[72]=f,e[73]=b,e[74]=E):E=e[74],E},Ge=l=>l>=100?"critical":l>=50?"warning":"good",Oe=l=>l<1?`${(l*1e3).toFixed(0)}μs`:l<1e3?`${l.toFixed(1)}ms`:`${(l/1e3).toFixed(2)}s`,Be=l=>l>=1e9?`${(l/1e9).toFixed(1)}B`:l>=1e6?`${(l/1e6).toFixed(1)}M`:l>=1e3?`${(l/1e3).toFixed(1)}K`:l.toLocaleString(),sr=l=>{const e=Le(3),{level:s}=l;if(s==="critical"){let r;return e[0]===Symbol.for("react.memo_cache_sentinel")?(r=t(et,{variant:"destructive",children:"Slow"}),e[0]=r):r=e[0],r}if(s==="warning"){let r;return e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-warning/10 px-2 py-0.5 text-xs font-medium text-warning",children:"Moderate"}),e[1]=r):r=e[1],r}let a;return e[2]===Symbol.for("react.memo_cache_sentinel")?(a=t("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-success/10 px-2 py-0.5 text-xs font-medium text-success",children:"Fast"}),e[2]=a):a=e[2],a},nr=(l,e)=>{const s=[...l];return s.sort((a,r)=>{switch(e){case"avgTime":return r.avgDurationMs-a.avgDurationMs;case"execCount":return r.execCount-a.execCount;case"rowsRead":return r.rowsRead-a.rowsRead;default:return r.totalDurationMs-a.totalDurationMs}}),s},ir=l=>{const e=Le(161),{queryStats:s}=l,a=pe(),[r,d]=he("totalTime");let i;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=new Set,e[0]=i):i=e[0];const[n,S]=he(i);let x;e[1]===Symbol.for("react.memo_cache_sentinel")?(x=C=>{C!==null&&d(C)},e[1]=x):x=e[1];const $=x;let f,u,m,M,b,w,_,c,g,p;if(e[2]!==n||e[3]!==s||e[4]!==r||e[5]!==a){m=Symbol.for("react.early_return_sentinel");e:{const C=nr(s,r);let R;e[16]!==s?(R=s.filter(or),e[16]=s,e[17]=R):R=e[17];const D=R.length;let N;e[18]!==s?(N=s.filter(cr),e[18]=s,e[19]=N):N=e[19];const v=N.length;let T;e[20]!==s?(T=s.filter(dr),e[20]=s,e[21]=T):T=e[21];const z=T.length;let E;e[22]===Symbol.for("react.memo_cache_sentinel")?(E=F=>{S(ce=>{const B=new Set(ce);return B.has(F)?B.delete(F):B.add(F),B})},e[22]=E):E=e[22];const Q=E;if(s.length===0){let F;e[23]!==a?(F=a("No query insights yet"),e[23]=a,e[24]=F):F=e[24];let ce;e[25]!==F?(ce=t("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:F}),e[25]=F,e[26]=ce):ce=e[26];let B;e[27]!==a?(B=a("Query insights appear once statements are executed against this shard."),e[27]=a,e[28]=B):B=e[28];let ue;e[29]!==B?(ue=t("p",{className:"mt-1 text-sm",children:B}),e[29]=B,e[30]=ue):ue=e[30];let je;e[31]!==ce||e[32]!==ue?(je=t(ge,{children:t(fe,{className:"py-12",children:o("div",{className:"text-center text-muted-foreground",children:[ce,ue]})})}),e[31]=ce,e[32]=ue,e[33]=je):je=e[33],m=je;break e}_="space-y-4",c="qi-root";let L;e[34]!==a?(L=a("Critical queries"),e[34]=a,e[35]=L):L=e[35];let U;e[36]!==L?(U=t(Pe,{className:"pb-2",children:t(Qe,{className:"text-sm font-medium",children:L})}),e[36]=L,e[37]=U):U=e[37];let O;e[38]!==D?(O=t("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:D}),e[38]=D,e[39]=O):O=e[39];let A;e[40]!==a?(A=a(">100ms avg execution"),e[40]=a,e[41]=A):A=e[41];let J;e[42]!==A?(J=t("p",{className:"text-xs text-muted-foreground",children:A}),e[42]=A,e[43]=J):J=e[43];let H;e[44]!==O||e[45]!==J?(H=o(fe,{children:[O,J]}),e[44]=O,e[45]=J,e[46]=H):H=e[46];let G;e[47]!==U||e[48]!==H?(G=o(ge,{children:[U,H]}),e[47]=U,e[48]=H,e[49]=G):G=e[49];let W;e[50]!==a?(W=a("Moderate queries"),e[50]=a,e[51]=W):W=e[51];let X;e[52]!==W?(X=t(Pe,{className:"pb-2",children:t(Qe,{className:"text-sm font-medium",children:W})}),e[52]=W,e[53]=X):X=e[53];let Y;e[54]!==v?(Y=t("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:v}),e[54]=v,e[55]=Y):Y=e[55];let V;e[56]!==a?(V=a("50–100ms avg execution"),e[56]=a,e[57]=V):V=e[57];let Z;e[58]!==V?(Z=t("p",{className:"text-xs text-muted-foreground",children:V}),e[58]=V,e[59]=Z):Z=e[59];let ee;e[60]!==Y||e[61]!==Z?(ee=o(fe,{children:[Y,Z]}),e[60]=Y,e[61]=Z,e[62]=ee):ee=e[62];let te;e[63]!==X||e[64]!==ee?(te=o(ge,{children:[X,ee]}),e[63]=X,e[64]=ee,e[65]=te):te=e[65];let re;e[66]!==a?(re=a("Fast queries"),e[66]=a,e[67]=re):re=e[67];let ae;e[68]!==re?(ae=t(Pe,{className:"pb-2",children:t(Qe,{className:"text-sm font-medium",children:re})}),e[68]=re,e[69]=ae):ae=e[69];let le;e[70]!==z?(le=t("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:z}),e[70]=z,e[71]=le):le=e[71];let se;e[72]!==a?(se=a("<50ms avg execution"),e[72]=a,e[73]=se):se=e[73];let ne;e[74]!==se?(ne=t("p",{className:"text-xs text-muted-foreground",children:se}),e[74]=se,e[75]=ne):ne=e[75];let h;e[76]!==le||e[77]!==ne?(h=o(fe,{children:[le,ne]}),e[76]=le,e[77]=ne,e[78]=h):h=e[78];let K;e[79]!==ae||e[80]!==h?(K=o(ge,{children:[ae,h]}),e[79]=ae,e[80]=h,e[81]=K):K=e[81],e[82]!==G||e[83]!==te||e[84]!==K?(g=o("div",{className:"grid gap-4 md:grid-cols-3",children:[G,te,K]}),e[82]=G,e[83]=te,e[84]=K,e[85]=g):g=e[85];let j;e[86]!==a?(j=a("Query leaderboard"),e[86]=a,e[87]=j):j=e[87];let P;e[88]!==j?(P=t("h3",{className:"text-lg font-semibold",children:j}),e[88]=j,e[89]=P):P=e[89];let ie;e[90]!==r||e[91]!==a?(ie=a("Slow queries sorted by {sortField}",{sortField:a(r)}),e[90]=r,e[91]=a,e[92]=ie):ie=e[92];let xe;e[93]!==ie?(xe=t("p",{className:"text-sm text-muted-foreground",children:ie}),e[93]=ie,e[94]=xe):xe=e[94];let be;e[95]!==P||e[96]!==xe?(be=o("div",{children:[P,xe]}),e[95]=P,e[96]=xe,e[97]=be):be=e[97];let ve;e[98]!==a?(ve=a("Sort by"),e[98]=a,e[99]=ve):ve=e[99];let ye;e[100]!==ve?(ye=t("span",{className:"text-sm text-muted-foreground",children:ve}),e[100]=ve,e[101]=ye):ye=e[101];let Ne;e[102]!==a?(Ne=a("Sort queries by"),e[102]=a,e[103]=Ne):Ne=e[103];let Ae;e[104]===Symbol.for("react.memo_cache_sentinel")?(Ae=t(Pt,{}),e[104]=Ae):Ae=e[104];let Se;e[105]!==Ne?(Se=t(Qt,{"aria-label":Ne,className:"w-[140px]","data-testid":"qi-sort",children:Ae}),e[105]=Ne,e[106]=Se):Se=e[106];let $e;e[107]!==a?($e=a("Total time"),e[107]=a,e[108]=$e):$e=e[108];let we;e[109]!==$e?(we=t(Ue,{value:"totalTime",children:$e}),e[109]=$e,e[110]=we):we=e[110];let qe;e[111]!==a?(qe=a("Avg time"),e[111]=a,e[112]=qe):qe=e[112];let ke;e[113]!==qe?(ke=t(Ue,{value:"avgTime",children:qe}),e[113]=qe,e[114]=ke):ke=e[114];let Me;e[115]!==a?(Me=a("Execution count"),e[115]=a,e[116]=Me):Me=e[116];let _e;e[117]!==Me?(_e=t(Ue,{value:"execCount",children:Me}),e[117]=Me,e[118]=_e):_e=e[118];let Ie;e[119]!==a?(Ie=a("Rows read"),e[119]=a,e[120]=Ie):Ie=e[120];let Ce;e[121]!==Ie?(Ce=t(Ue,{value:"rowsRead",children:Ie}),e[121]=Ie,e[122]=Ce):Ce=e[122];let Re;e[123]!==we||e[124]!==ke||e[125]!==_e||e[126]!==Ce?(Re=o(Ut,{children:[we,ke,_e,Ce]}),e[123]=we,e[124]=ke,e[125]=_e,e[126]=Ce,e[127]=Re):Re=e[127];let De;e[128]!==r||e[129]!==Se||e[130]!==Re?(De=o(Bt,{onValueChange:$,value:r,children:[Se,Re]}),e[128]=r,e[129]=Se,e[130]=Re,e[131]=De):De=e[131];let Fe;e[132]!==ye||e[133]!==De?(Fe=o("div",{className:"flex items-center gap-2",children:[ye,De]}),e[132]=ye,e[133]=De,e[134]=Fe):Fe=e[134],e[135]!==be||e[136]!==Fe?(p=o("div",{className:"flex items-center justify-between",children:[be,Fe]}),e[135]=be,e[136]=Fe,e[137]=p):p=e[137],u=ge;let Te;e[138]!==a?(Te=a("Statements"),e[138]=a,e[139]=Te):Te=e[139];let Ee;e[140]!==Te?(Ee=t(Qe,{children:Te}),e[140]=Te,e[141]=Ee):Ee=e[141],w=o(Pe,{children:[Ee,t(Rt,{children:a("{count} tracked statements",{count:C.length})})]}),f=fe,M="space-y-2";let Ke;e[142]!==n||e[143]!==a?(Ke=F=>{const ce=F.normalizedSql,B=n.has(ce),ue=Ge(F.avgDurationMs);return o("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[o("button",{"aria-expanded":B,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{Q(ce)},type:"button",children:[o("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[t(sr,{level:ue}),t("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:F.normalizedSql})]}),o("div",{className:"flex shrink-0 items-center gap-4",children:[o("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Oe(F.totalDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:a("total")})]}),o("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Oe(F.avgDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:a("avg")})]}),F.p95DurationMs!==void 0&&o("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Oe(F.p95DurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:a("p95")})]}),o("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Be(F.execCount)}),t("div",{className:"text-xs text-muted-foreground",children:a("calls")})]})]})]}),B&&o("div",{className:"space-y-3 border-t bg-muted/30 p-4",children:[o("div",{children:[t("p",{className:"mb-2 text-sm font-medium",children:a("Full statement")}),t("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:F.normalizedSql})]}),o("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[F.p50DurationMs!==void 0&&o("div",{children:[t("span",{className:"text-muted-foreground",children:a("p50")}),t("span",{className:"block font-medium tabular-nums",children:Oe(F.p50DurationMs)})]}),o("div",{children:[t("span",{className:"text-muted-foreground",children:a("Exec count")}),t("span",{className:"block font-medium tabular-nums",children:Be(F.execCount)})]}),o("div",{children:[t("span",{className:"text-muted-foreground",children:a("Total time")}),t("span",{className:"block font-medium tabular-nums",children:Oe(F.totalDurationMs)})]}),o("div",{children:[t("span",{className:"text-muted-foreground",children:a("Rows read")}),t("span",{className:"block font-medium tabular-nums",children:Be(F.rowsRead)})]}),o("div",{children:[t("span",{className:"text-muted-foreground",children:a("Rows written")}),t("span",{className:"block font-medium tabular-nums",children:Be(F.rowsWritten)})]})]})]})]},ce)},e[142]=n,e[143]=a,e[144]=Ke):Ke=e[144],b=C.map(Ke)}e[2]=n,e[3]=s,e[4]=r,e[5]=a,e[6]=f,e[7]=u,e[8]=m,e[9]=M,e[10]=b,e[11]=w,e[12]=_,e[13]=c,e[14]=g,e[15]=p}else f=e[6],u=e[7],m=e[8],M=e[9],b=e[10],w=e[11],_=e[12],c=e[13],g=e[14],p=e[15];if(m!==Symbol.for("react.early_return_sentinel"))return m;let q;e[145]!==M||e[146]!==b?(q=t("div",{className:M,children:b}),e[145]=M,e[146]=b,e[147]=q):q=e[147];let k;e[148]!==f||e[149]!==q?(k=t(f,{children:q}),e[148]=f,e[149]=q,e[150]=k):k=e[150];let y;e[151]!==u||e[152]!==k||e[153]!==w?(y=o(u,{children:[w,k]}),e[151]=u,e[152]=k,e[153]=w,e[154]=y):y=e[154];let I;return e[155]!==y||e[156]!==_||e[157]!==c||e[158]!==g||e[159]!==p?(I=o("div",{className:_,"data-testid":c,children:[g,p,y]}),e[155]=y,e[156]=_,e[157]=c,e[158]=g,e[159]=p,e[160]=I):I=e[160],I};function or(l){return Ge(l.avgDurationMs)==="critical"}function cr(l){return Ge(l.avgDurationMs)==="warning"}function dr(l){return Ge(l.avgDurationMs)==="good"}const mr=["1m","5m","15m","1h"],ur=l=>new Date(l).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),hr=l=>l.map(e=>({avg:Math.round(e.avgDurationMs*100)/100,execs:e.execCount,label:ur(e.bucketMs)})),gr=({shardKey:l=""})=>{const e=pe(),[s,a]=he("15m"),r=Je(ze.getQueryInsights,{range:s},{live:!0,shardKey:l}).data,d=hr(r?.buckets??[]);return o("div",{className:"flex flex-col gap-4","data-testid":"qi-range",children:[o("div",{className:"flex flex-wrap items-center gap-2",children:[t("div",{className:"flex gap-1 rounded-lg border border-border p-0.5","data-testid":"qi-ranges",role:"group",children:mr.map(i=>t("button",{"aria-pressed":i===s,className:jt("rounded px-2 py-1 text-xs outline-none transition-colors hover:bg-accent focus-visible:bg-accent",i===s&&"bg-accent font-medium text-foreground"),"data-testid":`qi-range-${i}`,onClick:()=>{a(i)},type:"button",children:i},i))}),r?.capped===!0&&t(et,{"data-testid":"qi-capped",variant:"secondary",children:e("showing a capped set")})]}),d.length===0?t(Kt,{description:e("Statements executed in the selected window appear here, with throughput and latency over time."),testId:"qi-empty",title:e("No queries in this window.")}):o("div",{className:"grid gap-4 lg:grid-cols-2",children:[o("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-throughput",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Throughput")}),t(lt,{height:140,width:"100%",children:o(Ot,{data:d,children:[t(st,{strokeDasharray:"3 3",vertical:!1}),t(nt,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{allowDecimals:!1,fontSize:10,tickLine:!1,width:32}),t(ot,{}),t(zt,{dataKey:"execs",fill:"var(--color-primary)",fillOpacity:.15,stroke:"var(--color-primary)",type:"monotone"})]})})]}),o("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-latency",children:[t("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Mean latency (ms)")}),t(lt,{height:140,width:"100%",children:o(At,{data:d,children:[t(st,{strokeDasharray:"3 3",vertical:!1}),t(nt,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{fontSize:10,tickLine:!1,width:32}),t(ot,{}),t(Et,{dataKey:"avg",dot:!1,stroke:"var(--color-destructive)",type:"monotone"})]})})]})]}),t(ir,{queryStats:r?.entries??[]})]})},fr=kt(ze.getMetrics),pr=(l,e)=>l?e:"overview",Ur=({initialShardKey:l})=>{const e=pt(),s=pe(),a=xt(),[r,d]=he(l??""),[i,n]=he("overview"),[S,x]=he([]),$=We(null),f=We(null),u=We(!0);tt(()=>(u.current=!0,()=>{u.current=!1}),[]);const m=Nt(r.trim(),400),M=L=>{It({shardKey:m,traceId:L}),at(a({to:"/traces"}))},{data:b,error:w,liveError:_}=Je(ze.getMetrics,{},{live:!0,shardKey:m}),c=b??null;tt(()=>{if(b===void 0)return;Mt(m);const L=b,U=$.current,O=f.current!==null&&f.current!==L.shard;if(f.current=L.shard,$.current=L.requests,O){x([]);return}U!==null&&L.requests>=U&&x(A=>[...A,L.requests-U].slice(-30))},[b,m]);const[g,p]=he(null),[q,k]=he(!1),y=async()=>{k(!0);const L=Lt(r,_t());try{const U=await Promise.all(L.map(async O=>{try{const A=await e.query(fr,{},wt(O));return{error:null,metrics:A,shard:O===""?A.shard:O}}catch(A){return{error:qt(A),metrics:null,shard:O===""?"__root__":O}}}));u.current&&p(U)}finally{u.current&&k(!1)}},I=g===null?null:Dt(g),C=c===null||c.requests===0?"—":`${(c.errors/c.requests*100).toFixed(1)}%`,R=S.length>0?S.at(-1):0,D=c?Ft(c):{p90:0,p95:0},N=bt(()=>{if(!c||!("queryStats"in c))return;const L=c.queryStats;if(!(!L||!Array.isArray(L)))return Tt(L)},[c]),v=pr(N!==void 0,i),T=()=>{at(y())},z=()=>{p(null)},E=()=>{n("overview")},Q=()=>{n("query-insights")};return o("div",{className:"flex flex-col gap-4","data-testid":"lunora-metrics",children:[o("div",{className:"flex flex-wrap items-center gap-2",children:[t(yt,{onChange:d,testId:"mt-shard-input",value:r}),t(vt,{message:_,prefix:"mt"}),t(rt,{"data-testid":"mt-aggregate",disabled:q,onClick:T,size:"sm",type:"button",variant:"secondary",children:s(q?"Aggregating…":"All shards")}),g!==null&&t(rt,{"data-testid":"mt-aggregate-clear",onClick:z,size:"sm",type:"button",variant:"ghost",children:s("Hide")}),t("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"mt-cf-link",href:St,rel:"noreferrer",target:"_blank",children:s("Open in Cloudflare")})]}),w!==null&&t("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:w}),N!==void 0&&o("div",{className:"flex gap-2 border-b","data-testid":"mt-tabs",children:[t("button",{className:`pb-2 text-sm font-medium transition-colors ${v==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:E,type:"button",children:s("Overview")}),o("button",{className:`pb-2 text-sm font-medium transition-colors ${v==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:Q,type:"button",children:[s("Query insights"),N.length>0&&t("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:N.length})]})]}),v==="query-insights"&&N!==void 0&&t(gr,{shardKey:m}),v==="overview"&&c!==null&&t(lr,{currentDelta:R,errorRate:C,history:S,latencyPercentiles:D,metrics:c}),v==="overview"&&c===null&&null,v==="overview"&&t(er,{onOpenTrace:M,shardKey:m}),v==="overview"&&I!==null&&g!==null&&t(tr,{aggregate:I,shardResults:g})]})};export{Ur as MetricsPanel};
|
|
1
|
+
import{useLunora as pt}from"@lunora/react";import{useNavigate as xt}from"@tanstack/react-router";import{useState as fe,useRef as We,useEffect as tt,useMemo as bt}from"react";import{L as vt}from"../packem_shared/live-status-CmuRLFKf.js";import{ShardInput as yt}from"../packem_shared/ShardInput-BVn2iCU0.js";import{u as rt}from"../packem_shared/button-BkCrNcAs.js";import{N as Je}from"../packem_shared/use-admin-query-QJ-ibl5u.js";import{S as Nt}from"../packem_shared/use-shard-key-B2JtNa5m.js";import{useT as pe}from"../packem_shared/DEFAULT_LOCALE-BZ4NojpD.js";import{ADMIN_FUNCTIONS as ze}from"../packem_shared/ADMIN_FUNCTIONS-4aE59aDq.js";import{c as St}from"../packem_shared/cf-links-Dmg86v1D.js";import{l as $t,k as Ye,f as at,d as wt,b as qt,g as kt}from"../packem_shared/internal-BSIsQVC6.js";import{r as Mt,l as _t}from"../packem_shared/shard-history-DMEW5VBE.js";import{w as It}from"../packem_shared/trace-handoff-Dw7mwjxu.js";import{c as Le}from"react/compiler-runtime";import{f as Ct}from"../packem_shared/log-fields-CoL3hsIQ.js";import{g as et}from"../packem_shared/badge-BbuuAio7.js";import{c as he,u as ge,n as Pe,f as Qe,m as Rt}from"../packem_shared/card-CIDGUN6K.js";import{p as de,d as dt,m as He,u as oe,n as mt,f as ut}from"../packem_shared/table-DdJBrClo.js";import{S as ht}from"../packem_shared/sparkline-CgjeUU2I.js";import{jsx as r,jsxs as o,Fragment as Ve}from"react/jsx-runtime";import{aggregateMetrics as Dt,computeLatencyPercentiles as Ft,enrichQueryStats as Tt,shardsToAggregate as Lt}from"../packem_shared/aggregateMetrics-BNfajLa2.js";import{g as me}from"../packem_shared/stat-card-fm_TF1mo.js";import{ResponsiveContainer as lt,AreaChart as Ot,CartesianGrid as st,XAxis as nt,YAxis as it,Tooltip as ot,Area as zt,LineChart as At,Line as Kt}from"recharts";import{E as Et}from"../packem_shared/empty-state-Cg7t_8qu.js";import{c as jt}from"../packem_shared/utils-bhneXptQ.js";import{N as Pt,y as Qt,k as Ue,_ as Ut,w as Bt}from"../packem_shared/select-Bul-DeII.js";const Jt=(l,e)=>l<e?-1:l>e?1:0,Ze=l=>{if(l===void 0)return"null";if(typeof l=="bigint")throw new TypeError("stableStringify: cannot use a bigint in a stable JSON cache key — pass it as a string, or use stableWireKey");if(l===null||typeof l!="object")return JSON.stringify(l);if(Array.isArray(l))return`[${l.map(d=>Ze(d)).join(",")}]`;const e=Object.getPrototypeOf(l);if(e!==null&&e!==Object.prototype){const d=l.constructor?.name??"value";throw new TypeError(`stableStringify: cannot use a ${d} in a stable JSON cache key — only plain objects, arrays, and JSON primitives are supported (wire-typed values key via stableWireKey)`)}const s=l,a=Object.keys(s).toSorted(Jt),t=[];for(const d of a){const i=s[d];i!==void 0&&t.push(`${JSON.stringify(d)}:${Ze(i)}`)}return`{${t.join(",")}}`},gt=(l,e,s)=>`${l}:${e}:${Ze(s??{})}`,ft=(l,e)=>l==="gauge"?e.last:l==="histogram"?e.sum/Math.max(1,e.count):e.sum,Ht=(l,e)=>ft(l,e),Gt=l=>ft(l.kind,l),Xe=l=>Number.isInteger(l)?l.toLocaleString():l.toLocaleString(void 0,{maximumFractionDigits:2}),Wt=l=>Array.isArray(l?.series)?l.series:[],Xt="FUNCTION_NOT_FOUND",Yt=l=>{const e=new Map;if(!Array.isArray(l?.series))return e;for(const s of l.series)e.set(gt(s.kind,s.name,s.attributes),s.points);return e},Vt={counter:"secondary",gauge:"default",histogram:"outline"},Zt=l=>{const e=Le(18),{name:s,onOpenTrace:a,traceId:t}=l,d=pe();if(t===void 0){let u;return e[0]===Symbol.for("react.memo_cache_sentinel")?(u=r("span",{className:"text-muted-foreground",children:"—"}),e[0]=u):u=e[0],u}let i;e[1]!==t?(i=t.slice(0,8),e[1]=t,e[2]=i):i=e[2];const n=i;if(a===void 0){const u=`mt-instrument-trace-${s}`;let h;return e[3]!==n||e[4]!==u||e[5]!==t?(h=r("span",{className:"text-muted-foreground","data-testid":u,title:t,children:n}),e[3]=n,e[4]=u,e[5]=t,e[6]=h):h=e[6],h}const k=`mt-instrument-trace-${s}`;let f;e[7]!==a||e[8]!==t?(f=()=>{a(t)},e[7]=a,e[8]=t,e[9]=f):f=e[9];let S;e[10]!==d||e[11]!==t?(S=d("Open the exemplar trace {trace}",{trace:t}),e[10]=d,e[11]=t,e[12]=S):S=e[12];let p;return e[13]!==n||e[14]!==k||e[15]!==f||e[16]!==S?(p=r("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":k,onClick:f,title:S,type:"button",children:n}),e[13]=n,e[14]=k,e[15]=f,e[16]=S,e[17]=p):p=e[17],p},er=l=>{const e=Le(105),{onOpenTrace:s,shardKey:a}=l,t=pe();let d;e[0]===Symbol.for("react.memo_cache_sentinel")?(d={},e[0]=d):d=e[0];let i;e[1]!==a?(i={live:!0,shardKey:a},e[1]=a,e[2]=i):i=e[2];const{data:n,error:k,errorSource:f}=Je(ze.getMetricSeries,d,i);let S;e[3]===Symbol.for("react.memo_cache_sentinel")?(S={},e[3]=S):S=e[3];let p;e[4]!==a?(p={live:!0,shardKey:a},e[4]=a,e[5]=p):p=e[5];const{data:u}=Je(ze.getMetricHistory,S,p);let h,M,b,$,_,c,g,x,w,q,y,I,C;if(e[6]!==n||e[7]!==k||e[8]!==f||e[9]!==u||e[10]!==s||e[11]!==t){x=Symbol.for("react.early_return_sentinel");e:{const z=Wt(n),K=$t(f)===Xt;if(k!==null&&!K){let m;e[25]!==t?(m=t("Instruments"),e[25]=t,e[26]=m):m=e[26];let E;e[27]!==m?(E=r("h3",{className:"text-sm font-semibold text-foreground",children:m}),e[27]=m,e[28]=E):E=e[28];let j;e[29]!==k||e[30]!==t?(j=t("Instruments unavailable: {error}",{error:k}),e[29]=k,e[30]=t,e[31]=j):j=e[31];let P;e[32]!==j?(P=r("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:j}),e[32]=j,e[33]=P):P=e[33];let ie;e[34]!==E||e[35]!==P?(ie=o("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[E,P]}),e[34]=E,e[35]=P,e[36]=ie):ie=e[36],x=ie;break e}if(z.length===0){x=null;break e}const Q=Yt(u);let L;e[37]!==t?(L=m=>t(m==="counter"?"Counter":m==="gauge"?"Gauge":"Histogram"),e[37]=t,e[38]=L):L=e[38];const U=L;_="flex flex-col gap-2",c="mt-instruments";let O;e[39]!==t?(O=t("Instruments"),e[39]=t,e[40]=O):O=e[40],e[41]!==O?(g=r("h3",{className:"text-sm font-semibold text-foreground",children:O}),e[41]=O,e[42]=g):g=e[42],$=he,C="overflow-hidden py-0",b=ge,I="px-0",M=mt,q="mt-instruments-table";let A;e[43]!==t?(A=t("name"),e[43]=t,e[44]=A):A=e[44];let J;e[45]!==A?(J=r(de,{children:A}),e[45]=A,e[46]=J):J=e[46];let H;e[47]!==t?(H=t("kind"),e[47]=t,e[48]=H):H=e[48];let G;e[49]!==H?(G=r(de,{children:H}),e[49]=H,e[50]=G):G=e[50];let W;e[51]!==t?(W=t("value"),e[51]=t,e[52]=W):W=e[52];let X;e[53]!==W?(X=r(de,{className:"text-right",children:W}),e[53]=W,e[54]=X):X=e[54];let Y;e[55]!==t?(Y=t("count"),e[55]=t,e[56]=Y):Y=e[56];let V;e[57]!==Y?(V=r(de,{className:"text-right",children:Y}),e[57]=Y,e[58]=V):V=e[58];let Z;e[59]!==t?(Z=t("range"),e[59]=t,e[60]=Z):Z=e[60];let ee;e[61]!==Z?(ee=r(de,{className:"text-right",children:Z}),e[61]=Z,e[62]=ee):ee=e[62];let te;e[63]!==t?(te=t("trend"),e[63]=t,e[64]=te):te=e[64];let re;e[65]!==te?(re=r(de,{children:te}),e[65]=te,e[66]=re):re=e[66];let ae;e[67]!==t?(ae=t("trace"),e[67]=t,e[68]=ae):ae=e[68];let le;e[69]!==ae?(le=r(de,{children:ae}),e[69]=ae,e[70]=le):le=e[70];let se;e[71]!==t?(se=t("dimensions"),e[71]=t,e[72]=se):se=e[72];let ne;e[73]!==se?(ne=r(de,{children:se}),e[73]=se,e[74]=ne):ne=e[74],e[75]!==J||e[76]!==G||e[77]!==X||e[78]!==V||e[79]!==ee||e[80]!==re||e[81]!==le||e[82]!==ne?(y=r(dt,{children:o(He,{children:[J,G,X,V,ee,re,le,ne]})}),e[75]=J,e[76]=G,e[77]=X,e[78]=V,e[79]=ee,e[80]=re,e[81]=le,e[82]=ne,e[83]=y):y=e[83],h=ut,w=z.map(m=>{const E=Ct(m.attributes),j=gt(m.kind,m.name,m.attributes),P=(Q.get(j)??[]).map(ie=>Ht(m.kind,ie));return o(He,{"data-testid":`mt-instrument-${m.name}`,children:[r(oe,{className:"font-mono text-xs",title:m.functionPath,children:m.name}),r(oe,{children:r(et,{variant:Vt[m.kind],children:U(m.kind)})}),r(oe,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${m.name}`,children:Xe(Gt(m))}),r(oe,{className:"text-right tabular-nums text-muted-foreground",children:m.count.toLocaleString()}),r(oe,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:m.min===m.max?"—":`${Xe(m.min)}–${Xe(m.max)}`}),r(oe,{children:P.length>=2?r(ht,{ariaLabel:t("{name} trend",{name:m.name}),className:"h-6 w-24 text-foreground",series:P,testId:`mt-instrument-trend-${m.name}`}):r("span",{className:"text-xs text-muted-foreground",children:"—"})}),r(oe,{className:"font-mono text-xs",children:r(Zt,{name:m.name,onOpenTrace:s,traceId:m.exemplarTraceId})}),r(oe,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:E,children:E===""?"—":E})]},j)})}e[6]=n,e[7]=k,e[8]=f,e[9]=u,e[10]=s,e[11]=t,e[12]=h,e[13]=M,e[14]=b,e[15]=$,e[16]=_,e[17]=c,e[18]=g,e[19]=x,e[20]=w,e[21]=q,e[22]=y,e[23]=I,e[24]=C}else h=e[12],M=e[13],b=e[14],$=e[15],_=e[16],c=e[17],g=e[18],x=e[19],w=e[20],q=e[21],y=e[22],I=e[23],C=e[24];if(x!==Symbol.for("react.early_return_sentinel"))return x;let R;e[84]!==h||e[85]!==w?(R=r(h,{children:w}),e[84]=h,e[85]=w,e[86]=R):R=e[86];let D;e[87]!==M||e[88]!==R||e[89]!==q||e[90]!==y?(D=o(M,{"data-testid":q,children:[y,R]}),e[87]=M,e[88]=R,e[89]=q,e[90]=y,e[91]=D):D=e[91];let N;e[92]!==b||e[93]!==D||e[94]!==I?(N=r(b,{className:I,children:D}),e[92]=b,e[93]=D,e[94]=I,e[95]=N):N=e[95];let v;e[96]!==$||e[97]!==N||e[98]!==C?(v=r($,{className:C,children:N}),e[96]=$,e[97]=N,e[98]=C,e[99]=v):v=e[99];let T;return e[100]!==_||e[101]!==c||e[102]!==g||e[103]!==v?(T=o("section",{className:_,"data-testid":c,children:[g,v]}),e[100]=_,e[101]=c,e[102]=g,e[103]=v,e[104]=T):T=e[104],T},tr=l=>{const e=Le(74),{aggregate:s,shardResults:a}=l,t=pe();let d;e[0]!==t?(d=t("Shards"),e[0]=t,e[1]=d):d=e[1];let i;e[2]!==s.failed||e[3]!==s.reachable||e[4]!==t?(i=s.failed>0?t("{reachable} reachable, {failed} unreachable",{failed:s.failed,reachable:s.reachable}):t("{reachable} reachable",{reachable:s.reachable}),e[2]=s.failed,e[3]=s.reachable,e[4]=t,e[5]=i):i=e[5];let n;e[6]!==d||e[7]!==i?(n=r(me,{label:d,testId:"mt-agg-shards",value:i}),e[6]=d,e[7]=i,e[8]=n):n=e[8];let k;e[9]!==t?(k=t("Total requests"),e[9]=t,e[10]=k):k=e[10];let f;e[11]!==s.totalRequests||e[12]!==k?(f=r(me,{label:k,testId:"mt-agg-requests",value:s.totalRequests}),e[11]=s.totalRequests,e[12]=k,e[13]=f):f=e[13];let S;e[14]!==t?(S=t("Total errors"),e[14]=t,e[15]=S):S=e[15];let p;e[16]!==s.totalErrors||e[17]!==S?(p=r(me,{label:S,testId:"mt-agg-errors",value:s.totalErrors}),e[16]=s.totalErrors,e[17]=S,e[18]=p):p=e[18];let u;e[19]!==t?(u=t("Total database size"),e[19]=t,e[20]=u):u=e[20];let h;e[21]!==s.totalDatabaseSize?(h=Ye(s.totalDatabaseSize),e[21]=s.totalDatabaseSize,e[22]=h):h=e[22];let M;e[23]!==u||e[24]!==h?(M=r(me,{label:u,testId:"mt-agg-db-size",value:h}),e[23]=u,e[24]=h,e[25]=M):M=e[25];let b;e[26]!==t?(b=t("Combined cache hit rate"),e[26]=t,e[27]=b):b=e[27];let $;e[28]!==s.hitRate||e[29]!==t?($=s.hitRate===null?t("no cache configured"):`${(s.hitRate*100).toFixed(1)}%`,e[28]=s.hitRate,e[29]=t,e[30]=$):$=e[30];let _;e[31]!==b||e[32]!==$?(_=r(me,{label:b,testId:"mt-agg-cache",value:$}),e[31]=b,e[32]=$,e[33]=_):_=e[33];let c;e[34]!==M||e[35]!==_||e[36]!==n||e[37]!==f||e[38]!==p?(c=o("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[n,f,p,M,_]}),e[34]=M,e[35]=_,e[36]=n,e[37]=f,e[38]=p,e[39]=c):c=e[39];let g;e[40]!==t?(g=t("shard"),e[40]=t,e[41]=g):g=e[41];let x;e[42]!==g?(x=r(de,{children:g}),e[42]=g,e[43]=x):x=e[43];let w;e[44]!==t?(w=t("requests"),e[44]=t,e[45]=w):w=e[45];let q;e[46]!==w?(q=r(de,{children:w}),e[46]=w,e[47]=q):q=e[47];let y;e[48]!==t?(y=t("errors"),e[48]=t,e[49]=y):y=e[49];let I;e[50]!==y?(I=r(de,{children:y}),e[50]=y,e[51]=I):I=e[51];let C;e[52]!==t?(C=t("db size"),e[52]=t,e[53]=C):C=e[53];let R;e[54]!==C?(R=r(de,{children:C}),e[54]=C,e[55]=R):R=e[55];let D;e[56]!==x||e[57]!==q||e[58]!==I||e[59]!==R?(D=r(dt,{children:o(He,{children:[x,q,I,R]})}),e[56]=x,e[57]=q,e[58]=I,e[59]=R,e[60]=D):D=e[60];let N;if(e[61]!==a||e[62]!==t){let K;e[64]!==t?(K=Q=>o(He,{"data-testid":`mt-agg-row-${Q.shard}`,children:[r(oe,{children:Q.shard}),Q.metrics===null?r(oe,{className:"text-destructive",colSpan:3,children:Q.error??t("unreachable")}):o(Ve,{children:[r(oe,{className:"tabular-nums",children:Q.metrics.requests}),r(oe,{className:"tabular-nums",children:Q.metrics.errors}),r(oe,{className:"tabular-nums",children:Ye(Q.metrics.databaseSize)})]})]},Q.shard),e[64]=t,e[65]=K):K=e[65],N=a.map(K),e[61]=a,e[62]=t,e[63]=N}else N=e[63];let v;e[66]!==N?(v=r(ut,{children:N}),e[66]=N,e[67]=v):v=e[67];let T;e[68]!==D||e[69]!==v?(T=r(he,{className:"overflow-hidden py-0",children:r(ge,{className:"px-0",children:o(mt,{"data-testid":"mt-agg-table",children:[D,v]})})}),e[68]=D,e[69]=v,e[70]=T):T=e[70];let z;return e[71]!==c||e[72]!==T?(z=o("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[c,T]}),e[71]=c,e[72]=T,e[73]=z):z=e[73],z},rr=l=>{const e=Math.floor(l/1e3),s=Math.floor(e/3600),a=Math.floor(e%3600/60),t=e%60;return s>0?`${s.toString()}h ${a.toString()}m`:a>0?`${a.toString()}m ${t.toString()}s`:`${t.toString()}s`},ar=(l,e)=>{const s=l+e;return s===0?"—":`${(l/s*100).toFixed(1)}%`},ct=l=>l<=0?"—":l<1?`${(l*1e3).toFixed(0)}μs`:l<1e3?`${l.toFixed(1)}ms`:`${(l/1e3).toFixed(2)}s`,lr=l=>{const e=Le(75),{currentDelta:s,errorRate:a,history:t,latencyPercentiles:d,metrics:i}=l,n=pe();let k;e[0]!==t||e[1]!==n?(k=t.length>=2?r(ht,{ariaLabel:n("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:t,testId:"mt-sparkline"}):void 0,e[0]=t,e[1]=n,e[2]=k):k=e[2];let f;e[3]!==s||e[4]!==t.length||e[5]!==n?(f=t.length>=2?o(Ve,{children:[r("span",{className:"font-semibold text-foreground",children:`+${s.toLocaleString()}`})," ",n("last interval")]}):r("span",{"data-testid":"mt-sparkline-empty",children:n("collecting samples…")}),e[3]=s,e[4]=t.length,e[5]=n,e[6]=f):f=e[6];let S;e[7]!==n?(S=n("Requests"),e[7]=n,e[8]=S):S=e[8];let p;e[9]!==i.requests||e[10]!==k||e[11]!==f||e[12]!==S?(p=r(me,{chart:k,footer:f,label:S,testId:"mt-requests",value:i.requests}),e[9]=i.requests,e[10]=k,e[11]=f,e[12]=S,e[13]=p):p=e[13];let u;e[14]!==a||e[15]!==n?(u=n("{rate} error rate",{rate:a}),e[14]=a,e[15]=n,e[16]=u):u=e[16];let h;e[17]!==n?(h=n("Errors"),e[17]=n,e[18]=h):h=e[18];let M;e[19]!==a||e[20]!==i.errors?(M=o(Ve,{children:[i.errors," (",a,")"]}),e[19]=a,e[20]=i.errors,e[21]=M):M=e[21];let b;e[22]!==u||e[23]!==h||e[24]!==M?(b=r(me,{footer:u,label:h,testId:"mt-errors",value:M}),e[22]=u,e[23]=h,e[24]=M,e[25]=b):b=e[25];let $;e[26]!==d.p90?($=d.p90>0?`P90 ${ct(d.p90)}`:void 0,e[26]=d.p90,e[27]=$):$=e[27];let _;e[28]!==n?(_=n("P95 latency"),e[28]=n,e[29]=_):_=e[29];let c;e[30]!==d.p95?(c=d.p95>0?ct(d.p95):"—",e[30]=d.p95,e[31]=c):c=e[31];let g;e[32]!==_||e[33]!==c||e[34]!==$?(g=r(me,{footer:$,label:_,testId:"mt-p95",value:c}),e[32]=_,e[33]=c,e[34]=$,e[35]=g):g=e[35];let x;e[36]!==i.cache||e[37]!==n?(x=i.cache===null?void 0:`${i.cache.entries.toLocaleString()} ${n("cache entries")}`,e[36]=i.cache,e[37]=n,e[38]=x):x=e[38];let w;e[39]!==n?(w=n("Database size"),e[39]=n,e[40]=w):w=e[40];let q;e[41]!==i.databaseSize?(q=Ye(i.databaseSize),e[41]=i.databaseSize,e[42]=q):q=e[42];let y;e[43]!==x||e[44]!==w||e[45]!==q?(y=r(me,{footer:x,label:w,testId:"mt-db-size",value:q}),e[43]=x,e[44]=w,e[45]=q,e[46]=y):y=e[46];let I;e[47]!==n?(I=n("Shard"),e[47]=n,e[48]=I):I=e[48];let C;e[49]!==i.shard||e[50]!==I?(C=r(me,{label:I,testId:"mt-shard",value:i.shard}),e[49]=i.shard,e[50]=I,e[51]=C):C=e[51];let R;e[52]!==n?(R=n("Uptime"),e[52]=n,e[53]=R):R=e[53];let D;e[54]!==i.uptimeMs?(D=rr(i.uptimeMs),e[54]=i.uptimeMs,e[55]=D):D=e[55];let N;e[56]!==R||e[57]!==D?(N=r(me,{label:R,testId:"mt-uptime",value:D}),e[56]=R,e[57]=D,e[58]=N):N=e[58];let v;e[59]!==n?(v=n("Cache hit rate"),e[59]=n,e[60]=v):v=e[60];let T;e[61]!==i.cache||e[62]!==n?(T=i.cache===null?n("no cache configured"):n("{rate} ({count} entries)",{count:i.cache.entries,rate:ar(i.cache.hits,i.cache.misses)}),e[61]=i.cache,e[62]=n,e[63]=T):T=e[63];let z;e[64]!==v||e[65]!==T?(z=r(me,{label:v,testId:"mt-cache",value:T}),e[64]=v,e[65]=T,e[66]=z):z=e[66];let K;return e[67]!==g||e[68]!==y||e[69]!==C||e[70]!==N||e[71]!==z||e[72]!==p||e[73]!==b?(K=o("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[p,b,g,y,C,N,z]}),e[67]=g,e[68]=y,e[69]=C,e[70]=N,e[71]=z,e[72]=p,e[73]=b,e[74]=K):K=e[74],K},Ge=l=>l>=100?"critical":l>=50?"warning":"good",Oe=l=>l<1?`${(l*1e3).toFixed(0)}μs`:l<1e3?`${l.toFixed(1)}ms`:`${(l/1e3).toFixed(2)}s`,Be=l=>l>=1e9?`${(l/1e9).toFixed(1)}B`:l>=1e6?`${(l/1e6).toFixed(1)}M`:l>=1e3?`${(l/1e3).toFixed(1)}K`:l.toLocaleString(),sr=l=>{const e=Le(3),{level:s}=l;if(s==="critical"){let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=r(et,{variant:"destructive",children:"Slow"}),e[0]=t):t=e[0],t}if(s==="warning"){let t;return e[1]===Symbol.for("react.memo_cache_sentinel")?(t=r("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-warning/10 px-2 py-0.5 text-xs font-medium text-warning",children:"Moderate"}),e[1]=t):t=e[1],t}let a;return e[2]===Symbol.for("react.memo_cache_sentinel")?(a=r("span",{className:"inline-flex items-center gap-1 rounded-md border border-transparent bg-success/10 px-2 py-0.5 text-xs font-medium text-success",children:"Fast"}),e[2]=a):a=e[2],a},nr=(l,e)=>{const s=[...l];return s.sort((a,t)=>{switch(e){case"avgTime":return t.avgDurationMs-a.avgDurationMs;case"execCount":return t.execCount-a.execCount;case"rowsRead":return t.rowsRead-a.rowsRead;default:return t.totalDurationMs-a.totalDurationMs}}),s},ir=l=>{const e=Le(161),{queryStats:s}=l,a=pe(),[t,d]=fe("totalTime");let i;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=new Set,e[0]=i):i=e[0];const[n,k]=fe(i);let f;e[1]===Symbol.for("react.memo_cache_sentinel")?(f=C=>{C!==null&&d(C)},e[1]=f):f=e[1];const S=f;let p,u,h,M,b,$,_,c,g,x;if(e[2]!==n||e[3]!==s||e[4]!==t||e[5]!==a){h=Symbol.for("react.early_return_sentinel");e:{const C=nr(s,t);let R;e[16]!==s?(R=s.filter(or),e[16]=s,e[17]=R):R=e[17];const D=R.length;let N;e[18]!==s?(N=s.filter(cr),e[18]=s,e[19]=N):N=e[19];const v=N.length;let T;e[20]!==s?(T=s.filter(dr),e[20]=s,e[21]=T):T=e[21];const z=T.length;let K;e[22]===Symbol.for("react.memo_cache_sentinel")?(K=F=>{k(ce=>{const B=new Set(ce);return B.has(F)?B.delete(F):B.add(F),B})},e[22]=K):K=e[22];const Q=K;if(s.length===0){let F;e[23]!==a?(F=a("No query insights yet"),e[23]=a,e[24]=F):F=e[24];let ce;e[25]!==F?(ce=r("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:F}),e[25]=F,e[26]=ce):ce=e[26];let B;e[27]!==a?(B=a("Query insights appear once statements are executed against this shard."),e[27]=a,e[28]=B):B=e[28];let ue;e[29]!==B?(ue=r("p",{className:"mt-1 text-sm",children:B}),e[29]=B,e[30]=ue):ue=e[30];let je;e[31]!==ce||e[32]!==ue?(je=r(he,{children:r(ge,{className:"py-12",children:o("div",{className:"text-center text-muted-foreground",children:[ce,ue]})})}),e[31]=ce,e[32]=ue,e[33]=je):je=e[33],h=je;break e}_="space-y-4",c="qi-root";let L;e[34]!==a?(L=a("Critical queries"),e[34]=a,e[35]=L):L=e[35];let U;e[36]!==L?(U=r(Pe,{className:"pb-2",children:r(Qe,{className:"text-sm font-medium",children:L})}),e[36]=L,e[37]=U):U=e[37];let O;e[38]!==D?(O=r("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:D}),e[38]=D,e[39]=O):O=e[39];let A;e[40]!==a?(A=a(">100ms avg execution"),e[40]=a,e[41]=A):A=e[41];let J;e[42]!==A?(J=r("p",{className:"text-xs text-muted-foreground",children:A}),e[42]=A,e[43]=J):J=e[43];let H;e[44]!==O||e[45]!==J?(H=o(ge,{children:[O,J]}),e[44]=O,e[45]=J,e[46]=H):H=e[46];let G;e[47]!==U||e[48]!==H?(G=o(he,{children:[U,H]}),e[47]=U,e[48]=H,e[49]=G):G=e[49];let W;e[50]!==a?(W=a("Moderate queries"),e[50]=a,e[51]=W):W=e[51];let X;e[52]!==W?(X=r(Pe,{className:"pb-2",children:r(Qe,{className:"text-sm font-medium",children:W})}),e[52]=W,e[53]=X):X=e[53];let Y;e[54]!==v?(Y=r("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:v}),e[54]=v,e[55]=Y):Y=e[55];let V;e[56]!==a?(V=a("50–100ms avg execution"),e[56]=a,e[57]=V):V=e[57];let Z;e[58]!==V?(Z=r("p",{className:"text-xs text-muted-foreground",children:V}),e[58]=V,e[59]=Z):Z=e[59];let ee;e[60]!==Y||e[61]!==Z?(ee=o(ge,{children:[Y,Z]}),e[60]=Y,e[61]=Z,e[62]=ee):ee=e[62];let te;e[63]!==X||e[64]!==ee?(te=o(he,{children:[X,ee]}),e[63]=X,e[64]=ee,e[65]=te):te=e[65];let re;e[66]!==a?(re=a("Fast queries"),e[66]=a,e[67]=re):re=e[67];let ae;e[68]!==re?(ae=r(Pe,{className:"pb-2",children:r(Qe,{className:"text-sm font-medium",children:re})}),e[68]=re,e[69]=ae):ae=e[69];let le;e[70]!==z?(le=r("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:z}),e[70]=z,e[71]=le):le=e[71];let se;e[72]!==a?(se=a("<50ms avg execution"),e[72]=a,e[73]=se):se=e[73];let ne;e[74]!==se?(ne=r("p",{className:"text-xs text-muted-foreground",children:se}),e[74]=se,e[75]=ne):ne=e[75];let m;e[76]!==le||e[77]!==ne?(m=o(ge,{children:[le,ne]}),e[76]=le,e[77]=ne,e[78]=m):m=e[78];let E;e[79]!==ae||e[80]!==m?(E=o(he,{children:[ae,m]}),e[79]=ae,e[80]=m,e[81]=E):E=e[81],e[82]!==G||e[83]!==te||e[84]!==E?(g=o("div",{className:"grid gap-4 md:grid-cols-3",children:[G,te,E]}),e[82]=G,e[83]=te,e[84]=E,e[85]=g):g=e[85];let j;e[86]!==a?(j=a("Query leaderboard"),e[86]=a,e[87]=j):j=e[87];let P;e[88]!==j?(P=r("h3",{className:"text-lg font-semibold",children:j}),e[88]=j,e[89]=P):P=e[89];let ie;e[90]!==t||e[91]!==a?(ie=a("Slow queries sorted by {sortField}",{sortField:a(t)}),e[90]=t,e[91]=a,e[92]=ie):ie=e[92];let xe;e[93]!==ie?(xe=r("p",{className:"text-sm text-muted-foreground",children:ie}),e[93]=ie,e[94]=xe):xe=e[94];let be;e[95]!==P||e[96]!==xe?(be=o("div",{children:[P,xe]}),e[95]=P,e[96]=xe,e[97]=be):be=e[97];let ve;e[98]!==a?(ve=a("Sort by"),e[98]=a,e[99]=ve):ve=e[99];let ye;e[100]!==ve?(ye=r("span",{className:"text-sm text-muted-foreground",children:ve}),e[100]=ve,e[101]=ye):ye=e[101];let Ne;e[102]!==a?(Ne=a("Sort queries by"),e[102]=a,e[103]=Ne):Ne=e[103];let Ae;e[104]===Symbol.for("react.memo_cache_sentinel")?(Ae=r(Pt,{}),e[104]=Ae):Ae=e[104];let Se;e[105]!==Ne?(Se=r(Qt,{"aria-label":Ne,className:"w-[140px]","data-testid":"qi-sort",children:Ae}),e[105]=Ne,e[106]=Se):Se=e[106];let $e;e[107]!==a?($e=a("Total time"),e[107]=a,e[108]=$e):$e=e[108];let we;e[109]!==$e?(we=r(Ue,{value:"totalTime",children:$e}),e[109]=$e,e[110]=we):we=e[110];let qe;e[111]!==a?(qe=a("Avg time"),e[111]=a,e[112]=qe):qe=e[112];let ke;e[113]!==qe?(ke=r(Ue,{value:"avgTime",children:qe}),e[113]=qe,e[114]=ke):ke=e[114];let Me;e[115]!==a?(Me=a("Execution count"),e[115]=a,e[116]=Me):Me=e[116];let _e;e[117]!==Me?(_e=r(Ue,{value:"execCount",children:Me}),e[117]=Me,e[118]=_e):_e=e[118];let Ie;e[119]!==a?(Ie=a("Rows read"),e[119]=a,e[120]=Ie):Ie=e[120];let Ce;e[121]!==Ie?(Ce=r(Ue,{value:"rowsRead",children:Ie}),e[121]=Ie,e[122]=Ce):Ce=e[122];let Re;e[123]!==we||e[124]!==ke||e[125]!==_e||e[126]!==Ce?(Re=o(Ut,{children:[we,ke,_e,Ce]}),e[123]=we,e[124]=ke,e[125]=_e,e[126]=Ce,e[127]=Re):Re=e[127];let De;e[128]!==t||e[129]!==Se||e[130]!==Re?(De=o(Bt,{onValueChange:S,value:t,children:[Se,Re]}),e[128]=t,e[129]=Se,e[130]=Re,e[131]=De):De=e[131];let Fe;e[132]!==ye||e[133]!==De?(Fe=o("div",{className:"flex items-center gap-2",children:[ye,De]}),e[132]=ye,e[133]=De,e[134]=Fe):Fe=e[134],e[135]!==be||e[136]!==Fe?(x=o("div",{className:"flex items-center justify-between",children:[be,Fe]}),e[135]=be,e[136]=Fe,e[137]=x):x=e[137],u=he;let Te;e[138]!==a?(Te=a("Statements"),e[138]=a,e[139]=Te):Te=e[139];let Ke;e[140]!==Te?(Ke=r(Qe,{children:Te}),e[140]=Te,e[141]=Ke):Ke=e[141],$=o(Pe,{children:[Ke,r(Rt,{children:a("{count} tracked statements",{count:C.length})})]}),p=ge,M="space-y-2";let Ee;e[142]!==n||e[143]!==a?(Ee=F=>{const ce=F.normalizedSql,B=n.has(ce),ue=Ge(F.avgDurationMs);return o("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[o("button",{"aria-expanded":B,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{Q(ce)},type:"button",children:[o("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[r(sr,{level:ue}),r("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:F.normalizedSql})]}),o("div",{className:"flex shrink-0 items-center gap-4",children:[o("div",{className:"text-right",children:[r("div",{className:"text-sm font-medium",children:Oe(F.totalDurationMs)}),r("div",{className:"text-xs text-muted-foreground",children:a("total")})]}),o("div",{className:"text-right",children:[r("div",{className:"text-sm font-medium",children:Oe(F.avgDurationMs)}),r("div",{className:"text-xs text-muted-foreground",children:a("avg")})]}),F.p95DurationMs!==void 0&&o("div",{className:"text-right",children:[r("div",{className:"text-sm font-medium",children:Oe(F.p95DurationMs)}),r("div",{className:"text-xs text-muted-foreground",children:a("p95")})]}),o("div",{className:"text-right",children:[r("div",{className:"text-sm font-medium",children:Be(F.execCount)}),r("div",{className:"text-xs text-muted-foreground",children:a("calls")})]})]})]}),B&&o("div",{className:"space-y-3 border-t bg-muted/30 p-4",children:[o("div",{children:[r("p",{className:"mb-2 text-sm font-medium",children:a("Full statement")}),r("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:F.normalizedSql})]}),o("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[F.p50DurationMs!==void 0&&o("div",{children:[r("span",{className:"text-muted-foreground",children:a("p50")}),r("span",{className:"block font-medium tabular-nums",children:Oe(F.p50DurationMs)})]}),o("div",{children:[r("span",{className:"text-muted-foreground",children:a("Exec count")}),r("span",{className:"block font-medium tabular-nums",children:Be(F.execCount)})]}),o("div",{children:[r("span",{className:"text-muted-foreground",children:a("Total time")}),r("span",{className:"block font-medium tabular-nums",children:Oe(F.totalDurationMs)})]}),o("div",{children:[r("span",{className:"text-muted-foreground",children:a("Rows read")}),r("span",{className:"block font-medium tabular-nums",children:Be(F.rowsRead)})]}),o("div",{children:[r("span",{className:"text-muted-foreground",children:a("Rows written")}),r("span",{className:"block font-medium tabular-nums",children:Be(F.rowsWritten)})]})]})]})]},ce)},e[142]=n,e[143]=a,e[144]=Ee):Ee=e[144],b=C.map(Ee)}e[2]=n,e[3]=s,e[4]=t,e[5]=a,e[6]=p,e[7]=u,e[8]=h,e[9]=M,e[10]=b,e[11]=$,e[12]=_,e[13]=c,e[14]=g,e[15]=x}else p=e[6],u=e[7],h=e[8],M=e[9],b=e[10],$=e[11],_=e[12],c=e[13],g=e[14],x=e[15];if(h!==Symbol.for("react.early_return_sentinel"))return h;let w;e[145]!==M||e[146]!==b?(w=r("div",{className:M,children:b}),e[145]=M,e[146]=b,e[147]=w):w=e[147];let q;e[148]!==p||e[149]!==w?(q=r(p,{children:w}),e[148]=p,e[149]=w,e[150]=q):q=e[150];let y;e[151]!==u||e[152]!==q||e[153]!==$?(y=o(u,{children:[$,q]}),e[151]=u,e[152]=q,e[153]=$,e[154]=y):y=e[154];let I;return e[155]!==y||e[156]!==_||e[157]!==c||e[158]!==g||e[159]!==x?(I=o("div",{className:_,"data-testid":c,children:[g,x,y]}),e[155]=y,e[156]=_,e[157]=c,e[158]=g,e[159]=x,e[160]=I):I=e[160],I};function or(l){return Ge(l.avgDurationMs)==="critical"}function cr(l){return Ge(l.avgDurationMs)==="warning"}function dr(l){return Ge(l.avgDurationMs)==="good"}const mr=["1m","5m","15m","1h"],ur=l=>new Date(l).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),hr=l=>l.map(e=>({avg:Math.round(e.avgDurationMs*100)/100,execs:e.execCount,label:ur(e.bucketMs)})),gr=({shardKey:l=""})=>{const e=pe(),[s,a]=fe("15m"),t=Je(ze.getQueryInsights,{range:s},{live:!0,shardKey:l}).data,d=hr(t?.buckets??[]);return o("div",{className:"flex flex-col gap-4","data-testid":"qi-range",children:[o("div",{className:"flex flex-wrap items-center gap-2",children:[r("div",{className:"flex gap-1 rounded-lg border border-border p-0.5","data-testid":"qi-ranges",role:"group",children:mr.map(i=>r("button",{"aria-pressed":i===s,className:jt("rounded px-2 py-1 text-xs outline-none transition-colors hover:bg-accent focus-visible:bg-accent",i===s&&"bg-accent font-medium text-foreground"),"data-testid":`qi-range-${i}`,onClick:()=>{a(i)},type:"button",children:i},i))}),t?.capped===!0&&r(et,{"data-testid":"qi-capped",variant:"secondary",children:e("showing a capped set")})]}),d.length===0?r(Et,{description:e("Statements executed in the selected window appear here, with throughput and latency over time."),testId:"qi-empty",title:e("No queries in this window.")}):o("div",{className:"grid gap-4 lg:grid-cols-2",children:[o("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-throughput",children:[r("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Throughput")}),r(lt,{height:140,width:"100%",children:o(Ot,{data:d,children:[r(st,{strokeDasharray:"3 3",vertical:!1}),r(nt,{dataKey:"label",fontSize:10,tickLine:!1}),r(it,{allowDecimals:!1,fontSize:10,tickLine:!1,width:32}),r(ot,{}),r(zt,{dataKey:"execs",fill:"var(--color-primary)",fillOpacity:.15,stroke:"var(--color-primary)",type:"monotone"})]})})]}),o("figure",{className:"rounded-xl border border-border p-3","data-testid":"qi-latency",children:[r("figcaption",{className:"mb-2 text-xs font-medium text-muted-foreground",children:e("Mean latency (ms)")}),r(lt,{height:140,width:"100%",children:o(At,{data:d,children:[r(st,{strokeDasharray:"3 3",vertical:!1}),r(nt,{dataKey:"label",fontSize:10,tickLine:!1}),r(it,{fontSize:10,tickLine:!1,width:32}),r(ot,{}),r(Kt,{dataKey:"avg",dot:!1,stroke:"var(--color-destructive)",type:"monotone"})]})})]})]}),r(ir,{queryStats:t?.entries??[]})]})},fr=kt(ze.getMetrics),pr=(l,e)=>l?e:"overview",Ur=({initialShardKey:l})=>{const e=pt(),s=pe(),a=xt(),{queryShardKey:t,setShardKey:d,shardKey:i}=Nt(l),[n,k]=fe("overview"),[f,S]=fe([]),p=We(null),u=We(null),h=We(!0);tt(()=>(h.current=!0,()=>{h.current=!1}),[]);const M=L=>{It({shardKey:t,traceId:L}),at(a({to:"/traces"}))},{data:b,error:$,liveError:_}=Je(ze.getMetrics,{},{live:!0,shardKey:t}),c=b??null;tt(()=>{if(b===void 0)return;Mt(t);const L=b,U=p.current,O=u.current!==null&&u.current!==L.shard;if(u.current=L.shard,p.current=L.requests,O){S([]);return}U!==null&&L.requests>=U&&S(A=>[...A,L.requests-U].slice(-30))},[b,t]);const[g,x]=fe(null),[w,q]=fe(!1),y=async()=>{q(!0);const L=Lt(i,_t());try{const U=await Promise.all(L.map(async O=>{try{const A=await e.query(fr,{},wt(O));return{error:null,metrics:A,shard:O===""?A.shard:O}}catch(A){return{error:qt(A),metrics:null,shard:O===""?"__root__":O}}}));h.current&&x(U)}finally{h.current&&q(!1)}},I=g===null?null:Dt(g),C=c===null||c.requests===0?"—":`${(c.errors/c.requests*100).toFixed(1)}%`,R=f.length>0?f.at(-1):0,D=c?Ft(c):{p90:0,p95:0},N=bt(()=>{if(!c||!("queryStats"in c))return;const L=c.queryStats;if(!(!L||!Array.isArray(L)))return Tt(L)},[c]),v=pr(N!==void 0,n),T=()=>{at(y())},z=()=>{x(null)},K=()=>{k("overview")},Q=()=>{k("query-insights")};return o("div",{className:"flex flex-col gap-4","data-testid":"lunora-metrics",children:[o("div",{className:"flex flex-wrap items-center gap-2",children:[r(yt,{onChange:d,testId:"mt-shard-input",value:i}),r(vt,{message:_,prefix:"mt"}),r(rt,{"data-testid":"mt-aggregate",disabled:w,onClick:T,size:"sm",type:"button",variant:"secondary",children:s(w?"Aggregating…":"All shards")}),g!==null&&r(rt,{"data-testid":"mt-aggregate-clear",onClick:z,size:"sm",type:"button",variant:"ghost",children:s("Hide")}),r("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"mt-cf-link",href:St,rel:"noreferrer",target:"_blank",children:s("Open in Cloudflare")})]}),$!==null&&r("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:$}),N!==void 0&&o("div",{className:"flex gap-2 border-b","data-testid":"mt-tabs",children:[r("button",{className:`pb-2 text-sm font-medium transition-colors ${v==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:K,type:"button",children:s("Overview")}),o("button",{className:`pb-2 text-sm font-medium transition-colors ${v==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:Q,type:"button",children:[s("Query insights"),N.length>0&&r("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:N.length})]})]}),v==="query-insights"&&N!==void 0&&r(gr,{shardKey:t}),v==="overview"&&c!==null&&r(lr,{currentDelta:R,errorRate:C,history:f,latencyPercentiles:D,metrics:c}),v==="overview"&&c===null&&null,v==="overview"&&r(er,{onOpenTrace:M,shardKey:t}),v==="overview"&&I!==null&&g!==null&&r(tr,{aggregate:I,shardResults:g})]})};export{Ur as MetricsPanel};
|