PageSourceSearch

https://drophighlight.com/assets/SuperadminResilience-Gw_Kec5x.js

js drophighlight.com collected 2026-09-30 06:38:39 UTC 7,295 bytes, 1 lines download raw bytes

1import{r as t,j as e,B as z,R as B,C as i,h as d,i as o,l as x,o as N,A as W,s as O,J as G}from"./index-P0N1Je5T.js";import{I as J}from"./input-1tKBwIjz.js";import{S as f,a as g,b as p,c as b,d as r}from"./select-Supfcq-S.js";import{S as U}from"./shield-check-BprGWiUg.js";import{S as H}from"./shield-alert-D0ok-8gj.js";import{S as Y}from"./smartphone-JVYc6m6J.js";import{A as $}from"./activity-Bq-KAipD.js";const K=[{value:"all",label:"All categories"},{value:"realtime_blocked",label:"Realtime blocked"},{value:"dom_mismatch",label:"DOM mismatch (Translate / extensions)"},{value:"chunk_load",label:"Chunk load"},{value:"resize_observer",label:"ResizeObserver"},{value:"recoverable_other",label:"Other recoverable"},{value:"fatal",label:"Fatal"}],Q=[{value:"all",label:"Any device"},{value:"WhatsApp",label:"WhatsApp"},{value:"Instagram",label:"Instagram"},{value:"iPhone",label:"iOS"},{value:"Android",label:"Android"}];function re(){var C,R,A,L;const[a,I]=t.useState(null),[y,T]=t.useState([]),[D,_]=t.useState(!0),[u,F]=t.useState(1),[h,E]=t.useState("all"),[m,V]=t.useState("all"),[j,q]=t.useState("all"),[v,M]=t.useState(""),w=async()=>{_(!0);try{const s=new Date(Date.now()-u*24*60*60*1e3).toISOString(),[n,c]=await Promise.all([O.rpc("get_resilience_metrics",{p_days:u}),(async()=>{let l=O.from("error_logs").select("id, created_at, error_type, error_message, url, user_agent, severity, recovery_successful, component_name").gte("created_at",s).order("created_at",{ascending:!1}).limit(200);return h!=="all"&&(l=l.eq("error_type",h)),m!=="all"&&(l=l.ilike("user_agent",`%${m}%`)),j==="recovered"&&(l=l.eq("recovery_successful",!0)),j==="fatal"&&(l=l.or("recovery_successful.is.null,recovery_successful.eq.false")),l})()]);if(n.error)throw n.error;if(c.error)throw c.error;I(n.data),T(c.data??[])}catch(s){console.error(s),G.error((s==null?void 0:s.message)??"Failed to load resilience data")}finally{_(!1)}};t.useEffect(()=>{w()},[u,h,m,j]);const S=t.useMemo(()=>{if(!v.trim())return y;const s=v.toLowerCase();return y.filter(n=>{var c,l,k;return((c=n.error_message)==null?void 0:c.toLowerCase().includes(s))||((l=n.url)==null?void 0:l.toLowerCase().includes(s))||((k=n.component_name)==null?void 0:k.toLowerCase().includes(s))})},[y,v]),P=a&&a.total>0?Math.round(a.recovered/a.total*100):0;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Mobile Resilience"}),e.jsx("p",{className:"text-muted-foreground",children:"Recovered crashes (Realtime / WebView / extensions) and fatal errors across all tenants."})]}),e.jsxs(z,{onClick:w,variant:"outline",children:[e.jsx(B,{className:"w-4 h-4 mr-2"})," Refresh"]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[e.jsxs(i,{children:[e.jsx(d,{className:"pb-2",children:e.jsx(o,{className:"text-sm",children:"Total Events"})}),e.jsx(x,{children:e.jsx("div",{className:"text-3xl font-semibold",children:(a==null?void 0:a.total)??0})})]}),e.jsxs(i,{children:[e.jsxs(d,{className:"pb-2 flex flex-row items-center justify-between",children:[e.jsx(o,{className:"text-sm",children:"Recovered"}),e.jsx(U,{className:"w-4 h-4 text-emerald-600"})]}),e.jsxs(x,{children:[e.jsx("div",{className:"text-3xl font-semibold",children:(a==null?void 0:a.recovered)??0}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[P,"% recovery rate"]})]})]}),e.jsxs(i,{children:[e.jsxs(d,{className:"pb-2 flex flex-row items-center justify-between",children:[e.jsx(o,{className:"text-sm",children:"Fatal"}),e.jsx(H,{className:"w-4 h-4 text-destructive"})]}),e.jsx(x,{children:e.jsx("div",{className:"text-3xl font-semibold",children:(a==null?void 0:a.fatal)??0})})]}),e.jsxs(i,{children:[e.jsxs(d,{className:"pb-2 flex flex-row items-center justify-between",children:[e.jsx(o,{className:"text-sm",children:"Top Device"}),e.jsx(Y,{className:"w-4 h-4 text-muted-foreground"})]}),e.jsxs(x,{children:[e.jsx("div",{className:"text-lg font-semibold",children:((R=(C=a==null?void 0:a.by_user_agent)==null?void 0:C[0])==null?void 0:R.bucket)??"—"}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[((L=(A=a==null?void 0:a.by_user_agent)==null?void 0:A[0])==null?void 0:L.count)??0," events"]})]})]})]}),e.jsxs(i,{children:[e.jsx(d,{children:e.jsx(o,{className:"text-base",children:"Top Categories"})}),e.jsx(x,{children:e.jsxs("div",{className:"flex flex-wrap gap-2",children:[((a==null?void 0:a.by_type)??[]).map(s=>e.jsxs(N,{variant:"secondary",children:[s.error_type,": ",s.count]},s.error_type)),(!(a!=null&&a.by_type)||a.by_type.length===0)&&e.jsx("span",{className:"text-sm text-muted-foreground",children:"No events in this window."})]})})]}),e.jsxs(i,{children:[e.jsxs(d,{className:"space-y-3",children:[e.jsx(o,{className:"text-base",children:"Event Log"}
1),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-5 gap-2",children:[e.jsxs(f,{value:String(u),onValueChange:s=>F(Number(s)),children:[e.jsx(g,{children:e.jsx(p,{})}),e.jsxs(b,{children:[e.jsx(r,{value:"1",children:"Last 24h"}),e.jsx(r,{value:"7",children:"Last 7 days"}),e.jsx(r,{value:"30",children:"Last 30 days"})]})]}),e.jsxs(f,{value:h,onValueChange:E,children:[e.jsx(g,{children:e.jsx(p,{})}),e.jsx(b,{children:K.map(s=>e.jsx(r,{value:s.value,children:s.label},s.value))})]}),e.jsxs(f,{value:m,onValueChange:V,children:[e.jsx(g,{children:e.jsx(p,{})}),e.jsx(b,{children:Q.map(s=>e.jsx(r,{value:s.value,children:s.label},s.value))})]}),e.jsxs(f,{value:j,onValueChange:q,children:[e.jsx(g,{children:e.jsx(p,{})}),e.jsxs(b,{children:[e.jsx(r,{value:"all",children:"All statuses"}),e.jsx(r,{value:"recovered",children:"Recovered"}),e.jsx(r,{value:"fatal",children:"Fatal"})]})]}),e.jsx(J,{placeholder:"Search message / url",value:v,onChange:s=>M(s.target.value)})]})]}),e.jsx(x,{children:D?e.jsx("div",{className:"flex justify-center py-10",children:e.jsx(W,{size:32})}):S.length===0?e.jsx("div",{className:"text-sm text-muted-foreground py-6 text-center",children:"No events match the filters."}):e.jsx("div",{className:"space-y-2",children:S.map(s=>e.jsxs("div",{className:"border rounded-md p-3 text-sm",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(N,{variant:s.recovery_successful?"secondary":"destructive",children:s.recovery_successful?"recovered":"fatal"}),e.jsx(N,{variant:"outline",children:s.error_type}),s.component_name&&e.jsx("span",{className:"text-xs text-muted-foreground",children:s.component_name})]}),e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:new Date(s.created_at).toLocaleString()})]}),e.jsx("div",{className:"mt-1 font-medium break-words",children:s.error_message}),s.url&&e.jsx("div",{className:"text-xs text-muted-foreground break-all",children:s.url}),s.user_agent&&e.jsx("div",{className:"text-xs text-muted-foreground break-all",children:s.user_agent})]},s.id))})})]}),e.jsxs("div",{className:"text-xs text-muted-foreground flex items-center gap-2",children:[e.jsx($,{className:"w-3 h-3"}),"Generated at ",a!=null&&a.generated_at?new Date(a.generated_at).toLocaleString():"—"]})]})}export{re as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.