PageSourceSearch

https://cdn-prod.withcabin.com/_nuxt/BQIO9cT1.js

js withcabin.com collected 2026-09-24 17:47:40 UTC 26,618 bytes, 5 lines download raw bytes

1import{d as it,a,g as r,e as c,w as p,u as e,c as h,k as _,o as St,b as t,F as b,r as w,_ as Lt,n as m,f as Bt,p as Nt,t as l,j as lt,h as y,i as U,l as at}from"./BHcPj9MP.js";import{_ as Ot}from"./LW5xnx_e.js";import{_ as Ft}from"./xgfb0QVV.js";import{_ as It}from"./Zy-Ul53U.js";import{_ as jt}from"./BYa5FF3m.js";import{_ as Pt}from"./DYimzTxc.js";import{_ as Ht}from"./CPjmlFGS.js";import{w as Vt,O as zt}from"./CZUsICk7.js";import{u as rt}from"./BrLDNslD.js";import{w as Gt,_ as Kt}from"./DZgWlqI8.js";import{q as Wt,T as Zt}from"./D2eJXWVO.js";import{_ as Yt}from"./RsNPAyrX.js";import{_ as Jt}from"./Dc6EWh7-.js";import{_ as Qt}from"./DDlDflDf.js";import{u as Xt}from"./Cym_6MP7.js";import{u as qt}from"./BfAgxhsa.js";import"./DQ0bvLzH.js";import"./Dbk2vr3G.js";import"./CH0F10BN.js";import"./Cb-3vTHv.js";import"./MR-1xNXZ.js";import"./CJQFuTWu.js";import"./CEkW_m3a.js";import"./BYvMW87q.js";import"./D77rxQAP.js";import"./C31mGVpZ.js";const te={class:"w-full overflow-hidden"},ee=it({__name:"AdminTrafficHistory",props:{data:{},baseline:{},height:{default:72}},setup(S){const u=S,{prettyNumber:A}=rt(),d=(g,R)=>R,E=g=>g.y,L=()=>u.baseline??0,B=g=>g.flagged?"var(--ui-error)":g.signature?"color-mix(in srgb, var(--ui-primary) 40%, transparent)":"var(--ui-primary)",N=g=>new Date(`${g}T00:00:00Z`).toLocaleDateString("en-GB",{day:"numeric",month:"short",timeZone:"UTC"}),O=g=>{const R=g.flagged?"flagged":g.signature?"fabricated shape, under threshold":"normal shape";return`<div class="bg-white dark:bg-default text-default rounded-md shadow-md ring-1 ring-muted p-3 text-base">
2     <div class="text-muted">${N(g.x)}${g.partial?" (so far)":""}</div>
3     <div class="font-bold">${A(g.y)} hits</div>
4     <div class="text-muted">${R}${u.baseline!==null?` · usually ${A(u.baseline)}`:""}</div>
5   </div>`};return(g,R)=>(a(),r("div",te,[c(e(zt),{data:S.data,height:S.height,margin:{top:4,bottom:4,left:0,right:0},class:"w-full"},{default:p(()=>[c(e(Gt),{x:d,y:E,color:B,duration:0,"bar-padding":.25,"rounded-corners":1}),S.baseline!==null?(a(),h(e(Vt),{key:0,x:d,y:L,color:"var(--ui-text-muted)","line-width":1,"line-dash-array":[3,3],duration:0})):_("",!0),c(e(Wt),{color:"var(--ui-text-muted)",template:O}),c(e(Zt))]),_:1},8,["data","height"])]))}}),se=Object.assign(ee,{__name:"AdminTrafficHistory"}),oe={class:"container mx-auto"},le={class:"flex flex-wrap items-center justify-between gap-4 mb-8"},ae={class:"flex items-center gap-2"},ne={class:"flex flex-col gap-4"},ie={class:"flex items-center gap-3 flex-wrap w-full"},re={key:0,class:"flex items-center gap-2 py-3"},ce={class:"flex flex-col divide-y divide-default"},de={class:"flex items-start gap-2 min-w-0"},ue={class:"min-w-0"},me={class:"flex items-center gap-2 min-w-0"},pe={class:"text-base font-medium"},xe=["title"],he={key:0,class:"mt-1 text-base text-toned"},be={class:"text-right text-base text-muted shrink-0"},_e={class:"block"},fe={key:0,class:"block"},ge={class:"text-base text-muted"},ye={class:"flex items-center gap-3 flex-wrap w-full"},ve={key:0,class:"flex items-center gap-2 py-3"},ke={class:"text-base"},we={class:"flex flex-col divide-y divide-default"},$e={class:"min-w-0 lg:w-[22rem] shrink-0 flex flex-col items-start gap-1"},Ce=["title","onClick"],Ae={class:"block max-w-full truncate text-base text-muted"},De=["title","onClick"],Ee={class:"block text-sm text-dimmed"},Re={class:"flex-1 min-w-0 lg:min-w-64"},Te={class:"block text-sm text-muted mt-1"},Me={class:"text-highlighted font-medium"},Ue={class:"flex items-center gap-1 shrink-0"},Se={class:"grid grid-cols-1 sm:grid-cols-3 gap-6"},Le={class:"block text-base text-muted"},Be={class:"text-3xl font-bold text-highlighted"},Ne={class:"block text-base text-muted"},Oe={key:0,class:"text-error"},Fe={class:"text-3xl font-bold text-highlighted"},Ie={class:"text-muted"},je={class:"block text-base text-muted"},Pe={class:"text-3xl font-bold text-highlighted"},He={class:"block text-base text-muted"},Ve={class:"grid grid-cols-1 sm:grid-cols-3 gap-6"},ze={class:"text-3xl font-bold text-highlighted"},Ge={class:"block text-base text-muted"},Ke={class:"block text-base text-muted"},We={class:"text-3xl font-bold text-highlighted"},Ze={class:"block text-base text-muted"},Ye={key:0,class:"text-error"},Je={class:"text-3xl font-bold text-highlighted"},Qe=["title"],Xe={class:"flex flex-col gap-3"},qe={class:"text-base font-semibold text-highlighted"},ts={class:"flex flex-col gap-3"},es={class:"flex flex-wrap items-center gap-2"},ss={class:"text-base font-medium"},os={class:"grid grid-cols-2 gap-x-6 gap-y-3 text-base"},ls={class:"block text-muted"},as={class:"font-bold"},ns={key:0,class:"text-error"},is={class:"font-bold"},rs={class:"font-bold"},cs={class:"font-bold"},ds={class:"text-sm"},us={class:"block text-muted"},ms={class:"font-numbers"},ps={class:"text-muted"},xs={key:1,class:"text-muted"},hs={class:"w-full h-12 overflow-hidden rounded-sm bg-muted ring-1 ring-inset ring-muted mt-auto"},bs={class:"overflow-x-auto"},_s={class:"min-w-[58rem] flex flex-col divide-y divide-default"},fs={class:"min-w-0"},gs={class:"flex items-center gap-2 min-w-0"},ys={class:"truncate text-base font-medium"},vs={class:"block truncate text-base text-muted"},ks={class:"text-right text-base font-bold"},ws={class:"text-right text-base text-muted"},$s=["title"],Cs={class:"text-right text-base font-bold"},As={class:"w-24 h-10 overflow-hidden rounded-sm bg-muted ring-1 ring-inset ring-muted"},Ds={class:"flex flex-col gap-3"},Es={class:"flex items-center justify-between gap-3"},Rs={class:"text-base"},Ts={class:"text-base text-right"},Ms={key:0,class:"block text-sm text-dimmed"},Us={class:"flex flex-col divide-y divide-default"},Ss={class:"flex justify-between py-2 text-base"},Ls={class:"font-bold"},Bs={class:"flex justify-between py-2 text-base"},Ns={class:"font-bold"},Os={class:"flex justify-between py-2 text-base"},Fs={class:"flex justify-between py-2 text-base"},Is={class:"flex justify-between py-2 text-base"},js={class:"font-bold"},Ps={class:"flex flex-col divide-y divide-default"},Hs={class:"min-w-0"},Vs={class:"text-base font-medium"},zs={class:"block text-base text-muted"},Gs={class:"flex gap-6 text-base shrink-0"},Ks={class:"text-right"},Ws={class:"font-bold"},Zs={class:"text-right"},Ys={class:"font-bold"},Js={class:"text-right"},Qs={class:"font-bold"},Xs={class:"flex flex-col divide-y divide-default"},qs={class:"flex justify-between py-2 text-base"},to={class:"flex justify-between py-2 text-base"},eo={class:"min-w-0 truncate text-muted"},so={class:"text-3xl font-bold text-highlighted"},oo={class:"text-3xl font-bold text-highlighted"},nt="grid grid-cols-[minmax(12rem,1fr)_6rem_5rem_6rem_5rem_7rem_5rem_6rem] gap-3 items-center",$="bg-white dark:bg-muted min-w-0",Mo=it({__name:"monitoring",setup(S){const{metrics:u,alarms:A,usage:d,traffic:E,metricsError:L,alarmsError:B,usageError:N,trafficError:O,loading:g,windowHours:R,usageDays:z,init:ct,setWindow:dt,setUsageDays:ut,loadMetrics:mt,loadAlarms:pt,loadUsage:xt,loadTraffic:ht,setTrafficStatus:H}=Xt(),G=()=>ct(["alarms","metrics","usage","traffic"]),{prettyNumber:x}=rt(),{activeDomain:bt,activeUserEmail:_t}=qt(),ft=[{hours:6,label:"6h"},{hours:12,label:"12h"},{hours:24,label:"24h"},{hours:168,label:"7d"},{hours:336,label:"14d"}],K=U(()=>(u.value?.legacy??[]).filter(n=>n.group==="ingest")),gt=[{days:7,label:"7d"},{days:30,label:"30d"},{days:90,label:"90d"}],W=U(()=>(d.value?.counters.mcp.byOp??[]).map(n=>n.op).join(", ")),M={body:"flex-none",footer:"mt-4"},F=at("attention"),Z=U(()=>{const n=A.value?.alarms??[];return F.value==="all"?n:n.filter(o=>o.state!=="OK")}),yt=U(()=>{const n=A.value?.counts,o=(n?.alarm??0)+(n?.insufficient??0),f=o+(n?.ok??0);return[{label:`Active (${o})`,value:"attention"},{label:`All (${f})`,value:"all"}]}),vt={ALARM:"error",INSUFFICIENT_DATA:"warning",OK:"success"},kt={open:"error",confirmed:"warning",dismissed:"neutral"},T=at("open"),Y=U(()=>{const n=E.value?.flags??[];return T.value==="all"?n:n.filter(o=>o.status===T.value)}),wt=U(()=>{const n=E.value?.counts;return[{label:`Active (${n?.open??0})`,value:"open"},{label:`Confirmed (${n?.confirmed??0})`,value:"confirmed"},{label:`All (${(n?.open??0)+(n?.confirmed??0)+(n?.dismissed??0)})`,value:"all"}]}),$t={ALARM:"Firing",INSUFFICIENT_DATA:"No data",OK:"OK"},Ct=n=>
5n==null?"—":`$${n.toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})}`,V=n=>n==null?"—":n>=1e3?`${(n/1e3).toFixed(1)}s`:`${Math.round(n)}ms`,At=n=>{if(n==null)return"—";const o=["B","KB","MB","GB","TB"];let f=n,v=0;for(;f>=1024&&v<o.length-1;)f/=1024,v++;return`${f.toFixed(f>=100||v===0?0:1)} ${o[v]}`},I=n=>n==null?"—":`${Math.round(n)}%`,J=(n,o)=>o>0?`${(n/o*100).toFixed(1)}%`:"—",Q=n=>n==null?"—":`${(n*100).toFixed(2)}%`,Dt=n=>new Date(n).toLocaleString(void 0,{day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"}),Et=n=>new Date(n).toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}),Rt=n=>{const o=Math.max(1,Math.round(n/6e4));return o<60?`${o} min`:`${Math.round(o/60*10)/10} h`},X=n=>{const o=Math.round((Date.now()-n)/6e4);if(o<1)return"moments";if(o<60)return`${o} min`;const f=Math.round(o/60);if(f<48)return`${f} hr`;const v=Math.round(f/24);if(v<60)return`${v} days`;const D=Math.round(v/30.44);return D<24?`${D} months`:`${(v/365.25).toFixed(1)} years`};return St(()=>G()),(n,o)=>{const f=Lt,v=Ot,D=Ft,q=It,tt=Nt,C=jt,k=Pt,j=Ht,Tt=se,et=Kt,st=Yt,P=Jt,Mt=Bt,Ut=Qt;return a(),h(Ut,{ui:{body:"px-px sm:px-px lg:px-px"}},{body:p(()=>[t("div",oe,[t("div",le,[o[3]||(o[3]=t("div",{class:"font-heading text-3xl"}," Monitoring ",-1)),t("div",ae,[c(v,null,{default:p(()=>[(a(),r(b,null,w(ft,s=>c(f,{key:s.hours,color:e(R)===s.hours?"primary":"neutral",variant:e(R)===s.hours?"solid":"outline",label:s.label,onClick:i=>e(dt)(s.hours)},null,8,["color","variant","label","onClick"])),64))]),_:1}),c(f,{color:"primary",variant:"ghost",icon:"i-lucide-refresh-cw",class:m({"animate-spin":e(g)}),onClick:o[0]||(o[0]=s=>G())},null,8,["class"])])]),c(Mt,null,{default:p(()=>[t("div",ne,[e(B)?(a(),h(D,{key:0,color:"error",variant:"subtle",icon:"i-lucide-triangle-alert",title:e(B),actions:[{label:"Retry",color:"neutral",variant:"outline",onClick:()=>e(pt)()}]},null,8,["title","actions"])):e(A)?(a(),h(k,{key:1,class:m($),ui:{wrapper:"items-stretch",title:"w-full"}},{title:p(()=>[t("div",ie,[o[4]||(o[4]=t("span",null,"Alarms",-1)),c(q,{class:"ml-auto w-auto",modelValue:e(F),"onUpdate:modelValue":o[1]||(o[1]=s=>lt(F)?F.value=s:null),items:e(yt),color:"neutral",size:"sm",content:!1,ui:{indicator:"bg-white dark:bg-accented",label:"text-base text-default",list:"ring-1 ring-inset ring-muted"}},null,8,["modelValue","items"])])]),footer:p(()=>[t("p",ge,l(e(A).suppressed)+" autoscaling and Elastic Beanstalk alarms hidden. Checked "+l(X(e(A).fetchedAt))+" ago. ",1)]),default:p(()=>[e(Z).length?_("",!0):(a(),r("div",re,[c(tt,{name:"i-lucide-check",class:"size-5 text-success"}),o[5]||(o[5]=t("span",{class:"text-base"}," Nothing needs attention. ",-1))])),t("div",ce,[(a(!0),r(b,null,w(e(Z),s=>(a(),r("div",{key:s.name,class:"flex items-start justify-between gap-3 py-3"},[t("div",de,[c(C,{color:vt[s.state],variant:"subtle",class:"shrink-0 mt-0.5",label:$t[s.state]},null,8,["color","label"]),t("div",ue,[t("div",me,[t("span",pe,l(s.label),1),s.hasAction?_("",!0):(a(),h(C,{key:0,color:"neutral",variant:"subtle",class:"shrink-0",label:"notifies nobody",title:"This alarm has no action, so it fires into the void."}))]),t("span",{class:"block truncate text-base text-muted",title:s.name},l(s.name),9,xe),s.state!=="OK"&&s.description?(a(),r("p",he,l(s.description),1)):_("",!0)])]),t("div",be,[t("span",_e,l(s.group),1),s.since?(a(),r("span",fe,l(X(s.since))+" ago",1)):_("",!0)])]))),128))])]),_:1})):(a(),h(j,{key:2,class:"h-40 w-full"})),e(O)?(a(),h(D,{key:3,color:"error",variant:"subtle",icon:"i-lucide-triangle-alert",title:e(O),actions:[{label:"Retry",color:"neutral",variant:"outline",onClick:()=>e(ht)()}]},null,8,["title","actions"])):e(E)?(a(),h(k,{key:4,class:m($),ui:{wrapper:"items-stretch",title:"w-full"}},{title:p(()=>[t("div",ye,[o[6]||(o[6]=t("span",null,"Suspect traffic",-1)),e(E).counts.open?(a(),h(C,{key:0,color:"error",variant:"subtle",label:`${e(E).counts.open} open`},null,8,["label"])):_("",!0),c(q,{class:"ml-auto w-auto",modelValue:e(T),"onUpdate:modelValue":o[2]||(o[2]=s=>lt(T)?T.value=s:null),items:e(wt),color:"neutral",size:"sm",content:!1,ui:{indicator:"bg-white dark:bg-accented",label:"text-base text-default",list:"ring-1 ring-inset ring-muted"}},null,8,["modelValue","items"])])]),default:p(()=>[e(Y).length?_("",!0):(a(),r("div",ve,[c(tt,{name:"i-lucide-check",class:"size-5 text-success"}),t("span",ke,[e(T)==="open"?(a(),r(b,{key:0},[y("Nothing active.")],64)):e(T)==="confirmed"?(a(),r(b,{key:1},[y("Nothing confirmed.")],64)):(a(),r(b,{key:2},[y("No domain has ever been flagged.")],64))])])),t("div",we,[(a(!0),r(b,null,w(e(Y),s=>(a(),r("div",{key:s.domain,class:"flex flex-col lg:flex-row lg:items-center justify-between gap-3 py-3"},[t("div",$e,[t("button",{type:"button",class:"block max-w-full text-base font-medium truncate text-left hover:text-primary curs
5or-pointer",title:`Open ${s.domain}`,onClick:i=>bt.value=s.domain},l(s.domain),9,Ce),t("span",Ae,[s.ownerEmail?(a(),r("button",{key:0,type:"button",class:"hover:text-primary cursor-pointer",title:`Open ${s.ownerEmail}`,onClick:i=>_t.value=s.ownerEmail},l(s.ownerEmail),9,De)):(a(),r(b,{key:1},[y("no owner")],64)),y(" · "+l(s.ownerPlan),1)]),t("span",Ee," ~"+l(e(x)(s.totalExcess))+" hits over baseline ",1),c(C,{color:kt[s.status],variant:"subtle",size:"sm",label:s.status},null,8,["color","label"])]),t("div",Re,[c(Tt,{data:s.history,baseline:s.latest.baselineHits},null,8,["data","baseline"]),t("span",Te,[t("span",Me,l(e(x)(s.latest.hits)),1),y(" hits "+l(s.latest.complete?`on ${s.latest.isoDate}`:"so far today")+" · ",1),s.latest.baselineHits!==null?(a(),r(b,{key:0},[y("usually "+l(e(x)(s.latest.baselineHits))+" a day",1)],64)):(a(),r(b,{key:1},[y("no baseline yet")],64)),y(" · "+l(I((s.latest.bounceRate??0)*100))+" bounce",1),s.latest.flagged?_("",!0):(a(),r(b,{key:2},[y(" · not matching right now")],64))])]),t("div",Ue,[c(f,{size:"sm",color:"neutral",variant:"ghost",icon:"i-lucide-line-chart",to:`/dashboard/${s.domain}`,target:"_blank",title:"Open the dashboard in a new tab","aria-label":"Open dashboard"},null,8,["to"]),s.status!=="confirmed"?(a(),h(f,{key:0,size:"sm",color:"warning",variant:"ghost",icon:"i-lucide-check",title:"Confirm: shows the owner an unusual traffic notice","aria-label":"Confirm",onClick:i=>e(H)(s.domain,"confirmed")},null,8,["onClick"])):_("",!0),s.status!=="dismissed"?(a(),h(f,{key:1,size:"sm",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Dismiss: not unusual for this site","aria-label":"Dismiss",onClick:i=>e(H)(s.domain,"dismissed")},null,8,["onClick"])):_("",!0),s.status!=="open"?(a(),h(f,{key:2,size:"sm",color:"neutral",variant:"ghost",icon:"i-lucide-rotate-ccw",title:"Reopen","aria-label":"Reopen",onClick:i=>e(H)(s.domain,"open")},null,8,["onClick"])):_("",!0)])]))),128))])]),_:1})):(a(),h(j,{key:5,class:"h-24 w-full"})),e(N)?(a(),h(D,{key:6,color:"error",variant:"subtle",icon:"i-lucide-triangle-alert",title:e(N),actions:[{label:"Retry",color:"neutral",variant:"outline",onClick:()=>e(xt)()}]},null,8,["title","actions"])):e(d)?(a(),r(b,{key:7},[c(et,{title:"Public API requests per day",data:e(d).api.series.map(s=>({x:s.t,y:s.calls})),type:"bar",format:s=>String(e(x)(s))},{actions:p(()=>[c(v,null,{default:p(()=>[(a(),r(b,null,w(gt,s=>c(f,{key:s.days,size:"sm",color:e(z)===s.days?"primary":"neutral",variant:e(z)===s.days?"solid":"outline",label:s.label,onClick:i=>e(ut)(s.days)},null,8,["color","variant","label","onClick"])),64))]),_:1})]),_:1},8,["data","format"]),c(k,{class:m($),ui:M,title:"Public API"},{default:p(()=>[t("div",Se,[t("div",null,[t("span",Le,"Requests, "+l(e(d).api.windowDays)+"d",1),t("span",Be,l(e(x)(e(d).api.calls)),1),t("span",Ne,[y(l(e(x)(Math.round(e(d).api.calls/e(d).api.windowDays)))+" a day · "+l(J(e(d).api.errors4xx,e(d).api.calls))+" 4xx",1),e(d).api.errors5xx?(a(),r("span",Oe,", "+l(e(x)(e(d).api.errors5xx))+" 5xx",1)):_("",!0)])]),t("div",null,[o[7]||(o[7]=t("span",{class:"block text-base text-muted"},"Keys used, 30d",-1)),t("span",Fe,[y(l(e(d).api.keys.usedLast30d),1),t("span",Ie,"/"+l(e(d).api.keys.total),1)]),t("span",je,l(e(d).api.keys.accounts)+" accounts · "+l(e(d).api.keys.neverUsed)+" never called ",1)]),t("div",null,[o[8]||(o[8]=t("span",{class:"block text-base text-muted"},"Latency, mean",-1)),t("span",Pe,l(V(e(d).api.avgLatencyMs)),1),t("span",He,l(J(e(d).counters.api.serviceCalls,e(d).counters.api.calls))+" of counted calls are the MCP proxy ",1)])])]),_:1}),e(d).counters.mcp.byDay.length?(a(),h(et,{key:0,title:"MCP tool calls per day",data:e(d).counters.mcp.byDay.map(s=>({x:s.day,y:s.calls})),type:"bar",format:s=>String(e(x)(s))},null,8,["data","format"])):_("",!0),c(k,{class:m($),ui:M,title:"MCP"},{default:p(()=>[t("div",Ve,[t("div",null,[o[9]||(o[9]=t("span",{class:"block text-base text-muted"},"Accounts connected",-1)),t("span",ze,l(e(d).mcp.accounts),1),t("span",Ge,l(e(d).mcp.connections)+" live connections · "+l(e(d).mcp.expiringNext7d)+" expiring in 7d ",1)]),t("div",null,[t("span",Ke,"Tool calls, "+l(e(d).api.windowDays)+"d",1),t("span",We,l(e(x)(e(d).counters.mcp.calls)),1),t("span",Ze,[y(l(e(d).counters.mcp.accounts)+" accounts calling",1),e(d).counters.mcp.errors?(a(),r("span",Ye,", "+l(e(d).counters.mcp.errors)+" failed",1)):_("",!0)])]),t("div",null,[o[10]||(o[10]=t("span",{class:"block text-base text-muted"},"Tools in use",-1)),t("span",Je,l(e(d).counters.mcp.byOp.length),1),t("span",{class:"block text-base text-muted truncate",title:e(W)},l(e(W)||"None counted yet"),9,Qe)])])]),_:1})],64)):(a(),h(j,{key:8,class:"h-32 w-full"})),e(L)?(a(),h(D,{key:9,color:"error",variant:"subtle",icon:"i-lucide-triangle-alert",title:e(L),actions:[{label:"Retry",color:"neutral",variant:"outline",onClick:()=>e(mt)()}]},null,8,["title","actions"])):e(u)?(a(),r(b,{key:10},[t("div",Xe,[t("p",qe," Ingest servers ("+l(e(K).length)+" regions) ",1),c(P,{class:"!grid-cols-1 lg:!grid-cols-2 gap-4"},{default:p(()=>[(a(!0),r(b,null,w(e(K),s=>(a(),h(k,{key:s.region,class:m($)},{default:p(()=>[t("div",ts,[t("div",es,[c(C,{color:s.healthNow===0||s.healthNow===1?"success":"error",variant:"subtle",label:`${s.healthNowLabel} now`},null,8,["color","label"]),t("span",ss,l(s.label),1),c(C,{color:s.fleet==="new"?"primary":"neutral",variant:"outline",label:s.fleet==="new"?"new fleet":"old fleet"},null,8,["color","label"]),s.traffic?_("",!0):(a(),h(C,{key:0,color:"warning",variant:"subtle",label:"no traffic in this window"}))]),t("div",os,[t("div",null,[t("span",ls,l(s.trafficLabel),1),t("span",as,l(e(x)(s.traffic)),1)]),t("div",null,[o[11]||(o[11]=t("span",{class:"block text-muted"},"Healthy hosts",-1)),t("span",{class:m(["font-bold",(s.healthyHosts??0)>0?"":"text-error"])},[y(l(s.healthyHosts??"—"),1),s.unhealthyHosts?(a(),r("span",ns,"(+"+l(s.unhealthyHosts)+" bad)",1)):_("",!0)],2)]),t("div",null,[o[12]||(o[12]=t("span",{class:"block text-muted"},"CPU",-1)),t("span",is,l(I(s.cpu)),1)]),t("div",null,[o[13]||(o[13]=t("span",{class:"block text-muted"},"Traffic",-1)),t("span",rs,l(At(s.processedBytes)),1)]),t("div",null,[o[14]||(o[14]=t("span",{class:"block text-muted"},"TCP resets",-1)),t("span",cs,l(e(x)(s.targetResets)),1)])]),t("div",ds,[t("span",us,"Health events, last "+l(e(u).windowHours)+"h",1),s.healthEvents.length?(a(!0),r(b,{key:0},w(s.healthEvents,i=>(a(),r("div",{key:i.start,class:"flex flex-wrap items-baseline gap-x-2"},[t("span",ms,l(Dt(i.start))+" to "+l(Et(i.end)),1),t("span",{class:m(i.worst>=20?"text-error":"text-warning")},l(i.worstLabel),3),t("span",ps,l(Rt(i.end-i.start)),1)]))),128)):(a(),r("span",xs,"none"))]),t("div",hs,[c(st,{"sparkline-data":s.trafficSeries.map(i=>({x:i.t,y:i.v??0}))},null,8,["sparkline-data"])])])]),_:2},1024))),128))]),_:1})]),(a(!0),r(b,null,w(e(u).groups,s=>(a(),h(k,{class:m($),key:s.key,title:s.label,description:s.note},{default:p(()=>[t("div",bs,[t("div",_s,[t("div",{class:m([nt,"py-2 text-base text-muted"])},[...o[15]||(o[15]=[t("span",null,"Function",-1),t("span",{class:"text-right"},"Invocations",-1),t("span",{class:"text-right"},"Errors",-1),t("span",{class:"text-right"},"Throttles",-1),t("span",{class:"text-right"},"p50",-1),t("span",{class:"text-right"},"p99 worst hr",-1),t("span",{class:"text-right"},"$/day",-1),t("span",null,null,-1)])],2),(a(!0),r(b,null,w(s.functions,i=>(a(),r("div",{key:i.name,class:m([nt,"py-3"])},[t("div",fs,[t("div",gs,[t("span",ys,l(i.name),1),i.timeoutRatio!==null&&i.timeoutRatio>1?(a(),h(C,{key:0,color:"error",variant:"subtle",class:"shrink-0",label:"exceeded timeout",title:"p99 went past the current timeout somewhere in this window. If the timeout was changed recently, shorten the window to see whether it is still happening."})):i.timeoutRatio!==null&&i.timeoutRatio>.9?(a(),h(C,{key:1,color:"error",variant:"subtle",class:"shrink-0",label:"hitting timeout"})):_("",!0),i.continuous&&i.invocations===0?(a(),h(C,{key:2,color:"warning",variant:"subtle",class:"shrink-0",label:"no invocations"})):_("",!0)]),t("span",vs,l(i.memoryMB)+" MB · "+l(i.timeoutSec)+"s timeout ",1)]),t("span",ks,l(e(x)(i.invocations)),1),t("span",{class:m(["text-right text-base",i.errors>0?"text-error font-bold":"text-muted"])},l(e(x)(i.errors)),3),t("span",{class:m(["text-right text-base",i.throttles>0?"text-warning font-bold":"text-muted"])},l(e(x)(i.throttles)),3),t("span",ws,l(V(i.p50Ms)),1),t("span",{class:m(["text-right text-base",i.timeoutRatio!==null&&i.timeoutRatio>.9?"text-error font-bold":"text-muted"]),title:i.timeoutRatio!==null?`${Math.round(i.timeoutRatio*100)}% of the ${i.timeoutSec}s timeout`:""},l(V(i.p99Ms)),11,$s),t("span",Cs,l(Ct(i.estUsdPerDay)),1),t("div",As,[c(st,{"sparkline-data":i.series.map(ot=>({x:ot.t,y:ot.v??0}))},null,8,["sparkline-data"])])],2))),128))])])]),_:2},1032,["title","description"]))),128)),c(P,{class:"!grid-cols-1 lg:!grid-cols-2 gap-4"},{default:p(()=>[c(k,{class:m([$,"self-start"]),ui:M,title:"Failure queues"},{default:p(()=>[t("div",Ds,[(a(!0),r(b,null,w(e(u).queues,s=>(a(),r("div",{key:s.name,class:"flex flex-col gap-1"},[t("div",Es,[t("span",Rs,l(s.label),1),t("span",Ts,[t("span",{class:m(["font-bold",s.waiting>0?"text-error":"text-muted"])},l(e(x)(s.waiting))+" waiting",3),s.peak>s.waiting?(a(),r("span",Ms," peak "+l(e(x)(s.peak))+" in the last "+l(e(u).windowHours)+"h ",1)):_("",!0)])]),s.caveat?(a(),h(D,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",description:s.caveat,ui:{description:"text-base"}},null,8,["description"])):_("",!0)]))),128))])]),_:1},8,["class"]),c(k,{class:m([$,"self-start"]),ui:M,title:"DynamoDB (cabin)"},{default:p(()=>[t("div",Us,[t("div",Ss,[o[16]||(o[16]=t("span",{class:"text-muted"},"Read units",-1)),t("span",Ls,l(e(x)(e(u).dynamo.readUnits)),1)]),t("div",Bs,[o[17]||(o[17]=t("span",{class:"text-muted"},"Write units",-1)),t("span",Ns,l(e(x)(e(u).dynamo.writeUnits)),1)]),t("div",Os,[o[18]||(o[18]=t("span",{class:"text-muted"},"Throttled",-1)),t("span",{class:m(e(u).dynamo.throttled>0?"text-error font-bold":"font-bold")},l(e(x)(e(u).dynamo.throttled)),3)]),t("div",Fs,[o[19]||(o[19]=t("span",{class:"text-muted"},"System errors",-1)),t("span",{class:m(e(u).dynamo.systemErrors>0?"text-error font-bold":"font-bold")},l(e(x)(e(u).dynamo.systemErrors)),3)]),t("div",Is,[o[20]||(o[20]=t("span",{class:"text-muted"},"User errors",-1)),t("span",js,l(e(x)(e(u).dynamo.userErrors)),1)])])]),_:1},8,["class"])]),_:1}),c(P,{class:"!grid-cols-1 lg:!grid-cols-2 gap-4"},{default:p(()=>[c(k,{class:m([$,"self-start"]),ui:M,title:"ECS services"},{footer:p(()=>[...o[24]||(o[24]=[t("p",{class:"text-base text-muted"}," Container Insights is off, so this is live task count. Desired count is not published as a metric. ",-1)])]),default:p(()=>[t("div",Ps,[(a(!0),r(b,null,w(e(u).ecs,s=>(a(),r("div",{key:s.cluster,class:"flex items-center justify-between gap-3 py-2"},[t("div",Hs,[t("span",Vs,l(s.label),1),t("span",zs,l(s.cluster),1)]),t("div",Gs,[t("span",Ks,[o[21]||(o[21]=t("span",{class:"block text-muted"},"Tasks",-1)),t("span",Ws,l(s.tasks??"—"),1)]),t("span",Zs,[o[22]||(o[22]=t("span",{class:"block text-muted"},"CPU",-1)),t("span",Ys,l(I(s.cpu)),1)]),t("span",Js,[o[23]||(o[23]=t("span",{class:"block text-muted"}
5,"Memory",-1)),t("span",Qs,l(I(s.memory)),1)])])]))),128))])]),_:1},8,["class"]),c(k,{class:m([$,"self-start"]),ui:M,title:"Load balancer"},{footer:p(()=>[...o[27]||(o[27]=[t("p",{class:"text-base text-muted"}," Only the part that explains an outage: a 5xx count and whether the host rule is pointing at a group with anything healthy behind it. Express replaces target groups on every flip, so they are discovered live rather than pinned. ",-1)])]),default:p(()=>[t("div",Xs,[t("div",qs,[o[25]||(o[25]=t("span",{class:"text-muted"},"ELB 5xx",-1)),t("span",{class:m(e(u).alb.elb5xx>0?"text-error font-bold":"font-bold")},l(e(x)(e(u).alb.elb5xx)),3)]),t("div",to,[o[26]||(o[26]=t("span",{class:"text-muted"},"Target 5xx",-1)),t("span",{class:m(e(u).alb.target5xx>0?"text-error font-bold":"font-bold")},l(e(x)(e(u).alb.target5xx)),3)]),(a(!0),r(b,null,w(e(u).alb.targetGroups,s=>(a(),r("div",{key:s.name,class:"flex justify-between py-2 text-base"},[t("span",eo,l(s.name),1),t("span",{class:m((s.healthy??0)>0?"font-bold":"text-error font-bold")},l(s.healthy??0)+" healthy ",3)]))),128))])]),_:1},8,["class"])]),_:1}),c(k,{class:m($),title:"Email (SES)",description:"Bounce and complaint rates decide whether the sending domain survives once EMAIL_LIVE is on."},{default:p(()=>[c(P,{class:"lg:grid-cols-4 gap-4"},{default:p(()=>[t("div",null,[o[28]||(o[28]=t("span",{class:"block text-base text-muted"},"Sent",-1)),t("span",so,l(e(x)(e(u).ses.send)),1)]),t("div",null,[o[29]||(o[29]=t("span",{class:"block text-base text-muted"},"Delivered",-1)),t("span",oo,l(e(x)(e(u).ses.delivery)),1)]),t("div",null,[o[30]||(o[30]=t("span",{class:"block text-base text-muted"},"Bounce rate",-1)),t("span",{class:m(["text-3xl font-bold",(e(u).ses.bounceRate??0)>.03?"text-error":"text-highlighted"])},l(Q(e(u).ses.bounceRate)),3)]),t("div",null,[o[31]||(o[31]=t("span",{class:"block text-base text-muted"},"Complaint rate",-1)),t("span",{class:m(["text-3xl font-bold",(e(u).ses.complaintRate??0)>.001?"text-error":"text-highlighted"])},l(Q(e(u).ses.complaintRate)),3)])]),_:1})]),_:1})],64)):(a(),h(j,{key:11,class:"h-64 w-full"}))])]),_:1})])]),_:1})}}});
5export{Mo 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.