ydb-embedded-ui 11.2.0 → 11.3.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 +5 -3
- package/dist/components/DoughnutMetrics/DoughnutMetrics.js +18 -8
- package/dist/components/DoughnutMetrics/DoughnutMetrics.js.map +1 -1
- package/dist/components/DoughnutMetrics/DoughnutMetrics.scss +38 -27
- 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/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/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/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
@@ -15,6 +15,7 @@ import { EFlag } from '../../types/api/enums';
|
|
15
15
|
import { valueIsDefined } from '../../utils';
|
16
16
|
import { cn } from '../../utils/cn';
|
17
17
|
import { useAutoRefreshInterval, useTypedDispatch } from '../../utils/hooks';
|
18
|
+
import { useAppTitle } from '../App/AppTitleContext';
|
18
19
|
import { PaginatedStorage } from '../Storage/PaginatedStorage';
|
19
20
|
import { storageGroupPageKeyset } from './i18n';
|
20
21
|
import './StorageGroupPage.scss';
|
@@ -38,11 +39,12 @@ export function StorageGroupPage() {
|
|
38
39
|
});
|
39
40
|
const storageGroupData = (_b = (_a = groupQuery.data) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b[0];
|
40
41
|
const loading = groupQuery.isFetching && storageGroupData === undefined;
|
42
|
+
const { appTitle } = useAppTitle();
|
41
43
|
const renderHelmet = () => {
|
42
44
|
const pageTitle = groupId
|
43
45
|
? `${storageGroupPageKeyset('storage-group')} ${groupId}`
|
44
46
|
: storageGroupPageKeyset('storage-group');
|
45
|
-
return (_jsx(Helmet, { titleTemplate: `%s - ${pageTitle} —
|
47
|
+
return (_jsx(Helmet, { titleTemplate: `%s - ${pageTitle} — ${appTitle}`, defaultTitle: `${pageTitle} — ${appTitle}` }));
|
46
48
|
};
|
47
49
|
const renderPageMeta = () => {
|
48
50
|
if (!groupId) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"StorageGroupPage.js","sourceRoot":"","sources":["../../../src/containers/StorageGroupPage/StorageGroupPage.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAC,WAAW,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAC,eAAe,EAAC,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAC,aAAa,EAAC,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,wDAAwD,CAAC;AAC1F,OAAO,EAAC,uBAAuB,EAAC,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAC,gBAAgB,EAAC,MAAM,oDAAoD,CAAC;AACpF,OAAO,EACH,qBAAqB,EACrB,gCAAgC,GACnC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAC,UAAU,EAAC,MAAM,sCAAsC,CAAC;AAChE,OAAO,EAAC,KAAK,EAAC,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAC,EAAE,EAAC,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAC,sBAAsB,EAAC,MAAM,QAAQ,CAAC;AAE9C,OAAO,yBAAyB,CAAC;AAEjC,MAAM,kBAAkB,GAAG,EAAE,CAAC,wBAAwB,CAAC,CAAC;AAExD,MAAM,UAAU,gBAAgB;;IAC5B,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAExD,MAAM,CAAC,EAAC,OAAO,EAAC,CAAC,GAAG,cAAc,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,CAAC;IAE3D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,QAAQ,CAAC,oBAAoB,CAAC,cAAc,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,MAAM,CAAC,mBAAmB,CAAC,GAAG,sBAAsB,EAAE,CAAC;IACvD,MAAM,sBAAsB,GAAG,gCAAgC,EAAE,CAAC;IAClE,MAAM,kBAAkB,GAAG,qBAAqB,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,UAAU,CAAC,4BAA4B,CACtD,cAAc,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,EAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAC;QACvE,CAAC,CAAC,SAAS,EACf;QACI,eAAe,EAAE,mBAAmB;QACpC,IAAI,EAAE,CAAC,kBAAkB;KAC5B,CACJ,CAAC;IAEF,MAAM,gBAAgB,GAAG,MAAA,MAAA,UAAU,CAAC,IAAI,0CAAE,MAAM,0CAAG,CAAC,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,IAAI,gBAAgB,KAAK,SAAS,CAAC;
|
1
|
+
{"version":3,"file":"StorageGroupPage.js","sourceRoot":"","sources":["../../../src/containers/StorageGroupPage/StorageGroupPage.tsx"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"defaultDashboardConfig.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACjD;QACI,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;QACxC,OAAO,EAAE;YACL;gBACI,MAAM,EAAE,kBAAkB;gBAC1B,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;aAC3C;SACJ;KACJ;IACD;QACI,KAAK,EAAE,IAAI,CAAC,
|
1
|
+
{"version":3,"file":"defaultDashboardConfig.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/DefaultOverviewContent/defaultDashboardConfig.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACjD;QACI,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;QACxC,OAAO,EAAE;YACL;gBACI,MAAM,EAAE,kBAAkB;gBAC1B,KAAK,EAAE,IAAI,CAAC,2BAA2B,CAAC;aAC3C;SACJ;KACJ;IACD;QACI,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,EAAC,UAAU,EAAE,EAAE,EAAC,CAAC;QACvD,OAAO,EAAE;YACL;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;YACD;gBACI,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,KAAK;aACf;SACJ;QACD,OAAO,EAAE;YACL,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;SACnB;KACJ;CACJ,CAAC"}
|
@@ -1,13 +1,5 @@
|
|
1
1
|
import type { TenantMetricStats, TenantPoolsStats, TenantStorageStats } from '../../../../../store/reducers/tenants/utils';
|
2
2
|
import './MetricsCards.scss';
|
3
|
-
export interface TenantMetrics {
|
4
|
-
memoryUsed?: number;
|
5
|
-
memoryLimit?: number;
|
6
|
-
cpuUsed?: number;
|
7
|
-
cpuUsage?: number;
|
8
|
-
storageUsed?: number;
|
9
|
-
storageLimit?: number;
|
10
|
-
}
|
11
3
|
interface MetricsCardsProps {
|
12
4
|
poolsCpuStats?: TenantPoolsStats[];
|
13
5
|
memoryStats?: TenantMetricStats[];
|
@@ -1,121 +1,54 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import { Flex } from '@gravity-ui/uikit';
|
2
3
|
import { Link, useLocation } from 'react-router-dom';
|
3
4
|
import { parseQuery } from '../../../../../routes';
|
4
5
|
import { TENANT_METRICS_TABS_IDS } from '../../../../../store/reducers/tenant/constants';
|
5
|
-
import { METRIC_STATUS, MetricStatusToSeverity, } from '../../../../../store/reducers/tenants/contants';
|
6
|
-
import { getMetricStatusFromUsage } from '../../../../../store/reducers/tenants/utils';
|
7
|
-
import { formatBytes } from '../../../../../utils/bytesParsers';
|
8
6
|
import { cn } from '../../../../../utils/cn';
|
9
7
|
import { SHOW_NETWORK_UTILIZATION } from '../../../../../utils/constants';
|
10
|
-
import { formatStorageValues } from '../../../../../utils/dataFormatters/dataFormatters';
|
11
8
|
import { useSetting, useTypedSelector } from '../../../../../utils/hooks';
|
9
|
+
import { calculateMetricAggregates } from '../../../../../utils/metrics';
|
10
|
+
import { formatCoresLegend, formatStorageLegend, } from '../../../../../utils/metrics/formatMetricLegend';
|
12
11
|
import { TenantTabsGroups, getTenantPath } from '../../../TenantPages';
|
12
|
+
import { TabCard } from '../TabCard/TabCard';
|
13
13
|
import i18n from '../i18n';
|
14
|
-
import { MetricCard } from './MetricCard/MetricCard';
|
15
14
|
import './MetricsCards.scss';
|
16
|
-
const b = cn('metrics-cards');
|
15
|
+
const b = cn('tenant-metrics-cards');
|
17
16
|
export function MetricsCards({ poolsCpuStats, memoryStats, blobStorageStats, tabletStorageStats, networkStats, }) {
|
18
17
|
const location = useLocation();
|
19
18
|
const { metricsTab } = useTypedSelector((state) => state.tenant);
|
20
19
|
const queryParams = parseQuery(location);
|
21
|
-
// Allow tabs untoggle behaviour
|
22
|
-
const getTabIfNotActive = (tab) => {
|
23
|
-
if (tab === metricsTab) {
|
24
|
-
return '';
|
25
|
-
}
|
26
|
-
return tab;
|
27
|
-
};
|
28
20
|
const tabLinks = {
|
29
21
|
[TENANT_METRICS_TABS_IDS.cpu]: getTenantPath({
|
30
22
|
...queryParams,
|
31
|
-
[TenantTabsGroups.metricsTab]:
|
23
|
+
[TenantTabsGroups.metricsTab]: TENANT_METRICS_TABS_IDS.cpu,
|
32
24
|
}),
|
33
25
|
[TENANT_METRICS_TABS_IDS.storage]: getTenantPath({
|
34
26
|
...queryParams,
|
35
|
-
[TenantTabsGroups.metricsTab]:
|
27
|
+
[TenantTabsGroups.metricsTab]: TENANT_METRICS_TABS_IDS.storage,
|
36
28
|
}),
|
37
29
|
[TENANT_METRICS_TABS_IDS.memory]: getTenantPath({
|
38
30
|
...queryParams,
|
39
|
-
[TenantTabsGroups.metricsTab]:
|
31
|
+
[TenantTabsGroups.metricsTab]: TENANT_METRICS_TABS_IDS.memory,
|
40
32
|
}),
|
41
33
|
};
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
const
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
if (MetricStatusToSeverity[poolStatus] > MetricStatusToSeverity[status]) {
|
53
|
-
status = poolStatus;
|
54
|
-
}
|
55
|
-
return {
|
56
|
-
title: name,
|
57
|
-
value: used,
|
58
|
-
capacity: limit,
|
59
|
-
};
|
60
|
-
});
|
61
|
-
return (_jsx(MetricCard, { label: i18n('cards.cpu-label'), active: active, metrics: metrics, status: status }));
|
62
|
-
}
|
63
|
-
function StorageCard({ blobStorageStats = [], tabletStorageStats, active }) {
|
64
|
-
let status = METRIC_STATUS.Unspecified;
|
65
|
-
// Display tablet storage stats if limits are set and blob storage stats otherwise
|
66
|
-
const storageStats = tabletStorageStats || blobStorageStats;
|
67
|
-
const metrics = storageStats.map((metric) => {
|
68
|
-
const { name, used, limit, usage } = metric;
|
69
|
-
const metircStatus = getMetricStatusFromUsage(usage);
|
70
|
-
if (MetricStatusToSeverity[metircStatus] > MetricStatusToSeverity[status]) {
|
71
|
-
status = metircStatus;
|
72
|
-
}
|
73
|
-
return {
|
74
|
-
title: name,
|
75
|
-
value: used,
|
76
|
-
capacity: limit,
|
77
|
-
formatValues: formatStorageValues,
|
78
|
-
};
|
79
|
-
});
|
80
|
-
return (_jsx(MetricCard, { label: i18n('cards.storage-label'), active: active, metrics: metrics, status: status }));
|
81
|
-
}
|
82
|
-
function MemoryCard({ active, memoryStats = [] }) {
|
83
|
-
let status = METRIC_STATUS.Unspecified;
|
84
|
-
const metrics = memoryStats.map((metric) => {
|
85
|
-
const { name, used, limit, usage } = metric;
|
86
|
-
const metircStatus = getMetricStatusFromUsage(usage);
|
87
|
-
if (MetricStatusToSeverity[metircStatus] > MetricStatusToSeverity[status]) {
|
88
|
-
status = metircStatus;
|
89
|
-
}
|
90
|
-
return {
|
91
|
-
title: name,
|
92
|
-
value: used,
|
93
|
-
capacity: limit,
|
94
|
-
formatValues: formatStorageValues,
|
95
|
-
};
|
96
|
-
});
|
97
|
-
return (_jsx(MetricCard, { label: i18n('cards.memory-label'), active: active, metrics: metrics, status: status }));
|
98
|
-
}
|
99
|
-
function NetworkCard({ networkStats }) {
|
34
|
+
// Use only pools that directly indicate resources available to perform user queries
|
35
|
+
const cpuPools = (poolsCpuStats || []).filter((pool) => !(pool.name === 'Batch' || pool.name === 'IO'));
|
36
|
+
const cpuMetrics = calculateMetricAggregates(cpuPools);
|
37
|
+
// Calculate storage metrics using utility
|
38
|
+
const storageStats = tabletStorageStats || blobStorageStats || [];
|
39
|
+
const storageMetrics = calculateMetricAggregates(storageStats);
|
40
|
+
const storageGroupCount = storageStats.length;
|
41
|
+
// Calculate memory metrics using utility
|
42
|
+
const memoryMetrics = calculateMetricAggregates(memoryStats);
|
43
|
+
// Calculate network metrics using utility
|
100
44
|
const [showNetworkUtilization] = useSetting(SHOW_NETWORK_UTILIZATION);
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
status = metricStatus;
|
110
|
-
}
|
111
|
-
return {
|
112
|
-
title: formatBytes({ value: limit, withSpeedLabel: true }),
|
113
|
-
value: used,
|
114
|
-
capacity: limit,
|
115
|
-
percents: true,
|
116
|
-
withOverflow: true,
|
117
|
-
};
|
118
|
-
});
|
119
|
-
return (_jsx(MetricCard, { interactive: false, label: i18n('cards.network-label'), note: i18n('cards.network-note'), metrics: metrics, status: status }));
|
45
|
+
const networkMetrics = networkStats ? calculateMetricAggregates(networkStats) : null;
|
46
|
+
return (_jsxs(Flex, { className: b(), alignItems: "center", children: [_jsx("div", { className: b('link-container', {
|
47
|
+
active: metricsTab === TENANT_METRICS_TABS_IDS.cpu,
|
48
|
+
}), children: _jsx(Link, { to: tabLinks.cpu, className: b('link'), children: _jsx(TabCard, { label: i18n('cards.cpu-label'), sublabel: i18n('context_cpu-load'), value: cpuMetrics.totalUsed, limit: cpuMetrics.totalLimit, legendFormatter: formatCoresLegend, active: metricsTab === TENANT_METRICS_TABS_IDS.cpu, helpText: i18n('context_cpu-description') }) }) }), _jsx("div", { className: b('link-container', {
|
49
|
+
active: metricsTab === TENANT_METRICS_TABS_IDS.storage,
|
50
|
+
}), children: _jsx(Link, { to: tabLinks.storage, className: b('link'), children: _jsx(TabCard, { label: i18n('cards.storage-label'), sublabel: i18n('context_storage-groups', { count: storageGroupCount }), value: storageMetrics.totalUsed, limit: storageMetrics.totalLimit, legendFormatter: formatStorageLegend, active: metricsTab === TENANT_METRICS_TABS_IDS.storage, helpText: i18n('context_storage-description') }) }) }), _jsx("div", { className: b('link-container', {
|
51
|
+
active: metricsTab === TENANT_METRICS_TABS_IDS.memory,
|
52
|
+
}), children: _jsx(Link, { to: tabLinks.memory, className: b('link'), children: _jsx(TabCard, { label: i18n('cards.memory-label'), sublabel: i18n('context_memory-used'), value: memoryMetrics.totalUsed, limit: memoryMetrics.totalLimit, legendFormatter: formatStorageLegend, active: metricsTab === TENANT_METRICS_TABS_IDS.memory, helpText: i18n('context_memory-description') }) }) }), showNetworkUtilization && networkStats && networkMetrics && (_jsx("div", { className: b('link-container'), children: _jsx("div", { className: b('link'), children: _jsx(TabCard, { label: i18n('cards.network-label'), sublabel: i18n('context_network-evaluation'), value: networkMetrics.totalUsed, limit: networkMetrics.totalLimit, legendFormatter: formatStorageLegend, active: false, clickable: false, helpText: i18n('context_network-description') }) }) }))] }));
|
120
53
|
}
|
121
54
|
//# sourceMappingURL=MetricsCards.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MetricsCards.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,
|
1
|
+
{"version":3,"file":"MetricsCards.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.tsx"],"names":[],"mappings":"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"}
|
@@ -1,12 +1,226 @@
|
|
1
|
-
|
2
|
-
display: flex;
|
3
|
-
gap: 16px;
|
1
|
+
// Mixins for pseudo-element patterns
|
4
2
|
|
5
|
-
|
3
|
+
/**
|
4
|
+
* Base mixin for creating positioned pseudo-elements with consistent sizing
|
5
|
+
* Used as foundation for all tab filler pseudo-elements
|
6
|
+
* @param {string} $side - Which side to position the element (left|right)
|
7
|
+
* @param {length} $height - Height of the pseudo-element
|
8
|
+
*/
|
6
9
|
|
7
|
-
|
10
|
+
@mixin pseudo-base($side: left, $height: var(--tab-filler-size)) {
|
11
|
+
position: absolute;
|
12
|
+
top: 100%;
|
13
|
+
#{$side}: 0;
|
14
|
+
width: var(--tab-filler-size);
|
15
|
+
height: $height;
|
16
|
+
|
17
|
+
content: '';
|
18
|
+
|
19
|
+
background-color: var(--g-color-base-background);
|
20
|
+
}
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Creates a vertical filler for active tab states
|
24
|
+
* Used to extend the active tab's background below the container
|
25
|
+
* @param {string} $side - Which side to position the filler (left|right)
|
26
|
+
*/
|
27
|
+
|
28
|
+
@mixin pseudo-active-filler($side: left) {
|
29
|
+
@include pseudo-base($side, var(--g-spacing-3));
|
30
|
+
border-#{$side}: var(--tab-border-width) solid var(--g-color-line-generic);
|
31
|
+
}
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Creates a rounded corner filler for inactive tab states
|
35
|
+
* Provides visual separation between tabs with border and radius
|
36
|
+
* @param {string} $side - Which side to position the filler (left|right)
|
37
|
+
*/
|
38
|
+
|
39
|
+
@mixin pseudo-inactive-filler($side: left) {
|
40
|
+
border-top: var(--tab-border-width) solid var(--g-color-line-generic);
|
41
|
+
@include pseudo-base($side, var(--tab-filler-size));
|
42
|
+
border-#{$side}: var(--tab-border-width) solid var(--g-color-line-generic);
|
43
|
+
border-top-#{$side}-radius: var(--g-border-radius-s);
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Creates a simple background fill without borders
|
48
|
+
* Used as a background layer behind other pseudo-elements
|
49
|
+
* @param {string} $side - Which side to position the fill (left|right)
|
50
|
+
*/
|
51
|
+
|
52
|
+
@mixin pseudo-background-fill($side: left) {
|
53
|
+
@include pseudo-base($side, var(--tab-filler-size));
|
54
|
+
}
|
55
|
+
|
56
|
+
// Utility mixins for common patterns
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Consistent tab border styling for both active and inactive states
|
60
|
+
* Creates the characteristic tab shape with top and side borders only
|
61
|
+
* @param {color} $color - Border color to use
|
62
|
+
*/
|
63
|
+
|
64
|
+
@mixin tab-border-base($color) {
|
65
|
+
border: var(--tab-border-width) solid $color;
|
66
|
+
border-bottom: none;
|
67
|
+
border-radius: var(--g-border-radius-s) var(--g-border-radius-s) 0 0;
|
68
|
+
}
|
69
|
+
|
70
|
+
/**
|
71
|
+
* Complete edge filler system for first/last tabs
|
72
|
+
* Handles all pseudo-element states (active/inactive, ::before/::after)
|
73
|
+
* Creates the complex tab connection visuals for edge containers
|
74
|
+
* @param {string} $side - Which edge this applies to (left|right)
|
75
|
+
*/
|
76
|
+
|
77
|
+
@mixin tab-edge-filler($side) {
|
78
|
+
&.tenant-metrics-cards__link-container_active::after {
|
79
|
+
@include pseudo-active-filler($side);
|
80
|
+
}
|
81
|
+
|
82
|
+
&:not(.tenant-metrics-cards__link-container_active)::after {
|
83
|
+
@include pseudo-inactive-filler($side);
|
84
|
+
}
|
85
|
+
|
86
|
+
&:not(.tenant-metrics-cards__link-container_active)::before {
|
87
|
+
@include pseudo-background-fill($side);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
.tenant-metrics-cards {
|
92
|
+
// CSS Variables for consistent design system
|
93
|
+
--tab-border-width: 1px;
|
94
|
+
--tab-filler-size: 10px;
|
95
|
+
--tab-overlap: -1px;
|
96
|
+
--tab-lift-offset: -6px;
|
97
|
+
--tab-border-compensation: 1px;
|
98
|
+
--tab-adjusted-spacing: calc(var(--g-spacing-3) - var(--tab-border-width));
|
99
|
+
--z-tab-base: 100;
|
100
|
+
--z-tab-active: 110;
|
101
|
+
--g-border-radius-xxl: 12px;
|
102
|
+
|
103
|
+
// Fallback for browsers without :has() support
|
104
|
+
@supports not selector(:has(*)) {
|
105
|
+
&__link-container:not(:last-child) {
|
106
|
+
padding-right: var(--tab-adjusted-spacing);
|
107
|
+
|
108
|
+
border-right: var(--tab-border-width) solid var(--g-color-line-generic);
|
109
|
+
border-bottom-right-radius: var(--g-border-radius-xxl);
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
&__link {
|
8
114
|
text-decoration: none;
|
9
115
|
|
10
116
|
color: inherit;
|
117
|
+
|
118
|
+
&:hover {
|
119
|
+
text-decoration: none;
|
120
|
+
}
|
121
|
+
}
|
122
|
+
|
123
|
+
&__link-container {
|
124
|
+
position: relative;
|
125
|
+
z-index: var(--z-tab-base);
|
126
|
+
|
127
|
+
flex: 1;
|
128
|
+
|
129
|
+
margin-left: var(--tab-overlap);
|
130
|
+
padding: 0 var(--g-spacing-3) var(--g-spacing-3) var(--g-spacing-3);
|
131
|
+
|
132
|
+
border-bottom: var(--tab-border-width) solid var(--g-color-line-generic);
|
133
|
+
background: var(--g-color-base-background);
|
134
|
+
|
135
|
+
.tenant-tab-card__card-container {
|
136
|
+
border: 1px solid transparent;
|
137
|
+
border-top: none;
|
138
|
+
|
139
|
+
& > div {
|
140
|
+
transform: translateY(1px);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
&:nth-child(1) {
|
145
|
+
z-index: calc(var(--z-tab-base) + 3);
|
146
|
+
}
|
147
|
+
|
148
|
+
&:nth-child(2) {
|
149
|
+
z-index: calc(var(--z-tab-base) + 2);
|
150
|
+
}
|
151
|
+
|
152
|
+
&:nth-child(3) {
|
153
|
+
z-index: calc(var(--z-tab-base) + 1);
|
154
|
+
}
|
155
|
+
|
156
|
+
&:nth-child(4) {
|
157
|
+
z-index: calc(var(--z-tab-base) + 0);
|
158
|
+
}
|
159
|
+
|
160
|
+
// Reset edge padding for first/last elements
|
161
|
+
&:first-child {
|
162
|
+
margin-left: 0;
|
163
|
+
}
|
164
|
+
|
165
|
+
&:first-child {
|
166
|
+
padding-left: 0;
|
167
|
+
@include tab-edge-filler(left);
|
168
|
+
}
|
169
|
+
|
170
|
+
&:last-child {
|
171
|
+
margin-right: 0;
|
172
|
+
padding-right: 0;
|
173
|
+
@include tab-edge-filler(right);
|
174
|
+
}
|
175
|
+
}
|
176
|
+
|
177
|
+
&__link {
|
178
|
+
display: block;
|
179
|
+
}
|
180
|
+
|
181
|
+
// Active state styling
|
182
|
+
&__link-container_active {
|
183
|
+
z-index: var(--z-tab-active) !important;
|
184
|
+
|
185
|
+
padding: 0;
|
186
|
+
|
187
|
+
border-bottom: 0;
|
188
|
+
background: var(--g-color-base-background);
|
189
|
+
|
190
|
+
transform: translateY(var(--tab-lift-offset));
|
191
|
+
|
192
|
+
.tenant-tab-card__card-container {
|
193
|
+
border: none;
|
194
|
+
border-radius: var(--g-border-radius-xs);
|
195
|
+
|
196
|
+
& > div {
|
197
|
+
transform: translateY(0);
|
198
|
+
}
|
199
|
+
}
|
200
|
+
|
201
|
+
.tenant-metrics-cards__link {
|
202
|
+
padding-bottom: var(--tab-border-compensation);
|
203
|
+
@include tab-border-base(var(--g-color-line-generic));
|
204
|
+
}
|
205
|
+
}
|
206
|
+
|
207
|
+
// Adjacent tab styling (modern browsers with :has() support)
|
208
|
+
&__link-container:has(+ &__link-container_active) {
|
209
|
+
padding-right: var(--tab-adjusted-spacing);
|
210
|
+
|
211
|
+
border-right: var(--tab-border-width) solid var(--g-color-line-generic);
|
212
|
+
border-bottom-right-radius: var(--g-border-radius-xxl);
|
213
|
+
}
|
214
|
+
|
215
|
+
&__link-container_active + &__link-container {
|
216
|
+
padding-left: var(--tab-adjusted-spacing);
|
217
|
+
|
218
|
+
border-left: var(--tab-border-width) solid var(--g-color-line-generic);
|
219
|
+
border-bottom-left-radius: var(--g-border-radius-xxl);
|
220
|
+
}
|
221
|
+
|
222
|
+
// Reset padding for specific cases
|
223
|
+
&__link-container:not(:has(+ &__link-container_active)) {
|
224
|
+
padding-right: 0;
|
11
225
|
}
|
12
226
|
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import './TabCard.scss';
|
2
|
+
interface TabCardProps {
|
3
|
+
label: string;
|
4
|
+
sublabel?: string;
|
5
|
+
value: number;
|
6
|
+
limit: number;
|
7
|
+
active?: boolean;
|
8
|
+
helpText?: string;
|
9
|
+
clickable?: boolean;
|
10
|
+
legendFormatter: (params: {
|
11
|
+
value: number;
|
12
|
+
capacity: number;
|
13
|
+
}) => string;
|
14
|
+
}
|
15
|
+
export declare function TabCard({ label, sublabel, value, limit, active, helpText, clickable, legendFormatter, }: TabCardProps): import("react/jsx-runtime").JSX.Element;
|
16
|
+
export {};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import { Card, Flex } from '@gravity-ui/uikit';
|
3
|
+
import { DoughnutMetrics } from '../../../../../components/DoughnutMetrics/DoughnutMetrics';
|
4
|
+
import { getDiagramValues } from '../../../../../containers/Cluster/ClusterOverview/utils';
|
5
|
+
import { cn } from '../../../../../utils/cn';
|
6
|
+
import './TabCard.scss';
|
7
|
+
const b = cn('tenant-tab-card');
|
8
|
+
export function TabCard({ label, sublabel, value, limit, active, helpText, clickable = true, legendFormatter, }) {
|
9
|
+
const { status, percents, legend, fill } = getDiagramValues({
|
10
|
+
value,
|
11
|
+
capacity: limit,
|
12
|
+
legendFormatter,
|
13
|
+
});
|
14
|
+
return (_jsx("div", { className: b({ active }), children: _jsx(Card, { className: b('card-container', { active, clickable }), type: "container", view: active ? 'outlined' : 'raised', children: _jsxs(Flex, { gap: 3, alignItems: "center", children: [_jsx(DoughnutMetrics, { size: "small", status: status, fillWidth: fill, className: b('doughnut'), children: _jsx(DoughnutMetrics.Value, { variant: "subheader-1", children: percents }) }), _jsxs("div", { className: b('legend-wrapper'), children: [_jsx(DoughnutMetrics.Legend, { variant: "subheader-2", children: legend }), _jsx(DoughnutMetrics.Legend, { variant: "body-1", color: "secondary", note: helpText, noteIconSize: "s", children: sublabel || label })] })] }) }) }));
|
15
|
+
}
|
16
|
+
//# sourceMappingURL=TabCard.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TabCard.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/TabCard/TabCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAC,eAAe,EAAC,MAAM,2DAA2D,CAAC;AAC1F,OAAO,EAAC,gBAAgB,EAAC,MAAM,yDAAyD,CAAC;AACzF,OAAO,EAAC,EAAE,EAAC,MAAM,yBAAyB,CAAC;AAE3C,OAAO,gBAAgB,CAAC;AAExB,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAahC,MAAM,UAAU,OAAO,CAAC,EACpB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,IAAI,EAChB,eAAe,GACJ;IACX,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAC,GAAG,gBAAgB,CAAC;QACtD,KAAK;QACL,QAAQ,EAAE,KAAK;QACf,eAAe;KAClB,CAAC,CAAC;IAEH,OAAO,CACH,cAAK,SAAS,EAAE,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,YACvB,KAAC,IAAI,IACD,SAAS,EAAE,CAAC,CAAC,gBAAgB,EAAE,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,EACnD,IAAI,EAAC,WAAW,EAChB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,YAEpC,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,UAAU,EAAC,QAAQ,aAC7B,KAAC,eAAe,IACZ,IAAI,EAAC,OAAO,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,YAExB,KAAC,eAAe,CAAC,KAAK,IAAC,OAAO,EAAC,aAAa,YACvC,QAAQ,GACW,GACV,EAClB,eAAK,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,aAC/B,KAAC,eAAe,CAAC,MAAM,IAAC,OAAO,EAAC,aAAa,YACxC,MAAM,GACc,EACzB,KAAC,eAAe,CAAC,MAAM,IACnB,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAC,WAAW,EACjB,IAAI,EAAE,QAAQ,EACd,YAAY,EAAC,GAAG,YAEf,QAAQ,IAAI,KAAK,GACG,IACvB,IACH,GACJ,GACL,CACT,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
.tenant-tab-card {
|
2
|
+
border-radius: var(--g-border-radius-s);
|
3
|
+
|
4
|
+
&__card-container {
|
5
|
+
padding: var(--g-spacing-4);
|
6
|
+
|
7
|
+
border: 0;
|
8
|
+
border-radius: var(--g-border-radius-s);
|
9
|
+
}
|
10
|
+
|
11
|
+
&__card-container_clickable {
|
12
|
+
cursor: pointer;
|
13
|
+
|
14
|
+
// Smooth hover transition
|
15
|
+
transition: background-color 0.15s ease;
|
16
|
+
|
17
|
+
&:hover {
|
18
|
+
background-color: var(--g-color-base-float-hover);
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
&__card-container_active {
|
23
|
+
cursor: default !important;
|
24
|
+
|
25
|
+
&:hover {
|
26
|
+
background-color: transparent;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
import { jsx as _jsx
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
2
|
import React from 'react';
|
3
|
-
import { Flex } from '@gravity-ui/uikit';
|
4
|
-
import { StringParam, useQueryParam } from 'use-query-params';
|
5
3
|
import { MetricChart } from '../../../../../components/MetricChart';
|
6
|
-
import { TimeFrameSelector } from '../../../../../components/TimeFrameSelector/TimeFrameSelector';
|
7
4
|
import { cn } from '../../../../../utils/cn';
|
8
5
|
import { useAutoRefreshInterval } from '../../../../../utils/hooks';
|
9
6
|
import './TenantDashboard.scss';
|
@@ -12,7 +9,6 @@ const CHART_WIDTH_FULL = 872;
|
|
12
9
|
const b = cn('ydb-tenant-dashboard');
|
13
10
|
export const TenantDashboard = ({ database, charts }) => {
|
14
11
|
const [isDashboardHidden, setIsDashboardHidden] = React.useState(true);
|
15
|
-
const [timeFrame = '1h', setTimeframe] = useQueryParam('timeframe', StringParam);
|
16
12
|
const [autoRefreshInterval] = useAutoRefreshInterval();
|
17
13
|
// Refetch data only if dashboard successfully loaded
|
18
14
|
const shouldRefresh = isDashboardHidden ? 0 : autoRefreshInterval;
|
@@ -33,13 +29,9 @@ export const TenantDashboard = ({ database, charts }) => {
|
|
33
29
|
// If there is only one chart, display it with full width
|
34
30
|
const chartWidth = charts.length === 1 ? CHART_WIDTH_FULL : CHART_WIDTH;
|
35
31
|
const chartHeight = CHART_WIDTH / 1.5;
|
36
|
-
const renderChartToolbar = React.useCallback((chartConfig) => (_jsx(Flex, { className: b('toolbar'), justifyContent: "space-between", alignItems: "center", children: _jsx("div", { children: chartConfig.title }) })), []);
|
37
32
|
const renderContent = () => {
|
38
|
-
return charts.map((chartConfig) => {
|
39
|
-
const chartId = chartConfig.metrics.map(({ target }) => target).join('&');
|
40
|
-
return (_jsx(MetricChart, { database: database, metrics: chartConfig.metrics, timeFrame: timeFrame, chartOptions: chartConfig.options, autorefresh: shouldRefresh, width: chartWidth, height: chartHeight, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: !isDashboardHidden, renderChartToolbar: () => renderChartToolbar(chartConfig) }, chartId));
|
41
|
-
});
|
33
|
+
return charts.map((chartConfig, index) => (_jsx(MetricChart, { database: database, metrics: chartConfig.metrics, chartOptions: chartConfig.options, autorefresh: shouldRefresh, width: chartWidth, height: chartHeight, onChartDataStatusChange: handleChartDataStatusChange, isChartVisible: !isDashboardHidden, title: chartConfig.title }, index)));
|
42
34
|
};
|
43
|
-
return (
|
35
|
+
return (_jsx("div", { className: b(null), style: { display: isDashboardHidden ? 'none' : undefined }, children: _jsx("div", { className: b('charts'), children: renderContent() }) }));
|
44
36
|
};
|
45
37
|
//# sourceMappingURL=TenantDashboard.js.map
|
package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"TenantDashboard.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,
|
1
|
+
{"version":3,"file":"TenantDashboard.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Diagnostics/TenantOverview/TenantDashboard/TenantDashboard.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,WAAW,EAAC,MAAM,uCAAuC,CAAC;AAMlE,OAAO,EAAC,EAAE,EAAC,MAAM,yBAAyB,CAAC;AAC3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAElE,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;AAarC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAuB,EAAE,EAAE;IACxE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,IAAI,CAAC,CAAC;IAChF,MAAM,CAAC,mBAAmB,CAAC,GAAG,sBAAsB,EAAE,CAAC;IAEvD,qDAAqD;IACrD,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAElE;;;;;;;;OAQG;IACH,MAAM,2BAA2B,GAAG,CAAC,WAA4B,EAAE,EAAE;QACjE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACL,CAAC,CAAC;IAEF,yDAAyD;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,MAAM,WAAW,GAAG,WAAW,GAAG,GAAG,CAAC;IAEtC,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CACtC,KAAC,WAAW,IAER,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,CAAC,OAAO,EAC5B,YAAY,EAAE,WAAW,CAAC,OAAO,EACjC,WAAW,EAAE,aAAa,EAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,WAAW,EACnB,uBAAuB,EAAE,2BAA2B,EACpD,cAAc,EAAE,CAAC,iBAAiB,EAClC,KAAK,EAAE,WAAW,CAAC,KAAK,IATnB,KAAK,CAUZ,CACL,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO,CACH,cAAK,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAC,YAC7E,cAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAG,aAAa,EAAE,GAAO,GAClD,CACT,CAAC;AACN,CAAC,CAAC"}
|