@unblind/react 0.1.0-alpha.8 → 0.1.0-beta.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.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +171 -111
- package/dist/index.d.ts +171 -111
- 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 +13 -5
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { QueryClient, QueryClientConfig } from '@tanstack/react-query';
|
|
3
3
|
import React$1, { ReactNode } from 'react';
|
|
4
4
|
import { StringValue } from 'ms';
|
|
5
|
-
import uPlot from 'uplot';
|
|
5
|
+
import uPlot$1 from 'uplot';
|
|
6
6
|
|
|
7
7
|
type UnblindClientConfig = {
|
|
8
8
|
/**
|
|
@@ -50,7 +50,7 @@ type UnblindClientProviderProps = {
|
|
|
50
50
|
* return (
|
|
51
51
|
* <>
|
|
52
52
|
* <button onClick={() => refresh()}>Refresh</button>
|
|
53
|
-
* <
|
|
53
|
+
* <Timeseries metrics={["cpu"]} />
|
|
54
54
|
* </>
|
|
55
55
|
* );
|
|
56
56
|
* }
|
|
@@ -58,20 +58,14 @@ type UnblindClientProviderProps = {
|
|
|
58
58
|
*/
|
|
59
59
|
declare function useRefresh(): () => Promise<void>;
|
|
60
60
|
|
|
61
|
-
interface TooltipItem {
|
|
62
|
-
metric: MetricMetadata;
|
|
63
|
-
serie: uPlot.Series;
|
|
64
|
-
color: string;
|
|
65
|
-
value?: number;
|
|
66
|
-
formattedValue?: string;
|
|
67
|
-
attributes?: Record<string, string>;
|
|
68
|
-
}
|
|
69
|
-
type TooltipLayout = "auto" | "group-by-metric" | "flat";
|
|
70
|
-
type TooltipFormat = "original" | "suffix" | "title";
|
|
71
61
|
interface TooltipProps {
|
|
72
62
|
timestamp: number;
|
|
73
|
-
|
|
63
|
+
tooltipSerieList: TooltipSerie[];
|
|
74
64
|
timeZone?: string;
|
|
65
|
+
stacked?: boolean;
|
|
66
|
+
invertSort?: boolean;
|
|
67
|
+
visibilityLimit?: number;
|
|
68
|
+
disableSuggestedLabel?: boolean;
|
|
75
69
|
}
|
|
76
70
|
|
|
77
71
|
/**
|
|
@@ -83,29 +77,21 @@ type MetricType = "gauge" | "sum" | "histogram" | "summary" | "exphistogram";
|
|
|
83
77
|
* Aggregation operators available for metric queries.
|
|
84
78
|
*/
|
|
85
79
|
type AggregationOperator = "avg" | "sum" | "max" | "min" | "p90" | "p99" | "p50";
|
|
86
|
-
/**
|
|
87
|
-
* Attribute filter with a specific value.
|
|
88
|
-
*/
|
|
89
|
-
interface AttributeWithValue {
|
|
90
|
-
name: string;
|
|
91
|
-
value: string;
|
|
92
|
-
}
|
|
93
80
|
/**
|
|
94
81
|
* Metric metadata returned by the API.
|
|
95
82
|
*/
|
|
96
83
|
interface MetricMetadata {
|
|
97
84
|
name: string;
|
|
98
85
|
description: string;
|
|
99
|
-
|
|
86
|
+
suggestedLabel?: string;
|
|
100
87
|
unit: {
|
|
101
88
|
code?: string;
|
|
102
|
-
name?: string;
|
|
103
|
-
synonym?: string;
|
|
104
|
-
category?: string;
|
|
105
89
|
};
|
|
106
90
|
type: MetricType;
|
|
107
|
-
operator?: AggregationOperator;
|
|
108
91
|
}
|
|
92
|
+
type LabeledMetricMetadata = MetricMetadata & {
|
|
93
|
+
label?: string;
|
|
94
|
+
};
|
|
109
95
|
/**
|
|
110
96
|
* List of metric metadata.
|
|
111
97
|
*/
|
|
@@ -117,7 +103,6 @@ interface Serie {
|
|
|
117
103
|
metric: string;
|
|
118
104
|
attributes?: Record<string, string>;
|
|
119
105
|
values: Array<number>;
|
|
120
|
-
queryName?: string;
|
|
121
106
|
queryIndex: number;
|
|
122
107
|
isEmpty?: boolean;
|
|
123
108
|
}
|
|
@@ -125,7 +110,6 @@ interface Serie {
|
|
|
125
110
|
* Query definition for timeseries requests.
|
|
126
111
|
*/
|
|
127
112
|
interface TimeseriesQuery {
|
|
128
|
-
queryName?: string;
|
|
129
113
|
metrics: Array<string>;
|
|
130
114
|
groupBy?: Array<string>;
|
|
131
115
|
operator?: AggregationOperator;
|
|
@@ -143,19 +127,20 @@ type ChartType = "bar" | "line" | "area" | "step" | "spline";
|
|
|
143
127
|
type TimeRange = StringValue;
|
|
144
128
|
interface Log {
|
|
145
129
|
timestamp: number;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
130
|
+
traceId?: string;
|
|
131
|
+
spanId?: string;
|
|
132
|
+
logId?: string;
|
|
133
|
+
severity: Severity;
|
|
149
134
|
attributes?: Record<string, string>;
|
|
150
|
-
service_name?: string;
|
|
151
135
|
body?: string;
|
|
136
|
+
serviceName?: string;
|
|
152
137
|
}
|
|
153
138
|
/**
|
|
154
139
|
* Default paginated response structure
|
|
155
140
|
*/
|
|
156
141
|
type PaginatedResponse<T> = {
|
|
157
142
|
data: Array<T>;
|
|
158
|
-
|
|
143
|
+
nextPage?: string;
|
|
159
144
|
};
|
|
160
145
|
/**
|
|
161
146
|
* Different severity values based on OTEL
|
|
@@ -217,11 +202,6 @@ interface ChartVisualConfig {
|
|
|
217
202
|
* Optional color configuration
|
|
218
203
|
*/
|
|
219
204
|
colors?: Colors;
|
|
220
|
-
/**
|
|
221
|
-
* Optional order for rendering results.
|
|
222
|
-
* Defaults to false
|
|
223
|
-
*/
|
|
224
|
-
sortByValues?: boolean;
|
|
225
205
|
/**
|
|
226
206
|
* Optional to fill charts.
|
|
227
207
|
*
|
|
@@ -232,13 +212,61 @@ interface ChartVisualConfig {
|
|
|
232
212
|
* Optional tooltip configuration.
|
|
233
213
|
*/
|
|
234
214
|
tooltip?: TooltipConfig;
|
|
215
|
+
/**
|
|
216
|
+
* Chart type. Defaults to "line".
|
|
217
|
+
*/
|
|
218
|
+
type?: ChartType;
|
|
219
|
+
/**
|
|
220
|
+
* Optional threshold
|
|
221
|
+
*/
|
|
222
|
+
thresholds?: Array<Threshold>;
|
|
223
|
+
/**
|
|
224
|
+
* Optional min value
|
|
225
|
+
*/
|
|
226
|
+
min?: number;
|
|
227
|
+
/**
|
|
228
|
+
* Optional max value
|
|
229
|
+
*/
|
|
230
|
+
max?: number;
|
|
231
|
+
/**
|
|
232
|
+
* Optional boolean to hide both axis
|
|
233
|
+
*/
|
|
234
|
+
hideAxis?: boolean;
|
|
235
|
+
/**
|
|
236
|
+
* Optional boolean to hide cursor
|
|
237
|
+
*/
|
|
238
|
+
hideCursor?: boolean;
|
|
239
|
+
/**
|
|
240
|
+
* Optional boolean to display relative time axis
|
|
241
|
+
*
|
|
242
|
+
* e.g. a day ago ------ a few seconds ago
|
|
243
|
+
*/
|
|
244
|
+
relativeTimeAxis?: boolean;
|
|
245
|
+
/**
|
|
246
|
+
* Unit of measurement for the value.
|
|
247
|
+
*
|
|
248
|
+
* Supports standard unit identifiers:
|
|
249
|
+
* - Data: 'bytes', 'decbytes', 'bits', 'decbits'
|
|
250
|
+
* - Time: 'ms', 's', 'm', 'h', 'd'
|
|
251
|
+
* - Throughput: 'Bps', 'Mbps', 'Gbps'
|
|
252
|
+
* - Percentage: 'percent', 'percentunit'
|
|
253
|
+
* - And many more standard units
|
|
254
|
+
*
|
|
255
|
+
*/
|
|
256
|
+
unit?: string;
|
|
257
|
+
/**
|
|
258
|
+
* Optional invert value order.
|
|
259
|
+
* Defaults to false
|
|
260
|
+
*/
|
|
261
|
+
invertSort?: boolean;
|
|
262
|
+
/**
|
|
263
|
+
* Disables suggested label
|
|
264
|
+
*/
|
|
265
|
+
disableSuggestedLabel?: boolean;
|
|
235
266
|
}
|
|
236
267
|
interface TooltipConfig {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
hideAttributeKey?: boolean;
|
|
240
|
-
hideAttributes?: boolean;
|
|
241
|
-
hideMetric?: boolean;
|
|
268
|
+
hide?: boolean;
|
|
269
|
+
visibilityLimit?: number;
|
|
242
270
|
}
|
|
243
271
|
/**
|
|
244
272
|
* Appearance configuration for Unblind components.
|
|
@@ -246,7 +274,7 @@ interface TooltipConfig {
|
|
|
246
274
|
* Allows consumers to override internal UI components used for
|
|
247
275
|
* loading, empty, and error states.
|
|
248
276
|
*
|
|
249
|
-
* Overrides can be provided globally via
|
|
277
|
+
* Overrides can be provided globally via Scope or
|
|
250
278
|
* locally per component.
|
|
251
279
|
*
|
|
252
280
|
* This API customizes presentation only; component state and data
|
|
@@ -259,9 +287,37 @@ type Appearance = {
|
|
|
259
287
|
Empty?: React.ComponentType;
|
|
260
288
|
Tooltip?: React.ComponentType<TooltipProps>;
|
|
261
289
|
};
|
|
262
|
-
}
|
|
290
|
+
};
|
|
291
|
+
type ThresholdLevel = "info" | "warning" | "error" | "ok";
|
|
292
|
+
type ThresholdLineType = "line" | "dashed" | "bold";
|
|
293
|
+
type LineThreshold = {
|
|
294
|
+
value: number;
|
|
295
|
+
type?: ThresholdLineType;
|
|
296
|
+
level?: ThresholdLevel;
|
|
297
|
+
label?: string;
|
|
298
|
+
};
|
|
299
|
+
type RangeThreshold = {
|
|
300
|
+
from: number;
|
|
301
|
+
to?: number;
|
|
302
|
+
type?: ThresholdLineType;
|
|
303
|
+
level?: ThresholdLevel;
|
|
304
|
+
label?: string;
|
|
305
|
+
};
|
|
306
|
+
type Threshold = LineThreshold | RangeThreshold;
|
|
307
|
+
interface TooltipSerie {
|
|
308
|
+
metric: LabeledMetricMetadata;
|
|
309
|
+
serie: uPlot.Series;
|
|
310
|
+
color: string;
|
|
311
|
+
value?: number;
|
|
312
|
+
formattedValue?: string;
|
|
313
|
+
attributes?: Record<string, string>;
|
|
314
|
+
}
|
|
315
|
+
interface LabeledMetric {
|
|
316
|
+
name: string;
|
|
317
|
+
label: string;
|
|
318
|
+
}
|
|
263
319
|
|
|
264
|
-
type
|
|
320
|
+
type ScopeConfig = TimeseriesQueryConfig & ChartVisualConfig & {
|
|
265
321
|
/**
|
|
266
322
|
* Optional appearance configuration for all components
|
|
267
323
|
* within this scope.
|
|
@@ -274,7 +330,7 @@ type UnblindScopeConfig = TimeseriesQueryConfig & {
|
|
|
274
330
|
*
|
|
275
331
|
* @example
|
|
276
332
|
* ```tsx
|
|
277
|
-
* <
|
|
333
|
+
* <Scope
|
|
278
334
|
* appearance={{
|
|
279
335
|
* components: {
|
|
280
336
|
* Loading: CustomLoading,
|
|
@@ -283,16 +339,16 @@ type UnblindScopeConfig = TimeseriesQueryConfig & {
|
|
|
283
339
|
* }}
|
|
284
340
|
* >
|
|
285
341
|
* <App />
|
|
286
|
-
* </
|
|
342
|
+
* </Scope>
|
|
287
343
|
* ```
|
|
288
344
|
*/
|
|
289
345
|
appearance?: Appearance;
|
|
290
346
|
};
|
|
291
|
-
type
|
|
347
|
+
type ScopeProps = ScopeConfig & {
|
|
292
348
|
children?: React$1.ReactNode;
|
|
293
349
|
};
|
|
294
350
|
/**
|
|
295
|
-
*
|
|
351
|
+
* Scope provides scoped configuration for all Unblind components (charts, logs, etc).
|
|
296
352
|
* This includes default time ranges, intervals, attributes, groupBy, operator, appearance, and colors.
|
|
297
353
|
*
|
|
298
354
|
* When nested, child scopes inherit defaults from parent scopes and can override specific values.
|
|
@@ -301,26 +357,26 @@ type UnblindScopeProps = UnblindScopeConfig & {
|
|
|
301
357
|
*
|
|
302
358
|
* @example
|
|
303
359
|
* ```tsx
|
|
304
|
-
* import {
|
|
360
|
+
* import { Scope } from '@unblind/react';
|
|
305
361
|
*
|
|
306
362
|
* function App() {
|
|
307
363
|
* return (
|
|
308
|
-
* <
|
|
364
|
+
* <Scope
|
|
309
365
|
* appearance={{ components: { Loading: CustomLoading } }}
|
|
310
366
|
* timeRange="24h"
|
|
311
367
|
* >
|
|
312
368
|
* // Components here use 24h and CustomLoading
|
|
313
369
|
*
|
|
314
|
-
* <
|
|
370
|
+
* <Scope timeRange="1h">
|
|
315
371
|
* // Components here use 1h but still inherit CustomLoading
|
|
316
|
-
* </
|
|
317
|
-
* </
|
|
372
|
+
* </Scope>
|
|
373
|
+
* </Scope>
|
|
318
374
|
* );
|
|
319
375
|
* }
|
|
320
376
|
* ```
|
|
321
377
|
*/
|
|
322
|
-
declare function
|
|
323
|
-
type UseScopeReturn = TimeseriesQueryConfig & {
|
|
378
|
+
declare function Scope({ children, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill, hideAxis, hideCursor, relativeTimeAxis, invertSort, disableSuggestedLabel, }: ScopeProps): react_jsx_runtime.JSX.Element;
|
|
379
|
+
type UseScopeReturn = TimeseriesQueryConfig & ChartVisualConfig & {
|
|
324
380
|
timeRange: TimeRange;
|
|
325
381
|
appearance: {
|
|
326
382
|
components: {
|
|
@@ -329,14 +385,10 @@ type UseScopeReturn = TimeseriesQueryConfig & {
|
|
|
329
385
|
Empty: React$1.ComponentType;
|
|
330
386
|
Tooltip?: React$1.ComponentType<TooltipProps>;
|
|
331
387
|
};
|
|
332
|
-
colors: Colors;
|
|
333
|
-
sortByValues?: boolean;
|
|
334
|
-
fill?: boolean;
|
|
335
|
-
tooltip?: TooltipConfig;
|
|
336
388
|
};
|
|
337
389
|
};
|
|
338
390
|
/**
|
|
339
|
-
* Hook to access the scoped configuration from
|
|
391
|
+
* Hook to access the scoped configuration from Scope.
|
|
340
392
|
* Returns all configuration including time range, attributes,
|
|
341
393
|
* groupBy, operator, colors, and UI components.
|
|
342
394
|
*
|
|
@@ -350,13 +402,13 @@ type UseScopeReturn = TimeseriesQueryConfig & {
|
|
|
350
402
|
*/
|
|
351
403
|
declare function useScope(): UseScopeReturn;
|
|
352
404
|
|
|
353
|
-
type UnblindProviderProps = UnblindClientProviderProps &
|
|
405
|
+
type UnblindProviderProps = UnblindClientProviderProps & ScopeProps & {
|
|
354
406
|
children?: React.ReactNode;
|
|
355
407
|
};
|
|
356
408
|
/**
|
|
357
409
|
* UnblindProvider is required for all Unblind hooks to work.
|
|
358
410
|
* It sets up both the QueryClientProvider (for React Query) and the Unblind configuration context.
|
|
359
|
-
* This is a convenience wrapper around UnblindClientProvider and
|
|
411
|
+
* This is a convenience wrapper around `UnblindClientProvider` and `Scope`.
|
|
360
412
|
*
|
|
361
413
|
* @example
|
|
362
414
|
* ```tsx
|
|
@@ -371,7 +423,7 @@ type UnblindProviderProps = UnblindClientProviderProps & UnblindScopeProps & {
|
|
|
371
423
|
* }
|
|
372
424
|
* ```
|
|
373
425
|
*/
|
|
374
|
-
declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
|
|
426
|
+
declare function UnblindProvider({ children, queryClient, apiBaseUrl, fetchImpl, timeRange, startTime, endTime, interval, attributes, groupBy, operator, appearance, tooltip, colors, fill, hideAxis, hideCursor, relativeTimeAxis, invertSort, disableSuggestedLabel, }: UnblindProviderProps): react_jsx_runtime.JSX.Element;
|
|
375
427
|
|
|
376
428
|
interface UseMetricsReturn {
|
|
377
429
|
metrics: MetricMetadataList | undefined;
|
|
@@ -392,12 +444,13 @@ interface UseTimeseriesParams extends Pick<TimeseriesQueryConfig, "timeRange" |
|
|
|
392
444
|
*/
|
|
393
445
|
queries: Array<TimeseriesQuery>;
|
|
394
446
|
}
|
|
447
|
+
interface UseTimeseriesData {
|
|
448
|
+
series: Serie[];
|
|
449
|
+
times: number[];
|
|
450
|
+
metadata: Record<string, MetricMetadata>;
|
|
451
|
+
}
|
|
395
452
|
interface UseTimeseriesReturn {
|
|
396
|
-
data:
|
|
397
|
-
series: Serie[];
|
|
398
|
-
times: number[];
|
|
399
|
-
metadata: Record<string, MetricMetadata>;
|
|
400
|
-
};
|
|
453
|
+
data: UseTimeseriesData;
|
|
401
454
|
isLoading: boolean;
|
|
402
455
|
isFetching: boolean;
|
|
403
456
|
hasError: boolean;
|
|
@@ -409,7 +462,7 @@ interface UseTimeseriesReturn {
|
|
|
409
462
|
* @param params - Configuration object with queries, and either timeRange or startTime/endTime, plus optional interval.
|
|
410
463
|
* @returns Object containing timeseries data, loading states, and error state.
|
|
411
464
|
*/
|
|
412
|
-
declare function useTimeseries(
|
|
465
|
+
declare function useTimeseries(params: UseTimeseriesParams): UseTimeseriesReturn;
|
|
413
466
|
|
|
414
467
|
interface Usage {
|
|
415
468
|
period: {
|
|
@@ -437,13 +490,18 @@ interface UseUsageReturn {
|
|
|
437
490
|
* @param params - Configuration object with optional timeRange.
|
|
438
491
|
* @returns Object containing usage data, loading state, and error state.
|
|
439
492
|
*/
|
|
440
|
-
declare function useUsage(
|
|
493
|
+
declare function useUsage(params: UseUsageParams): UseUsageReturn;
|
|
441
494
|
|
|
442
495
|
type UseLogsParams = {
|
|
443
496
|
/**
|
|
444
497
|
* Array of filters to apply to the logs query.
|
|
445
498
|
*/
|
|
446
|
-
|
|
499
|
+
attributes?: Record<string, Array<string>>;
|
|
500
|
+
body?: Array<string>;
|
|
501
|
+
severity?: Array<string>;
|
|
502
|
+
traceId?: string;
|
|
503
|
+
spanId?: string;
|
|
504
|
+
logId?: string;
|
|
447
505
|
} & TimeConfig;
|
|
448
506
|
interface UseLogsReturn {
|
|
449
507
|
logs: Array<Log>;
|
|
@@ -460,33 +518,30 @@ interface UseLogsReturn {
|
|
|
460
518
|
* @param params - Configuration object with timeRange and filters.
|
|
461
519
|
* @returns Object containing logs data, loading states, and pagination controls.
|
|
462
520
|
*/
|
|
463
|
-
declare function useLogs(
|
|
464
|
-
|
|
465
|
-
declare function useTheme(): boolean;
|
|
521
|
+
declare function useLogs(props: UseLogsParams): UseLogsReturn;
|
|
466
522
|
|
|
467
|
-
type
|
|
523
|
+
type TimeseriesProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTime" | "timeRange"> & ChartVisualConfig & {
|
|
468
524
|
/**
|
|
469
525
|
* Metric name(s) to display in the chart.
|
|
470
526
|
*
|
|
471
|
-
*
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
* Chart type. Defaults to "line".
|
|
476
|
-
*/
|
|
477
|
-
type?: ChartType;
|
|
478
|
-
/**
|
|
479
|
-
* Unit of measurement for the value.
|
|
527
|
+
* @example Single metric
|
|
528
|
+
* ```jsx
|
|
529
|
+
* <Timeseries metrics="nodejs.eventloop.p50" />
|
|
530
|
+
* ```
|
|
480
531
|
*
|
|
481
|
-
*
|
|
482
|
-
*
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
* - And many more standard units
|
|
532
|
+
* @example
|
|
533
|
+
* Multiple metrics
|
|
534
|
+
* ```jsx
|
|
535
|
+
* <Timeseries metrics={["nodejs.eventloop.p50", "..."]} />
|
|
536
|
+
* ```
|
|
487
537
|
*
|
|
538
|
+
* @example
|
|
539
|
+
* Labeled metrics
|
|
540
|
+
* ```jsx
|
|
541
|
+
* <Timeseries metrics={{ name: "nodejs.eventloop.p50", label: "P50" ]} />
|
|
542
|
+
* ```
|
|
488
543
|
*/
|
|
489
|
-
|
|
544
|
+
metrics: Array<LabeledMetric> | Array<string> | string;
|
|
490
545
|
/**
|
|
491
546
|
* Optional className for the chart container.
|
|
492
547
|
*/
|
|
@@ -495,40 +550,45 @@ type TimeseriesChartProps = Exclude<TimeseriesQueryConfig, "startTime" | "endTim
|
|
|
495
550
|
* Optional appearance configuration for this chart
|
|
496
551
|
*/
|
|
497
552
|
appearance?: Appearance;
|
|
553
|
+
/**
|
|
554
|
+
* Hook to get request data
|
|
555
|
+
*/
|
|
556
|
+
onResponse?: (response: UseTimeseriesReturn) => void;
|
|
498
557
|
};
|
|
499
558
|
/**
|
|
500
|
-
*
|
|
501
|
-
*
|
|
502
|
-
*
|
|
559
|
+
* Displays a time series chart.
|
|
560
|
+
* Uses values from <UnblindProvider> or <Scope>
|
|
561
|
+
* when they are not explicitly provided as props.
|
|
503
562
|
*
|
|
504
|
-
* @example
|
|
563
|
+
* @example
|
|
505
564
|
* ```tsx
|
|
506
|
-
*
|
|
507
|
-
*
|
|
508
|
-
*
|
|
509
|
-
*
|
|
565
|
+
* <Timeseries
|
|
566
|
+
* metrics="host.cpu"
|
|
567
|
+
* attributes={{ "host.region": ["us-east-2"] }}
|
|
568
|
+
* groupBy={["host.name"]}
|
|
569
|
+
* />
|
|
510
570
|
* ```
|
|
511
571
|
*
|
|
512
|
-
* @example Using
|
|
572
|
+
* @example Using `<Scope>`
|
|
513
573
|
* ```tsx
|
|
514
|
-
* <
|
|
515
|
-
* <
|
|
516
|
-
* <
|
|
517
|
-
* </
|
|
574
|
+
* <Scope timeRange="1h">
|
|
575
|
+
* <Timeseries metrics="host.cpu" />
|
|
576
|
+
* <Timeseries metrics="host.memory" />
|
|
577
|
+
* </Scope>
|
|
518
578
|
* ```
|
|
519
579
|
*/
|
|
520
|
-
declare function
|
|
580
|
+
declare function Timeseries({ metrics, operator: propOperator, attributes: propAttributes, groupBy: propGroupBy, interval: propInterval, type, className, appearance: propAppearance, tooltip: propTooltip, onResponse, ...chartStyleProps }: TimeseriesProps): react_jsx_runtime.JSX.Element;
|
|
521
581
|
|
|
522
582
|
interface ChartProps extends ChartVisualConfig {
|
|
523
583
|
times: Array<number>;
|
|
524
584
|
series: Serie[];
|
|
525
|
-
metadata: Record<string,
|
|
585
|
+
metadata: Record<string, LabeledMetricMetadata>;
|
|
526
586
|
type: ChartType;
|
|
587
|
+
invertSort?: boolean;
|
|
527
588
|
className?: string;
|
|
528
589
|
timeZone?: string;
|
|
529
|
-
options?: uPlot.Options;
|
|
530
|
-
|
|
531
|
-
tooltipAppearance?: React.ComponentType<TooltipProps>;
|
|
590
|
+
options?: uPlot$1.Options;
|
|
591
|
+
tooltipComponent?: React.ComponentType<TooltipProps>;
|
|
532
592
|
}
|
|
533
593
|
/**
|
|
534
594
|
* Renders a chart for time series data
|
|
@@ -539,4 +599,4 @@ declare function Empty(): react_jsx_runtime.JSX.Element;
|
|
|
539
599
|
declare function Error(): react_jsx_runtime.JSX.Element;
|
|
540
600
|
declare function Loading(): react_jsx_runtime.JSX.Element;
|
|
541
601
|
|
|
542
|
-
export { type AggregationOperator, type Appearance,
|
|
602
|
+
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 tt=Object.create;var X=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames;var nt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var st=(e,t)=>{for(var o in t)X(e,o,{get:t[o],enumerable:!0})},be=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of rt(t))!it.call(e,r)&&r!==o&&X(e,r,{get:()=>t[r],enumerable:!(n=ot(t,r))||n.enumerable});return e};var Y=(e,t,o)=>(o=e!=null?tt(nt(e)):{},be(t||!e||!e.__esModule?X(o,"default",{value:e,enumerable:!0}):o,e)),at=e=>be(X({},"__esModule",{value:!0}),e);var Nt={};st(Nt,{Chart:()=>ae,Empty:()=>J,Error:()=>Z,Loading:()=>ee,TimeseriesChart:()=>et,UnblindProvider:()=>ve,UnblindScope:()=>te,useLogs:()=>Me,useMetrics:()=>Ce,useRefresh:()=>ue,useScope:()=>V,useTheme:()=>ne,useTimeseries:()=>oe,useUsage:()=>Re});module.exports=at(Nt);var O=require("@tanstack/react-query"),E=require("react"),le=require("react/jsx-runtime"),he=(0,E.createContext)(void 0);function ye({children:e,queryClient:t,queryClientConfig:o,apiBaseUrl:n="/api/unblind",fetchImpl:r}){let l=(0,E.useMemo)(()=>{if(t)return t;let i={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},u={defaultOptions:{queries:i}};return o?new O.QueryClient({...o,defaultOptions:{...o.defaultOptions,queries:{...i,...o.defaultOptions?.queries}}}):new O.QueryClient(u)},[t,o]),s=(0,E.useMemo)(()=>({apiBaseUrl:n,fetchImpl:r}),[n,r]);return(0,le.jsx)(O.QueryClientProvider,{client:l,children:(0,le.jsx)(he.Provider,{value:s,children:e})})}function L(){let e=(0,E.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 ue(){let e=(0,O.useQueryClient)();return(0,E.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var I=require("react");var M=require("react/jsx-runtime");function J(){return(0,M.jsx)("div",{className:"ub-default",children:(0,M.jsxs)("div",{className:"ub-empty-content",children:[(0,M.jsx)("div",{className:"ub-empty-icon-wrapper",children:(0,M.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,M.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,M.jsx)("p",{className:"ub-empty-text","data-text":"No data available for this time range"})]})})}function Z(){return(0,M.jsx)("div",{className:"ub-error"})}function ee(){return(0,M.jsx)("div",{className:"ub-default","data-text":"Loading"})}var Te=require("react/jsx-runtime"),ce=(0,I.createContext)(void 0);function te({children:e,timeRange:t,startTime:o,endTime:n,interval:r,attributes:l,groupBy:s,operator:i,appearance:u}){let a=(0,I.useContext)(ce),m=u?.components?.Loading,d=u?.components?.Error,p=u?.components?.Tooltip,c=(0,I.useMemo)(()=>{if(!(!m&&!d&&!p))return{components:{...m&&{Loading:m},...d&&{Error:d},...p&&{Tooltip:p}}}},[m,d,p]),f=(0,I.useMemo)(()=>({timeRange:t??a?.timeRange,startTime:o??a?.startTime,endTime:n??a?.endTime,interval:r??a?.interval,attributes:l??a?.attributes,groupBy:s??a?.groupBy,operator:i??a?.operator,appearance:c??a?.appearance}),[t,o,n,r,l,s,i,c,a]);return(0,Te.jsx)(ce.Provider,{value:f,children:e})}var lt=["#7c3aed","#eab308","#2563eb","#dc2626","#16a34a","#f97316","#0891b2","#9333ea","#ca8a04","#4f46e5","#0d9488","#be185d"],ut="6h";function V(){let e=(0,I.useContext)(ce);return{timeRange:e?.timeRange||ut,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??ee,Error:e?.appearance?.components?.Error??Z,Empty:e?.appearance?.components?.Empty??J,Tooltip:e?.appearance?.components?.Tooltip},colors:e?.appearance?.colors||lt,tooltip:e?.appearance?.tooltip}}}var pe=require("react/jsx-runtime");function ve({children:e,queryClient:t,apiBaseUrl:o,fetchImpl:n,timeRange:r,startTime:l,endTime:s,interval:i,attributes:u,groupBy:a,operator:m,appearance:d}){return(0,pe.jsx)(ye,{queryClient:t,apiBaseUrl:o,fetchImpl:n,children:(0,pe.jsx)(te,{timeRange:r,startTime:l,endTime:s,interval:i,attributes:u,groupBy:a,operator:m,appearance:d,children:e})})}var xe=require("@tanstack/react-query");function Ce(){let{apiBaseUrl:e,fetchImpl:t=fetch}=L(),o=(0,xe.useQuery)({queryKey:["unblind","metrics"],queryFn:async()=>{let n=await t(`${e}/metrics`,{headers:{"Content-Type":"application/json"}});if(!n.ok)throw new Error("Error loading metrics metadata");if(n.status===200){let{data:r}=await n.json();return r}else throw new Error("Unexpected status code")}});return{metrics:o.data,isLoading:o.isLoading,hasError:o.isError,refetch:o.refetch}}var Pe=require("@tanstack/react-query"),j=require("react");var we=Y(require("ms"));function ct(e){let t=Math.floor(Date.now()/1e3);return[t-Math.floor((0,we.default)(e)/1e3),t]}function q(e,t,o){let n,r;if(typeof t=="number"&&typeof o=="number")n=t,r=o;else if(e){let[l,s]=ct(e);n=l,r=s}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[n,r]}function oe({queries:e,timeRange:t,startTime:o,endTime:n,interval:r}){let{apiBaseUrl:l,fetchImpl:s=fetch}=L(),i=(0,j.useMemo)(()=>e.map(g=>g.metrics.join(",")).join(","),[e]),u=(0,j.useMemo)(()=>e.map(g=>{let P=g.attributes;if(!P)return"";let S=Object.keys(P);return S.length===0?"":S.map(x=>x+":"+P[x]?.join(",")).join(",")}).join(","),[e]),a=(0,j.useMemo)(()=>e.map(g=>g.operator),[e]),m=(0,j.useMemo)(()=>e.map(g=>g.groupBy).join(", "),[e]),p=(0,Pe.useQuery)({queryKey:["unblind","timeseries",i,u,o,n,t,r,a,m],queryFn:async()=>{if(!i)throw new Error("Missing required parameters");if(i.length===0)throw new Error("No series provided");let[g,P]=q(t,o,n),S={queries:e,startTime:g,endTime:P,interval:r},x=await s(`${l}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(S)});if(!x.ok)throw new Error("Error fetching metric");let{series:A,times:T,metadata:C}=await x.json();if(!A)throw console.error("Series not found"),new Error("Series not found");return{series:A,times:T,metadata:C}},enabled:!!i&&(typeof o=="number"&&typeof n=="number"||!!t)}),{metadata:c,series:f,times:h}=(0,j.useMemo)(()=>p.data?{series:p.data.series,times:p.data.times,metadata:p.data.metadata}:{series:[],times:[],metadata:{}},[p]),b=p.isLoading,v=p.isFetching,w=p.isError;return{data:{series:f,times:h,metadata:c},isLoading:b,isFetching:v,hasError:w,refetch:p.refetch}}var Ue=require("@tanstack/react-query"),Ae=require("react");function Re({timeRange:e,startTime:t,endTime:o}){let{apiBaseUrl:n,fetchImpl:r=fetch}=L(),s=(0,Ue.useQuery)({queryKey:["unblind","usage",e,t,o],queryFn:async()=>{let[m,d]=q(e,t,o),p=`${n}/tenants/usage`,c=await r(p,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:m,endTime:d})});if(!c.ok)throw new Error("Error fetching usage");let{data:f}=await c.json();if(!f)throw new Error("usage not found");return f},enabled:typeof t=="number"&&typeof o=="number"||!!e}),i=(0,Ae.useMemo)(()=>s.data?s.data||[]:[],[s]),u=s.isLoading||s.isRefetching,a=s.isError;return{usage:i,isLoading:u,hasError:a,refetch:s.refetch}}var Se=require("@tanstack/react-query"),ke=require("react");function Me({timeRange:e,filters:t,startTime:o,endTime:n}){let{apiBaseUrl:r,fetchImpl:l=fetch}=L(),s=typeof o=="number"&&typeof n=="number"||!!e,i=(0,Se.useInfiniteQuery)({queryKey:["unblind","logs",e,t.map(a=>a.name+":"+a.value).sort().join(",")],queryFn:async({pageParam:a})=>{let m=t.reduce((x,A)=>(x[A.name]||(x[A.name]=[]),x[A.name].push(A.value),x),{}),{body:d=[],severity:p=[],"service.name":c=[],"trace.id":f=[],"span.id":h=[],...b}=m,[v,w]=q(e,o,n),g=await l(`${r}/tenants/logs`,{method:"POST",body:JSON.stringify({filter:{attributes:b,body:d,severity:p,traceId:f,spanId:h,service:c},startTime:v,endTime:w,pagination:{page:a}}),headers:{"Content-Type":"application/json"}});if(!g.ok)throw new Error("Error fetching logs");let{data:P,next_page:S}=await g.json();if(!P)throw new Error("logs not found");return{data:P,next_page:S}},enabled:s,initialPageParam:void 0,getNextPageParam:a=>a.next_page});return{logs:(0,ke.useMemo)(()=>i.data?i.data.pages.flatMap(a=>a.data||[]):[],[i.data]),isLoading:i.isLoading,hasError:i.isError,hasNextPage:i.hasNextPage??!1,fetchNextPage:i.fetchNextPage,isFetchingNextPage:i.isFetchingNextPage,refetch:i.refetch}}var re=require("react");function ne(){let[e,t]=(0,re.useState)(!1);return(0,re.useEffect)(()=>{let o=()=>t(document.documentElement.classList.contains("dark"));return o(),window.addEventListener("storage",o),window.addEventListener("theme-change",o),()=>{window.removeEventListener("storage",o),window.removeEventListener("theme-change",o)}},[]),e}var se=require("react"),Je=Y(require("uplot"));var $=Y(require("uplot")),He=require("@grafana/data");var N=require("@grafana/data");var R={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 pt(e,t,o,n){if(t>7*R.day){let r=N.systemDateFormats.interval.year,l=Math.round(R.year/R.day)*R.day;return Math.round(t/R.day)*R.day===l?r=N.systemDateFormats.interval.year:t<=R.year?r=N.systemDateFormats.interval.month:r=N.systemDateFormats.interval.day,e.map(i=>(0,N.dateTimeFormat)(i,{format:r,timeZone:n}))}return e.map(r=>{let l=new Date(r),s=t<R.minute,i=t<R.second,u=l.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:n});return(u==="00:00"||u==="24:00")&&!s&&!i?l.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:n}):l.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:s?"2-digit":void 0,fractionalSecondDigits:i?3:void 0,hour12:!1,timeZone:n})})}function Ne(e){let t=[{size:R.second/1e3,increments:G.second},{size:R.minute/1e3,increments:G.minute},{size:R.hour/1e3,increments:G.hour},{size:R.day/1e3,increments:G.day},{size:R.month/1e3,increments:G.month},{size:R.year/1e3,increments:G.year}];for(let r of t)for(let l of r.increments){let s=r.size*l;if(s>=e)return{increment:s*1e3,multiplier:l}}let o=t[t.length-1],n=o.increments[o.increments.length-1];return{increment:o.size*n*1e3,multiplier:n}}function Ee(e,t,o){return[t,o]}function mt(e,t,o,n){let r=o-t,l=e.width,s=Math.floor(l/100),i=r/s,{increment:u,multiplier:a}=Ne(i),m=u/1e3,d=[];if(r<12*3600){let c=Math.ceil(t/m)*m;for(;c<=o;c+=m)d.push(c);return d}if(r<3*86400){if(u>=6*3600*1e3){let f=u/1e3/3600,h=new Date(t*1e3);if(n==="UTC"){let v=h.getUTCHours(),w=Math.floor(v/f)*f;h.setUTCHours(w,0,0,0)}else{let v=h.getHours(),w=Math.floor(v/f)*f;h.setHours(w,0,0,0)}let b=h.getTime()/1e3;for(b<t&&(b+=m);b<=o;)d.push(b),b+=m;return d}let c=Math.ceil(t/m)*m;for(;c<=o;c+=m)d.push(c);return d}if(u>=R.day){let c=new Date(t*1e3);n==="UTC"?(c.setUTCHours(0,0,0,0),c.getTime()/1e3<t&&c.setUTCDate(c.getUTCDate()+a)):(c.setHours(0,0,0,0),c.getTime()/1e3<t&&c.setDate(c.getDate()+a));let f=c.getTime()/1e3;for(;f<=o;)d.push(f),n==="UTC"?c.setUTCDate(c.getUTCDate()+a):c.setDate(c.getDate()+a),f=c.getTime()/1e3;return d}let p=Math.ceil(t/m)*m;for(;p<=o;p+=m)d.push(p);return d}function Le(e,t,o){return t.length===0?[]:t.map((n,r)=>r===0||r===t.length-1?(0,N.dateTimeFormatTimeAgo)(n*1e3,{timeZone:o}):"")}function dt(e,t,o){let n=e.scales.x,r=((n?.max??0)-(n?.min??0))*1e3,l=Math.floor(e.width/100),s=r/1e3/l,{increment:i}=Ne(s),u=t.map(a=>a*1e3);return pt(u,i,r,o)}function Ie(e,t,o=!1){let n=o?(s,i,u,a)=>Ee(s,u,a):(s,i,u,a)=>mt(s,u,a,t),r=o?(s,i)=>Le(s,i,t):(s,i)=>dt(s,i,t),l=o?(s,i,u,a,m)=>{let p=document.createElement("canvas").getContext("2d");if(!p)return 0;p.font=z(e);let c=Le(s,Ee(s,u,a),t),f=Math.max(p.measureText(c[0]||"").width,p.measureText(c[1]||"").width);return Math.ceil(f/2)+15}:void 0;return{font:z(e),labelFont:z(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:n,values:r,size:20}}var K=require("@floating-ui/dom"),je=Y(require("uplot"));var De=require("react-dom/client"),me=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,De.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)}},H=new me;var de=require("@grafana/data"),fe=require("react");var y=require("react/jsx-runtime");function Be(e){return e.metric.displayName||e.metric.name||(typeof e.serie.label=="string"?e.serie.label:e.serie.label?.textContent||"Unknown")}function 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 Ve(e){return[...e].sort((t,o)=>(Number(o.value)||0)-(Number(t.value)||0))}function ze(e){return[...e].sort((t,o)=>Oe(t).localeCompare(Oe(o)))}function ft(e){let t={};return e.forEach(o=>{let n=Be(o);t[n]||(t[n]=[]),t[n].push(o)}),t}function gt(e,t,o,n="original"){if(o==="flat")return[{label:"",items:t?Ve(e):ze(e)}];let r=ft(e);return Object.keys(r).sort((s,i)=>s.localeCompare(i)).map(s=>{let i=r[s];if(!i)return{label:ie(s,n),items:[]};let u=t?Ve(i):ze(i);return{label:ie(s,n),items:u}})}function ie(e,t,o){switch(t){case"suffix":{let n=e.split(/[._-]/),r=n[n.length-1]||"";return o?r:r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()}case"title":return e.split(/[._-]/).map(n=>o?n:n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" ");default:return e}}function bt(e,t){if(t&&t!=="auto")return t;let o=e.some(r=>r.attributes&&Object.keys(r.attributes).length>0),n=new Set(e.map(Be));return o&&n.size>=1?"group-by-metric":"flat"}function Fe({hideAttributeKey:e,attribute:t,format:o,isLastAttribute:n}){let[r,l]=t;return(0,y.jsxs)("div",{className:"ub-tooltip-item-attribute-container",children:[(0,y.jsxs)("div",{className:e?"ub-tooltip-item-attribute":"ub-tooltip-item-attribute-with-key",children:[!e&&(0,y.jsxs)("span",{className:"ub-tooltip-item-attribute-key",children:[ie(r,o),":"]}),(0,y.jsx)("span",{className:"ub-tooltip-item-attribute-value",children:l})]}),!n&&e&&(0,y.jsx)("span",{"data-text":", ",className:"ub-tooltip-item-attribute-divider"})]})}function ht({item:e,hideMetric:t,hideAttributeKey:o,hideAttributes:n,format:r}){let s=Object.entries(e.attributes||{}),i=s.length>0&&!n;return n&&t&&console.warn("Invalid configuration. Attributes and metrics are hidden."),(0,y.jsxs)("div",{className:"ub-tooltip-item-row",children:[(0,y.jsxs)("div",{className:"ub-tooltip-item-left"+(t?" ub-tooltip-item-hidden-metric":""),children:[(0,y.jsxs)("div",{className:"ub-tooltip-item-heading",children:[(0,y.jsx)("span",{className:"ub-tooltip-item-dot",style:{backgroundColor:e.color}}),t?(0,y.jsx)("div",{className:"ub-tooltip-item-attributes",children:s.map((u,a)=>(0,y.jsx)(Fe,{hideAttributeKey:o,attribute:u,format:r,isLastAttribute:a>=s.length-1},"attr_"+u[0]))}):(0,y.jsx)("span",{className:i?"ub-tooltip-item-metric-name-label":"ub-tooltip-item-metric-name",children:ie(e.metric.name,r)})]}),i&&!t&&(0,y.jsx)("div",{className:"ub-tooltip-item-attributes",children:s.map((u,a)=>(0,y.jsx)(Fe,{hideAttributeKey:o,attribute:u,format:r,isLastAttribute:a>=s.length-1},"attr_"+u[0]))})]}),(0,y.jsx)("div",{className:"ub-tooltip-item-value",children:e.formattedValue??(0,y.jsx)("span",{className:"ub-tooltip-item-value--empty",children:"\u2014"})})]})}function yt({className:e="ub-tooltip-divider",...t}){return(0,y.jsx)("hr",{role:"presentation",...t,className:e})}function Tt({group:e,groupIdx:t,hideAttributeKey:o,hideMetric:n,hideAttributes:r,format:l,hideGroupLabel:s}){return(0,y.jsxs)("div",{className:"ub-tooltip-group",children:[!s&&(0,y.jsx)("div",{className:`ub-tooltip-group-header${t>0?" ub-tooltip-group-header--separator":""}`,children:e.label}),(0,y.jsx)("div",{className:"ub-tooltip-items",children:e.items.map((i,u)=>(0,y.jsx)(ht,{item:i,format:l,hideAttributeKey:o,hideMetric:n,hideAttributes:r},`item-${t}-${u}`))})]},e.label)}function qe({timestamp:e,items:t,timeZone:o,spansMultipleDays:n,sortByValues:r,format:l="original",layout:s="flat",hideAttributeKey:i,hideMetric:u,hideAttributes:a}){let m=n?(0,de.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:o}):(0,de.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:o}),d=(0,fe.useMemo)(()=>bt(t,s),[t,s]),p=d==="flat",f=typeof u=="boolean"?u:d==="group-by-metric",h=typeof i=="boolean"?i:!1,b=typeof a=="boolean"?a:!1,v=(0,fe.useMemo)(()=>gt(t,r,d,l),[t,r,d,l]);return(0,y.jsxs)("div",{className:"ub-tooltip",children:[(0,y.jsx)("div",{className:"ub-tooltip-datetime",children:m}),(0,y.jsx)(yt,{}),v.length>0?(0,y.jsx)("div",{className:"ub-tooltip-content",children:v.map((w,g)=>(0,y.jsx)(Tt,{group:w,groupIdx:g,hideAttributeKey:h,hideMetric:f,hideAttributes:b,hideGroupLabel:p,format:l},w.label))}):(0,y.jsx)("div",{className:"ub-tooltip-no-data",children:"No data available"})]})}var ge=require("react/jsx-runtime"),vt=4,xt=8;function Ct(e,t){if(!e||e.length===0)return!1;let o=e[0],n=e[e.length-1];if(o==null||n==null)return!1;let r=new Date(o*1e3),l=new Date(n*1e3),s=i=>t==="UTC"?`${i.getUTCFullYear()}-${i.getUTCMonth()}-${i.getUTCDate()}`:i.toLocaleDateString(void 0,{timeZone:t});return s(r)!==s(l)}function wt(e,t){let o=!1;for(let r=1;r<e.series.length;r++)if(e.data[r]?.[t]!=null){o=!0;break}if(o)return t;let n=e.data[0].length;for(let r=1;t+r<n||t-r>=0;r++){let l=t-r,s=t+r;if(l>=0){for(let i=1;i<e.series.length;i++)if(e.data[i]?.[l]!=null)return l}if(s<n){for(let i=1;i<e.series.length;i++)if(e.data[i]?.[s]!=null)return s}}return t}function Pt(e,t,o,n,r,l){let s=!1,i=[];for(let u=1;u<e.series.length;u++){let a=e.data[u]?.[t]??null;if(n&&a!=null&&u>1){let b=e.data[u-1]?.[t]??0;a=a-b}let m=e.series[u],d=l?.[u-1];if(!d){console.warn("Original serie not found");continue}let p=r[d.metric];if(!p){console.warn("Metric metadata not found");continue}let c=m?.stroke,f=typeof c=="function"?c(je.default,u):c??"#ffffff00",h=a==null?void 0:o?o(a):String(a);d?.attributes&&Object.keys(d?.attributes).length>0&&(s=!0),i.push({metric:p,color:f,value:a===null?void 0:a,formattedValue:h,attributes:d?.attributes,serie:m})}return{items:i,hasAttributes:s}}async function Ut(e,t){let{x:o,y:n}=await(0,K.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,K.offset)({mainAxis:vt,crossAxis:xt}),(0,K.flip)()]});e.style.left=`${o}px`,e.style.top=`${n}px`}function Ge(e,t,o,n,r,l,s,i,u,a,m,d){let p,c,f,h=!1;function b(){let g=p.getBoundingClientRect();c=g.left,f=g.top}function v(){H.hide()}function w(){H.show()}return{hooks:{init:g=>{H.initialize(),p=g.over,window.addEventListener("scroll",b,!0),window.addEventListener("resize",b);let P=new MutationObserver(()=>{p&&!document.body.contains(p)&&(h=!1,v(),P.disconnect())});p.onmouseenter=()=>{h=!0,w()},p.onmouseleave=()=>{h=!1,v()},b()},setSize:()=>{b()},setCursor:g=>{let{left:P,top:S,idx:x}=g.cursor;if(!h||x==null){v();return}let T=g.data[0],C=Ct(T,r),U=wt(g,x),k=g.data[0][U];if(k===void 0)return;let{items:F}=Pt(g,U,e,t,o,s),_={left:(P||0)+c,top:(S||0)+f};w();let B=l,W=B?(0,ge.jsx)(B,{timestamp:k,items:F,timeZone:r}):(0,ge.jsx)(qe,{timestamp:k,items:F,timeZone:r,spansMultipleDays:C,stacked:t,sortByValues:n,layout:i,format:u,hideAttributeKey:a,hideAttributes:m,hideMetric:d});H.render(W);let Q=H.getOverlay();Q&&Ut(Q,_)},destroy(){window.removeEventListener("scroll",b,!0),window.removeEventListener("resize",b),p&&(p.onmouseenter=null,p.onmouseleave=null)}}}}var z=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,Ke=(e,t)=>{let o=e;return t&&t.unit&&t.unit.code&&t.unit.code!=="1"&&(!o&&t.unit?o=t.unit.code:o&&t.unit.code!==o&&(o=void 0)),o};function At(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.fill)&&Array.isArray(e.border)}function Rt(e){return Array.isArray(e)}var _e=(e,t,o,n,r)=>Rt(o)?r&&(n==="step"||n==="line"||n==="spline")?o[t]+"66":o[t]:At(o)?r?o.fill[t]:o.border[t]:o(e,t,n,r),St=e=>{let t=$.default.paths.bars({size:[.6,100],radius:0,gap:0}),o=$.default.paths.linear({alignGaps:0}),n=$.default.paths.spline({alignGaps:1}),r=$.default.paths.stepped({alignGaps:1});switch(e){case"line":return o;case"bar":return t;case"area":return o;case"step":return r;case"spline":return n;default:return o}},kt=(e,t,o,n)=>_e(e,t,o,n,!0),Mt=(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}},Et=(e,t,o)=>{let n=e.posToVal(t,"x"),r=e.data[0];if(!r||r.length===0)return[t,o];let l=0,s=0,i=r.length-1;for(;i-s>1;){let c=Math.floor((s+i)/2),f=r[c];f!=null&&f<n?s=c:i=c}let u=r[s],a=r[i];u!=null&&a!=null?l=Math.abs(u-n)<Math.abs(a-n)?s:i:u!=null?l=s:a!=null&&(l=i);let m=l;for(let c=l;c>=0;c--){let f=!1;for(let h=1;h<e.data.length;h++){let b=e.data[h];if(b&&b[c]!=null){f=!0;break}}if(f){m=c;break}}let d=r[m];return d==null?[t,o]:[e.valToPos(d,"x"),o]},Qe=(e,t,o,n,r,l,s,i,u,a,m,d,p,c,f,h,b,v,w)=>{let g=e?.clientWidth??1050,P=e?.clientHeight??250,S=typeof o=="string"?String(o).toLowerCase().replaceAll("by","bytes"):o,x=(0,He.getValueFormat)(S==="1"?null:S),A=Mt(r,u),T={width:g,height:P,scales:{y:{range:$e(o)}},plugins:[Ge(C=>{let U=x(C,Number.isInteger(C)?0:2);return U.text+(U.suffix?.trim()||"")},l,t,m,d,p,n,h,f,b,v,w)],padding:c?[10,15,10,15]:[8,15,8,15],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:Et},series:[{},...n.map((C,U)=>({label:C.metric,stroke:_e(C,U,i,r),width:A,points:{show:!1},spanGaps:!0,paths:St(r),fill:u||l?kt(C,U,i,r):void 0}))],axes:[Ie(a,d,c),We(x,a,o)],legend:{show:!1}};if(s){let C=T.axes?.[0],U=T.axes?.[1];C&&(C.stroke="#dadada",C.grid&&(C.grid.stroke="#2c3235")),U&&(U.stroke="#dadada",U.grid&&(U.grid.stroke="#2c3235"))}else{let C=T.axes?.[0],U=T.axes?.[1];C&&(C.stroke="#45556c"),U&&(U.stroke="#45556c")}return T};var Xe=e=>{let t=e/4,o=Math.pow(10,Math.floor(Math.log10(t))),n=t/o,r;return n>5?r=10*o:n>2?r=5*o:n>1?r=2*o:r=o,Math.ceil(e/r)*r},$e=e=>(t,o,n)=>{let l=n*2,s=o<0?o*2:o*0;if(e==="percent"||e==="percentunit")return n>100?o<0?[s,l]:[0,l]:o<0?[s,100]:[0,100];if(n<=.9999)return o<=0?[s,1]:[0,1];let i=Xe(l),u=Xe(Math.abs(s));return o<0?[-u,i]:[0,i]},Lt=(e,t,o,n)=>{let r=e.axes[o];if(n>1)return r?._size;let l=(r?.ticks?.size||0)+(r?.gap||0),s=(t??[]).reduce((i,u)=>u.length>i.length?u:i,"");return s!=""&&(e.ctx.font=r?.font?.[0]??e.ctx.font,l+=e.ctx.measureText(s).width/devicePixelRatio),Math.ceil(l)};function We(e,t,o){return{gap:0,font:z(t),labelFont:z(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(n,r)=>r.map(l=>{let s=e(l);return s.text+(s.suffix?.trim()||"")}),size:Lt}}function Ye(e,t){let o=[],n=e[0],r=n.length,l=Array(r).fill(0),s=[n];return e.forEach((i,u)=>{u!==0&&(t?s.push(i):s.push(i.map((a,m)=>l[m]=l[m]+(a||0))))}),e.forEach((i,u)=>{u===0||t||o.push({series:[e.findIndex((a,m)=>m>u),u]})}),{data:s,bands:o.filter(i=>i.series[1]>-1)}}var Ze=require("react/jsx-runtime");function ae(e){let{times:t,series:o,metadata:n,type:r,className:l,timeZone:s,options:i,tooltip:u,colors:a,tooltipAppearance:m,sortByValues:d=!1,unit:p,fill:c=!1}=e,{layout:f,format:h,hideAttributeKey:b,hideAttributes:v,hideMetric:w}=u||{},g=(0,se.useRef)(null),P=ne(),S=V(),x=a||S.appearance.colors;return(0,se.useEffect)(()=>{if(!o||o.length===0){console.warn("No series provided");return}let A=[t],T=p;o.forEach(_=>{let B=n[_.metric];p||(T=Ke(T,B)),A.push(_.values)});let C=r==="bar"||r==="area",U=Ye(A,!C),k=g.current,F=null;if(k){let B=window.getComputedStyle(k).fontFamily,W=Qe(k,n,T,o,r,C,P,x,c,B,d,s,m,!1,h,f,b,v,w);W.bands=U.bands,F=new Je.default({...W,...i},U.data,k);let Q=new ResizeObserver(()=>{F?.setSize({width:k.clientWidth,height:k.clientHeight})});return Q.observe(k),()=>{F?.destroy(),Q.disconnect()}}},[o,t,r,P,n,s,m,x,c,d,p,h,f,b,v,w]),(0,Ze.jsx)("div",{ref:g,className:"ub-chart-container"+(l?` ${l}`:"")})}var D=require("react/jsx-runtime");function et({metrics:e,operator:t,attributes:o,groupBy:n,interval:r,type:l="line",className:s,appearance:i,unit:u}){let a=V(),m=r??a.interval,d=o??a.attributes,p=n??a.groupBy,c=t??a.operator,f=i?.colors??a.appearance.colors,h=typeof i?.sortByValues=="boolean"?i?.sortByValues:a.appearance.sortByValues,{isLoading:b,data:v,hasError:w}=oe({queries:(Array.isArray(e)?e:[e]).map(T=>({metrics:[T],operator:c,attributes:d,groupBy:p})),timeRange:a.timeRange,startTime:a.startTime,endTime:a.endTime,interval:m}),{series:g,times:P,metadata:S}=v,x=g.every(T=>T.isEmpty),A=`ub-chart-container${s?` ${s}`:""}`;if(b){let T=i?.components?.Loading??a.appearance.components.Loading;return(0,D.jsx)("div",{className:A,children:(0,D.jsx)(T,{})})}if(x){let T=i?.components?.Empty??a.appearance.components.Empty;return(0,D.jsx)("div",{className:A,children:(0,D.jsx)(T,{})})}if(w){let T=i?.components?.Error??a.appearance.components.Error;return(0,D.jsx)("div",{className:A,children:(0,D.jsx)(T,{})})}return(0,D.jsx)(ae,{times:P,series:g,metadata:S,type:l,className:A,tooltip:{layout:a.appearance.tooltip?.layout,format:a.appearance.tooltip?.format,hideAttributes:a.appearance.tooltip?.hideAttributes,hideAttributeKey:a.appearance.tooltip?.hideAttributeKey,hideMetric:a.appearance.tooltip?.hideMetric},colors:f,sortByValues:h,unit:u,fill:typeof i?.fill=="boolean"?i.fill:a.appearance.fill,tooltipAppearance:i?.components?.Tooltip??a.appearance.components.Tooltip})}0&&(module.exports={Chart,Empty,Error,Loading,TimeseriesChart,UnblindProvider,UnblindScope,useLogs,useMetrics,useRefresh,useScope,useTheme,useTimeseries,useUsage});
|
|
1
|
+
"use strict";var xt=Object.create;var le=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var Lt=Object.getPrototypeOf,Rt=Object.prototype.hasOwnProperty;var kt=(e,t)=>{for(var r in t)le(e,r,{get:t[r],enumerable:!0})},Be=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Pt(t))!Rt.call(e,o)&&o!==r&&le(e,o,{get:()=>t[o],enumerable:!(i=St(t,o))||i.enumerable});return e};var Ce=(e,t,r)=>(r=e!=null?xt(Lt(e)):{},Be(t||!e||!e.__esModule?le(r,"default",{value:e,enumerable:!0}):r,e)),At=e=>Be(le({},"__esModule",{value:!0}),e);var mr={};kt(mr,{Chart:()=>be,Empty:()=>ce,Error:()=>ue,Loading:()=>pe,Scope:()=>oe,Timeseries:()=>Ct,UnblindProvider:()=>Qe,useLogs:()=>rt,useMetrics:()=>We,useRefresh:()=>Pe,useScope:()=>O,useTimeseries:()=>me,useUsage:()=>Ze});module.exports=At(mr);var $=require("@tanstack/react-query"),I=require("react"),xe=require("react/jsx-runtime"),_e=(0,I.createContext)(void 0);function Se({children:e,queryClient:t,queryClientConfig:r,apiBaseUrl:i="/api/unblind",fetchImpl:o}){let n=(0,I.useMemo)(()=>{if(t)return t;let a={refetchOnWindowFocus:!1,refetchOnReconnect:!1,refetchOnMount:!1},l={defaultOptions:{queries:a}};return r?new $.QueryClient({...r,defaultOptions:{...r.defaultOptions,queries:{...a,...r.defaultOptions?.queries}}}):new $.QueryClient(l)},[t,r]),s=(0,I.useMemo)(()=>({apiBaseUrl:i,fetchImpl:o}),[i,o]);return(0,xe.jsx)($.QueryClientProvider,{client:n,children:(0,xe.jsx)(_e.Provider,{value:s,children:e})})}function N(){let e=(0,I.useContext)(_e);if(!e)throw new Error("useUnblindConfig must be used within an UnblindClientProvider. Please wrap your app or component tree with <UnblindClientProvider>.");return e}function Pe(){let e=(0,$.useQueryClient)();return(0,I.useCallback)(async()=>{await e.refetchQueries({queryKey:["unblind","timeseries"]})},[e])}var V=require("react");var D=require("react/jsx-runtime");function ce(){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 ue(){return(0,D.jsx)("div",{className:"ub-default-error"})}function pe(){return(0,D.jsx)("div",{className:"ub-default-loading","data-text":"Loading"})}var He=require("react/jsx-runtime"),Le=(0,V.createContext)(void 0);function oe({children:e,timeRange:t,startTime:r,endTime:i,interval:o,attributes:n,groupBy:s,operator:a,appearance:l,tooltip:u,colors:g,fill:d,hideAxis:h,hideCursor:p,relativeTimeAxis:m,invertSort:b,disableSuggestedLabel:v}){let f=(0,V.useContext)(Le),x=l?.components?.Loading||f?.appearance?.components?.Loading,C=l?.components?.Error||f?.appearance?.components?.Error,y=l?.components?.Tooltip||f?.appearance?.components?.Tooltip,T=l?.components?.Empty||f?.appearance?.components?.Empty,R=typeof u?.hide=="boolean"?u?.hide:f?.tooltip?.hide,k=typeof u?.visibilityLimit=="number"?u?.visibilityLimit:f?.tooltip?.visibilityLimit,S=(0,V.useMemo)(()=>({components:{...x&&{Loading:x},...C&&{Error:C},...y&&{Tooltip:y},...T&&{Empty:T}}}),[x,C,y,T]),M=(0,V.useMemo)(()=>({hide:R,visibilityLimit:k}),[R,k]),A=(0,V.useMemo)(()=>({timeRange:t??f?.timeRange,startTime:r??f?.startTime,endTime:i??f?.endTime,interval:o??f?.interval,attributes:n??f?.attributes,groupBy:s??f?.groupBy,operator:a??f?.operator,colors:g??f?.colors,relativeTimeAxis:typeof m=="boolean"?m:f?.relativeTimeAxis,fill:typeof d=="boolean"?d:f?.fill,hideAxis:typeof h=="boolean"?h:f?.hideAxis,hideCursor:typeof p=="boolean"?p:f?.hideCursor,invertSort:typeof b=="boolean"?b:f?.invertSort,disableSuggestedLabel:typeof v=="boolean"?v:f?.disableSuggestedLabel,appearance:S,tooltip:M}),[t,r,i,o,n,s,a,g,d,m,h,p,S,M,f,b,v]);return(0,He.jsx)(Le.Provider,{value:A,children:e})}var wt="6h";function O(){let e=(0,V.useContext)(Le);return(0,V.useMemo)(()=>({...e,timeRange:e?.timeRange||wt,appearance:{components:{Loading:e?.appearance?.components?.Loading??pe,Error:e?.appearance?.components?.Error??ue,Empty:e?.appearance?.components?.Empty??ce,Tooltip:e?.appearance?.components?.Tooltip}}}),[e])}var Re=require("react/jsx-runtime");function Qe({children:e,queryClient:t,apiBaseUrl:r,fetchImpl:i,timeRange:o,startTime:n,endTime:s,interval:a,attributes:l,groupBy:u,operator:g,appearance:d,tooltip:h,colors:p,fill:m,hideAxis:b,hideCursor:v,relativeTimeAxis:f,invertSort:x,disableSuggestedLabel:C}){return(0,Re.jsx)(Se,{queryClient:t,apiBaseUrl:r,fetchImpl:i,children:(0,Re.jsx)(oe,{timeRange:o,startTime:n,endTime:s,interval:a,attributes:l,groupBy:u,operator:g,appearance:d,tooltip:h,colors:p,fill:m,hideAxis:b,hideCursor:v,relativeTimeAxis:f,invertSort:x,disableSuggestedLabel:C,children:e})})}var $e=require("@tanstack/react-query");function We(){let{apiBaseUrl:e,fetchImpl:t=fetch}=N(),r=(0,$e.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 Xe=require("@tanstack/react-query"),X=require("react");var je=Ce(require("ms"));function Ge({scope:e,props:t}){return t.timeRange||t.startTime&&t.endTime?t:e}function Mt(e){let t=Math.floor(Date.now()/1e3);return[t-Math.floor((0,je.default)(e)/1e3),t]}function G(e,t,r){let i,o;if(typeof t=="number"&&typeof r=="number")i=t,o=r;else if(e){let[n,s]=Mt(e);i=n,o=s}else throw new Error("Either timeRange or both startTime and endTime must be provided");return[i,o]}var Ke=require("react");function K(e){let t=O(),{timeRange:r,startTime:i,endTime:o}=Ge({props:e,scope:t});return(0,Ke.useMemo)(()=>({timeRange:r,startTime:i,endTime:o}),[r,i,o])}function me(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:i,endTime:o,timeRange:n}=K(e),{queries:s,interval:a}=e,l=(0,X.useMemo)(()=>s.map(y=>y.metrics.join(",")).join(","),[s]),u=(0,X.useMemo)(()=>s.map(y=>{let T=y.attributes;if(!T)return"";let R=Object.keys(T);return R.length===0?"":R.map(k=>k+":"+T[k]?.join(",")).join(",")}).join(","),[s]),g=(0,X.useMemo)(()=>s.map(y=>y.operator),[s]),d=(0,X.useMemo)(()=>s.map(y=>y.groupBy).join(", "),[s]),p=(0,Xe.useQuery)({queryKey:["unblind","timeseries",l,u,i,o,n,a,g,d],queryFn:async()=>{if(!l)throw new Error("Missing required parameters");if(l.length===0)throw new Error("No series provided");let[y,T]=G(n,i,o),R={queries:s,startTime:y,endTime:T,interval:a},k=await r(`${t}/tenants/timeseries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(R)});if(!k.ok)throw new Error("Error fetching metric");let{series:S,times:M,metadata:A}=await k.json();if(!S)throw console.error("Series not found"),new Error("Series not found");return{series:S,times:M,metadata:A}},enabled:!!l&&(typeof i=="number"&&typeof o=="number"||!!n)}),{metadata:m,series:b,times:v}=(0,X.useMemo)(()=>p.data?{series:p.data.series,times:p.data.times,metadata:p.data.metadata}:{series:[],times:[],metadata:{}},[p]),f=p.isLoading,x=p.isFetching,C=p.isError;return{data:{series:b,times:v,metadata:m},isLoading:f,isFetching:x,hasError:C,refetch:p.refetch}}var Ye=require("@tanstack/react-query"),Je=require("react");function Ze(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{startTime:i,endTime:o,timeRange:n}=K(e),a=(0,Ye.useQuery)({queryKey:["unblind","usage",n,i,o],queryFn:async()=>{let[d,h]=G(n,i,o),p=`${t}/tenants/usage`,m=await r(p,{headers:{"Content-Type":"application/json"},body:JSON.stringify({startTime:d,endTime:h})});if(!m.ok)throw new Error("Error fetching usage");let{data:b}=await m.json();if(!b)throw new Error("usage not found");return b},enabled:typeof i=="number"&&typeof o=="number"||!!n}),l=(0,Je.useMemo)(()=>a.data?a.data||[]:[],[a]),u=a.isLoading||a.isRefetching,g=a.isError;return{usage:l,isLoading:u,hasError:g,refetch:a.refetch}}var et=require("@tanstack/react-query"),tt=require("react");function rt(e){let{apiBaseUrl:t,fetchImpl:r=fetch}=N(),{timeRange:i,startTime:o,endTime:n}=K(e),{attributes:s,body:a,severity:l,traceId:u,spanId:g,logId:d}=e,h=(0,et.useInfiniteQuery)({queryKey:["unblind","logs",i,o,n,a,l,d,JSON.stringify(s)],queryFn:async({pageParam:m})=>{let[b,v]=G(i,o,n),f=await r(`${t}/tenants/logs`,{method:"POST",body:JSON.stringify({attributes:s,body:a,severity:l,traceId:u,spanId:g,logId:d,startTime:b,endTime:v,pagination:{page:m}}),headers:{"Content-Type":"application/json"}});if(!f.ok)throw new Error("Error fetching logs");let{data:x,nextPage:C}=await f.json();if(!x)throw new Error("data not found");return{data:x,nextPage:C}},initialPageParam:void 0,getNextPageParam:m=>m.nextPage});return{logs:(0,tt.useMemo)(()=>h.data?h.data.pages.flatMap(m=>m.data||[]):[],[h.data]),isLoading:h.isLoading,hasError:h.isError,hasNextPage:h.hasNextPage??!1,fetchNextPage:h.fetchNextPage,isFetchingNextPage:h.isFetchingNextPage,refetch:h.refetch}}var ie=e=>"value"in e,de=e=>"from"in e&&"to"in e;function ke(e){return typeof e=="object"&&e!==null&&typeof e.name=="string"&&typeof e.label=="string"}var ee=require("react");var ge=require("react"),Tt=Ce(require("uplot"));var se=Ce(require("uplot")),pt=require("@unblind/units");var _=require("@unblind/units");var w={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,month:24192e5,year:31536e6},Y={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,i){if(t>7*w.day){let o=_.systemDateFormats.interval.year,n=Math.round(w.year/w.day)*w.day;if(Math.round(t/w.day)*w.day===n)o=_.systemDateFormats.interval.year;else{if(t<=w.year)return e.map(a=>{let l=new Date(a);return(i==="UTC"?l.getUTCDate():l.getDate())===1?l.toLocaleDateString(void 0,{month:"short",year:"numeric",timeZone:i}):l.toLocaleDateString(void 0,{day:"numeric",month:"short",timeZone:i})});o=_.systemDateFormats.interval.day}return e.map(a=>(0,_.dateTimeFormat)(a,{format:o,timeZone:i}))}return e.map(o=>{let n=new Date(o),s=t<w.minute,a=t<w.second,l=n.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1,timeZone:i});return(l==="00:00"||l==="24:00")&&!s&&!a?n.toLocaleDateString(void 0,{day:"2-digit",month:"short",timeZone:i}):n.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",second:s?"2-digit":void 0,fractionalSecondDigits:a?3:void 0,hour12:!1,timeZone:i})})}function Et(e){let t=[{size:w.second/1e3,increments:Y.second},{size:w.minute/1e3,increments:Y.minute},{size:w.hour/1e3,increments:Y.hour},{size:w.day/1e3,increments:Y.day},{size:w.month/1e3,increments:Y.month},{size:w.year/1e3,increments:Y.year}];for(let o of t)for(let n of o.increments){let s=o.size*n;if(s>=e)return{increment:s*1e3,multiplier:n}}let r=t[t.length-1],i=r.increments[r.increments.length-1];return{increment:r.size*i*1e3,multiplier:i}}function Nt(e,t,r){return[t,r]}function Dt(e,t,r){return t.length===0?[]:t.map((i,o)=>o===0||o===t.length-1?(0,_.dateTimeFormatTimeAgo)(i*1e3,{timeZone:r}):"")}function Vt(e,t,r){let i=e.scales.x,o=((i?.max??0)-(i?.min??0))*1e3,n=Math.floor(e.width/100),s=o/1e3/n,{increment:a}=Et(s),l=t.map(u=>u*1e3);return Ut(l,a,o,r)}function ot(e,t,r=!1,i=!1){let o=r?(s,a,l,u)=>Nt(s,l,u):void 0,n=r?(s,a)=>Dt(s,a,t):(s,a)=>Vt(s,a,t);return{font:J(e),labelFont:J(e),grid:{show:!1,width:.5},ticks:{width:.5},splits:o,values:n,size:20,show:!i,align:r?2:void 0,space:(s,a,l,u,g)=>g<400?100:g<800?150:250}}var Z=require("@floating-ui/dom"),it=require("react-dom/client"),Ot=4,It=8,Ae=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,it.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:i,y:o}=await(0,Z.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,Z.offset)({mainAxis:Ot,crossAxis:It}),(0,Z.flip)()]});r.style.left=`${i}px`,r.style.top=`${o}px`}}},U=new Ae;var Me=require("@unblind/units"),H=require("react"),c=require("react/jsx-runtime"),zt=6,nt=(0,H.createContext)(null);function fe(){let e=(0,H.useContext)(nt);if(!e)throw new Error("useTooltipSerie must be used within a SerieProvider");return e}function qt({serie:e,children:t}){return(0,c.jsx)(nt.Provider,{value:e,children:t})}var st=(0,H.createContext)(null);function ne(){let e=(0,H.useContext)(st);if(!e)throw new Error("useTooltipSerie must be used within a SerieProvider");return e}function we({formattedTime:e,tooltip:t,children:r}){return(0,c.jsx)(st.Provider,{value:{formattedTime:e,disableSuggestedLabel:t.disableSuggestedLabel,invertSort:t.invertSort,visibilityLimit:t.visibilityLimit||zt},children:r})}function Ue({className:e="ub-tooltip-divider",...t}){return(0,c.jsx)("hr",{role:"presentation",...t,className:e})}function Ft({unitCategory:e,tooltipSerieList:t}){let{visibilityLimit:r,formattedTime:i}=ne(),o=t.slice(0,r),n=t.slice(r);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-metrics",children:[(0,c.jsxs)(Ve,{children:[(0,c.jsx)(Oe,{children:i}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)(Ht,{children:e})})]}),(0,c.jsx)(Ue,{}),(0,c.jsxs)("div",{children:[(0,c.jsx)(De,{children:o.map(s=>(0,c.jsxs)(Ne,{serie:s,children:[(0,c.jsx)(ze,{}),(0,c.jsx)(at,{}),(0,c.jsx)(Ie,{})]},s.metric.name))}),(0,c.jsx)(Ee,{series:n})]})]})}function Bt({tooltipSerieList:e}){let{visibilityLimit:t,disableSuggestedLabel:r,formattedTime:i}=ne(),o=e[0],n=e.slice(0,t),s=e.slice(t);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-attributes",children:[(0,c.jsxs)(Ve,{children:[(0,c.jsx)(Oe,{children:i}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-serie-metric",children:o?.metric.label||!r&&o?.metric.suggestedLabel||o?.metric.name})})]}),(0,c.jsx)(Ue,{}),(0,c.jsxs)("div",{children:[(0,c.jsx)(De,{children:n.map((a,l)=>(0,c.jsxs)(Ne,{serie:a,children:[(0,c.jsx)(ze,{}),(0,c.jsx)(lt,{}),(0,c.jsx)(Ie,{})]},"serie_"+l))}),(0,c.jsx)(Ee,{series:s})]})]})}function _t({tooltipSerieList:e,unitCategory:t}){let{visibilityLimit:r,formattedTime:i}=ne(),o=e.slice(0,r),n=e.slice(r);return(0,c.jsxs)("div",{className:"ub-tooltip ub-tooltip-multiple-metrics-attributes",children:[(0,c.jsxs)(Ve,{children:[(0,c.jsx)(Oe,{children:i}),(0,c.jsx)("div",{className:"ub-tooltip-header-right",children:(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:t})})]}),(0,c.jsx)(Ue,{}),(0,c.jsxs)("div",{children:[(0,c.jsx)(De,{children:o.map((s,a)=>(0,c.jsxs)(Ne,{serie:s,children:[(0,c.jsx)(ze,{}),(0,c.jsx)(at,{}),(0,c.jsx)(lt,{}),(0,c.jsx)(Ie,{})]},"serie"+a))}),(0,c.jsx)(Ee,{series:n})]})]})}function Ht(e){return(0,c.jsx)("span",{className:"ub-tooltip-unit-category",children:e.children})}function Ee({series:e}){let t=e[0]?.formattedValue,r=!e.some(n=>(n.value||0)>0),i=!e.some(n=>n.value!==void 0),{invertSort:o}=ne();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"]})}):r?(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:`${o?"\u2265":"\u2264"} ${t}`})]}):(0,c.jsx)(c.Fragment,{})}function Ne(e){return(0,c.jsx)(qt,{serie:e.serie,children:(0,c.jsx)("div",{className:"ub-tooltip-serie",children:e.children})})}function De(e){return(0,c.jsx)("div",{className:"ub-tooltip-content",children:e.children})}function Ve(e){return(0,c.jsx)("div",{className:"ub-tooltip-header",children:e.children})}function Oe(e){return(0,c.jsx)("div",{className:"ub-tooltip-datetime",children:e.children})}function at(){let e=fe(),{disableSuggestedLabel:t}=ne();return(0,c.jsx)("span",{className:"ub-tooltip-serie-metric ub-truncate",children:e.metric.label||!t&&e.metric.suggestedLabel||e.metric.name})}function Ie(){let e=fe();return e.formattedValue?(0,c.jsx)("span",{className:"ub-tooltip-serie-value ub-truncate",children:e.formattedValue}):(0,c.jsx)("span",{className:"ub-tooltip-serie-value-empty",children:"\u2013"})}function ze(){let e=fe();return(0,c.jsx)("span",{style:{backgroundColor:e.color},className:"ub-tooltip-serie-color"})}function lt(){let{attributes:e}=fe();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,i)=>(0,c.jsxs)(H.Fragment,{children:[(0,c.jsx)("span",{className:"ub-tooltip-serie-attribute-value",children:r}),i<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,i)=>(Number(r.value)||0)-(Number(i.value)||0)):e.sort((r,i)=>(Number(i.value)||0)-(Number(r.value)||0))}function ct({timestamp:e,tooltipSerieList:t,timeZone:r,spansMultipleDays:i,hasMultipleMetrics:o,hasAttributes:n,invertSort:s,visibilityLimit:a,disableSuggestedLabel:l}){let u=Qt({tooltipSerieList:t,invertSort:s}),g=i?(0,Me.dateTimeFormat)(e*1e3,{format:"MMM DD, HH:mm",timeZone:r}):(0,Me.dateTimeFormat)(e*1e3,{format:"HH:mm",timeZone:r});return n?n&&!o?(0,c.jsx)(we,{tooltip:{invertSort:s,visibilityLimit:a,disableSuggestedLabel:l},formattedTime:g,children:(0,c.jsx)(Bt,{tooltipSerieList:u})}):(0,c.jsx)(we,{tooltip:{invertSort:s,visibilityLimit:a,disableSuggestedLabel:l},formattedTime:g,children:(0,c.jsx)(_t,{unitCategory:"",tooltipSerieList:u})}):(0,c.jsx)(we,{tooltip:{invertSort:s,visibilityLimit:a,disableSuggestedLabel:l},formattedTime:g,children:(0,c.jsx)(Ft,{unitCategory:"",tooltipSerieList:u})})}var qe=require("react/jsx-runtime");function $t(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),n=new Date(i*1e3),s=a=>t==="UTC"?`${a.getUTCFullYear()}-${a.getUTCMonth()}-${a.getUTCDate()}`:a.toLocaleDateString(void 0,{timeZone:t});return s(o)!==s(n)}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 n=t-o,s=t+o;if(n>=0){for(let a=1;a<e.series.length;a++)if(e.data[a]?.[n]!=null)return n}if(s<i){for(let a=1;a<e.series.length;a++)if(e.data[a]?.[s]!=null)return s}}return t}function jt(e,t,r,i,o,n,s){let a=[],l=e.data[0],u=new Set,g=new Set,d=!1;for(let h=1;h<e.series.length;h++){let p=e.data[h]?.[t]??null;if(i&&p!=null&&h>1){let T=e.data[h-1]?.[t]??0;p=p-T}let m=e.series[h],b=n?.[h-1];if(!b){console.warn("Original serie not found");continue}let v=o[b.metric];if(!v){console.warn("Metric metadata not found");continue}u.add(b.metric);let f=b?.attributes;if(f&&Object.keys(f).length>0){d=!0;for(let T in f)g.add(T)}let x=m?.stroke,C=typeof x=="function"?x(e,h):x??"#ffffff00",y=p==null?void 0:r?r(p):String(p);a.push({metric:v,color:C,value:p===null?void 0:p,formattedValue:y,attributes:f,serie:m})}return{tooltipSerieList:a,hasAttributes:d,hasMultipleMetrics:u.size>1,hasMultipleAttributes:g.size>1,spansMultipleDays:$t(l,s)}}function ut(e,t,r,i,o,n,s,a,l){let u,g,d,h=!1;function p(){let m=u.getBoundingClientRect();g=m.left,d=m.top}return{hooks:{init:m=>{U.initialize(),u=m.over,window.addEventListener("scroll",p,!0),window.addEventListener("resize",p),u.onmouseenter=()=>{h=!0,U.show()},u.onmouseleave=()=>{h=!1,U.getRenderedUplot()===m&&U.hide(m)},p()},setSize:()=>{p()},setCursor:m=>{let{left:b,top:v,idx:f}=m.cursor;if(!h||f==null){U.getRenderedUplot()===m&&U.hide(m);return}let C=Wt(m,f),y=m.data[0][C];if(y===void 0)return;let{tooltipSerieList:T,hasAttributes:R,hasMultipleAttributes:k,hasMultipleMetrics:S,spansMultipleDays:M}=jt(m,C,e,t,r,n,i);U.show();let A=o,z=A?(0,qe.jsx)(A,{timestamp:y,tooltipSerieList:T,timeZone:i}):(0,qe.jsx)(ct,{timestamp:y,tooltipSerieList:T,timeZone:i,spansMultipleDays:M,stacked:t,hasAttributes:R,hasMultipleAttributes:k,hasMultipleMetrics:S,visibilityLimit:s,invertSort:a,disableSuggestedLabel:l});U.render(m,z),U.positionTooltip({left:(b||0)+g,top:(v||0)+d})},destroy(m){window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),u&&(u.onmouseenter=null,u.onmouseleave=null),U.getRenderedUplot()===m&&U.hide(m)}}}}var he=["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)"],J=e=>`${getComputedStyle(document.documentElement).getPropertyValue("--ub-chart-font-size").trim()} ${e}`,mt=(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 Gt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Array.isArray(e.fill)&&Array.isArray(e.border)}function Kt(e){return Array.isArray(e)}var Xt=12,Yt=({isFilling:e,useSolid:t,index:r})=>{let i=r%Xt+1;return e?t?`--ub-chart-serie-color-${i}`:`--ub-chart-serie-fill-color-${i}`:`--ub-chart-serie-color-${i}`},dt=(e,t,r,i,o,n)=>{let s=i==="bar"||i==="area";if(r)return Kt(r)?r[t]:Gt(r)?n?r.fill[t]:r.border[t]:r(e,t,i,n);let a=Yt({isFilling:n,useSolid:s,index:t}),l=o.getPropertyValue(a).trim();return l||(n&&s?he[t%he.length]?.replace(")"," / 0.4)"):he[t%he.length])},Jt=e=>{let t=se.default.paths.bars({size:[.6,100],radius:0,gap:0}),r=se.default.paths.linear({alignGaps:0}),i=se.default.paths.spline({alignGaps:1}),o=se.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}},Zt=(e,t,r,i,o)=>dt(e,t,r,i,o,!0),er=(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}},tr=(e,t,r)=>{if(t<0||r<0)return[t,r];let i=e.posToVal(t,"x"),o=e.data[0];if(!o||o.length===0)return[t,r];let n=0,s=0,a=o.length-1;for(;a-s>1;){let p=Math.floor((s+a)/2),m=o[p];m!=null&&m<i?s=p:a=p}let l=o[s],u=o[a];l!=null&&u!=null?n=Math.abs(l-i)<Math.abs(u-i)?s:a:l!=null?n=s:u!=null&&(n=a);let g=n;for(let p=n;p>=0;p--){let m=!1;for(let b=1;b<e.data.length;b++){let v=e.data[b];if(v&&v[p]!=null){m=!0;break}}if(m){g=p;break}}let d=o[g];return d==null?[t,r]:[e.valToPos(d,"x"),r]},rr=(e,t)=>{let r=t.getPropertyValue("--ub-chart-font-color").trim(),i=t.getPropertyValue("--ub-chart-grid-color").trim(),o=e.axes?.[0],n=e.axes?.[1];return o&&(o.stroke=r,o.grid?o.grid.stroke=i:o.grid={stroke:i}),n&&(n.stroke=r,n.grid?n.grid.stroke=i:n.grid={stroke:i}),e},or=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}`).trim()||e.getPropertyValue("--ub-chart-threshold-default").trim(),ir=(e,t)=>e.getPropertyValue(`--ub-chart-threshold-${t}-fill`).trim()||e.getPropertyValue("--ub-chart-threshold-default-fill").trim(),nr=e=>{switch(e){case"bold":return 2;case"line":return 1;case"dashed":return 1;default:return 1}},sr=e=>e==="line"?void 0:[5,5],ar=(e,t)=>{if(t){let r=[];return t.forEach(i=>{let o={label:i.label,stroke:or(e,i.level),width:nr(),dash:sr(i.type),points:{show:!1,size:0},spanGaps:!0,show:!0,auto:!1};ie(i)||r.push(o),r.push(o)}),r}else return[]},lr=(e,t,r,i)=>{if(!i||!i.some(n=>de(n)))return t.bands;let o=i.map((n,s)=>ie(n)?null:{series:[e.length+s*2+1,e.length+s*2+2],fill:ir(r,n.level),dir:1}).filter(n=>n!==null);return[...t.bands,...o]},cr=(e,t,r,i,o,n,s)=>{let a=er(t,i);return[{},...e.map((l,u)=>({label:l.metric,stroke:dt(l,u,r,t,n),width:a,points:{show:!1},spanGaps:!0,paths:Jt(t),fill:i||o?Zt(l,u,r,t,n):void 0})),...ar(n,s)]},ur=e=>{if(typeof e=="string"){let t=String(e).toLowerCase().trim();if(t==="by")return"bytes";if(t.startsWith("{")&&t.endsWith("}"))return"short"}return e},ft=(e,t,r,i,o,n,s,a,l,u,g,d,h,p,m,b,v,f,x,C,y)=>{let T=window.getComputedStyle(e),R=T.fontFamily,k=e?.clientWidth??1050,S=e?.clientHeight??250,M=ur(i),A=(0,pt.getValueFormat)(M==="1"?null:M),z=q=>{let P=A(q);return P.text+(P.suffix?.trim()||"")},W={width:k,height:S,scales:{y:{range:ht(i,m,b)}},plugins:h?[]:[ut(z,s,t,u,g,o,x,C,y)],padding:d?[8,10,8,48]:[8,10,8,18],cursor:{y:!1,sync:{key:"_"},drag:{setScale:!0,x:!0,y:!1},move:tr,show:!f},series:cr(o,n,a,l,s,T,p),bands:lr(o,r,T,p),axes:[ot(R,u,d,v),gt(A,R,v)],legend:{show:!1}};return rr(W,T)};var bt=(e,t=4)=>{let r=e/t,i=Math.pow(10,Math.floor(Math.log10(r))),o=r/i,n;return o>5?n=10*i:o>2?n=5*i:o>1?n=2*i:n=i,Math.ceil(e/n)*n},L=(e,t)=>typeof e=="number"?e:t,ht=(e,t,r)=>(i,o,n)=>{if(o===0&&n===0)return[L(t,0),L(r,100)];let s=1,a=n*(1+s),l=o<0?o*(1+s):o*(1-s);if(e==="percent"||e==="percentunit"){let d=e==="percent"?100:1;return n>d?o<0?[L(t,l),L(r,a)]:[L(t,0),L(r,a)]:o<0?[L(t,l),L(r,d)]:[L(t,0),L(r,d)]}if(n<=.9999)return o<=0?[L(t,l),L(r,1)]:[L(t,0),L(r,1)];let u=bt(a),g=bt(Math.abs(l));return o<0?[L(r,-g),L(r,u)]:[L(t,0),L(r,u)]},pr=(e,t,r,i)=>{let o=e.axes[r];if(i>1)return o?._size||0;let n=(o?.ticks?.size||0)+(o?.gap||0),s=(t??[]).reduce((a,l)=>l.length>a.length?l:a,"");return s!=""&&(e.ctx.font=o?.font?.[0]??e.ctx.font,n+=e.ctx.measureText(s).width/devicePixelRatio),Math.ceil(n)};function gt(e,t,r){return{gap:0,font:J(t),labelFont:J(t),grid:{show:!0,width:.5},ticks:{width:.5},values:(i,o)=>o.map(n=>{let s=e(n);return s.text+(s.suffix?.trim()||"")}),size:pr,space:(i,o,n,s,a)=>{let l=i.height;return l<=100?30:l<=150?35:l<=200?45:l<=250?55:l<=300?60:70},show:!r}}function yt(e,t){let r=[],i=e[0],o=i.length,n=Array(o).fill(0),s=[i];if(e.forEach((a,l)=>{l!==0&&(t?s.push(a):s.push(a.map((u,g)=>n[g]=n[g]+(u||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 vt=require("react/jsx-runtime");function be(e){let{times:t,series:r,metadata:i,type:o,className:n,timeZone:s,options:a,tooltip:l,colors:u,tooltipComponent:g,unit:d,fill:h,thresholds:p,min:m,max:b,hideAxis:v,hideCursor:f,relativeTimeAxis:x,invertSort:C,disableSuggestedLabel:y}=e,{hide:T,visibilityLimit:R}=l||{},k=(0,ge.useRef)(null),S=O(),M=typeof x=="boolean"?x:S.relativeTimeAxis,A=u??S.colors,z=typeof h=="boolean"?h:S.fill||!1,W=typeof C=="boolean"?C:S.invertSort,q=typeof y=="boolean"?y:S.disableSuggestedLabel,P=typeof v=="boolean"?v:S.hideAxis,F=typeof f=="boolean"?f:S.hideCursor,ye=typeof R=="boolean"?R:S.tooltip?.visibilityLimit,B=typeof T=="boolean"?T:S.tooltip?.hide;return(0,ge.useEffect)(()=>{if(!r||r.length===0){console.warn("No series provided");return}let te=[t],Te=d;r.forEach(E=>{let ae=i[E.metric];d||(Te=mt(Te,ae)),te.push(E.values)});let Fe=o==="bar"||o==="area",re=yt(te,!Fe);p&&p.forEach(E=>{ie(E)?re.data.push(new Array(t.length).fill(E.value)):de(E)&&(re.data.push(new Array(t.length).fill(E.from)),re.data.push(new Array(t.length).fill(E.to)))});let j=k.current,ve=null;if(j){let E=ft(j,i,re,Te,r,o,Fe,A,z,s,g,M,B,p,m,b,P,F,ye,W,q);ve=new Tt.default({...E,...a},re.data,j);let ae=new ResizeObserver(()=>{ve?.setSize({width:j.clientWidth,height:j.clientHeight})});return ae.observe(j),()=>{ve?.destroy(),ae.disconnect()}}},[r,t,o,i,s,g,M,A,z,d,B,p,m,b,a,P,F,W,ye,q]),(0,vt.jsx)("div",{ref:k,className:"ub-chart-container"+(n?` ${n}`:"")})}var Q=require("react/jsx-runtime");function Ct({metrics:e,operator:t,attributes:r,groupBy:i,interval:o,type:n="line",className:s,appearance:a,tooltip:l,onResponse:u,...g}){let d=O(),h=o??d.interval,p=r??d.attributes,m=i??d.groupBy,b=t??d.operator,v=a?.components?.Tooltip??d.appearance.components.Tooltip,f=(0,ee.useMemo)(()=>({hide:l?.hide??d.tooltip?.hide,visibilityLimit:l?.visibilityLimit??d.tooltip?.visibilityLimit}),[l?.hide,d.tooltip?.hide,l?.visibilityLimit,d.tooltip?.visibilityLimit]),{queries:x,metadataLabels:C}=(0,ee.useMemo)(()=>{let P=Array.isArray(e)?e:[e],F={};return{queries:P.map(B=>{let te=ke(B)?B.name:B;return ke(B)&&(F[te]=B.label),{metrics:[te],operator:b,attributes:p,groupBy:m}}),metadataLabels:F}},[e,b,p,m]),y=me({queries:x,timeRange:d.timeRange,startTime:d.startTime,endTime:d.endTime,interval:h}),{isLoading:T,data:R,hasError:k}=y,{series:S,times:M,metadata:A}=R,z=S.every(P=>P.isEmpty),W=(0,ee.useMemo)(()=>Object.keys(C).length===0?A:Object.fromEntries(Object.entries(A).map(([P,F])=>[P,{...F,label:C[P]??F.suggestedLabel??P}])),[C,A]),q=`ub-chart-container${s?` ${s}`:""}`;if((0,ee.useEffect)(()=>{u&&u(y)},[y,u]),T){let P=a?.components?.Loading??d.appearance.components.Loading;return(0,Q.jsx)("div",{className:q,children:(0,Q.jsx)(P,{})})}if(k){let P=a?.components?.Error??d.appearance.components.Error;return(0,Q.jsx)("div",{className:q,children:(0,Q.jsx)(P,{})})}if(z){let P=a?.components?.Empty??d.appearance.components.Empty;return(0,Q.jsx)("div",{className:q,children:(0,Q.jsx)(P,{})})}return(0,Q.jsx)(be,{times:M,series:S,metadata:W,type:n,className:s,tooltip:f,tooltipComponent:v,...g})}0&&(module.exports={Chart,Empty,Error,Loading,Scope,Timeseries,UnblindProvider,useLogs,useMetrics,useRefresh,useScope,useTimeseries,useUsage});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|