@unblind/react 0.1.0-alpha.2 → 0.1.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -2
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +184 -118
- package/dist/index.d.ts +184 -118
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +18 -7
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var We=Object.create;var K=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Ye=Object.getOwnPropertyNames;var Xe=Object.getPrototypeOf,Je=Object.prototype.hasOwnProperty;var Ze=(e,t)=>{for(var r in t)K(e,r,{get:t[r],enumerable:!0})},ge=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ye(t))!Je.call(e,o)&&o!==r&&K(e,o,{get:()=>t[o],enumerable:!(i=Ke(t,o))||i.enumerable});return e};var Y=(e,t,r)=>(r=e!=null?We(Xe(e)):{},ge(t||!e||!e.__esModule?K(r,"default",{value:e,enumerable:!0}):r,e)),et=e=>ge(K({},"__esModule",{value:!0}),e);var Ut={};Ze(Ut,{Chart:()=>ie,Divider:()=>re,TimeseriesChart:()=>$e,UnblindClientProvider:()=>X,UnblindProvider:()=>be,UnblindScope:()=>J,useLogs:()=>Se,useMetrics:()=>we,useRefresh:()=>se,useScope:()=>j,useTheme:()=>te,useTimeseries:()=>Z,useUnblindClientConfig:()=>S,useUsage:()=>Ce});module.exports=et(Ut);var B=require("@tanstack/react-query"),N=require("react"),ae=require("react/jsx-runtime"),he=(0,N.createContext)(void 0);function X({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:i="/api/unblind",fetchImpl:o}){let s=(0,N.useMemo)(()=>{if(t)return t;let n={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},l={defaultOptions:{queries:n}};return r?new B.QueryClient({...r,defaultOptions:{...r.defaultOptions,queries:{...n,...r.defaultOptions?.queries}}}):new B.QueryClient(l)},[t,r]),a=(0,N.useMemo)(()=>({apiBaseUrl:i,fetchImpl:o}),[i,o]);return(0,ae.jsx)(B.QueryClientProvider,{client:s,children:(0,ae.jsx)(he.Provider,{value:a,children:e})})}function S(){let e=(0,N.useContext)(he);if(!e)throw new Error("useUnblindConfig must be used within an UnblindClientProvider. Please wrap your app or component tree with <UnblindClientProvider>.");return e}function se(){let e=(0,B.useQueryClient)();return(0,N.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var A=require("react"),R=require("react/jsx-runtime"),le=(0,A.createContext)(void 0);function J({children:e,timeRange:t,startTime:r,endTime:i,interval:o,attributes:s,groupBy:a,operator:n,appearance:l}){let c=(0,A.useContext)(le),p=l?.components?.Loading,u=l?.components?.Error,m=l?.components?.Tooltip,d=(0,A.useMemo)(()=>{if(!(!p&&!u&&!m))return{components:{...p&&{Loading:p},...u&&{Error:u},...m&&{Tooltip:m}}}},[p,u,m]),h=(0,A.useMemo)(()=>({timeRange:t??c?.timeRange,startTime:r??c?.startTime,endTime:i??c?.endTime,interval:o??c?.interval,attributes:s??c?.attributes,groupBy:a??c?.groupBy,operator:n??c?.operator,appearance:d??c?.appearance}),[t,r,i,o,s,a,n,d,c]);return(0,R.jsx)(le.Provider,{value:h,children:e})}var tt=()=>(0,R.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-gray-500",children:"Loading data..."}),rt=({error:e})=>(0,R.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-red-500",children:e?.message??"Something went wrong"}),ot=()=>(0,R.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,R.jsxs)("div",{className:"text-center",children:[(0,R.jsx)("div",{className:"mx-auto flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 dark:bg-zinc-800",children:(0,R.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"size-5 text-gray-400 dark:text-gray-500",children:(0,R.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})})}),(0,R.jsx)("p",{className:"mt-2 text-sm text-gray-500 dark:text-gray-400",children:"No data available for this time range"})]})}),it=["#7c3aed","#eab308","#2563eb","#dc2626","#16a34a","#f97316","#0891b2","#9333ea","#ca8a04","#4f46e5","#0d9488","#be185d"],nt="6h";function j(){let e=(0,A.useContext)(le);return{timeRange:e?.timeRange||nt,startTime:e?.startTime,endTime:e?.endTime,interval:e?.interval,attributes:e?.attributes,groupBy:e?.groupBy,operator:e?.operator,appearance:{components:{Loading:e?.appearance?.components?.Loading??tt,Error:e?.appearance?.components?.Error??rt,Empty:e?.appearance?.components?.Empty??ot,Tooltip:e?.appearance?.components?.Tooltip},colors:e?.appearance?.colors||it}}}var ce=require("react/jsx-runtime");function be({children:e,queryClient:t,apiBaseUrl:r,fetchImpl:i,timeRange:o,startTime:s,endTime:a,interval:n,attributes:l,groupBy:c,operator:p,appearance:u}){return(0,ce.jsx)(X,{queryClient:t,apiBaseUrl:r,fetchImpl:i,children:(0,ce.jsx)(J,{timeRange:o,startTime:s,endTime:a,interval:n,attributes:l,groupBy:c,operator:p,appearance:u,children:e})})}var ye=require("@tanstack/react-query");function we(){let{apiBaseUrl:e,fetchImpl:t=fetch}=S(),r=(0,ye.useQuery)({queryKey:["unblind","metrics"],queryFn:async()=>{let i=await t(`${e}/metrics`,{headers:{"Content-Type":"application/json"}});if(!i.ok)throw new Error("Error loading metrics metadata");if(i.status===200){let{data:o}=await i.json();return o}else throw new Error("Unexpected status code")}});return{metrics:r.data,isLoading:r.isLoading,hasError:r.isError,refetch:r.refetch}}var ve=require("@tanstack/react-query"),q=require("react");var xe=Y(require("ms"));function at(e){let t=Date.now();return[t-(0,xe.default)(e),t]}function H(e,t,r){let i,o;if(typeof t=="number"&&typeof r=="number")i=t,o=r;else if(e){let[s,a]=at(e);i=s,o=a}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[i,o]}function Z({queries:e,timeRange:t,startTime:r,endTime:i,interval:o}){let{apiBaseUrl:s,fetchImpl:a=fetch}=S(),n=(0,q.useMemo)(()=>e.map(b=>b.metrics.join(",")).join(","),[e]),l=(0,q.useMemo)(()=>e.map(b=>{let T=b.attributes;if(!T)return"";let y=Object.keys(T);return y.length===0?"":y.map(x=>x+":"+T[x]?.join(",")).join(",")}).join(","),[e]),c=(0,q.useMemo)(()=>e.map(b=>b.operator),[e]),p=(0,q.useMemo)(()=>e.map(b=>b.groupBy).join(", "),[e]),m=(0,ve.useQuery)({queryKey:["unblind","timeseries",n,l,r,i,t,o,c,p],queryFn:async()=>{if(!n)throw new Error("Missing required parameters");if(n.length===0)throw new Error("No series provided");let[b,T]=H(t,r,i),y={queries:e,startTime:b,endTime:T,interval:o},x=await a(`${s}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(y)});if(!x.ok)throw new Error("Error fetching metric");let{series:C,times:P,metadata:E}=await x.json();if(!C)throw console.error("Series not found"),new Error("Series not found");return{series:C,times:P,metadata:E}},enabled:!!n&&(typeof r=="number"&&typeof i=="number"||!!t)}),{metadata:d,series:h,times:k}=(0,q.useMemo)(()=>m.data?{series:m.data.series,times:m.data.times,metadata:m.data.metadata}:{series:[],times:[],metadata:{}},[m]),w=m.isLoading,f=m.isFetching,g=m.isError;return{data:{series:h,times:k,metadata:d},isLoading:w,isFetching:f,hasError:g,refetch:m.refetch}}var ke=require("@tanstack/react-query"),Te=require("react");function Ce({timeRange:e,startTime:t,endTime:r}){let{apiBaseUrl:i,fetchImpl:o=fetch}=S(),a=(0,ke.useQuery)({queryKey:["unblind","usage",e,t,r],queryFn:async()=>{let[p,u]=H(e,t,r),m=`${i}/tenants/usage`,d=await o(m,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:p,endTime:u})});if(!d.ok)throw new Error("Error fetching usage");let{data:h}=await d.json();if(!h)throw new Error("usage not found");return h},enabled:typeof t=="number"&&typeof r=="number"||!!e}),n=(0,Te.useMemo)(()=>a.data?a.data||[]:[],[a]),l=a.isLoading||a.isRefetching,c=a.isError;return{usage:n,isLoading:l,hasError:c,refetch:a.refetch}}var Pe=require("@tanstack/react-query"),Ue=require("react");function Se({timeRange:e,filters:t,startTime:r,endTime:i}){let{apiBaseUrl:o,fetchImpl:s=fetch}=S(),a=typeof r=="number"&&typeof i=="number"||!!e,n=(0,Pe.useInfiniteQuery)({queryKey:["unblind","logs",e,t.map(c=>c.name+":"+c.value).sort().join(",")],queryFn:async({pageParam:c})=>{let p=t.reduce((C,P)=>(C[P.name]||(C[P.name]=[]),C[P.name].push(P.value),C),{}),{body:u=[],severity:m=[],"service.name":d=[],"trace.id":h=[],"span.id":k=[],...w}=p,[f,g]=H(e,r,i),b=Date.now(),T=await s(`${o}/tenants/logs`,{method:"POST",body:JSON.stringify({filter:{attributes:w,body:u,severity:m,traceId:h,spanId:k,service:d},startTime:f,endTime:g,pagination:{page:c}}),headers:{"Content-Type":"application/json"}});if(!T.ok)throw new Error("Error fetching logs");let{data:y,next_page:x}=await T.json();if(!y)throw new Error("logs not found");return{data:y,next_page:x}},enabled:a,initialPageParam:void 0,getNextPageParam:c=>c.next_page});return{logs:(0,Ue.useMemo)(()=>n.data?n.data.pages.flatMap(c=>c.data||[]):[],[n.data]),isLoading:n.isLoading,hasError:n.isError,hasNextPage:n.hasNextPage??!1,fetchNextPage:n.fetchNextPage,isFetchingNextPage:n.isFetchingNextPage,refetch:n.refetch}}var ee=require("react");function te(){let[e,t]=(0,ee.useState)(!1);return(0,ee.useEffect)(()=>{let r=()=>t(document.documentElement.classList.contains("dark"));return r(),window.addEventListener("storage",r),window.addEventListener("theme-change",r),()=>{window.removeEventListener("storage",r),window.removeEventListener("theme-change",r)}},[]),e}var oe=require("react"),Ge=Y(require("uplot"));var W=Y(require("uplot")),je=require("@grafana/data");var L=require("@grafana/data");var U={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},_={second:[1,2,5,10,15,30],minute:[1,2,5,10,15,30],hour:[1,2,3,4,6,8,12],day:[1,2,3,7,14],month:[1,2,3,6],year:[1,2,5,10,20,50,100]};function st(e,t,r,i){if(t>U.day){let o=L.systemDateFormats.interval.year,s=Math.round(U.year/U.day)*U.day;return Math.round(t/U.day)*U.day===s?o=L.systemDateFormats.interval.year:t<=U.year?o=L.systemDateFormats.interval.month:o=L.systemDateFormats.interval.day,e.map(n=>(0,L.dateTimeFormat)(n,{format:o,timeZone:i}))}return e.map(o=>{let s=new Date(o),a=t<U.minute,n=t<U.second,l=s.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:i});return(l==="00:00"||l==="24:00")&&!a&&!n?s.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:i}):s.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:a?"2-digit":void 0,fractionalSecondDigits:n?3:void 0,hour12:!1,timeZone:i})})}function Me(e){let t=[{size:U.second/1e3,increments:_.second},{size:U.minute/1e3,increments:_.minute},{size:U.hour/1e3,increments:_.hour},{size:U.day/1e3,increments:_.day},{size:U.month/1e3,increments:_.month},{size:U.year/1e3,increments:_.year}];for(let o of t)for(let s of o.increments){let a=o.size*s;if(a>=e)return{increment:a*1e3,multiplier:s}}let r=t[t.length-1],i=r.increments[r.increments.length-1];return{increment:r.size*i*1e3,multiplier:i}}function Re(e,t,r){return[t,r]}function lt(e,t,r,i){let o=r-t,s=e.width,a=Math.floor(s/100),n=o/a,{increment:l,multiplier:c}=Me(n),p=l/1e3,u=[];if(o<12*3600){let d=Math.ceil(t/p)*p;for(;d<=r;d+=p)u.push(d);return u}if(o<3*86400){if(l>=6*3600*1e3){let h=l/1e3/3600,k=new Date(t*1e3);if(i==="UTC"){let f=k.getUTCHours(),g=Math.floor(f/h)*h;k.setUTCHours(g,0,0,0)}else{let f=k.getHours(),g=Math.floor(f/h)*h;k.setHours(g,0,0,0)}let w=k.getTime()/1e3;for(w<t&&(w+=p);w<=r;)u.push(w),w+=p;return u}let d=Math.ceil(t/p)*p;for(;d<=r;d+=p)u.push(d);return u}if(l>=U.day){let d=new Date(t*1e3);i==="UTC"?(d.setUTCHours(0,0,0,0),d.getTime()/1e3<t&&d.setUTCDate(d.getUTCDate()+c)):(d.setHours(0,0,0,0),d.getTime()/1e3<t&&d.setDate(d.getDate()+c));let h=d.getTime()/1e3;for(;h<=r;)u.push(h),i==="UTC"?d.setUTCDate(d.getUTCDate()+c):d.setDate(d.getDate()+c),h=d.getTime()/1e3;return u}let m=Math.ceil(t/p)*p;for(;m<=r;m+=p)u.push(m);return u}function Ee(e,t,r){return t.length===0?[]:t.map((i,o)=>o===0||o===t.length-1?(0,L.dateTimeFormatTimeAgo)(i*1e3,{timeZone:r}):"")}function ct(e,t,r){let i=e.scales.x,o=((i?.max??0)-(i?.min??0))*1e3,s=Math.floor(e.width/100),a=o/1e3/s,{increment:n}=Me(a),l=t.map(c=>c*1e3);return st(l,n,o,r)}function Ne(e,t=!1){let r=t?(s,a,n,l)=>Re(s,n,l):(s,a,n,l)=>lt(s,n,l,e),i=t?(s,a)=>Ee(s,a,e):(s,a)=>ct(s,a,e),o=t?(s,a,n,l,c)=>{let u=document.createElement("canvas").getContext("2d");if(!u)return 0;u.font=F;let m=Ee(s,Re(s,n,l),e),d=Math.max(u.measureText(m[0]||"").width,u.measureText(m[1]||"").width);return Math.ceil(d/2)+15}:void 0;return{font:F,labelFont:F,grid:{show:!1,width:.5},ticks:{width:.5},splits:r,values:i,size:20}}var Q=require("@floating-ui/dom"),Ve=Y(require("uplot"));var Le=require("react-dom/client"),pe=class{overlay=null;reactRoot=null;initialize(){this.overlay||(this.overlay=document.createElement("div"),this.overlay.id="unblind-tooltip-overlay",this.overlay.style.display="none",this.overlay.style.position="fixed",this.overlay.style.pointerEvents="none",this.overlay.style.zIndex="9999",document.body.appendChild(this.overlay),this.reactRoot=(0,Le.createRoot)(this.overlay))}getOverlay(){return this.overlay}render(t){this.reactRoot&&this.reactRoot.render(t)}show(){this.overlay&&(this.overlay.style.display="block")}hide(){this.overlay&&(this.overlay.style.display="none"),this.render(null)}destroy(){this.reactRoot&&(this.reactRoot.unmount(),this.reactRoot=null),this.overlay&&(this.overlay.remove(),this.overlay=null)}},G=new pe;var de=require("@grafana/data"),Ie=require("react");var ze=require("react/jsx-runtime");function re({className:e="h-px bg-gray-200 border-gray-200 dark:bg-white/15",...t}){return(0,ze.jsx)("hr",{role:"presentation",...t,className:e})}var v=require("react/jsx-runtime");function pt(e){return typeof e.metric=="string"?e.metric:e.metric?.textContent||"Unknown Metric"}function Ae(e){let t=e.attributes||{};if(t["service.name"])return String(t["service.name"]);let i=Object.keys(t)[0];return i?String(t[i]):"z-fallback"}function De(e){return[...e].sort((t,r)=>(Number(r.value)||0)-(Number(t.value)||0))}function dt(e){return[...e].sort((t,r)=>Ae(t).localeCompare(Ae(r)))}function ut(e){let t={};return e.forEach(r=>{let i=pt(r);t[i]||(t[i]=[]),t[i].push(r)}),t}function mt(e,t){let r=ut(e);return Object.keys(r).sort((o,s)=>o.localeCompare(s)).map(o=>{let s=r[o];if(!s)return{metricName:o,items:[]};let a=t?De(s):dt(s);return{metricName:o,items:a}})}function ft({item:e,groupIdx:t,idx:r}){let i=e.attributes||{},o=Object.entries(i),s=typeof e.metric=="string"?e.metric:e.metric?.textContent||"Unknown",a=o,n=o.find(([l])=>l==="service.name");return n?(s=String(n[1]),a=o.filter(([l])=>l!=="service.name")):o.length>0&&o[0]&&(s=`${o[0][0]}: ${o[0][1]}`,a=o.slice(1)),(0,v.jsxs)("div",{className:"group flex flex-col px-3 py-1 hover:bg-slate-50 dark:hover:bg-white/5 transition-colors",children:[(0,v.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,v.jsxs)("div",{className:"flex items-center gap-2.5 min-w-0 overflow-hidden",children:[(0,v.jsx)("span",{className:"size-2 mt-0.5 shrink-0 rounded-full shadow-sm ring-1 ring-black/5 dark:ring-white/10",style:{backgroundColor:e.color}}),(0,v.jsx)("span",{className:"truncate font-medium text-slate-600 dark:text-slate-300",title:s,children:s})]}),(0,v.jsx)("div",{className:"font-semibold tabular-nums text-slate-900 dark:text-white whitespace-nowrap",children:e.formattedValue??(0,v.jsx)("span",{className:"font-normal text-slate-400",children:"\u2014"})})]}),a.length>0&&(0,v.jsx)("div",{className:"mt-0.5 flex flex-wrap gap-x-3 gap-y-0.5 pl-4.5 text-xs text-slate-500 dark:text-slate-400",children:a.map(([l,c])=>(0,v.jsxs)("span",{className:"flex items-center gap-1",children:[(0,v.jsxs)("span",{className:"opacity-70",children:[l,":"]}),(0,v.jsx)("span",{className:"font-medium text-slate-600 dark:text-slate-300",children:String(c)})]},l))})]},`item-${t}-${r}`)}function gt({group:e,groupIdx:t,hasAttributes:r}){return(0,v.jsxs)("div",{className:"flex flex-col",children:[r&&(0,v.jsx)("div",{className:`sticky top-0 z-10 bg-white/95 dark:bg-zinc-900/95 backdrop-blur-sm px-3 py-1.5 font-semibold text-slate-900 dark:text-white ${t>0?"mt-2 border-t border-gray-100 dark:border-white/5 pt-3":""}`,children:e.metricName}),(0,v.jsx)("div",{className:"flex flex-col gap-1",children:e.items.map((i,o)=>(0,v.jsx)(ft,{item:i,groupIdx:t,idx:o},`item-${t}-${o}`))})]},e.metricName)}function Oe({timestamp:e,items:t,timeZone:r,spansMultipleDays:i,orderByValues:o,hasAttributes:s}){let a=i?(0,de.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm:ss",timeZone:r}):(0,de.dateTimeFormat)(e*1e3,{format:"HH:mm:ss",timeZone:r}),n=(0,Ie.useMemo)(()=>{let l=mt(t,o);if(!s&&o&&l.length>0){let c=l.flatMap(m=>m.items),p=De(c);return[{metricName:l[0]?.metricName||"Metrics",items:p}]}return l},[t,o,s]);return(0,v.jsxs)("div",{style:{fontSize:"13px"},className:"flex w-[320px] flex-col gap-1 text-sm rounded-lg text-slate-900 dark:text-slate-200 border border-gray-200/80 bg-white shadow-xl ring-1 ring-gray-200/40 dark:ring-zinc-800/40 dark:border-white/10 dark:bg-zinc-900",children:[(0,v.jsx)("div",{className:"flex items-center justify-between px-3 pt-2.5 font-medium text-slate-700 dark:text-slate-100",children:a}),(0,v.jsx)(re,{className:"my-1 border-gray-100 dark:border-white/5"}),n.length>0?(0,v.jsx)("div",{className:"flex flex-col pb-2",children:n.map((l,c)=>(0,v.jsx)(gt,{group:l,groupIdx:c,hasAttributes:s},l.metricName))}):(0,v.jsx)("div",{className:"px-3 pb-3 italic text-zinc-400 text-xs",children:"No data available"})]})}var ue=require("react/jsx-runtime"),ht=4,bt=8;function yt(e,t){if(!e||e.length===0)return!1;let r=e[0],i=e[e.length-1];if(r==null||i==null)return!1;let o=new Date(r*1e3),s=new Date(i*1e3),a=n=>t==="UTC"?`${n.getUTCFullYear()}-${n.getUTCMonth()}-${n.getUTCDate()}`:n.toLocaleDateString(void 0,{timeZone:t});return a(o)!==a(s)}function wt(e,t){let r=!1;for(let o=1;o<e.series.length;o++)if(e.data[o]?.[t]!=null){r=!0;break}if(r)return t;let i=e.data[0].length;for(let o=1;t+o<i||t-o>=0;o++){let s=t-o,a=t+o;if(s>=0){for(let n=1;n<e.series.length;n++)if(e.data[n]?.[s]!=null)return s}if(a<i){for(let n=1;n<e.series.length;n++)if(e.data[n]?.[a]!=null)return a}}return t}function xt(e,t,r,i,o){let s=!1,a=[];for(let n=1;n<e.series.length;n++){let l=e.data[n]?.[t]??null;if(i&&l!=null&&n>1){let k=e.data[n-1]?.[t]??0;l=l-k}let c=e.series[n],p=o?.[n-1],u=c?.label??`Series ${n}`,m=c?.stroke,d=typeof m=="function"?m(Ve.default,n):m??"#ffffff00",h=l==null?void 0:r?r(l):String(l);p?.attributes&&Object.keys(p?.attributes).length>0&&(s=!0),a.push({metric:u,color:d,value:l===null?void 0:l,formattedValue:h,attributes:p?.attributes})}return{items:a,hasAttributes:s}}async function vt(e,t){let{x:r,y:i}=await(0,Q.computePosition)({getBoundingClientRect:()=>({x:t.left,y:t.top,width:0,height:0,top:t.top,left:t.left,right:t.left,bottom:t.top})},e,{placement:"top-start",strategy:"fixed",middleware:[(0,Q.offset)({mainAxis:ht,crossAxis:bt}),(0,Q.flip)()]});e.style.left=`${r}px`,e.style.top=`${i}px`}function Be(e,t,r,i,o,s){let a,n,l,c=!1;function p(){let d=a.getBoundingClientRect();n=d.left,l=d.top}function u(){G.hide()}function m(){G.show()}return{hooks:{init:d=>{G.initialize(),a=d.over,window.addEventListener("scroll",p,!0),window.addEventListener("resize",p),a.onmouseenter=()=>{c=!0,m()},a.onmouseleave=()=>{c=!1,u()},p()},setSize:()=>{p()},setCursor:d=>{let{left:h,top:k,idx:w}=d.cursor;if(!c||w==null){u();return}let g=d.data[0],b=yt(g,r),T=wt(d,w),y=d.data[0][T];if(y===void 0)return;let{items:x,hasAttributes:C}=xt(d,T,e,t,o),P={left:(h||0)+n,top:(k||0)+l};m();let E=i,D=E?(0,ue.jsx)(E,{timestamp:y,items:x,timeZone:r}):(0,ue.jsx)(Oe,{timestamp:y,items:x,timeZone:r,spansMultipleDays:b,stacked:t,hasAttributes:C,orderByValues:s});G.render(D);let O=G.getOverlay();O&&vt(O,P)},destroy(){window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p)}}}}var F='11px "Inter", sans-serif';var Fe=(e,t)=>{let r=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!r&&t.unit?r=t.unit.code:r&&t.unit.code!==r&&(r=void 0)),r},me=(e,t,r)=>Array.isArray(r)?r[t]:r(e,t),kt=e=>{let t=W.default.paths.bars({size:[.6,100],radius:0,gap:0}),r=W.default.paths.linear({alignGaps:0}),i=W.default.paths.spline({alignGaps:1}),o=W.default.paths.stepped({alignGaps:1});switch(e){case"line":return r;case"bar":return t;case"area":return r;case"step":return o;case"spline":return i;default:return r}},Tt=(e,t,r,i)=>{switch(i){case"area":return me(e,t,r);case"bar":return me(e,t,r);default:return}},Ct=e=>{switch(e){case"bar":return 1;case"line":return 2;case"area":return 2;case"step":return 1.5;default:return 1}},He=(e,t,r,i,o,s,a,n,l,c,p)=>{let u=e?.clientWidth??1050,m=e?.clientHeight??250,d=typeof t=="string"?String(t).toLowerCase().replaceAll("by","bytes"):t,h=(0,je.getValueFormat)(d==="1"?null:d),k=Ct(i),w={width:u,height:m,scales:{y:{range:{min:{mode:1,soft:0},max:{pad:2}}}},plugins:[Be(f=>{let g=h(f,2);return g.text+(g.suffix?.trim()||"")},o,n,l,r,p)],padding:c?[10,15,10,15]:[8,15,8,15],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:(f,g,b)=>{let T=f.posToVal(g,"x"),y=f.data[0];if(!y||y.length===0)return[g,b];let x=0,C=0,P=y.length-1;for(;P-C>1;){let z=Math.floor((C+P)/2),$=y[z];$!=null&&$<T?C=z:P=z}let E=y[C],D=y[P];E!=null&&D!=null?x=Math.abs(E-T)<Math.abs(D-T)?C:P:E!=null?x=C:D!=null&&(x=P);let O=x;for(let z=x;z>=0;z--){let $=!1;for(let ne=1;ne<f.data.length;ne++){let fe=f.data[ne];if(fe&&fe[z]!=null){$=!0;break}}if($){O=z;break}}let V=y[O];return V==null?[g,b]:[f.valToPos(V,"x"),b]}},series:[{},...r.map((f,g)=>({label:f.metric,stroke:me(f,g,a),width:k,points:{show:!1},spanGaps:!0,paths:kt(i),fill:Tt(f,g,a,i)}))],axes:[Ne(n,c),qe(h)],legend:{show:!1}};if(s){let f=w.axes?.[0],g=w.axes?.[1];f&&(f.stroke="#dadada",f.grid&&(f.grid.stroke="#2c3235")),g&&(g.stroke="#dadada",g.grid&&(g.grid.stroke="#2c3235"))}else{let f=w.axes?.[0],g=w.axes?.[1];f&&(f.stroke="#45556c"),g&&(g.stroke="#45556c")}return w};var Pt=(e,t,r,i)=>{let o=e.axes[r];if(i>1)return o?._size;let s=(o?.ticks?.size||0)+(o?.gap||0),a=(t??[]).reduce((n,l)=>l.length>n.length?l:n,"");return a!=""&&(e.ctx.font=o?.font?.[0]??e.ctx.font,s+=e.ctx.measureText(a).width/devicePixelRatio),Math.ceil(s)};function qe(e){return{gap:0,font:F,labelFont:F,grid:{show:!0,width:.5},ticks:{width:.5},values:(t,r)=>r.map(i=>{let o=e(i);return o.text+(o.suffix?.trim()||"")}),size:Pt}}function _e(e,t){let r=[],i=e[0],o=i.length,s=Array(o).fill(0),a=[i];return e.forEach((n,l)=>{l!==0&&(t?a.push(n):a.push(n.map((c,p)=>s[p]=s[p]+(c||0))))}),e.forEach((n,l)=>{l===0||t||r.push({series:[e.findIndex((c,p)=>p>l),l]})}),{data:a,bands:r.filter(n=>n.series[1]>-1)}}var Qe=require("react/jsx-runtime");function ie(e){let{times:t,series:r,metadata:i,type:o,className:s,timeZone:a,options:n,tooltipAppearance:l,colors:c,orderByValues:p}=e,u=(0,oe.useRef)(null),m=te(),d=j(),h=c||d.appearance.colors;return(0,oe.useEffect)(()=>{if(!r||r.length===0){console.warn("No series provided");return}let k=[t],w;r.forEach(x=>{let C=i[x.metric];w=Fe(w,C),k.push(x.values)});let f=o==="bar"||o==="area",g=_e(k,!f),b=u.current,T=He(b,w,r,o,f,m,h,a,l,p),y=null;if(b){T.bands=g.bands,y=new Ge.default({...T,...n},g.data,b);let x=new ResizeObserver(()=>{y?.setSize({width:b.clientWidth,height:b.clientHeight})});return x.observe(b),()=>{y?.destroy(),x.disconnect()}}},[r,t,o,m,i,a,l,h,p]),(0,Qe.jsx)("div",{ref:u,className:s})}var I=require("react/jsx-runtime");function $e({metrics:e,operator:t,attributes:r,groupBy:i,timeRange:o,startTime:s,endTime:a,interval:n,type:l="line",className:c,appearance:p}){let u=j(),m=o??u.timeRange,d=s??u.startTime,h=a??u.endTime,k=n??u.interval,w=r??u.attributes,f=i??u.groupBy,g=t??u.operator,b=p?.colors??u.appearance.colors,T=p?.orderByValues??u.appearance.orderByValues,{isLoading:y,data:x,hasError:C}=Z({queries:e.map(M=>({metrics:[M],operator:g,attributes:w,groupBy:f})),timeRange:m,startTime:d,endTime:h,interval:k}),{series:P,times:E,metadata:D}=x,O=P.every(M=>M.isEmpty),V=c||"h-full w-full";if(y){let M=p?.components?.Loading??u.appearance.components.Loading;return(0,I.jsx)("div",{className:V,children:(0,I.jsx)(M,{})})}if(O){let M=p?.components?.Empty??u.appearance.components.Empty;return(0,I.jsx)("div",{className:V,children:(0,I.jsx)(M,{})})}if(C){let M=p?.components?.Error??u.appearance.components.Error;return(0,I.jsx)("div",{className:V,children:(0,I.jsx)(M,{})})}return(0,I.jsx)(ie,{times:E,series:P,metadata:D,type:l,className:V,tooltipAppearance:p?.components?.Tooltip??u.appearance.components.Tooltip,colors:b,orderByValues:T})}0&&(module.exports={Chart,Divider,TimeseriesChart,UnblindClientProvider,UnblindProvider,UnblindScope,useLogs,useMetrics,useRefresh,useScope,useTheme,useTimeseries,useUnblindClientConfig,useUsage});
|
|
1
|
+
"use strict";var Ct=Object.create;var re=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,Rt=Object.prototype.hasOwnProperty;var kt=(e,t)=>{for(var r in t)re(e,r,{get:t[r],enumerable:!0})},De=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of St(t))!Rt.call(e,i)&&i!==r&&re(e,i,{get:()=>t[i],enumerable:!(o=xt(t,i))||o.enumerable});return e};var fe=(e,t,r)=>(r=e!=null?Ct(Pt(e)):{},De(t||!e||!e.__esModule?re(r,"default",{value:e,enumerable:!0}):r,e)),At=e=>De(re({},"__esModule",{value:!0}),e);var pr={};kt(pr,{Chart:()=>pe,Empty:()=>oe,Error:()=>ie,Loading:()=>ne,Scope:()=>Z,Timeseries:()=>ht,UnblindProvider:()=>Ie,useLogs:()=>Ke,useMetrics:()=>qe,useRefresh:()=>ye,useScope:()=>O,useTimeseries:()=>se,useUsage:()=>We});module.exports=At(pr);var _=require("@tanstack/react-query"),q=require("react"),ge=require("react/jsx-runtime"),Ve=(0,q.createContext)(void 0);function be({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:o="/api/unblind",fetchImpl:i}){let n=(0,q.useMemo)(()=>{if(t)return t;let s={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},l={defaultOptions:{queries:s}};return r?new _.QueryClient({...r,defaultOptions:{...r.defaultOptions,queries:{...s,...r.defaultOptions?.queries}}}):new _.QueryClient(l)},[t,r]),a=(0,q.useMemo)(()=>({apiBaseUrl:o,fetchImpl:i}),[o,i]);return(0,ge.jsx)(_.QueryClientProvider,{client:n,children:(0,ge.jsx)(Ve.Provider,{value:a,children:e})})}function N(){let e=(0,q.useContext)(Ve);if(!e)throw new Error("useUnblindConfig must be used within an UnblindClientProvider. Please wrap your app or component tree with <UnblindClientProvider>.");return e}function ye(){let e=(0,_.useQueryClient)();return(0,q.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var V=require("react");var D=require("react/jsx-runtime");function oe(){return(0,D.jsx)("div",{className:"ub-default",children:(0,D.jsxs)("div",{className:"ub-empty-content",children:[(0,D.jsx)("div",{className:"ub-empty-icon-wrapper",children:(0,D.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"ub-icon",children:(0,D.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})})}),(0,D.jsx)("p",{className:"ub-empty-text","data-text":"No data available for this time range"})]})})}function ie(){return(0,D.jsx)("div",{className:"ub-default-error"})}function ne(){return(0,D.jsx)("div",{className:"ub-default-loading","data-text":"Loading"})}var Oe=require("react/jsx-runtime"),Te=(0,V.createContext)(void 0);function Z({children:e,timeRange:t,startTime:r,endTime:o,interval:i,attributes:n,groupBy:a,operator:s,appearance:l,tooltip:m,colors:f,fill:g,hideAxis:h,hideCursor:u,relativeTimeAxis:b,invertSort:y}){let d=(0,V.useContext)(Te),v=l?.components?.Loading||d?.appearance?.components?.Loading,T=l?.components?.Error||d?.appearance?.components?.Error,x=l?.components?.Tooltip||d?.appearance?.components?.Tooltip,p=l?.components?.Empty||d?.appearance?.components?.Empty,C=typeof m?.hide=="boolean"?m?.hide:d?.tooltip?.hide,P=typeof m?.visibilityLimit=="number"?m?.visibilityLimit:d?.tooltip?.visibilityLimit,R=(0,V.useMemo)(()=>({components:{...v&&{Loading:v},...T&&{Error:T},...x&&{Tooltip:x},...p&&{Empty:p}}}),[v,T,x,p]),k=(0,V.useMemo)(()=>({hide:C,visibilityLimit:P}),[C,P]),L=(0,V.useMemo)(()=>({timeRange:t??d?.timeRange,startTime:r??d?.startTime,endTime:o??d?.endTime,interval:i??d?.interval,attributes:n??d?.attributes,groupBy:a??d?.groupBy,operator:s??d?.operator,colors:f??d?.colors,relativeTimeAxis:typeof b=="boolean"?b:d?.relativeTimeAxis,fill:typeof g=="boolean"?g:d?.fill,hideAxis:typeof h=="boolean"?h:d?.hideAxis,hideCursor:typeof u=="boolean"?u:d?.hideCursor,invertSort:typeof y=="boolean"?y:d?.invertSort,appearance:R,tooltip:k}),[t,r,o,i,n,a,s,f,g,b,h,u,R,k,d,y]);return(0,Oe.jsx)(Te.Provider,{value:L,children:e})}var Lt="6h";function O(){let e=(0,V.useContext)(Te);return(0,V.useMemo)(()=>({...e,timeRange:e?.timeRange||Lt,appearance:{components:{Loading:e?.appearance?.components?.Loading??ne,Error:e?.appearance?.components?.Error??ie,Empty:e?.appearance?.components?.Empty??oe,Tooltip:e?.appearance?.components?.Tooltip}}}),[e])}var ve=require("react/jsx-runtime");function Ie({children:e,queryClient:t,apiBaseUrl:r,fetchImpl:o,timeRange:i,startTime:n,endTime:a,interval:s,attributes:l,groupBy:m,operator:f,appearance:g,tooltip:h,colors:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,invertSort:T}){return(0,ve.jsx)(be,{queryClient:t,apiBaseUrl:r,fetchImpl:o,children:(0,ve.jsx)(Z,{timeRange:i,startTime:n,endTime:a,interval:s,attributes:l,groupBy:m,operator:f,appearance:g,tooltip:h,colors:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,invertSort:T,children:e})})}var ze=require("@tanstack/react-query");function qe(){let{apiBaseUrl:e,fetchImpl:t=fetch}=N(),r=(0,ze.useQuery)({queryKey:["unblind","metrics"],queryFn:async()=>{let o=await t(`${e}/metrics`,{headers:{"Content-Type":"application/json"}});if(!o.ok)throw new Error("Error loading metrics metadata");if(o.status===200){let{data:i}=await o.json();return i}else throw new Error("Unexpected status code")}});return{metrics:r.data,isLoading:r.isLoading,hasError:r.isError,refetch:r.refetch}}var Qe=require("@tanstack/react-query"),j=require("react");var Fe=fe(require("ms"));function Be({scope:e,props:t}){return t.timeRange||t.startTime&&t.endTime?t:e}function wt(e){let t=Math.floor(Date.now()/1e3);return[t-Math.floor((0,Fe.default)(e)/1e3),t]}function H(e,t,r){let o,i;if(typeof t=="number"&&typeof r=="number")o=t,i=r;else if(e){let[n,a]=wt(e);o=n,i=a}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[o,i]}var _e=require("react");function W(e){let t=O(),{timeRange:r,startTime:o,endTime:i}=Be({props:e,scope:t});return(0,_e.useMemo)(()=>({timeRange:r,startTime:o,endTime:i}),[r,o,i])}function se(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:o,endTime:i,timeRange:n}=W(e),{queries:a,interval:s}=e,l=(0,j.useMemo)(()=>a.map(p=>p.metrics.join(",")).join(","),[a]),m=(0,j.useMemo)(()=>a.map(p=>{let C=p.attributes;if(!C)return"";let P=Object.keys(C);return P.length===0?"":P.map(R=>R+":"+C[R]?.join(",")).join(",")}).join(","),[a]),f=(0,j.useMemo)(()=>a.map(p=>p.operator),[a]),g=(0,j.useMemo)(()=>a.map(p=>p.groupBy).join(", "),[a]),u=(0,Qe.useQuery)({queryKey:["unblind","timeseries",l,m,o,i,n,s,f,g],queryFn:async()=>{if(!l)throw new Error("Missing required parameters");if(l.length===0)throw new Error("No series provided");let[p,C]=H(n,o,i),P={queries:a,startTime:p,endTime:C,interval:s},R=await r(`${t}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!R.ok)throw new Error("Error fetching metric");let{series:k,times:L,metadata:E}=await R.json();if(!k)throw console.error("Series not found"),new Error("Series not found");return{series:k,times:L,metadata:E}},enabled:!!l&&(typeof o=="number"&&typeof i=="number"||!!n)}),{metadata:b,series:y,times:d}=(0,j.useMemo)(()=>u.data?{series:u.data.series,times:u.data.times,metadata:u.data.metadata}:{series:[],times:[],metadata:{}},[u]),v=u.isLoading,T=u.isFetching,x=u.isError;return{data:{series:y,times:d,metadata:b},isLoading:v,isFetching:T,hasError:x,refetch:u.refetch}}var $e=require("@tanstack/react-query"),He=require("react");function We(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:o,endTime:i,timeRange:n}=W(e),s=(0,$e.useQuery)({queryKey:["unblind","usage",n,o,i],queryFn:async()=>{let[g,h]=H(n,o,i),u=`${t}/tenants/usage`,b=await r(u,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:g,endTime:h})});if(!b.ok)throw new Error("Error fetching usage");let{data:y}=await b.json();if(!y)throw new Error("usage not found");return y},enabled:typeof o=="number"&&typeof i=="number"||!!n}),l=(0,He.useMemo)(()=>s.data?s.data||[]:[],[s]),m=s.isLoading||s.isRefetching,f=s.isError;return{usage:l,isLoading:m,hasError:f,refetch:s.refetch}}var je=require("@tanstack/react-query"),Ge=require("react");function Ke(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{timeRange:o,startTime:i,endTime:n}=W(e),{attributes:a,body:s,severity:l,traceId:m,spanId:f,logId:g}=e,h=(0,je.useInfiniteQuery)({queryKey:["unblind","logs",o,i,n,s,l,g,JSON.stringify(a)],queryFn:async({pageParam:b})=>{let[y,d]=H(o,i,n),v=await r(`${t}/tenants/logs`,{method:"POST",body:JSON.stringify({attributes:a,body:s,severity:l,traceId:m,spanId:f,logId:g,startTime:y,endTime:d,pagination:{page:b}}),headers:{"Content-Type":"application/json"}});if(!v.ok)throw new Error("Error fetching logs");let{data:T,nextPage:x}=await v.json();if(!T)throw new Error("data not found");return{data:T,nextPage:x}},initialPageParam:void 0,getNextPageParam:b=>b.nextPage});return{logs:(0,Ge.useMemo)(()=>h.data?h.data.pages.flatMap(b=>b.data||[]):[],[h.data]),isLoading:h.isLoading,hasError:h.isError,hasNextPage:h.hasNextPage??!1,fetchNextPage:h.fetchNextPage,isFetchingNextPage:h.isFetchingNextPage,refetch:h.refetch}}var me=require("react");var ue=require("react"),mt=fe(require("uplot"));var ee=e=>"value"in e,ae=e=>"from"in e&&"to"in e;var te=fe(require("uplot")),it=require("@unblind/units");var F=require("@unblind/units");var A={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},G={second:[1,2,5,10,15,30],minute:[1,2,5,10,15,30],hour:[1,2,3,4,6,8,12],day:[1,2,3,7,14],month:[1,2,3,6],year:[1,2,5,10,20,50,100]};function Ut(e,t,r,o){if(t>7*A.day){let i=F.systemDateFormats.interval.year,n=Math.round(A.year/A.day)*A.day;if(Math.round(t/A.day)*A.day===n)i=F.systemDateFormats.interval.year;else{if(t<=A.year)return e.map(s=>{let l=new Date(s);return(o==="UTC"?l.getUTCDate():l.getDate())===1?l.toLocaleDateString(void 0,{month:"short",year:"numeric",timeZone:o}):l.toLocaleDateString(void 0,{day:"numeric",month:"short",timeZone:o})});i=F.systemDateFormats.interval.day}return e.map(s=>(0,F.dateTimeFormat)(s,{format:i,timeZone:o}))}return e.map(i=>{let n=new Date(i),a=t<A.minute,s=t<A.second,l=n.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:o});return(l==="00:00"||l==="24:00")&&!a&&!s?n.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:o}):n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:a?"2-digit":void 0,fractionalSecondDigits:s?3:void 0,hour12:!1,timeZone:o})})}function Et(e){let t=[{size:A.second/1e3,increments:G.second},{size:A.minute/1e3,increments:G.minute},{size:A.hour/1e3,increments:G.hour},{size:A.day/1e3,increments:G.day},{size:A.month/1e3,increments:G.month},{size:A.year/1e3,increments:G.year}];for(let i of t)for(let n of i.increments){let a=i.size*n;if(a>=e)return{increment:a*1e3,multiplier:n}}let r=t[t.length-1],o=r.increments[r.increments.length-1];return{increment:r.size*o*1e3,multiplier:o}}function Mt(e,t,r){return[t,r]}function Nt(e,t,r){return t.length===0?[]:t.map((o,i)=>i===0||i===t.length-1?(0,F.dateTimeFormatTimeAgo)(o*1e3,{timeZone:r}):"")}function Dt(e,t,r){let o=e.scales.x,i=((o?.max??0)-(o?.min??0))*1e3,n=Math.floor(e.width/100),a=i/1e3/n,{increment:s}=Et(a),l=t.map(m=>m*1e3);return Ut(l,s,i,r)}function Xe(e,t,r=!1,o=!1){let i=r?(a,s,l,m)=>Mt(a,l,m):void 0,n=r?(a,s)=>Nt(a,s,t):(a,s)=>Dt(a,s,t);return{font:K(e),labelFont:K(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:i,values:n,size:20,show:!o,align:r?2:void 0,space:(a,s,l,m,f)=>f<400?100:f<800?150:250}}var X=require("@floating-ui/dom"),Ye=require("react-dom/client"),Vt=4,Ot=8,Ce=class{overlay=null;reactRoot=null;renderedUplot=null;initialize(){this.overlay||(this.overlay=document.createElement("div"),this.overlay.id="unblind-tooltip-overlay",this.overlay.style.display="none",this.overlay.style.position="fixed",this.overlay.style.pointerEvents="none",this.overlay.style.zIndex="9999",document.body.appendChild(this.overlay),this.reactRoot=(0,Ye.createRoot)(this.overlay))}getOverlay(){return this.overlay}render(t,r){this.reactRoot?(this.reactRoot.render(r),this.renderedUplot=t):this.renderedUplot=null}show(){this.overlay&&(this.overlay.style.display="block")}hide(t){if(t!==this.renderedUplot){console.warn("Hide call plot");return}this.overlay&&(this.overlay.style.display="none"),this.render(null,null)}getRenderedUplot(){return this.renderedUplot}async positionTooltip(t){let r=this.getOverlay();if(r){let{x:o,y:i}=await(0,X.computePosition)({getBoundingClientRect:()=>({x:t.left,y:t.top,width:0,height:0,top:t.top,left:t.left,right:t.left,bottom:t.top})},r,{placement:"top-start",strategy:"fixed",middleware:[(0,X.offset)({mainAxis:Vt,crossAxis:Ot}),(0,X.flip)()]});r.style.left=`${o}px`,r.style.top=`${i}px`}}},U=new Ce;var xe=require("@unblind/units"),Y=require("react"),c=require("react/jsx-runtime"),It=6,Je=(0,Y.createContext)(null);function le(){let e=(0,Y.useContext)(Je);if(!e)throw new Error("useTooltipSerie must be used within a SerieProvider");return e}function zt({serie:e,children:t}){return(0,c.jsx)(Je.Provider,{value:e,children:t})}function Se({className:e="ub-tooltip-divider",...t}){return(0,c.jsx)("hr",{role:"presentation",...t,className:e})}function qt({formattedTime:e,unitCategory:t,tooltipSerieList:r,visibilityLimit:o,invertSort:i}){let n=r.slice(0,o),a=r.slice(o);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-metrics",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)(_t,{children:t})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map(s=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsx)(Ee,{children:(0,c.jsx)(Ze,{})}),(0,c.jsx)(we,{})]},s.metric.name)),(0,c.jsx)(Pe,{series:a,invertSort:i})]})]})}function Ft({formattedTime:e,tooltipSerieList:t,visibilityLimit:r,invertSort:o}){let i=t[0],n=t.slice(0,r),a=t.slice(r);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-attributes",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-serie-metric",children:tt(i?.metric.name||"")})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map((s,l)=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsx)(Ee,{children:(0,c.jsx)(et,{})}),(0,c.jsx)(we,{})]},"serie_"+l)),(0,c.jsx)(Pe,{series:a,invertSort:o})]})]})}function Bt({formattedTime:e,tooltipSerieList:t,unitCategory:r,visibilityLimit:o,invertSort:i}){let n=t.slice(0,o),a=t.slice(o);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-attributes",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:r})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map((s,l)=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsxs)(Ee,{children:[(0,c.jsx)(Ze,{}),(0,c.jsx)(et,{})]}),(0,c.jsx)(we,{})]},"serie"+l)),(0,c.jsx)(Pe,{series:a,invertSort:i})]})]})}function _t(e){return(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:e.children})}function Pe({series:e,invertSort:t}){let r=e[0]?.formattedValue,o=!e.some(n=>(n.value||0)>0),i=!e.some(n=>n.value!==void 0);return e.length>0?i?(0,c.jsx)("span",{className:"ub-tooltip-summary",children:(0,c.jsxs)("span",{children:["+",e.length," more with no data"]})}):o?(0,c.jsx)("span",{className:"ub-tooltip-summary",children:(0,c.jsxs)("span",{children:["+",e.length," more with zero values"]})}):(0,c.jsxs)("span",{className:"ub-tooltip-summary",children:[(0,c.jsxs)("span",{children:["+",e.length," more with "]}),(0,c.jsx)("span",{children:`${t?"\u2265":"\u2264"} ${r}`})]}):(0,c.jsx)(c.Fragment,{})}function Re(e){return(0,c.jsx)(zt,{serie:e.serie,children:(0,c.jsx)("div",{className:"ub-tooltip-serie",children:e.children})})}function ke(e){return(0,c.jsx)("div",{className:"ub-tooltip-content",children:e.children})}function Ae(e){return(0,c.jsx)("div",{className:"ub-tooltip-header",children:e.children})}function Le(e){return(0,c.jsx)("div",{className:"ub-tooltip-datetime",children:e.children})}function Ze(){let e=le();return(0,c.jsx)("span",{className:"ub-tooltip-serie-metric",children:tt(e.metric.name)})}function we(){let e=le();return e.formattedValue?(0,c.jsx)("span",{className:"ub-tooltip-serie-value",children:e.formattedValue}):(0,c.jsx)("span",{className:"ub-tooltip-serie-value-empty",children:"\u2013"})}function Ue(){let e=le();return(0,c.jsx)("span",{style:{backgroundColor:e.color},className:"ub-tooltip-serie-color"})}function Ee(e){return(0,c.jsx)("span",{className:"ub-tooltip-serie-label ub-truncate",children:e.children})}function et(){let{attributes:e}=le();if(!e)return null;let t=Object.values(e);return(0,c.jsx)("div",{className:"ub-tooltip-serie-attributes ub-truncate",children:t.map((r,o)=>(0,c.jsxs)(Y.Fragment,{children:[(0,c.jsx)("span",{className:"ub-tooltip-serie-attribute-value",children:r}),o<t.length-1&&(0,c.jsx)("span",{"data-text":", ",className:"ub-tooltip-serie-attribute-divider"})]},"tooltip-"+r))})}function Qt({tooltipSerieList:e,invertSort:t}){return t?e.sort((r,o)=>(Number(r.value)||0)-(Number(o.value)||0)):e.sort((r,o)=>(Number(o.value)||0)-(Number(r.value)||0))}function tt(e,t){let r=e.split(/[._-]/),o=r[r.length-1]||"";return t?o:o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()}function rt({timestamp:e,tooltipSerieList:t,timeZone:r,spansMultipleDays:o,hasMultipleMetrics:i,hasAttributes:n,invertSort:a,visibilityLimit:s}){let l=Qt({tooltipSerieList:t,invertSort:a}),m=o?(0,xe.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:r}):(0,xe.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:r}),f=s||It;return n?n&&!i?(0,c.jsx)(Ft,{formattedTime:m,tooltipSerieList:l,visibilityLimit:f,invertSort:a}):(0,c.jsx)(Bt,{formattedTime:m,unitCategory:"",tooltipSerieList:l,visibilityLimit:f,invertSort:a}):(0,c.jsx)(qt,{formattedTime:m,unitCategory:"",tooltipSerieList:l,visibilityLimit:f,invertSort:a})}var Me=require("react/jsx-runtime");function $t(e,t){if(!e||e.length===0)return!1;let r=e[0],o=e[e.length-1];if(r==null||o==null)return!1;let i=new Date(r*1e3),n=new Date(o*1e3),a=s=>t==="UTC"?`${s.getUTCFullYear()}-${s.getUTCMonth()}-${s.getUTCDate()}`:s.toLocaleDateString(void 0,{timeZone:t});return a(i)!==a(n)}function Ht(e,t){let r=!1;for(let i=1;i<e.series.length;i++)if(e.data[i]?.[t]!=null){r=!0;break}if(r)return t;let o=e.data[0].length;for(let i=1;t+i<o||t-i>=0;i++){let n=t-i,a=t+i;if(n>=0){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[n]!=null)return n}if(a<o){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[a]!=null)return a}}return t}function Wt(e,t,r,o,i,n,a){let s=[],l=e.data[0],m=new Set,f=new Set,g=!1;for(let h=1;h<e.series.length;h++){let u=e.data[h]?.[t]??null;if(o&&u!=null&&h>1){let C=e.data[h-1]?.[t]??0;u=u-C}let b=e.series[h],y=n?.[h-1];if(!y){console.warn("Original serie not found");continue}let d=i[y.metric];if(!d){console.warn("Metric metadata not found");continue}m.add(y.metric);let v=y?.attributes;if(v&&Object.keys(v).length>0){g=!0;for(let C in v)f.add(C)}let T=b?.stroke,x=typeof T=="function"?T(e,h):T??"#ffffff00",p=u==null?void 0:r?r(u):String(u);s.push({metric:d,color:x,value:u===null?void 0:u,formattedValue:p,attributes:v,serie:b})}return{tooltipSerieList:s,hasAttributes:g,hasMultipleMetrics:m.size>1,hasMultipleAttributes:f.size>1,spansMultipleDays:$t(l,a)}}function ot(e,t,r,o,i,n,a,s){let l,m,f,g=!1;function h(){let u=l.getBoundingClientRect();m=u.left,f=u.top}return{hooks:{init:u=>{U.initialize(),l=u.over,window.addEventListener("scroll",h,!0),window.addEventListener("resize",h),l.onmouseenter=()=>{g=!0,U.show()},l.onmouseleave=()=>{g=!1,U.getRenderedUplot()===u&&U.hide(u)},h()},setSize:()=>{h()},setCursor:u=>{let{left:b,top:y,idx:d}=u.cursor;if(!g||d==null){U.getRenderedUplot()===u&&U.hide(u);return}let T=Ht(u,d),x=u.data[0][T];if(x===void 0)return;let{tooltipSerieList:p,hasAttributes:C,hasMultipleAttributes:P,hasMultipleMetrics:R,spansMultipleDays:k}=Wt(u,T,e,t,r,n,o);U.show();let L=i,E=L?(0,Me.jsx)(L,{timestamp:x,tooltipSerieList:p,timeZone:o}):(0,Me.jsx)(rt,{timestamp:x,tooltipSerieList:p,timeZone:o,spansMultipleDays:k,stacked:t,hasAttributes:C,hasMultipleAttributes:P,hasMultipleMetrics:R,visibilityLimit:a,invertSort:s});U.render(u,E),U.positionTooltip({left:(b||0)+m,top:(y||0)+f})},destroy(u){window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),l&&(l.onmouseenter=null,l.onmouseleave=null),U.getRenderedUplot()===u&&U.hide(u)}}}}var ce=["oklch(0.70 0.24 293)","oklch(0.85 0.18 95)","oklch(0.65 0.25 255)","oklch(0.72 0.26 27)","oklch(0.70 0.22 150)","oklch(0.78 0.18 50)","oklch(0.72 0.18 215)","oklch(0.70 0.27 301)","oklch(0.75 0.20 90)","oklch(0.68 0.23 277)","oklch(0.70 0.18 193)","oklch(0.68 0.25 4)"],K=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,nt=(e,t)=>{let r=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!r&&t.unit?r=t.unit.code:r&&t.unit.code!==r&&(r=void 0)),r};function jt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.fill)&&Array.isArray(e.border)}function Gt(e){return Array.isArray(e)}var Kt=12,Xt=({isFilling:e,useSolid:t,index:r})=>{let o=r%Kt+1;return e?t?`--ub-chart-serie-color-${o}`:`--ub-chart-serie-fill-color-${o}`:`--ub-chart-serie-color-${o}`},st=(e,t,r,o,i,n)=>{let a=o==="bar"||o==="area";if(r)return Gt(r)?r[t]:jt(r)?n?r.fill[t]:r.border[t]:r(e,t,o,n);let s=Xt({isFilling:n,useSolid:a,index:t}),l=i.getPropertyValue(s).trim();return l||(n&&a?ce[t%ce.length]?.replace(")"," / 0.4)"):ce[t%ce.length])},Yt=e=>{let t=te.default.paths.bars({size:[.6,100],radius:0,gap:0}),r=te.default.paths.linear({alignGaps:0}),o=te.default.paths.spline({alignGaps:1}),i=te.default.paths.stepped({alignGaps:1});switch(e){case"line":return r;case"bar":return t;case"area":return r;case"step":return i;case"spline":return o;default:return r}},Jt=(e,t,r,o,i)=>st(e,t,r,o,i,!0),Zt=(e,t)=>{switch(e){case"bar":return 1;case"line":return t?1.5:2;case"spline":return t?1.5:2;case"area":return 1;case"step":return 1.5;default:return 1}},er=(e,t,r)=>{if(t<0||r<0)return[t,r];let o=e.posToVal(t,"x"),i=e.data[0];if(!i||i.length===0)return[t,r];let n=0,a=0,s=i.length-1;for(;s-a>1;){let u=Math.floor((a+s)/2),b=i[u];b!=null&&b<o?a=u:s=u}let l=i[a],m=i[s];l!=null&&m!=null?n=Math.abs(l-o)<Math.abs(m-o)?a:s:l!=null?n=a:m!=null&&(n=s);let f=n;for(let u=n;u>=0;u--){let b=!1;for(let y=1;y<e.data.length;y++){let d=e.data[y];if(d&&d[u]!=null){b=!0;break}}if(b){f=u;break}}let g=i[f];return g==null?[t,r]:[e.valToPos(g,"x"),r]},tr=(e,t)=>{let r=t.getPropertyValue("--ub-chart-font-color").trim(),o=t.getPropertyValue("--ub-chart-grid-color").trim(),i=e.axes?.[0],n=e.axes?.[1];return i&&(i.stroke=r,i.grid?i.grid.stroke=o:i.grid={stroke:o}),n&&(n.stroke=r,n.grid?n.grid.stroke=o:n.grid={stroke:o}),e},rr=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}`).trim()||e.getPropertyValue("--ub-chart-threshold-default").trim(),or=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}-fill`).trim()||e.getPropertyValue("--ub-chart-threshold-default-fill").trim(),ir=e=>{switch(e){case"bold":return 2;case"line":return 1;case"dashed":return 1;default:return 1}},nr=e=>e==="line"?void 0:[5,5],sr=(e,t)=>{if(t){let r=[];return t.forEach(o=>{let i={label:o.label,stroke:rr(e,o.level),width:ir(),dash:nr(o.type),points:{show:!1,size:0},spanGaps:!0,show:!0,auto:!1};ee(o)||r.push(i),r.push(i)}),r}else return[]},ar=(e,t,r,o)=>{if(!o||!o.some(n=>ae(n)))return t.bands;let i=o.map((n,a)=>ee(n)?null:{series:[e.length+a*2+1,e.length+a*2+2],fill:or(r,n.level),dir:1}).filter(n=>n!==null);return[...t.bands,...i]},lr=(e,t,r,o,i,n,a)=>{let s=Zt(t,o);return[{},...e.map((l,m)=>({label:l.metric,stroke:st(l,m,r,t,n),width:s,points:{show:!1},spanGaps:!0,paths:Yt(t),fill:o||i?Jt(l,m,r,t,n):void 0})),...sr(n,a)]},cr=e=>typeof e=="string"&&String(e).toLowerCase().trim()==="by"?"bytes":e,at=(e,t,r,o,i,n,a,s,l,m,f,g,h,u,b,y,d,v,T,x)=>{let p=window.getComputedStyle(e),C=p.fontFamily,P=e?.clientWidth??1050,R=e?.clientHeight??250,k=cr(o),L=(0,it.getValueFormat)(k==="1"?null:k),E=I=>{let M=L(I);return M.text+(M.suffix?.trim()||"")},Q={width:P,height:R,scales:{y:{range:lt(o,b,y)}},plugins:h?[]:[ot(E,a,t,m,f,i,T,x)],padding:g?[8,10,8,48]:[8,10,8,18],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:er,show:!v},series:lr(i,n,s,l,a,p,u),bands:ar(i,r,p,u),axes:[Xe(C,m,g,d),ct(L,C,d)],legend:{show:!1}};return tr(Q,p)};var ut=(e,t=4)=>{let r=e/t,o=Math.pow(10,Math.floor(Math.log10(r))),i=r/o,n;return i>5?n=10*o:i>2?n=5*o:i>1?n=2*o:n=o,Math.ceil(e/n)*n},S=(e,t)=>typeof e=="number"?e:t,lt=(e,t,r)=>(o,i,n)=>{if(i===0&&n===0)return[S(t,0),S(r,100)];let a=1,s=n*(1+a),l=i<0?i*(1+a):i*(1-a);if(e==="percent"||e==="percentunit"){let g=e==="percent"?100:1;return n>g?i<0?[S(t,l),S(r,s)]:[S(t,0),S(r,s)]:i<0?[S(t,l),S(r,g)]:[S(t,0),S(r,g)]}if(n<=.9999)return i<=0?[S(t,l),S(r,1)]:[S(t,0),S(r,1)];let m=ut(s),f=ut(Math.abs(l));return i<0?[S(r,-f),S(r,m)]:[S(t,0),S(r,m)]},ur=(e,t,r,o)=>{let i=e.axes[r];if(o>1)return i?._size||0;let n=(i?.ticks?.size||0)+(i?.gap||0),a=(t??[]).reduce((s,l)=>l.length>s.length?l:s,"");return a!=""&&(e.ctx.font=i?.font?.[0]??e.ctx.font,n+=e.ctx.measureText(a).width/devicePixelRatio),Math.ceil(n)};function ct(e,t,r){return{gap:0,font:K(t),labelFont:K(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(o,i)=>i.map(n=>{let a=e(n);return a.text+(a.suffix?.trim()||"")}),size:ur,space:(o,i,n,a,s)=>{let l=o.height;return l<=100?30:l<=150?35:l<=200?45:l<=250?55:l<=300?60:70},show:!r}}function pt(e,t){let r=[],o=e[0],i=o.length,n=Array(i).fill(0),a=[o];if(e.forEach((s,l)=>{l!==0&&(t?a.push(s):a.push(s.map((m,f)=>n[f]=n[f]+(m||0))))}),!t)for(let s=1;s<e.length-1;s++)r.push({series:[s+1,s]});return{data:a,bands:r.filter(s=>s.series[1]>-1)}}var dt=require("react/jsx-runtime");function pe(e){let{times:t,series:r,metadata:o,type:i,className:n,timeZone:a,options:s,tooltip:l,colors:m,tooltipComponent:f,unit:g,fill:h=!1,thresholds:u,min:b,max:y,hideAxis:d,hideCursor:v,relativeTimeAxis:T,invertSort:x}=e,{hide:p,visibilityLimit:C}=l||{},P=(0,ue.useRef)(null),R=O(),k=m||R.colors;return(0,ue.useEffect)(()=>{if(!r||r.length===0){console.warn("No series provided");return}let L=[t],E=g;r.forEach(w=>{let $=o[w.metric];g||(E=nt(E,$)),L.push(w.values)});let Q=i==="bar"||i==="area",I=pt(L,!Q);u&&u.forEach(w=>{ee(w)?I.data.push(new Array(t.length).fill(w.value)):ae(w)&&(I.data.push(new Array(t.length).fill(w.from)),I.data.push(new Array(t.length).fill(w.to)))});let M=P.current,J=null;if(M){let w=at(M,o,I,E,r,i,Q,k,h,a,f,T,p,u,b,y,d,v,C,x);J=new mt.default({...w,...s},I.data,M);let $=new ResizeObserver(()=>{J?.setSize({width:M.clientWidth,height:M.clientHeight})});return $.observe(M),()=>{J?.destroy(),$.disconnect()}}},[r,t,i,o,a,f,T,k,h,g,p,u,b,y,s,d,v]),(0,dt.jsx)("div",{ref:P,className:"ub-chart-container"+(n?` ${n}`:"")})}var B=require("react/jsx-runtime");function ht({metrics:e,operator:t,attributes:r,groupBy:o,interval:i,type:n="line",className:a,appearance:s,unit:l,thresholds:m,min:f,max:g,colors:h,tooltip:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,onResponse:T,invertSort:x}){let p=O(),C=i??p.interval,P=r??p.attributes,R=o??p.groupBy,k=t??p.operator,L=typeof v=="boolean"?v:p.relativeTimeAxis,E=h??p.colors,Q=typeof b=="boolean"?b:p.fill,I=typeof x=="boolean"?x:p.invertSort,M=typeof y=="boolean"?y:p.hideAxis,J=typeof d=="boolean"?d:p.hideCursor,w=s?.components?.Tooltip??p.appearance.components.Tooltip,$=(0,me.useMemo)(()=>({hide:u?.hide??p.tooltip?.hide,visibilityLimit:u?.visibilityLimit??p.tooltip?.visibilityLimit}),[u?.hide,p.tooltip?.hide,u?.visibilityLimit,p.tooltip?.visibilityLimit]),de=se({queries:(Array.isArray(e)?e:[e]).map(z=>({metrics:[z],operator:k,attributes:P,groupBy:R})),timeRange:p.timeRange,startTime:p.startTime,endTime:p.endTime,interval:C}),{isLoading:ft,data:gt,hasError:bt}=de,{series:Ne,times:yt,metadata:Tt}=gt,vt=Ne.every(z=>z.isEmpty),he=`ub-chart-container${a?` ${a}`:""}`;if((0,me.useEffect)(()=>{T&&T(de)},[de,T]),ft){let z=s?.components?.Loading??p.appearance.components.Loading;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}if(bt){let z=s?.components?.Error??p.appearance.components.Error;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}if(vt){let z=s?.components?.Empty??p.appearance.components.Empty;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}return(0,B.jsx)(pe,{times:yt,series:Ne,metadata:Tt,type:n,className:a,tooltip:$,colors:E,relativeTimeAxis:L,unit:l,fill:Q,tooltipComponent:w,thresholds:m,min:f,max:g,hideAxis:M,hideCursor:J,invertSort:I})}0&&(module.exports={Chart,Empty,Error,Loading,Scope,Timeseries,UnblindProvider,useLogs,useMetrics,useRefresh,useScope,useTimeseries,useUsage});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|