ydb-embedded-ui 11.0.0 → 11.1.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/MetricChart/MetricChart.d.ts +8 -2
- package/dist/components/MetricChart/MetricChart.js +8 -5
- package/dist/components/MetricChart/MetricChart.js.map +1 -1
- package/dist/components/MetricChart/MetricChart.scss +5 -3
- package/dist/components/QueriesActivityBar/QueriesActivityBar.d.ts +6 -0
- package/dist/components/QueriesActivityBar/QueriesActivityBar.js +80 -0
- package/dist/components/QueriesActivityBar/QueriesActivityBar.js.map +1 -0
- package/dist/components/QueriesActivityBar/QueriesActivityBar.scss +109 -0
- package/dist/components/QueriesActivityBar/QueriesActivityCharts.d.ts +6 -0
- package/dist/components/QueriesActivityBar/QueriesActivityCharts.js +53 -0
- package/dist/components/QueriesActivityBar/QueriesActivityCharts.js.map +1 -0
- package/dist/components/QueriesActivityBar/i18n/en.json +10 -0
- package/dist/components/QueriesActivityBar/i18n/index.d.ts +2 -0
- package/dist/components/QueriesActivityBar/i18n/index.js +6 -0
- package/dist/components/QueriesActivityBar/i18n/index.js.map +1 -0
- package/dist/components/QueriesActivityBar/utils.d.ts +24 -0
- package/dist/components/QueriesActivityBar/utils.js +85 -0
- package/dist/components/QueriesActivityBar/utils.js.map +1 -0
- package/dist/components/TimeFrameDropdown/TimeFrameDropdown.d.ts +11 -0
- package/dist/components/TimeFrameDropdown/TimeFrameDropdown.js +31 -0
- package/dist/components/TimeFrameDropdown/TimeFrameDropdown.js.map +1 -0
- package/dist/components/TimeFrameDropdown/i18n/en.json +6 -0
- package/dist/components/TimeFrameDropdown/i18n/index.d.ts +2 -0
- package/dist/components/TimeFrameDropdown/i18n/index.js +5 -0
- package/dist/components/TimeFrameDropdown/i18n/index.js.map +1 -0
- package/dist/containers/App/App.d.ts +1 -1
- package/dist/containers/App/App.js +3 -5
- package/dist/containers/App/App.js.map +1 -1
- package/dist/containers/App/NavigationWrapper.d.ts +9 -0
- package/dist/containers/App/NavigationWrapper.js +22 -0
- package/dist/containers/App/NavigationWrapper.js.map +1 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js +3 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.scss +4 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +2 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js +10 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicDataControls/TopicDataControls.d.ts +2 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicDataControls/TopicDataControls.js +3 -12
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicDataControls/TopicDataControls.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicMessageDetails/components/TopicMessage.js +1 -0
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicMessageDetails/components/TopicMessage.js.map +1 -1
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.js +5 -3
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.test.js +2 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.test.js.map +1 -1
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.test.js +2 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.test.js.map +1 -1
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.js +4 -1
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.js.map +1 -1
- package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.scss +4 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/TimeoutLabel.js +2 -3
- package/dist/containers/Tenant/Query/QuerySettingsDialog/TimeoutLabel.js.map +1 -1
- package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.d.ts +3 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.js +3 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.js.map +1 -1
- package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/en.json +1 -0
- package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/ru.json +1 -0
- package/dist/containers/Tenant/TenantPages.d.ts +1 -0
- package/dist/containers/Tenant/TenantPages.js.map +1 -1
- package/dist/containers/UserSettings/settings.d.ts +4 -1
- package/dist/containers/UserSettings/settings.js +40 -12
- package/dist/containers/UserSettings/settings.js.map +1 -1
- package/dist/services/settings.d.ts +2 -0
- package/dist/services/settings.js +2 -1
- package/dist/services/settings.js.map +1 -1
- package/dist/store/reducers/query/__test__/pragmasIntegration.test.d.ts +0 -0
- package/dist/store/reducers/query/__test__/pragmasIntegration.test.js +54 -0
- package/dist/store/reducers/query/__test__/pragmasIntegration.test.js.map +1 -0
- package/dist/store/reducers/query/__test__/prepareQueryWithPragmas.test.d.ts +1 -0
- package/dist/store/reducers/query/__test__/prepareQueryWithPragmas.test.js +25 -0
- package/dist/store/reducers/query/__test__/prepareQueryWithPragmas.test.js.map +1 -0
- package/dist/store/reducers/query/query.js +18 -7
- package/dist/store/reducers/query/query.js.map +1 -1
- package/dist/store/reducers/query/utils.d.ts +1 -0
- package/dist/store/reducers/query/utils.js +9 -0
- package/dist/store/reducers/query/utils.js.map +1 -1
- package/dist/utils/constants.d.ts +72 -27
- package/dist/utils/constants.js +79 -27
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/hooks/index.d.ts +1 -0
- package/dist/utils/hooks/index.js +1 -0
- package/dist/utils/hooks/index.js.map +1 -1
- package/dist/utils/hooks/useChangedQuerySettings.d.ts +2 -2
- package/dist/utils/hooks/useLastQueryExecutionSettings.d.ts +2 -0
- package/dist/utils/hooks/useQueryExecutionSettings.d.ts +1 -0
- package/dist/utils/hooks/useQueryExecutionSettings.js +3 -2
- package/dist/utils/hooks/useQueryExecutionSettings.js.map +1 -1
- package/dist/utils/hooks/useQueryStreamingSetting.d.ts +1 -0
- package/dist/utils/hooks/useQueryStreamingSetting.js +12 -0
- package/dist/utils/hooks/useQueryStreamingSetting.js.map +1 -0
- package/dist/utils/query.d.ts +8 -0
- package/dist/utils/query.js +4 -0
- package/dist/utils/query.js.map +1 -1
- package/package.json +1 -1
@@ -1,9 +1,9 @@
|
|
1
|
+
import React from 'react';
|
1
2
|
import type { TimeFrame } from '../../utils/timeframes';
|
2
3
|
import type { ChartOptions, MetricDescription, OnChartDataStatusChange } from './types';
|
3
4
|
import './MetricChart.scss';
|
4
5
|
interface DiagnosticsChartProps {
|
5
6
|
database: string;
|
6
|
-
title?: string;
|
7
7
|
metrics: MetricDescription[];
|
8
8
|
timeFrame?: TimeFrame;
|
9
9
|
autorefresh?: number;
|
@@ -17,6 +17,12 @@ interface DiagnosticsChartProps {
|
|
17
17
|
* Pass isChartVisible prop to ensure proper chart render
|
18
18
|
*/
|
19
19
|
isChartVisible?: boolean;
|
20
|
+
/** Remove border from chart */
|
21
|
+
noBorder?: boolean;
|
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;
|
20
26
|
}
|
21
|
-
export declare const MetricChart: ({ database,
|
27
|
+
export declare const MetricChart: ({ database, metrics, timeFrame, autorefresh, width, height, chartOptions, onChartDataStatusChange, isChartVisible, noBorder, fullWidth, renderChartToolbar, }: DiagnosticsChartProps) => import("react/jsx-runtime").JSX.Element;
|
22
28
|
export {};
|
@@ -75,7 +75,10 @@ const prepareWidgetData = (data, options = {}) => {
|
|
75
75
|
};
|
76
76
|
};
|
77
77
|
const emptyChartData = { timeline: [], metrics: [] };
|
78
|
-
export const MetricChart = ({ database,
|
78
|
+
export const MetricChart = ({ database, metrics, timeFrame = '1h', autorefresh, width = 400, height = width / 1.5, chartOptions, onChartDataStatusChange, isChartVisible, noBorder, fullWidth, renderChartToolbar, }) => {
|
79
|
+
// Use a reasonable default for maxDataPoints when fullWidth is true
|
80
|
+
const effectiveWidth = fullWidth ? 600 : width;
|
81
|
+
const maxDataPoints = effectiveWidth / 2;
|
79
82
|
const { currentData, error, isFetching, status } = chartApi.useGetChartDataQuery(
|
80
83
|
// maxDataPoints param is calculated based on width
|
81
84
|
// should be width > maxDataPoints to prevent points that cannot be selected
|
@@ -84,7 +87,7 @@ export const MetricChart = ({ database, title, metrics, timeFrame = '1h', autore
|
|
84
87
|
database,
|
85
88
|
metrics,
|
86
89
|
timeFrame,
|
87
|
-
maxDataPoints
|
90
|
+
maxDataPoints,
|
88
91
|
}, { pollingInterval: autorefresh });
|
89
92
|
const loading = isFetching && !currentData;
|
90
93
|
React.useEffect(() => {
|
@@ -100,9 +103,9 @@ export const MetricChart = ({ database, title, metrics, timeFrame = '1h', autore
|
|
100
103
|
}
|
101
104
|
return (_jsxs("div", { className: b('chart'), children: [_jsx(ChartKit, { type: "yagr", data: convertedData }), error ? _jsx(ResponseError, { className: b('error'), error: error }) : null] }));
|
102
105
|
};
|
103
|
-
return (_jsxs("div", { className: b(
|
106
|
+
return (_jsxs("div", { className: b({ noBorder }), style: {
|
104
107
|
height,
|
105
|
-
width,
|
106
|
-
}, children: [
|
108
|
+
width: fullWidth ? '100%' : width,
|
109
|
+
}, children: [renderChartToolbar === null || renderChartToolbar === void 0 ? void 0 : renderChartToolbar(), renderContent()] }));
|
107
110
|
};
|
108
111
|
//# sourceMappingURL=MetricChart.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MetricChart.js","sourceRoot":"","sources":["../../../src/components/MetricChart/MetricChart.tsx"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"MetricChart.js","sourceRoot":"","sources":["../../../src/components/MetricChart/MetricChart.tsx"],"names":[],"mappings":"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"}
|
@@ -2,13 +2,15 @@
|
|
2
2
|
display: flex;
|
3
3
|
flex-direction: column;
|
4
4
|
|
5
|
-
padding:
|
5
|
+
padding: var(--g-spacing-4) var(--g-spacing-4) var(--g-spacing-2);
|
6
6
|
|
7
7
|
border: 1px solid var(--g-color-line-generic);
|
8
8
|
border-radius: 8px;
|
9
9
|
|
10
|
-
&
|
11
|
-
|
10
|
+
&_noBorder {
|
11
|
+
padding: 0;
|
12
|
+
|
13
|
+
border: none;
|
12
14
|
}
|
13
15
|
|
14
16
|
&__chart {
|
@@ -0,0 +1,80 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { CirclePlay, Clock, Display, Person, Rocket } from '@gravity-ui/icons';
|
4
|
+
import { ArrowToggle, Button, Disclosure, Flex, Icon, Label, Text } from '@gravity-ui/uikit';
|
5
|
+
import { useHistory, useLocation } from 'react-router-dom';
|
6
|
+
import { TenantTabsGroups, getTenantPath } from '../../containers/Tenant/TenantPages';
|
7
|
+
import { parseQuery } from '../../routes';
|
8
|
+
import { topQueriesApi } from '../../store/reducers/executeTopQueries/executeTopQueries';
|
9
|
+
import { TENANT_DIAGNOSTICS_TABS_IDS } from '../../store/reducers/tenant/constants';
|
10
|
+
import { cn } from '../../utils/cn';
|
11
|
+
import { useAutoRefreshInterval } from '../../utils/hooks';
|
12
|
+
import { chartApi } from '../MetricChart/reducer';
|
13
|
+
import { QueriesActivityCharts } from './QueriesActivityCharts';
|
14
|
+
import i18n from './i18n';
|
15
|
+
import { calculateLatency, calculateQueriesPerSecond, formatTrendValue } from './utils';
|
16
|
+
import './QueriesActivityBar.scss';
|
17
|
+
const b = cn('queries-activity-bar');
|
18
|
+
export function QueriesActivityBar({ tenantName }) {
|
19
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
20
|
+
const history = useHistory();
|
21
|
+
const location = useLocation();
|
22
|
+
const [autoRefreshInterval] = useAutoRefreshInterval();
|
23
|
+
const [expanded, setExpanded] = React.useState(false);
|
24
|
+
const [queriesTimeFrame] = React.useState('1h');
|
25
|
+
const [latenciesTimeFrame] = React.useState('1h');
|
26
|
+
// Fetch running queries
|
27
|
+
const { data: runningQueriesData } = topQueriesApi.useGetRunningQueriesQuery({
|
28
|
+
database: tenantName,
|
29
|
+
filters: {},
|
30
|
+
}, { pollingInterval: autoRefreshInterval });
|
31
|
+
// Fetch queries per second data for header metrics
|
32
|
+
const { data: queriesPerSecData } = chartApi.useGetChartDataQuery({
|
33
|
+
database: tenantName,
|
34
|
+
metrics: [{ target: 'queries.requests' }],
|
35
|
+
timeFrame: queriesTimeFrame,
|
36
|
+
maxDataPoints: 30,
|
37
|
+
}, { pollingInterval: autoRefreshInterval });
|
38
|
+
// Fetch latency data for header metrics
|
39
|
+
const { data: latencyData } = chartApi.useGetChartDataQuery({
|
40
|
+
database: tenantName,
|
41
|
+
metrics: [{ target: 'queries.latencies.p99' }],
|
42
|
+
timeFrame: latenciesTimeFrame,
|
43
|
+
maxDataPoints: 30,
|
44
|
+
}, { pollingInterval: autoRefreshInterval });
|
45
|
+
const runningQueriesCount = ((_c = (_b = (_a = runningQueriesData === null || runningQueriesData === void 0 ? void 0 : runningQueriesData.resultSets) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c.length) || 0;
|
46
|
+
const qps = React.useMemo(() => { var _a, _b; return calculateQueriesPerSecond((_b = (_a = queriesPerSecData === null || queriesPerSecData === void 0 ? void 0 : queriesPerSecData.metrics) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.data); }, [(_e = (_d = queriesPerSecData === null || queriesPerSecData === void 0 ? void 0 : queriesPerSecData.metrics) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.data]);
|
47
|
+
const latency = React.useMemo(() => { var _a, _b; return calculateLatency((_b = (_a = latencyData === null || latencyData === void 0 ? void 0 : latencyData.metrics) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.data); }, [(_g = (_f = latencyData === null || latencyData === void 0 ? void 0 : latencyData.metrics) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.data]);
|
48
|
+
// Calculate unique applications and users
|
49
|
+
const uniqueApplications = React.useMemo(() => {
|
50
|
+
var _a, _b, _c;
|
51
|
+
const apps = new Set();
|
52
|
+
(_c = (_b = (_a = runningQueriesData === null || runningQueriesData === void 0 ? void 0 : runningQueriesData.resultSets) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c.forEach((row) => {
|
53
|
+
if (row.ApplicationName) {
|
54
|
+
apps.add(String(row.ApplicationName));
|
55
|
+
}
|
56
|
+
});
|
57
|
+
return apps.size;
|
58
|
+
}, [runningQueriesData]);
|
59
|
+
const uniqueUsers = React.useMemo(() => {
|
60
|
+
var _a, _b, _c;
|
61
|
+
const users = new Set();
|
62
|
+
(_c = (_b = (_a = runningQueriesData === null || runningQueriesData === void 0 ? void 0 : runningQueriesData.resultSets) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.result) === null || _c === void 0 ? void 0 : _c.forEach((row) => {
|
63
|
+
if (row.UserSID) {
|
64
|
+
users.add(String(row.UserSID));
|
65
|
+
}
|
66
|
+
});
|
67
|
+
return users.size;
|
68
|
+
}, [runningQueriesData]);
|
69
|
+
const handleOpenRunningQueries = () => {
|
70
|
+
const queryParams = parseQuery(location);
|
71
|
+
const path = getTenantPath({
|
72
|
+
...queryParams,
|
73
|
+
[TenantTabsGroups.diagnosticsTab]: TENANT_DIAGNOSTICS_TABS_IDS.topQueries,
|
74
|
+
queryMode: 'running',
|
75
|
+
});
|
76
|
+
history.push(path);
|
77
|
+
};
|
78
|
+
return (_jsxs("div", { className: b({ expanded }), children: [_jsxs(Disclosure, { expanded: expanded, onUpdate: setExpanded, className: b('disclosure'), children: [_jsx(Disclosure.Summary, { children: (props) => (_jsxs("div", { ...props, className: b('header'), 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: props.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') })] }) })) : null] }), _jsx(QueriesActivityCharts, { tenantName: tenantName, expanded: expanded })] }));
|
79
|
+
}
|
80
|
+
//# sourceMappingURL=QueriesActivityBar.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"QueriesActivityBar.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityBar.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,109 @@
|
|
1
|
+
@use '../../styles/mixins.scss';
|
2
|
+
|
3
|
+
.queries-activity-bar {
|
4
|
+
$b: &;
|
5
|
+
|
6
|
+
margin-bottom: var(--diagnostics-section-title-margin);
|
7
|
+
|
8
|
+
border: 1px solid transparent;
|
9
|
+
border-radius: var(--g-border-radius-m);
|
10
|
+
|
11
|
+
// Collapsed state (default)
|
12
|
+
background-color: var(--g-color-base-float);
|
13
|
+
|
14
|
+
&_expanded {
|
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%;
|
22
|
+
}
|
23
|
+
|
24
|
+
&__header {
|
25
|
+
display: flex;
|
26
|
+
justify-content: space-between;
|
27
|
+
align-items: center;
|
28
|
+
gap: var(--g-spacing-3);
|
29
|
+
|
30
|
+
padding: var(--g-spacing-3) var(--g-spacing-4);
|
31
|
+
|
32
|
+
cursor: pointer;
|
33
|
+
|
34
|
+
border-radius: var(--g-border-radius-m);
|
35
|
+
|
36
|
+
transition: background-color 0.15s ease;
|
37
|
+
|
38
|
+
&:hover {
|
39
|
+
background-color: var(--g-color-base-simple-hover);
|
40
|
+
}
|
41
|
+
|
42
|
+
// When expanded, only round top corners
|
43
|
+
#{$b}_expanded &:hover {
|
44
|
+
background-color: transparent;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
&__content-wrapper {
|
49
|
+
display: flex;
|
50
|
+
flex-grow: 1;
|
51
|
+
align-items: center;
|
52
|
+
gap: var(--g-spacing-2);
|
53
|
+
}
|
54
|
+
|
55
|
+
&__metrics {
|
56
|
+
display: flex;
|
57
|
+
align-items: center;
|
58
|
+
gap: var(--g-spacing-1);
|
59
|
+
}
|
60
|
+
|
61
|
+
&__content {
|
62
|
+
display: flex;
|
63
|
+
flex-direction: column;
|
64
|
+
gap: var(--g-spacing-4);
|
65
|
+
}
|
66
|
+
|
67
|
+
&__stats {
|
68
|
+
display: flex;
|
69
|
+
flex-wrap: wrap;
|
70
|
+
align-items: center;
|
71
|
+
gap: var(--g-spacing-1);
|
72
|
+
|
73
|
+
padding: 0 var(--g-spacing-4);
|
74
|
+
}
|
75
|
+
|
76
|
+
&__open-queries-button {
|
77
|
+
margin-left: 4px;
|
78
|
+
}
|
79
|
+
|
80
|
+
&__charts {
|
81
|
+
display: flex;
|
82
|
+
gap: var(--g-spacing-4);
|
83
|
+
|
84
|
+
padding: 0 var(--g-spacing-4);
|
85
|
+
padding-top: var(--g-spacing-4);
|
86
|
+
|
87
|
+
@media (max-width: 1200px) {
|
88
|
+
flex-direction: column;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
&__chart-container {
|
93
|
+
display: flex;
|
94
|
+
flex: 1;
|
95
|
+
flex-direction: column;
|
96
|
+
gap: var(--g-spacing-3);
|
97
|
+
}
|
98
|
+
|
99
|
+
&__toolbar {
|
100
|
+
margin-bottom: 10px;
|
101
|
+
}
|
102
|
+
|
103
|
+
// Focus states for accessibility
|
104
|
+
&__header:focus-visible,
|
105
|
+
&__open-queries-button:focus-visible {
|
106
|
+
outline: 2px solid var(--g-color-line-focus);
|
107
|
+
outline-offset: 2px;
|
108
|
+
}
|
109
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { Flex } from '@gravity-ui/uikit';
|
4
|
+
import { defaultDashboardConfig } from '../../containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig';
|
5
|
+
import { cn } from '../../utils/cn';
|
6
|
+
import { useAutoRefreshInterval } from '../../utils/hooks';
|
7
|
+
import { MetricChart } from '../MetricChart/MetricChart';
|
8
|
+
import { TimeFrameDropdown } from '../TimeFrameDropdown/TimeFrameDropdown';
|
9
|
+
const b = cn('queries-activity-bar');
|
10
|
+
const ACTIVITY_CHART_HEIGHT = 292;
|
11
|
+
export function QueriesActivityCharts({ tenantName, expanded }) {
|
12
|
+
const [autoRefreshInterval] = useAutoRefreshInterval();
|
13
|
+
const [queriesTimeFrame, setQueriesTimeFrame] = React.useState('1h');
|
14
|
+
const [latenciesTimeFrame, setLatenciesTimeFrame] = React.useState('1h');
|
15
|
+
const [hasChartsLoaded, setHasChartsLoaded] = React.useState(false);
|
16
|
+
// Extract chart configurations from defaultDashboardConfig
|
17
|
+
const getChartByTarget = (target) => {
|
18
|
+
return defaultDashboardConfig.find((chart) => chart.metrics.some((metric) => metric.target === target));
|
19
|
+
};
|
20
|
+
const queriesChartConfig = getChartByTarget('queries.requests');
|
21
|
+
const latenciesChartConfig = getChartByTarget('queries.latencies.p99');
|
22
|
+
// Early return if required charts are not found
|
23
|
+
if (!queriesChartConfig || !latenciesChartConfig) {
|
24
|
+
console.warn('Required chart configurations not found in defaultDashboardConfig');
|
25
|
+
return null;
|
26
|
+
}
|
27
|
+
// Refetch data only if charts have successfully loaded at least once
|
28
|
+
const shouldRefresh = hasChartsLoaded ? autoRefreshInterval : 0;
|
29
|
+
const handleChartDataStatusChange = React.useCallback((status) => {
|
30
|
+
if (status === 'success') {
|
31
|
+
setHasChartsLoaded(true);
|
32
|
+
}
|
33
|
+
}, []);
|
34
|
+
const handleQueriesTimeFrameChange = React.useCallback((newTimeFrame) => {
|
35
|
+
setQueriesTimeFrame(newTimeFrame);
|
36
|
+
}, []);
|
37
|
+
const handleLatenciesTimeFrameChange = React.useCallback((newTimeFrame) => {
|
38
|
+
setLatenciesTimeFrame(newTimeFrame);
|
39
|
+
}, []);
|
40
|
+
const renderQueriesChartToolbar = React.useCallback(() => (_jsxs(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: [_jsx("div", { children: queriesChartConfig.title }), _jsx(TimeFrameDropdown, { value: queriesTimeFrame, onChange: handleQueriesTimeFrameChange })] })), [queriesChartConfig.title, queriesTimeFrame]);
|
41
|
+
const renderLatenciesChartToolbar = React.useCallback(() => (_jsxs(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: [_jsx("div", { children: latenciesChartConfig.title }), _jsx(TimeFrameDropdown, { value: latenciesTimeFrame, onChange: handleLatenciesTimeFrameChange })] })), [latenciesChartConfig.title, latenciesTimeFrame]);
|
42
|
+
// WORKAROUND: Charts are rendered outside Disclosure component due to YAGR tooltip bug
|
43
|
+
// Issue: https://github.com/gravity-ui/yagr/issues/262
|
44
|
+
// Problem: YAGR tooltips don't work when charts are mounted inside collapsible containers
|
45
|
+
// that use CSS transforms or have complex nested DOM structures. The tooltip initialization
|
46
|
+
// fails when the chart is not immediately visible during mounting.
|
47
|
+
// TODO: Remove this workaround once the upstream issue is fixed
|
48
|
+
if (!expanded) {
|
49
|
+
return null;
|
50
|
+
}
|
51
|
+
return (_jsxs("div", { className: b('charts'), children: [_jsx("div", { className: b('chart-container'), children: _jsx(MetricChart, { database: tenantName, metrics: queriesChartConfig.metrics, timeFrame: queriesTimeFrame, autorefresh: shouldRefresh, height: ACTIVITY_CHART_HEIGHT, chartOptions: queriesChartConfig.options, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: hasChartsLoaded, noBorder: true, fullWidth: true, renderChartToolbar: renderQueriesChartToolbar }) }), _jsx("div", { className: b('chart-container'), children: _jsx(MetricChart, { database: tenantName, metrics: latenciesChartConfig.metrics, timeFrame: latenciesTimeFrame, autorefresh: shouldRefresh, height: ACTIVITY_CHART_HEIGHT, chartOptions: latenciesChartConfig.options, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: hasChartsLoaded, noBorder: true, fullWidth: true, renderChartToolbar: renderLatenciesChartToolbar }) })] }));
|
52
|
+
}
|
53
|
+
//# sourceMappingURL=QueriesActivityCharts.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"QueriesActivityCharts.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/QueriesActivityCharts.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"title_queries-activity": "Queries Activity",
|
3
|
+
"context_monitor-changes-realtime": "Monitor changes in real time",
|
4
|
+
"value_per-sec": "{{count}} per sec",
|
5
|
+
"value_ms": "{{time}} ms",
|
6
|
+
"field_running-queries": "Running Queries",
|
7
|
+
"field_applications": "Applications",
|
8
|
+
"field_users": "Users",
|
9
|
+
"action_open-running-queries": "Open Running Queries"
|
10
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/QueriesActivityBar/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAE7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAE5C,eAAe,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
export declare enum TrendDirection {
|
2
|
+
Up = "up",
|
3
|
+
Down = "down"
|
4
|
+
}
|
5
|
+
export interface MetricTrend {
|
6
|
+
value: number;
|
7
|
+
direction: TrendDirection;
|
8
|
+
}
|
9
|
+
export interface MetricCalculationResult {
|
10
|
+
value: string;
|
11
|
+
trend: MetricTrend;
|
12
|
+
}
|
13
|
+
/**
|
14
|
+
* Calculate queries per second metrics from chart data
|
15
|
+
*/
|
16
|
+
export declare const calculateQueriesPerSecond: (data?: (number | null)[]) => MetricCalculationResult;
|
17
|
+
/**
|
18
|
+
* Calculate latency metrics from chart data
|
19
|
+
*/
|
20
|
+
export declare const calculateLatency: (data?: (number | null)[]) => MetricCalculationResult;
|
21
|
+
/**
|
22
|
+
* Format trend value for display
|
23
|
+
*/
|
24
|
+
export declare const formatTrendValue: (val: number) => string;
|
@@ -0,0 +1,85 @@
|
|
1
|
+
const FALLBACK_VALUE = 0.000001;
|
2
|
+
export var TrendDirection;
|
3
|
+
(function (TrendDirection) {
|
4
|
+
TrendDirection["Up"] = "up";
|
5
|
+
TrendDirection["Down"] = "down";
|
6
|
+
})(TrendDirection || (TrendDirection = {}));
|
7
|
+
/**
|
8
|
+
* Calculate queries per second metrics from chart data
|
9
|
+
*/
|
10
|
+
export const calculateQueriesPerSecond = (data) => {
|
11
|
+
var _a, _b;
|
12
|
+
const emptyFallback = {
|
13
|
+
value: FALLBACK_VALUE.toFixed(0),
|
14
|
+
trend: { value: FALLBACK_VALUE, direction: TrendDirection.Up },
|
15
|
+
};
|
16
|
+
if (!data) {
|
17
|
+
return emptyFallback;
|
18
|
+
}
|
19
|
+
// Safe array access with length validation
|
20
|
+
if (data.length === 0) {
|
21
|
+
return emptyFallback;
|
22
|
+
}
|
23
|
+
const current = (_a = data[data.length - 1]) !== null && _a !== void 0 ? _a : FALLBACK_VALUE;
|
24
|
+
const previous = data.length >= 2 ? ((_b = data[data.length - 2]) !== null && _b !== void 0 ? _b : FALLBACK_VALUE) : FALLBACK_VALUE;
|
25
|
+
let trend;
|
26
|
+
if (previous > 0) {
|
27
|
+
const change = current - previous;
|
28
|
+
trend = {
|
29
|
+
value: Math.abs(change),
|
30
|
+
direction: change >= 0 ? TrendDirection.Up : TrendDirection.Down,
|
31
|
+
};
|
32
|
+
}
|
33
|
+
else {
|
34
|
+
trend = { value: FALLBACK_VALUE, direction: TrendDirection.Up };
|
35
|
+
}
|
36
|
+
return { value: current.toFixed(0), trend };
|
37
|
+
};
|
38
|
+
/**
|
39
|
+
* Calculate latency metrics from chart data
|
40
|
+
*/
|
41
|
+
export const calculateLatency = (data) => {
|
42
|
+
var _a, _b;
|
43
|
+
if (!data) {
|
44
|
+
return {
|
45
|
+
value: FALLBACK_VALUE.toFixed(1),
|
46
|
+
trend: { value: FALLBACK_VALUE, direction: TrendDirection.Up },
|
47
|
+
};
|
48
|
+
}
|
49
|
+
// Safe array access with length validation
|
50
|
+
if (data.length === 0) {
|
51
|
+
return {
|
52
|
+
value: FALLBACK_VALUE.toFixed(1),
|
53
|
+
trend: { value: FALLBACK_VALUE, direction: TrendDirection.Up },
|
54
|
+
};
|
55
|
+
}
|
56
|
+
const current = (_a = data[data.length - 1]) !== null && _a !== void 0 ? _a : FALLBACK_VALUE;
|
57
|
+
const previous = data.length >= 2 ? ((_b = data[data.length - 2]) !== null && _b !== void 0 ? _b : FALLBACK_VALUE) : FALLBACK_VALUE;
|
58
|
+
let trend;
|
59
|
+
if (previous > 0) {
|
60
|
+
const change = current - previous;
|
61
|
+
trend = {
|
62
|
+
value: Math.abs(change),
|
63
|
+
direction: change >= 0 ? TrendDirection.Up : TrendDirection.Down,
|
64
|
+
};
|
65
|
+
}
|
66
|
+
else {
|
67
|
+
trend = { value: FALLBACK_VALUE, direction: TrendDirection.Up };
|
68
|
+
}
|
69
|
+
return { value: current.toFixed(1), trend };
|
70
|
+
};
|
71
|
+
/**
|
72
|
+
* Format trend value for display
|
73
|
+
*/
|
74
|
+
export const formatTrendValue = (val) => {
|
75
|
+
if (val >= 1) {
|
76
|
+
return `+${val.toFixed(0)}`;
|
77
|
+
}
|
78
|
+
else if (val > 0) {
|
79
|
+
return `+${val.toFixed(1)}`;
|
80
|
+
}
|
81
|
+
else {
|
82
|
+
return val.toFixed(1);
|
83
|
+
}
|
84
|
+
};
|
85
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/QueriesActivityBar/utils.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import type { ButtonProps } from '@gravity-ui/uikit';
|
2
|
+
import type { TimeFrame } from '../../utils/timeframes';
|
3
|
+
interface TimeFrameDropdownProps {
|
4
|
+
value: TimeFrame;
|
5
|
+
onChange: (value: TimeFrame) => void;
|
6
|
+
className?: string;
|
7
|
+
size?: ButtonProps['size'];
|
8
|
+
view?: ButtonProps['view'];
|
9
|
+
}
|
10
|
+
export declare const TimeFrameDropdown: ({ value, onChange, className, size, view, }: TimeFrameDropdownProps) => import("react/jsx-runtime").JSX.Element;
|
11
|
+
export {};
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { ChevronDown } from '@gravity-ui/icons';
|
4
|
+
import { Button, DropdownMenu, Icon } from '@gravity-ui/uikit';
|
5
|
+
import { cn } from '../../utils/cn';
|
6
|
+
import { TIMEFRAMES } from '../../utils/timeframes';
|
7
|
+
import i18n from './i18n';
|
8
|
+
const getTimeFrameLabel = (timeFrame) => {
|
9
|
+
switch (timeFrame) {
|
10
|
+
case '30m':
|
11
|
+
return i18n('value_30m');
|
12
|
+
case '1h':
|
13
|
+
return i18n('value_1h');
|
14
|
+
case '1d':
|
15
|
+
return i18n('value_1d');
|
16
|
+
case '1w':
|
17
|
+
return i18n('value_1w');
|
18
|
+
default:
|
19
|
+
return timeFrame;
|
20
|
+
}
|
21
|
+
};
|
22
|
+
const b = cn('ydb-timeframe-dropdown');
|
23
|
+
export const TimeFrameDropdown = ({ value, onChange, className, size = 's', view = 'flat-secondary', }) => {
|
24
|
+
const items = React.useMemo(() => Object.keys(TIMEFRAMES).map((timeFrame) => ({
|
25
|
+
text: getTimeFrameLabel(timeFrame),
|
26
|
+
action: () => onChange(timeFrame),
|
27
|
+
})), [onChange]);
|
28
|
+
const renderSwitcher = (props) => (_jsxs(Button, { ...props, size: size, view: view, className: b(null, className), children: [getTimeFrameLabel(value), _jsx(Icon, { data: ChevronDown, size: 12 })] }));
|
29
|
+
return (_jsx(DropdownMenu, { renderSwitcher: renderSwitcher, items: items, popupProps: { placement: 'bottom-start' } }));
|
30
|
+
};
|
31
|
+
//# sourceMappingURL=TimeFrameDropdown.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TimeFrameDropdown.js","sourceRoot":"","sources":["../../../src/components/TimeFrameDropdown/TimeFrameDropdown.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAGlD,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,iBAAiB,GAAG,CAAC,SAAoB,EAAE,EAAE;IAC/C,QAAQ,SAAS,EAAE,CAAC;QAChB,KAAK,KAAK;YACN,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7B,KAAK,IAAI;YACL,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,KAAK,IAAI;YACL,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,KAAK,IAAI;YACL,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B;YACI,OAAO,SAAS,CAAC;IACzB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;AAUvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,IAAI,GAAG,GAAG,EACV,IAAI,GAAG,gBAAgB,GACF,EAAE,EAAE;IACzB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CACvB,GAAG,EAAE,CACD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,iBAAiB,CAAC,SAAsB,CAAC;QAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAsB,CAAC;KACjD,CAAC,CAAC,EACP,CAAC,QAAQ,CAAC,CACb,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAE,EAAE,CAAC,CAC3C,MAAC,MAAM,OAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,aACnE,iBAAiB,CAAC,KAAK,CAAC,EACzB,KAAC,IAAI,IAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,GAAI,IAChC,CACZ,CAAC;IAEF,OAAO,CACH,KAAC,YAAY,IACT,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,EAAC,SAAS,EAAE,cAAc,EAAC,GACzC,CACL,CAAC;AACN,CAAC,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/TimeFrameDropdown/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C,eAAe,eAAe,CAAC,SAAS,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC"}
|
@@ -10,7 +10,7 @@ export interface AppProps {
|
|
10
10
|
userSettings?: YDBEmbeddedUISettings;
|
11
11
|
children?: React.ReactNode;
|
12
12
|
}
|
13
|
-
declare function App({ store, history, singleClusterMode, children, userSettings
|
13
|
+
declare function App({ store, history, singleClusterMode, children, userSettings }: AppProps): import("react/jsx-runtime").JSX.Element;
|
14
14
|
declare const _default: import("react-redux").ConnectedComponent<typeof App, {
|
15
15
|
history: History;
|
16
16
|
children?: React.ReactNode;
|