unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
2 lines (1 loc) • 8.95 kB
JavaScript
import{bk as w,Q as A,bi as M,bh as C,r as S,bj as E,G as L,H as I,j as e,s as i,cU as x,cy as N,cM as T,cz as D,N as z,bz as k,hf as f,bw as R,y as U,T as u,cV as B,b as F,W as P,gl as j,j4 as V,j5 as $,j6 as W}from"./index-DEkgmbaI.js";import{u as _}from"./unknownify-B7hmSXnj.js";const H=[],G=s=>{const{isEnterprise:t}=w(),r=A("edgeObservability"),{data:d,error:n,mutate:a}=M(t()&&r,H,C("api/admin/metrics/edges"),q,s);return S.useMemo(()=>({connectedEdges:d??[],loading:!n&&!d,refetch:()=>a(),error:n}),[d,n,a])},q=s=>fetch(s).then(E("Connected Edges")).then(t=>t.json());var m={},O=I;Object.defineProperty(m,"__esModule",{value:!0});var v=m.default=void 0,K=O(L()),Q=e,Y=(0,K.default)((0,Q.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2z"}),"Circle");v=m.default=Y;const J=i("table")(({theme:s})=>({width:"100%",borderCollapse:"collapse",fontSize:s.fontSizes.smallerBody,"& > thead":{borderBottom:`1px solid ${s.palette.text.primary}`},"& tr":{textAlign:"right","& > th:first-of-type, td:first-of-type":{textAlign:"left"}}})),y=i("tr")(({theme:s})=>({fontWeight:s.fontWeight.bold,"&&& > td":{paddingTop:s.spacing(1),"& > div":{display:"flex",alignItems:"center"}}})),X=({instance:s})=>e.jsxs(J,{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Latency (ms)"}),e.jsx("th",{children:"Avg"}),e.jsx("th",{children:"p99"})]})}),e.jsxs("tbody",{children:[e.jsx(y,{children:e.jsx("td",{colSpan:3,children:e.jsxs("div",{children:["Upstream"," ",e.jsx(x,{tooltip:"Latency measured for requests sent from this Edge instance to the configured upstream, i.e. Unleash or another Edge instance.",size:"16px"})]})})}),e.jsxs("tr",{children:[e.jsx("td",{children:"Client Features"}),e.jsx("td",{children:s.upstreamFeaturesAverageLatencyMs}),e.jsx("td",{children:s.upstreamFeaturesP99LatencyMs})]}),e.jsxs("tr",{children:[e.jsx("td",{children:"Metrics"}),e.jsx("td",{children:s.upstreamMetricsAverageLatencyMs}),e.jsx("td",{children:s.upstreamMetricsP99LatencyMs})]}),e.jsxs("tr",{children:[e.jsx("td",{children:"Edge"}),e.jsx("td",{children:s.upstreamEdgeAverageLatencyMs}),e.jsx("td",{children:s.upstreamEdgeP99LatencyMs})]}),e.jsx(y,{children:e.jsx("td",{colSpan:3,children:e.jsxs("div",{children:["Downstream"," ",e.jsx(x,{tooltip:"Latency measured when serving requests from clients, i.e. SDKs or other Edge instances.",size:"16px"})]})})}),e.jsxs("tr",{children:[e.jsx("td",{children:"Client Features"}),e.jsx("td",{children:s.clientFeaturesAverageLatencyMs}),e.jsx("td",{children:s.clientFeaturesP99LatencyMs})]}),e.jsxs("tr",{children:[e.jsx("td",{children:"Frontend"}),e.jsx("td",{children:s.frontendApiAverageLatencyMs}),e.jsx("td",{children:s.frontendApiP99LatencyMs})]})]})]}),Z=i("div")(({theme:s})=>({width:"100%",borderRadius:s.shape.borderRadiusMedium,border:"1px solid",borderColor:s.palette.secondary.border,backgroundColor:s.palette.secondary.light,display:"flex",flexDirection:"column",alignItems:"center",padding:0,zIndex:1,marginTop:s.spacing(1)})),ee=i(N)({width:"100%",background:"transparent",boxShadow:"none"}),se=i(T,{shouldForwardProp:s=>s!=="connectionStatus"})(({theme:s,connectionStatus:t})=>({fontSize:s.fontSizes.smallBody,padding:s.spacing(1),minHeight:s.spacing(3),"& .MuiAccordionSummary-content":{alignItems:"center",gap:s.spacing(1),margin:0,"&.Mui-expanded":{margin:0},"& svg":{fontSize:s.fontSizes.mainHeader,color:t==="Stale"?s.palette.warning.main:t==="Disconnected"?s.palette.error.main:s.palette.success.main}}})),te=i(D)(({theme:s})=>({display:"flex",flexDirection:"column",fontSize:s.fontSizes.smallerBody,gap:s.spacing(2)})),l=i("div")(({theme:s})=>({display:"flex",justifyContent:"space-between",gap:s.spacing(2),"& > span":{display:"flex",alignItems:"center"}})),ne=i(z)(({theme:s})=>({padding:s.spacing(0,1)})),re=({reportedAt:s})=>{const t=new Date(s).getTime(),r=(Date.now()-t)/1e3;return r>360?"Disconnected":r>180?"Stale":"Connected"},ae=({started:s,reportedAt:t,cpuUsage:r})=>{const d=Number(r);if(!d)return"No usage";const n=new Date(s).getTime(),o=(new Date(t).getTime()-n)/1e3;return o===0?"No usage":`${(d/o*100).toFixed(2)} %`},oe=({memoryUsage:s})=>{if(!s)return"No usage";const t=["B","KB","MB","GB"];let r=s,d=0;for(;r>=1024&&d<t.length-1;)r/=1024,d++;return`${r.toFixed(2)} ${t[d]}`},de=({instance:s})=>{const{locationSettings:t}=k(),r=re(s),d=f(s.started,t==null?void 0:t.locale),n=f(s.reportedAt,t==null?void 0:t.locale),a=ae(s),o=oe(s),c=a==="No usage"&&o==="No usage"&&e.jsx("p",{children:"Resource metrics are only available when running on Linux."});return e.jsx(Z,{children:e.jsxs(ee,{children:[e.jsxs(se,{expandIcon:e.jsx(R,{}),connectionStatus:r,children:[e.jsx(U,{arrow:!0,title:`${r}. Last reported: ${n}`,children:e.jsx(v,{})}),s.id||s.instanceId]}),e.jsxs(te,{children:[e.jsxs(l,{children:[e.jsx("strong",{children:"ID"}),e.jsx("span",{children:s.instanceId})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Upstream server"}),e.jsx("span",{children:s.connectedVia||"Unleash"})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Region"}),e.jsx("span",{children:s.region||"Unknown"})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Version"}),e.jsx("span",{children:s.edgeVersion})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Status"}),e.jsx(ne,{color:r==="Disconnected"?"error":r==="Stale"?"warning":"success",children:r})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Start"}),e.jsx("span",{children:d})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Last report"}),e.jsx("span",{children:n})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"CPU"}),e.jsxs("span",{children:[a," ",e.jsx(x,{tooltip:e.jsxs(e.Fragment,{children:[e.jsx("p",{children:"CPU average usage since instance started."}),c]}),size:"16px"})]})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Memory"}),e.jsxs("span",{children:[o," ",e.jsx(x,{tooltip:e.jsxs(e.Fragment,{children:[e.jsx("p",{children:"Current memory usage."}),c]}),size:"16px"})]})]}),e.jsxs(l,{children:[e.jsx("strong",{children:"Stream clients"}),e.jsx("span",{children:s.connectedStreamingClients})]}),e.jsx(l,{children:e.jsx(X,{instance:s})})]})]})})},p="Unleash",ce=i("div")(({theme:s})=>({marginBottom:s.spacing(18),display:"flex",justifyContent:"center"})),ie=i("div")(({theme:s})=>({display:"flex",justifyContent:"center",gap:s.spacing(4),flexWrap:"wrap",marginTop:s.spacing(2)})),b=i("div")(({theme:s})=>({borderRadius:s.shape.borderRadiusMedium,border:`1px solid ${s.palette.secondary.border}`,backgroundColor:s.palette.secondary.light,display:"flex",flexDirection:"column",alignItems:"center",padding:s.spacing(1.5),zIndex:1,marginTop:s.spacing(1),"& > svg":{width:s.spacing(9),height:s.spacing(9)}})),le=i(b)({backgroundColor:"transparent"}),pe=i(u)(({theme:s})=>({fontWeight:s.fontWeight.bold})),he=i(u)(({theme:s})=>({fontSize:s.fontSizes.smallerBody,color:s.palette.text.secondary})),xe=s=>s.reduce((t,r)=>(t.has(r.appName)||t.set(r.appName,{appName:r.appName,instances:[],groupTargets:new Set,level:0}),t.get(r.appName).instances.push(r),t),new Map),ge=s=>{const t=new Map,r=n=>{if(t.has(n.appName))return t.get(n.appName);let a=0;return n.groupTargets.forEach(o=>{if(o!==p){const c=s.get(o);c&&(a=Math.max(a,r(c)+1))}}),t.set(n.appName,a),a};s.forEach(n=>{n.level=r(n)});const d=new Map;return s.forEach(n=>{const a=d.get(n.level)||[];a.push(n),d.set(n.level,a)}),d},je=s=>{const t=xe(s),r=new Map,d=new Map;return t.forEach(n=>{n.instances=n.instances.sort((a,o)=>a.instanceId.localeCompare(o.instanceId)).map((a,o)=>{const c=`${n.appName}-${o+1}`;return r.set(a.instanceId,c),d.set(c,n.appName),{...a,id:c}})}),t.forEach(n=>{n.instances=n.instances.map(o=>({...o,connectedVia:o.connectedVia?r.get(o.connectedVia)||o.connectedVia:p}));const a=new Set;n.instances.forEach(o=>{if(!o.connectedVia||o.connectedVia===p)a.add(p);else{const c=d.get(o.connectedVia);c&&c!==n.appName&&a.add(c)}}),n.groupTargets=a}),ge(t)},fe=()=>{B("Network - Connected Edges");const s=F(),{connectedEdges:t}=G({refreshInterval:3e4}),r=S.useMemo(()=>je(t),[t]),d=Array.from(r.keys()).sort((n,a)=>n-a);return r.size===0?e.jsx(P,{severity:"warning",children:"No data available."}):e.jsxs(j.ArcherContainer,{strokeColor:s.palette.text.primary,endShape:{arrow:{arrowLength:4,arrowThickness:4}},children:[e.jsx(ce,{children:e.jsx(j.ArcherElement,{id:p,children:e.jsxs(b,{children:[e.jsx(V,{darkmode:e.jsx($,{}),lightmode:e.jsx(W,{})}),e.jsx(u,{sx:{mt:1},children:p})]})})}),d.map(n=>{var a;return e.jsx(ie,{children:(a=r.get(n))==null?void 0:a.map(({appName:o,groupTargets:c,instances:g})=>e.jsx(j.ArcherElement,{id:o,relations:Array.from(c).map(h=>({targetId:h,targetAnchor:"bottom",sourceAnchor:"top",style:{strokeColor:s.palette.secondary.border}})),children:e.jsxs(le,{children:[e.jsx(pe,{children:_(o)}),e.jsxs(he,{children:[g.length," instance",g.length!==1&&"s"]}),g.map(h=>e.jsx(de,{instance:h},h.instanceId))]})},o))},n)})]})};export{fe as NetworkConnectedEdges,fe as default};