@unblind/react 0.1.0-alpha.19 → 0.1.0-alpha.20
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 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +85 -82
- package/dist/index.d.ts +85 -82
- 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 +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -60,8 +60,11 @@ declare function useRefresh(): () => Promise<void>;
|
|
|
60
60
|
|
|
61
61
|
interface TooltipProps {
|
|
62
62
|
timestamp: number;
|
|
63
|
-
|
|
63
|
+
tooltipSerieList: TooltipSerie[];
|
|
64
64
|
timeZone?: string;
|
|
65
|
+
stacked?: boolean;
|
|
66
|
+
invertSort?: boolean;
|
|
67
|
+
visibilityLimit?: number;
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
/**
|
|
@@ -73,13 +76,6 @@ type MetricType = "gauge" | "sum" | "histogram" | "summary" | "exphistogram";
|
|
|
73
76
|
* Aggregation operators available for metric queries.
|
|
74
77
|
*/
|
|
75
78
|
type AggregationOperator = "avg" | "sum" | "max" | "min" | "p90" | "p99" | "p50";
|
|
76
|
-
/**
|
|
77
|
-
* Attribute filter with a specific value.
|
|
78
|
-
*/
|
|
79
|
-
interface AttributeWithValue {
|
|
80
|
-
name: string;
|
|
81
|
-
value: string;
|
|
82
|
-
}
|
|
83
79
|
/**
|
|
84
80
|
* Metric metadata returned by the API.
|
|
85
81
|
*/
|
|
@@ -133,19 +129,20 @@ type ChartType = "bar" | "line" | "area" | "step" | "spline";
|
|
|
133
129
|
type TimeRange = StringValue;
|
|
134
130
|
interface Log {
|
|
135
131
|
timestamp: number;
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
132
|
+
traceId?: string;
|
|
133
|
+
spanId?: string;
|
|
134
|
+
logId?: string;
|
|
135
|
+
severity: Severity;
|
|
139
136
|
attributes?: Record<string, string>;
|
|
140
|
-
service_name?: string;
|
|
141
137
|
body?: string;
|
|
138
|
+
serviceName?: string;
|
|
142
139
|
}
|
|
143
140
|
/**
|
|
144
141
|
* Default paginated response structure
|
|
145
142
|
*/
|
|
146
143
|
type PaginatedResponse<T> = {
|
|
147
144
|
data: Array<T>;
|
|
148
|
-
|
|
145
|
+
nextPage?: string;
|
|
149
146
|
};
|
|
150
147
|
/**
|
|
151
148
|
* Different severity values based on OTEL
|
|
@@ -207,11 +204,6 @@ interface ChartVisualConfig {
|
|
|
207
204
|
* Optional color configuration
|
|
208
205
|
*/
|
|
209
206
|
colors?: Colors;
|
|
210
|
-
/**
|
|
211
|
-
* Optional labeling order.
|
|
212
|
-
* Defaults to false
|
|
213
|
-
*/
|
|
214
|
-
sortByValues?: boolean;
|
|
215
207
|
/**
|
|
216
208
|
* Optional to fill charts.
|
|
217
209
|
*
|
|
@@ -222,13 +214,57 @@ interface ChartVisualConfig {
|
|
|
222
214
|
* Optional tooltip configuration.
|
|
223
215
|
*/
|
|
224
216
|
tooltip?: TooltipConfig;
|
|
217
|
+
/**
|
|
218
|
+
* Chart type. Defaults to "line".
|
|
219
|
+
*/
|
|
220
|
+
type?: ChartType;
|
|
221
|
+
/**
|
|
222
|
+
* Optional threshold
|
|
223
|
+
*/
|
|
224
|
+
thresholds?: Array<Threshold>;
|
|
225
|
+
/**
|
|
226
|
+
* Optional min value
|
|
227
|
+
*/
|
|
228
|
+
min?: number;
|
|
229
|
+
/**
|
|
230
|
+
* Optional max value
|
|
231
|
+
*/
|
|
232
|
+
max?: number;
|
|
233
|
+
/**
|
|
234
|
+
* Optional boolean to hide both axis
|
|
235
|
+
*/
|
|
236
|
+
hideAxis?: boolean;
|
|
237
|
+
/**
|
|
238
|
+
* Optional boolean to hide cursor
|
|
239
|
+
*/
|
|
240
|
+
hideCursor?: boolean;
|
|
241
|
+
/**
|
|
242
|
+
* Optional boolean to display relative time axis
|
|
243
|
+
*
|
|
244
|
+
* e.g. a day ago ------ a few seconds ago
|
|
245
|
+
*/
|
|
246
|
+
relativeTimeAxis?: boolean;
|
|
247
|
+
/**
|
|
248
|
+
* Unit of measurement for the value.
|
|
249
|
+
*
|
|
250
|
+
* Supports standard unit identifiers:
|
|
251
|
+
* - Data: 'bytes', 'decbytes', 'bits', 'decbits'
|
|
252
|
+
* - Time: 'ms', 's', 'm', 'h', 'd'
|
|
253
|
+
* - Throughput: 'Bps', 'Mbps', 'Gbps'
|
|
254
|
+
* - Percentage: 'percent', 'percentunit'
|
|
255
|
+
* - And many more standard units
|
|
256
|
+
*
|
|
257
|
+
*/
|
|
258
|
+
unit?: string;
|
|
259
|
+
/**
|
|
260
|
+
* Optional invert value order.
|
|
261
|
+
* Defaults to false
|
|
262
|
+
*/
|
|
263
|
+
invertSort?: boolean;
|
|
225
264
|
}
|
|
226
265
|
interface TooltipConfig {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
hideAttributeKey?: boolean;
|
|
230
|
-
hideAttributes?: boolean;
|
|
231
|
-
hideMetric?: boolean;
|
|
266
|
+
hide?: boolean;
|
|
267
|
+
visibilityLimit?: number;
|
|
232
268
|
}
|
|
233
269
|
/**
|
|
234
270
|
* Appearance configuration for Unblind components.
|
|
@@ -266,19 +302,7 @@ type RangeThreshold = {
|
|
|
266
302
|
label?: string;
|
|
267
303
|
};
|
|
268
304
|
type Threshold = LineThreshold | RangeThreshold;
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Formats for rendering attribute and metric names.
|
|
272
|
-
* @example
|
|
273
|
-
* nodejs.eventloop.p50
|
|
274
|
-
* ```
|
|
275
|
-
* original: "nodejs.eventloop.p50"
|
|
276
|
-
* suffix: "p50"
|
|
277
|
-
* title: "Nodejs Eventloop P50"
|
|
278
|
-
* ```
|
|
279
|
-
*/
|
|
280
|
-
type TooltipLabelFormat = "original" | "suffix" | "title";
|
|
281
|
-
interface TooltipItem {
|
|
305
|
+
interface TooltipSerie {
|
|
282
306
|
metric: MetricMetadata;
|
|
283
307
|
serie: uPlot.Series;
|
|
284
308
|
color: string;
|
|
@@ -345,7 +369,7 @@ type ScopeProps = ScopeConfig & {
|
|
|
345
369
|
* }
|
|
346
370
|
* ```
|
|
347
371
|
*/
|
|
348
|
-
declare function Scope({ children, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill,
|
|
372
|
+
declare function Scope({ children, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill, hideAxis, hideCursor, relativeTimeAxis, invertSort, }: ScopeProps): react_jsx_runtime.JSX.Element;
|
|
349
373
|
type UseScopeReturn = TimeseriesQueryConfig & ChartVisualConfig & {
|
|
350
374
|
timeRange: TimeRange;
|
|
351
375
|
appearance: {
|
|
@@ -393,7 +417,7 @@ type UnblindProviderProps = UnblindClientProviderProps & ScopeProps & {
|
|
|
393
417
|
* }
|
|
394
418
|
* ```
|
|
395
419
|
*/
|
|
396
|
-
declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors,
|
|
420
|
+
declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill, hideAxis, hideCursor, relativeTimeAxis, invertSort, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
|
|
397
421
|
|
|
398
422
|
interface UseMetricsReturn {
|
|
399
423
|
metrics: MetricMetadataList | undefined;
|
|
@@ -414,12 +438,13 @@ interface UseTimeseriesParams extends Pick<TimeseriesQueryConfig, "timeRange" |
|
|
|
414
438
|
*/
|
|
415
439
|
queries: Array<TimeseriesQuery>;
|
|
416
440
|
}
|
|
441
|
+
interface UseTimeseriesData {
|
|
442
|
+
series: Serie[];
|
|
443
|
+
times: number[];
|
|
444
|
+
metadata: Record<string, MetricMetadata>;
|
|
445
|
+
}
|
|
417
446
|
interface UseTimeseriesReturn {
|
|
418
|
-
data:
|
|
419
|
-
series: Serie[];
|
|
420
|
-
times: number[];
|
|
421
|
-
metadata: Record<string, MetricMetadata>;
|
|
422
|
-
};
|
|
447
|
+
data: UseTimeseriesData;
|
|
423
448
|
isLoading: boolean;
|
|
424
449
|
isFetching: boolean;
|
|
425
450
|
hasError: boolean;
|
|
@@ -431,7 +456,7 @@ interface UseTimeseriesReturn {
|
|
|
431
456
|
* @param params - Configuration object with queries, and either timeRange or startTime/endTime, plus optional interval.
|
|
432
457
|
* @returns Object containing timeseries data, loading states, and error state.
|
|
433
458
|
*/
|
|
434
|
-
declare function useTimeseries(
|
|
459
|
+
declare function useTimeseries(params: UseTimeseriesParams): UseTimeseriesReturn;
|
|
435
460
|
|
|
436
461
|
interface Usage {
|
|
437
462
|
period: {
|
|
@@ -459,13 +484,18 @@ interface UseUsageReturn {
|
|
|
459
484
|
* @param params - Configuration object with optional timeRange.
|
|
460
485
|
* @returns Object containing usage data, loading state, and error state.
|
|
461
486
|
*/
|
|
462
|
-
declare function useUsage(
|
|
487
|
+
declare function useUsage(params: UseUsageParams): UseUsageReturn;
|
|
463
488
|
|
|
464
489
|
type UseLogsParams = {
|
|
465
490
|
/**
|
|
466
491
|
* Array of filters to apply to the logs query.
|
|
467
492
|
*/
|
|
468
|
-
|
|
493
|
+
attributes?: Record<string, Array<string>>;
|
|
494
|
+
body?: Array<string>;
|
|
495
|
+
severity?: Array<string>;
|
|
496
|
+
traceId?: string;
|
|
497
|
+
spanId?: string;
|
|
498
|
+
logId?: string;
|
|
469
499
|
} & TimeConfig;
|
|
470
500
|
interface UseLogsReturn {
|
|
471
501
|
logs: Array<Log>;
|
|
@@ -482,7 +512,7 @@ interface UseLogsReturn {
|
|
|
482
512
|
* @param params - Configuration object with timeRange and filters.
|
|
483
513
|
* @returns Object containing logs data, loading states, and pagination controls.
|
|
484
514
|
*/
|
|
485
|
-
declare function useLogs(
|
|
515
|
+
declare function useLogs(props: UseLogsParams): UseLogsReturn;
|
|
486
516
|
|
|
487
517
|
type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" | "timeRange"> & ChartVisualConfig & {
|
|
488
518
|
/**
|
|
@@ -500,34 +530,6 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
|
|
|
500
530
|
* ```
|
|
501
531
|
*/
|
|
502
532
|
metrics: Array<string> | string;
|
|
503
|
-
/**
|
|
504
|
-
* Chart type. Defaults to "line".
|
|
505
|
-
*/
|
|
506
|
-
type?: ChartType;
|
|
507
|
-
/**
|
|
508
|
-
* Optional threshold
|
|
509
|
-
*/
|
|
510
|
-
thresholds?: Array<Threshold>;
|
|
511
|
-
/**
|
|
512
|
-
* Optional min value
|
|
513
|
-
*/
|
|
514
|
-
min?: number;
|
|
515
|
-
/**
|
|
516
|
-
* Optional max value
|
|
517
|
-
*/
|
|
518
|
-
max?: number;
|
|
519
|
-
/**
|
|
520
|
-
* Unit of measurement for the value.
|
|
521
|
-
*
|
|
522
|
-
* Supports standard unit identifiers:
|
|
523
|
-
* - Data: 'bytes', 'decbytes', 'bits', 'decbits'
|
|
524
|
-
* - Time: 'ms', 's', 'm', 'h', 'd'
|
|
525
|
-
* - Throughput: 'Bps', 'Mbps', 'Gbps'
|
|
526
|
-
* - Percentage: 'percent', 'percentunit'
|
|
527
|
-
* - And many more standard units
|
|
528
|
-
*
|
|
529
|
-
*/
|
|
530
|
-
unit?: string;
|
|
531
533
|
/**
|
|
532
534
|
* Optional className for the chart container.
|
|
533
535
|
*/
|
|
@@ -536,6 +538,10 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
|
|
|
536
538
|
* Optional appearance configuration for this chart
|
|
537
539
|
*/
|
|
538
540
|
appearance?: Appearance;
|
|
541
|
+
/**
|
|
542
|
+
* Hook to get request data
|
|
543
|
+
*/
|
|
544
|
+
onResponse?: (response: UseTimeseriesReturn) => void;
|
|
539
545
|
};
|
|
540
546
|
/**
|
|
541
547
|
* Displays a time series chart.
|
|
@@ -547,7 +553,7 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
|
|
|
547
553
|
* <Timeseries
|
|
548
554
|
* metrics="host.cpu"
|
|
549
555
|
* attributes={{ "host.region": ["us-east-2"] }}
|
|
550
|
-
* groupBy=["host.name"]
|
|
556
|
+
* groupBy={["host.name"]}
|
|
551
557
|
* />
|
|
552
558
|
* ```
|
|
553
559
|
*
|
|
@@ -559,21 +565,18 @@ type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" |
|
|
|
559
565
|
* </Scope>
|
|
560
566
|
* ```
|
|
561
567
|
*/
|
|
562
|
-
declare function Timeseries({ metrics, operator: propOperator, attributes: propAttributes, groupBy: propGroupBy, interval: propInterval, type, className, appearance: propAppearance, unit: propUnit, thresholds: propThresholds, min: propMin, max: propMax, colors: propColors, tooltip: propTooltip,
|
|
568
|
+
declare function Timeseries({ metrics, operator: propOperator, attributes: propAttributes, groupBy: propGroupBy, interval: propInterval, type, className, appearance: propAppearance, unit: propUnit, thresholds: propThresholds, min: propMin, max: propMax, colors: propColors, tooltip: propTooltip, fill: propFill, hideAxis: propHideAxis, hideCursor: propHideCursor, relativeTimeAxis: propRelativeTimeAxis, onResponse, invertSort: propInvertSort, }: TimeseriesProps): react_jsx_runtime.JSX.Element;
|
|
563
569
|
|
|
564
570
|
interface ChartProps extends ChartVisualConfig {
|
|
565
571
|
times: Array<number>;
|
|
566
572
|
series: Serie[];
|
|
567
573
|
metadata: Record<string, MetricMetadata>;
|
|
568
574
|
type: ChartType;
|
|
575
|
+
invertSort?: boolean;
|
|
569
576
|
className?: string;
|
|
570
577
|
timeZone?: string;
|
|
571
578
|
options?: uPlot$1.Options;
|
|
572
|
-
unit?: string;
|
|
573
579
|
tooltipComponent?: React.ComponentType<TooltipProps>;
|
|
574
|
-
thresholds?: Array<Threshold>;
|
|
575
|
-
min?: number;
|
|
576
|
-
max?: number;
|
|
577
580
|
}
|
|
578
581
|
/**
|
|
579
582
|
* Renders a chart for time series data
|
|
@@ -584,4 +587,4 @@ declare function Empty(): react_jsx_runtime.JSX.Element;
|
|
|
584
587
|
declare function Error(): react_jsx_runtime.JSX.Element;
|
|
585
588
|
declare function Loading(): react_jsx_runtime.JSX.Element;
|
|
586
589
|
|
|
587
|
-
export { type AggregationOperator, type Appearance,
|
|
590
|
+
export { type AggregationOperator, type Appearance, Chart, type ChartProps, type ChartType, type ChartVisualConfig, type Colors, Empty, Error, type Interval, Loading, type Log, type MetricMetadata, type MetricMetadataList, type MetricType, type PaginatedResponse, Scope, type ScopeConfig, type ScopeProps, type Serie, type Severity, type TimeConfig, type TimeRange, Timeseries, type TimeseriesProps, type TimeseriesQuery, type TimeseriesQueryConfig, type TooltipProps, type UnblindClientConfig, UnblindProvider, type UnblindProviderProps, type Usage, type UseLogsParams, type UseLogsReturn, type UseMetricsReturn, type UseScopeReturn, type UseTimeseriesParams, type UseTimeseriesReturn, type UseUsageParams, type UseUsageReturn, useLogs, useMetrics, useRefresh, useScope, useTimeseries, useUsage };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var it=Object.create;var ee=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var lt=Object.getPrototypeOf,ut=Object.prototype.hasOwnProperty;var ct=(e,t)=>{for(var r in t)ee(e,r,{get:t[r],enumerable:!0})},ve=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of st(t))!ut.call(e,o)&&o!==r&&ee(e,o,{get:()=>t[o],enumerable:!(n=at(t,o))||n.enumerable});return e};var pe=(e,t,r)=>(r=e!=null?it(lt(e)):{},ve(t||!e||!e.__esModule?ee(r,"default",{value:e,enumerable:!0}):r,e)),pt=e=>ve(ee({},"__esModule",{value:!0}),e);var Wt={};ct(Wt,{Chart:()=>ue,Empty:()=>te,Error:()=>re,Loading:()=>oe,Scope:()=>ne,Timeseries:()=>nt,UnblindProvider:()=>Pe,useLogs:()=>Ie,useMetrics:()=>Se,useRefresh:()=>de,useScope:()=>G,useTimeseries:()=>ie,useUsage:()=>Ee});module.exports=pt(Wt);var H=require("@tanstack/react-query"),O=require("react"),me=require("react/jsx-runtime"),Ce=(0,O.createContext)(void 0);function xe({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:n="/api/unblind",fetchImpl:o}){let i=(0,O.useMemo)(()=>{if(t)return t;let a={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},u={defaultOptions:{queries:a}};return r?new H.QueryClient({...r,defaultOptions:{...r.defaultOptions,queries:{...a,...r.defaultOptions?.queries}}}):new H.QueryClient(u)},[t,r]),s=(0,O.useMemo)(()=>({apiBaseUrl:n,fetchImpl:o}),[n,o]);return(0,me.jsx)(H.QueryClientProvider,{client:i,children:(0,me.jsx)(Ce.Provider,{value:s,children:e})})}function z(){let e=(0,O.useContext)(Ce);if(!e)throw new Error("useUnblindConfig must be used within an UnblindClientProvider. Please wrap your app or component tree with <UnblindClientProvider>.");return e}function de(){let e=(0,H.useQueryClient)();return(0,O.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var F=require("react");var D=require("react/jsx-runtime");function te(){return(0,D.jsx)("div",{className:"ub-default",children:(0,D.jsxs)("div",{className:"ub-empty-content",children:[(0,D.jsx)("div",{className:"ub-empty-icon-wrapper",children:(0,D.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"ub-icon",children:(0,D.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})})}),(0,D.jsx)("p",{className:"ub-empty-text","data-text":"No data available for this time range"})]})})}function re(){return(0,D.jsx)("div",{className:"ub-error"})}function oe(){return(0,D.jsx)("div",{className:"ub-default","data-text":"Loading"})}var Ae=require("react/jsx-runtime"),he=(0,F.createContext)(void 0);function ne({children:e,timeRange:t,startTime:r,endTime:n,interval:o,attributes:i,groupBy:s,operator:a,appearance:u,tooltip:c,colors:h,fill:m,sortByValues:d}){let l=(0,F.useContext)(he),f=u?.components?.Loading||l?.appearance?.components?.Loading,y=u?.components?.Error||l?.appearance?.components?.Error,p=u?.components?.Tooltip||l?.appearance?.components?.Tooltip,b=u?.components?.Empty||l?.appearance?.components?.Empty,C=c?.layout||l?.tooltip?.layout,T=c?.labelFormat||l?.tooltip?.labelFormat,x=typeof c?.hideAttributes=="boolean"?c?.hideAttributes:l?.tooltip?.hideAttributes,k=typeof c?.hideAttributeKey=="boolean"?c?.hideAttributeKey:l?.tooltip?.hideAttributeKey,v=typeof c?.hideMetric=="boolean"?c?.hideMetric:l?.tooltip?.hideMetric,A=(0,F.useMemo)(()=>({components:{...f&&{Loading:f},...y&&{Error:y},...p&&{Tooltip:p},...b&&{Empty:b}}}),[f,y,p,b]),L=(0,F.useMemo)(()=>({layout:C,labelFormat:T,hideAttributes:x,hideAttributeKey:k,hideMetric:v}),[C,T,x,k,v]),R=(0,F.useMemo)(()=>({timeRange:t??l?.timeRange,startTime:r??l?.startTime,endTime:n??l?.endTime,interval:o??l?.interval,attributes:i??l?.attributes,groupBy:s??l?.groupBy,operator:a??l?.operator,colors:h??l?.colors,sortByValues:typeof d=="boolean"?d:l?.sortByValues,fill:typeof m=="boolean"?m:l?.fill,appearance:A,tooltip:L}),[t,r,n,o,i,s,a,h,d,m,A,L,l]);return(0,Ae.jsx)(he.Provider,{value:R,children:e})}var mt="6h";function G(){let e=(0,F.useContext)(he);return(0,F.useMemo)(()=>({...e,timeRange:e?.timeRange||mt,appearance:{components:{Loading:e?.appearance?.components?.Loading??oe,Error:e?.appearance?.components?.Error??re,Empty:e?.appearance?.components?.Empty??te,Tooltip:e?.appearance?.components?.Tooltip}}}),[e])}var fe=require("react/jsx-runtime");function Pe({children:e,queryClient:t,apiBaseUrl:r,fetchImpl:n,timeRange:o,startTime:i,endTime:s,interval:a,attributes:u,groupBy:c,operator:h,appearance:m,tooltip:d,colors:l,sortByValues:f}){return(0,fe.jsx)(xe,{queryClient:t,apiBaseUrl:r,fetchImpl:n,children:(0,fe.jsx)(ne,{timeRange:o,startTime:i,endTime:s,interval:a,attributes:u,groupBy:c,operator:h,appearance:m,tooltip:d,colors:l,sortByValues:f,children:e})})}var ke=require("@tanstack/react-query");function Se(){let{apiBaseUrl:e,fetchImpl:t=fetch}=z(),r=(0,ke.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:o}=await n.json();return o}else throw new Error("Unexpected status code")}});return{metrics:r.data,isLoading:r.isLoading,hasError:r.isError,refetch:r.refetch}}var Le=require("@tanstack/react-query"),Q=require("react");var we=pe(require("ms"));function dt(e){let t=Math.floor(Date.now()/1e3);return[t-Math.floor((0,we.default)(e)/1e3),t]}function $(e,t,r){let n,o;if(typeof t=="number"&&typeof r=="number")n=t,o=r;else if(e){let[i,s]=dt(e);n=i,o=s}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[n,o]}function ie({queries:e,timeRange:t,startTime:r,endTime:n,interval:o}){let{apiBaseUrl:i,fetchImpl:s=fetch}=z(),a=(0,Q.useMemo)(()=>e.map(T=>T.metrics.join(",")).join(","),[e]),u=(0,Q.useMemo)(()=>e.map(T=>{let x=T.attributes;if(!x)return"";let k=Object.keys(x);return k.length===0?"":k.map(v=>v+":"+x[v]?.join(",")).join(",")}).join(","),[e]),c=(0,Q.useMemo)(()=>e.map(T=>T.operator),[e]),h=(0,Q.useMemo)(()=>e.map(T=>T.groupBy).join(", "),[e]),d=(0,Le.useQuery)({queryKey:["unblind","timeseries",a,u,r,n,t,o,c,h],queryFn:async()=>{if(!a)throw new Error("Missing required parameters");if(a.length===0)throw new Error("No series provided");let[T,x]=$(t,r,n),k={queries:e,startTime:T,endTime:x,interval:o},v=await s(`${i}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(k)});if(!v.ok)throw new Error("Error fetching metric");let{series:A,times:L,metadata:R}=await v.json();if(!A)throw console.error("Series not found"),new Error("Series not found");return{series:A,times:L,metadata:R}},enabled:!!a&&(typeof r=="number"&&typeof n=="number"||!!t)}),{metadata:l,series:f,times:y}=(0,Q.useMemo)(()=>d.data?{series:d.data.series,times:d.data.times,metadata:d.data.metadata}:{series:[],times:[],metadata:{}},[d]),p=d.isLoading,b=d.isFetching,C=d.isError;return{data:{series:f,times:y,metadata:l},isLoading:p,isFetching:b,hasError:C,refetch:d.refetch}}var Re=require("@tanstack/react-query"),Ue=require("react");function Ee({timeRange:e,startTime:t,endTime:r}){let{apiBaseUrl:n,fetchImpl:o=fetch}=z(),s=(0,Re.useQuery)({queryKey:["unblind","usage",e,t,r],queryFn:async()=>{let[h,m]=$(e,t,r),d=`${n}/tenants/usage`,l=await o(d,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:h,endTime:m})});if(!l.ok)throw new Error("Error fetching usage");let{data:f}=await l.json();if(!f)throw new Error("usage not found");return f},enabled:typeof t=="number"&&typeof r=="number"||!!e}),a=(0,Ue.useMemo)(()=>s.data?s.data||[]:[],[s]),u=s.isLoading||s.isRefetching,c=s.isError;return{usage:a,isLoading:u,hasError:c,refetch:s.refetch}}var Me=require("@tanstack/react-query"),Ne=require("react");function Ie({timeRange:e,filters:t,startTime:r,endTime:n}){let{apiBaseUrl:o,fetchImpl:i=fetch}=z(),s=typeof r=="number"&&typeof n=="number"||!!e,a=(0,Me.useInfiniteQuery)({queryKey:["unblind","logs",e,t.map(c=>c.name+":"+c.value).sort().join(",")],queryFn:async({pageParam:c})=>{let h=t.reduce((v,A)=>(v[A.name]||(v[A.name]=[]),v[A.name].push(A.value),v),{}),{body:m=[],severity:d=[],"service.name":l=[],"trace.id":f=[],"span.id":y=[],...p}=h,[b,C]=$(e,r,n),T=await i(`${o}/tenants/logs`,{method:"POST",body:JSON.stringify({filter:{attributes:p,body:m,severity:d,traceId:f,spanId:y,service:l},startTime:b,endTime:C,pagination:{page:c}}),headers:{"Content-Type":"application/json"}});if(!T.ok)throw new Error("Error fetching logs");let{data:x,next_page:k}=await T.json();if(!x)throw new Error("data not found");return{data:x,next_page:k}},enabled:s,initialPageParam:void 0,getNextPageParam:c=>c.next_page});return{logs:(0,Ne.useMemo)(()=>a.data?a.data.pages.flatMap(c=>c.data||[]):[],[a.data]),isLoading:a.isLoading,hasError:a.isError,hasNextPage:a.hasNextPage??!1,fetchNextPage:a.fetchNextPage,isFetchingNextPage:a.isFetchingNextPage,refetch:a.refetch}}var ot=require("react");var le=require("react"),tt=pe(require("uplot"));var Y=e=>"value"in e,ae=e=>"from"in e&&"to"in e;var Z=pe(require("uplot")),Qe=require("@unblind/units");var B=require("@unblind/units");var S={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},j={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 ht(e,t,r,n){if(t>7*S.day){let o=B.systemDateFormats.interval.year,i=Math.round(S.year/S.day)*S.day;return Math.round(t/S.day)*S.day===i?o=B.systemDateFormats.interval.year:t<=S.year?o=B.systemDateFormats.interval.month:o=B.systemDateFormats.interval.day,e.map(a=>(0,B.dateTimeFormat)(a,{format:o,timeZone:n}))}return e.map(o=>{let i=new Date(o),s=t<S.minute,a=t<S.second,u=i.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:n});return(u==="00:00"||u==="24:00")&&!s&&!a?i.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:n}):i.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:s?"2-digit":void 0,fractionalSecondDigits:a?3:void 0,hour12:!1,timeZone:n})})}function De(e){let t=[{size:S.second/1e3,increments:j.second},{size:S.minute/1e3,increments:j.minute},{size:S.hour/1e3,increments:j.hour},{size:S.day/1e3,increments:j.day},{size:S.month/1e3,increments:j.month},{size:S.year/1e3,increments:j.year}];for(let o of t)for(let i of o.increments){let s=o.size*i;if(s>=e)return{increment:s*1e3,multiplier:i}}let r=t[t.length-1],n=r.increments[r.increments.length-1];return{increment:r.size*n*1e3,multiplier:n}}function ft(e,t,r){return[t,r]}function bt(e,t,r,n){let o=r-t,i=e.width,s=Math.floor(i/100),a=o/s,{increment:u,multiplier:c}=De(a),h=u/1e3,m=[];if(o<12*3600){let l=Math.ceil(t/h)*h;for(;l<=r;l+=h)m.push(l);return m}if(o<3*86400){if(u>=6*3600*1e3){let f=u/1e3/3600,y=new Date(t*1e3);if(n==="UTC"){let b=y.getUTCHours(),C=Math.floor(b/f)*f;y.setUTCHours(C,0,0,0)}else{let b=y.getHours(),C=Math.floor(b/f)*f;y.setHours(C,0,0,0)}let p=y.getTime()/1e3;for(p<t&&(p+=h);p<=r;)m.push(p),p+=h;return m}let l=Math.ceil(t/h)*h;for(;l<=r;l+=h)m.push(l);return m}if(u>=S.day){let l=new Date(t*1e3);n==="UTC"?(l.setUTCHours(0,0,0,0),l.getTime()/1e3<t&&l.setUTCDate(l.getUTCDate()+c)):(l.setHours(0,0,0,0),l.getTime()/1e3<t&&l.setDate(l.getDate()+c));let f=l.getTime()/1e3;for(;f<=r;)m.push(f),n==="UTC"?l.setUTCDate(l.getUTCDate()+c):l.setDate(l.getDate()+c),f=l.getTime()/1e3;return m}let d=Math.ceil(t/h)*h;for(;d<=r;d+=h)m.push(d);return m}function gt(e,t,r){return t.length===0?[]:t.map((n,o)=>o===0||o===t.length-1?(0,B.dateTimeFormatTimeAgo)(n*1e3,{timeZone:r}):"")}function yt(e,t,r){let n=e.scales.x,o=((n?.max??0)-(n?.min??0))*1e3,i=Math.floor(e.width/100),s=o/1e3/i,{increment:a}=De(s),u=t.map(c=>c*1e3);return ht(u,a,o,r)}function Fe(e,t,r=!1){let n=r?(i,s,a,u)=>ft(i,a,u):(i,s,a,u)=>bt(i,a,u,t),o=r?(i,s)=>gt(i,s,t):(i,s)=>yt(i,s,t);return{font:W(e),labelFont:W(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:n,values:o,size:20}}var X=require("@floating-ui/dom"),Ve=require("react-dom/client"),Tt=4,vt=8,be=class{overlay=null;reactRoot=null;renderedUplot=null;initialize(){this.overlay||(this.overlay=document.createElement("div"),this.overlay.id="unblind-tooltip-overlay",this.overlay.style.display="none",this.overlay.style.position="fixed",this.overlay.style.pointerEvents="none",this.overlay.style.zIndex="9999",document.body.appendChild(this.overlay),this.reactRoot=(0,Ve.createRoot)(this.overlay))}getOverlay(){return this.overlay}render(t,r){this.reactRoot?(this.reactRoot.render(r),this.renderedUplot=t):this.renderedUplot=null}show(){this.overlay&&(this.overlay.style.display="block")}hide(t){if(t!==this.renderedUplot){console.warn("Hide call plot");return}this.overlay&&(this.overlay.style.display="none"),this.render(null,null)}getRenderedUplot(){return this.renderedUplot}async positionTooltip(t){let r=this.getOverlay();if(r){let{x:n,y:o}=await(0,X.computePosition)({getBoundingClientRect:()=>({x:t.left,y:t.top,width:0,height:0,top:t.top,left:t.left,right:t.left,bottom:t.top})},r,{placement:"top-start",strategy:"fixed",middleware:[(0,X.offset)({mainAxis:Tt,crossAxis:vt}),(0,X.flip)()]});r.style.left=`${n}px`,r.style.top=`${o}px`}}},U=new be;var ge=require("@unblind/units"),ye=require("react");function Ke(e){return e.metric.displayName||e.metric.name||(typeof e.serie.label=="string"?e.serie.label:e.serie.label?.textContent||"Unknown")}function Oe(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 ze(e){return[...e].sort((t,r)=>(Number(r.value)||0)-(Number(t.value)||0))}function Be(e){return[...e].sort((t,r)=>Oe(t).localeCompare(Oe(r)))}function Ct(e){let t={};return e.forEach(r=>{let n=Ke(r);t[n]||(t[n]=[]),t[n].push(r)}),t}function qe(e,t,r,n="original"){if(r==="flat")return[{label:"",items:t?ze(e):Be(e)}];let o=Ct(e);return Object.keys(o).sort((s,a)=>s.localeCompare(a)).map(s=>{let a=o[s];if(!a)return{label:J(s,n),items:[]};let u=t?ze(a):Be(a);return{label:J(s,n),items:u}})}function J(e,t,r){switch(t){case"suffix":{let n=e.split(/[._-]/),o=n[n.length-1]||"";return r?o:o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()}case"title":return e.split(/[._-]/).map(n=>r?n:n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" ");default:return e}}function He(e,t){if(t&&t!=="auto")return t;let r=e.some(o=>o.attributes&&Object.keys(o.attributes).length>0),n=new Set(e.map(Ke));return r&&n.size>=1?"group-by-metric":"flat"}var g=require("react/jsx-runtime");function xt(){return(0,g.jsx)("span",{"data-text":", ",className:"ub-tooltip-item-attribute-divider"})}function At({value:e}){return(0,g.jsx)("span",{className:"ub-tooltip-item-attribute-value ub-truncate",children:e})}function Pt({keyValue:e,labelFormat:t}){return(0,g.jsxs)("span",{className:"ub-tooltip-item-attribute-key",children:[J(e,t),":"]})}function kt({children:e}){return(0,g.jsx)("div",{className:"ub-tooltip-item-attribute-container",children:e})}function St({hideAttributeKey:e,children:t}){return(0,g.jsx)("div",{className:"ub-truncate"+(e?" ub-tooltip-item-hidden-attribute-key":" ub-tooltip-item-attribute-with-key"),children:t})}function Ge({hideAttributeKey:e,attribute:t,labelFormat:r,isLastAttribute:n}){let[o,i]=t;return(0,g.jsxs)(kt,{children:[(0,g.jsxs)(St,{hideAttributeKey:e,children:[!e&&(0,g.jsx)(Pt,{keyValue:o,labelFormat:r}),(0,g.jsx)(At,{value:i})]}),!n&&e&&(0,g.jsx)(xt,{})]})}function wt({item:e,hideMetric:t,hideAttributeKey:r,hideAttributes:n,labelFormat:o}){let s=Object.entries(e.attributes||{}),a=s.length>0&&!n;return n&&t&&console.warn("Invalid configuration. Attributes and metrics are hidden."),(0,g.jsxs)("div",{className:"ub-tooltip-item-row",children:[(0,g.jsxs)("div",{className:"ub-tooltip-item-left"+(t?" ub-tooltip-item-hidden-metric":""),children:[(0,g.jsxs)("div",{className:"ub-tooltip-item-heading",children:[(0,g.jsx)("span",{className:"ub-tooltip-item-dot",style:{backgroundColor:e.color}}),t?(0,g.jsx)("div",{className:"ub-tooltip-item-attributes",children:s.map((u,c)=>(0,g.jsx)(Ge,{hideAttributeKey:r,attribute:u,labelFormat:o,isLastAttribute:c>=s.length-1},"attr_"+u[0]))}):(0,g.jsx)("span",{className:"ub-truncate"+(a?" ub-tooltip-item-metric-name-with-attributes":" ub-tooltip-item-metric-name-without-attributes"),children:J(e.metric.name,o)})]}),a&&!t&&(0,g.jsx)("div",{className:"ub-tooltip-item-attributes",children:s.map((u,c)=>(0,g.jsx)(Ge,{hideAttributeKey:r,attribute:u,labelFormat:o,isLastAttribute:c>=s.length-1},"attr_"+u[0]))})]}),(0,g.jsx)("div",{className:"ub-tooltip-item-value",children:e.formattedValue??(0,g.jsx)("span",{className:"ub-tooltip-item-value--empty",children:"\u2014"})})]})}function Lt({className:e="ub-tooltip-divider",...t}){return(0,g.jsx)("hr",{role:"presentation",...t,className:e})}function Rt({group:e,groupIdx:t,hideAttributeKey:r,hideMetric:n,hideAttributes:o,labelFormat:i,hideGroupLabel:s}){return(0,g.jsxs)("div",{className:"ub-tooltip-group",children:[!s&&(0,g.jsx)("div",{className:`ub-tooltip-group-header ub-truncate${t>0?" ub-tooltip-group-header--separator":""}`,children:e.label}),(0,g.jsx)("div",{className:"ub-tooltip-items",children:e.items.map((a,u)=>(0,g.jsx)(wt,{item:a,labelFormat:i,hideAttributeKey:r,hideMetric:n,hideAttributes:o},`item-${t}-${u}`))})]},e.label)}function _e({timestamp:e,items:t,timeZone:r,spansMultipleDays:n,sortByValues:o,labelFormat:i="original",layout:s="flat",hideAttributeKey:a,hideMetric:u,hideAttributes:c}){let h=n?(0,ge.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:r}):(0,ge.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:r}),m=(0,ye.useMemo)(()=>He(t,s),[t,s]),d=m==="flat",f=typeof u=="boolean"?u:m==="group-by-metric",y=typeof a=="boolean"?a:!1,p=typeof c=="boolean"?c:!1,b=(0,ye.useMemo)(()=>qe(t,o,m,i),[t,o,m,i]);return(0,g.jsxs)("div",{className:"ub-tooltip",children:[(0,g.jsx)("div",{className:"ub-tooltip-datetime",children:h}),(0,g.jsx)(Lt,{}),b.length>0?(0,g.jsx)("div",{className:"ub-tooltip-content",children:b.map((C,T)=>(0,g.jsx)(Rt,{group:C,groupIdx:T,hideAttributeKey:y,hideMetric:f,hideAttributes:p,hideGroupLabel:d,labelFormat:i},C.label))}):(0,g.jsx)("div",{className:"ub-tooltip-no-data",children:"No data available"})]})}var Te=require("react/jsx-runtime");function Ut(e,t){if(!e||e.length===0)return!1;let r=e[0],n=e[e.length-1];if(r==null||n==null)return!1;let o=new Date(r*1e3),i=new Date(n*1e3),s=a=>t==="UTC"?`${a.getUTCFullYear()}-${a.getUTCMonth()}-${a.getUTCDate()}`:a.toLocaleDateString(void 0,{timeZone:t});return s(o)!==s(i)}function Et(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 n=e.data[0].length;for(let o=1;t+o<n||t-o>=0;o++){let i=t-o,s=t+o;if(i>=0){for(let a=1;a<e.series.length;a++)if(e.data[a]?.[i]!=null)return i}if(s<n){for(let a=1;a<e.series.length;a++)if(e.data[a]?.[s]!=null)return s}}return t}function Mt(e,t,r,n,o,i){let s=!1,a=[];for(let u=1;u<e.series.length;u++){let c=e.data[u]?.[t]??null;if(n&&c!=null&&u>1){let p=e.data[u-1]?.[t]??0;c=c-p}let h=e.series[u],m=i?.[u-1];if(!m){console.warn("Original serie not found");continue}let d=o[m.metric];if(!d){console.warn("Metric metadata not found");continue}let l=h?.stroke,f=typeof l=="function"?l(e,u):l??"#ffffff00",y=c==null?void 0:r?r(c):String(c);m?.attributes&&Object.keys(m?.attributes).length>0&&(s=!0),a.push({metric:d,color:f,value:c===null?void 0:c,formattedValue:y,attributes:m?.attributes,serie:h})}return{items:a,hasAttributes:s}}function $e(e,t,r,n,o,i,s,a,u,c,h,m){let d,l,f,y=!1;function p(){let b=d.getBoundingClientRect();l=b.left,f=b.top}return{hooks:{init:b=>{U.initialize(),d=b.over,window.addEventListener("scroll",p,!0),window.addEventListener("resize",p),d.onmouseenter=()=>{y=!0,U.show()},d.onmouseleave=()=>{y=!1,U.getRenderedUplot()===b&&U.hide(b)},p()},setSize:()=>{p()},setCursor:b=>{let{left:C,top:T,idx:x}=b.cursor;if(!y||x==null){U.getRenderedUplot()===b&&U.hide(b);return}let v=b.data[0],A=Ut(v,o),L=Et(b,x),R=b.data[0][L];if(R===void 0)return;let{items:E}=Mt(b,L,e,t,r,s);U.show();let I=i,M=I?(0,Te.jsx)(I,{timestamp:R,items:E,timeZone:o}):(0,Te.jsx)(_e,{timestamp:R,items:E,timeZone:o,spansMultipleDays:A,stacked:t,sortByValues:n,layout:a,labelFormat:u,hideAttributeKey:c,hideAttributes:h,hideMetric:m});U.render(b,M),U.positionTooltip({left:(C||0)+l,top:(T||0)+f})},destroy(b){window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),d&&(d.onmouseenter=null,d.onmouseleave=null),U.getRenderedUplot()===b&&U.hide(b)}}}}var se=["oklch(0.70 0.24 293)","oklch(0.85 0.18 95)","oklch(0.65 0.25 255)","oklch(0.72 0.26 27)","oklch(0.70 0.22 150)","oklch(0.78 0.18 50)","oklch(0.72 0.18 215)","oklch(0.70 0.27 301)","oklch(0.75 0.20 90)","oklch(0.68 0.23 277)","oklch(0.70 0.18 193)","oklch(0.68 0.25 4)"],W=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,je=(e,t)=>{let r=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!r&&t.unit?r=t.unit.code:r&&t.unit.code!==r&&(r=void 0)),r};function Nt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.fill)&&Array.isArray(e.border)}function It(e){return Array.isArray(e)}var We=(e,t,r,n,o,i)=>{if(r)return It(r)?r[t]:Nt(r)?i?r.fill[t]:r.border[t]:r(e,t,n,i);let s=i?`--ub-chart-serie-color-fill-${t+1}`:`--ub-chart-serie-color-${t+1}`,a=o.getPropertyValue(s).trim();return a||(i&&(n==="step"||n==="line"||n==="spline")?`oklch(from ${se[t%se.length]} l c h / 0.4)`:se[t%se.length])},Dt=e=>{let t=Z.default.paths.bars({size:[.6,100],radius:0,gap:0}),r=Z.default.paths.linear({alignGaps:0}),n=Z.default.paths.spline({alignGaps:1}),o=Z.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 n;default:return r}},Ft=(e,t,r,n,o)=>We(e,t,r,n,o,!0),Vt=(e,t)=>{switch(e){case"bar":return 1;case"line":return t?1.5:2;case"spline":return t?1.5:2;case"area":return 1;case"step":return 1.5;default:return 1}},Ot=(e,t,r)=>{if(t<0||r<0)return[t,r];let n=e.posToVal(t,"x"),o=e.data[0];if(!o||o.length===0)return[t,r];let i=0,s=0,a=o.length-1;for(;a-s>1;){let l=Math.floor((s+a)/2),f=o[l];f!=null&&f<n?s=l:a=l}let u=o[s],c=o[a];u!=null&&c!=null?i=Math.abs(u-n)<Math.abs(c-n)?s:a:u!=null?i=s:c!=null&&(i=a);let h=i;for(let l=i;l>=0;l--){let f=!1;for(let y=1;y<e.data.length;y++){let p=e.data[y];if(p&&p[l]!=null){f=!0;break}}if(f){h=l;break}}let m=o[h];return m==null?[t,r]:[e.valToPos(m,"x"),r]},zt=(e,t)=>{let r=t.getPropertyValue("--ub-chart-font-color").trim(),n=t.getPropertyValue("--ub-chart-grid-color").trim(),o=e.axes?.[0],i=e.axes?.[1];return o&&(o.stroke=r,o.grid?o.grid.stroke=n:o.grid={stroke:n}),i&&(i.stroke=r,i.grid?i.grid.stroke=n:i.grid={stroke:n}),e},Bt=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}`).trim()||e.getPropertyValue("--ub-chart-threshold-default").trim(),Kt=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}-fill`).trim()||e.getPropertyValue("--ub-chart-threshold-default-fill").trim(),qt=e=>{switch(e){case"bold":return 2;case"line":return 1;case"dashed":return 1;default:return 1}},Ht=e=>e==="line"?void 0:[5,5],Gt=(e,t)=>{if(t){let r=[];return t.forEach(n=>{let o={label:n.label,stroke:Bt(e,n.level),width:qt(),dash:Ht(n.type),points:{show:!1,size:0},spanGaps:!0,show:!0,auto:!1};Y(n)||r.push(o),r.push(o)}),r}else return[]},_t=(e,t,r,n)=>{if(!n||!n.some(i=>ae(i)))return t.bands;let o=n.map((i,s)=>Y(i)?null:{series:[e.length+s*2+1,e.length+s*2+2],fill:Kt(r,i.level),dir:1}).filter(i=>i!==null);return[...t.bands,...o]},$t=(e,t,r,n,o,i,s)=>{let a=Vt(t,n);return[{},...e.map((u,c)=>({label:u.metric,stroke:We(u,c,r,t,i),width:a,points:{show:!1},spanGaps:!0,paths:Dt(t),fill:n||o?Ft(u,c,r,t,i):void 0})),...Gt(i,s)]},Qt=e=>typeof e=="string"&&String(e).toLowerCase().trim()==="by"?"bytes":e,Xe=(e,t,r,n,o,i,s,a,u,c,h,m,d,l,f,y,p,b,C,T,x,k)=>{let v=window.getComputedStyle(e),A=v.fontFamily,L=e?.clientWidth??1050,R=e?.clientHeight??250,E=Qt(n),I=(0,Qe.getValueFormat)(E==="1"?null:E),M=q=>{let w=I(q,k);return w.text+(w.suffix?.trim()||"")},N={width:L,height:R,scales:{y:{range:Ye(n,T,x)}},plugins:[$e(M,s,t,c,h,m,o,f,l,y,p,b)],padding:d?[10,15,10,15]:[8,15,8,15],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:Ot},series:$t(o,i,a,u,s,v,C),bands:_t(o,r,v,C),axes:[Fe(A,h,d),Je(I,A)],legend:{show:!1}};return zt(N,v)};var Ze=(e,t=4)=>{let r=e/t,n=Math.pow(10,Math.floor(Math.log10(r))),o=r/n,i;return o>5?i=10*n:o>2?i=5*n:o>1?i=2*n:i=n,Math.ceil(e/i)*i},P=(e,t)=>typeof e=="number"?e:t,Ye=(e,t,r)=>(n,o,i)=>{if(o===0&&i===0)return[P(t,0),P(r,100)];let s=1,a=i*(1+s),u=o<0?o*(1+s):o*(1-s);if(e==="percent"||e==="percentunit"){let m=e==="percent"?100:1;return i>m?o<0?[P(t,u),P(r,a)]:[P(t,0),P(r,a)]:o<0?[P(t,u),P(r,m)]:[P(t,0),P(r,m)]}if(i<=.9999)return o<=0?[P(t,u),P(r,1)]:[P(t,0),P(r,1)];let c=Ze(a),h=Ze(Math.abs(u));return o<0?[P(r,-h),P(r,c)]:[P(t,0),P(r,c)]},jt=(e,t,r,n)=>{let o=e.axes[r];if(n>1)return o?._size||0;let i=(o?.ticks?.size||0)+(o?.gap||0),s=(t??[]).reduce((a,u)=>u.length>a.length?u:a,"");return s!=""&&(e.ctx.font=o?.font?.[0]??e.ctx.font,i+=e.ctx.measureText(s).width/devicePixelRatio),Math.ceil(i)};function Je(e,t){return{gap:0,font:W(t),labelFont:W(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(r,n)=>n.map(o=>{let i=e(o);return i.text+(i.suffix?.trim()||"")}),size:jt,space:60}}function et(e,t){let r=[],n=e[0],o=n.length,i=Array(o).fill(0),s=[n];if(e.forEach((a,u)=>{u!==0&&(t?s.push(a):s.push(a.map((c,h)=>i[h]=i[h]+(c||0))))}),!t)for(let a=1;a<e.length-1;a++)r.push({series:[a+1,a]});return{data:s,bands:r.filter(a=>a.series[1]>-1)}}var rt=require("react/jsx-runtime");function ue(e){let{times:t,series:r,metadata:n,type:o,className:i,timeZone:s,options:a,tooltip:u,colors:c,tooltipComponent:h,sortByValues:m=!1,unit:d,fill:l=!1,thresholds:f,min:y,max:p}=e,{layout:b,labelFormat:C,hideAttributeKey:T,hideAttributes:x,hideMetric:k}=u||{},v=(0,le.useRef)(null),A=G(),L=c||A.colors;return(0,le.useEffect)(()=>{if(!r||r.length===0){console.warn("No series provided");return}let R=[t],E=d;r.forEach(w=>{let _=n[w.metric];d||(E=je(E,_)),R.push(w.values)});let I=o==="bar"||o==="area",M=et(R,!I);f&&f.forEach(w=>{Y(w)?M.data.push(new Array(t.length).fill(w.value)):ae(w)&&(M.data.push(new Array(t.length).fill(w.from)),M.data.push(new Array(t.length).fill(w.to)))});let N=v.current,q=null;if(N){let w=Xe(N,n,M,E,r,o,I,L,l,m,s,h,!1,C,b,T,x,k,f,y,p);q=new tt.default({...w,...a},M.data,N);let _=new ResizeObserver(()=>{q?.setSize({width:N.clientWidth,height:N.clientHeight})});return _.observe(N),()=>{q?.destroy(),_.disconnect()}}},[r,t,o,n,s,h,L,l,m,d,C,b,T,x,k,f,y,p,a]),(0,rt.jsx)("div",{ref:v,className:"ub-chart-container"+(i?` ${i}`:"")})}var K=require("react/jsx-runtime");function nt({metrics:e,operator:t,attributes:r,groupBy:n,interval:o,type:i="line",className:s,appearance:a,unit:u,thresholds:c,min:h,max:m,colors:d,tooltip:l,sortByValues:f,fill:y}){let p=G(),b=o??p.interval,C=r??p.attributes,T=n??p.groupBy,x=t??p.operator,k=d??p.colors,v=typeof f=="boolean"?f:p.sortByValues,A=typeof y=="boolean"?y:p.fill,L=a?.components?.Tooltip??p.appearance.components.Tooltip,R=(0,ot.useMemo)(()=>({layout:l?.layout??p.tooltip?.layout,format:l?.labelFormat??p.tooltip?.labelFormat,hideAttributes:l?.hideAttributes??p.tooltip?.hideAttributes,hideAttributeKey:l?.hideAttributeKey??p.tooltip?.hideAttributeKey,hideMetric:l?.hideMetric??p.tooltip?.hideMetric}),[l?.layout,l?.labelFormat,l?.hideAttributes,l?.hideAttributeKey,l?.hideMetric,p.tooltip?.layout,p.tooltip?.labelFormat,p.tooltip?.hideAttributes,p.tooltip?.hideAttributeKey,p.tooltip?.hideMetric]),{isLoading:E,data:I,hasError:M}=ie({queries:(Array.isArray(e)?e:[e]).map(V=>({metrics:[V],operator:x,attributes:C,groupBy:T})),timeRange:p.timeRange,startTime:p.startTime,endTime:p.endTime,interval:b}),{series:N,times:q,metadata:w}=I,_=N.every(V=>V.isEmpty),ce=`ub-chart-container${s?` ${s}`:""}`;if(E){let V=a?.components?.Loading??p.appearance.components.Loading;return(0,K.jsx)("div",{className:ce,children:(0,K.jsx)(V,{})})}if(M){let V=a?.components?.Error??p.appearance.components.Error;return(0,K.jsx)("div",{className:ce,children:(0,K.jsx)(V,{})})}if(_){let V=a?.components?.Empty??p.appearance.components.Empty;return(0,K.jsx)("div",{className:ce,children:(0,K.jsx)(V,{})})}return(0,K.jsx)(ue,{times:q,series:N,metadata:w,type:i,className:s,tooltip:R,colors:k,sortByValues:v,unit:u,fill:A,tooltipComponent:L,thresholds:c,min:h,max:m})}0&&(module.exports={Chart,Empty,Error,Loading,Scope,Timeseries,UnblindProvider,useLogs,useMetrics,useRefresh,useScope,useTimeseries,useUsage});
|
|
1
|
+
"use strict";var Ct=Object.create;var re=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,Rt=Object.prototype.hasOwnProperty;var kt=(e,t)=>{for(var r in t)re(e,r,{get:t[r],enumerable:!0})},De=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of St(t))!Rt.call(e,i)&&i!==r&&re(e,i,{get:()=>t[i],enumerable:!(o=xt(t,i))||o.enumerable});return e};var fe=(e,t,r)=>(r=e!=null?Ct(Pt(e)):{},De(t||!e||!e.__esModule?re(r,"default",{value:e,enumerable:!0}):r,e)),At=e=>De(re({},"__esModule",{value:!0}),e);var pr={};kt(pr,{Chart:()=>pe,Empty:()=>oe,Error:()=>ie,Loading:()=>ne,Scope:()=>Z,Timeseries:()=>ht,UnblindProvider:()=>Ie,useLogs:()=>Ke,useMetrics:()=>qe,useRefresh:()=>ye,useScope:()=>O,useTimeseries:()=>se,useUsage:()=>We});module.exports=At(pr);var _=require("@tanstack/react-query"),q=require("react"),ge=require("react/jsx-runtime"),Ve=(0,q.createContext)(void 0);function be({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:o="/api/unblind",fetchImpl:i}){let n=(0,q.useMemo)(()=>{if(t)return t;let s={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},l={defaultOptions:{queries:s}};return r?new _.QueryClient({...r,defaultOptions:{...r.defaultOptions,queries:{...s,...r.defaultOptions?.queries}}}):new _.QueryClient(l)},[t,r]),a=(0,q.useMemo)(()=>({apiBaseUrl:o,fetchImpl:i}),[o,i]);return(0,ge.jsx)(_.QueryClientProvider,{client:n,children:(0,ge.jsx)(Ve.Provider,{value:a,children:e})})}function N(){let e=(0,q.useContext)(Ve);if(!e)throw new Error("useUnblindConfig must be used within an UnblindClientProvider. Please wrap your app or component tree with <UnblindClientProvider>.");return e}function ye(){let e=(0,_.useQueryClient)();return(0,q.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var V=require("react");var D=require("react/jsx-runtime");function oe(){return(0,D.jsx)("div",{className:"ub-default",children:(0,D.jsxs)("div",{className:"ub-empty-content",children:[(0,D.jsx)("div",{className:"ub-empty-icon-wrapper",children:(0,D.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:"ub-icon",children:(0,D.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"})})}),(0,D.jsx)("p",{className:"ub-empty-text","data-text":"No data available for this time range"})]})})}function ie(){return(0,D.jsx)("div",{className:"ub-default-error"})}function ne(){return(0,D.jsx)("div",{className:"ub-default-loading","data-text":"Loading"})}var Oe=require("react/jsx-runtime"),Te=(0,V.createContext)(void 0);function Z({children:e,timeRange:t,startTime:r,endTime:o,interval:i,attributes:n,groupBy:a,operator:s,appearance:l,tooltip:m,colors:f,fill:g,hideAxis:h,hideCursor:u,relativeTimeAxis:b,invertSort:y}){let d=(0,V.useContext)(Te),v=l?.components?.Loading||d?.appearance?.components?.Loading,T=l?.components?.Error||d?.appearance?.components?.Error,x=l?.components?.Tooltip||d?.appearance?.components?.Tooltip,p=l?.components?.Empty||d?.appearance?.components?.Empty,C=typeof m?.hide=="boolean"?m?.hide:d?.tooltip?.hide,P=typeof m?.visibilityLimit=="number"?m?.visibilityLimit:d?.tooltip?.visibilityLimit,R=(0,V.useMemo)(()=>({components:{...v&&{Loading:v},...T&&{Error:T},...x&&{Tooltip:x},...p&&{Empty:p}}}),[v,T,x,p]),k=(0,V.useMemo)(()=>({hide:C,visibilityLimit:P}),[C,P]),L=(0,V.useMemo)(()=>({timeRange:t??d?.timeRange,startTime:r??d?.startTime,endTime:o??d?.endTime,interval:i??d?.interval,attributes:n??d?.attributes,groupBy:a??d?.groupBy,operator:s??d?.operator,colors:f??d?.colors,relativeTimeAxis:typeof b=="boolean"?b:d?.relativeTimeAxis,fill:typeof g=="boolean"?g:d?.fill,hideAxis:typeof h=="boolean"?h:d?.hideAxis,hideCursor:typeof u=="boolean"?u:d?.hideCursor,invertSort:typeof y=="boolean"?y:d?.invertSort,appearance:R,tooltip:k}),[t,r,o,i,n,a,s,f,g,b,h,u,R,k,d,y]);return(0,Oe.jsx)(Te.Provider,{value:L,children:e})}var Lt="6h";function O(){let e=(0,V.useContext)(Te);return(0,V.useMemo)(()=>({...e,timeRange:e?.timeRange||Lt,appearance:{components:{Loading:e?.appearance?.components?.Loading??ne,Error:e?.appearance?.components?.Error??ie,Empty:e?.appearance?.components?.Empty??oe,Tooltip:e?.appearance?.components?.Tooltip}}}),[e])}var ve=require("react/jsx-runtime");function Ie({children:e,queryClient:t,apiBaseUrl:r,fetchImpl:o,timeRange:i,startTime:n,endTime:a,interval:s,attributes:l,groupBy:m,operator:f,appearance:g,tooltip:h,colors:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,invertSort:T}){return(0,ve.jsx)(be,{queryClient:t,apiBaseUrl:r,fetchImpl:o,children:(0,ve.jsx)(Z,{timeRange:i,startTime:n,endTime:a,interval:s,attributes:l,groupBy:m,operator:f,appearance:g,tooltip:h,colors:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,invertSort:T,children:e})})}var ze=require("@tanstack/react-query");function qe(){let{apiBaseUrl:e,fetchImpl:t=fetch}=N(),r=(0,ze.useQuery)({queryKey:["unblind","metrics"],queryFn:async()=>{let o=await t(`${e}/metrics`,{headers:{"Content-Type":"application/json"}});if(!o.ok)throw new Error("Error loading metrics metadata");if(o.status===200){let{data:i}=await o.json();return i}else throw new Error("Unexpected status code")}});return{metrics:r.data,isLoading:r.isLoading,hasError:r.isError,refetch:r.refetch}}var Qe=require("@tanstack/react-query"),j=require("react");var Fe=fe(require("ms"));function Be({scope:e,props:t}){return t.timeRange||t.startTime&&t.endTime?t:e}function wt(e){let t=Math.floor(Date.now()/1e3);return[t-Math.floor((0,Fe.default)(e)/1e3),t]}function H(e,t,r){let o,i;if(typeof t=="number"&&typeof r=="number")o=t,i=r;else if(e){let[n,a]=wt(e);o=n,i=a}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[o,i]}var _e=require("react");function W(e){let t=O(),{timeRange:r,startTime:o,endTime:i}=Be({props:e,scope:t});return(0,_e.useMemo)(()=>({timeRange:r,startTime:o,endTime:i}),[r,o,i])}function se(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:o,endTime:i,timeRange:n}=W(e),{queries:a,interval:s}=e,l=(0,j.useMemo)(()=>a.map(p=>p.metrics.join(",")).join(","),[a]),m=(0,j.useMemo)(()=>a.map(p=>{let C=p.attributes;if(!C)return"";let P=Object.keys(C);return P.length===0?"":P.map(R=>R+":"+C[R]?.join(",")).join(",")}).join(","),[a]),f=(0,j.useMemo)(()=>a.map(p=>p.operator),[a]),g=(0,j.useMemo)(()=>a.map(p=>p.groupBy).join(", "),[a]),u=(0,Qe.useQuery)({queryKey:["unblind","timeseries",l,m,o,i,n,s,f,g],queryFn:async()=>{if(!l)throw new Error("Missing required parameters");if(l.length===0)throw new Error("No series provided");let[p,C]=H(n,o,i),P={queries:a,startTime:p,endTime:C,interval:s},R=await r(`${t}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!R.ok)throw new Error("Error fetching metric");let{series:k,times:L,metadata:E}=await R.json();if(!k)throw console.error("Series not found"),new Error("Series not found");return{series:k,times:L,metadata:E}},enabled:!!l&&(typeof o=="number"&&typeof i=="number"||!!n)}),{metadata:b,series:y,times:d}=(0,j.useMemo)(()=>u.data?{series:u.data.series,times:u.data.times,metadata:u.data.metadata}:{series:[],times:[],metadata:{}},[u]),v=u.isLoading,T=u.isFetching,x=u.isError;return{data:{series:y,times:d,metadata:b},isLoading:v,isFetching:T,hasError:x,refetch:u.refetch}}var $e=require("@tanstack/react-query"),He=require("react");function We(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:o,endTime:i,timeRange:n}=W(e),s=(0,$e.useQuery)({queryKey:["unblind","usage",n,o,i],queryFn:async()=>{let[g,h]=H(n,o,i),u=`${t}/tenants/usage`,b=await r(u,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:g,endTime:h})});if(!b.ok)throw new Error("Error fetching usage");let{data:y}=await b.json();if(!y)throw new Error("usage not found");return y},enabled:typeof o=="number"&&typeof i=="number"||!!n}),l=(0,He.useMemo)(()=>s.data?s.data||[]:[],[s]),m=s.isLoading||s.isRefetching,f=s.isError;return{usage:l,isLoading:m,hasError:f,refetch:s.refetch}}var je=require("@tanstack/react-query"),Ge=require("react");function Ke(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{timeRange:o,startTime:i,endTime:n}=W(e),{attributes:a,body:s,severity:l,traceId:m,spanId:f,logId:g}=e,h=(0,je.useInfiniteQuery)({queryKey:["unblind","logs",o,i,n,s,l,g,JSON.stringify(a)],queryFn:async({pageParam:b})=>{let[y,d]=H(o,i,n),v=await r(`${t}/tenants/logs`,{method:"POST",body:JSON.stringify({attributes:a,body:s,severity:l,traceId:m,spanId:f,logId:g,startTime:y,endTime:d,pagination:{page:b}}),headers:{"Content-Type":"application/json"}});if(!v.ok)throw new Error("Error fetching logs");let{data:T,nextPage:x}=await v.json();if(!T)throw new Error("data not found");return{data:T,nextPage:x}},initialPageParam:void 0,getNextPageParam:b=>b.nextPage});return{logs:(0,Ge.useMemo)(()=>h.data?h.data.pages.flatMap(b=>b.data||[]):[],[h.data]),isLoading:h.isLoading,hasError:h.isError,hasNextPage:h.hasNextPage??!1,fetchNextPage:h.fetchNextPage,isFetchingNextPage:h.isFetchingNextPage,refetch:h.refetch}}var me=require("react");var ue=require("react"),mt=fe(require("uplot"));var ee=e=>"value"in e,ae=e=>"from"in e&&"to"in e;var te=fe(require("uplot")),it=require("@unblind/units");var F=require("@unblind/units");var A={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},G={second:[1,2,5,10,15,30],minute:[1,2,5,10,15,30],hour:[1,2,3,4,6,8,12],day:[1,2,3,7,14],month:[1,2,3,6],year:[1,2,5,10,20,50,100]};function Ut(e,t,r,o){if(t>7*A.day){let i=F.systemDateFormats.interval.year,n=Math.round(A.year/A.day)*A.day;if(Math.round(t/A.day)*A.day===n)i=F.systemDateFormats.interval.year;else{if(t<=A.year)return e.map(s=>{let l=new Date(s);return(o==="UTC"?l.getUTCDate():l.getDate())===1?l.toLocaleDateString(void 0,{month:"short",year:"numeric",timeZone:o}):l.toLocaleDateString(void 0,{day:"numeric",month:"short",timeZone:o})});i=F.systemDateFormats.interval.day}return e.map(s=>(0,F.dateTimeFormat)(s,{format:i,timeZone:o}))}return e.map(i=>{let n=new Date(i),a=t<A.minute,s=t<A.second,l=n.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:o});return(l==="00:00"||l==="24:00")&&!a&&!s?n.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:o}):n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:a?"2-digit":void 0,fractionalSecondDigits:s?3:void 0,hour12:!1,timeZone:o})})}function Et(e){let t=[{size:A.second/1e3,increments:G.second},{size:A.minute/1e3,increments:G.minute},{size:A.hour/1e3,increments:G.hour},{size:A.day/1e3,increments:G.day},{size:A.month/1e3,increments:G.month},{size:A.year/1e3,increments:G.year}];for(let i of t)for(let n of i.increments){let a=i.size*n;if(a>=e)return{increment:a*1e3,multiplier:n}}let r=t[t.length-1],o=r.increments[r.increments.length-1];return{increment:r.size*o*1e3,multiplier:o}}function Mt(e,t,r){return[t,r]}function Nt(e,t,r){return t.length===0?[]:t.map((o,i)=>i===0||i===t.length-1?(0,F.dateTimeFormatTimeAgo)(o*1e3,{timeZone:r}):"")}function Dt(e,t,r){let o=e.scales.x,i=((o?.max??0)-(o?.min??0))*1e3,n=Math.floor(e.width/100),a=i/1e3/n,{increment:s}=Et(a),l=t.map(m=>m*1e3);return Ut(l,s,i,r)}function Xe(e,t,r=!1,o=!1){let i=r?(a,s,l,m)=>Mt(a,l,m):void 0,n=r?(a,s)=>Nt(a,s,t):(a,s)=>Dt(a,s,t);return{font:K(e),labelFont:K(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:i,values:n,size:20,show:!o,align:r?2:void 0,space:(a,s,l,m,f)=>f<400?100:f<800?150:250}}var X=require("@floating-ui/dom"),Ye=require("react-dom/client"),Vt=4,Ot=8,Ce=class{overlay=null;reactRoot=null;renderedUplot=null;initialize(){this.overlay||(this.overlay=document.createElement("div"),this.overlay.id="unblind-tooltip-overlay",this.overlay.style.display="none",this.overlay.style.position="fixed",this.overlay.style.pointerEvents="none",this.overlay.style.zIndex="9999",document.body.appendChild(this.overlay),this.reactRoot=(0,Ye.createRoot)(this.overlay))}getOverlay(){return this.overlay}render(t,r){this.reactRoot?(this.reactRoot.render(r),this.renderedUplot=t):this.renderedUplot=null}show(){this.overlay&&(this.overlay.style.display="block")}hide(t){if(t!==this.renderedUplot){console.warn("Hide call plot");return}this.overlay&&(this.overlay.style.display="none"),this.render(null,null)}getRenderedUplot(){return this.renderedUplot}async positionTooltip(t){let r=this.getOverlay();if(r){let{x:o,y:i}=await(0,X.computePosition)({getBoundingClientRect:()=>({x:t.left,y:t.top,width:0,height:0,top:t.top,left:t.left,right:t.left,bottom:t.top})},r,{placement:"top-start",strategy:"fixed",middleware:[(0,X.offset)({mainAxis:Vt,crossAxis:Ot}),(0,X.flip)()]});r.style.left=`${o}px`,r.style.top=`${i}px`}}},U=new Ce;var xe=require("@unblind/units"),Y=require("react"),c=require("react/jsx-runtime"),It=6,Je=(0,Y.createContext)(null);function le(){let e=(0,Y.useContext)(Je);if(!e)throw new Error("useTooltipSerie must be used within a SerieProvider");return e}function zt({serie:e,children:t}){return(0,c.jsx)(Je.Provider,{value:e,children:t})}function Se({className:e="ub-tooltip-divider",...t}){return(0,c.jsx)("hr",{role:"presentation",...t,className:e})}function qt({formattedTime:e,unitCategory:t,tooltipSerieList:r,visibilityLimit:o,invertSort:i}){let n=r.slice(0,o),a=r.slice(o);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-metrics",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)(_t,{children:t})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map(s=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsx)(Ee,{children:(0,c.jsx)(Ze,{})}),(0,c.jsx)(we,{})]},s.metric.name)),(0,c.jsx)(Pe,{series:a,invertSort:i})]})]})}function Ft({formattedTime:e,tooltipSerieList:t,visibilityLimit:r,invertSort:o}){let i=t[0],n=t.slice(0,r),a=t.slice(r);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-attributes",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-serie-metric",children:tt(i?.metric.name||"")})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map((s,l)=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsx)(Ee,{children:(0,c.jsx)(et,{})}),(0,c.jsx)(we,{})]},"serie_"+l)),(0,c.jsx)(Pe,{series:a,invertSort:o})]})]})}function Bt({formattedTime:e,tooltipSerieList:t,unitCategory:r,visibilityLimit:o,invertSort:i}){let n=t.slice(0,o),a=t.slice(o);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-attributes",children:[(0,c.jsxs)(Ae,{children:[(0,c.jsx)(Le,{children:e}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:r})})]}),(0,c.jsx)(Se,{}),(0,c.jsxs)(ke,{children:[n.map((s,l)=>(0,c.jsxs)(Re,{serie:s,children:[(0,c.jsx)(Ue,{}),(0,c.jsxs)(Ee,{children:[(0,c.jsx)(Ze,{}),(0,c.jsx)(et,{})]}),(0,c.jsx)(we,{})]},"serie"+l)),(0,c.jsx)(Pe,{series:a,invertSort:i})]})]})}function _t(e){return(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:e.children})}function Pe({series:e,invertSort:t}){let r=e[0]?.formattedValue,o=!e.some(n=>(n.value||0)>0),i=!e.some(n=>n.value!==void 0);return e.length>0?i?(0,c.jsx)("span",{className:"ub-tooltip-summary",children:(0,c.jsxs)("span",{children:["+",e.length," more with no data"]})}):o?(0,c.jsx)("span",{className:"ub-tooltip-summary",children:(0,c.jsxs)("span",{children:["+",e.length," more with zero values"]})}):(0,c.jsxs)("span",{className:"ub-tooltip-summary",children:[(0,c.jsxs)("span",{children:["+",e.length," more with "]}),(0,c.jsx)("span",{children:`${t?"\u2265":"\u2264"} ${r}`})]}):(0,c.jsx)(c.Fragment,{})}function Re(e){return(0,c.jsx)(zt,{serie:e.serie,children:(0,c.jsx)("div",{className:"ub-tooltip-serie",children:e.children})})}function ke(e){return(0,c.jsx)("div",{className:"ub-tooltip-content",children:e.children})}function Ae(e){return(0,c.jsx)("div",{className:"ub-tooltip-header",children:e.children})}function Le(e){return(0,c.jsx)("div",{className:"ub-tooltip-datetime",children:e.children})}function Ze(){let e=le();return(0,c.jsx)("span",{className:"ub-tooltip-serie-metric",children:tt(e.metric.name)})}function we(){let e=le();return e.formattedValue?(0,c.jsx)("span",{className:"ub-tooltip-serie-value",children:e.formattedValue}):(0,c.jsx)("span",{className:"ub-tooltip-serie-value-empty",children:"\u2013"})}function Ue(){let e=le();return(0,c.jsx)("span",{style:{backgroundColor:e.color},className:"ub-tooltip-serie-color"})}function Ee(e){return(0,c.jsx)("span",{className:"ub-tooltip-serie-label ub-truncate",children:e.children})}function et(){let{attributes:e}=le();if(!e)return null;let t=Object.values(e);return(0,c.jsx)("div",{className:"ub-tooltip-serie-attributes ub-truncate",children:t.map((r,o)=>(0,c.jsxs)(Y.Fragment,{children:[(0,c.jsx)("span",{className:"ub-tooltip-serie-attribute-value",children:r}),o<t.length-1&&(0,c.jsx)("span",{"data-text":", ",className:"ub-tooltip-serie-attribute-divider"})]},"tooltip-"+r))})}function Qt({tooltipSerieList:e,invertSort:t}){return t?e.sort((r,o)=>(Number(r.value)||0)-(Number(o.value)||0)):e.sort((r,o)=>(Number(o.value)||0)-(Number(r.value)||0))}function tt(e,t){let r=e.split(/[._-]/),o=r[r.length-1]||"";return t?o:o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()}function rt({timestamp:e,tooltipSerieList:t,timeZone:r,spansMultipleDays:o,hasMultipleMetrics:i,hasAttributes:n,invertSort:a,visibilityLimit:s}){let l=Qt({tooltipSerieList:t,invertSort:a}),m=o?(0,xe.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:r}):(0,xe.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:r}),f=s||It;return n?n&&!i?(0,c.jsx)(Ft,{formattedTime:m,tooltipSerieList:l,visibilityLimit:f,invertSort:a}):(0,c.jsx)(Bt,{formattedTime:m,unitCategory:"",tooltipSerieList:l,visibilityLimit:f,invertSort:a}):(0,c.jsx)(qt,{formattedTime:m,unitCategory:"",tooltipSerieList:l,visibilityLimit:f,invertSort:a})}var Me=require("react/jsx-runtime");function $t(e,t){if(!e||e.length===0)return!1;let r=e[0],o=e[e.length-1];if(r==null||o==null)return!1;let i=new Date(r*1e3),n=new Date(o*1e3),a=s=>t==="UTC"?`${s.getUTCFullYear()}-${s.getUTCMonth()}-${s.getUTCDate()}`:s.toLocaleDateString(void 0,{timeZone:t});return a(i)!==a(n)}function Ht(e,t){let r=!1;for(let i=1;i<e.series.length;i++)if(e.data[i]?.[t]!=null){r=!0;break}if(r)return t;let o=e.data[0].length;for(let i=1;t+i<o||t-i>=0;i++){let n=t-i,a=t+i;if(n>=0){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[n]!=null)return n}if(a<o){for(let s=1;s<e.series.length;s++)if(e.data[s]?.[a]!=null)return a}}return t}function Wt(e,t,r,o,i,n,a){let s=[],l=e.data[0],m=new Set,f=new Set,g=!1;for(let h=1;h<e.series.length;h++){let u=e.data[h]?.[t]??null;if(o&&u!=null&&h>1){let C=e.data[h-1]?.[t]??0;u=u-C}let b=e.series[h],y=n?.[h-1];if(!y){console.warn("Original serie not found");continue}let d=i[y.metric];if(!d){console.warn("Metric metadata not found");continue}m.add(y.metric);let v=y?.attributes;if(v&&Object.keys(v).length>0){g=!0;for(let C in v)f.add(C)}let T=b?.stroke,x=typeof T=="function"?T(e,h):T??"#ffffff00",p=u==null?void 0:r?r(u):String(u);s.push({metric:d,color:x,value:u===null?void 0:u,formattedValue:p,attributes:v,serie:b})}return{tooltipSerieList:s,hasAttributes:g,hasMultipleMetrics:m.size>1,hasMultipleAttributes:f.size>1,spansMultipleDays:$t(l,a)}}function ot(e,t,r,o,i,n,a,s){let l,m,f,g=!1;function h(){let u=l.getBoundingClientRect();m=u.left,f=u.top}return{hooks:{init:u=>{U.initialize(),l=u.over,window.addEventListener("scroll",h,!0),window.addEventListener("resize",h),l.onmouseenter=()=>{g=!0,U.show()},l.onmouseleave=()=>{g=!1,U.getRenderedUplot()===u&&U.hide(u)},h()},setSize:()=>{h()},setCursor:u=>{let{left:b,top:y,idx:d}=u.cursor;if(!g||d==null){U.getRenderedUplot()===u&&U.hide(u);return}let T=Ht(u,d),x=u.data[0][T];if(x===void 0)return;let{tooltipSerieList:p,hasAttributes:C,hasMultipleAttributes:P,hasMultipleMetrics:R,spansMultipleDays:k}=Wt(u,T,e,t,r,n,o);U.show();let L=i,E=L?(0,Me.jsx)(L,{timestamp:x,tooltipSerieList:p,timeZone:o}):(0,Me.jsx)(rt,{timestamp:x,tooltipSerieList:p,timeZone:o,spansMultipleDays:k,stacked:t,hasAttributes:C,hasMultipleAttributes:P,hasMultipleMetrics:R,visibilityLimit:a,invertSort:s});U.render(u,E),U.positionTooltip({left:(b||0)+m,top:(y||0)+f})},destroy(u){window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),l&&(l.onmouseenter=null,l.onmouseleave=null),U.getRenderedUplot()===u&&U.hide(u)}}}}var ce=["oklch(0.70 0.24 293)","oklch(0.85 0.18 95)","oklch(0.65 0.25 255)","oklch(0.72 0.26 27)","oklch(0.70 0.22 150)","oklch(0.78 0.18 50)","oklch(0.72 0.18 215)","oklch(0.70 0.27 301)","oklch(0.75 0.20 90)","oklch(0.68 0.23 277)","oklch(0.70 0.18 193)","oklch(0.68 0.25 4)"],K=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,nt=(e,t)=>{let r=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!r&&t.unit?r=t.unit.code:r&&t.unit.code!==r&&(r=void 0)),r};function jt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.fill)&&Array.isArray(e.border)}function Gt(e){return Array.isArray(e)}var Kt=12,Xt=({isFilling:e,useSolid:t,index:r})=>{let o=r%Kt+1;return e?t?`--ub-chart-serie-color-${o}`:`--ub-chart-serie-fill-color-${o}`:`--ub-chart-serie-color-${o}`},st=(e,t,r,o,i,n)=>{let a=o==="bar"||o==="area";if(r)return Gt(r)?r[t]:jt(r)?n?r.fill[t]:r.border[t]:r(e,t,o,n);let s=Xt({isFilling:n,useSolid:a,index:t}),l=i.getPropertyValue(s).trim();return l||(n&&a?ce[t%ce.length]?.replace(")"," / 0.4)"):ce[t%ce.length])},Yt=e=>{let t=te.default.paths.bars({size:[.6,100],radius:0,gap:0}),r=te.default.paths.linear({alignGaps:0}),o=te.default.paths.spline({alignGaps:1}),i=te.default.paths.stepped({alignGaps:1});switch(e){case"line":return r;case"bar":return t;case"area":return r;case"step":return i;case"spline":return o;default:return r}},Jt=(e,t,r,o,i)=>st(e,t,r,o,i,!0),Zt=(e,t)=>{switch(e){case"bar":return 1;case"line":return t?1.5:2;case"spline":return t?1.5:2;case"area":return 1;case"step":return 1.5;default:return 1}},er=(e,t,r)=>{if(t<0||r<0)return[t,r];let o=e.posToVal(t,"x"),i=e.data[0];if(!i||i.length===0)return[t,r];let n=0,a=0,s=i.length-1;for(;s-a>1;){let u=Math.floor((a+s)/2),b=i[u];b!=null&&b<o?a=u:s=u}let l=i[a],m=i[s];l!=null&&m!=null?n=Math.abs(l-o)<Math.abs(m-o)?a:s:l!=null?n=a:m!=null&&(n=s);let f=n;for(let u=n;u>=0;u--){let b=!1;for(let y=1;y<e.data.length;y++){let d=e.data[y];if(d&&d[u]!=null){b=!0;break}}if(b){f=u;break}}let g=i[f];return g==null?[t,r]:[e.valToPos(g,"x"),r]},tr=(e,t)=>{let r=t.getPropertyValue("--ub-chart-font-color").trim(),o=t.getPropertyValue("--ub-chart-grid-color").trim(),i=e.axes?.[0],n=e.axes?.[1];return i&&(i.stroke=r,i.grid?i.grid.stroke=o:i.grid={stroke:o}),n&&(n.stroke=r,n.grid?n.grid.stroke=o:n.grid={stroke:o}),e},rr=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}`).trim()||e.getPropertyValue("--ub-chart-threshold-default").trim(),or=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}-fill`).trim()||e.getPropertyValue("--ub-chart-threshold-default-fill").trim(),ir=e=>{switch(e){case"bold":return 2;case"line":return 1;case"dashed":return 1;default:return 1}},nr=e=>e==="line"?void 0:[5,5],sr=(e,t)=>{if(t){let r=[];return t.forEach(o=>{let i={label:o.label,stroke:rr(e,o.level),width:ir(),dash:nr(o.type),points:{show:!1,size:0},spanGaps:!0,show:!0,auto:!1};ee(o)||r.push(i),r.push(i)}),r}else return[]},ar=(e,t,r,o)=>{if(!o||!o.some(n=>ae(n)))return t.bands;let i=o.map((n,a)=>ee(n)?null:{series:[e.length+a*2+1,e.length+a*2+2],fill:or(r,n.level),dir:1}).filter(n=>n!==null);return[...t.bands,...i]},lr=(e,t,r,o,i,n,a)=>{let s=Zt(t,o);return[{},...e.map((l,m)=>({label:l.metric,stroke:st(l,m,r,t,n),width:s,points:{show:!1},spanGaps:!0,paths:Yt(t),fill:o||i?Jt(l,m,r,t,n):void 0})),...sr(n,a)]},cr=e=>typeof e=="string"&&String(e).toLowerCase().trim()==="by"?"bytes":e,at=(e,t,r,o,i,n,a,s,l,m,f,g,h,u,b,y,d,v,T,x)=>{let p=window.getComputedStyle(e),C=p.fontFamily,P=e?.clientWidth??1050,R=e?.clientHeight??250,k=cr(o),L=(0,it.getValueFormat)(k==="1"?null:k),E=I=>{let M=L(I);return M.text+(M.suffix?.trim()||"")},Q={width:P,height:R,scales:{y:{range:lt(o,b,y)}},plugins:h?[]:[ot(E,a,t,m,f,i,T,x)],padding:g?[8,10,8,48]:[8,10,8,18],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:er,show:!v},series:lr(i,n,s,l,a,p,u),bands:ar(i,r,p,u),axes:[Xe(C,m,g,d),ct(L,C,d)],legend:{show:!1}};return tr(Q,p)};var ut=(e,t=4)=>{let r=e/t,o=Math.pow(10,Math.floor(Math.log10(r))),i=r/o,n;return i>5?n=10*o:i>2?n=5*o:i>1?n=2*o:n=o,Math.ceil(e/n)*n},S=(e,t)=>typeof e=="number"?e:t,lt=(e,t,r)=>(o,i,n)=>{if(i===0&&n===0)return[S(t,0),S(r,100)];let a=1,s=n*(1+a),l=i<0?i*(1+a):i*(1-a);if(e==="percent"||e==="percentunit"){let g=e==="percent"?100:1;return n>g?i<0?[S(t,l),S(r,s)]:[S(t,0),S(r,s)]:i<0?[S(t,l),S(r,g)]:[S(t,0),S(r,g)]}if(n<=.9999)return i<=0?[S(t,l),S(r,1)]:[S(t,0),S(r,1)];let m=ut(s),f=ut(Math.abs(l));return i<0?[S(r,-f),S(r,m)]:[S(t,0),S(r,m)]},ur=(e,t,r,o)=>{let i=e.axes[r];if(o>1)return i?._size||0;let n=(i?.ticks?.size||0)+(i?.gap||0),a=(t??[]).reduce((s,l)=>l.length>s.length?l:s,"");return a!=""&&(e.ctx.font=i?.font?.[0]??e.ctx.font,n+=e.ctx.measureText(a).width/devicePixelRatio),Math.ceil(n)};function ct(e,t,r){return{gap:0,font:K(t),labelFont:K(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(o,i)=>i.map(n=>{let a=e(n);return a.text+(a.suffix?.trim()||"")}),size:ur,space:(o,i,n,a,s)=>{let l=o.height;return l<=100?30:l<=150?35:l<=200?45:l<=250?55:l<=300?60:70},show:!r}}function pt(e,t){let r=[],o=e[0],i=o.length,n=Array(i).fill(0),a=[o];if(e.forEach((s,l)=>{l!==0&&(t?a.push(s):a.push(s.map((m,f)=>n[f]=n[f]+(m||0))))}),!t)for(let s=1;s<e.length-1;s++)r.push({series:[s+1,s]});return{data:a,bands:r.filter(s=>s.series[1]>-1)}}var dt=require("react/jsx-runtime");function pe(e){let{times:t,series:r,metadata:o,type:i,className:n,timeZone:a,options:s,tooltip:l,colors:m,tooltipComponent:f,unit:g,fill:h=!1,thresholds:u,min:b,max:y,hideAxis:d,hideCursor:v,relativeTimeAxis:T,invertSort:x}=e,{hide:p,visibilityLimit:C}=l||{},P=(0,ue.useRef)(null),R=O(),k=m||R.colors;return(0,ue.useEffect)(()=>{if(!r||r.length===0){console.warn("No series provided");return}let L=[t],E=g;r.forEach(w=>{let $=o[w.metric];g||(E=nt(E,$)),L.push(w.values)});let Q=i==="bar"||i==="area",I=pt(L,!Q);u&&u.forEach(w=>{ee(w)?I.data.push(new Array(t.length).fill(w.value)):ae(w)&&(I.data.push(new Array(t.length).fill(w.from)),I.data.push(new Array(t.length).fill(w.to)))});let M=P.current,J=null;if(M){let w=at(M,o,I,E,r,i,Q,k,h,a,f,T,p,u,b,y,d,v,C,x);J=new mt.default({...w,...s},I.data,M);let $=new ResizeObserver(()=>{J?.setSize({width:M.clientWidth,height:M.clientHeight})});return $.observe(M),()=>{J?.destroy(),$.disconnect()}}},[r,t,i,o,a,f,T,k,h,g,p,u,b,y,s,d,v]),(0,dt.jsx)("div",{ref:P,className:"ub-chart-container"+(n?` ${n}`:"")})}var B=require("react/jsx-runtime");function ht({metrics:e,operator:t,attributes:r,groupBy:o,interval:i,type:n="line",className:a,appearance:s,unit:l,thresholds:m,min:f,max:g,colors:h,tooltip:u,fill:b,hideAxis:y,hideCursor:d,relativeTimeAxis:v,onResponse:T,invertSort:x}){let p=O(),C=i??p.interval,P=r??p.attributes,R=o??p.groupBy,k=t??p.operator,L=typeof v=="boolean"?v:p.relativeTimeAxis,E=h??p.colors,Q=typeof b=="boolean"?b:p.fill,I=typeof x=="boolean"?x:p.invertSort,M=typeof y=="boolean"?y:p.hideAxis,J=typeof d=="boolean"?d:p.hideCursor,w=s?.components?.Tooltip??p.appearance.components.Tooltip,$=(0,me.useMemo)(()=>({hide:u?.hide??p.tooltip?.hide,visibilityLimit:u?.visibilityLimit??p.tooltip?.visibilityLimit}),[u?.hide,p.tooltip?.hide,u?.visibilityLimit,p.tooltip?.visibilityLimit]),de=se({queries:(Array.isArray(e)?e:[e]).map(z=>({metrics:[z],operator:k,attributes:P,groupBy:R})),timeRange:p.timeRange,startTime:p.startTime,endTime:p.endTime,interval:C}),{isLoading:ft,data:gt,hasError:bt}=de,{series:Ne,times:yt,metadata:Tt}=gt,vt=Ne.every(z=>z.isEmpty),he=`ub-chart-container${a?` ${a}`:""}`;if((0,me.useEffect)(()=>{T&&T(de)},[de,T]),ft){let z=s?.components?.Loading??p.appearance.components.Loading;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}if(bt){let z=s?.components?.Error??p.appearance.components.Error;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}if(vt){let z=s?.components?.Empty??p.appearance.components.Empty;return(0,B.jsx)("div",{className:he,children:(0,B.jsx)(z,{})})}return(0,B.jsx)(pe,{times:yt,series:Ne,metadata:Tt,type:n,className:a,tooltip:$,colors:E,relativeTimeAxis:L,unit:l,fill:Q,tooltipComponent:w,thresholds:m,min:f,max:g,hideAxis:M,hideCursor:J,invertSort:I})}0&&(module.exports={Chart,Empty,Error,Loading,Scope,Timeseries,UnblindProvider,useLogs,useMetrics,useRefresh,useScope,useTimeseries,useUsage});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|