ydb-embedded-ui 9.3.1 → 9.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AutoRefreshControl/i18n/index.d.ts +1 -1
- package/dist/components/Drawer/Drawer.d.ts +2 -1
- package/dist/components/Drawer/Drawer.js +4 -4
- package/dist/components/Drawer/Drawer.js.map +1 -1
- package/dist/{containers/Storage → components}/EmptyFilter/EmptyFilter.js +2 -2
- package/dist/components/EmptyFilter/EmptyFilter.js.map +1 -0
- package/dist/{containers/App → components/EmptyFilter}/i18n/index.js +1 -1
- package/dist/components/EmptyFilter/i18n/index.js.map +1 -0
- package/dist/components/EmptyState/EmptyState.d.ts +1 -0
- package/dist/components/EmptyState/EmptyState.js +1 -0
- package/dist/components/EmptyState/EmptyState.js.map +1 -1
- package/dist/components/EmptyState/EmptyState.scss +9 -0
- package/dist/components/EnableFullscreenButton/EnableFullscreenButton.js +3 -2
- package/dist/components/EnableFullscreenButton/EnableFullscreenButton.js.map +1 -1
- package/dist/components/EnableFullscreenButton/i18n/en.json +3 -0
- package/dist/components/EnableFullscreenButton/i18n/index.d.ts +2 -0
- package/dist/components/EnableFullscreenButton/i18n/index.js +5 -0
- package/dist/components/EnableFullscreenButton/i18n/index.js.map +1 -0
- package/dist/components/FixedHeightQuery/FixedHeightQuery.d.ts +9 -0
- package/dist/components/FixedHeightQuery/FixedHeightQuery.js +23 -0
- package/dist/components/FixedHeightQuery/FixedHeightQuery.js.map +1 -0
- package/dist/components/FixedHeightQuery/FixedHeightQuery.scss +42 -0
- package/dist/components/HealthcheckStatus/HealthcheckStatus.d.ts +8 -0
- package/dist/components/HealthcheckStatus/HealthcheckStatus.js +41 -0
- package/dist/components/HealthcheckStatus/HealthcheckStatus.js.map +1 -0
- package/dist/components/HealthcheckStatus/i18n/en.json +7 -0
- package/dist/components/HealthcheckStatus/i18n/index.d.ts +2 -0
- package/dist/components/HealthcheckStatus/i18n/index.js +5 -0
- package/dist/components/HealthcheckStatus/i18n/index.js.map +1 -0
- package/dist/components/ProgressViewer/ProgressViewer.d.ts +2 -1
- package/dist/components/ProgressViewer/ProgressViewer.js +3 -2
- package/dist/components/ProgressViewer/ProgressViewer.js.map +1 -1
- package/dist/components/SplitPane/SplitPane.scss +0 -1
- package/dist/containers/App/Content.js +18 -14
- package/dist/containers/App/Content.js.map +1 -1
- package/dist/containers/Clusters/Clusters.js +19 -7
- package/dist/containers/Clusters/Clusters.js.map +1 -1
- package/dist/containers/Clusters/Clusters.scss +7 -53
- package/dist/containers/Clusters/columns.d.ts +18 -1
- package/dist/containers/Clusters/columns.js +43 -9
- package/dist/containers/Clusters/columns.js.map +1 -1
- package/dist/containers/Clusters/i18n/en.json +3 -1
- package/dist/containers/Clusters/i18n/index.d.ts +1 -1
- package/dist/containers/Clusters/i18n/index.js +1 -2
- package/dist/containers/Clusters/i18n/index.js.map +1 -1
- package/dist/containers/Header/Header.d.ts +1 -5
- package/dist/containers/Header/Header.js +14 -10
- package/dist/containers/Header/Header.js.map +1 -1
- package/dist/containers/Header/Header.scss +1 -1
- package/dist/containers/Header/breadcrumbs.d.ts +3 -1
- package/dist/containers/Header/breadcrumbs.js +18 -6
- package/dist/containers/Header/breadcrumbs.js.map +1 -1
- package/dist/containers/Header/i18n/en.json +3 -1
- package/dist/containers/Header/i18n/index.d.ts +1 -1
- package/dist/containers/Operations/columns.js +2 -2
- package/dist/containers/Operations/columns.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorageGroupsTable/StorageGroupsEmptyDataMessage.js +1 -1
- package/dist/containers/Storage/PaginatedStorageGroupsTable/StorageGroupsEmptyDataMessage.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorageNodesTable/StorageNodesEmptyDataMessage.js +1 -1
- package/dist/containers/Storage/PaginatedStorageNodesTable/StorageNodesEmptyDataMessage.js.map +1 -1
- package/dist/containers/Tablet/components/TabletStorageInfo/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.js +30 -29
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckPreview.scss +41 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/en.json +8 -6
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.js +1 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/index.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.d.ts +3 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js +9 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricCard/MetricCard.scss +7 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.d.ts +2 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js +27 -8
- package/dist/containers/Tenant/Diagnostics/TenantOverview/MetricsCards/MetricsCards.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +5 -10
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.scss +1 -5
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json +2 -0
- package/dist/containers/Tenant/Diagnostics/TenantOverview/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js +11 -1
- package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueriesData.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopQueries/columns/columns.js +2 -3
- package/dist/containers/Tenant/Diagnostics/TopQueries/columns/columns.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopQueries/hooks/useScrollToSelected.d.ts +19 -0
- package/dist/containers/Tenant/Diagnostics/TopQueries/hooks/useScrollToSelected.js +31 -0
- package/dist/containers/Tenant/Diagnostics/TopQueries/hooks/useScrollToSelected.js.map +1 -0
- package/dist/containers/Tenant/Diagnostics/TopQueries/utils.js +1 -0
- package/dist/containers/Tenant/Diagnostics/TopQueries/utils.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/TopicData.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Healthcheck/Healthcheck.d.ts +9 -0
- package/dist/containers/Tenant/Healthcheck/Healthcheck.js +49 -0
- package/dist/containers/Tenant/Healthcheck/Healthcheck.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/Healthcheck.scss +112 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckFilter.d.ts +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckFilter.js +9 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckFilter.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.d.ts +7 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js +25 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/ComputeLocation.d.ts +9 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/ComputeLocation.js +67 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/ComputeLocation.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/HealthcheckIssueDetails.d.ts +6 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/HealthcheckIssueDetails.js +67 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/HealthcheckIssueDetails.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.d.ts +7 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.js +19 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.d.ts +6 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.js +12 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.d.ts +9 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js +95 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.d.ts +25 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.js +17 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.d.ts +8 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.js +23 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssues.d.ts +6 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssues.js +41 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssues.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckRefresh.d.ts +6 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckRefresh.js +47 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckRefresh.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckView.d.ts +8 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckView.js +42 -0
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckView.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/i18n/en.json +41 -0
- package/dist/containers/Tenant/Healthcheck/i18n/index.d.ts +2 -0
- package/dist/containers/Tenant/Healthcheck/i18n/index.js +5 -0
- package/dist/containers/Tenant/Healthcheck/i18n/index.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/shared.d.ts +11 -0
- package/dist/containers/Tenant/Healthcheck/shared.js +36 -0
- package/dist/containers/Tenant/Healthcheck/shared.js.map +1 -0
- package/dist/containers/Tenant/Healthcheck/useHealthcheck.d.ts +14 -0
- package/dist/containers/Tenant/Healthcheck/useHealthcheck.js +19 -0
- package/dist/containers/Tenant/Healthcheck/useHealthcheck.js.map +1 -0
- package/dist/containers/Tenant/Query/Preview/components/TopicPreview.js +1 -1
- package/dist/containers/Tenant/Query/Preview/components/TopicPreview.js.map +1 -1
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js +1 -1
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js.map +1 -1
- package/dist/containers/Tenant/Query/QueryResult/components/QueryInfoDropdown/useQueryInfoMenuItems.js +1 -1
- package/dist/containers/Tenant/Query/QueryResult/components/QueryInfoDropdown/useQueryInfoMenuItems.js.map +1 -1
- package/dist/containers/Tenant/Tenant.js +14 -25
- package/dist/containers/Tenant/Tenant.js.map +1 -1
- package/dist/containers/Tenant/TenantDrawerWrappers.d.ts +7 -0
- package/dist/containers/Tenant/TenantDrawerWrappers.js +47 -0
- package/dist/containers/Tenant/TenantDrawerWrappers.js.map +1 -0
- package/dist/containers/Tenant/TenantPages.d.ts +2 -0
- package/dist/containers/Tenant/TenantPages.js.map +1 -1
- package/dist/containers/Tenant/constants.d.ts +4 -0
- package/dist/containers/Tenant/constants.js +18 -0
- package/dist/containers/Tenant/constants.js.map +1 -0
- package/dist/containers/Tenant/i18n/en.json +7 -1
- package/dist/containers/Tenant/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/useTenantQueryParams.d.ts +12 -0
- package/dist/containers/Tenant/useTenantQueryParams.js +39 -0
- package/dist/containers/Tenant/useTenantQueryParams.js.map +1 -0
- package/dist/containers/Tenant/utils/schemaActions.js +2 -2
- package/dist/containers/Tenant/utils/schemaActions.js.map +1 -1
- package/dist/containers/UserSettings/i18n/en.json +1 -1
- package/dist/store/reducers/capabilities/hooks.d.ts +3 -0
- package/dist/store/reducers/capabilities/hooks.js +9 -0
- package/dist/store/reducers/capabilities/hooks.js.map +1 -1
- package/dist/store/reducers/clusters/selectors.d.ts +1 -2
- package/dist/store/reducers/clusters/selectors.js +0 -28
- package/dist/store/reducers/clusters/selectors.js.map +1 -1
- package/dist/store/reducers/clusters/types.d.ts +0 -10
- package/dist/store/reducers/header/types.d.ts +4 -2
- package/dist/store/reducers/healthcheckInfo/healthcheckInfo.d.ts +631 -331
- package/dist/store/reducers/healthcheckInfo/healthcheckInfo.js +8 -35
- package/dist/store/reducers/healthcheckInfo/healthcheckInfo.js.map +1 -1
- package/dist/store/reducers/healthcheckInfo/types.d.ts +2 -0
- package/dist/store/reducers/healthcheckInfo/utils.d.ts +3 -0
- package/dist/store/reducers/healthcheckInfo/utils.js +34 -0
- package/dist/store/reducers/healthcheckInfo/utils.js.map +1 -1
- package/dist/store/reducers/tenant/constants.d.ts +0 -1
- package/dist/store/reducers/tenant/constants.js +0 -1
- package/dist/store/reducers/tenant/constants.js.map +1 -1
- package/dist/store/reducers/tenants/utils.d.ts +2 -1
- package/dist/store/reducers/tenants/utils.js +15 -2
- package/dist/store/reducers/tenants/utils.js.map +1 -1
- package/dist/styles/index.scss +3 -0
- package/dist/types/api/capabilities.d.ts +1 -1
- package/dist/types/api/healthcheck.d.ts +80 -13
- package/dist/types/api/healthcheck.js +1 -0
- package/dist/types/api/healthcheck.js.map +1 -1
- package/dist/types/api/tenant.d.ts +4 -0
- package/dist/types/api/tenant.js.map +1 -1
- package/dist/uiFactory/types.d.ts +18 -0
- package/dist/uiFactory/uiFactory.d.ts +1 -1
- package/dist/uiFactory/uiFactory.js +6 -0
- package/dist/uiFactory/uiFactory.js.map +1 -1
- package/dist/utils/createToast.d.ts +2 -9
- package/dist/utils/createToast.js +5 -6
- package/dist/utils/createToast.js.map +1 -1
- package/package.json +1 -1
- package/dist/containers/App/i18n/en.json +0 -3
- package/dist/containers/App/i18n/index.d.ts +0 -2
- package/dist/containers/App/i18n/index.js.map +0 -1
- package/dist/containers/App/i18n/ru.json +0 -3
- package/dist/containers/Clusters/ClustersStatistics.d.ts +0 -7
- package/dist/containers/Clusters/ClustersStatistics.js +0 -10
- package/dist/containers/Clusters/ClustersStatistics.js.map +0 -1
- package/dist/containers/Clusters/i18n/ru.json +0 -15
- package/dist/containers/Storage/EmptyFilter/EmptyFilter.js.map +0 -1
- package/dist/containers/Storage/EmptyFilter/i18n/index.js +0 -6
- package/dist/containers/Storage/EmptyFilter/i18n/index.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/Healthcheck.scss +0 -106
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.d.ts +0 -6
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.js +0 -34
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/HealthcheckDetails.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.d.ts +0 -7
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.js +0 -37
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTree.scss +0 -51
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.d.ts +0 -10
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.js +0 -9
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/IssueTreeItem.scss +0 -50
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/index.d.ts +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/index.js +0 -2
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/IssuesViewer/IssueTreeItem/index.js.map +0 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/Healthcheck/i18n/ru.json +0 -8
- package/dist/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.d.ts +0 -15
- package/dist/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.js +0 -20
- package/dist/containers/Tenant/Diagnostics/TenantOverview/useHealthcheck.js.map +0 -1
- /package/dist/{containers/Storage → components}/EmptyFilter/EmptyFilter.d.ts +0 -0
- /package/dist/{containers/Storage → components}/EmptyFilter/i18n/en.json +0 -0
- /package/dist/{containers/Storage → components}/EmptyFilter/i18n/index.d.ts +0 -0
- /package/dist/{containers/Storage → components}/EmptyFilter/i18n/ru.json +0 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import { InternalLink } from '../../../../../components/InternalLink';
|
3
|
+
import { getDefaultNodePath } from '../../../../Node/NodePages';
|
4
|
+
import { useTenantQueryParams } from '../../../useTenantQueryParams';
|
5
|
+
import i18n from '../../i18n';
|
6
|
+
import { LocationDetails } from './utils';
|
7
|
+
export function NodeInfo({ node, title }) {
|
8
|
+
const { database } = useTenantQueryParams();
|
9
|
+
if (!node) {
|
10
|
+
return null;
|
11
|
+
}
|
12
|
+
const nodeLink = node.id ? (_jsx(InternalLink, { to: getDefaultNodePath(node.id, { database }), children: node.id })) : undefined;
|
13
|
+
return (_jsx(LocationDetails, { title: title, fields: [
|
14
|
+
{ value: nodeLink, title: i18n('label_node-id') },
|
15
|
+
{ value: node.host, title: i18n('label_node-host'), copy: node.host },
|
16
|
+
{ value: node.port, title: i18n('label_node-port') },
|
17
|
+
] }));
|
18
|
+
}
|
19
|
+
//# sourceMappingURL=NodeInfo.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"NodeInfo.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/NodeInfo.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,wCAAwC,CAAC;AAEpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAC,oBAAoB,EAAC,MAAM,+BAA+B,CAAC;AACnE,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAOxC,MAAM,UAAU,QAAQ,CAAC,EAAC,IAAI,EAAE,KAAK,EAAgB;IACjD,MAAM,EAAC,QAAQ,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CACvB,KAAC,YAAY,IAAC,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAC,QAAQ,EAAC,CAAC,YAAG,IAAI,CAAC,EAAE,GAAgB,CACtF,CAAC,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,CACH,KAAC,eAAe,IACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE;YACJ,EAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,EAAC;YAC/C,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC;YACnE,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAC;SACrD,GACH,CACL,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import type { Location } from '../../../../../types/api/healthcheck';
|
2
|
+
interface PoolInfoProps {
|
3
|
+
location?: Location['storage'] | Location['compute'];
|
4
|
+
}
|
5
|
+
export declare function PoolInfo({ location }: PoolInfoProps): import("react/jsx-runtime").JSX.Element | null;
|
6
|
+
export {};
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import i18n from '../../i18n';
|
3
|
+
import { LocationDetails } from './utils';
|
4
|
+
export function PoolInfo({ location }) {
|
5
|
+
const { pool } = location !== null && location !== void 0 ? location : {};
|
6
|
+
const { name } = pool !== null && pool !== void 0 ? pool : {};
|
7
|
+
if (!name) {
|
8
|
+
return null;
|
9
|
+
}
|
10
|
+
return _jsx(LocationDetails, { fields: [{ value: name, title: i18n('label_pool-name') }] });
|
11
|
+
}
|
12
|
+
//# sourceMappingURL=PoolInfo.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"PoolInfo.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/PoolInfo.tsx"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,YAAY,CAAC;AAE9B,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAMxC,MAAM,UAAU,QAAQ,CAAC,EAAC,QAAQ,EAAgB;IAC9C,MAAM,EAAC,IAAI,EAAC,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,CAAC;IAC9B,MAAM,EAAC,IAAI,EAAC,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;IAE1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,KAAC,eAAe,IAAC,MAAM,EAAE,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAC,CAAC,GAAI,CAAC;AACxF,CAAC"}
|
package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.d.ts
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
import type { Location } from '../../../../../types/api/healthcheck';
|
2
|
+
export type LocationFieldStorage = 'pool' | 'node' | 'pdisk' | 'vdisk' | 'group';
|
3
|
+
type StorageLocationType = Location['storage'];
|
4
|
+
interface StorageLocationProps {
|
5
|
+
location: StorageLocationType;
|
6
|
+
hiddenFields?: LocationFieldStorage[];
|
7
|
+
}
|
8
|
+
export declare function StorageLocation({ location, hiddenFields }: StorageLocationProps): import("react/jsx-runtime").JSX.Element | null;
|
9
|
+
export {};
|
package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { Flex } from '@gravity-ui/uikit';
|
4
|
+
import { isEmpty } from 'lodash';
|
5
|
+
import { InternalLink } from '../../../../../components/InternalLink';
|
6
|
+
import { getPDiskPagePath, getVDiskPagePath } from '../../../../../routes';
|
7
|
+
import i18n from '../../i18n';
|
8
|
+
import { NodeInfo } from './NodeInfo';
|
9
|
+
import { PoolInfo } from './PoolInfo';
|
10
|
+
import { IdList, LocationDetails, SectionWithTitle } from './utils';
|
11
|
+
const LocationFieldRenderer = {
|
12
|
+
node: (location) => _jsx(NodeInfo, { node: location === null || location === void 0 ? void 0 : location.node }, "node"),
|
13
|
+
pool: (location) => _jsx(PoolInfo, { location: location }, "pool"),
|
14
|
+
group: (location) => _jsx(GroupInfo, { location: location }, "group"),
|
15
|
+
vdisk: (location) => _jsx(VDiskInfo, { location: location }, "vdisk"),
|
16
|
+
pdisk: (location) => _jsx(PDiskInfo, { location: location }, "pdisk"),
|
17
|
+
};
|
18
|
+
export function StorageLocation({ location, hiddenFields = [] }) {
|
19
|
+
const { node, pool } = location !== null && location !== void 0 ? location : {};
|
20
|
+
const { group } = pool !== null && pool !== void 0 ? pool : {};
|
21
|
+
const { vdisk } = group !== null && group !== void 0 ? group : {};
|
22
|
+
const { pdisk } = vdisk !== null && vdisk !== void 0 ? vdisk : {};
|
23
|
+
const fields = React.useMemo(() => {
|
24
|
+
const fields = [];
|
25
|
+
if (node) {
|
26
|
+
fields.push('node');
|
27
|
+
}
|
28
|
+
if (pool) {
|
29
|
+
fields.push('pool');
|
30
|
+
}
|
31
|
+
if (group) {
|
32
|
+
fields.push('group');
|
33
|
+
}
|
34
|
+
if (vdisk) {
|
35
|
+
fields.push('vdisk');
|
36
|
+
}
|
37
|
+
if (pdisk) {
|
38
|
+
fields.push('pdisk');
|
39
|
+
}
|
40
|
+
return fields.filter((field) => !hiddenFields.includes(field));
|
41
|
+
}, [node, pool, group, vdisk, pdisk, hiddenFields]);
|
42
|
+
if (!location || isEmpty(location) || fields.length === 0) {
|
43
|
+
return null;
|
44
|
+
}
|
45
|
+
return (_jsx(SectionWithTitle, { title: i18n('label_storage_location'), titleVariant: "subheader-2", children: _jsx(Flex, { direction: "column", gap: 2, children: fields.map((field) => LocationFieldRenderer[field](location)) }) }));
|
46
|
+
}
|
47
|
+
function GroupInfo({ location }) {
|
48
|
+
const { pool } = location !== null && location !== void 0 ? location : {};
|
49
|
+
const { group } = pool !== null && pool !== void 0 ? pool : {};
|
50
|
+
const ids = group === null || group === void 0 ? void 0 : group.id;
|
51
|
+
if (!(ids === null || ids === void 0 ? void 0 : ids.length)) {
|
52
|
+
return null;
|
53
|
+
}
|
54
|
+
return (_jsx(LocationDetails, { fields: [
|
55
|
+
{
|
56
|
+
value: (ids === null || ids === void 0 ? void 0 : ids.length) ? _jsx(IdList, { ids: ids }) : undefined,
|
57
|
+
title: i18n('label_group-id'),
|
58
|
+
},
|
59
|
+
] }));
|
60
|
+
}
|
61
|
+
function VDiskInfo({ location }) {
|
62
|
+
const { node, pool } = location !== null && location !== void 0 ? location : {};
|
63
|
+
const { group } = pool !== null && pool !== void 0 ? pool : {};
|
64
|
+
const { vdisk } = group !== null && group !== void 0 ? group : {};
|
65
|
+
const ids = vdisk === null || vdisk === void 0 ? void 0 : vdisk.id;
|
66
|
+
if (!(ids === null || ids === void 0 ? void 0 : ids.length)) {
|
67
|
+
return null;
|
68
|
+
}
|
69
|
+
return (_jsx(LocationDetails, { fields: [
|
70
|
+
{
|
71
|
+
value: (ids === null || ids === void 0 ? void 0 : ids.length) ? (_jsx(IdList, { ids: ids, renderItem: (id) => (_jsx(InternalLink, { to: getVDiskPagePath({
|
72
|
+
vDiskId: id,
|
73
|
+
nodeId: node === null || node === void 0 ? void 0 : node.id,
|
74
|
+
}), children: id })) })) : undefined,
|
75
|
+
title: i18n('label_vdisk-id'),
|
76
|
+
},
|
77
|
+
] }));
|
78
|
+
}
|
79
|
+
function PDiskInfo({ location }) {
|
80
|
+
const { node, pool } = location !== null && location !== void 0 ? location : {};
|
81
|
+
const { group } = pool !== null && pool !== void 0 ? pool : {};
|
82
|
+
const { vdisk } = group !== null && group !== void 0 ? group : {};
|
83
|
+
const { pdisk } = vdisk !== null && vdisk !== void 0 ? vdisk : {};
|
84
|
+
if (!(pdisk === null || pdisk === void 0 ? void 0 : pdisk.length)) {
|
85
|
+
return null;
|
86
|
+
}
|
87
|
+
return pdisk.map((disk) => (_jsx(LocationDetails, { fields: [
|
88
|
+
{
|
89
|
+
value: disk.id && (node === null || node === void 0 ? void 0 : node.id) ? (_jsx(InternalLink, { to: getPDiskPagePath(disk.id, node.id), children: disk.id })) : (disk.id),
|
90
|
+
title: i18n('label_pdisk-id'),
|
91
|
+
},
|
92
|
+
{ value: disk.path, title: i18n('label_pdisk-path') },
|
93
|
+
] }, disk.id)));
|
94
|
+
}
|
95
|
+
//# sourceMappingURL=StorageLocation.js.map
|
package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"StorageLocation.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type { FlexProps, TextProps } from '@gravity-ui/uikit';
|
3
|
+
interface SectionWithTitleProps {
|
4
|
+
title?: string;
|
5
|
+
children: React.ReactNode;
|
6
|
+
titleVariant?: TextProps['variant'];
|
7
|
+
gap?: FlexProps['gap'];
|
8
|
+
}
|
9
|
+
export declare function SectionWithTitle({ title, children, titleVariant, gap, }: SectionWithTitleProps): import("react/jsx-runtime").JSX.Element;
|
10
|
+
interface LocationDetailsProps {
|
11
|
+
title?: string;
|
12
|
+
fields: {
|
13
|
+
value?: React.ReactNode;
|
14
|
+
title: string;
|
15
|
+
copy?: string;
|
16
|
+
}[];
|
17
|
+
titleVariant?: TextProps['variant'];
|
18
|
+
}
|
19
|
+
export declare function LocationDetails({ title, fields, titleVariant }: LocationDetailsProps): import("react/jsx-runtime").JSX.Element | null;
|
20
|
+
interface IdListProps {
|
21
|
+
ids: string[];
|
22
|
+
renderItem?: (id: string) => React.ReactNode;
|
23
|
+
}
|
24
|
+
export declare function IdList({ ids, renderItem }: IdListProps): import("react/jsx-runtime").JSX.Element;
|
25
|
+
export {};
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { DefinitionList, Flex, Text } from '@gravity-ui/uikit';
|
4
|
+
export function SectionWithTitle({ title, children, titleVariant = 'body-2', gap = 2, }) {
|
5
|
+
return (_jsxs(Flex, { direction: "column", gap: gap, children: [title && _jsx(Text, { variant: titleVariant, children: title }), children] }));
|
6
|
+
}
|
7
|
+
export function LocationDetails({ title, fields, titleVariant }) {
|
8
|
+
const filteredFields = fields.filter((f) => f.value);
|
9
|
+
if (filteredFields.length === 0) {
|
10
|
+
return null;
|
11
|
+
}
|
12
|
+
return (_jsx(SectionWithTitle, { title: title, titleVariant: titleVariant, children: _jsx(DefinitionList, { nameMaxWidth: 200, children: filteredFields.map((field) => (_jsx(DefinitionList.Item, { name: field.title, copyText: field.copy, children: field.value }, field.title))) }) }));
|
13
|
+
}
|
14
|
+
export function IdList({ ids, renderItem }) {
|
15
|
+
return (_jsx(Flex, { direction: "column", gap: 1, children: ids.map((id) => (_jsx(React.Fragment, { children: renderItem ? renderItem(id) : id }, id))) }));
|
16
|
+
}
|
17
|
+
//# sourceMappingURL=utils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/utils.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,cAAc,EAAE,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAS7D,MAAM,UAAU,gBAAgB,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,YAAY,GAAG,QAAQ,EACvB,GAAG,GAAG,CAAC,GACa;IACpB,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,GAAG,aAC5B,KAAK,IAAI,KAAC,IAAI,IAAC,OAAO,EAAE,YAAY,YAAG,KAAK,GAAQ,EACpD,QAAQ,IACN,CACV,CAAC;AACN,CAAC;AAQD,MAAM,UAAU,eAAe,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAuB;IAC/E,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAErD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,gBAAgB,IAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,YACtD,KAAC,cAAc,IAAC,YAAY,EAAE,GAAG,YAC5B,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC3B,KAAC,cAAc,CAAC,IAAI,IAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAoB,QAAQ,EAAE,KAAK,CAAC,IAAI,YACzE,KAAK,CAAC,KAAK,IAD6B,KAAK,CAAC,KAAK,CAElC,CACzB,CAAC,GACW,GACF,CACtB,CAAC;AACN,CAAC;AAOD,MAAM,UAAU,MAAM,CAAC,EAAC,GAAG,EAAE,UAAU,EAAc;IACjD,OAAO,CACH,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,YAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CACb,KAAC,KAAK,CAAC,QAAQ,cAAW,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAArC,EAAE,CAAqD,CAC/E,CAAC,GACC,CACV,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import type { IssuesTree } from '../../../../store/reducers/healthcheckInfo/types';
|
2
|
+
interface HealthcheckIssueTabsProps {
|
3
|
+
parents: IssuesTree[];
|
4
|
+
selectedTab: string;
|
5
|
+
setSelectedTab: (tab: string) => void;
|
6
|
+
}
|
7
|
+
export declare function HealthcheckIssueTabs({ parents, selectedTab, setSelectedTab, }: HealthcheckIssueTabsProps): import("react/jsx-runtime").JSX.Element | null;
|
8
|
+
export {};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import { Flex, Text } from '@gravity-ui/uikit';
|
3
|
+
import { b } from '../shared';
|
4
|
+
function getTypeText(type) {
|
5
|
+
const normalizedType = type.split('_').join(' ');
|
6
|
+
let result = normalizedType.charAt(0).toUpperCase() + normalizedType.slice(1).toLowerCase();
|
7
|
+
result = result.replace(/\bvdisk\b/gi, 'VDisk').replace(/\bpdisk\b/gi, 'PDisk');
|
8
|
+
return result;
|
9
|
+
}
|
10
|
+
export function HealthcheckIssueTabs({ parents, selectedTab, setSelectedTab, }) {
|
11
|
+
//parent.length === 1 means that it's only issue itself, no need to render tabs
|
12
|
+
if (parents.length <= 1) {
|
13
|
+
return null;
|
14
|
+
}
|
15
|
+
return (_jsx(Flex, { gap: 2, wrap: "nowrap", children: parents.map((parent, index) => (_jsxs(Flex, { gap: 2, wrap: "nowrap", children: [_jsx(HealthcjeckIssueTab, { active: parent.id === selectedTab, onClick: () => setSelectedTab(parent.id), children: _jsxs(Flex, { gap: 2, wrap: "nowrap", alignItems: "center", children: [_jsx(TabStatus, { status: parent.status }), getTypeText(parent.type)] }) }), index !== parents.length - 1 && _jsx(Text, { color: "secondary", children: "/" })] }, parent.id))) }));
|
16
|
+
}
|
17
|
+
function HealthcjeckIssueTab({ children, active, onClick }) {
|
18
|
+
return (_jsx(Text, { variant: "body-2", color: active ? 'primary' : 'secondary', className: b('issue-tab', { active }), onClick: onClick, children: children }));
|
19
|
+
}
|
20
|
+
function TabStatus({ status }) {
|
21
|
+
return _jsx("div", { className: b('tab-status', { [status.toLowerCase()]: true }) });
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=HealthcheckIssueTabs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"HealthcheckIssueTabs.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssueTabs.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAI7C,OAAO,EAAC,CAAC,EAAC,MAAM,WAAW,CAAC;AAE5B,SAAS,WAAW,CAAC,IAAY;IAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5F,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC;AAClB,CAAC;AAQD,MAAM,UAAU,oBAAoB,CAAC,EACjC,OAAO,EACP,WAAW,EACX,cAAc,GACU;IACxB,+EAA+E;IAC/E,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAC,QAAQ,YACtB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAkB,IAAI,EAAC,QAAQ,aACvC,KAAC,mBAAmB,IAChB,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,WAAW,EACjC,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,YAExC,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,aAC3C,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAI,EACnC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IACtB,GACW,EACrB,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,kBAAS,KAVlD,MAAM,CAAC,EAAE,CAWrB,CACV,CAAC,GACC,CACV,CAAC;AACN,CAAC;AAQD,SAAS,mBAAmB,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAA2B;IAC9E,OAAO,CACH,KAAC,IAAI,IACD,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EACvC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,EAAC,MAAM,EAAC,CAAC,EACnC,OAAO,EAAE,OAAO,YAEf,QAAQ,GACN,CACV,CAAC;AACN,CAAC;AAMD,SAAS,SAAS,CAAC,EAAC,MAAM,EAAiB;IACvC,OAAO,cAAK,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE,EAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAC,CAAC,GAAI,CAAC;AAC/E,CAAC"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import type { IssuesTree } from '../../../../store/reducers/healthcheckInfo/types';
|
2
|
+
interface IssuesProps {
|
3
|
+
issues: IssuesTree[];
|
4
|
+
}
|
5
|
+
export declare function Issues({ issues }: IssuesProps): import("react/jsx-runtime").JSX.Element | import("react/jsx-runtime").JSX.Element[];
|
6
|
+
export {};
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { NoSearchResults } from '@gravity-ui/illustrations';
|
4
|
+
import { Flex } from '@gravity-ui/uikit';
|
5
|
+
import { EmptyState } from '../../../../components/EmptyState';
|
6
|
+
import { useTenantQueryParams } from '../../useTenantQueryParams';
|
7
|
+
import i18n from '../i18n';
|
8
|
+
import { HealthcheckIssue } from './HealthcheckIssue';
|
9
|
+
export function Issues({ issues }) {
|
10
|
+
const { view, issuesFilter } = useTenantQueryParams();
|
11
|
+
const filteredIssues = React.useMemo(() => {
|
12
|
+
const normalizedFilter = issuesFilter === null || issuesFilter === void 0 ? void 0 : issuesFilter.toLowerCase().trim();
|
13
|
+
if (!normalizedFilter) {
|
14
|
+
return issues;
|
15
|
+
}
|
16
|
+
return issues.filter((issue) => {
|
17
|
+
const stack = Object.values(issue);
|
18
|
+
while (stack.length) {
|
19
|
+
const value = stack.pop();
|
20
|
+
if (typeof value === 'object') {
|
21
|
+
stack.push(...Object.values(value));
|
22
|
+
}
|
23
|
+
else if (String(value).toLowerCase().includes(normalizedFilter)) {
|
24
|
+
return true;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
return false;
|
28
|
+
});
|
29
|
+
}, [issues, issuesFilter]);
|
30
|
+
const filteredIssuesCurrentView = React.useMemo(() => view
|
31
|
+
? filteredIssues.filter((issue) => {
|
32
|
+
const type = issue.firstParentType || issue.type;
|
33
|
+
return type.toLowerCase().startsWith(view);
|
34
|
+
})
|
35
|
+
: [], [filteredIssues, view]);
|
36
|
+
if (filteredIssuesCurrentView.length === 0) {
|
37
|
+
return (_jsx(Flex, { grow: 1, justifyContent: "center", alignItems: "center", children: _jsx(EmptyState, { image: _jsx(NoSearchResults, { width: 100, height: 100 }), position: "center", size: "xs", title: i18n('label_no-issues'), description: i18n('description_no-issues') }) }));
|
38
|
+
}
|
39
|
+
return filteredIssuesCurrentView.map((issue) => (_jsx(HealthcheckIssue, { issue: issue, expanded: Boolean(issuesFilter) }, issue.id + Boolean(issuesFilter))));
|
40
|
+
}
|
41
|
+
//# sourceMappingURL=HealthcheckIssues.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"HealthcheckIssues.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckIssues.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAC,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEvC,OAAO,EAAC,UAAU,EAAC,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAChE,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAMpD,MAAM,UAAU,MAAM,CAAC,EAAC,MAAM,EAAc;IACxC,MAAM,EAAC,IAAI,EAAE,YAAY,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAEpD,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtC,MAAM,gBAAgB,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,WAAW,GAAG,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACxC,CAAC;qBAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAChE,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3B,MAAM,yBAAyB,GAAG,KAAK,CAAC,OAAO,CAC3C,GAAG,EAAE,CACD,IAAI;QACA,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC;YACjD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC;QACJ,CAAC,CAAC,EAAE,EACZ,CAAC,cAAc,EAAE,IAAI,CAAC,CACzB,CAAC;IAEF,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CACH,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,EAAE,cAAc,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,YACtD,KAAC,UAAU,IACP,KAAK,EAAE,KAAC,eAAe,IAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAI,EACnD,QAAQ,EAAC,QAAQ,EACjB,IAAI,EAAC,IAAI,EACT,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAC9B,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC,GAC5C,GACC,CACV,CAAC;IACN,CAAC;IAED,OAAO,yBAAyB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5C,KAAC,gBAAgB,IACb,KAAK,EAAE,KAAK,EAEZ,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,IAD1B,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAEvC,CACL,CAAC,CAAC;AACP,CAAC"}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { duration } from '@gravity-ui/date-utils';
|
4
|
+
import { ArrowsRotateLeft } from '@gravity-ui/icons';
|
5
|
+
import { ActionTooltip, Button, Flex, Text } from '@gravity-ui/uikit';
|
6
|
+
import { isNil } from 'lodash';
|
7
|
+
import { DAY_IN_SECONDS, HOUR_IN_SECONDS, SECOND_IN_MS } from '../../../../utils/constants';
|
8
|
+
import i18n from '../i18n';
|
9
|
+
function getPassedMilliseconds(lastFullfiled = 0) {
|
10
|
+
return Date.now() - lastFullfiled;
|
11
|
+
}
|
12
|
+
export function HealthcheckRefresh({ lastFullfiled, refresh }) {
|
13
|
+
const [passedFromLastFullfiled, setPassedFromLastFullfiled] = React.useState(getPassedMilliseconds(lastFullfiled));
|
14
|
+
React.useEffect(() => {
|
15
|
+
setPassedFromLastFullfiled(getPassedMilliseconds(lastFullfiled));
|
16
|
+
const interval = setInterval(() => {
|
17
|
+
setPassedFromLastFullfiled(getPassedMilliseconds(lastFullfiled));
|
18
|
+
}, 60 * SECOND_IN_MS);
|
19
|
+
return () => clearInterval(interval);
|
20
|
+
}, [lastFullfiled]);
|
21
|
+
const renderPassedFromLastFullfiled = () => {
|
22
|
+
if (isNil(lastFullfiled)) {
|
23
|
+
return null;
|
24
|
+
}
|
25
|
+
const showHours = passedFromLastFullfiled > HOUR_IN_SECONDS * SECOND_IN_MS;
|
26
|
+
const showDays = passedFromLastFullfiled > DAY_IN_SECONDS * SECOND_IN_MS;
|
27
|
+
const preparedDuration = duration(passedFromLastFullfiled);
|
28
|
+
let durationText = '';
|
29
|
+
if (showDays) {
|
30
|
+
const days = preparedDuration.asDays();
|
31
|
+
durationText = i18n('description_days', { count: Math.round(days) });
|
32
|
+
}
|
33
|
+
else if (showHours) {
|
34
|
+
const hours = preparedDuration.asHours();
|
35
|
+
durationText = i18n('description_hours', { count: Math.round(hours) });
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
const minutes = preparedDuration.asMinutes();
|
39
|
+
durationText = i18n('description_minutes', { count: Math.round(minutes) });
|
40
|
+
}
|
41
|
+
return _jsx(Text, { color: "secondary", children: durationText });
|
42
|
+
};
|
43
|
+
return (_jsxs(Flex, { gap: 2, alignItems: "center", children: [renderPassedFromLastFullfiled(), _jsx(ActionTooltip, { title: i18n('action_refresh'), children: _jsx(Button, { view: "outlined", onClick: () => {
|
44
|
+
refresh();
|
45
|
+
}, children: _jsx(Button.Icon, { children: _jsx(ArrowsRotateLeft, {}) }) }) })] }));
|
46
|
+
}
|
47
|
+
//# sourceMappingURL=HealthcheckRefresh.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"HealthcheckRefresh.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckRefresh.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import type { CommonIssueType } from '../shared';
|
2
|
+
interface HealthcheckViewProps<T extends string = CommonIssueType> {
|
3
|
+
issuesCount: Record<T, number>;
|
4
|
+
viewTitles?: Record<T, string>;
|
5
|
+
sortOrder?: T[];
|
6
|
+
}
|
7
|
+
export declare function HealthcheckView({ issuesCount, viewTitles, sortOrder, }: HealthcheckViewProps): import("react/jsx-runtime").JSX.Element;
|
8
|
+
export {};
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import React from 'react';
|
3
|
+
import { RadioButton, Text } from '@gravity-ui/uikit';
|
4
|
+
import { uiFactory } from '../../../../uiFactory/uiFactory';
|
5
|
+
import { useTenantQueryParams } from '../../useTenantQueryParams';
|
6
|
+
import { b } from '../shared';
|
7
|
+
const HealthcheckViewValues = {
|
8
|
+
storage: 'storage',
|
9
|
+
compute: 'compute',
|
10
|
+
};
|
11
|
+
export function HealthcheckView({ issuesCount, viewTitles = uiFactory.healthcheck.getHealthckechViewTitles(), sortOrder = uiFactory.healthcheck.getHealthcheckViewsOrder(), }) {
|
12
|
+
const { view, handleHealthcheckViewChange, handleIssuesFilterChange } = useTenantQueryParams();
|
13
|
+
const issuesTypes = React.useMemo(() => Object.keys(issuesCount), [issuesCount]);
|
14
|
+
React.useEffect(() => {
|
15
|
+
if (view) {
|
16
|
+
return;
|
17
|
+
}
|
18
|
+
if (issuesCount[HealthcheckViewValues.storage]) {
|
19
|
+
handleHealthcheckViewChange(HealthcheckViewValues.storage);
|
20
|
+
}
|
21
|
+
else if (issuesCount[HealthcheckViewValues.compute]) {
|
22
|
+
handleHealthcheckViewChange(HealthcheckViewValues.compute);
|
23
|
+
}
|
24
|
+
else {
|
25
|
+
const firstIssueTypeWithIssues = sortOrder.find((issueType) => issuesCount[issueType] > 0);
|
26
|
+
handleHealthcheckViewChange(firstIssueTypeWithIssues);
|
27
|
+
}
|
28
|
+
}, [view, handleHealthcheckViewChange, issuesCount, issuesTypes, sortOrder]);
|
29
|
+
const renderCount = (view) => {
|
30
|
+
var _a;
|
31
|
+
return _jsx(Text, { color: "secondary", children: (_a = issuesCount[view]) !== null && _a !== void 0 ? _a : 0 });
|
32
|
+
};
|
33
|
+
const renderHealthcheckViewOption = (view) => {
|
34
|
+
var _a;
|
35
|
+
return (_jsxs(RadioButton.Option, { value: view, children: [(_a = viewTitles[view]) !== null && _a !== void 0 ? _a : view, "\u00A0", renderCount(view)] }, view));
|
36
|
+
};
|
37
|
+
return (_jsx(RadioButton, { value: view, onUpdate: (newView) => {
|
38
|
+
handleHealthcheckViewChange(newView);
|
39
|
+
handleIssuesFilterChange('');
|
40
|
+
}, className: b('control-wrapper'), children: sortOrder.map((type) => renderHealthcheckViewOption(type)) }));
|
41
|
+
}
|
42
|
+
//# sourceMappingURL=HealthcheckView.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"HealthcheckView.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/components/HealthcheckView.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,WAAW,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAC,SAAS,EAAC,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAC,CAAC,EAAC,MAAM,WAAW,CAAC;AAE5B,MAAM,qBAAqB,GAAoC;IAC3D,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACrB,CAAC;AAQF,MAAM,UAAU,eAAe,CAAC,EAC5B,WAAW,EACX,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,wBAAwB,EAAE,EAC7D,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,wBAAwB,EAAE,GACzC;IACnB,MAAM,EAAC,IAAI,EAAE,2BAA2B,EAAE,wBAAwB,EAAC,GAAG,oBAAoB,EAAE,CAAC;IAE7F,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAEjF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,IAAI,EAAE,CAAC;YACP,OAAO;QACX,CAAC;QACD,IAAI,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,2BAA2B,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,2BAA2B,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,MAAM,wBAAwB,GAAG,SAAS,CAAC,IAAI,CAC3C,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAC5C,CAAC;YACF,2BAA2B,CAAC,wBAAwB,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7E,MAAM,WAAW,GAAG,CAAC,IAAgC,EAAE,EAAE;;QACrD,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,YAAE,MAAA,WAAW,CAAC,IAAI,CAAC,mCAAI,CAAC,GAAQ,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,2BAA2B,GAAG,CAAC,IAAgC,EAAE,EAAE;;QACrE,OAAO,CACH,MAAC,WAAW,CAAC,MAAM,IAAC,KAAK,EAAE,IAAI,aAC1B,MAAA,UAAU,CAAC,IAAI,CAAC,mCAAI,IAAI,YACxB,WAAW,CAAC,IAAI,CAAC,KAFgB,IAAI,CAGrB,CACxB,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,CACH,KAAC,WAAW,IACR,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;YAClB,2BAA2B,CAAC,OAAO,CAAC,CAAC;YACrC,wBAAwB,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,YAE9B,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,GACjD,CACjB,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
{
|
2
|
+
"description_no-data": "No healthcheck data",
|
3
|
+
"label_storage": "Storage",
|
4
|
+
"label_compute": "Compute",
|
5
|
+
"description_search-issue": "Search issue...",
|
6
|
+
"action_refresh": "Refresh",
|
7
|
+
"description_minutes": "{{count}} min ago",
|
8
|
+
"description_hours": [
|
9
|
+
"{{count}} hour ago",
|
10
|
+
"{{count}} hours ago",
|
11
|
+
"{{count}} hours ago",
|
12
|
+
"{{count}} hours ago"
|
13
|
+
],
|
14
|
+
"description_days": [
|
15
|
+
"{{count}} day ago",
|
16
|
+
"{{count}} days ago",
|
17
|
+
"{{count}} days ago",
|
18
|
+
"{{count}} days ago"
|
19
|
+
],
|
20
|
+
"label_no-issues": "No issues",
|
21
|
+
"description_no-issues": "Here you will see issues that require your attention",
|
22
|
+
"label_details": "Details",
|
23
|
+
"label_storage_location": "Storage Location",
|
24
|
+
"label_compute_location": "Compute Location",
|
25
|
+
"label_description": "Description",
|
26
|
+
"label_node-id": "Node ID",
|
27
|
+
"label_node-host": "Node Host",
|
28
|
+
"label_node-port": "Node Port",
|
29
|
+
"label_pool-name": "Pool Name",
|
30
|
+
"label_tablet-id": "Tablet ID",
|
31
|
+
"label_tablet-type": "Tablet Type",
|
32
|
+
"label_tablet-count": "Tablets Count",
|
33
|
+
"label_schema-type": "Schema Type",
|
34
|
+
"label_schema-path": "Schema Path",
|
35
|
+
"label_group-id": "Group ID",
|
36
|
+
"label_vdisk-id": "VDisk ID",
|
37
|
+
"label_pdisk-id": "Pdisk ID",
|
38
|
+
"label_pdisk-path": "PDisk Path",
|
39
|
+
"label_node_location": "Node Location",
|
40
|
+
"label_peer_location": "Peer Node Location"
|
41
|
+
}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
declare const _default: (key: "description_no-data" | "label_storage" | "label_compute" | "description_search-issue" | "action_refresh" | "description_minutes" | "description_hours" | "description_days" | "label_no-issues" | "description_no-issues" | "label_details" | "label_storage_location" | "label_compute_location" | "label_description" | "label_node-id" | "label_node-host" | "label_node-port" | "label_pool-name" | "label_tablet-id" | "label_tablet-type" | "label_tablet-count" | "label_schema-type" | "label_schema-path" | "label_group-id" | "label_vdisk-id" | "label_pdisk-id" | "label_pdisk-path" | "label_node_location" | "label_peer_location", params?: import("@gravity-ui/i18n").Params) => string;
|
2
|
+
export default _default;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Healthcheck/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAE5C,eAAe,eAAe,CAAC,SAAS,EAAE,EAAC,EAAE,EAAC,CAAC,CAAC"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import type { IssuesTree } from '../../../store/reducers/healthcheckInfo/types';
|
2
|
+
export declare const b: import("@bem-react/classname").ClassNameFormatter;
|
3
|
+
export type CommonIssueType = 'compute' | 'storage';
|
4
|
+
export declare function getHealthckechViewTitles(): {
|
5
|
+
readonly storage: string;
|
6
|
+
readonly compute: string;
|
7
|
+
};
|
8
|
+
export declare function getHealthcheckViewsOrder(): CommonIssueType[];
|
9
|
+
export declare function countHealthcheckIssuesByType(issueTrees: IssuesTree[]): Record<CommonIssueType, number>;
|
10
|
+
export type GetHealthcheckViewTitles<T extends string> = () => Record<T, string>;
|
11
|
+
export type GetHealthcheckViewsOrder<T> = () => T[];
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import { cn } from '../../../utils/cn';
|
2
|
+
import i18n from './i18n';
|
3
|
+
export const b = cn('ydb-healthcheck');
|
4
|
+
const HealthcheckViewTitles = {
|
5
|
+
get storage() {
|
6
|
+
return i18n('label_storage');
|
7
|
+
},
|
8
|
+
get compute() {
|
9
|
+
return i18n('label_compute');
|
10
|
+
},
|
11
|
+
};
|
12
|
+
const DefaultSortOrder = ['storage', 'compute'];
|
13
|
+
export function getHealthckechViewTitles() {
|
14
|
+
return HealthcheckViewTitles;
|
15
|
+
}
|
16
|
+
export function getHealthcheckViewsOrder() {
|
17
|
+
return DefaultSortOrder;
|
18
|
+
}
|
19
|
+
export function countHealthcheckIssuesByType(issueTrees) {
|
20
|
+
var _a;
|
21
|
+
const result = {
|
22
|
+
storage: 0,
|
23
|
+
compute: 0,
|
24
|
+
};
|
25
|
+
for (const issue of issueTrees) {
|
26
|
+
const type = (_a = issue.firstParentType) !== null && _a !== void 0 ? _a : issue.type;
|
27
|
+
if (type.startsWith('STORAGE')) {
|
28
|
+
result.storage++;
|
29
|
+
}
|
30
|
+
else if (type.startsWith('COMPUTE')) {
|
31
|
+
result.compute++;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
return result;
|
35
|
+
}
|
36
|
+
//# sourceMappingURL=shared.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/containers/Tenant/Healthcheck/shared.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,EAAE,EAAC,MAAM,mBAAmB,CAAC;AAErC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAIvC,MAAM,qBAAqB,GAAG;IAC1B,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;CACJ,CAAC;AAEF,MAAM,gBAAgB,GAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAEnE,MAAM,UAAU,wBAAwB;IACpC,OAAO,qBAAqB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACpC,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,4BAA4B,CACxC,UAAwB;;IAExB,MAAM,MAAM,GAAoC;QAC5C,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;KACb,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,eAAe,mCAAI,KAAK,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import type { IssuesTree } from '../../../store/reducers/healthcheckInfo/types';
|
2
|
+
import { SelfCheckResult } from '../../../types/api/healthcheck';
|
3
|
+
interface HealthcheckParams {
|
4
|
+
leavesIssues: IssuesTree[];
|
5
|
+
loading: boolean;
|
6
|
+
error?: unknown;
|
7
|
+
refetch: () => void;
|
8
|
+
selfCheckResult: SelfCheckResult;
|
9
|
+
fulfilledTimeStamp?: number;
|
10
|
+
}
|
11
|
+
export declare const useHealthcheck: (tenantName: string, { autorefresh }?: {
|
12
|
+
autorefresh?: number;
|
13
|
+
}) => HealthcheckParams;
|
14
|
+
export {};
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { healthcheckApi, selectLeavesIssues, } from '../../../store/reducers/healthcheckInfo/healthcheckInfo';
|
2
|
+
import { SelfCheckResult } from '../../../types/api/healthcheck';
|
3
|
+
import { useTypedSelector } from '../../../utils/hooks';
|
4
|
+
export const useHealthcheck = (tenantName, { autorefresh } = {}) => {
|
5
|
+
const { currentData: data, isFetching, error, refetch, fulfilledTimeStamp, } = healthcheckApi.useGetHealthcheckInfoQuery({ database: tenantName }, {
|
6
|
+
pollingInterval: autorefresh,
|
7
|
+
});
|
8
|
+
const selfCheckResult = (data === null || data === void 0 ? void 0 : data.self_check_result) || SelfCheckResult.UNSPECIFIED;
|
9
|
+
const leavesIssues = useTypedSelector((state) => selectLeavesIssues(state, tenantName));
|
10
|
+
return {
|
11
|
+
loading: data === undefined && isFetching,
|
12
|
+
error,
|
13
|
+
refetch,
|
14
|
+
selfCheckResult,
|
15
|
+
fulfilledTimeStamp,
|
16
|
+
leavesIssues,
|
17
|
+
};
|
18
|
+
};
|
19
|
+
//# sourceMappingURL=useHealthcheck.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"useHealthcheck.js","sourceRoot":"","sources":["../../../../src/containers/Tenant/Healthcheck/useHealthcheck.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,kBAAkB,GACrB,MAAM,yDAAyD,CAAC;AAEjE,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAWtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC1B,UAAkB,EAClB,EAAC,WAAW,KAA4B,EAAE,EACzB,EAAE;IACnB,MAAM,EACF,WAAW,EAAE,IAAI,EACjB,UAAU,EACV,KAAK,EACL,OAAO,EACP,kBAAkB,GACrB,GAAG,cAAc,CAAC,0BAA0B,CACzC,EAAC,QAAQ,EAAE,UAAU,EAAC,EACtB;QACI,eAAe,EAAE,WAAW;KAC/B,CACJ,CAAC;IAEF,MAAM,eAAe,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,iBAAiB,KAAI,eAAe,CAAC,WAAW,CAAC;IAC/E,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAExF,OAAO;QACH,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,UAAU;QACzC,KAAK;QACL,OAAO;QACP,eAAe;QACf,kBAAkB;QAClB,YAAY;KACf,CAAC;AACN,CAAC,CAAC"}
|
@@ -40,7 +40,7 @@ export function TopicPreview({ database, path }) {
|
|
40
40
|
}
|
41
41
|
return {
|
42
42
|
start: safeParseNumber(firstPartition.startOffset),
|
43
|
-
end: safeParseNumber(firstPartition.endOffset) - 1,
|
43
|
+
end: Math.max(safeParseNumber(firstPartition.endOffset) - 1, 0),
|
44
44
|
};
|
45
45
|
}, [firstPartition]);
|
46
46
|
const renderResult = React.useCallback(() => {
|