ydb-embedded-ui 11.0.1 → 11.1.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.
Files changed (97) hide show
  1. package/dist/components/MetricChart/MetricChart.d.ts +8 -2
  2. package/dist/components/MetricChart/MetricChart.js +8 -5
  3. package/dist/components/MetricChart/MetricChart.js.map +1 -1
  4. package/dist/components/MetricChart/MetricChart.scss +5 -3
  5. package/dist/components/QueriesActivityBar/QueriesActivityBar.d.ts +6 -0
  6. package/dist/components/QueriesActivityBar/QueriesActivityBar.js +97 -0
  7. package/dist/components/QueriesActivityBar/QueriesActivityBar.js.map +1 -0
  8. package/dist/components/QueriesActivityBar/QueriesActivityBar.scss +109 -0
  9. package/dist/components/QueriesActivityBar/QueriesActivityCharts.d.ts +8 -0
  10. package/dist/components/QueriesActivityBar/QueriesActivityCharts.js +52 -0
  11. package/dist/components/QueriesActivityBar/QueriesActivityCharts.js.map +1 -0
  12. package/dist/components/QueriesActivityBar/i18n/en.json +10 -0
  13. package/dist/components/QueriesActivityBar/i18n/index.d.ts +2 -0
  14. package/dist/components/QueriesActivityBar/i18n/index.js +6 -0
  15. package/dist/components/QueriesActivityBar/i18n/index.js.map +1 -0
  16. package/dist/components/QueriesActivityBar/utils.d.ts +24 -0
  17. package/dist/components/QueriesActivityBar/utils.js +85 -0
  18. package/dist/components/QueriesActivityBar/utils.js.map +1 -0
  19. package/dist/components/TimeFrameDropdown/TimeFrameDropdown.d.ts +11 -0
  20. package/dist/components/TimeFrameDropdown/TimeFrameDropdown.js +31 -0
  21. package/dist/components/TimeFrameDropdown/TimeFrameDropdown.js.map +1 -0
  22. package/dist/components/TimeFrameDropdown/i18n/en.json +6 -0
  23. package/dist/components/TimeFrameDropdown/i18n/index.d.ts +2 -0
  24. package/dist/components/TimeFrameDropdown/i18n/index.js +5 -0
  25. package/dist/components/TimeFrameDropdown/i18n/index.js.map +1 -0
  26. package/dist/containers/App/App.d.ts +1 -1
  27. package/dist/containers/App/App.js +3 -5
  28. package/dist/containers/App/App.js.map +1 -1
  29. package/dist/containers/App/NavigationWrapper.d.ts +9 -0
  30. package/dist/containers/App/NavigationWrapper.js +22 -0
  31. package/dist/containers/App/NavigationWrapper.js.map +1 -0
  32. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js +3 -1
  33. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js.map +1 -1
  34. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.scss +4 -0
  35. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +2 -1
  36. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  37. package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js +6 -1
  38. package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js.map +1 -1
  39. package/dist/containers/Tenant/Diagnostics/TopicData/TopicDataControls/TopicDataControls.d.ts +2 -1
  40. package/dist/containers/Tenant/Diagnostics/TopicData/TopicDataControls/TopicDataControls.js +3 -12
  41. package/dist/containers/Tenant/Diagnostics/TopicData/TopicDataControls/TopicDataControls.js.map +1 -1
  42. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js +17 -8
  43. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js.map +1 -1
  44. package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.js +5 -3
  45. package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.js.map +1 -1
  46. package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.test.js +2 -0
  47. package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettings.test.js.map +1 -1
  48. package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.test.js +2 -0
  49. package/dist/containers/Tenant/Query/QueryEditorControls/utils/getChangedQueryExecutionSettingsDescription.test.js.map +1 -1
  50. package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.js +4 -1
  51. package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.js.map +1 -1
  52. package/dist/containers/Tenant/Query/QuerySettingsDialog/QuerySettingsDialog.scss +4 -0
  53. package/dist/containers/Tenant/Query/QuerySettingsDialog/TimeoutLabel.js +2 -3
  54. package/dist/containers/Tenant/Query/QuerySettingsDialog/TimeoutLabel.js.map +1 -1
  55. package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.d.ts +3 -0
  56. package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.js +3 -0
  57. package/dist/containers/Tenant/Query/QuerySettingsDialog/constants.js.map +1 -1
  58. package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/en.json +1 -0
  59. package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/index.d.ts +1 -1
  60. package/dist/containers/Tenant/Query/QuerySettingsDialog/i18n/ru.json +1 -0
  61. package/dist/containers/Tenant/TenantPages.d.ts +1 -0
  62. package/dist/containers/Tenant/TenantPages.js.map +1 -1
  63. package/dist/containers/UserSettings/settings.d.ts +4 -1
  64. package/dist/containers/UserSettings/settings.js +40 -12
  65. package/dist/containers/UserSettings/settings.js.map +1 -1
  66. package/dist/services/settings.d.ts +2 -0
  67. package/dist/services/settings.js +2 -1
  68. package/dist/services/settings.js.map +1 -1
  69. package/dist/store/reducers/query/__test__/pragmasIntegration.test.d.ts +0 -0
  70. package/dist/store/reducers/query/__test__/pragmasIntegration.test.js +54 -0
  71. package/dist/store/reducers/query/__test__/pragmasIntegration.test.js.map +1 -0
  72. package/dist/store/reducers/query/__test__/prepareQueryWithPragmas.test.d.ts +1 -0
  73. package/dist/store/reducers/query/__test__/prepareQueryWithPragmas.test.js +25 -0
  74. package/dist/store/reducers/query/__test__/prepareQueryWithPragmas.test.js.map +1 -0
  75. package/dist/store/reducers/query/query.js +18 -7
  76. package/dist/store/reducers/query/query.js.map +1 -1
  77. package/dist/store/reducers/query/utils.d.ts +1 -0
  78. package/dist/store/reducers/query/utils.js +9 -0
  79. package/dist/store/reducers/query/utils.js.map +1 -1
  80. package/dist/utils/constants.d.ts +72 -27
  81. package/dist/utils/constants.js +79 -27
  82. package/dist/utils/constants.js.map +1 -1
  83. package/dist/utils/hooks/index.d.ts +1 -0
  84. package/dist/utils/hooks/index.js +1 -0
  85. package/dist/utils/hooks/index.js.map +1 -1
  86. package/dist/utils/hooks/useChangedQuerySettings.d.ts +2 -2
  87. package/dist/utils/hooks/useLastQueryExecutionSettings.d.ts +2 -0
  88. package/dist/utils/hooks/useQueryExecutionSettings.d.ts +1 -0
  89. package/dist/utils/hooks/useQueryExecutionSettings.js +3 -2
  90. package/dist/utils/hooks/useQueryExecutionSettings.js.map +1 -1
  91. package/dist/utils/hooks/useQueryStreamingSetting.d.ts +1 -0
  92. package/dist/utils/hooks/useQueryStreamingSetting.js +12 -0
  93. package/dist/utils/hooks/useQueryStreamingSetting.js.map +1 -0
  94. package/dist/utils/query.d.ts +8 -0
  95. package/dist/utils/query.js +4 -0
  96. package/dist/utils/query.js.map +1 -1
  97. 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, title, metrics, timeFrame, autorefresh, width, height, chartOptions, onChartDataStatusChange, isChartVisible, }: DiagnosticsChartProps) => import("react/jsx-runtime").JSX.Element;
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, title, metrics, timeFrame = '1h', autorefresh, width = 400, height = width / 1.5, chartOptions, onChartDataStatusChange, isChartVisible, }) => {
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: width / 2,
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(null), style: {
106
+ return (_jsxs("div", { className: b({ noBorder }), style: {
104
107
  height,
105
- width,
106
- }, children: [_jsx("div", { className: b('title'), children: title }), renderContent()] }));
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: 16px 16px 8px;
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
- &__title {
11
- margin-bottom: 10px;
10
+ &_noBorder {
11
+ padding: 0;
12
+
13
+ border: none;
12
14
  }
13
15
 
14
16
  &__chart {
@@ -0,0 +1,6 @@
1
+ import './QueriesActivityBar.scss';
2
+ interface QueriesActivityBarProps {
3
+ tenantName: string;
4
+ }
5
+ export declare function QueriesActivityBar({ tenantName }: QueriesActivityBarProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,97 @@
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
+ const [isActivityBarHidden, setIsActivityBarHidden] = React.useState(true);
27
+ // Refetch data only if activity bar successfully loaded
28
+ const shouldRefresh = isActivityBarHidden ? 0 : autoRefreshInterval;
29
+ /**
30
+ * Activity bar should be hidden, if charts are not enabled:
31
+ * 1. GraphShard is not enabled
32
+ * 2. ydb version does not have /viewer/json/render endpoint (400, 404, CORS error, etc.)
33
+ *
34
+ * If at least one chart successfully loaded, activity bar should be shown
35
+ * @link https://github.com/ydb-platform/ydb-embedded-ui/issues/659
36
+ * @todo disable only for specific errors ('GraphShard is not enabled') after ydb-stable-24 is generally used
37
+ */
38
+ const handleChartDataStatusChange = React.useCallback((chartStatus) => {
39
+ if (chartStatus === 'success') {
40
+ setIsActivityBarHidden(false);
41
+ }
42
+ }, []);
43
+ // Fetch running queries
44
+ const { data: runningQueriesData } = topQueriesApi.useGetRunningQueriesQuery({
45
+ database: tenantName,
46
+ filters: {},
47
+ }, { pollingInterval: shouldRefresh });
48
+ // Fetch queries per second data for header metrics
49
+ const { data: queriesPerSecData } = chartApi.useGetChartDataQuery({
50
+ database: tenantName,
51
+ metrics: [{ target: 'queries.requests' }],
52
+ timeFrame: queriesTimeFrame,
53
+ maxDataPoints: 30,
54
+ }, { pollingInterval: shouldRefresh });
55
+ // Fetch latency data for header metrics
56
+ const { data: latencyData } = chartApi.useGetChartDataQuery({
57
+ database: tenantName,
58
+ metrics: [{ target: 'queries.latencies.p99' }],
59
+ timeFrame: latenciesTimeFrame,
60
+ maxDataPoints: 30,
61
+ }, { pollingInterval: shouldRefresh });
62
+ 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;
63
+ 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]);
64
+ 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]);
65
+ // Calculate unique applications and users
66
+ const uniqueApplications = React.useMemo(() => {
67
+ var _a, _b, _c;
68
+ const apps = new Set();
69
+ (_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) => {
70
+ if (row.ApplicationName) {
71
+ apps.add(String(row.ApplicationName));
72
+ }
73
+ });
74
+ return apps.size;
75
+ }, [runningQueriesData]);
76
+ const uniqueUsers = React.useMemo(() => {
77
+ var _a, _b, _c;
78
+ const users = new Set();
79
+ (_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) => {
80
+ if (row.UserSID) {
81
+ users.add(String(row.UserSID));
82
+ }
83
+ });
84
+ return users.size;
85
+ }, [runningQueriesData]);
86
+ const handleOpenRunningQueries = () => {
87
+ const queryParams = parseQuery(location);
88
+ const path = getTenantPath({
89
+ ...queryParams,
90
+ [TenantTabsGroups.diagnosticsTab]: TENANT_DIAGNOSTICS_TABS_IDS.topQueries,
91
+ queryMode: 'running',
92
+ });
93
+ history.push(path);
94
+ };
95
+ return (_jsxs("div", { className: b({ expanded }), style: { display: isActivityBarHidden ? 'none' : undefined }, 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, onChartDataStatusChange: handleChartDataStatusChange })] }));
96
+ }
97
+ //# 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,8 @@
1
+ import type { ChartDataStatus } from '../MetricChart/types';
2
+ interface QueriesActivityChartsProps {
3
+ tenantName: string;
4
+ expanded: boolean;
5
+ onChartDataStatusChange?: (status: ChartDataStatus) => void;
6
+ }
7
+ export declare function QueriesActivityCharts({ tenantName, expanded, onChartDataStatusChange, }: QueriesActivityChartsProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export {};
@@ -0,0 +1,52 @@
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, onChartDataStatusChange, }) {
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
+ // Also call parent callback if provided
34
+ onChartDataStatusChange === null || onChartDataStatusChange === void 0 ? void 0 : onChartDataStatusChange(status);
35
+ }, [onChartDataStatusChange]);
36
+ const handleQueriesTimeFrameChange = React.useCallback((newTimeFrame) => {
37
+ setQueriesTimeFrame(newTimeFrame);
38
+ }, []);
39
+ const handleLatenciesTimeFrameChange = React.useCallback((newTimeFrame) => {
40
+ setLatenciesTimeFrame(newTimeFrame);
41
+ }, []);
42
+ 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]);
43
+ 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]);
44
+ // WORKAROUND: Charts are rendered outside Disclosure component due to YAGR tooltip bug
45
+ // Issue: https://github.com/gravity-ui/yagr/issues/262
46
+ // Problem: YAGR tooltips don't work when charts are mounted inside collapsible containers
47
+ // that use CSS transforms or have complex nested DOM structures. The tooltip initialization
48
+ // fails when the chart is not immediately visible during mounting.
49
+ // TODO: Remove this workaround once the upstream issue is fixed
50
+ return (_jsxs("div", { className: b('charts'), style: { display: expanded ? undefined : 'none' }, 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 && expanded, 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 && expanded, noBorder: true, fullWidth: true, renderChartToolbar: renderLatenciesChartToolbar }) })] }));
51
+ }
52
+ //# 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,2 @@
1
+ declare const _default: (key: string, params?: import("@gravity-ui/i18n").Params) => string;
2
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { Lang, i18n } from '../../../utils/i18n';
2
+ import en from './en.json';
3
+ const COMPONENT = 'ydb-queries-activity-bar';
4
+ i18n.registerKeyset(Lang.En, COMPONENT, en);
5
+ export default i18n.keyset(COMPONENT);
6
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ {
2
+ "value_30m": "Last 30 min",
3
+ "value_1h": "Last hour",
4
+ "value_1d": "Last day",
5
+ "value_1w": "Last week"
6
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: (key: "value_30m" | "value_1h" | "value_1d" | "value_1w", params?: import("@gravity-ui/i18n").Params) => string;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ import { registerKeysets } from '../../../utils/i18n';
2
+ import en from './en.json';
3
+ const COMPONENT = 'ydb-timeframe-dropdown';
4
+ export default registerKeysets(COMPONENT, { en });
5
+ //# sourceMappingURL=index.js.map
@@ -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"}