UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

2 lines (1 loc) • 11 kB
import{G as z,H as N,j as i,e6 as P,js as B,e4 as W,s as d,i as G,J,r as u,e3 as L,B as H,h6 as V,jt as O,ju as M,jv as X,cM as Y,e7 as w,ch as I,b9 as T,bb as A,e1 as K,d7 as Q,b as Z,bs as tt}from"./index-CBxzHo9v.js";import{a as g,f,T as et,p as C,b,d as ot,c as at,u as rt,B as nt,e as st,g as lt,h as ct}from"./LazyAdminExport-B8NZvb6Q.js";import{f as it}from"./formatTickValue-UVMjaxYs.js";const Ut=(t=34)=>({id:"customLine",beforeDraw:e=>{var r,o,a,n;if((r=e.tooltip)!=null&&r.opacity&&e.tooltip.x){const s=e.tooltip.caretX,l=e.scales.y,c=e.ctx;c.save();const p=c.createLinearGradient(s,l.top,s,l.bottom+34);p.addColorStop(0,"rgba(129, 122, 254, 0)"),p.addColorStop(1,"rgba(129, 122, 254, 0.12)"),c.fillStyle=p;const h=e.width/(((o=e.data.labels)==null?void 0:o.length)??1)*(((n=(a=e.options.datasets)==null?void 0:a.bar)==null?void 0:n.categoryPercentage)??1);c.roundRect(s-h/2,l.top,h,l.bottom-l.top+t,5),c.fill(),c.restore()}}});var x={},dt=N;Object.defineProperty(x,"__esModule",{value:!0});var $=x.default=void 0,ut=dt(z()),pt=i,gt=(0,ut.default)((0,pt.jsx)("path",{d:"m7 14 5-5 5 5z"}),"ArrowDropUp");$=x.default=gt;const j=(t,e,r=!0)=>{const o=t.getFullYear(),a=t.getMonth(),n=f(t),s=W(t);return{key:n,year:o,month:a,dayCount:s,shortLabel:t.toLocaleString("en-US",{month:"short"}),label:e||t.toLocaleString("en-US",{month:"long",year:"numeric"}),selectable:r}},ht=t=>{const e=[j(t,"Current month")],r=P(t);for(let o=1;o<12;o++){const a=B(r,o);e.push(j(a,void 0,a>=et))}return e},S=ht(g),bt=Object.fromEntries(S.map(t=>[t.key,t])),q="15rem",v=t=>t.spacing(3),F=d("button",{shouldForwardProp:t=>t!=="selected"})(({theme:t,selected:e})=>({cursor:"pointer",border:"none",backgroundColor:e?t.palette.secondary.light:"inherit",fontSize:t.typography.body1.fontSize,padding:t.spacing(.5),borderRadius:t.shape.borderRadius,color:t.palette.text.primary,transition:"background-color 0.2s ease",":focus-visible":{outline:`2px solid ${t.palette.primary.main}`},":hover:not(:disabled)":{backgroundColor:t.palette.action.hover}})),mt=d(F)(({theme:t})=>({":disabled":{cursor:"default",color:t.palette.text.disabled}})),yt=d(F)(({theme:t})=>({width:"100%",paddingBlock:t.spacing(1),textAlign:"left",borderRadius:0,paddingInline:v(t)})),ft=d(G)(({theme:t})=>({whiteSpace:"nowrap",width:q,justifyContent:"space-between",fontWeight:"normal",color:t.palette.text.primary,borderColor:t.palette.divider,":focus-within":{borderColor:t.palette.primary.main},":hover":{borderColor:t.palette.text.disabled,backgroundColor:"inherit"},transition:"border-color 0.1s ease"})),Ct=d("article")(({theme:t})=>({width:q,paddingBlock:t.spacing(2),display:"flex",flexFlow:"column",gap:t.spacing(2)})),xt=d("article")(({theme:t})=>({paddingInline:v(t)})),St=d("hgroup")(({theme:t})=>({h3:{margin:0,fontSize:t.typography.h3.fontSize},p:{color:t.palette.text.secondary,fontSize:t.typography.body2.fontSize}})),vt=d("ul")(({theme:t})=>({listStyle:"none",padding:0,display:"grid",gridTemplateColumns:"repeat(4, 1fr)",rowGap:t.spacing(1)})),Dt=d("article")(({theme:t})=>({display:"flex",width:"100%",flexFlow:"column",gap:t.spacing(.5)})),Rt=d("p")(({theme:t})=>({paddingInline:v(t),fontSize:t.typography.body2.fontSize,margin:0,color:t.palette.text.secondary,fontWeight:"bold"})),Mt=d("ul")(({theme:t})=>({listStyle:"none",margin:0,padding:0,width:"100%",li:{width:"100%"}})),wt=d(J)(({theme:t})=>({"& .MuiPaper-root":{borderRadius:t.shape.borderRadiusLarge,border:`1px solid ${t.palette.divider}`}})),zt=({selectedPeriod:t,setPeriod:e})=>{const r=[3,6,12].map(c=>({value:c,label:`Last ${c} months`})),[o,a]=u.useState(!1),n=u.useRef(null),s=c=>{e(c),a(!1)},l=t.grouping==="daily"?t.month===L(new Date,"yyyy-MM")?"Current month":C(t.month).toLocaleDateString("en-US",{month:"long",year:"numeric"}):`Last ${t.monthsBack} months`;return i.jsxs(H,{ref:n,children:[i.jsx(ft,{endIcon:o?i.jsx($,{}):i.jsx(V,{}),variant:"outlined",disableRipple:!0,onClick:()=>a(!0),children:l}),i.jsxs(wt,{open:o,anchorEl:n.current,onClose:()=>a(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},children:[i.jsxs(Ct,{children:[i.jsxs(xt,{children:[i.jsxs(St,{children:[i.jsx("h3",{children:"Select month"}),i.jsx("p",{children:"Last 12 months"})]}),i.jsx(vt,{children:S.map(c=>i.jsx("li",{children:i.jsx(mt,{selected:t.grouping==="daily"&&c.key===t.month,disabled:!c.selectable,onClick:()=>{s({grouping:"daily",month:c.key})},children:c.shortLabel})},c.label))})]}),i.jsxs(Dt,{children:[i.jsx(Rt,{children:"Range"}),i.jsx(Mt,{children:r.map(c=>i.jsx("li",{children:i.jsxs(yt,{selected:t.grouping==="monthly"&&c.value===t.monthsBack,type:"button",onClick:()=>{s({grouping:"monthly",monthsBack:c.value})},children:["Last ",c.value," months"]})},c.label))})]})]})," "]})]})},m={"/api/admin":{label:"Admin",color:"#6D66D9",order:1},"/api/frontend":{label:"Frontend",color:"#A39EFF",order:2},"/api/client":{label:"Server",color:"#D8D6FF",order:3}},jt=(t,e)=>{const{newRecord:r,labels:o}=D(t);return{datasets:t.apiData.filter(n=>!0).sort((n,s)=>m[n.apiPath].order-m[s.apiPath].order).map(n=>{const s=r();for(const c of Object.values(n.dataPoints))s[c.period]=c.trafficTypes[0].count;const l=m[n.apiPath];return{label:l.label,data:Object.values(s),backgroundColor:l.color,hoverBackgroundColor:l.color}}),labels:o}},kt=t=>{const{newRecord:e,labels:r}=D(t);return{datasets:t.apiData.map(a=>{const n=e();for(const l of Object.values(a.dataPoints)){const c=l.connections;n[l.period]=c}const s={label:"Connections",color:"#6D66D9",order:1};return{label:s.label,data:Object.values(n),backgroundColor:s.color,hoverBackgroundColor:s.color}}),labels:r}},Pt=t=>{const{newRecord:e,labels:r}=D(t);return{datasets:t.apiData.map(a=>{const n=e();for(const l of Object.values(a.dataPoints)){const c=l.requests;n[l.period]=c}const s={label:"Frontend requests",color:"#A39EFF",order:1};return{label:s.label,data:Object.values(n),backgroundColor:s.color,hoverBackgroundColor:s.color}}),labels:r}},D=t=>{if(t.grouping==="monthly"){const e=b(t.dateRange.from),r=b(t.dateRange.to),o=Math.abs(O(r,e))+1,a={};for(let s=0;s<o;s++)a[f(M(e,s))]=0;const n=Array.from({length:o}).map((s,l)=>l===o-1?"Current month":f(M(e,l)));return{newRecord:()=>({...a}),labels:n}}else{const e=b(t.dateRange.from),r=b(t.dateRange.to),o=Math.abs(X(r,e))+1,a={};for(let s=0;s<o;s++)a[ot(Y(e,s))]=0;const n=Array.from({length:o}).map((s,l)=>(l+1).toString());return{newRecord:()=>({...a}),labels:n}}},[Bt,...Lt]=Object.values(m).map(t=>t.label.toLowerCase()).toReversed(),k=`${Lt.toReversed().join(", ")}, and ${Bt}`,Nt=t=>t.grouping==="daily"?`A bar chart showing daily traffic usage for ${new Date(t.month).toLocaleDateString("en-US",{month:"long",year:"numeric"})}. Each date shows ${k} requests.`:`A bar chart showing monthly total traffic usage for the current month and the preceding ${t.monthsBack} months. Each month shows ${k} requests.`,R=(t,e=new Date)=>{const r=o=>L(o,"yyyy-MM-dd");if(t.grouping==="daily"){const o=C(t.month),a=r(o),n=r(w(o));return{from:a,to:n}}else{const o=r(P(B(e,t.monthsBack))),a=r(w(e));return{from:o,to:a}}},Ot=t=>{if(t.grouping==="daily")return 0;const e=Math.abs(O(new Date(t.dateRange.to),new Date(t.dateRange.from))),r=t.apiData.map(o=>o.dataPoints.filter(({period:a})=>a!==at).reduce((a,n)=>a+n.trafficTypes[0].count,0)).reduce((o,a)=>o+a,0);return Math.round(r/e)},It=(t,{from:e,to:r})=>{const o=`api/admin/metrics/connection?grouping=${t}&from=${e}&to=${r}`,{data:a,error:n,mutate:s}=I(T(o),Tt);return u.useMemo(()=>({refetch:()=>s(),result:a?{state:"success",data:a}:n?{state:"error",error:n}:{state:"loading"}}),[a,n,s])},Tt=t=>fetch(t).then(A("Metered Connections Metrics")).then(e=>e.json()),At=(t,{from:e,to:r})=>{const o=`api/admin/metrics/request?grouping=${t}&from=${e}&to=${r}`,{data:a,error:n,mutate:s}=I(T(o),$t);return u.useMemo(()=>({refetch:()=>s(),result:a?{state:"success",data:a}:n?{state:"error",error:n}:{state:"loading"}}),[a,n,s])},$t=t=>fetch(t).then(A("Consumption Requests Metrics")).then(e=>e.json()),Wt=(t,e,r)=>{var l,c;const{result:o}=rt(e.grouping,R(e,g)),{instanceStatus:a}=K(),n=((c=(l=a==null?void 0:a.prices)==null?void 0:l[(a==null?void 0:a.billing)==="pay-as-you-go"?"payg":"pro"])==null?void 0:c.traffic)??nt;return u.useMemo(()=>{if(o.state!=="success")return{chartData:{datasets:[],labels:[]},usageTotal:0,overageCost:0,estimatedMonthlyCost:0,requestSummaryUsage:0};const p=o.data,h=jt(p),y=st(p),E=lt(y,t,n),_=ct(p.apiData,t,g,n),U=e.grouping==="daily"?y:Ot(p);return{chartData:h,usageTotal:y,overageCost:E,estimatedMonthlyCost:_,requestSummaryUsage:U}},[JSON.stringify(o),t,JSON.stringify(e),n])},Gt=t=>{const{result:e}=It(t.grouping,R(t,g));return u.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const o=e.data;return{chartData:kt(o)}},[JSON.stringify(e),JSON.stringify(t)])},Jt=t=>{const{result:e}=At(t.grouping,R(t,g));return u.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const o=e.data;return{chartData:Pt(o)}},[JSON.stringify(e),JSON.stringify(t)])},Ht=d(Q)(({theme:t})=>({display:"grid",gap:t.spacing(5)})),Vt=d("div")(({theme:t})=>({display:"flex",flexFlow:"row wrap",justifyContent:"space-between",gap:t.spacing(2,4),alignItems:"start"})),Xt=d("span")(({theme:t})=>({fontWeight:"bold"})),qt=(t,e,r,o)=>({plugins:{annotation:{clip:!1,annotations:{line:{type:"line",borderDash:[5,5],yMin:r?r/30:0,yMax:r?r/30:0,borderColor:"gray",borderWidth:1,display:!!r&&!!o,label:{backgroundColor:"rgba(192, 192, 192, 0.8)",color:"black",padding:{top:10,bottom:10,left:10,right:10},content:"Average daily requests included in your plan",display:!!r}}}},legend:{position:"bottom",labels:{color:t.palette.text.primary,pointStyle:"circle",usePointStyle:!0,boxHeight:6,padding:15,boxPadding:5}},tooltip:{backgroundColor:t.palette.background.paper,titleColor:t.palette.text.primary,bodyColor:t.palette.text.primary,bodySpacing:6,padding:{top:20,bottom:20,left:30,right:30},borderColor:"rgba(0, 0, 0, 0.05)",borderWidth:3,usePointStyle:!0,caretSize:0,boxPadding:10,callbacks:{title:e}}},responsive:!0,scales:{x:{stacked:!0,ticks:{color:t.palette.text.secondary},grid:{display:!1}},y:{stacked:!0,ticks:{color:t.palette.text.secondary,maxTicksLimit:5,callback:it},grid:{drawBorder:!1}}},elements:{bar:{borderRadius:5}},interaction:{mode:"index",intersect:!1}}),Yt=t=>{const e=Z(),{locationSettings:r}=tt(),[o,a]=u.useState({grouping:"daily",month:S[0].key}),n=u.useMemo(()=>qt(e,s=>{if(o.grouping==="daily"){const l=bt[o.month];return new Date(l.year,l.month,Number.parseInt(s[0].label)).toLocaleDateString((r==null?void 0:r.locale)??"en-US",{month:"long",day:"numeric",year:"numeric"})}else{const l=C(s[0].label);return Number.isNaN(l.getTime())?"Current month to date":l.toLocaleDateString((r==null?void 0:r.locale)??"en-US",{month:"long",year:"numeric"})}},t,o.grouping==="daily"),[e,o,t]);return{chartDataSelection:o,setChartDataSelection:a,options:n}};export{Xt as B,zt as P,Ht as S,Vt as T,Wt as a,Gt as b,Ut as c,Jt as d,Nt as g,Yt as u};