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
JavaScript
import{G as N,H as U,j as i,ja as P,j7 as L,jb as g,jc as f,jd as W,je as G,s as d,i as J,J as H,r as u,jf as B,j8 as C,B as V,hi as X,jg as b,jh as O,ji as R,jj as Y,jk as K,fN as Q,jl as M,j9 as Z,ca as I,bh as T,bj as q,jm as tt,e7 as et,jn as ot,jo as at,jp as rt,jq as nt,dc as st,b as lt,bz as ct}from"./index-DEkgmbaI.js";import{f as it}from"./formatTickValue-rCxDfz30.js";const _t=(t=34)=>({id:"customLine",beforeDraw:e=>{var r,a,o,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/(((a=e.data.labels)==null?void 0:a.length)??1)*(((n=(o=e.options.datasets)==null?void 0:o.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=U;Object.defineProperty(x,"__esModule",{value:!0});var A=x.default=void 0,ut=dt(N()),pt=i,gt=(0,ut.default)((0,pt.jsx)("path",{d:"m7 14 5-5 5 5z"}),"ArrowDropUp");A=x.default=gt;const w=(t,e,r=!0)=>{const a=t.getFullYear(),o=t.getMonth(),n=f(t),s=W(t);return{key:n,year:a,month:o,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=[w(t,"Current month")],r=P(t);for(let a=1;a<12;a++){const o=L(r,a);e.push(w(o,void 0,o>=G))}return e},j=ht(g),bt=Object.fromEntries(j.map(t=>[t.key,t])),$="15rem",S=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:S(t)})),ft=d(J)(({theme:t})=>({whiteSpace:"nowrap",width:$,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:$,paddingBlock:t.spacing(2),display:"flex",flexFlow:"column",gap:t.spacing(2)})),xt=d("article")(({theme:t})=>({paddingInline:S(t)})),jt=d("hgroup")(({theme:t})=>({h3:{margin:0,fontSize:t.typography.h3.fontSize},p:{color:t.palette.text.secondary,fontSize:t.typography.body2.fontSize}})),St=d("ul")(({theme:t})=>({listStyle:"none",padding:0,display:"grid",gridTemplateColumns:"repeat(4, 1fr)",rowGap:t.spacing(1)})),vt=d("article")(({theme:t})=>({display:"flex",width:"100%",flexFlow:"column",gap:t.spacing(.5)})),Dt=d("p")(({theme:t})=>({paddingInline:S(t),fontSize:t.typography.body2.fontSize,margin:0,color:t.palette.text.secondary,fontWeight:"bold"})),Rt=d("ul")(({theme:t})=>({listStyle:"none",margin:0,padding:0,width:"100%",li:{width:"100%"}})),Mt=d(H)(({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`})),[a,o]=u.useState(!1),n=u.useRef(null),s=c=>{e(c),o(!1)},l=t.grouping==="daily"?t.month===B(new Date,"yyyy-MM")?"Current month":C(t.month).toLocaleDateString("en-US",{month:"long",year:"numeric"}):`Last ${t.monthsBack} months`;return i.jsxs(V,{ref:n,children:[i.jsx(ft,{endIcon:a?i.jsx(A,{}):i.jsx(X,{}),variant:"outlined",disableRipple:!0,onClick:()=>o(!0),children:l}),i.jsxs(Mt,{open:a,anchorEl:n.current,onClose:()=>o(!1),anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},children:[i.jsxs(Ct,{children:[i.jsxs(xt,{children:[i.jsxs(jt,{children:[i.jsx("h3",{children:"Select month"}),i.jsx("p",{children:"Last 12 months"})]}),i.jsx(St,{children:j.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(vt,{children:[i.jsx(Dt,{children:"Range"}),i.jsx(Rt,{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}},wt=(t,e)=>{const{newRecord:r,labels:a}=v(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:a}},kt=t=>{const{newRecord:e,labels:r}=v(t);return{datasets:t.apiData.map(o=>{const n=e();for(const l of Object.values(o.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}=v(t);return{datasets:t.apiData.map(o=>{const n=e();for(const l of Object.values(o.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}},v=t=>{if(t.grouping==="monthly"){const e=b(t.dateRange.from),r=b(t.dateRange.to),a=Math.abs(O(r,e))+1,o={};for(let s=0;s<a;s++)o[f(R(e,s))]=0;const n=Array.from({length:a}).map((s,l)=>l===a-1?"Current month":f(R(e,l)));return{newRecord:()=>({...o}),labels:n}}else{const e=b(t.dateRange.from),r=b(t.dateRange.to),a=Math.abs(Y(r,e))+1,o={};for(let s=0;s<a;s++)o[K(Q(e,s))]=0;const n=Array.from({length:a}).map((s,l)=>(l+1).toString());return{newRecord:()=>({...o}),labels:n}}},[Lt,...Bt]=Object.values(m).map(t=>t.label.toLowerCase()).toReversed(),k=`${Bt.toReversed().join(", ")}, and ${Lt}`,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.`,D=(t,e=new Date)=>{const r=a=>B(a,"yyyy-MM-dd");if(t.grouping==="daily"){const a=C(t.month),o=r(a),n=r(M(a));return{from:o,to:n}}else{const a=r(P(L(e,t.monthsBack))),o=r(M(e));return{from:a,to:o}}},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(a=>a.dataPoints.filter(({period:o})=>o!==Z).reduce((o,n)=>o+n.trafficTypes[0].count,0)).reduce((a,o)=>a+o,0);return Math.round(r/e)},It=(t,{from:e,to:r})=>{const a=`api/admin/metrics/connection?grouping=${t}&from=${e}&to=${r}`,{data:o,error:n,mutate:s}=I(T(a),Tt);return u.useMemo(()=>({refetch:()=>s(),result:o?{state:"success",data:o}:n?{state:"error",error:n}:{state:"loading"}}),[o,n,s])},Tt=t=>fetch(t).then(q("Metered Connections Metrics")).then(e=>e.json()),qt=(t,{from:e,to:r})=>{const a=`api/admin/metrics/request?grouping=${t}&from=${e}&to=${r}`,{data:o,error:n,mutate:s}=I(T(a),At);return u.useMemo(()=>({refetch:()=>s(),result:o?{state:"success",data:o}:n?{state:"error",error:n}:{state:"loading"}}),[o,n,s])},At=t=>fetch(t).then(q("Consumption Requests Metrics")).then(e=>e.json()),Ut=(t,e,r)=>{var l,c;const{result:a}=tt(e.grouping,D(e,g)),{instanceStatus:o}=et(),n=((c=(l=o==null?void 0:o.prices)==null?void 0:l[(o==null?void 0:o.billing)==="pay-as-you-go"?"payg":"pro"])==null?void 0:c.traffic)??ot;return u.useMemo(()=>{if(a.state!=="success")return{chartData:{datasets:[],labels:[]},usageTotal:0,overageCost:0,estimatedMonthlyCost:0,requestSummaryUsage:0};const p=a.data,h=wt(p),y=at(p),E=rt(y,t,n),_=nt(p.apiData,t,g,n),z=e.grouping==="daily"?y:Ot(p);return{chartData:h,usageTotal:y,overageCost:E,estimatedMonthlyCost:_,requestSummaryUsage:z}},[JSON.stringify(a),t,JSON.stringify(e),n])},Wt=t=>{const{result:e}=It(t.grouping,D(t,g));return u.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const a=e.data;return{chartData:kt(a)}},[JSON.stringify(e),JSON.stringify(t)])},Gt=t=>{const{result:e}=qt(t.grouping,D(t,g));return u.useMemo(()=>{if(e.state!=="success")return{chartData:{datasets:[],labels:[]}};const a=e.data;return{chartData:Pt(a)}},[JSON.stringify(e),JSON.stringify(t)])},Jt=d(st)(({theme:t})=>({display:"grid",gap:t.spacing(5)})),Ht=d("div")(({theme:t})=>({display:"flex",flexFlow:"row wrap",justifyContent:"space-between",gap:t.spacing(2,4),alignItems:"start"})),Vt=d("span")(({theme:t})=>({fontWeight:"bold"})),$t=(t,e,r)=>({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,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}}),Xt=t=>{const e=lt(),{locationSettings:r}=ct(),[a,o]=u.useState({grouping:"daily",month:j[0].key}),n=u.useMemo(()=>$t(e,s=>{if(a.grouping==="daily"){const l=bt[a.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),[e,a]);return{chartDataSelection:a,setChartDataSelection:o,options:n}};export{Vt as B,zt as P,Jt as S,Ht as T,Ut as a,Wt as b,_t as c,Gt as d,Nt as g,Xt as u};