@unblind/react 0.1.0-alpha.2 → 0.1.0-alpha.4
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 +31 -38
- package/dist/index.d.ts +31 -38
- 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 +7 -4
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 Ze=Object.create;var $=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var ot=Object.getPrototypeOf,rt=Object.prototype.hasOwnProperty;var nt=(e,t)=>{for(var o in t)$(e,o,{get:t[o],enumerable:!0})},ge=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of tt(t))!rt.call(e,r)&&r!==o&&$(e,r,{get:()=>t[r],enumerable:!(n=et(t,r))||n.enumerable});return e};var _=(e,t,o)=>(o=e!=null?Ze(ot(e)):{},ge(t||!e||!e.__esModule?$(o,"default",{value:e,enumerable:!0}):o,e)),it=e=>ge($({},"__esModule",{value:!0}),e);var At={};nt(At,{Chart:()=>re,Empty:()=>Q,Error:()=>W,Loading:()=>X,TimeseriesChart:()=>Je,UnblindProvider:()=>Te,UnblindScope:()=>Y,useLogs:()=>Ae,useMetrics:()=>xe,useRefresh:()=>se,useScope:()=>V,useTheme:()=>ee,useTimeseries:()=>J,useUsage:()=>Re});module.exports=it(At);var D=require("@tanstack/react-query"),E=require("react"),ie=require("react/jsx-runtime"),be=(0,E.createContext)(void 0);function he({children:e,queryClient:t,queryClientConfig:o,apiBaseUrl:n="/api/unblind",fetchImpl:r}){let a=(0,E.useMemo)(()=>{if(t)return t;let s={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},l={defaultOptions:{queries:s}};return o?new D.QueryClient({...o,defaultOptions:{...o.defaultOptions,queries:{...s,...o.defaultOptions?.queries}}}):new D.QueryClient(l)},[t,o]),i=(0,E.useMemo)(()=>({apiBaseUrl:n,fetchImpl:r}),[n,r]);return(0,ie.jsx)(D.QueryClientProvider,{client:a,children:(0,ie.jsx)(be.Provider,{value:i,children:e})})}function M(){let e=(0,E.useContext)(be);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,D.useQueryClient)();return(0,E.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var N=require("react");var A=require("react/jsx-runtime");function Q(){return(0,A.jsx)("div",{className:"ub-default",children:(0,A.jsxs)("div",{className:"ub-empty-content",children:[(0,A.jsx)("div",{className:"ub-empty-icon-wrapper",children:(0,A.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,A.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,A.jsx)("p",{className:"ub-empty-text","data-text":"No data available for this time range"})]})})}function W(){return(0,A.jsx)("div",{className:"ub-error"})}function X(){return(0,A.jsx)("div",{className:"ub-default","data-text":"Loading"})}var ye=require("react/jsx-runtime"),ae=(0,N.createContext)(void 0);function Y({children:e,timeRange:t,startTime:o,endTime:n,interval:r,attributes:a,groupBy:i,operator:s,appearance:l}){let u=(0,N.useContext)(ae),m=l?.components?.Loading,d=l?.components?.Error,p=l?.components?.Tooltip,c=(0,N.useMemo)(()=>{if(!(!m&&!d&&!p))return{components:{...m&&{Loading:m},...d&&{Error:d},...p&&{Tooltip:p}}}},[m,d,p]),f=(0,N.useMemo)(()=>({timeRange:t??u?.timeRange,startTime:o??u?.startTime,endTime:n??u?.endTime,interval:r??u?.interval,attributes:a??u?.attributes,groupBy:i??u?.groupBy,operator:s??u?.operator,appearance:c??u?.appearance}),[t,o,n,r,a,i,s,c,u]);return(0,ye.jsx)(ae.Provider,{value:f,children:e})}var st=["#7c3aed","#eab308","#2563eb","#dc2626","#16a34a","#f97316","#0891b2","#9333ea","#ca8a04","#4f46e5","#0d9488","#be185d"],at="6h";function V(){let e=(0,N.useContext)(ae);return{timeRange:e?.timeRange||at,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??X,Error:e?.appearance?.components?.Error??W,Empty:e?.appearance?.components?.Empty??Q,Tooltip:e?.appearance?.components?.Tooltip},colors:e?.appearance?.colors||st}}}var le=require("react/jsx-runtime");function Te({children:e,queryClient:t,apiBaseUrl:o,fetchImpl:n,timeRange:r,startTime:a,endTime:i,interval:s,attributes:l,groupBy:u,operator:m,appearance:d}){return(0,le.jsx)(he,{queryClient:t,apiBaseUrl:o,fetchImpl:n,children:(0,le.jsx)(Y,{timeRange:r,startTime:a,endTime:i,interval:s,attributes:l,groupBy:u,operator:m,appearance:d,children:e})})}var ve=require("@tanstack/react-query");function xe(){let{apiBaseUrl:e,fetchImpl:t=fetch}=M(),o=(0,ve.useQuery)({queryKey:["unblind","metrics"],queryFn:async()=>{let n=await t(`${e}/metrics`,{headers:{"Content-Type":"application/json"}});if(!n.ok)throw new Error("Error loading metrics metadata");if(n.status===200){let{data:r}=await n.json();return r}else throw new Error("Unexpected status code")}});return{metrics:o.data,isLoading:o.isLoading,hasError:o.isError,refetch:o.refetch}}var we=require("@tanstack/react-query"),F=require("react");var Ce=_(require("ms"));function lt(e){let t=Date.now();return[t-(0,Ce.default)(e),t]}function B(e,t,o){let n,r;if(typeof t=="number"&&typeof o=="number")n=t,r=o;else if(e){let[a,i]=lt(e);n=a,r=i}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[n,r]}function J({queries:e,timeRange:t,startTime:o,endTime:n,interval:r}){let{apiBaseUrl:a,fetchImpl:i=fetch}=M(),s=(0,F.useMemo)(()=>e.map(x=>x.metrics.join(",")).join(","),[e]),l=(0,F.useMemo)(()=>e.map(x=>{let v=x.attributes;if(!v)return"";let b=Object.keys(v);return b.length===0?"":b.map(h=>h+":"+v[h]?.join(",")).join(",")}).join(","),[e]),u=(0,F.useMemo)(()=>e.map(x=>x.operator),[e]),m=(0,F.useMemo)(()=>e.map(x=>x.groupBy).join(", "),[e]),p=(0,we.useQuery)({queryKey:["unblind","timeseries",s,l,o,n,t,r,u,m],queryFn:async()=>{if(!s)throw new Error("Missing required parameters");if(s.length===0)throw new Error("No series provided");let[x,v]=B(t,o,n),b={queries:e,startTime:x,endTime:v,interval:r},h=await i(`${a}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!h.ok)throw new Error("Error fetching metric");let{series:P,times:R,metadata:k}=await h.json();if(!P)throw console.error("Series not found"),new Error("Series not found");return{series:P,times:R,metadata:k}},enabled:!!s&&(typeof o=="number"&&typeof n=="number"||!!t)}),{metadata:c,series:f,times:T}=(0,F.useMemo)(()=>p.data?{series:p.data.series,times:p.data.times,metadata:p.data.metadata}:{series:[],times:[],metadata:{}},[p]),g=p.isLoading,C=p.isFetching,w=p.isError;return{data:{series:f,times:T,metadata:c},isLoading:g,isFetching:C,hasError:w,refetch:p.refetch}}var Pe=require("@tanstack/react-query"),Ue=require("react");function Re({timeRange:e,startTime:t,endTime:o}){let{apiBaseUrl:n,fetchImpl:r=fetch}=M(),i=(0,Pe.useQuery)({queryKey:["unblind","usage",e,t,o],queryFn:async()=>{let[m,d]=B(e,t,o),p=`${n}/tenants/usage`,c=await r(p,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:m,endTime:d})});if(!c.ok)throw new Error("Error fetching usage");let{data:f}=await c.json();if(!f)throw new Error("usage not found");return f},enabled:typeof t=="number"&&typeof o=="number"||!!e}),s=(0,Ue.useMemo)(()=>i.data?i.data||[]:[],[i]),l=i.isLoading||i.isRefetching,u=i.isError;return{usage:s,isLoading:l,hasError:u,refetch:i.refetch}}var Se=require("@tanstack/react-query"),ke=require("react");function Ae({timeRange:e,filters:t,startTime:o,endTime:n}){let{apiBaseUrl:r,fetchImpl:a=fetch}=M(),i=typeof o=="number"&&typeof n=="number"||!!e,s=(0,Se.useInfiniteQuery)({queryKey:["unblind","logs",e,t.map(u=>u.name+":"+u.value).sort().join(",")],queryFn:async({pageParam:u})=>{let m=t.reduce((P,R)=>(P[R.name]||(P[R.name]=[]),P[R.name].push(R.value),P),{}),{body:d=[],severity:p=[],"service.name":c=[],"trace.id":f=[],"span.id":T=[],...g}=m,[C,w]=B(e,o,n),x=Date.now(),v=await a(`${r}/tenants/logs`,{method:"POST",body:JSON.stringify({filter:{attributes:g,body:d,severity:p,traceId:f,spanId:T,service:c},startTime:C,endTime:w,pagination:{page:u}}),headers:{"Content-Type":"application/json"}});if(!v.ok)throw new Error("Error fetching logs");let{data:b,next_page:h}=await v.json();if(!b)throw new Error("logs not found");return{data:b,next_page:h}},enabled:i,initialPageParam:void 0,getNextPageParam:u=>u.next_page});return{logs:(0,ke.useMemo)(()=>s.data?s.data.pages.flatMap(u=>u.data||[]):[],[s.data]),isLoading:s.isLoading,hasError:s.isError,hasNextPage:s.hasNextPage??!1,fetchNextPage:s.fetchNextPage,isFetchingNextPage:s.isFetchingNextPage,refetch:s.refetch}}var Z=require("react");function ee(){let[e,t]=(0,Z.useState)(!1);return(0,Z.useEffect)(()=>{let o=()=>t(document.documentElement.classList.contains("dark"));return o(),window.addEventListener("storage",o),window.addEventListener("theme-change",o),()=>{window.removeEventListener("storage",o),window.removeEventListener("theme-change",o)}},[]),e}var oe=require("react"),Xe=_(require("uplot"));var j=_(require("uplot")),He=require("@grafana/data");var L=require("@grafana/data");var U={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},q={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,o,n){if(t>U.day){let r=L.systemDateFormats.interval.year,a=Math.round(U.year/U.day)*U.day;return Math.round(t/U.day)*U.day===a?r=L.systemDateFormats.interval.year:t<=U.year?r=L.systemDateFormats.interval.month:r=L.systemDateFormats.interval.day,e.map(s=>(0,L.dateTimeFormat)(s,{format:r,timeZone:n}))}return e.map(r=>{let a=new Date(r),i=t<U.minute,s=t<U.second,l=a.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:n});return(l==="00:00"||l==="24:00")&&!i&&!s?a.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:n}):a.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:i?"2-digit":void 0,fractionalSecondDigits:s?3:void 0,hour12:!1,timeZone:n})})}function Le(e){let t=[{size:U.second/1e3,increments:q.second},{size:U.minute/1e3,increments:q.minute},{size:U.hour/1e3,increments:q.hour},{size:U.day/1e3,increments:q.day},{size:U.month/1e3,increments:q.month},{size:U.year/1e3,increments:q.year}];for(let r of t)for(let a of r.increments){let i=r.size*a;if(i>=e)return{increment:i*1e3,multiplier:a}}let o=t[t.length-1],n=o.increments[o.increments.length-1];return{increment:o.size*n*1e3,multiplier:n}}function Ee(e,t,o){return[t,o]}function ct(e,t,o,n){let r=o-t,a=e.width,i=Math.floor(a/100),s=r/i,{increment:l,multiplier:u}=Le(s),m=l/1e3,d=[];if(r<12*3600){let c=Math.ceil(t/m)*m;for(;c<=o;c+=m)d.push(c);return d}if(r<3*86400){if(l>=6*3600*1e3){let f=l/1e3/3600,T=new Date(t*1e3);if(n==="UTC"){let C=T.getUTCHours(),w=Math.floor(C/f)*f;T.setUTCHours(w,0,0,0)}else{let C=T.getHours(),w=Math.floor(C/f)*f;T.setHours(w,0,0,0)}let g=T.getTime()/1e3;for(g<t&&(g+=m);g<=o;)d.push(g),g+=m;return d}let c=Math.ceil(t/m)*m;for(;c<=o;c+=m)d.push(c);return d}if(l>=U.day){let c=new Date(t*1e3);n==="UTC"?(c.setUTCHours(0,0,0,0),c.getTime()/1e3<t&&c.setUTCDate(c.getUTCDate()+u)):(c.setHours(0,0,0,0),c.getTime()/1e3<t&&c.setDate(c.getDate()+u));let f=c.getTime()/1e3;for(;f<=o;)d.push(f),n==="UTC"?c.setUTCDate(c.getUTCDate()+u):c.setDate(c.getDate()+u),f=c.getTime()/1e3;return d}let p=Math.ceil(t/m)*m;for(;p<=o;p+=m)d.push(p);return d}function Me(e,t,o){return t.length===0?[]:t.map((n,r)=>r===0||r===t.length-1?(0,L.dateTimeFormatTimeAgo)(n*1e3,{timeZone:o}):"")}function pt(e,t,o){let n=e.scales.x,r=((n?.max??0)-(n?.min??0))*1e3,a=Math.floor(e.width/100),i=r/1e3/a,{increment:s}=Le(i),l=t.map(u=>u*1e3);return ut(l,s,r,o)}function Ne(e,t,o=!1){let n=o?(i,s,l,u)=>Ee(i,l,u):(i,s,l,u)=>ct(i,l,u,t),r=o?(i,s)=>Me(i,s,t):(i,s)=>pt(i,s,t),a=o?(i,s,l,u,m)=>{let p=document.createElement("canvas").getContext("2d");if(!p)return 0;p.font=z(e);let c=Me(i,Ee(i,l,u),t),f=Math.max(p.measureText(c[0]||"").width,p.measureText(c[1]||"").width);return Math.ceil(f/2)+15}:void 0;return{font:z(e),labelFont:z(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:n,values:r,size:20}}var H=require("@floating-ui/dom"),qe=_(require("uplot"));var Ie=require("react-dom/client"),ue=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,Ie.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 ue;var ce=require("@grafana/data"),pe=require("react");var y=require("react/jsx-runtime");function Be(e){return e.metric.displayName||e.metric.name||(typeof e.serie.label=="string"?e.serie.label:e.serie.label?.textContent||"Unknown")}function De(e){let t=e.attributes||{};if(t["service.name"])return String(t["service.name"]);let n=Object.keys(t)[0];return n?String(t[n]):"z-fallback"}function Ve(e){return[...e].sort((t,o)=>(Number(o.value)||0)-(Number(t.value)||0))}function ze(e){return[...e].sort((t,o)=>De(t).localeCompare(De(o)))}function mt(e){let t={};return e.forEach(o=>{let n=Be(o);t[n]||(t[n]=[]),t[n].push(o)}),t}function dt(e,t,o,n="original"){if(o==="flat")return[{label:"",items:t?Ve(e):ze(e)}];let r=mt(e);return Object.keys(r).sort((i,s)=>i.localeCompare(s)).map(i=>{let s=r[i];if(!s)return{label:te(i,n),items:[]};let l=t?Ve(s):ze(s);return{label:te(i,n),items:l}})}function te(e,t,o){switch(t){case"suffix":{let n=e.split(/[._-]/),r=n[n.length-1]||"";return o?r:r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()}case"title":return e.split(/[._-]/).map(n=>o?n:n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" ");default:return e}}function ft(e,t){if(t&&t!=="auto")return t;let o=e.some(r=>r.attributes&&Object.keys(r.attributes).length>0),n=new Set(e.map(Be));return o&&n.size>=1?"group-by-metric":"flat"}function Oe({hideAttributeKey:e,attribute:t,format:o,isLastAttribute:n}){let[r,a]=t;return(0,y.jsxs)("div",{className:"ub-tooltip-item-attribute-container",children:[(0,y.jsxs)("div",{className:e?"ub-tooltip-item-attribute":"ub-tooltip-item-attribute-with-key",children:[!e&&(0,y.jsxs)("span",{className:"ub-tooltip-item-attribute-key",children:[te(r,o),":"]}),(0,y.jsx)("span",{className:"ub-tooltip-item-attribute-value",children:a})]}),!n&&e&&(0,y.jsx)("span",{"data-text":", ",className:"ub-tooltip-item-attribute-divider"})]})}function gt({item:e,hideMetric:t,hideAttributeKey:o,hideAttributes:n,format:r}){let i=Object.entries(e.attributes||{}),s=i.length>0&&!n;return!n&&!t&&console.warn("Invalid configuration. Attributes and metrics are hidden."),(0,y.jsxs)("div",{className:"ub-tooltip-item-row",children:[(0,y.jsxs)("div",{className:"ub-tooltip-item-left"+(t?" ub-tooltip-item-hidden-metric":""),children:[(0,y.jsxs)("div",{className:"ub-tooltip-item-heading",children:[(0,y.jsx)("span",{className:"ub-tooltip-item-dot",style:{backgroundColor:e.color}}),t?(0,y.jsx)("div",{className:"ub-tooltip-item-attributes",children:i.map((l,u)=>(0,y.jsx)(Oe,{hideAttributeKey:o,attribute:l,format:r,isLastAttribute:u>=i.length-1}))}):(0,y.jsx)("span",{className:s?"ub-tooltip-item-metric-name-label":"ub-tooltip-item-metric-name",children:te(e.metric.name,r)})]}),s&&!t&&(0,y.jsx)("div",{className:"ub-tooltip-item-attributes",children:i.map((l,u)=>(0,y.jsx)(Oe,{hideAttributeKey:o,attribute:l,format:r,isLastAttribute:u>=i.length-1}))})]}),(0,y.jsx)("div",{className:"ub-tooltip-item-value",children:e.formattedValue??(0,y.jsx)("span",{className:"ub-tooltip-item-value--empty",children:"\u2014"})})]})}function bt({className:e="ub-tooltip-divider",...t}){return(0,y.jsx)("hr",{role:"presentation",...t,className:e})}function ht({group:e,groupIdx:t,hideAttributeKey:o,hideMetric:n,hideAttributes:r,format:a,hideGroupLabel:i}){return(0,y.jsxs)("div",{className:"ub-tooltip-group",children:[!i&&(0,y.jsx)("div",{className:`ub-tooltip-group-header${t>0?" ub-tooltip-group-header--separator":""}`,children:e.label}),(0,y.jsx)("div",{className:"ub-tooltip-items",children:e.items.map((s,l)=>(0,y.jsx)(gt,{item:s,format:a,hideAttributeKey:o,hideMetric:n,hideAttributes:r},`item-${t}-${l}`))})]},e.label)}function Fe({timestamp:e,items:t,timeZone:o,spansMultipleDays:n,sortByValues:r,format:a="original",layout:i="flat",hideAttributeKey:s,hideMetric:l,hideAttributes:u}){let m=n?(0,ce.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:o}):(0,ce.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:o}),d=(0,pe.useMemo)(()=>ft(t,i),[t,i]),p=d==="flat",f=typeof l=="boolean"?l:d==="group-by-metric",T=typeof s=="boolean"?s:!1,g=typeof u=="boolean"?u:!1,C=(0,pe.useMemo)(()=>dt(t,r,d,a),[t,r,d,a]);return(0,y.jsxs)("div",{className:"ub-tooltip",children:[(0,y.jsx)("div",{className:"ub-tooltip-datetime",children:m}),(0,y.jsx)(bt,{}),C.length>0?(0,y.jsx)("div",{className:"ub-tooltip-content",children:C.map((w,x)=>(0,y.jsx)(ht,{group:w,groupIdx:x,hideAttributeKey:T,hideMetric:f,hideAttributes:g,hideGroupLabel:p,format:a},w.label))}):(0,y.jsx)("div",{className:"ub-tooltip-no-data",children:"No data available"})]})}var me=require("react/jsx-runtime"),yt=4,Tt=8;function vt(e,t){if(!e||e.length===0)return!1;let o=e[0],n=e[e.length-1];if(o==null||n==null)return!1;let r=new Date(o*1e3),a=new Date(n*1e3),i=s=>t==="UTC"?`${s.getUTCFullYear()}-${s.getUTCMonth()}-${s.getUTCDate()}`:s.toLocaleDateString(void 0,{timeZone:t});return i(r)!==i(a)}function xt(e,t){let o=!1;for(let r=1;r<e.series.length;r++)if(e.data[r]?.[t]!=null){o=!0;break}if(o)return t;let n=e.data[0].length;for(let r=1;t+r<n||t-r>=0;r++){let a=t-r,i=t+r;if(a>=0){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[a]!=null)return a}if(i<n){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[i]!=null)return i}}return t}function Ct(e,t,o,n,r,a){let i=!1,s=[];for(let l=1;l<e.series.length;l++){let u=e.data[l]?.[t]??null;if(n&&u!=null&&l>1){let g=e.data[l-1]?.[t]??0;u=u-g}let m=e.series[l],d=a?.[l-1];if(!d){console.warn("Original serie not found");continue}let p=r[d.metric];if(!p){console.warn("Metric metadata not found");continue}let c=m?.stroke,f=typeof c=="function"?c(qe.default,l):c??"#ffffff00",T=u==null?void 0:o?o(u):String(u);d?.attributes&&Object.keys(d?.attributes).length>0&&(i=!0),s.push({metric:p,color:f,value:u===null?void 0:u,formattedValue:T,attributes:d?.attributes,serie:m})}return{items:s,hasAttributes:i}}async function wt(e,t){let{x:o,y:n}=await(0,H.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,H.offset)({mainAxis:yt,crossAxis:Tt}),(0,H.flip)()]});e.style.left=`${o}px`,e.style.top=`${n}px`}function Ge(e,t,o,n,r,a,i,s,l){let u,m,d,p=!1;function c(){let g=u.getBoundingClientRect();m=g.left,d=g.top}function f(){G.hide()}function T(){G.show()}return{hooks:{init:g=>{G.initialize(),u=g.over,window.addEventListener("scroll",c,!0),window.addEventListener("resize",c),u.onmouseenter=()=>{p=!0,T()},u.onmouseleave=()=>{p=!1,f()},c()},setSize:()=>{c()},setCursor:g=>{let{left:C,top:w,idx:x}=g.cursor;if(!p||x==null){f();return}let b=g.data[0],h=vt(b,r),P=xt(g,x),R=g.data[0][P];if(R===void 0)return;let{items:k,hasAttributes:fe}=Ct(g,P,e,t,o,i),ne={left:(C||0)+m,top:(w||0)+d};T();let K=a,O=K?(0,me.jsx)(K,{timestamp:R,items:k,timeZone:r}):(0,me.jsx)(Fe,{timestamp:R,items:k,timeZone:r,spansMultipleDays:h,stacked:t,sortByValues:n,layout:s,format:l});G.render(O);let S=G.getOverlay();S&&wt(S,ne)},destroy(){window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)}}}}var z=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,je=(e,t)=>{let o=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!o&&t.unit?o=t.unit.code:o&&t.unit.code!==o&&(o=void 0)),o},de=(e,t,o)=>Array.isArray(o)?o[t]:o(e,t),Pt=e=>{let t=j.default.paths.bars({size:[.6,100],radius:0,gap:0}),o=j.default.paths.linear({alignGaps:0}),n=j.default.paths.spline({alignGaps:1}),r=j.default.paths.stepped({alignGaps:1});switch(e){case"line":return o;case"bar":return t;case"area":return o;case"step":return r;case"spline":return n;default:return o}},Ut=(e,t,o,n)=>{switch(n){case"area":return de(e,t,o);case"bar":return de(e,t,o);default:return}},Rt=e=>{switch(e){case"bar":return 1;case"line":return 2;case"area":return 2;case"step":return 1.5;default:return 1}},St=(e,t,o)=>{let n=e.posToVal(t,"x"),r=e.data[0];if(!r||r.length===0)return[t,o];let a=0,i=0,s=r.length-1;for(;s-i>1;){let c=Math.floor((i+s)/2),f=r[c];f!=null&&f<n?i=c:s=c}let l=r[i],u=r[s];l!=null&&u!=null?a=Math.abs(l-n)<Math.abs(u-n)?i:s:l!=null?a=i:u!=null&&(a=s);let m=a;for(let c=a;c>=0;c--){let f=!1;for(let T=1;T<e.data.length;T++){let g=e.data[T];if(g&&g[c]!=null){f=!0;break}}if(f){m=c;break}}let d=r[m];return d==null?[t,o]:[e.valToPos(d,"x"),o]},Ke=(e,t,o,n,r,a,i,s,l,u,m,d,p,c,f)=>{let T=e?.clientWidth??1050,g=e?.clientHeight??250,C=typeof o=="string"?String(o).toLowerCase().replaceAll("by","bytes"):o,w=(0,He.getValueFormat)(C==="1"?null:C),x=Rt(r),v={width:T,height:g,scales:{y:{range:$e(o)}},plugins:[Ge(b=>{let h=w(b,Number.isInteger(b)?0:2);return h.text+(h.suffix?.trim()||"")},a,t,u,m,d,n,f,c)],padding:p?[10,15,10,15]:[8,15,8,15],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:St},series:[{},...n.map((b,h)=>({label:b.metric,stroke:de(b,h,s),width:x,points:{show:!1},spanGaps:!0,paths:Pt(r),fill:Ut(b,h,s,r)}))],axes:[Ne(l,m,p),_e(w,l,o)],legend:{show:!1}};if(i){let b=v.axes?.[0],h=v.axes?.[1];b&&(b.stroke="#dadada",b.grid&&(b.grid.stroke="#2c3235")),h&&(h.stroke="#dadada",h.grid&&(h.grid.stroke="#2c3235"))}else{let b=v.axes?.[0],h=v.axes?.[1];b&&(b.stroke="#45556c"),h&&(h.stroke="#45556c")}return v};var Qe=e=>{let t=e/4,o=Math.pow(10,Math.floor(Math.log10(t))),n=t/o,r;return n>5?r=10*o:n>2?r=5*o:n>1?r=2*o:r=o,Math.ceil(e/r)*r},$e=e=>(t,o,n)=>{let a=n*2,i=o*2;if(e==="percent"||e==="percentunit")return n>100?o<0?[i,a]:[0,a]:o<0?[i,100]:[0,100];if(n<=.9999)return o<=0?[i,1]:[0,1];let s=Qe(a),l=Qe(i);return i<=0?[l,s]:[0,s]},kt=(e,t,o,n)=>{let r=e.axes[o];if(n>1)return r?._size;let a=(r?.ticks?.size||0)+(r?.gap||0),i=(t??[]).reduce((s,l)=>l.length>s.length?l:s,"");return i!=""&&(e.ctx.font=r?.font?.[0]??e.ctx.font,a+=e.ctx.measureText(i).width/devicePixelRatio),Math.ceil(a)};function _e(e,t,o){return{gap:0,font:z(t),labelFont:z(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(n,r)=>r.map(a=>{let i=e(a);return i.text+(i.suffix?.trim()||"")}),size:kt}}function We(e,t){let o=[],n=e[0],r=n.length,a=Array(r).fill(0),i=[n];return e.forEach((s,l)=>{l!==0&&(t?i.push(s):i.push(s.map((u,m)=>a[m]=a[m]+(u||0))))}),e.forEach((s,l)=>{l===0||t||o.push({series:[e.findIndex((u,m)=>m>l),l]})}),{data:i,bands:o.filter(s=>s.series[1]>-1)}}var Ye=require("react/jsx-runtime");function re(e){let{times:t,series:o,metadata:n,type:r,className:a,timeZone:i,options:s,tooltipAppearance:l,colors:u,sortByValues:m=!1,unit:d}=e,p=(0,oe.useRef)(null),c=ee(),f=V(),T=u||f.appearance.colors;return(0,oe.useEffect)(()=>{if(!o||o.length===0){console.warn("No series provided");return}let g=[t],C=d;o.forEach(h=>{let P=n[h.metric];d||(C=je(C,P)),g.push(h.values)});let w=r==="bar"||r==="area",x=We(g,!w),v=p.current,b=null;if(v){let P=window.getComputedStyle(v).fontFamily,R=Ke(v,n,C,o,r,w,c,T,P,m,i,l);R.bands=x.bands,b=new Xe.default({...R,...s},x.data,v);let k=new ResizeObserver(()=>{b?.setSize({width:v.clientWidth,height:v.clientHeight})});return k.observe(v),()=>{b?.destroy(),k.disconnect()}}},[o,t,r,c,n,i,l,T,m,d]),(0,Ye.jsx)("div",{ref:p,className:"ub-chart-container"+(a?` ${a}`:"")})}var I=require("react/jsx-runtime");function Je({metrics:e,operator:t,attributes:o,groupBy:n,timeRange:r,startTime:a,endTime:i,interval:s,type:l="line",className:u,appearance:m,unit:d}){let p=V(),c=r??p.timeRange,f=a??p.startTime,T=i??p.endTime,g=s??p.interval,C=o??p.attributes,w=n??p.groupBy,x=t??p.operator,v=m?.colors??p.appearance.colors,b=typeof m?.sortByValues=="boolean"?m?.sortByValues:p.appearance.sortByValues,{isLoading:h,data:P,hasError:R}=J({queries:(Array.isArray(e)?e:[e]).map(S=>({metrics:[S],operator:x,attributes:C,groupBy:w})),timeRange:c,startTime:f,endTime:T,interval:g}),{series:k,times:fe,metadata:ne}=P,K=k.every(S=>S.isEmpty),O=`ub-chart-container${u?` ${u}`:""}`;if(h){let S=m?.components?.Loading??p.appearance.components.Loading;return(0,I.jsx)("div",{className:O,children:(0,I.jsx)(S,{})})}if(K){let S=m?.components?.Empty??p.appearance.components.Empty;return(0,I.jsx)("div",{className:O,children:(0,I.jsx)(S,{})})}if(R){let S=m?.components?.Error??p.appearance.components.Error;return(0,I.jsx)("div",{className:O,children:(0,I.jsx)(S,{})})}return(0,I.jsx)(re,{times:fe,series:k,metadata:ne,type:l,className:O,tooltipAppearance:m?.components?.Tooltip??p.appearance.components.Tooltip,colors:v,sortByValues:b,unit:d})}0&&(module.exports={Chart,Empty,Error,Loading,TimeseriesChart,UnblindProvider,UnblindScope,useLogs,useMetrics,useRefresh,useScope,useTheme,useTimeseries,useUsage});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|