@unblind/react 0.1.0-alpha.0 → 0.1.0-alpha.1

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.d.mts CHANGED
@@ -376,7 +376,7 @@ type UnblindProviderProps = UnblindClientProviderProps & UnblindScopeProps & Pro
376
376
  declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
377
377
 
378
378
  interface UseMetricsReturn {
379
- list: MetricMetadataList | undefined;
379
+ metrics: MetricMetadataList | undefined;
380
380
  isLoading: boolean;
381
381
  hasError: boolean;
382
382
  refetch: () => void;
package/dist/index.d.ts CHANGED
@@ -376,7 +376,7 @@ type UnblindProviderProps = UnblindClientProviderProps & UnblindScopeProps & Pro
376
376
  declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
377
377
 
378
378
  interface UseMetricsReturn {
379
- list: MetricMetadataList | undefined;
379
+ metrics: MetricMetadataList | undefined;
380
380
  isLoading: boolean;
381
381
  hasError: boolean;
382
382
  refetch: () => void;
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"),L=require("react"),ae=require("react/jsx-runtime"),he=(0,L.createContext)(void 0);function X({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:i="/api/unblind",fetchImpl:o}){let s=(0,L.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,L.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,L.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,L.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var A=require("react"),E=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,E.jsx)(le.Provider,{value:h,children:e})}var tt=()=>(0,E.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-gray-500",children:"Loading data..."}),rt=({error:e})=>(0,E.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-red-500",children:e?.message??"Something went wrong"}),ot=()=>(0,E.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,E.jsxs)("div",{className:"text-center",children:[(0,E.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,E.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,E.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,E.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{list: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:R}=await x.json();if(!C)throw console.error("Series not found"),new Error("Series not found");return{series:C,times:P,metadata:R}},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 N=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=N.systemDateFormats.interval.year,s=Math.round(U.year/U.day)*U.day;return Math.round(t/U.day)*U.day===s?o=N.systemDateFormats.interval.year:t<=U.year?o=N.systemDateFormats.interval.month:o=N.systemDateFormats.interval.day,e.map(n=>(0,N.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 Ee(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 Re(e,t,r){return t.length===0?[]:t.map((i,o)=>o===0||o===t.length-1?(0,N.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 Le(e,t=!1){let r=t?(s,a,n,l)=>Ee(s,n,l):(s,a,n,l)=>lt(s,n,l,e),i=t?(s,a)=>Re(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=Re(s,Ee(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 Ne=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,Ne.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 R=i,D=R?(0,ue.jsx)(R,{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 R=y[C],D=y[P];R!=null&&D!=null?x=Math.abs(R-T)<Math.abs(D-T)?C:P:R!=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:[Le(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:R,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:R,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 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"),L=require("react"),ae=require("react/jsx-runtime"),he=(0,L.createContext)(void 0);function X({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:i="/api/unblind",fetchImpl:o}){let s=(0,L.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,L.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,L.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,L.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var A=require("react"),E=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,E.jsx)(le.Provider,{value:h,children:e})}var tt=()=>(0,E.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-gray-500",children:"Loading data..."}),rt=({error:e})=>(0,E.jsx)("div",{className:"flex h-full items-center justify-center text-sm text-red-500",children:e?.message??"Something went wrong"}),ot=()=>(0,E.jsx)("div",{className:"flex h-full items-center justify-center",children:(0,E.jsxs)("div",{className:"text-center",children:[(0,E.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,E.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,E.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,E.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:R}=await x.json();if(!C)throw console.error("Series not found"),new Error("Series not found");return{series:C,times:P,metadata:R}},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 N=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=N.systemDateFormats.interval.year,s=Math.round(U.year/U.day)*U.day;return Math.round(t/U.day)*U.day===s?o=N.systemDateFormats.interval.year:t<=U.year?o=N.systemDateFormats.interval.month:o=N.systemDateFormats.interval.day,e.map(n=>(0,N.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 Ee(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 Re(e,t,r){return t.length===0?[]:t.map((i,o)=>o===0||o===t.length-1?(0,N.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 Le(e,t=!1){let r=t?(s,a,n,l)=>Ee(s,n,l):(s,a,n,l)=>lt(s,n,l,e),i=t?(s,a)=>Re(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=Re(s,Ee(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 Ne=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,Ne.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 R=i,D=R?(0,ue.jsx)(R,{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 R=y[C],D=y[P];R!=null&&D!=null?x=Math.abs(R-T)<Math.abs(D-T)?C:P:R!=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:[Le(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:R,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:R,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});
2
2
  //# sourceMappingURL=index.js.map