@lunora/studio 1.0.0-alpha.227 → 1.0.0-alpha.229

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.mjs CHANGED
@@ -1 +1 @@
1
- import{StudioApp as r}from"./packem_shared/StudioApp-DikgPBVJ.mjs";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-D9ZY-qQd.mjs";import{S as m}from"./packem_shared/studio-ajWxPNfI.mjs";import{ConfirmButton as l}from"./packem_shared/ConfirmButton-DU4p72Er.mjs";import{default as s}from"./packem_shared/ConnectionBadge-B8Hj5DaE.mjs";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-BWNF98VF.mjs";import{ShardInput as P}from"./packem_shared/ShardInput-C6mjgAh4.mjs";import{default as A}from"./packem_chunks/AdvisorHealthPanel.mjs";import{DEFAULT_INSIGHT_THRESHOLDS as I,deriveInsights as T}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{InsightsPanel as g}from"./packem_chunks/InsightsPanel.mjs";import{default as F}from"./packem_chunks/SecurityAdvisorPanel.mjs";import{default as h}from"./packem_shared/ApiDocsPanel-fhDlZGE4.mjs";import{default as C}from"./packem_shared/ApiReferencePanel-CHoHM5ME.mjs";import{default as O}from"./packem_chunks/ApiTab.mjs";import{default as N}from"./packem_shared/OpenRpcReferencePanel-C8ctFJVm.mjs";import{DataBrowser as U}from"./packem_shared/DataBrowser-B5Sl4vMa.mjs";import{DataFilters as b,toFilterClauses as v}from"./packem_shared/DataFilters-CYZFt2EK.mjs";import{GlobalDataBrowser as y}from"./packem_shared/GlobalDataBrowser-BzhSVDvF.mjs";import{TableEditor as q}from"./packem_chunks/TableEditor.mjs";import{ExportImportPanel as V}from"./packem_chunks/ExportImportPanel.mjs";import{MigrationsPanel as j}from"./packem_shared/MigrationsPanel-QjQ4Gp9s.mjs";import{PitrPanel as z}from"./packem_chunks/PitrPanel.mjs";import{FunctionRunner as Q}from"./packem_chunks/FunctionRunner.mjs";import{FunctionStatsPanel as Y}from"./packem_chunks/FunctionStatsPanel.mjs";import{DeploymentHealthPanel as $}from"./packem_chunks/DeploymentHealthPanel.mjs";import{H as oe}from"./packem_shared/home-panel-DBSHjxil.mjs";import{AuditPanel as te}from"./packem_chunks/AuditPanel.mjs";import{LogsPanel as fe}from"./packem_chunks/LogsPanel.mjs";import{MailPanel as me}from"./packem_chunks/MailPanel.mjs";import{ScheduledJobs as le}from"./packem_shared/ScheduledJobs-nPx7NmOE.mjs";import{default as se}from"./packem_chunks/NotificationsPanel.mjs";import{HealthPanel as de}from"./packem_chunks/HealthPanel.mjs";import{aggregateMetrics as Pe,shardsToAggregate as Se}from"./packem_shared/aggregateMetrics-5zEJC6Ju.mjs";import{MetricsPanel as ce}from"./packem_chunks/MetricsPanel.mjs";import{SchemaViewer as Te}from"./packem_chunks/SchemaViewer.mjs";import{SettingsPanel as ge}from"./packem_chunks/SettingsPanel.mjs";import{SqlEditorPanel as Fe}from"./packem_chunks/SqlEditorPanel.mjs";import{FileBrowser as he}from"./packem_chunks/FileBrowser.mjs";import{DEFAULT_AUTO_REFRESH_MS as Ce,useAutoRefresh as He}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{default as Le}from"./packem_shared/useDebounced-DVeQ5-oW.mjs";import{DEFAULT_LOCALE as Me,createStudioI18n as Ue,studioI18n as Be,useT as be}from"./packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{StudioI18nProvider as we}from"./packem_shared/StudioI18nProvider-fVsCSs5L.mjs";import{ADMIN_FUNCTIONS as Ge,ADMIN_FUNCTION_PREFIX as qe}from"./packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{default as Ve}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.mjs";export{Ge as ADMIN_FUNCTIONS,qe as ADMIN_FUNCTION_PREFIX,A as AdvisorHealthPanel,h as ApiDocsPanel,C as ApiReferencePanel,O as ApiTab,te as AuditPanel,a as CommandPalette,l as ConfirmButton,s as ConnectionBadge,Ce as DEFAULT_AUTO_REFRESH_MS,I as DEFAULT_INSIGHT_THRESHOLDS,Me as DEFAULT_LOCALE,U as DataBrowser,b as DataFilters,$ as DeploymentHealthPanel,d as ErrorBoundary,V as ExportImportPanel,he as FileBrowser,Q as FunctionRunner,Y as FunctionStatsPanel,y as GlobalDataBrowser,de as HealthPanel,oe as HomePanel,g as InsightsPanel,fe as LogsPanel,me as MailPanel,ce as MetricsPanel,j as MigrationsPanel,se as NotificationsPanel,N as OpenRpcReferencePanel,z as PitrPanel,Ve as STUDIO_ROOT_CLASS,le as ScheduledJobs,Te as SchemaViewer,F as SecurityAdvisorPanel,ge as SettingsPanel,P as ShardInput,Fe as SqlEditorPanel,m as Studio,r as StudioApp,we as StudioI18nProvider,q as TableEditor,Pe as aggregateMetrics,Ue as createStudioI18n,T as deriveInsights,f as openCommandPalette,Se as shardsToAggregate,Be as studioI18n,v as toFilterClauses,He as useAutoRefresh,Le as useDebounced,be as useT};
1
+ import{StudioApp as r}from"./packem_shared/StudioApp-DikgPBVJ.mjs";import{CommandPalette as a,openCommandPalette as f}from"./packem_shared/CommandPalette-D9ZY-qQd.mjs";import{S as m}from"./packem_shared/studio-ajWxPNfI.mjs";import{ConfirmButton as l}from"./packem_shared/ConfirmButton-DU4p72Er.mjs";import{default as s}from"./packem_shared/ConnectionBadge-B8Hj5DaE.mjs";import{ErrorBoundary as d}from"./packem_shared/ErrorBoundary-BWNF98VF.mjs";import{ShardInput as P}from"./packem_shared/ShardInput-C6mjgAh4.mjs";import{default as A}from"./packem_chunks/AdvisorHealthPanel.mjs";import{DEFAULT_INSIGHT_THRESHOLDS as I,deriveInsights as T}from"./packem_shared/DEFAULT_INSIGHT_THRESHOLDS-D5YMT0gM.mjs";import{InsightsPanel as g}from"./packem_chunks/InsightsPanel.mjs";import{default as F}from"./packem_chunks/SecurityAdvisorPanel.mjs";import{default as h}from"./packem_shared/ApiDocsPanel-fhDlZGE4.mjs";import{default as C}from"./packem_shared/ApiReferencePanel-CHoHM5ME.mjs";import{default as O}from"./packem_chunks/ApiTab.mjs";import{default as N}from"./packem_shared/OpenRpcReferencePanel-C8ctFJVm.mjs";import{DataBrowser as U}from"./packem_shared/DataBrowser-YscAF4OI.mjs";import{DataFilters as b,toFilterClauses as v}from"./packem_shared/DataFilters-CYZFt2EK.mjs";import{GlobalDataBrowser as y}from"./packem_shared/GlobalDataBrowser-DhObcZDY.mjs";import{TableEditor as q}from"./packem_chunks/TableEditor.mjs";import{ExportImportPanel as V}from"./packem_chunks/ExportImportPanel.mjs";import{MigrationsPanel as j}from"./packem_shared/MigrationsPanel-QjQ4Gp9s.mjs";import{PitrPanel as z}from"./packem_chunks/PitrPanel.mjs";import{FunctionRunner as Q}from"./packem_chunks/FunctionRunner.mjs";import{FunctionStatsPanel as Y}from"./packem_chunks/FunctionStatsPanel.mjs";import{DeploymentHealthPanel as $}from"./packem_chunks/DeploymentHealthPanel.mjs";import{H as oe}from"./packem_shared/home-panel-DBSHjxil.mjs";import{AuditPanel as te}from"./packem_chunks/AuditPanel.mjs";import{LogsPanel as fe}from"./packem_chunks/LogsPanel.mjs";import{MailPanel as me}from"./packem_chunks/MailPanel.mjs";import{ScheduledJobs as le}from"./packem_shared/ScheduledJobs-nPx7NmOE.mjs";import{default as se}from"./packem_chunks/NotificationsPanel.mjs";import{HealthPanel as de}from"./packem_chunks/HealthPanel.mjs";import{aggregateMetrics as Pe,shardsToAggregate as Se}from"./packem_shared/aggregateMetrics-5zEJC6Ju.mjs";import{MetricsPanel as ce}from"./packem_chunks/MetricsPanel.mjs";import{SchemaViewer as Te}from"./packem_chunks/SchemaViewer.mjs";import{SettingsPanel as ge}from"./packem_chunks/SettingsPanel.mjs";import{SqlEditorPanel as Fe}from"./packem_chunks/SqlEditorPanel.mjs";import{FileBrowser as he}from"./packem_chunks/FileBrowser.mjs";import{DEFAULT_AUTO_REFRESH_MS as Ce,useAutoRefresh as He}from"./packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{default as Le}from"./packem_shared/useDebounced-DVeQ5-oW.mjs";import{DEFAULT_LOCALE as Me,createStudioI18n as Ue,studioI18n as Be,useT as be}from"./packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{StudioI18nProvider as we}from"./packem_shared/StudioI18nProvider-fVsCSs5L.mjs";import{ADMIN_FUNCTIONS as Ge,ADMIN_FUNCTION_PREFIX as qe}from"./packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{default as Ve}from"./packem_shared/STUDIO_ROOT_CLASS-C6MccdVk.mjs";export{Ge as ADMIN_FUNCTIONS,qe as ADMIN_FUNCTION_PREFIX,A as AdvisorHealthPanel,h as ApiDocsPanel,C as ApiReferencePanel,O as ApiTab,te as AuditPanel,a as CommandPalette,l as ConfirmButton,s as ConnectionBadge,Ce as DEFAULT_AUTO_REFRESH_MS,I as DEFAULT_INSIGHT_THRESHOLDS,Me as DEFAULT_LOCALE,U as DataBrowser,b as DataFilters,$ as DeploymentHealthPanel,d as ErrorBoundary,V as ExportImportPanel,he as FileBrowser,Q as FunctionRunner,Y as FunctionStatsPanel,y as GlobalDataBrowser,de as HealthPanel,oe as HomePanel,g as InsightsPanel,fe as LogsPanel,me as MailPanel,ce as MetricsPanel,j as MigrationsPanel,se as NotificationsPanel,N as OpenRpcReferencePanel,z as PitrPanel,Ve as STUDIO_ROOT_CLASS,le as ScheduledJobs,Te as SchemaViewer,F as SecurityAdvisorPanel,ge as SettingsPanel,P as ShardInput,Fe as SqlEditorPanel,m as Studio,r as StudioApp,we as StudioI18nProvider,q as TableEditor,Pe as aggregateMetrics,Ue as createStudioI18n,T as deriveInsights,f as openCommandPalette,Se as shardsToAggregate,Be as studioI18n,v as toFilterClauses,He as useAutoRefresh,Le as useDebounced,be as useT};
@@ -1 +1 @@
1
- import{c as ae}from"react/compiler-runtime";import{useLunora as pe}from"@lunora/react";import{useState as E,useRef as D,useEffect as j,useCallback as ge}from"react";import xe from"../packem_shared/ConnectionBadge-B8Hj5DaE.mjs";import{L as ve}from"../packem_shared/live-status-BuJdUZFU.mjs";import{B as G}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as M}from"../packem_shared/card--2hKx4L2.mjs";import{u as Ne}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useT as le}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as A}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{h as be,f as $,d as ee,b as te,c as _}from"../packem_shared/internal-Df43vQI0.mjs";import{l as we}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{c as R}from"../packem_shared/utils-bhneXptQ.mjs";import{jsx as l,jsxs as u}from"react/jsx-runtime";import{shardsToAggregate as Ee}from"../packem_shared/aggregateMetrics-5zEJC6Ju.mjs";import{S as z}from"../packem_shared/sparkline-B_sPPO_8.mjs";const Se={crit:"destructive",ok:"secondary",warn:"default"},P=(s,e)=>e===0?"—":`${(s/e*100).toFixed(1)}%`,Q=(s,e,r)=>Number.isNaN(s)?"ok":s>=r?"crit":s>=e?"warn":"ok",ne=.01,oe=.05,ye=s=>{const e=ae(36),{errorCount:r,logsError:t,topErrors:a,worstFunctions:f}=s,o=le();let n;e[0]!==o?(n=o("Functions by error rate"),e[0]=o,e[1]=n):n=e[1];let h;e[2]!==n?(h=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]=h):h=e[3];let m;e[4]!==o||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:o("No function activity yet.")}):l("ul",{className:"divide-y divide-border",children:f.map(b=>u("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}),u("span",{className:"flex shrink-0 items-center gap-2",children:[l("span",{className:"tabular-nums text-muted-foreground",children:o("{count} calls",{count:b.calls.toString()})}),l(G,{variant:Se[Q(b.errors/b.calls,ne,oe)],children:P(b.errors,b.calls)})]})]},b.path))}),e[4]=o,e[5]=f,e[6]=m):m=e[6];let p;e[7]!==h||e[8]!==m?(p=u(M,{className:"gap-0 py-0","data-testid":"hl-functions",children:[h,m]}),e[7]=h,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(G,{"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=u("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 S;e[20]!==t?(S=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]=S):S=e[21];let y;e[22]!==t||e[23]!==o||e[24]!==a.length?(y=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]=y):y=e[25];let T;e[26]!==a?(T=a.length>0&&l("ul",{className:"divide-y divide-border",children:a.map(Te)}),e[26]=a,e[27]=T):T=e[27];let N;e[28]!==S||e[29]!==y||e[30]!==T||e[31]!==x?(N=u(M,{className:"gap-0 py-0",children:[x,S,y,T]}),e[28]=S,e[29]=y,e[30]=T,e[31]=x,e[32]=N):N=e[32];let w;return e[33]!==N||e[34]!==p?(w=u("div",{className:"grid gap-3 lg:grid-cols-2",children:[p,N]}),e[33]=N,e[34]=p,e[35]=w):w=e[35],w};function Te(s,e){return u("li",{className:"flex flex-col gap-0.5 px-4 py-2 text-xs","data-testid":"hl-error-row",children:[u("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},Ae=s=>{let e=0,r=0,t=0,a=0,f=!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??[]),f||=n.historyTruncated===!0}return{errors:r,failed:a,history:o,historyTruncated:f,reachable:t,requests:e}},ke=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()]},Re=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()]},Me=_(A.getAuthMetrics),_e=_(A.getFunctionStats),Le=_(A.getLogs),Ie=_(A.getMetrics),Ce=_(A.migrationStatus),qe=5,se=2e3,Oe=5,Fe=.1,De=.3,je=1,Ue=50,Pe=(s,e,r)=>s>=r?"crit":s>=e?"warn":"ok",Ge=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)}},Ve=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}},Be=(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"},He={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},Ke=s=>s.includes("crit")?"crit":s.includes("warn")?"warn":"ok",U=s=>{const e=ae(19),{chart:r,label:t,level:a,testId:f,value:o}=s,n=ie[a];let h;e[0]!==n?(h=R("size-1.5 shrink-0 rounded-full",n),e[0]=n,e[1]=h):h=e[1];let m;e[2]!==h?(m=l("span",{"aria-hidden":"true",className:h}),e[2]=h,e[3]=m):m=e[3];let p;e[4]!==t||e[5]!==m?(p=u("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=R("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]!==o?(c=l("span",{className:i,"data-testid":f,children:o}),e[9]=i,e[10]=f,e[11]=o,e[12]=c):c=e[12];let g;e[13]!==r||e[14]!==c?(g=u("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(M,{className:"gap-0 py-0",children:u("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},$e=async(s,e,r)=>{const t=await Promise.all(r.map(i=>{const c=ee(i);return Promise.allSettled([s.query(Ie,{},c),s.query(_e,{},c),s.query(Ce,{},c)])})),a=ee(e),f=typeof s.schedulerStatus=="function"?s.schedulerStatus():Promise.reject(new Error("scheduler status unavailable")),[o,n,h]=await Promise.allSettled([s.query(Le,{},a),s.query(Me,{},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:[]})),p=Ae(m),v=t[0]?.[0];return{auth:n.status==="fulfilled"?n.value:null,entries:o.status==="fulfilled"?o.value.entries:[],functions:ke(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:Re(m.map(i=>i.migrations)),scheduler:h.status==="fulfilled"?h.value:null,totals:p}},ze=s=>{const e=s?.history??[];return{attempts:e.map(r=>r.attempts),failures:e.map(r=>r.failures)}},ut=({initialShardKey:s})=>{const e=pe(),r=le(),[t,a]=E([]),[f,o]=E(null),[n,h]=E(null),[m,p]=E(null),[v,i]=E([]),[c,g]=E(null),[x,S]=E(null),[y,T]=E([]),[N]=E(we),w=D(!1),b=D(!0);j(()=>(b.current=!0,()=>{b.current=!1}),[]);const L=s??"",I=ge(async()=>{if(w.current)return;w.current=!0;const d=await $e(e,L,Ee(L,N));if(!b.current){w.current=!1;return}h(d.totals),p(d.metricsError),i(d.functions),T(d.migrations),a(d.entries),o(d.logsError),g(d.auth),S(d.scheduler),w.current=!1},[e,N,L]);j(()=>{$(I())},[I]);const V=D(0),k=D(null),ue=()=>{const d=Date.now()-V.current;if(d>=se){V.current=Date.now(),$(I());return}k.current===null&&(k.current=setTimeout(()=>{k.current=null,V.current=Date.now(),$(I())},se-d))};j(()=>()=>{k.current!==null&&clearTimeout(k.current)},[]);const{data:W,liveError:de}=Ne(A.getMetrics,{},{live:!0,shardKey:L});j(()=>{W!==void 0&&ue()},[W]);const X=t.filter(d=>d.level==="error"),me=X.slice(0,qe),C=Ge(n?.history),J=ze(c),fe=v.filter(d=>d.calls>0).toSorted((d,K)=>K.errors/K.calls-d.errors/d.calls||K.calls-d.calls).slice(0,Oe),B=Ve(y),he=n===null||n.requests===0?0:n.errors/n.requests,H=Q(he,ne,oe),Y=c===null?"ok":Q(c.failureRate,Fe,De),Z=x===null?"ok":Pe(x.backlog,je,Ue),q=Ke([H,Y,Z,B.level]);let O,F;return q==="crit"?(O=r("Critical"),F=r("One or more service levels are breached.")):q==="warn"?(O=r("Degraded"),F=r("Some service levels need attention.")):(O=r("All systems healthy"),F=r("All service levels are within target.")),u("div",{className:"flex flex-col gap-6","data-testid":"lunora-health",children:[u(M,{className:"gap-0 py-0",children:[u("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[u("div",{className:"flex items-center gap-3",children:[l("span",{"aria-hidden":"true",className:R("flex size-10 shrink-0 items-center justify-center rounded-full",He[q]),children:l("span",{className:R("size-3 rounded-full",ie[q])})}),u("div",{className:"grid leading-tight",children:[l("span",{className:"text-sm font-semibold text-foreground","data-testid":"hl-status",children:O}),l("span",{className:"text-[13px] text-muted-foreground",children:F})]})]}),u("div",{className:"flex flex-wrap items-center gap-4",children:[u("div",{className:"text-end",children:[l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Requests")}),u("div",{className:"flex items-center justify-end gap-2",children:[C.requests.length>=2&&l(z,{ariaLabel:r("Requests over time"),className:"h-6 w-20 text-foreground",series:C.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"}),u("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:R("text-lg font-semibold tabular-nums",ce[H]),"data-testid":"hl-error-rate",children:n===null?"—":P(n.errors,n.requests)})]}),l("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),u("div",{className:"flex items-center gap-2",children:[l(xe,{}),l(ve,{message:de,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.")})]}),u("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4","data-testid":"hl-slo",children:[l(U,{chart:C.errors.length>=2?l(z,{ariaLabel:r("Errors over time"),className:"h-7 w-20 text-destructive",series:C.errors,testId:"hl-spark-errors"}):void 0,label:r("Error rate"),level:H,testId:"hl-slo-errorrate",value:n===null?"—":P(n.errors,n.requests)}),l(U,{chart:J.failures.length>=2?l(z,{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:Y,testId:"hl-slo-auth",value:c===null?"—":P(c.failures,c.attempts)}),l(U,{label:r("Scheduler backlog"),level:Z,testId:"hl-slo-backlog",value:x===null?"—":x.backlog.toString()}),l(U,{label:r("Migrations"),level:B.level,testId:"hl-slo-migrations",value:Be(B,r)})]}),l(ye,{errorCount:X.length,logsError:f,topErrors:me,worstFunctions:fe}),u(M,{className:"gap-0 py-0",children:[u("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(G,{"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(d=>l("li",{"data-testid":"hl-shard",children:l(G,{variant:"secondary",children:d})},d))})]})]})};export{ut as HealthPanel};
1
+ import{c as ae}from"react/compiler-runtime";import{useLunora as pe}from"@lunora/react";import{useState as S,useRef as j,useCallback as ge,useEffect as Z}from"react";import xe from"../packem_shared/ConnectionBadge-B8Hj5DaE.mjs";import{L as ve}from"../packem_shared/live-status-BuJdUZFU.mjs";import{B as G}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as _}from"../packem_shared/card--2hKx4L2.mjs";import{u as Ne}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{useT as le}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as R}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{h as be,f as K,d as ee,b as te,c as L}from"../packem_shared/internal-Df43vQI0.mjs";import{l as we}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{c as M}from"../packem_shared/utils-bhneXptQ.mjs";import{jsx as l,jsxs as u}from"react/jsx-runtime";import{shardsToAggregate as Ee}from"../packem_shared/aggregateMetrics-5zEJC6Ju.mjs";import{S as $}from"../packem_shared/sparkline-B_sPPO_8.mjs";const Se={crit:"destructive",ok:"secondary",warn:"default"},P=(s,e)=>e===0?"—":`${(s/e*100).toFixed(1)}%`,z=(s,e,r)=>Number.isNaN(s)?"ok":s>=r?"crit":s>=e?"warn":"ok",ne=.01,oe=.05,ye=s=>{const e=ae(36),{errorCount:r,logsError:t,topErrors:a,worstFunctions:m}=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 d;e[4]!==o||e[5]!==m?(d=m.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:m.map(w=>u("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:w.path}),u("span",{className:"flex shrink-0 items-center gap-2",children:[l("span",{className:"tabular-nums text-muted-foreground",children:o("{count} calls",{count:w.calls.toString()})}),l(G,{variant:Se[z(w.errors/w.calls,ne,oe)],children:P(w.errors,w.calls)})]})]},w.path))}),e[4]=o,e[5]=m,e[6]=d):d=e[6];let h;e[7]!==f||e[8]!==d?(h=u(_,{className:"gap-0 py-0","data-testid":"hl-functions",children:[f,d]}),e[7]=f,e[8]=d,e[9]=h):h=e[9];let x;e[10]!==o?(x=o("Recent errors"),e[10]=o,e[11]=x):x=e[11];let i;e[12]!==x?(i=l("span",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:x}),e[12]=x,e[13]=i):i=e[13];const c=r>0?"destructive":"outline";let p;e[14]!==r||e[15]!==c?(p=l(G,{"data-testid":"hl-error-count",variant:c,children:r}),e[14]=r,e[15]=c,e[16]=p):p=e[16];let g;e[17]!==i||e[18]!==p?(g=u("header",{className:"flex items-center justify-between gap-2 border-b border-border px-4 py-3",children:[i,p]}),e[17]=i,e[18]=p,e[19]=g):g=e[19];let y;e[20]!==t?(y=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]=y):y=e[21];let T;e[22]!==t||e[23]!==o||e[24]!==a.length?(T=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]=T):T=e[25];let A;e[26]!==a?(A=a.length>0&&l("ul",{className:"divide-y divide-border",children:a.map(Te)}),e[26]=a,e[27]=A):A=e[27];let N;e[28]!==y||e[29]!==T||e[30]!==A||e[31]!==g?(N=u(_,{className:"gap-0 py-0",children:[g,y,T,A]}),e[28]=y,e[29]=T,e[30]=A,e[31]=g,e[32]=N):N=e[32];let E;return e[33]!==N||e[34]!==h?(E=u("div",{className:"grid gap-3 lg:grid-cols-2",children:[h,N]}),e[33]=N,e[34]=h,e[35]=E):E=e[35],E};function Te(s,e){return u("li",{className:"flex flex-col gap-0.5 px-4 py-2 text-xs","data-testid":"hl-error-row",children:[u("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},Ae=s=>{let e=0,r=0,t=0,a=0,m=!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??[]),m||=n.historyTruncated===!0}return{errors:r,failed:a,history:o,historyTruncated:m,reachable:t,requests:e}},ke=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()]},Re=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 m=re[t.status]-re[a.status];(m>0||m===0&&(t.updatedAt??0)>(a.updatedAt??0))&&e.set(t.id,t)}return[...e.values()]},Me=L(R.getAuthMetrics),_e=L(R.getFunctionStats),Le=L(R.getLogs),Ie=L(R.getMetrics),Ce=L(R.migrationStatus),qe=5,se=2e3,Oe=5,Fe=.1,De=.3,je=1,Ue=50,Pe=(s,e,r)=>s>=r?"crit":s>=e?"warn":"ok",Ge=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)}},Ve=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}},Be=(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"},He={crit:"bg-destructive/10 text-destructive",ok:"bg-success/10 text-success",warn:"bg-warning/10 text-warning"},Ke=s=>s.includes("crit")?"crit":s.includes("warn")?"warn":"ok",U=s=>{const e=ae(19),{chart:r,label:t,level:a,testId:m,value:o}=s,n=ie[a];let f;e[0]!==n?(f=M("size-1.5 shrink-0 rounded-full",n),e[0]=n,e[1]=f):f=e[1];let d;e[2]!==f?(d=l("span",{"aria-hidden":"true",className:f}),e[2]=f,e[3]=d):d=e[3];let h;e[4]!==t||e[5]!==d?(h=u("span",{className:"flex items-center gap-1.5 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:[d,t]}),e[4]=t,e[5]=d,e[6]=h):h=e[6];const x=ce[a];let i;e[7]!==x?(i=M("truncate text-2xl font-semibold tabular-nums",x),e[7]=x,e[8]=i):i=e[8];let c;e[9]!==i||e[10]!==m||e[11]!==o?(c=l("span",{className:i,"data-testid":m,children:o}),e[9]=i,e[10]=m,e[11]=o,e[12]=c):c=e[12];let p;e[13]!==r||e[14]!==c?(p=u("div",{className:"flex items-center justify-between gap-3",children:[c,r]}),e[13]=r,e[14]=c,e[15]=p):p=e[15];let g;return e[16]!==h||e[17]!==p?(g=l(_,{className:"gap-0 py-0",children:u("div",{className:"flex flex-col gap-2.5 p-4",children:[h,p]})}),e[16]=h,e[17]=p,e[18]=g):g=e[18],g},$e=async(s,e,r)=>{const t=await Promise.all(r.map(i=>{const c=ee(i);return Promise.allSettled([s.query(Ie,{},c),s.query(_e,{},c),s.query(Ce,{},c)])})),a=ee(e),m=typeof s.schedulerStatus=="function"?s.schedulerStatus():Promise.reject(new Error("scheduler status unavailable")),[o,n,f]=await Promise.allSettled([s.query(Le,{},a),s.query(Me,{},a),m]),d=t.map(([i,c,p])=>({functions:c.status==="fulfilled"?c.value.functions:[],metrics:i.status==="fulfilled"?i.value:null,migrations:p.status==="fulfilled"?p.value.migrations:[]})),h=Ae(d),x=t[0]?.[0];return{auth:n.status==="fulfilled"?n.value:null,entries:o.status==="fulfilled"?o.value.entries:[],functions:ke(d.map(i=>i.functions)),logsError:o.status==="rejected"?te(o.reason):null,metricsError:h.reachable===0&&x?.status==="rejected"?te(x.reason):null,migrations:Re(d.map(i=>i.migrations)),scheduler:f.status==="fulfilled"?f.value:null,totals:h}},ze=s=>{const e=s?.history??[];return{attempts:e.map(r=>r.attempts),failures:e.map(r=>r.failures)}},ut=({initialShardKey:s})=>{const e=pe(),r=le(),[t,a]=S([]),[m,o]=S(null),[n,f]=S(null),[d,h]=S(null),[x,i]=S([]),[c,p]=S(null),[g,y]=S(null),[T,A]=S([]),[N]=S(we),E=j(!1),w=j(0),V=j(0),k=j(null),I=s??"",C=ge(async()=>{if(E.current)return;E.current=!0;const v=w.current,b=await $e(e,I,Ee(I,N));v===w.current&&(f(b.totals),h(b.metricsError),i(b.functions),A(b.migrations),a(b.entries),o(b.logsError),p(b.auth),y(b.scheduler),E.current=!1)},[e,N,I]);Z(()=>(K(C()),()=>{w.current+=1,E.current=!1,k.current!==null&&(clearTimeout(k.current),k.current=null)}),[C]);const ue=()=>{const v=Date.now()-V.current;if(v>=se){V.current=Date.now(),K(C());return}k.current===null&&(k.current=setTimeout(()=>{k.current=null,V.current=Date.now(),K(C())},se-v))},{data:Q,liveError:de}=Ne(R.getMetrics,{},{live:!0,shardKey:I});Z(()=>{Q!==void 0&&ue()},[Q]);const W=t.filter(v=>v.level==="error"),me=W.slice(0,qe),q=Ge(n?.history),X=ze(c),fe=x.filter(v=>v.calls>0).toSorted((v,b)=>b.errors/b.calls-v.errors/v.calls||b.calls-v.calls).slice(0,Oe),B=Ve(T),he=n===null||n.requests===0?0:n.errors/n.requests,H=z(he,ne,oe),J=c===null?"ok":z(c.failureRate,Fe,De),Y=g===null?"ok":Pe(g.backlog,je,Ue),O=Ke([H,J,Y,B.level]);let F,D;return O==="crit"?(F=r("Critical"),D=r("One or more service levels are breached.")):O==="warn"?(F=r("Degraded"),D=r("Some service levels need attention.")):(F=r("All systems healthy"),D=r("All service levels are within target.")),u("div",{className:"flex flex-col gap-6","data-testid":"lunora-health",children:[u(_,{className:"gap-0 py-0",children:[u("div",{className:"flex flex-wrap items-center justify-between gap-4 p-4",children:[u("div",{className:"flex items-center gap-3",children:[l("span",{"aria-hidden":"true",className:M("flex size-10 shrink-0 items-center justify-center rounded-full",He[O]),children:l("span",{className:M("size-3 rounded-full",ie[O])})}),u("div",{className:"grid leading-tight",children:[l("span",{className:"text-sm font-semibold text-foreground","data-testid":"hl-status",children:F}),l("span",{className:"text-[13px] text-muted-foreground",children:D})]})]}),u("div",{className:"flex flex-wrap items-center gap-4",children:[u("div",{className:"text-end",children:[l("div",{className:"font-mono text-[10px] tracking-wide text-muted-foreground uppercase",children:r("Requests")}),u("div",{className:"flex items-center justify-end gap-2",children:[q.requests.length>=2&&l($,{ariaLabel:r("Requests over time"),className:"h-6 w-20 text-foreground",series:q.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"}),u("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:M("text-lg font-semibold tabular-nums",ce[H]),"data-testid":"hl-error-rate",children:n===null?"—":P(n.errors,n.requests)})]}),l("span",{"aria-hidden":"true",className:"h-9 w-px bg-border"}),u("div",{className:"flex items-center gap-2",children:[l(xe,{}),l(ve,{message:de,prefix:"hl"})]})]})]}),d!==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:d}),d===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.")})]}),u("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4","data-testid":"hl-slo",children:[l(U,{chart:q.errors.length>=2?l($,{ariaLabel:r("Errors over time"),className:"h-7 w-20 text-destructive",series:q.errors,testId:"hl-spark-errors"}):void 0,label:r("Error rate"),level:H,testId:"hl-slo-errorrate",value:n===null?"—":P(n.errors,n.requests)}),l(U,{chart:X.failures.length>=2?l($,{ariaLabel:r("Auth failures over time"),className:"h-7 w-20 text-destructive",series:X.failures,testId:"hl-spark-auth"}):void 0,label:r("Auth failures"),level:J,testId:"hl-slo-auth",value:c===null?"—":P(c.failures,c.attempts)}),l(U,{label:r("Scheduler backlog"),level:Y,testId:"hl-slo-backlog",value:g===null?"—":g.backlog.toString()}),l(U,{label:r("Migrations"),level:B.level,testId:"hl-slo-migrations",value:Be(B,r)})]}),l(ye,{errorCount:W.length,logsError:m,topErrors:me,worstFunctions:fe}),u(_,{className:"gap-0 py-0",children:[u("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(G,{"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(v=>l("li",{"data-testid":"hl-shard",children:l(G,{variant:"secondary",children:v})},v))})]})]})};export{ut as HealthPanel};
@@ -1 +1 @@
1
- import{useLunora as pt}from"@lunora/react";import{useState as pe,useRef as Ge,useEffect as tt,useMemo as xt}from"react";import{L as bt}from"../packem_shared/live-status-BuJdUZFU.mjs";import{ShardInput as yt}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B as rt}from"../packem_shared/button-q0UYSmrn.mjs";import{u as Ue}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{u as vt}from"../packem_shared/use-open-trace-DMVhpnyG.mjs";import{u as Nt}from"../packem_shared/use-shard-key-BsP3o5wT.mjs";import{useT as xe}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as Oe}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as St}from"../packem_shared/cf-links-CBJ5SywP.mjs";import{i as wt,m as Xe,f as qt,d as Tt,b as _t,c as Ct}from"../packem_shared/internal-Df43vQI0.mjs";import{r as Rt,l as kt}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{c as Fe}from"react/compiler-runtime";import{f as $t}from"../packem_shared/log-fields-SBxKyBug.mjs";import{B as et}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as he,a as ge,c as Be,d as Mt,b as je}from"../packem_shared/card--2hKx4L2.mjs";import{b as Je,e as oe,T as dt,c as de,a as mt,d as ut}from"../packem_shared/table-D0SBiDu-.mjs";import{S as ft}from"../packem_shared/sparkline-B_sPPO_8.mjs";import{jsxs as n,jsx as t,Fragment as Ye}from"react/jsx-runtime";import{aggregateMetrics as It,computeLatencyPercentiles as Dt,enrichQueryStats as Et,shardsToAggregate as Ft}from"../packem_shared/aggregateMetrics-5zEJC6Ju.mjs";import{S as me}from"../packem_shared/stat-card-D0Fe04cX.mjs";import{ResponsiveContainer as st,AreaChart as At,CartesianGrid as lt,XAxis as it,YAxis as at,Tooltip as nt,Area as Ot,LineChart as Lt,Line as zt}from"recharts";import{E as Kt}from"../packem_shared/empty-state-D7jEML_T.mjs";import{c as Pt}from"../packem_shared/utils-bhneXptQ.mjs";import{S as Bt,a as jt,c as Qe,b as Qt,d as Ht}from"../packem_shared/select-DPyS18Vy.mjs";const Ut=/["\\\u0000-\u001F\uD800-\uDFFF]/,ot=l=>Ut.test(l)?JSON.stringify(l):`"${l}"`,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(typeof l=="number"){if(Number.isNaN(l))return"nan";if(l===1/0)return"inf";if(l===-1/0)return"-inf";if(Object.is(l,-0))return"-0"}if(typeof l=="string")return ot(l);if(l===null||typeof l!="object")return JSON.stringify(l);if(Array.isArray(l)){let o="[";for(let i=0;i<l.length;i++)i>0&&(o+=","),o+=Ze(l[i]);return o+"]"}const e=Object.getPrototypeOf(l);if(e!==null&&e!==Object.prototype){const o=l.constructor?.name??"value";throw new TypeError(`stableStringify: cannot use a ${o} in a stable JSON cache key — only plain objects, arrays, and JSON primitives are supported (wire-typed values key via stableWireKey)`)}const a=l,s=Object.keys(a).sort();let r="{",u=!0;for(const o of s){const i=a[o];i!==void 0&&(u?u=!1:r+=",",r+=ot(o),r+=":",r+=Ze(i))}return r+"}"},ht=(l,e,a)=>`${l}:${e}:${Ze(a??{})}`,gt=(l,e)=>l==="gauge"?e.last:l==="histogram"?e.sum/Math.max(1,e.count):e.sum,Jt=(l,e)=>gt(l,e),Vt=l=>gt(l.kind,l),We=l=>Number.isInteger(l)?l.toLocaleString():l.toLocaleString(void 0,{maximumFractionDigits:2}),Gt=l=>Array.isArray(l?.series)?l.series:[],Wt="FUNCTION_NOT_FOUND",Xt=l=>{const e=new Map;if(!Array.isArray(l?.series))return e;for(const a of l.series)e.set(ht(a.kind,a.name,a.attributes),a.points);return e},Yt={counter:"secondary",gauge:"default",histogram:"outline"},Zt=l=>{const e=Fe(18),{name:a,onOpenTrace:s,traceId:r}=l,u=xe();if(r===void 0){let d;return e[0]===Symbol.for("react.memo_cache_sentinel")?(d=t("span",{className:"text-muted-foreground",children:"—"}),e[0]=d):d=e[0],d}let o;e[1]!==r?(o=r.slice(0,8),e[1]=r,e[2]=o):o=e[2];const i=o;if(s===void 0){const d=`mt-instrument-trace-${a}`;let g;return e[3]!==i||e[4]!==d||e[5]!==r?(g=t("span",{className:"text-muted-foreground","data-testid":d,title:r,children:i}),e[3]=i,e[4]=d,e[5]=r,e[6]=g):g=e[6],g}const f=`mt-instrument-trace-${a}`;let v;e[7]!==s||e[8]!==r?(v=()=>{s(r)},e[7]=s,e[8]=r,e[9]=v):v=e[9];let w;e[10]!==u||e[11]!==r?(w=u("Open the exemplar trace {trace}",{trace:r}),e[10]=u,e[11]=r,e[12]=w):w=e[12];let h;return e[13]!==i||e[14]!==f||e[15]!==v||e[16]!==w?(h=t("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":f,onClick:v,title:w,type:"button",children:i}),e[13]=i,e[14]=f,e[15]=v,e[16]=w,e[17]=h):h=e[17],h},er=l=>{const e=Fe(105),{onOpenTrace:a,shardKey:s}=l,r=xe();let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u={},e[0]=u):u=e[0];let o;e[1]!==s?(o={live:!0,shardKey:s},e[1]=s,e[2]=o):o=e[2];const{data:i,error:f,errorSource:v}=Ue(Oe.getMetricSeries,u,o);let w;e[3]===Symbol.for("react.memo_cache_sentinel")?(w={},e[3]=w):w=e[3];let h;e[4]!==s?(h={live:!0,shardKey:s},e[4]=s,e[5]=h):h=e[5];const{data:d}=Ue(Oe.getMetricHistory,w,h);let g,N,q,C,c,x,p,b,T,R,S,M,$;if(e[6]!==i||e[7]!==f||e[8]!==v||e[9]!==d||e[10]!==a||e[11]!==r){b=Symbol.for("react.early_return_sentinel");e:{const A=Gt(i),O=wt(v)===Wt;if(f!==null&&!O){let m;e[25]!==r?(m=r("Instruments"),e[25]=r,e[26]=m):m=e[26];let K;e[27]!==m?(K=t("h3",{className:"text-sm font-semibold text-foreground",children:m}),e[27]=m,e[28]=K):K=e[28];let B;e[29]!==f||e[30]!==r?(B=r("Instruments unavailable: {error}",{error:f}),e[29]=f,e[30]=r,e[31]=B):B=e[31];let j;e[32]!==B?(j=t("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:B}),e[32]=B,e[33]=j):j=e[33];let Q;e[34]!==K||e[35]!==j?(Q=n("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[K,j]}),e[34]=K,e[35]=j,e[36]=Q):Q=e[36],b=Q;break e}if(A.length===0){b=null;break e}const k=Xt(d);let z;e[37]!==r?(z=m=>r(m==="counter"?"Counter":m==="gauge"?"Gauge":"Histogram"),e[37]=r,e[38]=z):z=e[38];const P=z;c="flex flex-col gap-2",x="mt-instruments";let L;e[39]!==r?(L=r("Instruments"),e[39]=r,e[40]=L):L=e[40],e[41]!==L?(p=t("h3",{className:"text-sm font-semibold text-foreground",children:L}),e[41]=L,e[42]=p):p=e[42],C=he,$="overflow-hidden py-0",q=ge,M="px-0",N=dt,R="mt-instruments-table";let U;e[43]!==r?(U=r("name"),e[43]=r,e[44]=U):U=e[44];let J;e[45]!==U?(J=t(de,{children:U}),e[45]=U,e[46]=J):J=e[46];let V;e[47]!==r?(V=r("kind"),e[47]=r,e[48]=V):V=e[48];let G;e[49]!==V?(G=t(de,{children:V}),e[49]=V,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 Z;e[57]!==Y?(Z=t(de,{className:"text-right",children:Y}),e[57]=Y,e[58]=Z):Z=e[58];let ee;e[59]!==r?(ee=r("range"),e[59]=r,e[60]=ee):ee=e[60];let te;e[61]!==ee?(te=t(de,{className:"text-right",children:ee}),e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==r?(re=r("trend"),e[63]=r,e[64]=re):re=e[64];let se;e[65]!==re?(se=t(de,{children:re}),e[65]=re,e[66]=se):se=e[66];let le;e[67]!==r?(le=r("trace"),e[67]=r,e[68]=le):le=e[68];let ie;e[69]!==le?(ie=t(de,{children:le}),e[69]=le,e[70]=ie):ie=e[70];let ae;e[71]!==r?(ae=r("dimensions"),e[71]=r,e[72]=ae):ae=e[72];let ne;e[73]!==ae?(ne=t(de,{children:ae}),e[73]=ae,e[74]=ne):ne=e[74],e[75]!==J||e[76]!==G||e[77]!==X||e[78]!==Z||e[79]!==te||e[80]!==se||e[81]!==ie||e[82]!==ne?(S=t(mt,{children:n(Je,{children:[J,G,X,Z,te,se,ie,ne]})}),e[75]=J,e[76]=G,e[77]=X,e[78]=Z,e[79]=te,e[80]=se,e[81]=ie,e[82]=ne,e[83]=S):S=e[83],g=ut,T=A.map(m=>{const K=$t(m.attributes),B=ht(m.kind,m.name,m.attributes),Q=(k.get(B)??[]).map(ue=>Jt(m.kind,ue));return n(Je,{"data-testid":`mt-instrument-${m.name}`,children:[t(oe,{className:"font-mono text-xs",title:m.functionPath,children:m.name}),t(oe,{children:t(et,{variant:Yt[m.kind],children:P(m.kind)})}),t(oe,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${m.name}`,children:We(Vt(m))}),t(oe,{className:"text-right tabular-nums text-muted-foreground",children:m.count.toLocaleString()}),t(oe,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:m.min===m.max?"—":`${We(m.min)}–${We(m.max)}`}),t(oe,{children:Q.length>=2?t(ft,{ariaLabel:r("{name} trend",{name:m.name}),className:"h-6 w-24 text-foreground",series:Q,testId:`mt-instrument-trend-${m.name}`}):t("span",{className:"text-xs text-muted-foreground",children:"—"})}),t(oe,{className:"font-mono text-xs",children:t(Zt,{name:m.name,onOpenTrace:a,traceId:m.exemplarTraceId})}),t(oe,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:K,children:K===""?"—":K})]},B)})}e[6]=i,e[7]=f,e[8]=v,e[9]=d,e[10]=a,e[11]=r,e[12]=g,e[13]=N,e[14]=q,e[15]=C,e[16]=c,e[17]=x,e[18]=p,e[19]=b,e[20]=T,e[21]=R,e[22]=S,e[23]=M,e[24]=$}else g=e[12],N=e[13],q=e[14],C=e[15],c=e[16],x=e[17],p=e[18],b=e[19],T=e[20],R=e[21],S=e[22],M=e[23],$=e[24];if(b!==Symbol.for("react.early_return_sentinel"))return b;let I;e[84]!==g||e[85]!==T?(I=t(g,{children:T}),e[84]=g,e[85]=T,e[86]=I):I=e[86];let _;e[87]!==N||e[88]!==I||e[89]!==R||e[90]!==S?(_=n(N,{"data-testid":R,children:[S,I]}),e[87]=N,e[88]=I,e[89]=R,e[90]=S,e[91]=_):_=e[91];let y;e[92]!==q||e[93]!==_||e[94]!==M?(y=t(q,{className:M,children:_}),e[92]=q,e[93]=_,e[94]=M,e[95]=y):y=e[95];let D;e[96]!==C||e[97]!==y||e[98]!==$?(D=t(C,{className:$,children:y}),e[96]=C,e[97]=y,e[98]=$,e[99]=D):D=e[99];let F;return e[100]!==c||e[101]!==x||e[102]!==p||e[103]!==D?(F=n("section",{className:c,"data-testid":x,children:[p,D]}),e[100]=c,e[101]=x,e[102]=p,e[103]=D,e[104]=F):F=e[104],F},tr=l=>{const e=Fe(74),{aggregate:a,shardResults:s}=l,r=xe();let u;e[0]!==r?(u=r("Shards"),e[0]=r,e[1]=u):u=e[1];let o;e[2]!==a.failed||e[3]!==a.reachable||e[4]!==r?(o=a.failed>0?r("{reachable} reachable, {failed} unreachable",{failed:a.failed,reachable:a.reachable}):r("{reachable} reachable",{reachable:a.reachable}),e[2]=a.failed,e[3]=a.reachable,e[4]=r,e[5]=o):o=e[5];let i;e[6]!==u||e[7]!==o?(i=t(me,{label:u,testId:"mt-agg-shards",value:o}),e[6]=u,e[7]=o,e[8]=i):i=e[8];let f;e[9]!==r?(f=r("Total requests"),e[9]=r,e[10]=f):f=e[10];let v;e[11]!==a.totalRequests||e[12]!==f?(v=t(me,{label:f,testId:"mt-agg-requests",value:a.totalRequests}),e[11]=a.totalRequests,e[12]=f,e[13]=v):v=e[13];let w;e[14]!==r?(w=r("Total errors"),e[14]=r,e[15]=w):w=e[15];let h;e[16]!==a.totalErrors||e[17]!==w?(h=t(me,{label:w,testId:"mt-agg-errors",value:a.totalErrors}),e[16]=a.totalErrors,e[17]=w,e[18]=h):h=e[18];let d;e[19]!==r?(d=r("Total database size"),e[19]=r,e[20]=d):d=e[20];let g;e[21]!==a.totalDatabaseSize?(g=Xe(a.totalDatabaseSize),e[21]=a.totalDatabaseSize,e[22]=g):g=e[22];let N;e[23]!==d||e[24]!==g?(N=t(me,{label:d,testId:"mt-agg-db-size",value:g}),e[23]=d,e[24]=g,e[25]=N):N=e[25];let q;e[26]!==r?(q=r("Combined cache hit rate"),e[26]=r,e[27]=q):q=e[27];let C;e[28]!==a.hitRate||e[29]!==r?(C=a.hitRate===null?r("no cache configured"):`${(a.hitRate*100).toFixed(1)}%`,e[28]=a.hitRate,e[29]=r,e[30]=C):C=e[30];let c;e[31]!==q||e[32]!==C?(c=t(me,{label:q,testId:"mt-agg-cache",value:C}),e[31]=q,e[32]=C,e[33]=c):c=e[33];let x;e[34]!==N||e[35]!==c||e[36]!==i||e[37]!==v||e[38]!==h?(x=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[i,v,h,N,c]}),e[34]=N,e[35]=c,e[36]=i,e[37]=v,e[38]=h,e[39]=x):x=e[39];let p;e[40]!==r?(p=r("shard"),e[40]=r,e[41]=p):p=e[41];let b;e[42]!==p?(b=t(de,{children:p}),e[42]=p,e[43]=b):b=e[43];let T;e[44]!==r?(T=r("requests"),e[44]=r,e[45]=T):T=e[45];let R;e[46]!==T?(R=t(de,{children:T}),e[46]=T,e[47]=R):R=e[47];let S;e[48]!==r?(S=r("errors"),e[48]=r,e[49]=S):S=e[49];let M;e[50]!==S?(M=t(de,{children:S}),e[50]=S,e[51]=M):M=e[51];let $;e[52]!==r?($=r("db size"),e[52]=r,e[53]=$):$=e[53];let I;e[54]!==$?(I=t(de,{children:$}),e[54]=$,e[55]=I):I=e[55];let _;e[56]!==b||e[57]!==R||e[58]!==M||e[59]!==I?(_=t(mt,{children:n(Je,{children:[b,R,M,I]})}),e[56]=b,e[57]=R,e[58]=M,e[59]=I,e[60]=_):_=e[60];let y;if(e[61]!==s||e[62]!==r){let O;e[64]!==r?(O=k=>n(Je,{"data-testid":`mt-agg-row-${k.shard}`,children:[t(oe,{children:k.shard}),k.metrics===null?t(oe,{className:"text-destructive",colSpan:3,children:k.error??r("unreachable")}):n(Ye,{children:[t(oe,{className:"tabular-nums",children:k.metrics.requests}),t(oe,{className:"tabular-nums",children:k.metrics.errors}),t(oe,{className:"tabular-nums",children:Xe(k.metrics.databaseSize)})]})]},k.shard),e[64]=r,e[65]=O):O=e[65],y=s.map(O),e[61]=s,e[62]=r,e[63]=y}else y=e[63];let D;e[66]!==y?(D=t(ut,{children:y}),e[66]=y,e[67]=D):D=e[67];let F;e[68]!==_||e[69]!==D?(F=t(he,{className:"overflow-hidden py-0",children:t(ge,{className:"px-0",children:n(dt,{"data-testid":"mt-agg-table",children:[_,D]})})}),e[68]=_,e[69]=D,e[70]=F):F=e[70];let A;return e[71]!==x||e[72]!==F?(A=n("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[x,F]}),e[71]=x,e[72]=F,e[73]=A):A=e[73],A},rr=l=>{const e=Math.floor(l/1e3),a=Math.floor(e/3600),s=Math.floor(e%3600/60),r=e%60;return a>0?`${a.toString()}h ${s.toString()}m`:s>0?`${s.toString()}m ${r.toString()}s`:`${r.toString()}s`},sr=(l,e)=>{const a=l+e;return a===0?"—":`${(l/a*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=Fe(75),{currentDelta:a,errorRate:s,history:r,latencyPercentiles:u,metrics:o}=l,i=xe(),{cache:f}=o;let v;e[0]!==r||e[1]!==i?(v=r.length>=2?t(ft,{ariaLabel:i("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:r,testId:"mt-sparkline"}):void 0,e[0]=r,e[1]=i,e[2]=v):v=e[2];let w;e[3]!==a||e[4]!==r.length||e[5]!==i?(w=r.length>=2?n(Ye,{children:[t("span",{className:"font-semibold text-foreground",children:`+${a.toLocaleString()}`})," ",i("last interval")]}):t("span",{"data-testid":"mt-sparkline-empty",children:i("collecting samples…")}),e[3]=a,e[4]=r.length,e[5]=i,e[6]=w):w=e[6];let h;e[7]!==i?(h=i("Requests"),e[7]=i,e[8]=h):h=e[8];let d;e[9]!==o.requests||e[10]!==v||e[11]!==w||e[12]!==h?(d=t(me,{chart:v,footer:w,label:h,testId:"mt-requests",value:o.requests}),e[9]=o.requests,e[10]=v,e[11]=w,e[12]=h,e[13]=d):d=e[13];let g;e[14]!==s||e[15]!==i?(g=i("{rate} error rate",{rate:s}),e[14]=s,e[15]=i,e[16]=g):g=e[16];let N;e[17]!==i?(N=i("Errors"),e[17]=i,e[18]=N):N=e[18];let q;e[19]!==s||e[20]!==o.errors?(q=n(Ye,{children:[o.errors," (",s,")"]}),e[19]=s,e[20]=o.errors,e[21]=q):q=e[21];let C;e[22]!==g||e[23]!==N||e[24]!==q?(C=t(me,{footer:g,label:N,testId:"mt-errors",value:q}),e[22]=g,e[23]=N,e[24]=q,e[25]=C):C=e[25];let c;e[26]!==u.p90?(c=u.p90>0?`P90 ${ct(u.p90)}`:void 0,e[26]=u.p90,e[27]=c):c=e[27];let x;e[28]!==i?(x=i("P95 latency"),e[28]=i,e[29]=x):x=e[29];let p;e[30]!==u.p95?(p=u.p95>0?ct(u.p95):"—",e[30]=u.p95,e[31]=p):p=e[31];let b;e[32]!==x||e[33]!==p||e[34]!==c?(b=t(me,{footer:c,label:x,testId:"mt-p95",value:p}),e[32]=x,e[33]=p,e[34]=c,e[35]=b):b=e[35];let T;e[36]!==f||e[37]!==i?(T=f?`${f.entries.toLocaleString()} ${i("cache entries")}`:void 0,e[36]=f,e[37]=i,e[38]=T):T=e[38];let R;e[39]!==i?(R=i("Database size"),e[39]=i,e[40]=R):R=e[40];let S;e[41]!==o.databaseSize?(S=Xe(o.databaseSize),e[41]=o.databaseSize,e[42]=S):S=e[42];let M;e[43]!==T||e[44]!==R||e[45]!==S?(M=t(me,{footer:T,label:R,testId:"mt-db-size",value:S}),e[43]=T,e[44]=R,e[45]=S,e[46]=M):M=e[46];let $;e[47]!==i?($=i("Shard"),e[47]=i,e[48]=$):$=e[48];let I;e[49]!==o.shard||e[50]!==$?(I=t(me,{label:$,testId:"mt-shard",value:o.shard}),e[49]=o.shard,e[50]=$,e[51]=I):I=e[51];let _;e[52]!==i?(_=i("Uptime"),e[52]=i,e[53]=_):_=e[53];let y;e[54]!==o.uptimeMs?(y=rr(o.uptimeMs),e[54]=o.uptimeMs,e[55]=y):y=e[55];let D;e[56]!==_||e[57]!==y?(D=t(me,{label:_,testId:"mt-uptime",value:y}),e[56]=_,e[57]=y,e[58]=D):D=e[58];let F;e[59]!==i?(F=i("Cache hit rate"),e[59]=i,e[60]=F):F=e[60];let A;e[61]!==f||e[62]!==i?(A=f?i("{rate} ({count} entries)",{count:f.entries,rate:sr(f.hits,f.misses)}):i("no cache configured"),e[61]=f,e[62]=i,e[63]=A):A=e[63];let O;e[64]!==F||e[65]!==A?(O=t(me,{label:F,testId:"mt-cache",value:A}),e[64]=F,e[65]=A,e[66]=O):O=e[66];let k;return e[67]!==b||e[68]!==M||e[69]!==I||e[70]!==D||e[71]!==O||e[72]!==d||e[73]!==C?(k=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[d,C,b,M,I,D,O]}),e[67]=b,e[68]=M,e[69]=I,e[70]=D,e[71]=O,e[72]=d,e[73]=C,e[74]=k):k=e[74],k},Ve=l=>l>=100?"critical":l>=50?"warning":"good",Ae=l=>l<1?`${(l*1e3).toFixed(0)}μs`:l<1e3?`${l.toFixed(1)}ms`:`${(l/1e3).toFixed(2)}s`,He=l=>l>=1e9?`${(l/1e9).toFixed(1)}B`:l>=1e6?`${(l/1e6).toFixed(1)}M`:l>=1e3?`${(l/1e3).toFixed(1)}K`:l.toLocaleString(),ir=l=>{const e=Fe(3),{level:a}=l;if(a==="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(a==="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 s;return e[2]===Symbol.for("react.memo_cache_sentinel")?(s=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]=s):s=e[2],s},ar=(l,e)=>{const a=[...l];return a.sort((s,r)=>{switch(e){case"avgTime":return r.avgDurationMs-s.avgDurationMs;case"execCount":return r.execCount-s.execCount;case"rowsRead":return r.rowsRead-s.rowsRead;default:return r.totalDurationMs-s.totalDurationMs}}),a},nr=l=>{const e=Fe(161),{queryStats:a}=l,s=xe(),[r,u]=pe("totalTime");let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=new Set,e[0]=o):o=e[0];const[i,f]=pe(o);let v;e[1]===Symbol.for("react.memo_cache_sentinel")?(v=$=>{$!==null&&u($)},e[1]=v):v=e[1];const w=v;let h,d,g,N,q,C,c,x,p,b;if(e[2]!==i||e[3]!==a||e[4]!==r||e[5]!==s){g=Symbol.for("react.early_return_sentinel");e:{const $=ar(a,r);let I;e[16]!==a?(I=a.filter(or),e[16]=a,e[17]=I):I=e[17];const _=I.length;let y;e[18]!==a?(y=a.filter(cr),e[18]=a,e[19]=y):y=e[19];const D=y.length;let F;e[20]!==a?(F=a.filter(dr),e[20]=a,e[21]=F):F=e[21];const A=F.length;let O;e[22]===Symbol.for("react.memo_cache_sentinel")?(O=E=>{f(ce=>{const H=new Set(ce);return H.has(E)?H.delete(E):H.add(E),H})},e[22]=O):O=e[22];const k=O;if(a.length===0){let E;e[23]!==s?(E=s("No query insights yet"),e[23]=s,e[24]=E):E=e[24];let ce;e[25]!==E?(ce=t("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:E}),e[25]=E,e[26]=ce):ce=e[26];let H;e[27]!==s?(H=s("Query insights appear once statements are executed against this shard."),e[27]=s,e[28]=H):H=e[28];let fe;e[29]!==H?(fe=t("p",{className:"mt-1 text-sm",children:H}),e[29]=H,e[30]=fe):fe=e[30];let Pe;e[31]!==ce||e[32]!==fe?(Pe=t(he,{children:t(ge,{className:"py-12",children:n("div",{className:"text-center text-muted-foreground",children:[ce,fe]})})}),e[31]=ce,e[32]=fe,e[33]=Pe):Pe=e[33],g=Pe;break e}c="space-y-4",x="qi-root";let z;e[34]!==s?(z=s("Critical queries"),e[34]=s,e[35]=z):z=e[35];let P;e[36]!==z?(P=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:z})}),e[36]=z,e[37]=P):P=e[37];let L;e[38]!==_?(L=t("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:_}),e[38]=_,e[39]=L):L=e[39];let U;e[40]!==s?(U=s(">100ms avg execution"),e[40]=s,e[41]=U):U=e[41];let J;e[42]!==U?(J=t("p",{className:"text-xs text-muted-foreground",children:U}),e[42]=U,e[43]=J):J=e[43];let V;e[44]!==L||e[45]!==J?(V=n(ge,{children:[L,J]}),e[44]=L,e[45]=J,e[46]=V):V=e[46];let G;e[47]!==P||e[48]!==V?(G=n(he,{children:[P,V]}),e[47]=P,e[48]=V,e[49]=G):G=e[49];let W;e[50]!==s?(W=s("Moderate queries"),e[50]=s,e[51]=W):W=e[51];let X;e[52]!==W?(X=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:W})}),e[52]=W,e[53]=X):X=e[53];let Y;e[54]!==D?(Y=t("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:D}),e[54]=D,e[55]=Y):Y=e[55];let Z;e[56]!==s?(Z=s("50–100ms avg execution"),e[56]=s,e[57]=Z):Z=e[57];let ee;e[58]!==Z?(ee=t("p",{className:"text-xs text-muted-foreground",children:Z}),e[58]=Z,e[59]=ee):ee=e[59];let te;e[60]!==Y||e[61]!==ee?(te=n(ge,{children:[Y,ee]}),e[60]=Y,e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==X||e[64]!==te?(re=n(he,{children:[X,te]}),e[63]=X,e[64]=te,e[65]=re):re=e[65];let se;e[66]!==s?(se=s("Fast queries"),e[66]=s,e[67]=se):se=e[67];let le;e[68]!==se?(le=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:se})}),e[68]=se,e[69]=le):le=e[69];let ie;e[70]!==A?(ie=t("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:A}),e[70]=A,e[71]=ie):ie=e[71];let ae;e[72]!==s?(ae=s("<50ms avg execution"),e[72]=s,e[73]=ae):ae=e[73];let ne;e[74]!==ae?(ne=t("p",{className:"text-xs text-muted-foreground",children:ae}),e[74]=ae,e[75]=ne):ne=e[75];let m;e[76]!==ie||e[77]!==ne?(m=n(ge,{children:[ie,ne]}),e[76]=ie,e[77]=ne,e[78]=m):m=e[78];let K;e[79]!==le||e[80]!==m?(K=n(he,{children:[le,m]}),e[79]=le,e[80]=m,e[81]=K):K=e[81],e[82]!==G||e[83]!==re||e[84]!==K?(p=n("div",{className:"grid gap-4 md:grid-cols-3",children:[G,re,K]}),e[82]=G,e[83]=re,e[84]=K,e[85]=p):p=e[85];let B;e[86]!==s?(B=s("Query leaderboard"),e[86]=s,e[87]=B):B=e[87];let j;e[88]!==B?(j=t("h3",{className:"text-lg font-semibold",children:B}),e[88]=B,e[89]=j):j=e[89];let Q;e[90]!==r||e[91]!==s?(Q=s("Slow queries sorted by {sortField}",{sortField:s(r)}),e[90]=r,e[91]=s,e[92]=Q):Q=e[92];let ue;e[93]!==Q?(ue=t("p",{className:"text-sm text-muted-foreground",children:Q}),e[93]=Q,e[94]=ue):ue=e[94];let be;e[95]!==j||e[96]!==ue?(be=n("div",{children:[j,ue]}),e[95]=j,e[96]=ue,e[97]=be):be=e[97];let ye;e[98]!==s?(ye=s("Sort by"),e[98]=s,e[99]=ye):ye=e[99];let ve;e[100]!==ye?(ve=t("span",{className:"text-sm text-muted-foreground",children:ye}),e[100]=ye,e[101]=ve):ve=e[101];let Ne;e[102]!==s?(Ne=s("Sort queries by"),e[102]=s,e[103]=Ne):Ne=e[103];let Le;e[104]===Symbol.for("react.memo_cache_sentinel")?(Le=t(Bt,{}),e[104]=Le):Le=e[104];let Se;e[105]!==Ne?(Se=t(jt,{"aria-label":Ne,className:"w-[140px]","data-testid":"qi-sort",children:Le}),e[105]=Ne,e[106]=Se):Se=e[106];let we;e[107]!==s?(we=s("Total time"),e[107]=s,e[108]=we):we=e[108];let qe;e[109]!==we?(qe=t(Qe,{value:"totalTime",children:we}),e[109]=we,e[110]=qe):qe=e[110];let Te;e[111]!==s?(Te=s("Avg time"),e[111]=s,e[112]=Te):Te=e[112];let _e;e[113]!==Te?(_e=t(Qe,{value:"avgTime",children:Te}),e[113]=Te,e[114]=_e):_e=e[114];let Ce;e[115]!==s?(Ce=s("Execution count"),e[115]=s,e[116]=Ce):Ce=e[116];let Re;e[117]!==Ce?(Re=t(Qe,{value:"execCount",children:Ce}),e[117]=Ce,e[118]=Re):Re=e[118];let ke;e[119]!==s?(ke=s("Rows read"),e[119]=s,e[120]=ke):ke=e[120];let $e;e[121]!==ke?($e=t(Qe,{value:"rowsRead",children:ke}),e[121]=ke,e[122]=$e):$e=e[122];let Me;e[123]!==qe||e[124]!==_e||e[125]!==Re||e[126]!==$e?(Me=n(Qt,{children:[qe,_e,Re,$e]}),e[123]=qe,e[124]=_e,e[125]=Re,e[126]=$e,e[127]=Me):Me=e[127];let Ie;e[128]!==r||e[129]!==Se||e[130]!==Me?(Ie=n(Ht,{onValueChange:w,value:r,children:[Se,Me]}),e[128]=r,e[129]=Se,e[130]=Me,e[131]=Ie):Ie=e[131];let De;e[132]!==ve||e[133]!==Ie?(De=n("div",{className:"flex items-center gap-2",children:[ve,Ie]}),e[132]=ve,e[133]=Ie,e[134]=De):De=e[134],e[135]!==be||e[136]!==De?(b=n("div",{className:"flex items-center justify-between",children:[be,De]}),e[135]=be,e[136]=De,e[137]=b):b=e[137],d=he;let Ee;e[138]!==s?(Ee=s("Statements"),e[138]=s,e[139]=Ee):Ee=e[139];let ze;e[140]!==Ee?(ze=t(je,{children:Ee}),e[140]=Ee,e[141]=ze):ze=e[141],C=n(Be,{children:[ze,t(Mt,{children:s("{count} tracked statements",{count:$.length})})]}),h=ge,N="space-y-2";let Ke;e[142]!==i||e[143]!==s?(Ke=E=>{const ce=E.normalizedSql,H=i.has(ce),fe=Ve(E.avgDurationMs);return n("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[n("button",{"aria-expanded":H,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{k(ce)},type:"button",children:[n("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[t(ir,{level:fe}),t("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:E.normalizedSql})]}),n("div",{className:"flex shrink-0 items-center gap-4",children:[n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ae(E.totalDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("total")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ae(E.avgDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("avg")})]}),E.p95DurationMs!==void 0&&n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ae(E.p95DurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("p95")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:He(E.execCount)}),t("div",{className:"text-xs text-muted-foreground",children:s("calls")})]})]})]}),H&&n("div",{className:"space-y-3 border-t bg-muted/30 p-4",children:[n("div",{children:[t("p",{className:"mb-2 text-sm font-medium",children:s("Full statement")}),t("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:E.normalizedSql})]}),n("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[E.p50DurationMs!==void 0&&n("div",{children:[t("span",{className:"text-muted-foreground",children:s("p50")}),t("span",{className:"block font-medium tabular-nums",children:Ae(E.p50DurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Exec count")}),t("span",{className:"block font-medium tabular-nums",children:He(E.execCount)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Total time")}),t("span",{className:"block font-medium tabular-nums",children:Ae(E.totalDurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows read")}),t("span",{className:"block font-medium tabular-nums",children:He(E.rowsRead)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows written")}),t("span",{className:"block font-medium tabular-nums",children:He(E.rowsWritten)})]})]})]})]},ce)},e[142]=i,e[143]=s,e[144]=Ke):Ke=e[144],q=$.map(Ke)}e[2]=i,e[3]=a,e[4]=r,e[5]=s,e[6]=h,e[7]=d,e[8]=g,e[9]=N,e[10]=q,e[11]=C,e[12]=c,e[13]=x,e[14]=p,e[15]=b}else h=e[6],d=e[7],g=e[8],N=e[9],q=e[10],C=e[11],c=e[12],x=e[13],p=e[14],b=e[15];if(g!==Symbol.for("react.early_return_sentinel"))return g;let T;e[145]!==N||e[146]!==q?(T=t("div",{className:N,children:q}),e[145]=N,e[146]=q,e[147]=T):T=e[147];let R;e[148]!==h||e[149]!==T?(R=t(h,{children:T}),e[148]=h,e[149]=T,e[150]=R):R=e[150];let S;e[151]!==d||e[152]!==R||e[153]!==C?(S=n(d,{children:[C,R]}),e[151]=d,e[152]=R,e[153]=C,e[154]=S):S=e[154];let M;return e[155]!==S||e[156]!==c||e[157]!==x||e[158]!==p||e[159]!==b?(M=n("div",{className:c,"data-testid":x,children:[p,b,S]}),e[155]=S,e[156]=c,e[157]=x,e[158]=p,e[159]=b,e[160]=M):M=e[160],M};function or(l){return Ve(l.avgDurationMs)==="critical"}function cr(l){return Ve(l.avgDurationMs)==="warning"}function dr(l){return Ve(l.avgDurationMs)==="good"}const mr=["1m","5m","15m","1h"],ur=l=>new Date(l).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),fr=l=>l.map(e=>({avg:Math.round(e.avgDurationMs*100)/100,execs:e.execCount,label:ur(e.bucketMs)})),hr=({shardKey:l=""})=>{const e=xe(),[a,s]=pe("15m"),u=Ue(Oe.getQueryInsights,{range:a},{live:!0,shardKey:l}).data,o=fr(u?.buckets??[]);return n("div",{className:"flex flex-col gap-4","data-testid":"qi-range",children:[n("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===a,className:Pt("rounded px-2 py-1 text-xs outline-none transition-colors hover:bg-accent focus-visible:bg-accent",i===a&&"bg-accent font-medium text-foreground"),"data-testid":`qi-range-${i}`,onClick:()=>{s(i)},type:"button",children:i},i))}),u?.capped===!0&&t(et,{"data-testid":"qi-capped",variant:"secondary",children:e("showing a capped set")})]}),o.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.")}):n("div",{className:"grid gap-4 lg:grid-cols-2",children:[n("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(st,{height:140,width:"100%",children:n(At,{data:o,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(it,{dataKey:"label",fontSize:10,tickLine:!1}),t(at,{allowDecimals:!1,fontSize:10,tickLine:!1,width:32}),t(nt,{}),t(Ot,{dataKey:"execs",fill:"var(--color-primary)",fillOpacity:.15,stroke:"var(--color-primary)",type:"monotone"})]})})]}),n("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(st,{height:140,width:"100%",children:n(Lt,{data:o,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(it,{dataKey:"label",fontSize:10,tickLine:!1}),t(at,{fontSize:10,tickLine:!1,width:32}),t(nt,{}),t(zt,{dataKey:"avg",dot:!1,stroke:"var(--color-destructive)",type:"monotone"})]})})]})]}),t(nr,{queryStats:u?.entries??[]})]})},gr=Ct(Oe.getMetrics),pr=(l,e)=>l?e:"overview",jr=({initialShardKey:l})=>{const e=pt(),a=xe(),{queryShardKey:s,setShardKey:r,shardKey:u}=Nt(l),[o,i]=pe("overview"),[f,v]=pe([]),w=Ge(null),h=Ge(null),d=Ge(!0);tt(()=>(d.current=!0,()=>{d.current=!1}),[]);const g=vt(s),{data:N,error:q,liveError:C}=Ue(Oe.getMetrics,{},{live:!0,shardKey:s}),c=N??null;tt(()=>{if(N===void 0)return;Rt(s);const k=N,z=w.current,P=h.current!==null&&h.current!==k.shard;if(h.current=k.shard,w.current=k.requests,P){v([]);return}z!==null&&k.requests>=z&&v(L=>[...L,k.requests-z].slice(-30))},[N,s]);const[x,p]=pe(null),[b,T]=pe(!1),R=async()=>{T(!0);const k=Ft(u,kt());try{const z=await Promise.all(k.map(async P=>{try{const L=await e.query(gr,{},Tt(P));return{error:null,metrics:L,shard:P===""?L.shard:P}}catch(L){return{error:_t(L),metrics:null,shard:P===""?"__root__":P}}}));d.current&&p(z)}finally{d.current&&T(!1)}},S=x===null?null:It(x),M=c===null||c.requests===0?"—":`${(c.errors/c.requests*100).toFixed(1)}%`,$=f.length>0?f.at(-1):0,I=c?Dt(c):{p90:0,p95:0},_=xt(()=>{if(!c||!("queryStats"in c))return;const k=c.queryStats;if(!(!k||!Array.isArray(k)))return Et(k)},[c]),y=pr(_!==void 0,o),D=()=>{qt(R())},F=()=>{p(null)},A=()=>{i("overview")},O=()=>{i("query-insights")};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-metrics",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t(yt,{onChange:r,testId:"mt-shard-input",value:u}),t(bt,{message:C,prefix:"mt"}),t(rt,{"data-testid":"mt-aggregate",disabled:b,onClick:D,size:"sm",type:"button",variant:"secondary",children:a(b?"Aggregating…":"All shards")}),x!==null&&t(rt,{"data-testid":"mt-aggregate-clear",onClick:F,size:"sm",type:"button",variant:"ghost",children:a("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:a("Open in Cloudflare")})]}),q!==null&&t("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:q}),_!==void 0&&n("div",{className:"flex gap-2 border-b","data-testid":"mt-tabs",children:[t("button",{className:`pb-2 text-sm font-medium transition-colors ${y==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:A,type:"button",children:a("Overview")}),n("button",{className:`pb-2 text-sm font-medium transition-colors ${y==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:O,type:"button",children:[a("Query insights"),_.length>0&&t("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:_.length})]})]}),y==="query-insights"&&_!==void 0&&t(hr,{shardKey:s}),y==="overview"&&c!==null&&t(lr,{currentDelta:$,errorRate:M,history:f,latencyPercentiles:I,metrics:c}),y==="overview"&&c===null&&null,y==="overview"&&t(er,{onOpenTrace:g,shardKey:s}),y==="overview"&&S!==null&&x!==null&&t(tr,{aggregate:S,shardResults:x})]})};export{jr as MetricsPanel};
1
+ import{useLunora as pt}from"@lunora/react";import{useState as pe,useRef as Ge,useEffect as tt,useMemo as xt}from"react";import{L as bt}from"../packem_shared/live-status-BuJdUZFU.mjs";import{ShardInput as yt}from"../packem_shared/ShardInput-C6mjgAh4.mjs";import{B as rt}from"../packem_shared/button-q0UYSmrn.mjs";import{u as Ue}from"../packem_shared/use-admin-query-tlBof8Yg.mjs";import{u as vt}from"../packem_shared/use-open-trace-DMVhpnyG.mjs";import{u as Nt}from"../packem_shared/use-shard-key-BsP3o5wT.mjs";import{useT as xe}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as Oe}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as St}from"../packem_shared/cf-links-CBJ5SywP.mjs";import{i as wt,m as Xe,f as qt,d as Tt,b as _t,c as Ct}from"../packem_shared/internal-Df43vQI0.mjs";import{r as kt,l as Rt}from"../packem_shared/shard-history-CaO3C4KQ.mjs";import{c as Ae}from"react/compiler-runtime";import{f as $t}from"../packem_shared/log-fields-SBxKyBug.mjs";import{B as et}from"../packem_shared/badge-r_5B4LHP.mjs";import{C as he,a as ge,c as Be,d as Mt,b as je}from"../packem_shared/card--2hKx4L2.mjs";import{b as Je,e as oe,T as dt,c as de,a as mt,d as ut}from"../packem_shared/table-D0SBiDu-.mjs";import{S as ft}from"../packem_shared/sparkline-B_sPPO_8.mjs";import{jsxs as n,jsx as t,Fragment as Ye}from"react/jsx-runtime";import{aggregateMetrics as It,computeLatencyPercentiles as Dt,enrichQueryStats as Ft,shardsToAggregate as At}from"../packem_shared/aggregateMetrics-5zEJC6Ju.mjs";import{S as me}from"../packem_shared/stat-card-D0Fe04cX.mjs";import{ResponsiveContainer as st,AreaChart as Et,CartesianGrid as lt,XAxis as at,YAxis as it,Tooltip as nt,Area as Ot,LineChart as Lt,Line as zt}from"recharts";import{E as Kt}from"../packem_shared/empty-state-D7jEML_T.mjs";import{c as Pt}from"../packem_shared/utils-bhneXptQ.mjs";import{S as Bt,a as jt,c as Qe,b as Qt,d as Ht}from"../packem_shared/select-DPyS18Vy.mjs";const Ut=/["\\\u0000-\u001F\uD800-\uDFFF]/,ot=l=>Ut.test(l)?JSON.stringify(l):`"${l}"`,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(typeof l=="number"){if(Number.isNaN(l))return"nan";if(l===1/0)return"inf";if(l===-1/0)return"-inf";if(Object.is(l,-0))return"-0"}if(typeof l=="string")return ot(l);if(l===null||typeof l!="object")return JSON.stringify(l);if(Array.isArray(l)){let o="[";for(let a=0;a<l.length;a++)a>0&&(o+=","),o+=Ze(l[a]);return o+"]"}const e=Object.getPrototypeOf(l);if(e!==null&&e!==Object.prototype){const o=l.constructor?.name??"value";throw new TypeError(`stableStringify: cannot use a ${o} in a stable JSON cache key — only plain objects, arrays, and JSON primitives are supported (wire-typed values key via stableWireKey)`)}const i=l,s=Object.keys(i).sort();let r="{",u=!0;for(const o of s){const a=i[o];a!==void 0&&(u?u=!1:r+=",",r+=ot(o),r+=":",r+=Ze(a))}return r+"}"},ht=(l,e,i)=>`${l}:${e}:${Ze(i??{})}`,gt=(l,e)=>l==="gauge"?e.last:l==="histogram"?e.sum/Math.max(1,e.count):e.sum,Jt=(l,e)=>gt(l,e),Vt=l=>gt(l.kind,l),We=l=>Number.isInteger(l)?l.toLocaleString():l.toLocaleString(void 0,{maximumFractionDigits:2}),Gt=l=>Array.isArray(l?.series)?l.series:[],Wt="FUNCTION_NOT_FOUND",Xt=l=>{const e=new Map;if(!Array.isArray(l?.series))return e;for(const i of l.series)e.set(ht(i.kind,i.name,i.attributes),i.points);return e},Yt={counter:"secondary",gauge:"default",histogram:"outline"},Zt=l=>{const e=Ae(18),{name:i,onOpenTrace:s,traceId:r}=l,u=xe();if(r===void 0){let d;return e[0]===Symbol.for("react.memo_cache_sentinel")?(d=t("span",{className:"text-muted-foreground",children:"—"}),e[0]=d):d=e[0],d}let o;e[1]!==r?(o=r.slice(0,8),e[1]=r,e[2]=o):o=e[2];const a=o;if(s===void 0){const d=`mt-instrument-trace-${i}`;let p;return e[3]!==a||e[4]!==d||e[5]!==r?(p=t("span",{className:"text-muted-foreground","data-testid":d,title:r,children:a}),e[3]=a,e[4]=d,e[5]=r,e[6]=p):p=e[6],p}const h=`mt-instrument-trace-${i}`;let y;e[7]!==s||e[8]!==r?(y=()=>{s(r)},e[7]=s,e[8]=r,e[9]=y):y=e[9];let w;e[10]!==u||e[11]!==r?(w=u("Open the exemplar trace {trace}",{trace:r}),e[10]=u,e[11]=r,e[12]=w):w=e[12];let g;return e[13]!==a||e[14]!==h||e[15]!==y||e[16]!==w?(g=t("button",{className:"text-primary underline-offset-4 hover:underline","data-testid":h,onClick:y,title:w,type:"button",children:a}),e[13]=a,e[14]=h,e[15]=y,e[16]=w,e[17]=g):g=e[17],g},er=l=>{const e=Ae(105),{onOpenTrace:i,shardKey:s}=l,r=xe();let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u={},e[0]=u):u=e[0];let o;e[1]!==s?(o={live:!0,shardKey:s},e[1]=s,e[2]=o):o=e[2];const{data:a,error:h,errorSource:y}=Ue(Oe.getMetricSeries,u,o);let w;e[3]===Symbol.for("react.memo_cache_sentinel")?(w={},e[3]=w):w=e[3];let g;e[4]!==s?(g={live:!0,shardKey:s},e[4]=s,e[5]=g):g=e[5];const{data:d}=Ue(Oe.getMetricHistory,w,g);let p,v,q,C,c,T,x,b,_,k,f,R,$;if(e[6]!==a||e[7]!==h||e[8]!==y||e[9]!==d||e[10]!==i||e[11]!==r){b=Symbol.for("react.early_return_sentinel");e:{const O=Gt(a),L=wt(y)===Wt;if(h!==null&&!L){let m;e[25]!==r?(m=r("Instruments"),e[25]=r,e[26]=m):m=e[26];let B;e[27]!==m?(B=t("h3",{className:"text-sm font-semibold text-foreground",children:m}),e[27]=m,e[28]=B):B=e[28];let j;e[29]!==h||e[30]!==r?(j=r("Instruments unavailable: {error}",{error:h}),e[29]=h,e[30]=r,e[31]=j):j=e[31];let H;e[32]!==j?(H=t("span",{className:"text-xs text-muted-foreground","data-testid":"mt-instruments-error",role:"status",children:j}),e[32]=j,e[33]=H):H=e[33];let U;e[34]!==B||e[35]!==H?(U=n("section",{className:"flex flex-col gap-2","data-testid":"mt-instruments",children:[B,H]}),e[34]=B,e[35]=H,e[36]=U):U=e[36],b=U;break e}if(O.length===0){b=null;break e}const z=Xt(d);let A;e[37]!==r?(A=m=>r(m==="counter"?"Counter":m==="gauge"?"Gauge":"Histogram"),e[37]=r,e[38]=A):A=e[38];const Q=A;c="flex flex-col gap-2",T="mt-instruments";let P;e[39]!==r?(P=r("Instruments"),e[39]=r,e[40]=P):P=e[40],e[41]!==P?(x=t("h3",{className:"text-sm font-semibold text-foreground",children:P}),e[41]=P,e[42]=x):x=e[42],C=he,$="overflow-hidden py-0",q=ge,R="px-0",v=dt,k="mt-instruments-table";let E;e[43]!==r?(E=r("name"),e[43]=r,e[44]=E):E=e[44];let K;e[45]!==E?(K=t(de,{children:E}),e[45]=E,e[46]=K):K=e[46];let V;e[47]!==r?(V=r("kind"),e[47]=r,e[48]=V):V=e[48];let G;e[49]!==V?(G=t(de,{children:V}),e[49]=V,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 Z;e[57]!==Y?(Z=t(de,{className:"text-right",children:Y}),e[57]=Y,e[58]=Z):Z=e[58];let ee;e[59]!==r?(ee=r("range"),e[59]=r,e[60]=ee):ee=e[60];let te;e[61]!==ee?(te=t(de,{className:"text-right",children:ee}),e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==r?(re=r("trend"),e[63]=r,e[64]=re):re=e[64];let se;e[65]!==re?(se=t(de,{children:re}),e[65]=re,e[66]=se):se=e[66];let le;e[67]!==r?(le=r("trace"),e[67]=r,e[68]=le):le=e[68];let ae;e[69]!==le?(ae=t(de,{children:le}),e[69]=le,e[70]=ae):ae=e[70];let ie;e[71]!==r?(ie=r("dimensions"),e[71]=r,e[72]=ie):ie=e[72];let ne;e[73]!==ie?(ne=t(de,{children:ie}),e[73]=ie,e[74]=ne):ne=e[74],e[75]!==K||e[76]!==G||e[77]!==X||e[78]!==Z||e[79]!==te||e[80]!==se||e[81]!==ae||e[82]!==ne?(f=t(mt,{children:n(Je,{children:[K,G,X,Z,te,se,ae,ne]})}),e[75]=K,e[76]=G,e[77]=X,e[78]=Z,e[79]=te,e[80]=se,e[81]=ae,e[82]=ne,e[83]=f):f=e[83],p=ut,_=O.map(m=>{const B=$t(m.attributes),j=ht(m.kind,m.name,m.attributes),U=(z.get(j)??[]).map(ue=>Jt(m.kind,ue));return n(Je,{"data-testid":`mt-instrument-${m.name}`,children:[t(oe,{className:"font-mono text-xs",title:m.functionPath,children:m.name}),t(oe,{children:t(et,{variant:Yt[m.kind],children:Q(m.kind)})}),t(oe,{className:"text-right font-mono tabular-nums","data-testid":`mt-instrument-value-${m.name}`,children:We(Vt(m))}),t(oe,{className:"text-right tabular-nums text-muted-foreground",children:m.count.toLocaleString()}),t(oe,{className:"text-right font-mono text-xs tabular-nums text-muted-foreground",children:m.min===m.max?"—":`${We(m.min)}–${We(m.max)}`}),t(oe,{children:U.length>=2?t(ft,{ariaLabel:r("{name} trend",{name:m.name}),className:"h-6 w-24 text-foreground",series:U,testId:`mt-instrument-trend-${m.name}`}):t("span",{className:"text-xs text-muted-foreground",children:"—"})}),t(oe,{className:"font-mono text-xs",children:t(Zt,{name:m.name,onOpenTrace:i,traceId:m.exemplarTraceId})}),t(oe,{className:"max-w-64 truncate font-mono text-xs text-muted-foreground",title:B,children:B===""?"—":B})]},j)})}e[6]=a,e[7]=h,e[8]=y,e[9]=d,e[10]=i,e[11]=r,e[12]=p,e[13]=v,e[14]=q,e[15]=C,e[16]=c,e[17]=T,e[18]=x,e[19]=b,e[20]=_,e[21]=k,e[22]=f,e[23]=R,e[24]=$}else p=e[12],v=e[13],q=e[14],C=e[15],c=e[16],T=e[17],x=e[18],b=e[19],_=e[20],k=e[21],f=e[22],R=e[23],$=e[24];if(b!==Symbol.for("react.early_return_sentinel"))return b;let M;e[84]!==p||e[85]!==_?(M=t(p,{children:_}),e[84]=p,e[85]=_,e[86]=M):M=e[86];let I;e[87]!==v||e[88]!==M||e[89]!==k||e[90]!==f?(I=n(v,{"data-testid":k,children:[f,M]}),e[87]=v,e[88]=M,e[89]=k,e[90]=f,e[91]=I):I=e[91];let S;e[92]!==q||e[93]!==I||e[94]!==R?(S=t(q,{className:R,children:I}),e[92]=q,e[93]=I,e[94]=R,e[95]=S):S=e[95];let N;e[96]!==C||e[97]!==S||e[98]!==$?(N=t(C,{className:$,children:S}),e[96]=C,e[97]=S,e[98]=$,e[99]=N):N=e[99];let F;return e[100]!==c||e[101]!==T||e[102]!==x||e[103]!==N?(F=n("section",{className:c,"data-testid":T,children:[x,N]}),e[100]=c,e[101]=T,e[102]=x,e[103]=N,e[104]=F):F=e[104],F},tr=l=>{const e=Ae(74),{aggregate:i,shardResults:s}=l,r=xe();let u;e[0]!==r?(u=r("Shards"),e[0]=r,e[1]=u):u=e[1];let o;e[2]!==i.failed||e[3]!==i.reachable||e[4]!==r?(o=i.failed>0?r("{reachable} reachable, {failed} unreachable",{failed:i.failed,reachable:i.reachable}):r("{reachable} reachable",{reachable:i.reachable}),e[2]=i.failed,e[3]=i.reachable,e[4]=r,e[5]=o):o=e[5];let a;e[6]!==u||e[7]!==o?(a=t(me,{label:u,testId:"mt-agg-shards",value:o}),e[6]=u,e[7]=o,e[8]=a):a=e[8];let h;e[9]!==r?(h=r("Total requests"),e[9]=r,e[10]=h):h=e[10];let y;e[11]!==i.totalRequests||e[12]!==h?(y=t(me,{label:h,testId:"mt-agg-requests",value:i.totalRequests}),e[11]=i.totalRequests,e[12]=h,e[13]=y):y=e[13];let w;e[14]!==r?(w=r("Total errors"),e[14]=r,e[15]=w):w=e[15];let g;e[16]!==i.totalErrors||e[17]!==w?(g=t(me,{label:w,testId:"mt-agg-errors",value:i.totalErrors}),e[16]=i.totalErrors,e[17]=w,e[18]=g):g=e[18];let d;e[19]!==r?(d=r("Total database size"),e[19]=r,e[20]=d):d=e[20];let p;e[21]!==i.totalDatabaseSize?(p=Xe(i.totalDatabaseSize),e[21]=i.totalDatabaseSize,e[22]=p):p=e[22];let v;e[23]!==d||e[24]!==p?(v=t(me,{label:d,testId:"mt-agg-db-size",value:p}),e[23]=d,e[24]=p,e[25]=v):v=e[25];let q;e[26]!==r?(q=r("Combined cache hit rate"),e[26]=r,e[27]=q):q=e[27];let C;e[28]!==i.hitRate||e[29]!==r?(C=i.hitRate===null?r("no cache configured"):`${(i.hitRate*100).toFixed(1)}%`,e[28]=i.hitRate,e[29]=r,e[30]=C):C=e[30];let c;e[31]!==q||e[32]!==C?(c=t(me,{label:q,testId:"mt-agg-cache",value:C}),e[31]=q,e[32]=C,e[33]=c):c=e[33];let T;e[34]!==v||e[35]!==c||e[36]!==a||e[37]!==y||e[38]!==g?(T=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3","data-testid":"mt-aggregate-stats",children:[a,y,g,v,c]}),e[34]=v,e[35]=c,e[36]=a,e[37]=y,e[38]=g,e[39]=T):T=e[39];let x;e[40]!==r?(x=r("shard"),e[40]=r,e[41]=x):x=e[41];let b;e[42]!==x?(b=t(de,{children:x}),e[42]=x,e[43]=b):b=e[43];let _;e[44]!==r?(_=r("requests"),e[44]=r,e[45]=_):_=e[45];let k;e[46]!==_?(k=t(de,{children:_}),e[46]=_,e[47]=k):k=e[47];let f;e[48]!==r?(f=r("errors"),e[48]=r,e[49]=f):f=e[49];let R;e[50]!==f?(R=t(de,{children:f}),e[50]=f,e[51]=R):R=e[51];let $;e[52]!==r?($=r("db size"),e[52]=r,e[53]=$):$=e[53];let M;e[54]!==$?(M=t(de,{children:$}),e[54]=$,e[55]=M):M=e[55];let I;e[56]!==b||e[57]!==k||e[58]!==R||e[59]!==M?(I=t(mt,{children:n(Je,{children:[b,k,R,M]})}),e[56]=b,e[57]=k,e[58]=R,e[59]=M,e[60]=I):I=e[60];let S;if(e[61]!==s||e[62]!==r){let L;e[64]!==r?(L=z=>n(Je,{"data-testid":`mt-agg-row-${z.shard}`,children:[t(oe,{children:z.shard}),z.metrics===null?t(oe,{className:"text-destructive",colSpan:3,children:z.error??r("unreachable")}):n(Ye,{children:[t(oe,{className:"tabular-nums",children:z.metrics.requests}),t(oe,{className:"tabular-nums",children:z.metrics.errors}),t(oe,{className:"tabular-nums",children:Xe(z.metrics.databaseSize)})]})]},z.shard),e[64]=r,e[65]=L):L=e[65],S=s.map(L),e[61]=s,e[62]=r,e[63]=S}else S=e[63];let N;e[66]!==S?(N=t(ut,{children:S}),e[66]=S,e[67]=N):N=e[67];let F;e[68]!==I||e[69]!==N?(F=t(he,{className:"overflow-hidden py-0",children:t(ge,{className:"px-0",children:n(dt,{"data-testid":"mt-agg-table",children:[I,N]})})}),e[68]=I,e[69]=N,e[70]=F):F=e[70];let O;return e[71]!==T||e[72]!==F?(O=n("div",{className:"flex flex-col gap-4","data-testid":"mt-aggregate-view",children:[T,F]}),e[71]=T,e[72]=F,e[73]=O):O=e[73],O},rr=l=>{const e=Math.floor(l/1e3),i=Math.floor(e/3600),s=Math.floor(e%3600/60),r=e%60;return i>0?`${i.toString()}h ${s.toString()}m`:s>0?`${s.toString()}m ${r.toString()}s`:`${r.toString()}s`},sr=(l,e)=>{const i=l+e;return i===0?"—":`${(l/i*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=Ae(75),{currentDelta:i,errorRate:s,history:r,latencyPercentiles:u,metrics:o}=l,a=xe(),{cache:h}=o;let y;e[0]!==r||e[1]!==a?(y=r.length>=2?t(ft,{ariaLabel:a("Requests per interval over time"),className:"h-7 w-24 text-foreground",series:r,testId:"mt-sparkline"}):void 0,e[0]=r,e[1]=a,e[2]=y):y=e[2];let w;e[3]!==i||e[4]!==r.length||e[5]!==a?(w=r.length>=2?n(Ye,{children:[t("span",{className:"font-semibold text-foreground",children:`+${i.toLocaleString()}`})," ",a("last interval")]}):t("span",{"data-testid":"mt-sparkline-empty",children:a("collecting samples…")}),e[3]=i,e[4]=r.length,e[5]=a,e[6]=w):w=e[6];let g;e[7]!==a?(g=a("Requests"),e[7]=a,e[8]=g):g=e[8];let d;e[9]!==o.requests||e[10]!==y||e[11]!==w||e[12]!==g?(d=t(me,{chart:y,footer:w,label:g,testId:"mt-requests",value:o.requests}),e[9]=o.requests,e[10]=y,e[11]=w,e[12]=g,e[13]=d):d=e[13];let p;e[14]!==s||e[15]!==a?(p=a("{rate} error rate",{rate:s}),e[14]=s,e[15]=a,e[16]=p):p=e[16];let v;e[17]!==a?(v=a("Errors"),e[17]=a,e[18]=v):v=e[18];let q;e[19]!==s||e[20]!==o.errors?(q=n(Ye,{children:[o.errors," (",s,")"]}),e[19]=s,e[20]=o.errors,e[21]=q):q=e[21];let C;e[22]!==p||e[23]!==v||e[24]!==q?(C=t(me,{footer:p,label:v,testId:"mt-errors",value:q}),e[22]=p,e[23]=v,e[24]=q,e[25]=C):C=e[25];let c;e[26]!==u.p90?(c=u.p90>0?`P90 ${ct(u.p90)}`:void 0,e[26]=u.p90,e[27]=c):c=e[27];let T;e[28]!==a?(T=a("P95 latency"),e[28]=a,e[29]=T):T=e[29];let x;e[30]!==u.p95?(x=u.p95>0?ct(u.p95):"—",e[30]=u.p95,e[31]=x):x=e[31];let b;e[32]!==T||e[33]!==x||e[34]!==c?(b=t(me,{footer:c,label:T,testId:"mt-p95",value:x}),e[32]=T,e[33]=x,e[34]=c,e[35]=b):b=e[35];let _;e[36]!==h||e[37]!==a?(_=h?`${h.entries.toLocaleString()} ${a("cache entries")}`:void 0,e[36]=h,e[37]=a,e[38]=_):_=e[38];let k;e[39]!==a?(k=a("Database size"),e[39]=a,e[40]=k):k=e[40];let f;e[41]!==o.databaseSize?(f=Xe(o.databaseSize),e[41]=o.databaseSize,e[42]=f):f=e[42];let R;e[43]!==_||e[44]!==k||e[45]!==f?(R=t(me,{footer:_,label:k,testId:"mt-db-size",value:f}),e[43]=_,e[44]=k,e[45]=f,e[46]=R):R=e[46];let $;e[47]!==a?($=a("Shard"),e[47]=a,e[48]=$):$=e[48];let M;e[49]!==o.shard||e[50]!==$?(M=t(me,{label:$,testId:"mt-shard",value:o.shard}),e[49]=o.shard,e[50]=$,e[51]=M):M=e[51];let I;e[52]!==a?(I=a("Uptime"),e[52]=a,e[53]=I):I=e[53];let S;e[54]!==o.uptimeMs?(S=rr(o.uptimeMs),e[54]=o.uptimeMs,e[55]=S):S=e[55];let N;e[56]!==I||e[57]!==S?(N=t(me,{label:I,testId:"mt-uptime",value:S}),e[56]=I,e[57]=S,e[58]=N):N=e[58];let F;e[59]!==a?(F=a("Cache hit rate"),e[59]=a,e[60]=F):F=e[60];let O;e[61]!==h||e[62]!==a?(O=h?a("{rate} ({count} entries)",{count:h.entries,rate:sr(h.hits,h.misses)}):a("no cache configured"),e[61]=h,e[62]=a,e[63]=O):O=e[63];let L;e[64]!==F||e[65]!==O?(L=t(me,{label:F,testId:"mt-cache",value:O}),e[64]=F,e[65]=O,e[66]=L):L=e[66];let z;return e[67]!==b||e[68]!==R||e[69]!==M||e[70]!==N||e[71]!==L||e[72]!==d||e[73]!==C?(z=n("dl",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4","data-testid":"mt-stats",children:[d,C,b,R,M,N,L]}),e[67]=b,e[68]=R,e[69]=M,e[70]=N,e[71]=L,e[72]=d,e[73]=C,e[74]=z):z=e[74],z},Ve=l=>l>=100?"critical":l>=50?"warning":"good",Ee=l=>l<1?`${(l*1e3).toFixed(0)}μs`:l<1e3?`${l.toFixed(1)}ms`:`${(l/1e3).toFixed(2)}s`,He=l=>l>=1e9?`${(l/1e9).toFixed(1)}B`:l>=1e6?`${(l/1e6).toFixed(1)}M`:l>=1e3?`${(l/1e3).toFixed(1)}K`:l.toLocaleString(),ar=l=>{const e=Ae(3),{level:i}=l;if(i==="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(i==="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 s;return e[2]===Symbol.for("react.memo_cache_sentinel")?(s=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]=s):s=e[2],s},ir=(l,e)=>{const i=[...l];return i.sort((s,r)=>{switch(e){case"avgTime":return r.avgDurationMs-s.avgDurationMs;case"execCount":return r.execCount-s.execCount;case"rowsRead":return r.rowsRead-s.rowsRead;default:return r.totalDurationMs-s.totalDurationMs}}),i},nr=l=>{const e=Ae(161),{queryStats:i}=l,s=xe(),[r,u]=pe("totalTime");let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=new Set,e[0]=o):o=e[0];const[a,h]=pe(o);let y;e[1]===Symbol.for("react.memo_cache_sentinel")?(y=$=>{$!==null&&u($)},e[1]=y):y=e[1];const w=y;let g,d,p,v,q,C,c,T,x,b;if(e[2]!==a||e[3]!==i||e[4]!==r||e[5]!==s){p=Symbol.for("react.early_return_sentinel");e:{const $=ir(i,r);let M;e[16]!==i?(M=i.filter(or),e[16]=i,e[17]=M):M=e[17];const I=M.length;let S;e[18]!==i?(S=i.filter(cr),e[18]=i,e[19]=S):S=e[19];const N=S.length;let F;e[20]!==i?(F=i.filter(dr),e[20]=i,e[21]=F):F=e[21];const O=F.length;let L;e[22]===Symbol.for("react.memo_cache_sentinel")?(L=D=>{h(ce=>{const J=new Set(ce);return J.has(D)?J.delete(D):J.add(D),J})},e[22]=L):L=e[22];const z=L;if(i.length===0){let D;e[23]!==s?(D=s("No query insights yet"),e[23]=s,e[24]=D):D=e[24];let ce;e[25]!==D?(ce=t("p",{className:"text-lg font-medium","data-testid":"qi-empty",children:D}),e[25]=D,e[26]=ce):ce=e[26];let J;e[27]!==s?(J=s("Query insights appear once statements are executed against this shard."),e[27]=s,e[28]=J):J=e[28];let fe;e[29]!==J?(fe=t("p",{className:"mt-1 text-sm",children:J}),e[29]=J,e[30]=fe):fe=e[30];let Pe;e[31]!==ce||e[32]!==fe?(Pe=t(he,{children:t(ge,{className:"py-12",children:n("div",{className:"text-center text-muted-foreground",children:[ce,fe]})})}),e[31]=ce,e[32]=fe,e[33]=Pe):Pe=e[33],p=Pe;break e}c="space-y-4",T="qi-root";let A;e[34]!==s?(A=s("Critical queries"),e[34]=s,e[35]=A):A=e[35];let Q;e[36]!==A?(Q=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:A})}),e[36]=A,e[37]=Q):Q=e[37];let P;e[38]!==I?(P=t("div",{className:"text-2xl font-bold text-destructive","data-testid":"qi-critical",children:I}),e[38]=I,e[39]=P):P=e[39];let E;e[40]!==s?(E=s(">100ms avg execution"),e[40]=s,e[41]=E):E=e[41];let K;e[42]!==E?(K=t("p",{className:"text-xs text-muted-foreground",children:E}),e[42]=E,e[43]=K):K=e[43];let V;e[44]!==P||e[45]!==K?(V=n(ge,{children:[P,K]}),e[44]=P,e[45]=K,e[46]=V):V=e[46];let G;e[47]!==Q||e[48]!==V?(G=n(he,{children:[Q,V]}),e[47]=Q,e[48]=V,e[49]=G):G=e[49];let W;e[50]!==s?(W=s("Moderate queries"),e[50]=s,e[51]=W):W=e[51];let X;e[52]!==W?(X=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:W})}),e[52]=W,e[53]=X):X=e[53];let Y;e[54]!==N?(Y=t("div",{className:"text-2xl font-bold text-warning","data-testid":"qi-moderate",children:N}),e[54]=N,e[55]=Y):Y=e[55];let Z;e[56]!==s?(Z=s("50–100ms avg execution"),e[56]=s,e[57]=Z):Z=e[57];let ee;e[58]!==Z?(ee=t("p",{className:"text-xs text-muted-foreground",children:Z}),e[58]=Z,e[59]=ee):ee=e[59];let te;e[60]!==Y||e[61]!==ee?(te=n(ge,{children:[Y,ee]}),e[60]=Y,e[61]=ee,e[62]=te):te=e[62];let re;e[63]!==X||e[64]!==te?(re=n(he,{children:[X,te]}),e[63]=X,e[64]=te,e[65]=re):re=e[65];let se;e[66]!==s?(se=s("Fast queries"),e[66]=s,e[67]=se):se=e[67];let le;e[68]!==se?(le=t(Be,{className:"pb-2",children:t(je,{className:"text-sm font-medium",children:se})}),e[68]=se,e[69]=le):le=e[69];let ae;e[70]!==O?(ae=t("div",{className:"text-2xl font-bold text-success","data-testid":"qi-fast",children:O}),e[70]=O,e[71]=ae):ae=e[71];let ie;e[72]!==s?(ie=s("<50ms avg execution"),e[72]=s,e[73]=ie):ie=e[73];let ne;e[74]!==ie?(ne=t("p",{className:"text-xs text-muted-foreground",children:ie}),e[74]=ie,e[75]=ne):ne=e[75];let m;e[76]!==ae||e[77]!==ne?(m=n(ge,{children:[ae,ne]}),e[76]=ae,e[77]=ne,e[78]=m):m=e[78];let B;e[79]!==le||e[80]!==m?(B=n(he,{children:[le,m]}),e[79]=le,e[80]=m,e[81]=B):B=e[81],e[82]!==G||e[83]!==re||e[84]!==B?(x=n("div",{className:"grid gap-4 md:grid-cols-3",children:[G,re,B]}),e[82]=G,e[83]=re,e[84]=B,e[85]=x):x=e[85];let j;e[86]!==s?(j=s("Query leaderboard"),e[86]=s,e[87]=j):j=e[87];let H;e[88]!==j?(H=t("h3",{className:"text-lg font-semibold",children:j}),e[88]=j,e[89]=H):H=e[89];let U;e[90]!==r||e[91]!==s?(U=s("Slow queries sorted by {sortField}",{sortField:s(r)}),e[90]=r,e[91]=s,e[92]=U):U=e[92];let ue;e[93]!==U?(ue=t("p",{className:"text-sm text-muted-foreground",children:U}),e[93]=U,e[94]=ue):ue=e[94];let be;e[95]!==H||e[96]!==ue?(be=n("div",{children:[H,ue]}),e[95]=H,e[96]=ue,e[97]=be):be=e[97];let ye;e[98]!==s?(ye=s("Sort by"),e[98]=s,e[99]=ye):ye=e[99];let ve;e[100]!==ye?(ve=t("span",{className:"text-sm text-muted-foreground",children:ye}),e[100]=ye,e[101]=ve):ve=e[101];let Ne;e[102]!==s?(Ne=s("Sort queries by"),e[102]=s,e[103]=Ne):Ne=e[103];let Le;e[104]===Symbol.for("react.memo_cache_sentinel")?(Le=t(Bt,{}),e[104]=Le):Le=e[104];let Se;e[105]!==Ne?(Se=t(jt,{"aria-label":Ne,className:"w-[140px]","data-testid":"qi-sort",children:Le}),e[105]=Ne,e[106]=Se):Se=e[106];let we;e[107]!==s?(we=s("Total time"),e[107]=s,e[108]=we):we=e[108];let qe;e[109]!==we?(qe=t(Qe,{value:"totalTime",children:we}),e[109]=we,e[110]=qe):qe=e[110];let Te;e[111]!==s?(Te=s("Avg time"),e[111]=s,e[112]=Te):Te=e[112];let _e;e[113]!==Te?(_e=t(Qe,{value:"avgTime",children:Te}),e[113]=Te,e[114]=_e):_e=e[114];let Ce;e[115]!==s?(Ce=s("Execution count"),e[115]=s,e[116]=Ce):Ce=e[116];let ke;e[117]!==Ce?(ke=t(Qe,{value:"execCount",children:Ce}),e[117]=Ce,e[118]=ke):ke=e[118];let Re;e[119]!==s?(Re=s("Rows read"),e[119]=s,e[120]=Re):Re=e[120];let $e;e[121]!==Re?($e=t(Qe,{value:"rowsRead",children:Re}),e[121]=Re,e[122]=$e):$e=e[122];let Me;e[123]!==qe||e[124]!==_e||e[125]!==ke||e[126]!==$e?(Me=n(Qt,{children:[qe,_e,ke,$e]}),e[123]=qe,e[124]=_e,e[125]=ke,e[126]=$e,e[127]=Me):Me=e[127];let Ie;e[128]!==r||e[129]!==Se||e[130]!==Me?(Ie=n(Ht,{onValueChange:w,value:r,children:[Se,Me]}),e[128]=r,e[129]=Se,e[130]=Me,e[131]=Ie):Ie=e[131];let De;e[132]!==ve||e[133]!==Ie?(De=n("div",{className:"flex items-center gap-2",children:[ve,Ie]}),e[132]=ve,e[133]=Ie,e[134]=De):De=e[134],e[135]!==be||e[136]!==De?(b=n("div",{className:"flex items-center justify-between",children:[be,De]}),e[135]=be,e[136]=De,e[137]=b):b=e[137],d=he;let Fe;e[138]!==s?(Fe=s("Statements"),e[138]=s,e[139]=Fe):Fe=e[139];let ze;e[140]!==Fe?(ze=t(je,{children:Fe}),e[140]=Fe,e[141]=ze):ze=e[141],C=n(Be,{children:[ze,t(Mt,{children:s("{count} tracked statements",{count:$.length})})]}),g=ge,v="space-y-2";let Ke;e[142]!==a||e[143]!==s?(Ke=D=>{const ce=D.normalizedSql,J=a.has(ce),fe=Ve(D.avgDurationMs);return n("div",{className:"overflow-hidden rounded-lg border","data-testid":"qi-row",children:[n("button",{"aria-expanded":J,className:"flex w-full items-center justify-between p-3 text-left transition-colors hover:bg-muted/50",onClick:()=>{z(ce)},type:"button",children:[n("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[t(ar,{level:fe}),t("span",{className:"max-w-[300px] truncate font-mono text-sm lg:max-w-[500px]",children:D.normalizedSql})]}),n("div",{className:"flex shrink-0 items-center gap-4",children:[n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ee(D.totalDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("total")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ee(D.avgDurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("avg")})]}),D.p95DurationMs!==void 0&&n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:Ee(D.p95DurationMs)}),t("div",{className:"text-xs text-muted-foreground",children:s("p95")})]}),n("div",{className:"text-right",children:[t("div",{className:"text-sm font-medium",children:He(D.execCount)}),t("div",{className:"text-xs text-muted-foreground",children:s("calls")})]})]})]}),J&&n("div",{className:"space-y-3 border-t bg-muted/30 p-4",children:[n("div",{children:[t("p",{className:"mb-2 text-sm font-medium",children:s("Full statement")}),t("pre",{className:"overflow-x-auto rounded-md bg-muted p-3 font-mono text-sm whitespace-pre-wrap break-all",children:D.normalizedSql})]}),n("div",{className:"grid grid-cols-2 gap-4 text-sm md:grid-cols-4",children:[D.p50DurationMs!==void 0&&n("div",{children:[t("span",{className:"text-muted-foreground",children:s("p50")}),t("span",{className:"block font-medium tabular-nums",children:Ee(D.p50DurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Exec count")}),t("span",{className:"block font-medium tabular-nums",children:He(D.execCount)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Total time")}),t("span",{className:"block font-medium tabular-nums",children:Ee(D.totalDurationMs)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows read")}),t("span",{className:"block font-medium tabular-nums",children:He(D.rowsRead)})]}),n("div",{children:[t("span",{className:"text-muted-foreground",children:s("Rows written")}),t("span",{className:"block font-medium tabular-nums",children:He(D.rowsWritten)})]})]})]})]},ce)},e[142]=a,e[143]=s,e[144]=Ke):Ke=e[144],q=$.map(Ke)}e[2]=a,e[3]=i,e[4]=r,e[5]=s,e[6]=g,e[7]=d,e[8]=p,e[9]=v,e[10]=q,e[11]=C,e[12]=c,e[13]=T,e[14]=x,e[15]=b}else g=e[6],d=e[7],p=e[8],v=e[9],q=e[10],C=e[11],c=e[12],T=e[13],x=e[14],b=e[15];if(p!==Symbol.for("react.early_return_sentinel"))return p;let _;e[145]!==v||e[146]!==q?(_=t("div",{className:v,children:q}),e[145]=v,e[146]=q,e[147]=_):_=e[147];let k;e[148]!==g||e[149]!==_?(k=t(g,{children:_}),e[148]=g,e[149]=_,e[150]=k):k=e[150];let f;e[151]!==d||e[152]!==k||e[153]!==C?(f=n(d,{children:[C,k]}),e[151]=d,e[152]=k,e[153]=C,e[154]=f):f=e[154];let R;return e[155]!==f||e[156]!==c||e[157]!==T||e[158]!==x||e[159]!==b?(R=n("div",{className:c,"data-testid":T,children:[x,b,f]}),e[155]=f,e[156]=c,e[157]=T,e[158]=x,e[159]=b,e[160]=R):R=e[160],R};function or(l){return Ve(l.avgDurationMs)==="critical"}function cr(l){return Ve(l.avgDurationMs)==="warning"}function dr(l){return Ve(l.avgDurationMs)==="good"}const mr=["1m","5m","15m","1h"],ur=l=>new Date(l).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),fr=l=>l.map(e=>({avg:Math.round(e.avgDurationMs*100)/100,execs:e.execCount,label:ur(e.bucketMs)})),hr=({shardKey:l=""})=>{const e=xe(),[i,s]=pe("15m"),u=Ue(Oe.getQueryInsights,{range:i},{live:!0,shardKey:l}).data,o=fr(u?.buckets??[]);return n("div",{className:"flex flex-col gap-4","data-testid":"qi-range",children:[n("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(a=>t("button",{"aria-pressed":a===i,className:Pt("rounded px-2 py-1 text-xs outline-none transition-colors hover:bg-accent focus-visible:bg-accent",a===i&&"bg-accent font-medium text-foreground"),"data-testid":`qi-range-${a}`,onClick:()=>{s(a)},type:"button",children:a},a))}),u?.capped===!0&&t(et,{"data-testid":"qi-capped",variant:"secondary",children:e("showing a capped set")})]}),o.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.")}):n("div",{className:"grid gap-4 lg:grid-cols-2",children:[n("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(st,{height:140,width:"100%",children:n(Et,{data:o,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(at,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{allowDecimals:!1,fontSize:10,tickLine:!1,width:32}),t(nt,{}),t(Ot,{dataKey:"execs",fill:"var(--color-primary)",fillOpacity:.15,stroke:"var(--color-primary)",type:"monotone"})]})})]}),n("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(st,{height:140,width:"100%",children:n(Lt,{data:o,children:[t(lt,{strokeDasharray:"3 3",vertical:!1}),t(at,{dataKey:"label",fontSize:10,tickLine:!1}),t(it,{fontSize:10,tickLine:!1,width:32}),t(nt,{}),t(zt,{dataKey:"avg",dot:!1,stroke:"var(--color-destructive)",type:"monotone"})]})})]})]}),t(nr,{queryStats:u?.entries??[]})]})},gr=Ct(Oe.getMetrics),pr=(l,e)=>l?e:"overview",jr=({initialShardKey:l})=>{const e=pt(),i=xe(),{queryShardKey:s,setShardKey:r,shardKey:u}=Nt(l),[o,a]=pe("overview"),[h,y]=pe([]),w=Ge(null),g=Ge(null),d=Ge(!0);tt(()=>(d.current=!0,()=>{d.current=!1}),[]);const p=vt(s),{data:v,error:q,liveError:C}=Ue(Oe.getMetrics,{},{live:!0,shardKey:s}),c=v??null;tt(()=>{if(v===void 0)return;kt(s);const A=v,Q=w.current,P=g.current!==null&&g.current!==A.shard;if(g.current=A.shard,w.current=A.requests,P){y([]);return}Q!==null&&A.requests>=Q&&y(E=>[...E,A.requests-Q].slice(-30))},[v,s]);const[T,x]=pe(null),[b,_]=pe(!1),k=async()=>{_(!0);const A=u,Q=At(A,Rt());try{const P=await Promise.all(Q.map(async E=>{try{const K=await e.query(gr,{},Tt(E));return{error:null,metrics:K,shard:E===""?K.shard:E}}catch(K){return{error:_t(K),metrics:null,shard:E===""?"__root__":E}}}));d.current&&x({results:P,shard:A})}finally{d.current&&_(!1)}},f=T?.shard===u?T.results:null,R=f===null?null:It(f),$=c===null||c.requests===0?"—":`${(c.errors/c.requests*100).toFixed(1)}%`,M=h.length>0?h.at(-1):0,I=c?Dt(c):{p90:0,p95:0},S=xt(()=>{if(!c||!("queryStats"in c))return;const A=c.queryStats;if(!(!A||!Array.isArray(A)))return Ft(A)},[c]),N=pr(S!==void 0,o),F=()=>{qt(k())},O=()=>{x(null)},L=()=>{a("overview")},z=()=>{a("query-insights")};return n("div",{className:"flex flex-col gap-4","data-testid":"lunora-metrics",children:[n("div",{className:"flex flex-wrap items-center gap-2",children:[t(yt,{onChange:r,testId:"mt-shard-input",value:u}),t(bt,{message:C,prefix:"mt"}),t(rt,{"data-testid":"mt-aggregate",disabled:b,onClick:F,size:"sm",type:"button",variant:"secondary",children:i(b?"Aggregating…":"All shards")}),f!==null&&t(rt,{"data-testid":"mt-aggregate-clear",onClick:O,size:"sm",type:"button",variant:"ghost",children:i("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:i("Open in Cloudflare")})]}),q!==null&&t("p",{className:"text-sm text-destructive","data-testid":"mt-error",role:"alert",children:q}),S!==void 0&&n("div",{className:"flex gap-2 border-b","data-testid":"mt-tabs",children:[t("button",{className:`pb-2 text-sm font-medium transition-colors ${N==="overview"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-overview",onClick:L,type:"button",children:i("Overview")}),n("button",{className:`pb-2 text-sm font-medium transition-colors ${N==="query-insights"?"border-b-2 border-primary text-foreground":"text-muted-foreground hover:text-foreground"}`,"data-testid":"mt-tab-query-insights",onClick:z,type:"button",children:[i("Query insights"),S.length>0&&t("span",{className:"ml-1.5 rounded-full bg-primary/10 px-1.5 py-0.5 text-xs text-primary",children:S.length})]})]}),N==="query-insights"&&S!==void 0&&t(hr,{shardKey:s}),N==="overview"&&c!==null&&t(lr,{currentDelta:M,errorRate:$,history:h,latencyPercentiles:I,metrics:c}),N==="overview"&&c===null&&null,N==="overview"&&t(er,{onOpenTrace:p,shardKey:s}),N==="overview"&&R!==null&&f!==null&&t(tr,{aggregate:R,shardResults:f})]})};export{jr as MetricsPanel};
@@ -1 +1 @@
1
- import{c as W}from"react/compiler-runtime";import{useLunora as X}from"@lunora/react";import{useState as d,useCallback as Y,useEffect as ee}from"react";import{ConfirmButton as O}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{B as te}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as re}from"../packem_shared/button-q0UYSmrn.mjs";import{I as E}from"../packem_shared/input-CXhxesPC.mjs";import{L as T}from"../packem_shared/label-DKFzyHq6.mjs";import{useAutoRefresh as oe}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{useT as U}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as M}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{d as v,i as S,b as _,f as N,c as F}from"../packem_shared/internal-Df43vQI0.mjs";import{jsxs as a,jsx as o}from"react/jsx-runtime";const B=F(M.getPitrBookmark),se=F(M.pitrRestore),ae=/^\d+$/u,q=b=>{const t=b.trim(),e=ae.test(t)?Number(t):Date.parse(t),s=new Date(e);return Number.isNaN(s.getTime())?void 0:{epochMs:e,iso:s.toISOString()}},ne=b=>{const t=W(9),{text:e}=b,s=U();if(e.trim()==="")return null;let c,i,l;if(t[0]!==s||t[1]!==e){const x=q(e);c="font-mono text-xs text-muted-foreground",i="pitr-time-resolved",l=x===void 0?s("Not a time — use epoch-ms or ISO 8601."):s("Resolves to {instant} (a date-time without an offset is read in this browser's time zone; a bare date is UTC)",{instant:x.iso}),t[0]=s,t[1]=e,t[2]=c,t[3]=i,t[4]=l}else c=t[2],i=t[3],l=t[4];let u;return t[5]!==c||t[6]!==i||t[7]!==l?(u=o("p",{className:c,"data-testid":i,children:l}),t[5]=c,t[6]=i,t[7]=l,t[8]=u):u=t[8],u},ve=({initialShardKey:b})=>{const t=X(),e=U(),s=b??"",[c,i]=d(null),[l,u]=d(""),[x,I]=d(null),[k,z]=d(""),[y,D]=d(!1),[m,K]=d(null),[A,p]=d(null),[R,f]=d(!1),[g,P]=d(!1),w=Y(async r=>{f(!0),p(null);let n;try{n={current:(await t.query(B,{},v(s))).current,error:null,unavailable:!1}}catch(C){n={current:null,error:_(C),unavailable:S(C)==="PITR_UNAVAILABLE"}}r?.aborted!==!0&&(n.error===null?i(n.current):p(n.error),P(n.unavailable),f(!1))},[t,s]);ee(()=>{const r=new AbortController;return N(w(r.signal)),()=>{r.abort()}},[w]),oe(()=>{N((async()=>{try{const r=await t.query(B,{},v(s));i(r.current)}catch{}})())},!g);const j=r=>{u(r.target.value)},H=r=>{z(r.target.value)},V=r=>{D(r.target.checked)},h=q(l),$=()=>{h!==void 0&&N((async()=>{f(!0),p(null);try{const r=await t.query(B,{time:h.epochMs},v(s));I(r.forTime??null),i(r.current)}catch(r){I(null),p(_(r))}f(!1)})())},L=r=>{N((async()=>{f(!0),p(null);try{const n=await t.mutation(se,r,v(s));K(n),await w()}catch(n){p(_(n)),S(n)==="PITR_UNAVAILABLE"&&P(!0)}f(!1)})())},G=k.trim()!==""||h!==void 0,Z=e("Restore {shard} to {target}?",{shard:s===""?e("root"):s,target:k.trim()===""?h?.iso??"":e("the given bookmark")}),J=()=>{const r=y?{restart:!0}:{};k.trim()===""?r.time=h?.epochMs:r.bookmark=k.trim(),L(r)},Q=()=>{m!==null&&L(y?{bookmark:m.undoBookmark,restart:!0}:{bookmark:m.undoBookmark})};return a("div",{className:"flex flex-col gap-4","data-testid":"lunora-pitr",children:[o("div",{className:"flex flex-wrap items-center gap-3",children:a("span",{className:"text-xs text-muted-foreground",children:[e("Shard"),": ",o("span",{className:"font-mono",children:s===""?e("root"):s})]})}),o("p",{className:"text-sm text-muted-foreground","data-testid":"pitr-note",children:e("In-place recovery to any moment in the last 30 days. For older or portable recovery, use the snapshot backup tier.")}),A!==null&&o("p",{className:"text-sm text-destructive","data-testid":"pitr-error",role:"alert",children:A}),a("section",{className:"rounded-xl border border-border bg-card p-3 shadow-xs",children:[o("h3",{className:"mb-2 text-sm font-semibold",children:e("Current bookmark")}),o("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-current",children:c??o("span",{className:"text-muted-foreground",children:"—"})})]}),a("section",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 shadow-xs",children:[o("h3",{className:"text-sm font-semibold",children:e("Restore")}),a("div",{className:"flex flex-col gap-1",children:[o(T,{htmlFor:"pitr-time",children:e("Time (ISO or epoch-ms, last 30 days)")}),a("div",{className:"flex items-center gap-2",children:[o(E,{"data-testid":"pitr-time",id:"pitr-time",onChange:j,placeholder:"2026-06-01T00:00:00.000Z",value:l}),o(re,{"data-testid":"pitr-preview",disabled:R||g||h===void 0,onClick:$,size:"sm",type:"button",variant:"outline",children:e("Preview")})]}),o(ne,{text:l}),x!==null&&a("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-preview-bookmark",children:[e("Bookmark for that time"),": ",x]})]}),a("div",{className:"flex flex-col gap-1",children:[o(T,{htmlFor:"pitr-bookmark",children:e("Or an explicit bookmark (wins over time)")}),o(E,{"data-testid":"pitr-bookmark",id:"pitr-bookmark",onChange:H,placeholder:e("bookmark string"),value:k})]}),a(T,{className:"flex items-center gap-2 text-xs font-normal text-muted-foreground",htmlFor:"pitr-restart",children:[o("input",{checked:y,className:"size-4 accent-primary","data-testid":"pitr-restart",id:"pitr-restart",onChange:V,type:"checkbox"}),e("Restart the shard now so recovery applies immediately")]}),o("div",{children:o(O,{confirmLabel:Z,disabled:R||g||!G,onConfirm:J,testId:"pitr-restore",children:e("Restore")})})]}),m!==null&&a("section",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card p-3 shadow-xs","data-testid":"pitr-result",children:[a("div",{className:"flex items-center gap-2",children:[o("h3",{className:"text-sm font-semibold",children:e("Restore armed")}),o(te,{variant:m.restarted?"destructive":"secondary",children:m.restarted?e("restarted now"):e("on next restart")})]}),a("p",{className:"font-mono text-xs break-all text-muted-foreground",children:[e("Restored to"),": ",m.restoredTo]}),a("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-undo-bookmark",children:[e("Undo bookmark"),": ",m.undoBookmark]}),o("div",{children:o(O,{confirmLabel:e("Confirm undo"),disabled:R||g,onConfirm:Q,testId:"pitr-undo",children:e("Undo restore")})})]})]})};export{ve as PitrPanel};
1
+ import{c as Ke}from"react/compiler-runtime";import{useLunora as We}from"@lunora/react";import{useState as k,useEffect as Xe}from"react";import{ConfirmButton as Ee}from"../packem_shared/ConfirmButton-DU4p72Er.mjs";import{B as Ye}from"../packem_shared/badge-r_5B4LHP.mjs";import{B as et}from"../packem_shared/button-q0UYSmrn.mjs";import{I as Ue}from"../packem_shared/input-CXhxesPC.mjs";import{L as Pe}from"../packem_shared/label-DKFzyHq6.mjs";import{useAutoRefresh as tt}from"../packem_shared/DEFAULT_AUTO_REFRESH_MS-DuULO4XM.mjs";import{u as rt}from"../packem_shared/use-mirrored-ref-CVDf2z1M.mjs";import{useT as qe}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{ADMIN_FUNCTIONS as ze}from"../packem_shared/ADMIN_FUNCTIONS-B8yyk5BX.mjs";import{c as De,d as _e,i as Fe,b as Ae,f as we}from"../packem_shared/internal-Df43vQI0.mjs";import{jsxs as i,jsx as s}from"react/jsx-runtime";const Le=De(ze.getPitrBookmark),st=De(ze.pitrRestore),ot=/^\d+$/u,$e=ne=>{const e=ne.trim(),u=ot.test(e)?Number(e):Date.parse(e),l=new Date(u);return Number.isNaN(l.getTime())?void 0:{epochMs:u,iso:l.toISOString()}},lt=ne=>{const e=Ke(9),{text:u}=ne,l=qe();if(u.trim()==="")return null;let t,r,f;if(e[0]!==l||e[1]!==u){const y=$e(u);t="font-mono text-xs text-muted-foreground",r="pitr-time-resolved",f=y===void 0?l("Not a time — use epoch-ms or ISO 8601."):l("Resolves to {instant} (a date-time without an offset is read in this browser's time zone; a bare date is UTC)",{instant:y.iso}),e[0]=l,e[1]=u,e[2]=t,e[3]=r,e[4]=f}else t=e[2],r=e[3],f=e[4];let v;return e[5]!==t||e[6]!==r||e[7]!==f?(v=s("p",{className:t,"data-testid":r,children:f}),e[5]=t,e[6]=r,e[7]=f,e[8]=v):v=e[8],v},Nt=ne=>{const e=Ke(140),{initialShardKey:u}=ne,l=We(),t=qe(),r=u??"",f=rt(r),[v,y]=k(null),[p,je]=k(""),[de,Me]=k(null),[d,He]=k(""),[h,Ve]=k(!1),[n,Ge]=k(null),[me,R]=k(null),[ce,_]=k(!1),[w,Oe]=k(!1);let fe;e[0]!==l||e[1]!==r?(fe=async o=>{_(!0),R(null);let c;try{c={current:(await l.query(Le,{},_e(r))).current,error:null,unavailable:!1}}catch(a){const N=a;c={current:null,error:Ae(N),unavailable:Fe(N)==="PITR_UNAVAILABLE"}}o?.aborted!==!0&&(c.error===null?y(c.current):R(c.error),Oe(c.unavailable),_(!1))},e[0]=l,e[1]=r,e[2]=fe):fe=e[2];const b=fe;let ue,pe;e[3]!==b?(ue=()=>{const o=new AbortController;return we(b(o.signal)),()=>{o.abort()}},pe=[b],e[3]=b,e[4]=ue,e[5]=pe):(ue=e[4],pe=e[5]),Xe(ue,pe);let he;e[6]!==l||e[7]!==r?(he=()=>{we((async()=>{try{const o=await l.query(Le,{},_e(r));y(o.current)}catch{}})())},e[6]=l,e[7]=r,e[8]=he):he=e[8],tt(he,!w);let be;e[9]===Symbol.for("react.memo_cache_sentinel")?(be=o=>{je(o.target.value)},e[9]=be):be=e[9];const Ze=be;let xe;e[10]===Symbol.for("react.memo_cache_sentinel")?(xe=o=>{He(o.target.value)},e[10]=xe):xe=e[10];const Je=xe;let ke;e[11]===Symbol.for("react.memo_cache_sentinel")?(ke=o=>{Ve(o.target.checked)},e[11]=ke):ke=e[11];const Qe=ke;let ve,C,m,x,g,ge;if(e[12]!==d||e[13]!==l||e[14]!==de||e[15]!==b||e[16]!==r||e[17]!==f||e[18]!==t||e[19]!==p){m=$e(p),C=()=>{if(m===void 0)return;const c=r;we((async()=>{_(!0),R(null);let a;try{a={result:await l.query(Le,{time:m.epochMs},_e(c))}}catch(N){a={error:Ae(N)}}f.current===c&&("result"in a?(Me(a.result.forTime===void 0?null:{bookmark:a.result.forTime,shard:c}),y(a.result.current)):(Me(null),R(a.error)),_(!1))})())},g=de?.shard===r?de.bookmark:null;let o;e[26]!==l||e[27]!==b||e[28]!==r?(o=c=>{we((async()=>{_(!0),R(null);try{const a=await l.mutation(st,c,_e(r));Ge(a),await b()}catch(a){const N=a;R(Ae(N)),Fe(N)==="PITR_UNAVAILABLE"&&Oe(!0)}_(!1)})())},e[26]=l,e[27]=b,e[28]=r,e[29]=o):o=e[29],x=o,ve=d.trim()!==""||m!==void 0,ge=t("Restore {shard} to {target}?",{shard:r===""?t("root"):r,target:d.trim()===""?m?.iso??"":t("the given bookmark")}),e[12]=d,e[13]=l,e[14]=de,e[15]=b,e[16]=r,e[17]=f,e[18]=t,e[19]=p,e[20]=ve,e[21]=C,e[22]=m,e[23]=x,e[24]=g,e[25]=ge}else ve=e[20],C=e[21],m=e[22],x=e[23],g=e[24],ge=e[25];const Ce=ge;let Ne;e[30]!==d||e[31]!==m?.epochMs||e[32]!==h||e[33]!==x?(Ne=()=>{const o=h?{restart:!0}:{};d.trim()===""?o.time=m?.epochMs:o.bookmark=d.trim(),x(o)},e[30]=d,e[31]=m?.epochMs,e[32]=h,e[33]=x,e[34]=Ne):Ne=e[34];const Te=Ne;let ye;e[35]!==h||e[36]!==n||e[37]!==x?(ye=()=>{n!==null&&x(h?{bookmark:n.undoBookmark,restart:!0}:{bookmark:n.undoBookmark})},e[35]=h,e[36]=n,e[37]=x,e[38]=ye):ye=e[38];const Be=ye;let T;e[39]!==t?(T=t("Shard"),e[39]=t,e[40]=T):T=e[40];let B;e[41]!==r||e[42]!==t?(B=r===""?t("root"):r,e[41]=r,e[42]=t,e[43]=B):B=e[43];let I;e[44]!==B?(I=s("span",{className:"font-mono",children:B}),e[44]=B,e[45]=I):I=e[45];let S;e[46]!==T||e[47]!==I?(S=s("div",{className:"flex flex-wrap items-center gap-3",children:i("span",{className:"text-xs text-muted-foreground",children:[T,": ",I]})}),e[46]=T,e[47]=I,e[48]=S):S=e[48];let P;e[49]!==t?(P=t("In-place recovery to any moment in the last 30 days. For older or portable recovery, use the snapshot backup tier."),e[49]=t,e[50]=P):P=e[50];let A;e[51]!==P?(A=s("p",{className:"text-sm text-muted-foreground","data-testid":"pitr-note",children:P}),e[51]=P,e[52]=A):A=e[52];let L;e[53]!==me?(L=me!==null&&s("p",{className:"text-sm text-destructive","data-testid":"pitr-error",role:"alert",children:me}),e[53]=me,e[54]=L):L=e[54];let M;e[55]!==t?(M=t("Current bookmark"),e[55]=t,e[56]=M):M=e[56];let O;e[57]!==M?(O=s("h3",{className:"mb-2 text-sm font-semibold",children:M}),e[57]=M,e[58]=O):O=e[58];let E;e[59]!==v?(E=v??s("span",{className:"text-muted-foreground",children:"—"}),e[59]=v,e[60]=E):E=e[60];let U;e[61]!==E?(U=s("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-current",children:E}),e[61]=E,e[62]=U):U=e[62];let F;e[63]!==O||e[64]!==U?(F=i("section",{className:"rounded-xl border border-border bg-card p-3 shadow-xs",children:[O,U]}),e[63]=O,e[64]=U,e[65]=F):F=e[65];let K;e[66]!==t?(K=t("Restore"),e[66]=t,e[67]=K):K=e[67];let q;e[68]!==K?(q=s("h3",{className:"text-sm font-semibold",children:K}),e[68]=K,e[69]=q):q=e[69];let z;e[70]!==t?(z=t("Time (ISO or epoch-ms, last 30 days)"),e[70]=t,e[71]=z):z=e[71];let D;e[72]!==z?(D=s(Pe,{htmlFor:"pitr-time",children:z}),e[72]=z,e[73]=D):D=e[73];let $;e[74]!==p?($=s(Ue,{"data-testid":"pitr-time",id:"pitr-time",onChange:Ze,placeholder:"2026-06-01T00:00:00.000Z",value:p}),e[74]=p,e[75]=$):$=e[75];const Ie=ce||w||m===void 0;let j;e[76]!==t?(j=t("Preview"),e[76]=t,e[77]=j):j=e[77];let H;e[78]!==C||e[79]!==Ie||e[80]!==j?(H=s(et,{"data-testid":"pitr-preview",disabled:Ie,onClick:C,size:"sm",type:"button",variant:"outline",children:j}),e[78]=C,e[79]=Ie,e[80]=j,e[81]=H):H=e[81];let V;e[82]!==$||e[83]!==H?(V=i("div",{className:"flex items-center gap-2",children:[$,H]}),e[82]=$,e[83]=H,e[84]=V):V=e[84];let G;e[85]!==p?(G=s(lt,{text:p}),e[85]=p,e[86]=G):G=e[86];let Z;e[87]!==g||e[88]!==t?(Z=g!==null&&i("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-preview-bookmark",children:[t("Bookmark for that time"),": ",g]}),e[87]=g,e[88]=t,e[89]=Z):Z=e[89];let J;e[90]!==D||e[91]!==V||e[92]!==G||e[93]!==Z?(J=i("div",{className:"flex flex-col gap-1",children:[D,V,G,Z]}),e[90]=D,e[91]=V,e[92]=G,e[93]=Z,e[94]=J):J=e[94];let Q;e[95]!==t?(Q=t("Or an explicit bookmark (wins over time)"),e[95]=t,e[96]=Q):Q=e[96];let W;e[97]!==Q?(W=s(Pe,{htmlFor:"pitr-bookmark",children:Q}),e[97]=Q,e[98]=W):W=e[98];let X;e[99]!==t?(X=t("bookmark string"),e[99]=t,e[100]=X):X=e[100];let Y;e[101]!==d||e[102]!==X?(Y=s(Ue,{"data-testid":"pitr-bookmark",id:"pitr-bookmark",onChange:Je,placeholder:X,value:d}),e[101]=d,e[102]=X,e[103]=Y):Y=e[103];let ee;e[104]!==W||e[105]!==Y?(ee=i("div",{className:"flex flex-col gap-1",children:[W,Y]}),e[104]=W,e[105]=Y,e[106]=ee):ee=e[106];let te;e[107]!==h?(te=s("input",{checked:h,className:"size-4 accent-primary","data-testid":"pitr-restart",id:"pitr-restart",onChange:Qe,type:"checkbox"}),e[107]=h,e[108]=te):te=e[108];let re;e[109]!==t?(re=t("Restart the shard now so recovery applies immediately"),e[109]=t,e[110]=re):re=e[110];let se;e[111]!==te||e[112]!==re?(se=i(Pe,{className:"flex items-center gap-2 text-xs font-normal text-muted-foreground",htmlFor:"pitr-restart",children:[te,re]}),e[111]=te,e[112]=re,e[113]=se):se=e[113];const Se=ce||w||!ve;let oe;e[114]!==t?(oe=t("Restore"),e[114]=t,e[115]=oe):oe=e[115];let le;e[116]!==Ce||e[117]!==Te||e[118]!==Se||e[119]!==oe?(le=s("div",{children:s(Ee,{confirmLabel:Ce,disabled:Se,onConfirm:Te,testId:"pitr-restore",children:oe})}),e[116]=Ce,e[117]=Te,e[118]=Se,e[119]=oe,e[120]=le):le=e[120];let ae;e[121]!==q||e[122]!==J||e[123]!==ee||e[124]!==se||e[125]!==le?(ae=i("section",{className:"flex flex-col gap-3 rounded-xl border border-border bg-card p-3 shadow-xs",children:[q,J,ee,se,le]}),e[121]=q,e[122]=J,e[123]=ee,e[124]=se,e[125]=le,e[126]=ae):ae=e[126];let ie;e[127]!==ce||e[128]!==Be||e[129]!==n||e[130]!==t||e[131]!==w?(ie=n!==null&&i("section",{className:"flex flex-col gap-2 rounded-xl border border-border bg-card p-3 shadow-xs","data-testid":"pitr-result",children:[i("div",{className:"flex items-center gap-2",children:[s("h3",{className:"text-sm font-semibold",children:t("Restore armed")}),s(Ye,{variant:n.restarted?"destructive":"secondary",children:n.restarted?t("restarted now"):t("on next restart")})]}),i("p",{className:"font-mono text-xs break-all text-muted-foreground",children:[t("Restored to"),": ",n.restoredTo]}),i("p",{className:"font-mono text-xs break-all text-muted-foreground","data-testid":"pitr-undo-bookmark",children:[t("Undo bookmark"),": ",n.undoBookmark]}),s("div",{children:s(Ee,{confirmLabel:t("Confirm undo"),disabled:ce||w,onConfirm:Be,testId:"pitr-undo",children:t("Undo restore")})})]}),e[127]=ce,e[128]=Be,e[129]=n,e[130]=t,e[131]=w,e[132]=ie):ie=e[132];let Re;return e[133]!==S||e[134]!==A||e[135]!==L||e[136]!==F||e[137]!==ae||e[138]!==ie?(Re=i("div",{className:"flex flex-col gap-4","data-testid":"lunora-pitr",children:[S,A,L,F,ae,ie]}),e[133]=S,e[134]=A,e[135]=L,e[136]=F,e[137]=ae,e[138]=ie,e[139]=Re):Re=e[139],Re};export{Nt as PitrPanel};
@@ -1 +1 @@
1
- import{c as k}from"react/compiler-runtime";import{useLunora as F}from"@lunora/react";import{useNavigate as L,useRouter as M,useSearch as P}from"@tanstack/react-router";import{useState as Q,useEffect as A}from"react";import{T as w}from"../packem_shared/storage-tier-C2mKwYRj.mjs";import{u as q}from"../packem_shared/table-list-sidebar-CYRSPLIv.mjs";import{useT as J}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{s as K,d as D}from"../packem_shared/data-view-params-DhYmAkcj.mjs";import{f as m}from"../packem_shared/internal-Df43vQI0.mjs";import{l as O,s as I}from"../packem_shared/browser-storage-BH1MxLZs.mjs";import{DataBrowser as X}from"../packem_shared/DataBrowser-B5Sl4vMa.mjs";import{GlobalDataBrowser as Y}from"../packem_shared/GlobalDataBrowser-BzhSVDvF.mjs";import{jsx as v,jsxs as E}from"react/jsx-runtime";const N="lunora-studio-saved-queries",$=50,z=r=>r!==null&&typeof r=="object"&&typeof r.name=="string"&&typeof r.view=="object"&&r.view!==null,y=()=>O(N).filter(z),B=r=>{I(N,r)},H=(r,e)=>{const l=r.trim();if(l==="")return y();const n=[{name:l,view:e},...y().filter(o=>o.name!==l)].slice(0,$);return B(n),n},U=r=>{const e=y().filter(l=>l.name!==r);return B(e),e},W=r=>{const e=k(15),{onChange:l,tier:n}=r,o=J();let p;e[0]!==l?(p=S=>{l(S.target.value)},e[0]=l,e[1]=p):p=e[1];const u=p;let s;e[2]!==o?(s=o("Storage tier"),e[2]=o,e[3]=s):s=e[3];let d;e[4]!==s?(d=v("span",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:s}),e[4]=s,e[5]=d):d=e[5];const g=w[n];let c,i;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=v("option",{value:"shard",children:w.shard.label}),i=v("option",{value:"global",children:w.global.label}),e[6]=c,e[7]=i):(c=e[6],i=e[7]);let h;e[8]!==u||e[9]!==g.title||e[10]!==n?(h=E("select",{className:"h-8 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus-visible:border-ring","data-testid":"table-editor-schema",id:"table-editor-schema",onChange:u,title:g.title,value:n,children:[c,i]}),e[8]=u,e[9]=g.title,e[10]=n,e[11]=h):h=e[11];let f;return e[12]!==d||e[13]!==h?(f=E("label",{className:"flex w-full flex-col gap-1",htmlFor:"table-editor-schema",children:[d,h]}),e[12]=d,e[13]=h,e[14]=f):f=e[14],f},Z=()=>{try{m(globalThis.navigator.clipboard.writeText(globalThis.location.href))}catch{}},ge=({canGenerateRows:r=!1,editable:e=!1,initialShardKey:l})=>{const n=F(),o=L(),p=M(),u=P({strict:!1}),s=K(u),d=q(u),g=()=>p.state.location.pathname.split("/").findLast(Boolean)==="data",c=s.tier??"shard",i=s.table,[h,f]=Q(()=>y()),[S,R]=Q(()=>new Set);A(()=>{m((async()=>{try{const a=await n.listGlobalTables();R(new Set(a.map(t=>t.name)))}catch{}})())},[n]),A(()=>{c==="shard"&&i!==void 0&&S.has(i)&&m(o({replace:!0,search:a=>({...a,schema:"global"}),to:"/data"}))},[S,o,i,c]);const C=a=>{m(o({search:t=>({...t,schema:a==="global"?"global":void 0,table:void 0}),to:"/data"}))},T=(a,t)=>{g()&&m(o({search:b=>({schema:b.schema,search:t?.search,shard:b.shard,table:a}),to:"/data"}))},G=a=>{m(o({search:t=>({...t,schema:"global",table:a}),to:"/data"}))},_=a=>{const t=D(a),{current:b}=d;(b.filters??void 0)===t.filters&&(b.order??void 0)===t.order&&(b.search??void 0)===t.search&&(b.shard??void 0)===t.shard||!g()||m(o({replace:!0,search:V=>({...V,filters:t.filters,order:t.order,search:t.search,shard:t.shard}),to:"/data"}))},j={onApplyQuery:a=>{const t=D(a.view);m(o({search:()=>({filters:t.filters,order:t.order,schema:t.schema,search:t.search,shard:t.shard,table:t.table}),to:"/data"}))},onCopyLink:Z,onDeleteQuery:a=>{f(U(a))},onSaveQuery:(a,t)=>{f(H(a,t))},saved:h},x=v(W,{onChange:C,tier:c});return c==="global"?v(Y,{initialTable:i,onSelectTable:T,schemaSwitch:x}):v(X,{canGenerateRows:r,editable:e,globalTableNames:S,initialFilters:s.filters,initialOrderBy:s.orderBy,initialPins:u.pins,initialSearch:s.search,initialShardKey:s.shard??l,onNavigateToGlobal:G,onSelectTable:T,onViewChange:_,queryBar:j,schemaSwitch:x,tableParam:i})};export{ge as TableEditor};
1
+ import{c as k}from"react/compiler-runtime";import{useLunora as F}from"@lunora/react";import{useNavigate as L,useRouter as M,useSearch as P}from"@tanstack/react-router";import{useState as Q,useEffect as A}from"react";import{T as w}from"../packem_shared/storage-tier-C2mKwYRj.mjs";import{u as q}from"../packem_shared/use-mirrored-ref-CVDf2z1M.mjs";import{useT as J}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{s as K,d as D}from"../packem_shared/data-view-params-DhYmAkcj.mjs";import{f as m}from"../packem_shared/internal-Df43vQI0.mjs";import{l as O,s as I}from"../packem_shared/browser-storage-BH1MxLZs.mjs";import{DataBrowser as X}from"../packem_shared/DataBrowser-YscAF4OI.mjs";import{GlobalDataBrowser as Y}from"../packem_shared/GlobalDataBrowser-DhObcZDY.mjs";import{jsx as v,jsxs as E}from"react/jsx-runtime";const N="lunora-studio-saved-queries",$=50,z=r=>r!==null&&typeof r=="object"&&typeof r.name=="string"&&typeof r.view=="object"&&r.view!==null,y=()=>O(N).filter(z),B=r=>{I(N,r)},H=(r,e)=>{const l=r.trim();if(l==="")return y();const n=[{name:l,view:e},...y().filter(o=>o.name!==l)].slice(0,$);return B(n),n},U=r=>{const e=y().filter(l=>l.name!==r);return B(e),e},W=r=>{const e=k(15),{onChange:l,tier:n}=r,o=J();let p;e[0]!==l?(p=S=>{l(S.target.value)},e[0]=l,e[1]=p):p=e[1];const u=p;let s;e[2]!==o?(s=o("Storage tier"),e[2]=o,e[3]=s):s=e[3];let d;e[4]!==s?(d=v("span",{className:"font-mono text-[11px] tracking-wide uppercase text-muted-foreground",children:s}),e[4]=s,e[5]=d):d=e[5];const g=w[n];let c,i;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=v("option",{value:"shard",children:w.shard.label}),i=v("option",{value:"global",children:w.global.label}),e[6]=c,e[7]=i):(c=e[6],i=e[7]);let h;e[8]!==u||e[9]!==g.title||e[10]!==n?(h=E("select",{className:"h-8 w-full rounded-md border border-border bg-background px-2 text-sm outline-none focus-visible:border-ring","data-testid":"table-editor-schema",id:"table-editor-schema",onChange:u,title:g.title,value:n,children:[c,i]}),e[8]=u,e[9]=g.title,e[10]=n,e[11]=h):h=e[11];let f;return e[12]!==d||e[13]!==h?(f=E("label",{className:"flex w-full flex-col gap-1",htmlFor:"table-editor-schema",children:[d,h]}),e[12]=d,e[13]=h,e[14]=f):f=e[14],f},Z=()=>{try{m(globalThis.navigator.clipboard.writeText(globalThis.location.href))}catch{}},ge=({canGenerateRows:r=!1,editable:e=!1,initialShardKey:l})=>{const n=F(),o=L(),p=M(),u=P({strict:!1}),s=K(u),d=q(u),g=()=>p.state.location.pathname.split("/").findLast(Boolean)==="data",c=s.tier??"shard",i=s.table,[h,f]=Q(()=>y()),[S,R]=Q(()=>new Set);A(()=>{m((async()=>{try{const a=await n.listGlobalTables();R(new Set(a.map(t=>t.name)))}catch{}})())},[n]),A(()=>{c==="shard"&&i!==void 0&&S.has(i)&&m(o({replace:!0,search:a=>({...a,schema:"global"}),to:"/data"}))},[S,o,i,c]);const C=a=>{m(o({search:t=>({...t,schema:a==="global"?"global":void 0,table:void 0}),to:"/data"}))},T=(a,t)=>{g()&&m(o({search:b=>({schema:b.schema,search:t?.search,shard:b.shard,table:a}),to:"/data"}))},G=a=>{m(o({search:t=>({...t,schema:"global",table:a}),to:"/data"}))},_=a=>{const t=D(a),{current:b}=d;(b.filters??void 0)===t.filters&&(b.order??void 0)===t.order&&(b.search??void 0)===t.search&&(b.shard??void 0)===t.shard||!g()||m(o({replace:!0,search:V=>({...V,filters:t.filters,order:t.order,search:t.search,shard:t.shard}),to:"/data"}))},j={onApplyQuery:a=>{const t=D(a.view);m(o({search:()=>({filters:t.filters,order:t.order,schema:t.schema,search:t.search,shard:t.shard,table:t.table}),to:"/data"}))},onCopyLink:Z,onDeleteQuery:a=>{f(U(a))},onSaveQuery:(a,t)=>{f(H(a,t))},saved:h},x=v(W,{onChange:C,tier:c});return c==="global"?v(Y,{initialTable:i,onSelectTable:T,schemaSwitch:x}):v(X,{canGenerateRows:r,editable:e,globalTableNames:S,initialFilters:s.filters,initialOrderBy:s.orderBy,initialPins:u.pins,initialSearch:s.search,initialShardKey:s.shard??l,onNavigateToGlobal:G,onSelectTable:T,onViewChange:_,queryBar:j,schemaSwitch:x,tableParam:i})};export{ge as TableEditor};
@@ -1,4 +1,4 @@
1
- import{c as te}from"react/compiler-runtime";import{useState as Q}from"react";import{B as se}from"../packem_shared/button-q0UYSmrn.mjs";import{C as le,a as ie}from"../packem_shared/card--2hKx4L2.mjs";import{I as ce}from"../packem_shared/input-CXhxesPC.mjs";import{useT as oe}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{a as fe}from"../packem_shared/cf-links-CBJ5SywP.mjs";import{g as me,f as pe,b as ue}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as l,jsxs as h}from"react/jsx-runtime";const he=e=>{const t=te(23),{destination:s}=e,u=oe();let g;t[0]!==s.snippet?(g=()=>{me(s.snippet)},t[0]=s.snippet,t[1]=g):g=t[1];const f=g;let i;t[2]!==s.title?(i=l("h4",{className:"text-sm font-semibold",children:s.title}),t[2]=s.title,t[3]=i):i=t[3];let o;t[4]!==s.description?(o=l("p",{className:"text-sm text-muted-foreground",children:s.description}),t[4]=s.description,t[5]=o):o=t[5];let d;t[6]!==i||t[7]!==o?(d=h("div",{children:[i,o]}),t[6]=i,t[7]=o,t[8]=d):d=t[8];const F=`drain-copy-${s.id}`;let r;t[9]!==u?(r=u("Copy"),t[9]=u,t[10]=r):r=t[10];let n;t[11]!==f||t[12]!==F||t[13]!==r?(n=l(se,{"data-testid":F,onClick:f,size:"sm",variant:"outline",children:r}),t[11]=f,t[12]=F,t[13]=r,t[14]=n):n=t[14];let a;t[15]!==d||t[16]!==n?(a=h("div",{className:"flex items-start justify-between gap-3",children:[d,n]}),t[15]=d,t[16]=n,t[17]=a):a=t[17];let c;t[18]!==s.snippet?(c=l("pre",{className:"mt-2 overflow-x-auto rounded bg-muted p-2 font-mono text-xs",children:s.snippet}),t[18]=s.snippet,t[19]=c):c=t[19];let x;return t[20]!==a||t[21]!==c?(x=l(le,{className:"py-0","data-testid":"drain-card",children:h(ie,{className:"p-3",children:[a,c]})}),t[20]=a,t[21]=c,t[22]=x):x=t[22],x},Te=()=>{const e=te(88),t=oe();let s;e[0]!==t?(s=t("Stream every request log to R2, a SIEM, or a third-party log service."),e[0]=t,e[1]=s):s=e[1];let u;e[2]===Symbol.for("react.memo_cache_sentinel")?(u=["{",' "logpush": true',"}"],e[2]=u):u=e[2];const g=u.join(`
2
- `);let f;e[3]!==t?(f=t("Logpush"),e[3]=t,e[4]=f):f=e[4];let i;e[5]!==s||e[6]!==f?(i={description:s,id:"logpush",snippet:g,title:f},e[5]=s,e[6]=f,e[7]=i):i=e[7];let o;e[8]!==t?(o=t("Send logs programmatically to a Worker for custom capture and forwarding."),e[8]=t,e[9]=o):o=e[9];let d;e[10]===Symbol.for("react.memo_cache_sentinel")?(d=["{",' "tail_consumers": [{ "service": "my-log-forwarder" }]',"}"],e[10]=d):d=e[10];const F=d.join(`
3
- `);let r;e[11]!==t?(r=t("Tail Workers"),e[11]=t,e[12]=r):r=e[12];let n;e[13]!==o||e[14]!==r?(n={description:o,id:"tail-worker",snippet:F,title:r},e[13]=o,e[14]=r,e[15]=n):n=e[15];let a;e[16]!==t?(a=t("Retain and query recent request logs directly in Cloudflare's dashboard."),e[16]=t,e[17]=a):a=e[17];let c;e[18]===Symbol.for("react.memo_cache_sentinel")?(c=["{",' "observability": { "enabled": true }',"}"],e[18]=c):c=e[18];const x=c.join(`
4
- `);let b;e[19]!==t?(b=t("Workers Logs"),e[19]=t,e[20]=b):b=e[20];let y;e[21]!==a||e[22]!==b?(y={description:a,id:"workers-logs",snippet:x,title:b},e[21]=a,e[22]=b,e[23]=y):y=e[23];let P;e[24]!==y||e[25]!==i||e[26]!==n?(P=[i,n,y],e[24]=y,e[25]=i,e[26]=n,e[27]=P):P=e[27];const Y=P,[m,re]=Q(""),[k,X]=Q(!1),[p,$]=Q(null);let z;if(e[28]!==t||e[29]!==m){const H=async()=>{const Z=m.trim();if(Z==="")return;const ee="fetch"in globalThis?globalThis.fetch:void 0;if(ee===void 0){$({kind:"error",message:t("fetch is unavailable in this environment.")});return}const ae={durationMs:12,function:"messages:list",outcome:"ok",shard:"root",source:"lunora",tablesRead:["messages"],tablesWritten:[],ts:new Date().toISOString(),type:"request"};X(!0),$(null);const de=performance.now();try{const K=await ee(Z,{body:JSON.stringify(ae),headers:{"Content-Type":"application/json"},method:"POST"});$({kind:"success",latencyMs:Math.round(performance.now()-de),status:K.status})}catch(K){$({kind:"error",message:ue(K)})}X(!1)};z=()=>{pe(H())},e[28]=t,e[29]=m,e[30]=z}else z=e[30];const G=z;let J;e[31]===Symbol.for("react.memo_cache_sentinel")?(J=H=>{re(H.target.value)},e[31]=J):J=e[31];const ne=J;let v;e[32]!==t?(v=t("Open in Cloudflare"),e[32]=t,e[33]=v):v=e[33];let w;e[34]!==v?(w=l("div",{className:"flex flex-wrap items-center gap-3",children:l("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"drain-cf-link",href:fe,rel:"noreferrer",target:"_blank",children:v})}),e[34]=v,e[35]=w):w=e[35];let N;e[36]!==t?(N=t("Lunora does not ship logs itself — forwarding is handled by Cloudflare. Configure a destination below, then test your collector."),e[36]=t,e[37]=N):N=e[37];let C;e[38]!==N?(C=l("p",{className:"text-sm text-muted-foreground","data-testid":"drain-readonly-note",children:N}),e[38]=N,e[39]=C):C=e[39];let S;e[40]!==t?(S=t("Cloudflare destinations"),e[40]=t,e[41]=S):S=e[41];let _;e[42]!==S?(_=l("h3",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:S}),e[42]=S,e[43]=_):_=e[43];let T;e[44]!==Y?(T=Y.map(ge),e[44]=Y,e[45]=T):T=e[45];let L;e[46]!==_||e[47]!==T?(L=h("section",{className:"flex flex-col gap-3","data-testid":"drain-destinations",children:[_,T]}),e[46]=_,e[47]=T,e[48]=L):L=e[48];let R;e[49]!==t?(R=t("Webhook test"),e[49]=t,e[50]=R):R=e[50];let j;e[51]!==R?(j=l("h3",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:R}),e[51]=R,e[52]=j):j=e[52];let O;e[53]!==t?(O=t("POST a sample Lunora request-log envelope to your collector to confirm it is reachable."),e[53]=t,e[54]=O):O=e[54];let W;e[55]!==O?(W=l("p",{className:"mb-2 text-sm text-muted-foreground",children:O}),e[55]=O,e[56]=W):W=e[56];let I;e[57]!==t?(I=t("https://example.com/logs"),e[57]=t,e[58]=I):I=e[58];let M;e[59]!==I||e[60]!==m?(M=l(ce,{className:"min-w-[20rem] flex-1","data-testid":"drain-webhook-url",onChange:ne,placeholder:I,type:"url",value:m}),e[59]=I,e[60]=m,e[61]=M):M=e[61];let q;e[62]!==k||e[63]!==m?(q=k||m.trim()==="",e[62]=k,e[63]=m,e[64]=q):q=e[64];let D;e[65]!==k||e[66]!==t?(D=t(k?"Sending…":"Send test event"),e[65]=k,e[66]=t,e[67]=D):D=e[67];let U;e[68]!==G||e[69]!==q||e[70]!==D?(U=l(se,{"data-testid":"drain-webhook-test",disabled:q,onClick:G,children:D}),e[68]=G,e[69]=q,e[70]=D,e[71]=U):U=e[71];let A;e[72]!==M||e[73]!==U?(A=h("div",{className:"flex flex-wrap items-center gap-2",children:[M,U]}),e[72]=M,e[73]=U,e[74]=A):A=e[74];let B;e[75]!==p||e[76]!==t?(B=p!==null&&l("p",{className:p.kind==="success"?"mt-2 text-sm text-muted-foreground":"mt-2 text-sm text-destructive","data-testid":"drain-webhook-result",role:p.kind==="error"?"alert":void 0,children:p.kind==="success"?t("Delivered — status {status} in {latency}ms",{latency:p.latencyMs,status:p.status}):t("Failed: {message}",{message:p.message})}),e[75]=p,e[76]=t,e[77]=B):B=e[77];let E;e[78]!==j||e[79]!==W||e[80]!==A||e[81]!==B?(E=l(le,{className:"py-0",children:l(ie,{className:"p-3",children:h("section",{"data-testid":"drain-webhook",children:[j,W,A,B]})})}),e[78]=j,e[79]=W,e[80]=A,e[81]=B,e[82]=E):E=e[82];let V;return e[83]!==w||e[84]!==C||e[85]!==L||e[86]!==E?(V=h("div",{className:"flex flex-col gap-4","data-testid":"log-drains",children:[w,C,L,E]}),e[83]=w,e[84]=C,e[85]=L,e[86]=E,e[87]=V):V=e[87],V};function ge(e){return l(he,{destination:e},e.id)}export{Te as default};
1
+ import{c as ie}from"react/compiler-runtime";import{useState as te}from"react";import{B as oe}from"../packem_shared/button-q0UYSmrn.mjs";import{C as re,a as ne}from"../packem_shared/card--2hKx4L2.mjs";import{I as pe}from"../packem_shared/input-CXhxesPC.mjs";import{useT as ae}from"../packem_shared/DEFAULT_LOCALE-A1Yg5ORA.mjs";import{a as ue}from"../packem_shared/cf-links-CBJ5SywP.mjs";import{g as he,b as ge,f as xe}from"../packem_shared/internal-Df43vQI0.mjs";import{jsx as l,jsxs as g}from"react/jsx-runtime";const be=e=>{const t=ie(23),{destination:s}=e,u=ae();let x;t[0]!==s.snippet?(x=()=>{he(s.snippet)},t[0]=s.snippet,t[1]=x):x=t[1];const m=x;let i;t[2]!==s.title?(i=l("h4",{className:"text-sm font-semibold",children:s.title}),t[2]=s.title,t[3]=i):i=t[3];let o;t[4]!==s.description?(o=l("p",{className:"text-sm text-muted-foreground",children:s.description}),t[4]=s.description,t[5]=o):o=t[5];let c;t[6]!==i||t[7]!==o?(c=g("div",{children:[i,o]}),t[6]=i,t[7]=o,t[8]=c):c=t[8];const P=`drain-copy-${s.id}`;let r;t[9]!==u?(r=u("Copy"),t[9]=u,t[10]=r):r=t[10];let n;t[11]!==m||t[12]!==P||t[13]!==r?(n=l(oe,{"data-testid":P,onClick:m,size:"sm",variant:"outline",children:r}),t[11]=m,t[12]=P,t[13]=r,t[14]=n):n=t[14];let a;t[15]!==c||t[16]!==n?(a=g("div",{className:"flex items-start justify-between gap-3",children:[c,n]}),t[15]=c,t[16]=n,t[17]=a):a=t[17];let f;t[18]!==s.snippet?(f=l("pre",{className:"mt-2 overflow-x-auto rounded bg-muted p-2 font-mono text-xs",children:s.snippet}),t[18]=s.snippet,t[19]=f):f=t[19];let b;return t[20]!==a||t[21]!==f?(b=l(re,{className:"py-0","data-testid":"drain-card",children:g(ne,{className:"p-3",children:[a,f]})}),t[20]=a,t[21]=f,t[22]=b):b=t[22],b},je=()=>{const e=ie(93),t=ae();let s;e[0]!==t?(s=t("Stream every request log to R2, a SIEM, or a third-party log service."),e[0]=t,e[1]=s):s=e[1];let u;e[2]===Symbol.for("react.memo_cache_sentinel")?(u=["{",' "logpush": true',"}"],e[2]=u):u=e[2];const x=u.join(`
2
+ `);let m;e[3]!==t?(m=t("Logpush"),e[3]=t,e[4]=m):m=e[4];let i;e[5]!==s||e[6]!==m?(i={description:s,id:"logpush",snippet:x,title:m},e[5]=s,e[6]=m,e[7]=i):i=e[7];let o;e[8]!==t?(o=t("Send logs programmatically to a Worker for custom capture and forwarding."),e[8]=t,e[9]=o):o=e[9];let c;e[10]===Symbol.for("react.memo_cache_sentinel")?(c=["{",' "tail_consumers": [{ "service": "my-log-forwarder" }]',"}"],e[10]=c):c=e[10];const P=c.join(`
3
+ `);let r;e[11]!==t?(r=t("Tail Workers"),e[11]=t,e[12]=r):r=e[12];let n;e[13]!==o||e[14]!==r?(n={description:o,id:"tail-worker",snippet:P,title:r},e[13]=o,e[14]=r,e[15]=n):n=e[15];let a;e[16]!==t?(a=t("Retain and query recent request logs directly in Cloudflare's dashboard."),e[16]=t,e[17]=a):a=e[17];let f;e[18]===Symbol.for("react.memo_cache_sentinel")?(f=["{",' "observability": { "enabled": true }',"}"],e[18]=f):f=e[18];const b=f.join(`
4
+ `);let y;e[19]!==t?(y=t("Workers Logs"),e[19]=t,e[20]=y):y=e[20];let k;e[21]!==a||e[22]!==y?(k={description:a,id:"workers-logs",snippet:b,title:y},e[21]=a,e[22]=y,e[23]=k):k=e[23];let $;e[24]!==k||e[25]!==i||e[26]!==n?($=[i,n,k],e[24]=k,e[25]=i,e[26]=n,e[27]=$):$=e[27];const Q=$,[d,de]=te(""),[v,se]=te(!1),[z,J]=te(null);let V;e[28]!==t||e[29]!==d?(V=async()=>{const h=d.trim();if(h==="")return;const le="fetch"in globalThis?globalThis.fetch:void 0;if(le===void 0){J({kind:"error",message:t("fetch is unavailable in this environment."),url:h});return}const fe={durationMs:12,function:"messages:list",outcome:"ok",shard:"root",source:"lunora",tablesRead:["messages"],tablesWritten:[],ts:new Date().toISOString(),type:"request"};se(!0),J(null);const me=performance.now();try{const ee=await le(h,{body:JSON.stringify(fe),headers:{"Content-Type":"application/json"},method:"POST"});J({kind:"success",latencyMs:Math.round(performance.now()-me),status:ee.status,url:h})}catch(ee){J({kind:"error",message:ge(ee),url:h})}se(!1)},e[28]=t,e[29]=d,e[30]=V):V=e[30];const X=V;let Y;e[31]!==z||e[32]!==d?(Y=z?.url===d.trim()?z:null,e[31]=z,e[32]=d,e[33]=Y):Y=e[33];const p=Y;let G;e[34]!==X?(G=()=>{xe(X())},e[34]=X,e[35]=G):G=e[35];const Z=G;let H;e[36]===Symbol.for("react.memo_cache_sentinel")?(H=h=>{de(h.target.value)},e[36]=H):H=e[36];const ce=H;let w;e[37]!==t?(w=t("Open in Cloudflare"),e[37]=t,e[38]=w):w=e[38];let N;e[39]!==w?(N=l("div",{className:"flex flex-wrap items-center gap-3",children:l("a",{className:"text-sm text-primary underline-offset-4 hover:underline","data-testid":"drain-cf-link",href:ue,rel:"noreferrer",target:"_blank",children:w})}),e[39]=w,e[40]=N):N=e[40];let C;e[41]!==t?(C=t("Lunora does not ship logs itself — forwarding is handled by Cloudflare. Configure a destination below, then test your collector."),e[41]=t,e[42]=C):C=e[42];let S;e[43]!==C?(S=l("p",{className:"text-sm text-muted-foreground","data-testid":"drain-readonly-note",children:C}),e[43]=C,e[44]=S):S=e[44];let _;e[45]!==t?(_=t("Cloudflare destinations"),e[45]=t,e[46]=_):_=e[46];let T;e[47]!==_?(T=l("h3",{className:"font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:_}),e[47]=_,e[48]=T):T=e[48];let L;e[49]!==Q?(L=Q.map(ye),e[49]=Q,e[50]=L):L=e[50];let R;e[51]!==T||e[52]!==L?(R=g("section",{className:"flex flex-col gap-3","data-testid":"drain-destinations",children:[T,L]}),e[51]=T,e[52]=L,e[53]=R):R=e[53];let j;e[54]!==t?(j=t("Webhook test"),e[54]=t,e[55]=j):j=e[55];let O;e[56]!==j?(O=l("h3",{className:"mb-1 font-mono text-[11px] tracking-wide text-muted-foreground uppercase",children:j}),e[56]=j,e[57]=O):O=e[57];let W;e[58]!==t?(W=t("POST a sample Lunora request-log envelope to your collector to confirm it is reachable."),e[58]=t,e[59]=W):W=e[59];let I;e[60]!==W?(I=l("p",{className:"mb-2 text-sm text-muted-foreground",children:W}),e[60]=W,e[61]=I):I=e[61];let M;e[62]!==t?(M=t("https://example.com/logs"),e[62]=t,e[63]=M):M=e[63];let q;e[64]!==M||e[65]!==d?(q=l(pe,{className:"min-w-[20rem] flex-1","data-testid":"drain-webhook-url",onChange:ce,placeholder:M,type:"url",value:d}),e[64]=M,e[65]=d,e[66]=q):q=e[66];let D;e[67]!==v||e[68]!==d?(D=v||d.trim()==="",e[67]=v,e[68]=d,e[69]=D):D=e[69];let U;e[70]!==v||e[71]!==t?(U=t(v?"Sending…":"Send test event"),e[70]=v,e[71]=t,e[72]=U):U=e[72];let A;e[73]!==Z||e[74]!==D||e[75]!==U?(A=l(oe,{"data-testid":"drain-webhook-test",disabled:D,onClick:Z,children:U}),e[73]=Z,e[74]=D,e[75]=U,e[76]=A):A=e[76];let B;e[77]!==q||e[78]!==A?(B=g("div",{className:"flex flex-wrap items-center gap-2",children:[q,A]}),e[77]=q,e[78]=A,e[79]=B):B=e[79];let E;e[80]!==p||e[81]!==t?(E=p!==null&&l("p",{className:p.kind==="success"?"mt-2 text-sm text-muted-foreground":"mt-2 text-sm text-destructive","data-testid":"drain-webhook-result",role:p.kind==="error"?"alert":void 0,children:p.kind==="success"?t("Delivered — status {status} in {latency}ms",{latency:p.latencyMs,status:p.status}):t("Failed: {message}",{message:p.message})}),e[80]=p,e[81]=t,e[82]=E):E=e[82];let F;e[83]!==O||e[84]!==I||e[85]!==B||e[86]!==E?(F=l(re,{className:"py-0",children:l(ne,{className:"p-3",children:g("section",{"data-testid":"drain-webhook",children:[O,I,B,E]})})}),e[83]=O,e[84]=I,e[85]=B,e[86]=E,e[87]=F):F=e[87];let K;return e[88]!==N||e[89]!==S||e[90]!==R||e[91]!==F?(K=g("div",{className:"flex flex-col gap-4","data-testid":"log-drains",children:[N,S,R,F]}),e[88]=N,e[89]=S,e[90]=R,e[91]=F,e[92]=K):K=e[92],K};function ye(e){return l(be,{destination:e},e.id)}export{je as default};