ydb-embedded-ui 11.2.0 → 11.4.0
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/components/DoughnutMetrics/DoughnutMetrics.d.ts +7 -3
- package/dist/components/DoughnutMetrics/DoughnutMetrics.js +22 -16
- package/dist/components/DoughnutMetrics/DoughnutMetrics.js.map +1 -1
- package/dist/components/DoughnutMetrics/DoughnutMetrics.scss +41 -33
- package/dist/components/DoughnutMetrics/SvgCircle.d.ts +14 -0
- package/dist/components/DoughnutMetrics/SvgCircle.js +5 -0
- package/dist/components/DoughnutMetrics/SvgCircle.js.map +1 -0
- package/dist/components/DoughnutMetrics/utils.d.ts +36 -0
- package/dist/components/DoughnutMetrics/utils.js +40 -0
- package/dist/components/DoughnutMetrics/utils.js.map +1 -0
- package/dist/components/MetricChart/MetricChart.d.ts +4 -9
- package/dist/components/MetricChart/MetricChart.js +10 -6
- package/dist/components/MetricChart/MetricChart.js.map +1 -1
- package/dist/components/MetricChart/MetricChart.scss +5 -7
- package/dist/components/QueriesActivityBar/QueriesActivityBar.js +5 -2
- package/dist/components/QueriesActivityBar/QueriesActivityBar.js.map +1 -1
- package/dist/components/QueriesActivityBar/QueriesActivityBar.scss +18 -21
- package/dist/components/QueriesActivityBar/QueriesActivityCharts.js +1 -13
- package/dist/components/QueriesActivityBar/QueriesActivityCharts.js.map +1 -1
- package/dist/components/SpeedMultiMeter/SpeedMultiMeter.scss +3 -0
- package/dist/components/VDiskInfo/VDiskInfo.js +43 -2
- package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
- package/dist/components/VDiskInfo/i18n/en.json +3 -0
- package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/VDiskPopup/VDiskPopup.js +21 -2
- package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
- package/dist/containers/App/App.d.ts +3 -10
- package/dist/containers/App/App.js +11 -8
- package/dist/containers/App/App.js.map +1 -1
- package/dist/containers/App/App.scss +1 -1
- package/dist/containers/App/AppTitleContext.d.ts +11 -0
- package/dist/containers/App/AppTitleContext.js +14 -0
- package/dist/containers/App/AppTitleContext.js.map +1 -0
- package/dist/containers/App/Providers.d.ts +2 -1
- package/dist/containers/App/Providers.js +3 -2
- package/dist/containers/App/Providers.js.map +1 -1
- package/dist/containers/AppWithClusters/AppWithClusters.d.ts +2 -1
- package/dist/containers/AppWithClusters/AppWithClusters.js +2 -2
- package/dist/containers/AppWithClusters/AppWithClusters.js.map +1 -1
- package/dist/containers/Cluster/Cluster.js +3 -1
- package/dist/containers/Cluster/Cluster.js.map +1 -1
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsCores.js +1 -11
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsCores.js.map +1 -1
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsMemory.js +1 -5
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsMemory.js.map +1 -1
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsStorage.js +1 -5
- package/dist/containers/Cluster/ClusterOverview/components/ClusterMetricsStorage.js.map +1 -1
- package/dist/containers/Node/Node.js +3 -1
- package/dist/containers/Node/Node.js.map +1 -1
- package/dist/containers/PDiskPage/PDiskPage.js +3 -1
- package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.js +3 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.js +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.scss +1 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.d.ts +0 -8
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js +26 -93
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.scss +219 -5
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.d.ts +16 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.js +16 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.js.map +1 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.scss +29 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js +3 -11
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.scss +0 -8
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +2 -6
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss +13 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json +11 -3
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Tenant.js +3 -1
- package/dist/containers/Tenant/Tenant.js.map +1 -1
- package/dist/containers/VDiskPage/VDiskPage.js +3 -1
- package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
- package/dist/services/api/index.d.ts +2 -1
- package/dist/services/api/index.js +18 -1
- package/dist/services/api/index.js.map +1 -1
- package/dist/store/reducers/tenant/tenant.d.ts +1 -0
- package/dist/store/reducers/tenant/tenant.js +7 -2
- package/dist/store/reducers/tenant/tenant.js.map +1 -1
- package/dist/store/reducers/tenant/types.d.ts +1 -1
- package/dist/store/state-url-mapping.d.ts +1 -0
- package/dist/store/state-url-mapping.js +2 -0
- package/dist/store/state-url-mapping.js.map +1 -1
- package/dist/styles/versions.scss +110 -86
- package/dist/utils/disks/prepareDisks.js +20 -1
- package/dist/utils/disks/prepareDisks.js.map +1 -1
- package/dist/utils/metrics/formatMetricLegend.d.ts +6 -0
- package/dist/utils/metrics/formatMetricLegend.js +17 -0
- package/dist/utils/metrics/formatMetricLegend.js.map +1 -0
- package/dist/utils/metrics/i18n/en.json +4 -0
- package/dist/utils/metrics/i18n/index.d.ts +2 -0
- package/dist/utils/metrics/i18n/index.js +5 -0
- package/dist/utils/metrics/i18n/index.js.map +1 -0
- package/dist/utils/metrics.d.ts +42 -0
- package/dist/utils/metrics.js +58 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/prepareErrorMessage.js +9 -2
- package/dist/utils/prepareErrorMessage.js.map +1 -1
- package/dist/utils/versions/getVersionsColors.d.ts +1 -1
- package/dist/utils/versions/getVersionsColors.js +39 -27
- package/dist/utils/versions/getVersionsColors.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/DiagnosticCard/DiagnosticCard.d.ts +0 -9
- package/dist/components/DiagnosticCard/DiagnosticCard.js +0 -8
- package/dist/components/DiagnosticCard/DiagnosticCard.js.map +0 -1
- package/dist/components/DiagnosticCard/DiagnosticCard.scss +0 -35
- package/dist/components/TimeFrameSelector/TimeFrameSelector.d.ts +0 -9
- package/dist/components/TimeFrameSelector/TimeFrameSelector.js +0 -12
- package/dist/components/TimeFrameSelector/TimeFrameSelector.js.map +0 -1
- package/dist/components/TimeFrameSelector/TimeFrameSelector.scss +0 -4
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.d.ts +0 -5
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.js +0 -7
- package/dist/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/DefaultOverviewContent.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.d.ts +0 -16
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js +0 -37
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.scss +0 -48
@@ -1,22 +1,26 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import type { TextProps } from '@gravity-ui/uikit';
|
2
|
+
import type { HelpMarkProps, TextProps } from '@gravity-ui/uikit';
|
3
3
|
import type { ProgressStatus } from '../../utils/progress';
|
4
|
+
import { SIZE_CONFIG } from './utils';
|
4
5
|
import './DoughnutMetrics.scss';
|
6
|
+
type Size = keyof typeof SIZE_CONFIG;
|
5
7
|
interface LegendProps {
|
6
8
|
children?: React.ReactNode;
|
7
9
|
variant?: TextProps['variant'];
|
8
10
|
color?: TextProps['color'];
|
9
11
|
note?: React.ReactNode;
|
12
|
+
noteIconSize?: HelpMarkProps['iconSize'];
|
10
13
|
}
|
11
14
|
interface DoughnutProps {
|
12
15
|
status: ProgressStatus;
|
13
16
|
fillWidth: number;
|
14
17
|
children?: React.ReactNode;
|
15
18
|
className?: string;
|
19
|
+
size?: Size;
|
16
20
|
}
|
17
|
-
export declare function DoughnutMetrics({ status, fillWidth, children, className }: DoughnutProps): import("react/jsx-runtime").JSX.Element;
|
21
|
+
export declare function DoughnutMetrics({ status, fillWidth, children, className, size, }: DoughnutProps): import("react/jsx-runtime").JSX.Element;
|
18
22
|
export declare namespace DoughnutMetrics {
|
19
|
-
var Legend: ({ children, variant, color, note }: LegendProps) => import("react/jsx-runtime").JSX.Element;
|
23
|
+
var Legend: ({ children, variant, color, note, noteIconSize, }: LegendProps) => import("react/jsx-runtime").JSX.Element;
|
20
24
|
var Value: ({ children, variant }: LegendProps) => import("react/jsx-runtime").JSX.Element;
|
21
25
|
}
|
22
26
|
export {};
|
@@ -1,26 +1,32 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
2
3
|
import { Flex, HelpMark, Text } from '@gravity-ui/uikit';
|
3
4
|
import { cn } from '../../utils/cn';
|
5
|
+
import { SvgCircle } from './SvgCircle';
|
6
|
+
import { ROTATION_OFFSET, SIZE_CONFIG, calculateCircumference, calculateOverlapDasharray, calculateStrokeDasharray, } from './utils';
|
4
7
|
import './DoughnutMetrics.scss';
|
5
8
|
const b = cn('ydb-doughnut-metrics');
|
6
|
-
|
7
|
-
|
9
|
+
const SizeContext = React.createContext('medium');
|
10
|
+
function Legend({ children, variant = 'subheader-3', color = 'primary', note, noteIconSize = 'm', }) {
|
11
|
+
return (_jsxs(Flex, { gap: 1, alignItems: "center", children: [_jsx(Text, { variant: variant, color: color, className: b('legend'), as: "div", children: children }), note && (_jsx(HelpMark, { iconSize: noteIconSize, className: b('legend-note'), popoverProps: { placement: 'right' }, children: note }))] }));
|
8
12
|
}
|
9
|
-
|
10
|
-
|
13
|
+
// Value component
|
14
|
+
function Value({ children, variant }) {
|
15
|
+
const size = React.useContext(SizeContext);
|
16
|
+
const finalVariant = variant || SIZE_CONFIG[size].textVariant;
|
17
|
+
return (_jsx(Text, { variant: finalVariant, className: b('value'), children: children }));
|
11
18
|
}
|
12
|
-
export function DoughnutMetrics({ status, fillWidth, children, className }) {
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}, className: b('doughnut', { status }), children: _jsx("div", { className: b('text-wrapper'), children: children }) }) }));
|
19
|
+
export function DoughnutMetrics({ status, fillWidth, children, className, size = 'medium', }) {
|
20
|
+
const config = SIZE_CONFIG[size];
|
21
|
+
const radius = (config.width - config.strokeWidth) / 2;
|
22
|
+
const circumference = calculateCircumference(radius);
|
23
|
+
const strokeDashoffset = circumference * ROTATION_OFFSET;
|
24
|
+
const centerX = config.width / 2;
|
25
|
+
const centerY = config.width / 2;
|
26
|
+
const strokeDasharray = calculateStrokeDasharray(fillWidth, circumference);
|
27
|
+
const overlapDasharray = calculateOverlapDasharray(fillWidth, circumference);
|
28
|
+
const needsOverlapCircle = fillWidth > 100;
|
29
|
+
return (_jsx(SizeContext.Provider, { value: size, children: _jsxs("div", { className: b({ status }, className), children: [_jsxs("svg", { width: config.width, height: config.width, className: b('doughnut'), children: [_jsx(SvgCircle, { cx: centerX, cy: centerY, r: radius, stroke: "var(--doughnut-backdrop-color)", strokeWidth: config.strokeWidth }), _jsx(SvgCircle, { cx: centerX, cy: centerY, r: radius, stroke: "var(--doughnut-color)", strokeWidth: config.strokeWidth, strokeDasharray: strokeDasharray, strokeDashoffset: strokeDashoffset, className: b('progress-circle') }), needsOverlapCircle && (_jsx(SvgCircle, { cx: centerX, cy: centerY, r: radius, stroke: "var(--doughnut-overlap-color)", strokeWidth: config.strokeWidth, strokeDasharray: overlapDasharray, strokeDashoffset: strokeDashoffset, className: b('overlap-circle') }))] }), _jsx("div", { className: b('text-wrapper'), children: children })] }) }));
|
24
30
|
}
|
25
31
|
DoughnutMetrics.Legend = Legend;
|
26
32
|
DoughnutMetrics.Value = Value;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DoughnutMetrics.js","sourceRoot":"","sources":["../../../src/components/DoughnutMetrics/DoughnutMetrics.tsx"],"names":[],"mappings":";
|
1
|
+
{"version":3,"file":"DoughnutMetrics.js","sourceRoot":"","sources":["../../../src/components/DoughnutMetrics/DoughnutMetrics.tsx"],"names":[],"mappings":"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"}
|
@@ -1,64 +1,72 @@
|
|
1
1
|
.ydb-doughnut-metrics {
|
2
|
-
--doughnut-
|
3
|
-
--doughnut-color: var(--
|
4
|
-
--doughnut-backdrop-color: var(--g-color-base-positive-light);
|
2
|
+
--doughnut-color: var(--g-color-base-positive-heavy);
|
3
|
+
--doughnut-backdrop-color: var(--g-color-base-generic);
|
5
4
|
--doughnut-overlap-color: var(--g-color-base-positive-heavy-hover);
|
6
|
-
|
7
|
-
position: relative;
|
5
|
+
--doughnut-text-color: var(--g-color-text-positive-heavy);
|
8
6
|
|
9
|
-
|
10
|
-
aspect-ratio: 1;
|
7
|
+
position: relative;
|
11
8
|
|
12
|
-
|
9
|
+
&__doughnut {
|
10
|
+
position: relative;
|
13
11
|
|
14
|
-
|
15
|
-
&::before {
|
16
|
-
display: block;
|
12
|
+
display: block;
|
17
13
|
|
18
|
-
|
14
|
+
// Enable smooth rendering for SVG
|
15
|
+
shape-rendering: geometricPrecision;
|
16
|
+
-webkit-font-smoothing: antialiased;
|
17
|
+
-moz-osx-font-smoothing: grayscale;
|
19
18
|
|
20
|
-
|
19
|
+
// Ensure SVG renders smoothly
|
20
|
+
image-rendering: smooth;
|
21
|
+
will-change: transform;
|
21
22
|
|
22
|
-
|
23
|
-
|
23
|
+
// Preserve rotation origin
|
24
|
+
transform-origin: center;
|
25
|
+
}
|
24
26
|
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
// Progress circle animation
|
28
|
+
&__progress-circle,
|
29
|
+
&__overlap-circle {
|
30
|
+
transition: stroke-dasharray 0.3s ease;
|
31
|
+
transform-origin: center;
|
28
32
|
}
|
29
|
-
|
30
|
-
|
31
|
-
|
33
|
+
|
34
|
+
// Status modifiers
|
35
|
+
&_status_warning {
|
36
|
+
--doughnut-color: var(--g-color-base-warning-heavy);
|
32
37
|
--doughnut-overlap-color: var(--g-color-base-warning-heavy-hover);
|
38
|
+
--doughnut-text-color: var(--g-color-text-warning);
|
33
39
|
}
|
34
|
-
|
35
|
-
|
36
|
-
--doughnut-
|
40
|
+
|
41
|
+
&_status_danger {
|
42
|
+
--doughnut-color: var(--g-color-base-danger-heavy);
|
37
43
|
--doughnut-overlap-color: var(--g-color-base-danger-heavy-hover);
|
44
|
+
--doughnut-text-color: var(--g-color-base-danger-heavy);
|
38
45
|
}
|
39
|
-
&__text-wrapper {
|
40
|
-
--wrapper-indent: calc(var(--doughnut-border) + 5px);
|
41
46
|
|
47
|
+
&__text-wrapper {
|
42
48
|
position: absolute;
|
43
|
-
|
44
|
-
|
49
|
+
z-index: 1;
|
50
|
+
top: 50%;
|
51
|
+
left: 50%;
|
45
52
|
|
46
53
|
display: flex;
|
47
54
|
flex-direction: column;
|
48
55
|
justify-content: center;
|
49
56
|
align-items: center;
|
50
57
|
|
51
|
-
width:
|
58
|
+
width: 100%;
|
59
|
+
height: 100%;
|
52
60
|
|
53
61
|
text-align: center;
|
54
62
|
|
55
|
-
transform:
|
56
|
-
aspect-ratio: 1;
|
63
|
+
transform: translate(-50%, -50%);
|
57
64
|
}
|
65
|
+
|
58
66
|
&__value {
|
59
|
-
|
60
|
-
bottom: 20px;
|
67
|
+
color: var(--doughnut-text-color);
|
61
68
|
}
|
69
|
+
|
62
70
|
&__legend-note {
|
63
71
|
display: flex;
|
64
72
|
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
interface SvgCircleProps {
|
2
|
+
cx: number;
|
3
|
+
cy: number;
|
4
|
+
r: number;
|
5
|
+
stroke: string;
|
6
|
+
strokeWidth: number;
|
7
|
+
strokeDasharray?: string;
|
8
|
+
strokeDashoffset?: number;
|
9
|
+
strokeLinecap?: 'butt' | 'round' | 'square';
|
10
|
+
fill?: string;
|
11
|
+
className?: string;
|
12
|
+
}
|
13
|
+
export declare function SvgCircle({ cx, cy, r, stroke, strokeWidth, strokeDasharray, strokeDashoffset, strokeLinecap, fill, className, }: SvgCircleProps): import("react/jsx-runtime").JSX.Element;
|
14
|
+
export {};
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
export function SvgCircle({ cx, cy, r, stroke, strokeWidth, strokeDasharray, strokeDashoffset, strokeLinecap = 'butt', fill = 'none', className, }) {
|
3
|
+
return (_jsx("circle", { cx: cx, cy: cy, r: r, fill: fill, stroke: stroke, strokeWidth: strokeWidth, strokeDasharray: strokeDasharray, strokeDashoffset: strokeDashoffset, strokeLinecap: strokeLinecap, className: className }));
|
4
|
+
}
|
5
|
+
//# sourceMappingURL=SvgCircle.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SvgCircle.js","sourceRoot":"","sources":["../../../src/components/DoughnutMetrics/SvgCircle.tsx"],"names":[],"mappings":";AAaA,MAAM,UAAU,SAAS,CAAC,EACtB,EAAE,EACF,EAAE,EACF,CAAC,EACD,MAAM,EACN,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,aAAa,GAAG,MAAM,EACtB,IAAI,GAAG,MAAM,EACb,SAAS,GACI;IACb,OAAO,CACH,iBACI,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,EAAE,EACN,CAAC,EAAE,CAAC,EACJ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,GACtB,CACL,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
export declare const SIZE_CONFIG: {
|
2
|
+
readonly small: {
|
3
|
+
readonly width: 65;
|
4
|
+
readonly strokeWidth: 12;
|
5
|
+
readonly textVariant: "subheader-1";
|
6
|
+
};
|
7
|
+
readonly medium: {
|
8
|
+
readonly width: 100;
|
9
|
+
readonly strokeWidth: 16;
|
10
|
+
readonly textVariant: "subheader-2";
|
11
|
+
};
|
12
|
+
readonly large: {
|
13
|
+
readonly width: 130;
|
14
|
+
readonly strokeWidth: 20;
|
15
|
+
readonly textVariant: "subheader-3";
|
16
|
+
};
|
17
|
+
};
|
18
|
+
export declare const ROTATION_OFFSET = 0.75;
|
19
|
+
/**
|
20
|
+
* Calculate the circumference of a circle given its radius
|
21
|
+
*/
|
22
|
+
export declare function calculateCircumference(radius: number): number;
|
23
|
+
/**
|
24
|
+
* Calculate stroke-dasharray for SVG circle progress fill
|
25
|
+
* @param fillWidth - Progress percentage (0-100+)
|
26
|
+
* @param circumference - Circle circumference
|
27
|
+
* @returns Stroke-dasharray string for filled portion
|
28
|
+
*/
|
29
|
+
export declare function calculateStrokeDasharray(fillWidth: number, circumference: number): string;
|
30
|
+
/**
|
31
|
+
* Calculate stroke-dasharray for overlap portion when progress exceeds 100%
|
32
|
+
* @param fillWidth - Progress percentage (0-100+)
|
33
|
+
* @param circumference - Circle circumference
|
34
|
+
* @returns Stroke-dasharray string for overlap portion
|
35
|
+
*/
|
36
|
+
export declare function calculateOverlapDasharray(fillWidth: number, circumference: number): string;
|
@@ -0,0 +1,40 @@
|
|
1
|
+
// Constants
|
2
|
+
export const SIZE_CONFIG = {
|
3
|
+
small: { width: 65, strokeWidth: 12, textVariant: 'subheader-1' },
|
4
|
+
medium: { width: 100, strokeWidth: 16, textVariant: 'subheader-2' },
|
5
|
+
large: { width: 130, strokeWidth: 20, textVariant: 'subheader-3' },
|
6
|
+
};
|
7
|
+
export const ROTATION_OFFSET = 0.75; // Start from bottom (270 degrees)
|
8
|
+
/**
|
9
|
+
* Calculate the circumference of a circle given its radius
|
10
|
+
*/
|
11
|
+
export function calculateCircumference(radius) {
|
12
|
+
return 2 * Math.PI * radius;
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* Calculate stroke-dasharray for SVG circle progress fill
|
16
|
+
* @param fillWidth - Progress percentage (0-100+)
|
17
|
+
* @param circumference - Circle circumference
|
18
|
+
* @returns Stroke-dasharray string for filled portion
|
19
|
+
*/
|
20
|
+
export function calculateStrokeDasharray(fillWidth, circumference) {
|
21
|
+
if (fillWidth <= 0) {
|
22
|
+
return '0 0';
|
23
|
+
}
|
24
|
+
const filledLength = (Math.min(fillWidth, 100) / 100) * circumference;
|
25
|
+
return `${filledLength} ${circumference - filledLength}`;
|
26
|
+
}
|
27
|
+
/**
|
28
|
+
* Calculate stroke-dasharray for overlap portion when progress exceeds 100%
|
29
|
+
* @param fillWidth - Progress percentage (0-100+)
|
30
|
+
* @param circumference - Circle circumference
|
31
|
+
* @returns Stroke-dasharray string for overlap portion
|
32
|
+
*/
|
33
|
+
export function calculateOverlapDasharray(fillWidth, circumference) {
|
34
|
+
if (fillWidth <= 100) {
|
35
|
+
return '0 0';
|
36
|
+
}
|
37
|
+
const overlapLength = ((fillWidth - 100) / 100) * circumference;
|
38
|
+
return `${overlapLength} ${circumference - overlapLength}`;
|
39
|
+
}
|
40
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/DoughnutMetrics/utils.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,MAAM,CAAC,MAAM,WAAW,GAAG;IACvB,KAAK,EAAE,EAAC,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAC;IAC/D,MAAM,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAC;IACjE,KAAK,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAC;CAC1D,CAAC;AAEX,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,kCAAkC;AAEvE;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACjD,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAiB,EAAE,aAAqB;IAC7E,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC;IACtE,OAAO,GAAG,YAAY,IAAI,aAAa,GAAG,YAAY,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAiB,EAAE,aAAqB;IAC9E,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC;IAChE,OAAO,GAAG,aAAa,IAAI,aAAa,GAAG,aAAa,EAAE,CAAC;AAC/D,CAAC"}
|
@@ -1,11 +1,10 @@
|
|
1
|
-
import React from 'react';
|
2
1
|
import type { TimeFrame } from '../../utils/timeframes';
|
3
2
|
import type { ChartOptions, MetricDescription, OnChartDataStatusChange } from './types';
|
4
3
|
import './MetricChart.scss';
|
5
4
|
interface DiagnosticsChartProps {
|
6
5
|
database: string;
|
7
6
|
metrics: MetricDescription[];
|
8
|
-
|
7
|
+
defaultTimeFrame?: TimeFrame;
|
9
8
|
autorefresh?: number;
|
10
9
|
height?: number;
|
11
10
|
width?: number;
|
@@ -17,12 +16,8 @@ interface DiagnosticsChartProps {
|
|
17
16
|
* Pass isChartVisible prop to ensure proper chart render
|
18
17
|
*/
|
19
18
|
isChartVisible?: boolean;
|
20
|
-
/**
|
21
|
-
|
22
|
-
/** Make chart take full width of container */
|
23
|
-
fullWidth?: boolean;
|
24
|
-
/** Render custom toolbar content to the right of chart title */
|
25
|
-
renderChartToolbar?: () => React.ReactNode;
|
19
|
+
/** Chart title displayed in the toolbar */
|
20
|
+
title: string;
|
26
21
|
}
|
27
|
-
export declare const MetricChart: ({ database, metrics,
|
22
|
+
export declare const MetricChart: ({ database, metrics, defaultTimeFrame, autorefresh, width, height, chartOptions, onChartDataStatusChange, isChartVisible, title, }: DiagnosticsChartProps) => import("react/jsx-runtime").JSX.Element;
|
28
23
|
export {};
|
@@ -2,14 +2,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
3
3
|
import ChartKit, { settings } from '@gravity-ui/chartkit';
|
4
4
|
import { YagrPlugin } from '@gravity-ui/chartkit/yagr';
|
5
|
+
import { Flex } from '@gravity-ui/uikit';
|
5
6
|
import { cn } from '../../utils/cn';
|
6
7
|
import { ResponseError } from '../Errors/ResponseError';
|
7
8
|
import { Loader } from '../Loader';
|
9
|
+
import { TimeFrameDropdown } from '../TimeFrameDropdown/TimeFrameDropdown';
|
8
10
|
import { colorToRGBA, colors } from './colors';
|
9
11
|
import { getDefaultDataFormatter } from './getDefaultDataFormatter';
|
10
12
|
import { chartApi } from './reducer';
|
11
13
|
import './MetricChart.scss';
|
12
14
|
const b = cn('ydb-metric-chart');
|
15
|
+
// Constants
|
16
|
+
const DEFAULT_EFFECTIVE_WIDTH = 600; // Used for maxDataPoints calculation when using fullWidth
|
13
17
|
settings.set({ plugins: [YagrPlugin] });
|
14
18
|
const prepareWidgetData = (data, options = {}) => {
|
15
19
|
const { dataType, scaleRange, showLegend } = options;
|
@@ -75,10 +79,10 @@ const prepareWidgetData = (data, options = {}) => {
|
|
75
79
|
};
|
76
80
|
};
|
77
81
|
const emptyChartData = { timeline: [], metrics: [] };
|
78
|
-
export const MetricChart = ({ database, metrics,
|
82
|
+
export const MetricChart = ({ database, metrics, defaultTimeFrame = '1h', autorefresh, width = 400, height = width / 1.5, chartOptions, onChartDataStatusChange, isChartVisible, title, }) => {
|
83
|
+
const [timeFrame, setTimeFrame] = React.useState(defaultTimeFrame);
|
79
84
|
// Use a reasonable default for maxDataPoints when fullWidth is true
|
80
|
-
const
|
81
|
-
const maxDataPoints = effectiveWidth / 2;
|
85
|
+
const maxDataPoints = DEFAULT_EFFECTIVE_WIDTH / 2;
|
82
86
|
const { currentData, error, isFetching, status } = chartApi.useGetChartDataQuery(
|
83
87
|
// maxDataPoints param is calculated based on width
|
84
88
|
// should be width > maxDataPoints to prevent points that cannot be selected
|
@@ -94,6 +98,7 @@ export const MetricChart = ({ database, metrics, timeFrame = '1h', autorefresh,
|
|
94
98
|
return onChartDataStatusChange === null || onChartDataStatusChange === void 0 ? void 0 : onChartDataStatusChange(status === 'fulfilled' ? 'success' : 'loading');
|
95
99
|
}, [status, onChartDataStatusChange]);
|
96
100
|
const convertedData = prepareWidgetData(currentData || emptyChartData, chartOptions);
|
101
|
+
const renderToolbar = () => (_jsxs(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: [_jsx("div", { children: title }), _jsx(TimeFrameDropdown, { value: timeFrame, onChange: setTimeFrame })] }));
|
97
102
|
const renderContent = () => {
|
98
103
|
if (loading) {
|
99
104
|
return _jsx(Loader, {});
|
@@ -103,9 +108,8 @@ export const MetricChart = ({ database, metrics, timeFrame = '1h', autorefresh,
|
|
103
108
|
}
|
104
109
|
return (_jsxs("div", { className: b('chart'), children: [_jsx(ChartKit, { type: "yagr", data: convertedData }), error ? _jsx(ResponseError, { className: b('error'), error: error }) : null] }));
|
105
110
|
};
|
106
|
-
return (_jsxs("div", { className: b(
|
111
|
+
return (_jsxs("div", { className: b(), style: {
|
107
112
|
height,
|
108
|
-
|
109
|
-
}, children: [renderChartToolbar === null || renderChartToolbar === void 0 ? void 0 : renderChartToolbar(), renderContent()] }));
|
113
|
+
}, children: [renderToolbar(), renderContent()] }));
|
110
114
|
};
|
111
115
|
//# sourceMappingURL=MetricChart.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MetricChart.js","sourceRoot":"","sources":["../../../src/components/MetricChart/MetricChart.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,QAAQ,EAAE,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAC;
|
1
|
+
{"version":3,"file":"MetricChart.js","sourceRoot":"","sources":["../../../src/components/MetricChart/MetricChart.tsx"],"names":[],"mappings":"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"}
|
@@ -2,15 +2,13 @@
|
|
2
2
|
display: flex;
|
3
3
|
flex-direction: column;
|
4
4
|
|
5
|
-
|
5
|
+
width: 100%;
|
6
|
+
padding: 0;
|
6
7
|
|
7
|
-
border:
|
8
|
-
border-radius: 8px;
|
8
|
+
border: none;
|
9
9
|
|
10
|
-
&
|
11
|
-
|
12
|
-
|
13
|
-
border: none;
|
10
|
+
&__toolbar {
|
11
|
+
margin-bottom: 10px;
|
14
12
|
}
|
15
13
|
|
16
14
|
&__chart {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
3
|
import { CirclePlay, Clock, Display, Person, Rocket } from '@gravity-ui/icons';
|
4
|
-
import { ArrowToggle, Button,
|
4
|
+
import { ArrowToggle, Button, Card, Flex, Icon, Label, Text } from '@gravity-ui/uikit';
|
5
5
|
import { useHistory, useLocation } from 'react-router-dom';
|
6
6
|
import { TenantTabsGroups, getTenantPath } from '../../containers/Tenant/TenantPages';
|
7
7
|
import { parseQuery } from '../../routes';
|
@@ -92,6 +92,9 @@ export function QueriesActivityBar({ tenantName }) {
|
|
92
92
|
});
|
93
93
|
history.push(path);
|
94
94
|
};
|
95
|
-
|
95
|
+
const handleToggleExpanded = () => {
|
96
|
+
setExpanded(!expanded);
|
97
|
+
};
|
98
|
+
return (_jsx("div", { className: b({ expanded }), style: { display: isActivityBarHidden ? 'none' : undefined }, children: _jsxs(Card, { className: b('card'), type: "container", view: expanded ? 'outlined' : 'raised', children: [_jsxs("div", { className: b('header'), onClick: handleToggleExpanded, children: [_jsxs(Flex, { justifyContent: "space-between", className: b('content-wrapper'), children: [_jsxs(Flex, { direction: "column", className: b('title-section'), children: [_jsx(Text, { variant: "subheader-2", className: b('title'), children: i18n('title_queries-activity') }), _jsx(Text, { color: "secondary", variant: "caption-2", className: b('subtitle'), children: i18n('context_monitor-changes-realtime') })] }), _jsxs("div", { className: b('metrics'), children: [_jsx(Label, { theme: runningQueriesCount > 0 ? 'success' : 'unknown', size: "s", icon: _jsx(Icon, { data: CirclePlay, size: 14 }), children: runningQueriesCount }), _jsx(Label, { theme: "clear", size: "s", icon: _jsx(Icon, { data: Rocket, size: 14 }), value: formatTrendValue(qps.trend.value), children: i18n('value_per-sec', { count: qps.value }) }), _jsx(Label, { theme: "clear", size: "s", icon: _jsx(Icon, { data: Clock, size: 14 }), value: formatTrendValue(latency.trend.value), children: i18n('value_ms', { time: latency.value }) })] })] }), _jsx(ArrowToggle, { direction: expanded ? 'top' : 'bottom' })] }), expanded && (_jsx("div", { className: b('content'), children: _jsxs("div", { className: b('stats'), children: [_jsx(Label, { theme: "unknown", icon: _jsx(Icon, { data: CirclePlay }), size: "s", value: String(runningQueriesCount), children: i18n('field_running-queries') }), _jsx(Label, { theme: "unknown", icon: _jsx(Icon, { data: Display }), size: "s", value: String(uniqueApplications), children: i18n('field_applications') }), _jsx(Label, { theme: "unknown", icon: _jsx(Icon, { data: Person }), size: "s", value: String(uniqueUsers), children: i18n('field_users') }), _jsx(Button, { view: "outlined", size: "s", onClick: handleOpenRunningQueries, className: b('open-queries-button'), children: i18n('action_open-running-queries') })] }) })), _jsx(QueriesActivityCharts, { tenantName: tenantName, expanded: expanded, onChartDataStatusChange: handleChartDataStatusChange })] }) }));
|
96
99
|
}
|
97
100
|
//# sourceMappingURL=QueriesActivityBar.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QueriesActivityBar.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityBar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAC,WAAW,EAAE,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"QueriesActivityBar.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityBar.tsx"],"names":[],"mappings":"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"}
|
@@ -3,22 +3,15 @@
|
|
3
3
|
.queries-activity-bar {
|
4
4
|
$b: &;
|
5
5
|
|
6
|
-
|
6
|
+
border-radius: var(--g-border-radius-s);
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
&__card {
|
9
|
+
width: 100%;
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
// Override Card's default padding for custom content layout
|
12
|
+
padding: 0;
|
13
13
|
|
14
|
-
|
15
|
-
border: 1px solid var(--g-color-base-generic);
|
16
|
-
border-radius: var(--g-border-radius-m);
|
17
|
-
background-color: transparent;
|
18
|
-
}
|
19
|
-
|
20
|
-
&__disclosure {
|
21
|
-
width: 100%;
|
14
|
+
border-radius: var(--g-border-radius-s);
|
22
15
|
}
|
23
16
|
|
24
17
|
&__header {
|
@@ -31,15 +24,21 @@
|
|
31
24
|
|
32
25
|
cursor: pointer;
|
33
26
|
|
34
|
-
border
|
27
|
+
border: 1px solid transparent;
|
28
|
+
border-radius: var(--g-border-radius-s);
|
35
29
|
|
36
30
|
transition: background-color 0.15s ease;
|
37
31
|
|
38
32
|
&:hover {
|
39
|
-
background-color: var(--g-color-base-
|
33
|
+
background-color: var(--g-color-base-float-hover);
|
34
|
+
}
|
35
|
+
|
36
|
+
#{$b}_expanded & {
|
37
|
+
border: none;
|
38
|
+
border-bottom-right-radius: 0;
|
39
|
+
border-bottom-left-radius: 0;
|
40
40
|
}
|
41
41
|
|
42
|
-
// When expanded, only round top corners
|
43
42
|
#{$b}_expanded &:hover {
|
44
43
|
background-color: transparent;
|
45
44
|
}
|
@@ -62,6 +61,9 @@
|
|
62
61
|
display: flex;
|
63
62
|
flex-direction: column;
|
64
63
|
gap: var(--g-spacing-4);
|
64
|
+
|
65
|
+
padding-top: var(--g-spacing-3);
|
66
|
+
padding-bottom: var(--g-spacing-3);
|
65
67
|
}
|
66
68
|
|
67
69
|
&__stats {
|
@@ -82,7 +84,6 @@
|
|
82
84
|
gap: var(--g-spacing-4);
|
83
85
|
|
84
86
|
padding: 0 var(--g-spacing-4);
|
85
|
-
padding-top: var(--g-spacing-4);
|
86
87
|
|
87
88
|
@media (max-width: 1200px) {
|
88
89
|
flex-direction: column;
|
@@ -96,10 +97,6 @@
|
|
96
97
|
gap: var(--g-spacing-3);
|
97
98
|
}
|
98
99
|
|
99
|
-
&__toolbar {
|
100
|
-
margin-bottom: 10px;
|
101
|
-
}
|
102
|
-
|
103
100
|
// Focus states for accessibility
|
104
101
|
&__header:focus-visible,
|
105
102
|
&__open-queries-button:focus-visible {
|