ydb-embedded-ui 22.4.0 → 22.6.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/AutoRefreshControl/StickyAutoRefreshControl.d.ts +2 -0
- package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.js +9 -0
- package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.js.map +1 -0
- package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.scss +18 -0
- package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.d.ts +3 -2
- package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js +19 -4
- package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js.map +1 -1
- package/dist/components/CopyableValue/CopyableValue.d.ts +10 -0
- package/dist/components/CopyableValue/CopyableValue.js +10 -0
- package/dist/components/CopyableValue/CopyableValue.js.map +1 -0
- package/dist/components/CopyableValue/CopyableValue.scss +16 -0
- package/dist/components/CopyableValue/i18n/en.json +3 -0
- package/dist/components/CopyableValue/i18n/index.d.ts +2 -0
- package/dist/components/CopyableValue/i18n/index.js +6 -0
- package/dist/components/CopyableValue/i18n/index.js.map +1 -0
- package/dist/components/CriticalActionDialog/CriticalActionDialog.d.ts +2 -1
- package/dist/components/CriticalActionDialog/CriticalActionDialog.js +2 -1
- package/dist/components/CriticalActionDialog/CriticalActionDialog.js.map +1 -1
- package/dist/components/DiskCapacityInfo/DiskCapacityInfo.d.ts +1 -21
- package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js +40 -126
- package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js.map +1 -1
- package/dist/components/DiskCapacityInfo/i18n/en.json +0 -1
- package/dist/components/DiskCapacityInfo/i18n/index.d.ts +1 -1
- package/dist/components/EntityStatus/EntityStatus.d.ts +18 -6
- package/dist/components/EntityStatus/EntityStatus.js +5 -1
- package/dist/components/EntityStatus/EntityStatus.js.map +1 -1
- package/dist/components/EntityStatus/EntityStatus.scss +5 -0
- package/dist/components/EvictVDiskButton/EvictVDiskButton.d.ts +5 -2
- package/dist/components/EvictVDiskButton/EvictVDiskButton.js +3 -2
- package/dist/components/EvictVDiskButton/EvictVDiskButton.js.map +1 -1
- package/dist/components/EvictVDiskButton/i18n/en.json +2 -2
- package/dist/components/FullNodeViewer/FullNodeViewer.js +4 -7
- package/dist/components/FullNodeViewer/FullNodeViewer.js.map +1 -1
- package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
- package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.d.ts +3 -0
- package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.js +12 -0
- package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.js.map +1 -0
- package/dist/components/HideUnavailableNodesSwitch/i18n/en.json +3 -0
- package/dist/components/HideUnavailableNodesSwitch/i18n/index.d.ts +2 -0
- package/dist/components/HideUnavailableNodesSwitch/i18n/index.js +6 -0
- package/dist/components/HideUnavailableNodesSwitch/i18n/index.js.map +1 -0
- package/dist/components/HideUnavailableNodesSwitch/i18n/ru.json +3 -0
- package/dist/components/HoverPopup/HoverPopup.d.ts +1 -0
- package/dist/components/HoverPopup/HoverPopup.js +87 -16
- package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
- package/dist/components/MemoryViewer/MemoryViewer.d.ts +3 -1
- package/dist/components/MemoryViewer/MemoryViewer.js +25 -16
- package/dist/components/MemoryViewer/MemoryViewer.js.map +1 -1
- package/dist/components/MemoryViewer/i18n/en.json +4 -3
- package/dist/components/MemoryViewer/i18n/index.d.ts +1 -1
- package/dist/components/MemoryViewer/utils.d.ts +4 -2
- package/dist/components/MemoryViewer/utils.js +11 -11
- package/dist/components/MemoryViewer/utils.js.map +1 -1
- package/dist/components/PDiskInfo/PDiskInfo.d.ts +4 -9
- package/dist/components/PDiskInfo/PDiskInfo.js +32 -144
- package/dist/components/PDiskInfo/PDiskInfo.js.map +1 -1
- package/dist/components/PDiskInfo/PDiskInfo.scss +15 -0
- package/dist/components/PDiskInfo/PDiskLogSize.js +1 -1
- package/dist/components/PDiskInfo/PDiskLogSize.js.map +1 -1
- package/dist/components/PDiskInfo/i18n/en.json +6 -3
- package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/PDiskInfo/statuses.js +12 -3
- package/dist/components/PDiskInfo/statuses.js.map +1 -1
- package/dist/components/PageMeta/PageMeta.d.ts +0 -2
- package/dist/components/PageMeta/PageMeta.js +1 -6
- package/dist/components/PageMeta/PageMeta.js.map +1 -1
- package/dist/components/Search/Search.js +3 -1
- package/dist/components/Search/Search.js.map +1 -1
- package/dist/components/StorageGroupInfo/StorageGroupInfo.js +4 -9
- package/dist/components/StorageGroupInfo/StorageGroupInfo.js.map +1 -1
- package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
- package/dist/components/TenantNameWrapper/i18n/index.d.ts +1 -1
- package/dist/components/VDisk/VDisk.js +2 -2
- package/dist/components/VDisk/VDisk.js.map +1 -1
- package/dist/components/VDiskInfo/VDiskInfo.d.ts +3 -7
- package/dist/components/VDiskInfo/VDiskInfo.js +57 -235
- package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
- package/dist/components/VDiskInfo/VDiskInfo.scss +19 -3
- package/dist/components/VDiskInfo/getVDiskDetails.d.ts +7 -1
- package/dist/components/VDiskInfo/getVDiskDetails.js +14 -1
- package/dist/components/VDiskInfo/getVDiskDetails.js.map +1 -1
- package/dist/components/VDiskInfo/i18n/en.json +4 -13
- package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/VDiskPopup/VDiskPopup.d.ts +2 -1
- package/dist/components/VDiskPopup/VDiskPopup.js +10 -26
- package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
- package/dist/components/VDiskPopup/i18n/en.json +0 -2
- package/dist/components/VDiskPopup/i18n/index.d.ts +1 -1
- package/dist/components/VDiskStatus/VDiskReplicationStatus.js +1 -1
- package/dist/components/VDiskStatus/VDiskReplicationStatus.js.map +1 -1
- package/dist/components/VDiskStatus/VDiskStatus.js +2 -2
- package/dist/components/VDiskStatus/VDiskStatus.js.map +1 -1
- package/dist/components/VDiskStatus/VDiskStatus.scss +4 -0
- package/dist/components/VDiskStatus/statuses.js +2 -2
- package/dist/components/VDiskStatus/statuses.js.map +1 -1
- package/dist/components/nodesColumns/columns.d.ts +1 -0
- package/dist/components/nodesColumns/columns.js +13 -6
- package/dist/components/nodesColumns/columns.js.map +1 -1
- package/dist/containers/Clusters/Clusters.js +35 -6
- package/dist/containers/Clusters/Clusters.js.map +1 -1
- package/dist/containers/Clusters/Clusters.scss +24 -6
- package/dist/containers/Clusters/columns.js +9 -4
- package/dist/containers/Clusters/columns.js.map +1 -1
- package/dist/containers/Clusters/i18n/en.json +6 -0
- package/dist/containers/Clusters/i18n/index.d.ts +1 -1
- package/dist/containers/Header/Header.js +8 -0
- package/dist/containers/Header/Header.js.map +1 -1
- package/dist/containers/Header/HeaderLeftControls.js +3 -1
- package/dist/containers/Header/HeaderLeftControls.js.map +1 -1
- package/dist/containers/Header/PDiskLeftControls.d.ts +1 -0
- package/dist/containers/Header/PDiskLeftControls.js +24 -0
- package/dist/containers/Header/PDiskLeftControls.js.map +1 -0
- package/dist/containers/Header/VDiskLeftControls.d.ts +1 -0
- package/dist/containers/Header/VDiskLeftControls.js +23 -0
- package/dist/containers/Header/VDiskLeftControls.js.map +1 -0
- package/dist/containers/Header/breadcrumbs.js +5 -2
- package/dist/containers/Header/breadcrumbs.js.map +1 -1
- package/dist/containers/Header/i18n/en.json +4 -1
- package/dist/containers/Header/i18n/index.d.ts +1 -1
- package/dist/containers/Node/Node.js +4 -3
- package/dist/containers/Node/Node.js.map +1 -1
- package/dist/containers/Node/Node.scss +14 -2
- package/dist/containers/Nodes/NodesControls/NodesControls.js +2 -1
- package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
- package/dist/containers/Nodes/NodesTable.js +4 -0
- package/dist/containers/Nodes/NodesTable.js.map +1 -1
- package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +8 -3
- package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
- package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js +12 -2
- package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js.map +1 -1
- package/dist/containers/Nodes/getNodes.js +2 -1
- package/dist/containers/Nodes/getNodes.js.map +1 -1
- package/dist/containers/Nodes/useDebouncedSearch.d.ts +2 -0
- package/dist/containers/Nodes/useDebouncedSearch.js +11 -0
- package/dist/containers/Nodes/useDebouncedSearch.js.map +1 -0
- package/dist/containers/PDiskPage/PDiskPage.js +24 -34
- package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
- package/dist/containers/PDiskPage/PDiskPage.scss +29 -11
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js +3 -3
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js.map +1 -1
- package/dist/containers/PDiskPage/PDiskStorageDetails.d.ts +6 -0
- package/dist/containers/PDiskPage/PDiskStorageDetails.js +28 -0
- package/dist/containers/PDiskPage/PDiskStorageDetails.js.map +1 -0
- package/dist/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
- package/dist/containers/PDiskPage/i18n/en.json +1 -0
- package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js +3 -0
- package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js +8 -1
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js +2 -1
- package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js +4 -0
- package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorageNodesTable/getNodes.js +2 -1
- package/dist/containers/Storage/PaginatedStorageNodesTable/getNodes.js.map +1 -1
- package/dist/containers/Storage/Storage.scss +4 -0
- package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +1 -1
- package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/useStorageQueryParams.d.ts +4 -4
- package/dist/containers/StorageGroupPage/StorageGroupPage.js +5 -14
- package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.scss +19 -4
- package/dist/containers/StorageGroupPage/i18n/en.json +0 -2
- package/dist/containers/StorageGroupPage/i18n/index.d.ts +1 -1
- package/dist/containers/Tablet/Tablet.js +3 -2
- package/dist/containers/Tablet/Tablet.js.map +1 -1
- package/dist/containers/Tablet/Tablet.scss +15 -1
- package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/ManagePartitioningDialog/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +5 -12
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopQueries/columns/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js +2 -2
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js.map +1 -1
- package/dist/containers/Tenant/TenantDrawerHealthcheck.js +10 -2
- package/dist/containers/Tenant/TenantDrawerHealthcheck.js.map +1 -1
- package/dist/containers/VDiskPage/VDiskPage.js +27 -36
- package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
- package/dist/containers/VDiskPage/VDiskPage.scss +39 -7
- package/dist/containers/VDiskPage/VDiskStorageDetails.js +27 -29
- package/dist/containers/VDiskPage/VDiskStorageDetails.js.map +1 -1
- package/dist/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
- package/dist/containers/VDiskPage/i18n/en.json +2 -12
- package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
- package/dist/store/reducers/capabilities/hooks.d.ts +1 -0
- package/dist/store/reducers/capabilities/hooks.js +3 -0
- package/dist/store/reducers/capabilities/hooks.js.map +1 -1
- package/dist/store/reducers/cluster/parseFields.js +1 -0
- package/dist/store/reducers/cluster/parseFields.js.map +1 -1
- package/dist/store/reducers/clusters/clusters.js +1 -0
- package/dist/store/reducers/clusters/clusters.js.map +1 -1
- package/dist/store/reducers/clusters/selectors.d.ts +1 -0
- package/dist/store/reducers/clusters/selectors.js +4 -1
- package/dist/store/reducers/clusters/selectors.js.map +1 -1
- package/dist/store/reducers/clusters/types.d.ts +2 -0
- package/dist/store/reducers/nodes/types.d.ts +1 -0
- package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +1 -1
- package/dist/store/reducers/storage/prepareGroupsDisks.js +2 -1
- package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
- package/dist/store/reducers/storage/types.d.ts +1 -0
- package/dist/store/reducers/storage/utils.js +10 -3
- package/dist/store/reducers/storage/utils.js.map +1 -1
- package/dist/store/reducers/vdisk/types.d.ts +1 -1
- package/dist/store/reducers/vdisk/utils.js +5 -5
- package/dist/store/reducers/vdisk/utils.js.map +1 -1
- package/dist/types/api/capabilities.d.ts +1 -1
- package/dist/types/api/meta.d.ts +1 -0
- package/dist/types/api/nodes.d.ts +2 -0
- package/dist/types/api/nodesList.d.ts +2 -0
- package/dist/utils/hooks/useDatabaseHealthcheckAvailable.d.ts +2 -0
- package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js +6 -0
- package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js.map +1 -0
- package/dist/utils/hooks/useHideUnavailableNodes.d.ts +5 -0
- package/dist/utils/hooks/useHideUnavailableNodes.js +21 -0
- package/dist/utils/hooks/useHideUnavailableNodes.js.map +1 -0
- package/dist/utils/memory.d.ts +5 -0
- package/dist/utils/memory.js +9 -0
- package/dist/utils/memory.js.map +1 -0
- package/dist/utils/nodes.js +3 -3
- package/dist/utils/nodes.js.map +1 -1
- package/dist/utils/storageMetrics.d.ts +1 -0
- package/dist/utils/storageMetrics.js +8 -0
- package/dist/utils/storageMetrics.js.map +1 -1
- package/package.json +1 -1
- package/src/components/AutoRefreshControl/StickyAutoRefreshControl.scss +18 -0
- package/src/components/AutoRefreshControl/StickyAutoRefreshControl.tsx +15 -0
- package/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx +22 -3
- package/src/components/CopyableValue/CopyableValue.scss +16 -0
- package/src/components/CopyableValue/CopyableValue.tsx +40 -0
- package/src/components/CopyableValue/i18n/en.json +3 -0
- package/src/components/CopyableValue/i18n/index.ts +8 -0
- package/src/components/CriticalActionDialog/CriticalActionDialog.tsx +3 -0
- package/src/components/DiskCapacityInfo/DiskCapacityInfo.tsx +40 -185
- package/src/components/DiskCapacityInfo/i18n/en.json +0 -1
- package/src/components/EntityStatus/EntityStatus.scss +5 -0
- package/src/components/EntityStatus/EntityStatus.tsx +38 -5
- package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -2
- package/src/components/EvictVDiskButton/i18n/en.json +2 -2
- package/src/components/FullNodeViewer/FullNodeViewer.tsx +4 -9
- package/src/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.tsx +24 -0
- package/src/components/HideUnavailableNodesSwitch/i18n/en.json +3 -0
- package/src/components/HideUnavailableNodesSwitch/i18n/index.ts +7 -0
- package/src/components/HideUnavailableNodesSwitch/i18n/ru.json +3 -0
- package/src/components/HoverPopup/HoverPopup.tsx +95 -19
- package/src/components/MemoryViewer/MemoryViewer.tsx +30 -17
- package/src/components/MemoryViewer/i18n/en.json +4 -3
- package/src/components/MemoryViewer/utils.ts +19 -12
- package/src/components/PDiskInfo/PDiskInfo.scss +15 -0
- package/src/components/PDiskInfo/PDiskInfo.tsx +51 -243
- package/src/components/PDiskInfo/PDiskLogSize.tsx +12 -8
- package/src/components/PDiskInfo/i18n/en.json +6 -3
- package/src/components/PDiskInfo/statuses.ts +16 -3
- package/src/components/PageMeta/PageMeta.tsx +0 -18
- package/src/components/Search/Search.tsx +5 -2
- package/src/components/StorageGroupInfo/StorageGroupInfo.tsx +8 -13
- package/src/components/VDisk/VDisk.tsx +3 -2
- package/src/components/VDiskInfo/VDiskInfo.scss +19 -3
- package/src/components/VDiskInfo/VDiskInfo.tsx +119 -341
- package/src/components/VDiskInfo/getVDiskDetails.tsx +24 -2
- package/src/components/VDiskInfo/i18n/en.json +4 -13
- package/src/components/VDiskPopup/VDiskPopup.tsx +16 -24
- package/src/components/VDiskPopup/i18n/en.json +0 -2
- package/src/components/VDiskStatus/VDiskReplicationStatus.tsx +1 -1
- package/src/components/VDiskStatus/VDiskStatus.scss +4 -0
- package/src/components/VDiskStatus/VDiskStatus.tsx +13 -2
- package/src/components/VDiskStatus/statuses.ts +2 -2
- package/src/components/nodesColumns/columns.tsx +26 -12
- package/src/containers/Clusters/Clusters.scss +24 -6
- package/src/containers/Clusters/Clusters.tsx +74 -5
- package/src/containers/Clusters/columns.tsx +36 -6
- package/src/containers/Clusters/i18n/en.json +6 -0
- package/src/containers/Header/Header.tsx +8 -0
- package/src/containers/Header/HeaderLeftControls.tsx +3 -1
- package/src/containers/Header/PDiskLeftControls.tsx +41 -0
- package/src/containers/Header/VDiskLeftControls.tsx +40 -0
- package/src/containers/Header/breadcrumbs.tsx +4 -2
- package/src/containers/Header/i18n/en.json +4 -1
- package/src/containers/Node/Node.scss +14 -2
- package/src/containers/Node/Node.tsx +6 -6
- package/src/containers/Nodes/NodesControls/NodesControls.tsx +3 -0
- package/src/containers/Nodes/NodesTable.tsx +4 -0
- package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +8 -3
- package/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx +12 -2
- package/src/containers/Nodes/getNodes.ts +2 -0
- package/src/containers/Nodes/useDebouncedSearch.ts +13 -0
- package/src/containers/PDiskPage/PDiskPage.scss +29 -11
- package/src/containers/PDiskPage/PDiskPage.tsx +69 -63
- package/src/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.tsx +3 -9
- package/src/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
- package/src/containers/PDiskPage/PDiskStorageDetails.tsx +64 -0
- package/src/containers/PDiskPage/i18n/en.json +1 -0
- package/src/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.tsx +3 -0
- package/src/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.tsx +8 -1
- package/src/containers/Storage/PaginatedStorageNodes/StorageNodesControls.tsx +2 -0
- package/src/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.tsx +4 -0
- package/src/containers/Storage/PaginatedStorageNodesTable/getNodes.ts +2 -0
- package/src/containers/Storage/Storage.scss +4 -0
- package/src/containers/StorageGroupPage/StorageGroupPage.scss +19 -4
- package/src/containers/StorageGroupPage/StorageGroupPage.tsx +25 -45
- package/src/containers/StorageGroupPage/i18n/en.json +0 -2
- package/src/containers/Tablet/Tablet.scss +15 -1
- package/src/containers/Tablet/Tablet.tsx +21 -15
- package/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +5 -32
- package/src/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
- package/src/containers/Tenant/Healthcheck/components/HealthcheckIssue.tsx +18 -8
- package/src/containers/Tenant/TenantDrawerHealthcheck.tsx +14 -1
- package/src/containers/VDiskPage/VDiskPage.scss +39 -7
- package/src/containers/VDiskPage/VDiskPage.tsx +84 -72
- package/src/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
- package/src/containers/VDiskPage/VDiskStorageDetails.tsx +50 -158
- package/src/containers/VDiskPage/i18n/en.json +2 -14
- package/src/store/reducers/capabilities/hooks.ts +4 -0
- package/src/store/reducers/cluster/parseFields.ts +1 -0
- package/src/store/reducers/clusters/clusters.ts +1 -0
- package/src/store/reducers/clusters/selectors.ts +4 -0
- package/src/store/reducers/clusters/types.ts +3 -0
- package/src/store/reducers/nodes/types.ts +1 -0
- package/src/store/reducers/storage/prepareGroupsDisks.ts +2 -0
- package/src/store/reducers/storage/types.ts +1 -0
- package/src/store/reducers/storage/utils.ts +13 -3
- package/src/store/reducers/vdisk/types.ts +2 -1
- package/src/store/reducers/vdisk/utils.ts +4 -5
- package/src/types/api/capabilities.ts +1 -0
- package/src/types/api/meta.ts +1 -0
- package/src/types/api/nodes.ts +2 -0
- package/src/types/api/nodesList.ts +3 -0
- package/src/utils/hooks/useDatabaseHealthcheckAvailable.ts +9 -0
- package/src/utils/hooks/useHideUnavailableNodes.ts +33 -0
- package/src/utils/memory.ts +16 -0
- package/src/utils/nodes.ts +3 -2
- package/src/utils/storageMetrics.ts +11 -0
- package/dist/components/VDiskInfo/getVDiskCapacityColumns.d.ts +0 -11
- package/dist/components/VDiskInfo/getVDiskCapacityColumns.js +0 -52
- package/dist/components/VDiskInfo/getVDiskCapacityColumns.js.map +0 -1
- package/src/components/VDiskInfo/getVDiskCapacityColumns.tsx +0 -83
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
.ydb-pdisk-storage-details {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-wrap: wrap;
|
|
4
|
+
align-items: flex-start;
|
|
5
|
+
gap: var(--g-spacing-5);
|
|
6
|
+
|
|
7
|
+
width: fit-content;
|
|
8
|
+
max-width: 100%;
|
|
9
|
+
padding: var(--g-spacing-3) var(--g-spacing-5);
|
|
10
|
+
|
|
11
|
+
border-radius: var(--g-border-radius-m);
|
|
12
|
+
background-color: var(--g-color-base-generic);
|
|
13
|
+
|
|
14
|
+
&__detail {
|
|
15
|
+
--g-definition-list-item-gap: 0px;
|
|
16
|
+
|
|
17
|
+
min-width: 0;
|
|
18
|
+
max-width: 200px;
|
|
19
|
+
|
|
20
|
+
&_location {
|
|
21
|
+
min-width: 100px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.g-definition-list__definition {
|
|
25
|
+
min-width: 0;
|
|
26
|
+
max-width: 100%;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&__value-popover {
|
|
31
|
+
flex: 0 1 auto;
|
|
32
|
+
|
|
33
|
+
min-width: 0;
|
|
34
|
+
max-width: 100%;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&__value-popover-content {
|
|
38
|
+
width: auto;
|
|
39
|
+
min-width: 0;
|
|
40
|
+
max-width: 100%;
|
|
41
|
+
|
|
42
|
+
&_with-left-trim {
|
|
43
|
+
text-align: end;
|
|
44
|
+
direction: rtl;
|
|
45
|
+
|
|
46
|
+
> span {
|
|
47
|
+
unicode-bidi: plaintext;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {DefinitionList} from '@gravity-ui/uikit';
|
|
2
|
+
|
|
3
|
+
import {CellWithPopover} from '../../components/CellWithPopover/CellWithPopover';
|
|
4
|
+
import {CopyableValue} from '../../components/CopyableValue/CopyableValue';
|
|
5
|
+
import type {PDiskData} from '../../store/reducers/pdisk/types';
|
|
6
|
+
import {cn} from '../../utils/cn';
|
|
7
|
+
import {getDiskLocationItems} from '../../utils/disks/diskInfo/getDiskLocationItems';
|
|
8
|
+
|
|
9
|
+
import './PDiskStorageDetails.scss';
|
|
10
|
+
|
|
11
|
+
const b = cn('ydb-pdisk-storage-details');
|
|
12
|
+
const LOCATION_IDS = ['datacenter', 'rack', 'fqdn', 'pdisk-path'];
|
|
13
|
+
const FIELD_ORDER = [...LOCATION_IDS, 'node-id', 'pdisk-id'];
|
|
14
|
+
|
|
15
|
+
export function PDiskStorageDetails({
|
|
16
|
+
data = {},
|
|
17
|
+
className,
|
|
18
|
+
}: {
|
|
19
|
+
data?: PDiskData;
|
|
20
|
+
className?: string;
|
|
21
|
+
}) {
|
|
22
|
+
const items = getDiskLocationItems(data, {
|
|
23
|
+
Host: data.NodeHost,
|
|
24
|
+
Rack: data.NodeRack,
|
|
25
|
+
DC: data.NodeDC,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<div className={b(null, className)} data-qa="pdisk-location">
|
|
30
|
+
{FIELD_ORDER.map((id) => {
|
|
31
|
+
const item = items.find((entry) => entry.id === id);
|
|
32
|
+
if (!item) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const copyText = item.copyText === undefined ? undefined : String(item.copyText);
|
|
36
|
+
return (
|
|
37
|
+
<DefinitionList
|
|
38
|
+
key={id}
|
|
39
|
+
direction="vertical"
|
|
40
|
+
className={b('detail', {location: LOCATION_IDS.includes(id)})}
|
|
41
|
+
qa={`pdisk-location-${id}`}
|
|
42
|
+
>
|
|
43
|
+
<DefinitionList.Item name={item.name}>
|
|
44
|
+
<CopyableValue copyText={copyText} fieldName={item.name}>
|
|
45
|
+
<CellWithPopover
|
|
46
|
+
content={copyText}
|
|
47
|
+
disabled={!copyText}
|
|
48
|
+
placement={['top', 'bottom']}
|
|
49
|
+
fullWidth
|
|
50
|
+
wrapperClassName={b('value-popover')}
|
|
51
|
+
className={b('value-popover-content', {
|
|
52
|
+
'with-left-trim': id === 'pdisk-path',
|
|
53
|
+
})}
|
|
54
|
+
>
|
|
55
|
+
<span tabIndex={copyText ? 0 : undefined}>{item.content}</span>
|
|
56
|
+
</CellWithPopover>
|
|
57
|
+
</CopyableValue>
|
|
58
|
+
</DefinitionList.Item>
|
|
59
|
+
</DefinitionList>
|
|
60
|
+
);
|
|
61
|
+
})}
|
|
62
|
+
</div>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
@@ -7,6 +7,7 @@ import {NODES_COLUMNS_TO_DATA_FIELDS} from '../../../components/nodesColumns/con
|
|
|
7
7
|
import {storageApi} from '../../../store/reducers/storage/storage';
|
|
8
8
|
import type {NodesGroupByField, NodesRequiredField} from '../../../types/api/nodes';
|
|
9
9
|
import {useAutoRefreshInterval} from '../../../utils/hooks';
|
|
10
|
+
import {useHideUnavailableNodes} from '../../../utils/hooks/useHideUnavailableNodes';
|
|
10
11
|
import {NodesUptimeFilterValues} from '../../../utils/nodes';
|
|
11
12
|
import {renderPaginatedTableErrorMessage} from '../../../utils/renderPaginatedTableErrorMessage';
|
|
12
13
|
import {getRequiredDataFields} from '../../../utils/tableUtils/getRequiredDataFields';
|
|
@@ -105,6 +106,7 @@ export function GroupedStorageNodesComponent({
|
|
|
105
106
|
scrollContainerRef,
|
|
106
107
|
}: PaginatedStorageProps) {
|
|
107
108
|
const [autoRefreshInterval] = useAutoRefreshInterval();
|
|
109
|
+
const {hideUnavailable} = useHideUnavailableNodes();
|
|
108
110
|
|
|
109
111
|
const {nodesSearchValue, storageNodesGroupByParam, handleShowAllNodes} =
|
|
110
112
|
useStorageQueryParams();
|
|
@@ -131,6 +133,7 @@ export function GroupedStorageNodesComponent({
|
|
|
131
133
|
const {currentData, isFetching, error} = storageApi.useGetStorageNodesInfoQuery(
|
|
132
134
|
{
|
|
133
135
|
database,
|
|
136
|
+
alive: hideUnavailable || undefined,
|
|
134
137
|
with: 'all',
|
|
135
138
|
filter: nodesSearchValue.trim(),
|
|
136
139
|
node_id: nodeId,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {PaginatedTableWithLayout} from '../../../components/PaginatedTable/PaginatedTableWithLayout';
|
|
2
2
|
import {TableColumnSetup} from '../../../components/TableColumnSetup/TableColumnSetup';
|
|
3
3
|
import {useViewerNodesHandlerHasGrouping} from '../../../store/reducers/capabilities/hooks';
|
|
4
|
+
import {useHideUnavailableNodes} from '../../../utils/hooks/useHideUnavailableNodes';
|
|
4
5
|
import {renderPaginatedTableErrorMessage} from '../../../utils/renderPaginatedTableErrorMessage';
|
|
5
6
|
import type {PaginatedStorageProps} from '../PaginatedStorage';
|
|
6
7
|
import {PaginatedStorageNodesTable} from '../PaginatedStorageNodesTable/PaginatedStorageNodesTable';
|
|
@@ -22,6 +23,7 @@ export function StorageNodesComponent({
|
|
|
22
23
|
useStorageQueryParams();
|
|
23
24
|
|
|
24
25
|
const viewerNodesHandlerHasGrouping = useViewerNodesHandlerHasGrouping();
|
|
26
|
+
const {hideUnavailable} = useHideUnavailableNodes();
|
|
25
27
|
|
|
26
28
|
const expertMode = useIsStorageExpertMode();
|
|
27
29
|
const {handleDataFetched, columnsSettings, rowHeight} = useStorageColumnsSettings({
|
|
@@ -69,7 +71,12 @@ export function StorageNodesComponent({
|
|
|
69
71
|
}
|
|
70
72
|
tableWrapperProps={{
|
|
71
73
|
scrollContainerRef,
|
|
72
|
-
scrollDependencies: [
|
|
74
|
+
scrollDependencies: [
|
|
75
|
+
nodesSearchValue,
|
|
76
|
+
visibleEntities,
|
|
77
|
+
nodesUptimeFilter,
|
|
78
|
+
hideUnavailable,
|
|
79
|
+
],
|
|
73
80
|
}}
|
|
74
81
|
/>
|
|
75
82
|
);
|
|
@@ -4,6 +4,7 @@ import {ChartTreemap} from '@gravity-ui/icons';
|
|
|
4
4
|
import {Button, Flex, Icon, Select, Text} from '@gravity-ui/uikit';
|
|
5
5
|
|
|
6
6
|
import {EntitiesCount} from '../../../components/EntitiesCount/EntitiesCount';
|
|
7
|
+
import {HideUnavailableNodesSwitch} from '../../../components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch';
|
|
7
8
|
import {usePaginatedTableState} from '../../../components/PaginatedTable/PaginatedTableContext';
|
|
8
9
|
import {Search} from '../../../components/Search/Search';
|
|
9
10
|
import {UptimeFilter} from '../../../components/UptimeFIlter';
|
|
@@ -127,6 +128,7 @@ export function StorageNodesControls({
|
|
|
127
128
|
{i18n('controls_expert-mode')}
|
|
128
129
|
</Button>
|
|
129
130
|
) : null}
|
|
131
|
+
<HideUnavailableNodesSwitch className={b('hide-unavailable')} />
|
|
130
132
|
</Flex>
|
|
131
133
|
{canUseStorageExpertMode && isStorageExpertMode ? (
|
|
132
134
|
<StorageNodesExpertModePanel />
|
|
@@ -14,6 +14,7 @@ import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
|
|
|
14
14
|
import type {PreparedStorageNode, VisibleEntities} from '../../../store/reducers/storage/types';
|
|
15
15
|
import type {NodesGroupByField} from '../../../types/api/nodes';
|
|
16
16
|
import {cn} from '../../../utils/cn';
|
|
17
|
+
import {useHideUnavailableNodes} from '../../../utils/hooks/useHideUnavailableNodes';
|
|
17
18
|
import {NodesUptimeFilterValues, isUnavailableNode} from '../../../utils/nodes';
|
|
18
19
|
import {STORAGE_NODES_DEFAULT_ROW_HEIGHT} from '../PaginatedStorageNodes/nodeExpertModeLayout';
|
|
19
20
|
|
|
@@ -69,9 +70,11 @@ export const PaginatedStorageNodesTable = ({
|
|
|
69
70
|
onDataFetched,
|
|
70
71
|
}: PaginatedStorageNodesTableProps) => {
|
|
71
72
|
const history = useHistory();
|
|
73
|
+
const {hideUnavailable} = useHideUnavailableNodes();
|
|
72
74
|
const tableFilters = React.useMemo(() => {
|
|
73
75
|
return {
|
|
74
76
|
searchValue,
|
|
77
|
+
hideUnavailable,
|
|
75
78
|
visibleEntities,
|
|
76
79
|
nodesUptimeFilter,
|
|
77
80
|
database,
|
|
@@ -81,6 +84,7 @@ export const PaginatedStorageNodesTable = ({
|
|
|
81
84
|
filterGroupBy,
|
|
82
85
|
};
|
|
83
86
|
}, [
|
|
87
|
+
hideUnavailable,
|
|
84
88
|
searchValue,
|
|
85
89
|
visibleEntities,
|
|
86
90
|
nodesUptimeFilter,
|
|
@@ -29,6 +29,7 @@ export const getStorageNodes: FetchData<
|
|
|
29
29
|
} = params;
|
|
30
30
|
const {
|
|
31
31
|
searchValue,
|
|
32
|
+
hideUnavailable,
|
|
32
33
|
nodesUptimeFilter,
|
|
33
34
|
visibleEntities,
|
|
34
35
|
database,
|
|
@@ -51,6 +52,7 @@ export const getStorageNodes: FetchData<
|
|
|
51
52
|
offset,
|
|
52
53
|
sort,
|
|
53
54
|
filter: searchValue?.trim(),
|
|
55
|
+
alive: hideUnavailable || undefined,
|
|
54
56
|
uptime: getUptimeParamValue(nodesUptimeFilter),
|
|
55
57
|
with: visibleEntities,
|
|
56
58
|
database,
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
@use '../../styles/mixins.scss';
|
|
2
|
+
|
|
1
3
|
.ydb-storage-group-page {
|
|
4
|
+
--sticky-tabs-height: 40px;
|
|
5
|
+
--data-table-start: var(--sticky-tabs-height);
|
|
2
6
|
position: relative;
|
|
3
7
|
|
|
4
8
|
overflow: auto;
|
|
@@ -15,19 +19,30 @@
|
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
&__summary {
|
|
18
|
-
margin-top: var(--g-spacing-4);
|
|
19
22
|
margin-bottom: var(--g-spacing-6);
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
&
|
|
25
|
+
&__title {
|
|
23
26
|
margin-bottom: var(--g-spacing-4);
|
|
27
|
+
padding-right: 125px;
|
|
24
28
|
}
|
|
25
29
|
|
|
26
|
-
&__title {
|
|
27
|
-
|
|
30
|
+
&__title-content {
|
|
31
|
+
flex: 1;
|
|
32
|
+
|
|
33
|
+
min-width: 0;
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
&__storage-title {
|
|
37
|
+
z-index: 3;
|
|
38
|
+
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
|
|
42
|
+
height: var(--sticky-tabs-height);
|
|
31
43
|
margin: 0;
|
|
44
|
+
padding-right: 125px;
|
|
45
|
+
|
|
46
|
+
@include mixins.sticky-top();
|
|
32
47
|
}
|
|
33
48
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {Button, ClipboardButton, Flex, Icon, Text} from '@gravity-ui/uikit';
|
|
3
|
+
import {Flex, Text} from '@gravity-ui/uikit';
|
|
5
4
|
import {skipToken} from '@reduxjs/toolkit/query';
|
|
6
5
|
import {Helmet} from 'react-helmet-async';
|
|
7
|
-
import {useHistory} from 'react-router-dom';
|
|
8
6
|
import {StringParam, useQueryParams} from 'use-query-params';
|
|
9
7
|
|
|
10
|
-
import {
|
|
8
|
+
import {StickyAutoRefreshControl} from '../../components/AutoRefreshControl/StickyAutoRefreshControl';
|
|
9
|
+
import {CopyableValue} from '../../components/CopyableValue/CopyableValue';
|
|
11
10
|
import {ResponseError} from '../../components/Errors/ResponseError';
|
|
12
11
|
import {InfoViewerSkeleton} from '../../components/InfoViewerSkeleton/InfoViewerSkeleton';
|
|
13
12
|
import {StorageGroupInfo} from '../../components/StorageGroupInfo/StorageGroupInfo';
|
|
@@ -31,7 +30,6 @@ const storageGroupPageCn = cn('ydb-storage-group-page');
|
|
|
31
30
|
|
|
32
31
|
export function StorageGroupPage() {
|
|
33
32
|
const dispatch = useTypedDispatch();
|
|
34
|
-
const history = useHistory();
|
|
35
33
|
const database = useDatabaseFromQuery();
|
|
36
34
|
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
37
35
|
|
|
@@ -72,50 +70,32 @@ export function StorageGroupPage() {
|
|
|
72
70
|
);
|
|
73
71
|
};
|
|
74
72
|
|
|
75
|
-
const
|
|
76
|
-
if (!groupId) {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const hasPreviousPage = history.length > 1;
|
|
81
|
-
|
|
73
|
+
const renderPageTitle = () => {
|
|
82
74
|
return (
|
|
83
75
|
<Flex
|
|
84
|
-
className={storageGroupPageCn('
|
|
85
|
-
alignItems="
|
|
86
|
-
justifyContent={hasPreviousPage ? 'space-between' : 'flex-end'}
|
|
76
|
+
className={storageGroupPageCn('title')}
|
|
77
|
+
alignItems="flex-start"
|
|
87
78
|
gap={2}
|
|
79
|
+
wrap="nowrap"
|
|
88
80
|
>
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
<
|
|
106
|
-
{groupId || EMPTY_DATA_PLACEHOLDER}
|
|
107
|
-
</Text>
|
|
108
|
-
{groupId && (
|
|
109
|
-
<ClipboardButton
|
|
110
|
-
text={groupId}
|
|
111
|
-
view="flat-secondary"
|
|
112
|
-
size="s"
|
|
113
|
-
aria-label={storageGroupPageKeyset('action_copy-group-id-from-title')}
|
|
114
|
-
tooltipInitialText={storageGroupPageKeyset('action_copy-group-id')}
|
|
115
|
-
/>
|
|
116
|
-
)}
|
|
81
|
+
<Flex
|
|
82
|
+
className={storageGroupPageCn('title-content')}
|
|
83
|
+
alignItems="center"
|
|
84
|
+
gap={2}
|
|
85
|
+
wrap="wrap"
|
|
86
|
+
>
|
|
87
|
+
<Text variant="header-1">{storageGroupPageKeyset('storage-group')}</Text>
|
|
88
|
+
<CopyableValue
|
|
89
|
+
copyText={groupId}
|
|
90
|
+
fieldName={storageGroupPageKeyset('storage-group')}
|
|
91
|
+
copyButtonLabel={storageGroupPageKeyset('action_copy-group-id-from-title')}
|
|
92
|
+
>
|
|
93
|
+
<Text variant="header-1" color="hint">
|
|
94
|
+
{groupId || EMPTY_DATA_PLACEHOLDER}
|
|
95
|
+
</Text>
|
|
96
|
+
</CopyableValue>
|
|
97
|
+
<StorageGroupStateLabel state={state} />
|
|
117
98
|
</Flex>
|
|
118
|
-
<StorageGroupStateLabel state={state} />
|
|
119
99
|
</Flex>
|
|
120
100
|
);
|
|
121
101
|
};
|
|
@@ -158,8 +138,8 @@ export function StorageGroupPage() {
|
|
|
158
138
|
return (
|
|
159
139
|
<div className={storageGroupPageCn(null)} ref={containerRef}>
|
|
160
140
|
{renderHelmet()}
|
|
141
|
+
{groupId ? <StickyAutoRefreshControl /> : null}
|
|
161
142
|
<div className={storageGroupPageCn('summary')}>
|
|
162
|
-
{renderPageMeta()}
|
|
163
143
|
{renderPageTitle()}
|
|
164
144
|
{renderError()}
|
|
165
145
|
{renderInfo()}
|
|
@@ -2,10 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
.ydb-tablet-page {
|
|
4
4
|
$_: &;
|
|
5
|
+
position: relative;
|
|
6
|
+
|
|
7
|
+
overflow: auto;
|
|
8
|
+
|
|
5
9
|
height: 100%;
|
|
6
|
-
padding: 20px;
|
|
10
|
+
padding: 0 20px 20px;
|
|
7
11
|
@include mixins.body-2-typography();
|
|
8
12
|
|
|
13
|
+
&__content {
|
|
14
|
+
// The sticky refresh wrapper already supplies the initial 20px page inset.
|
|
15
|
+
min-height: calc(100% - 20px);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
&__meta {
|
|
19
|
+
min-height: 28px;
|
|
20
|
+
padding-right: 121px;
|
|
21
|
+
}
|
|
22
|
+
|
|
9
23
|
&__placeholder {
|
|
10
24
|
display: flex;
|
|
11
25
|
flex: 1 1 auto;
|
|
@@ -7,12 +7,13 @@ import {useParams} from 'react-router-dom';
|
|
|
7
7
|
import {useQueryParams} from 'use-query-params';
|
|
8
8
|
import {z} from 'zod';
|
|
9
9
|
|
|
10
|
+
import {StickyAutoRefreshControl} from '../../components/AutoRefreshControl/StickyAutoRefreshControl';
|
|
10
11
|
import {EmptyStateWrapper} from '../../components/EmptyState';
|
|
11
12
|
import {EntityPageTitle} from '../../components/EntityPageTitle/EntityPageTitle';
|
|
12
13
|
import {ResponseError} from '../../components/Errors/ResponseError';
|
|
13
14
|
import {InternalLink} from '../../components/InternalLink';
|
|
14
15
|
import {LoaderWrapper} from '../../components/LoaderWrapper/LoaderWrapper';
|
|
15
|
-
import {
|
|
16
|
+
import {PageMeta} from '../../components/PageMeta/PageMeta';
|
|
16
17
|
import {tabletPageQueryParams, useTabletPagePath} from '../../routes';
|
|
17
18
|
import {useTabletDevUiSecurePath} from '../../store/reducers/capabilities/hooks';
|
|
18
19
|
import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
|
|
@@ -106,25 +107,30 @@ export function Tablet() {
|
|
|
106
107
|
}
|
|
107
108
|
|
|
108
109
|
return (
|
|
109
|
-
<
|
|
110
|
+
<div className={b()}>
|
|
110
111
|
<Helmet>
|
|
111
112
|
<title>{`${id} — ${i18n('tablet.header')} — ${
|
|
112
113
|
databaseFullPath || queryClusterName || CLUSTER_DEFAULT_TITLE
|
|
113
114
|
}`}</title>
|
|
114
115
|
</Helmet>
|
|
115
|
-
<
|
|
116
|
-
<
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
116
|
+
<StickyAutoRefreshControl />
|
|
117
|
+
<Flex gap={5} direction="column" className={b('content')}>
|
|
118
|
+
<Flex alignItems="center" className={b('meta')}>
|
|
119
|
+
<PageMeta items={metaItems} />
|
|
120
|
+
</Flex>
|
|
121
|
+
<LoaderWrapper loading={loading} size="l">
|
|
122
|
+
{error ? <ResponseError error={error} /> : null}
|
|
123
|
+
{currentData ? (
|
|
124
|
+
<TabletContent
|
|
125
|
+
id={id}
|
|
126
|
+
tablet={tablet}
|
|
127
|
+
history={history}
|
|
128
|
+
database={database || databaseFullPath}
|
|
129
|
+
/>
|
|
130
|
+
) : null}
|
|
131
|
+
</LoaderWrapper>
|
|
132
|
+
</Flex>
|
|
133
|
+
</div>
|
|
128
134
|
);
|
|
129
135
|
}
|
|
130
136
|
|
|
@@ -31,6 +31,7 @@ import {getInfoTabLinks} from '../../../../utils/additionalProps';
|
|
|
31
31
|
import {TENANT_DEFAULT_TITLE} from '../../../../utils/constants';
|
|
32
32
|
import {useAutoRefreshInterval, useTypedDispatch, useTypedSelector} from '../../../../utils/hooks';
|
|
33
33
|
import {useClusterNameFromQuery} from '../../../../utils/hooks/useDatabaseFromQuery';
|
|
34
|
+
import {useDatabaseHealthcheckAvailable} from '../../../../utils/hooks/useDatabaseHealthcheckAvailable';
|
|
34
35
|
import {useDatabasesV2} from '../../../../utils/hooks/useDatabasesV2';
|
|
35
36
|
import {canShowTenantMonitoringTab} from '../../../../utils/monitoringVisibility';
|
|
36
37
|
import {useTenantPage} from '../../TenantNavigation/useTenantNavigation';
|
|
@@ -64,18 +65,6 @@ function isTenantLoading(isFetching: boolean, tenant: TTenant | undefined, error
|
|
|
64
65
|
return isFetching && tenant === undefined && !error;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
function shouldSkipHealthcheck({
|
|
68
|
-
isServerless,
|
|
69
|
-
isV2NavigationEnabled,
|
|
70
|
-
tenant,
|
|
71
|
-
}: {
|
|
72
|
-
isServerless: boolean;
|
|
73
|
-
isV2NavigationEnabled: boolean;
|
|
74
|
-
tenant?: TTenant;
|
|
75
|
-
}) {
|
|
76
|
-
return isServerless || isV2NavigationEnabled || tenant === undefined;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
68
|
function getDatabaseStatus(overall?: EFlag, selfCheckResult?: SelfCheckResult) {
|
|
80
69
|
const healthcheckStatus =
|
|
81
70
|
selfCheckResult === undefined ? undefined : selfCheckResultToHcStatus[selfCheckResult];
|
|
@@ -128,20 +117,6 @@ function renderTenantError(error: unknown, defaultMessage: string) {
|
|
|
128
117
|
return error ? <ResponseError error={error} defaultMessage={defaultMessage} /> : null;
|
|
129
118
|
}
|
|
130
119
|
|
|
131
|
-
function renderHealthcheckPreview({
|
|
132
|
-
database,
|
|
133
|
-
isServerless,
|
|
134
|
-
isV2NavigationEnabled,
|
|
135
|
-
}: {
|
|
136
|
-
database: string;
|
|
137
|
-
isServerless: boolean;
|
|
138
|
-
isV2NavigationEnabled: boolean;
|
|
139
|
-
}) {
|
|
140
|
-
return !isServerless && !isV2NavigationEnabled ? (
|
|
141
|
-
<HealthcheckPreview database={database} />
|
|
142
|
-
) : null;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
120
|
function renderOverviewHead({
|
|
146
121
|
databaseStatus,
|
|
147
122
|
handleOpenMonitoring,
|
|
@@ -308,6 +283,8 @@ export function TenantOverview({
|
|
|
308
283
|
const tenantLoading = isTenantLoading(isFetching, tenant, error);
|
|
309
284
|
const {Name, Type, Overall, CoresTotal} = tenant || {};
|
|
310
285
|
const isServerless = Type === 'Serverless';
|
|
286
|
+
const healthcheckAvailable = useDatabaseHealthcheckAvailable(Type);
|
|
287
|
+
const showHealthcheck = healthcheckAvailable && !isV2NavigationEnabled;
|
|
311
288
|
|
|
312
289
|
// Use healthcheck self_check_result as the database status color when available;
|
|
313
290
|
// fall back to tenantinfo.Overall (e.g. for Serverless databases where healthcheck is skipped).
|
|
@@ -317,7 +294,7 @@ export function TenantOverview({
|
|
|
317
294
|
const {currentData: healthcheckData} = healthcheckApi.useGetHealthcheckInfoQuery(
|
|
318
295
|
{database, clusterName},
|
|
319
296
|
{
|
|
320
|
-
skip:
|
|
297
|
+
skip: !showHealthcheck || tenant === undefined,
|
|
321
298
|
},
|
|
322
299
|
);
|
|
323
300
|
const databaseStatus = getDatabaseStatus(Overall, healthcheckData?.self_check_result);
|
|
@@ -404,11 +381,7 @@ export function TenantOverview({
|
|
|
404
381
|
tenantType,
|
|
405
382
|
})}
|
|
406
383
|
<Flex direction="column" gap={4}>
|
|
407
|
-
{
|
|
408
|
-
database,
|
|
409
|
-
isServerless,
|
|
410
|
-
isV2NavigationEnabled,
|
|
411
|
-
})}
|
|
384
|
+
{showHealthcheck && <HealthcheckPreview database={database} />}
|
|
412
385
|
<QueriesActivityBar database={database} />
|
|
413
386
|
<MetricsTabs
|
|
414
387
|
metrics={metricOverview}
|
|
@@ -80,17 +80,26 @@ export function HealthcheckIssue({
|
|
|
80
80
|
justifyContent="space-between"
|
|
81
81
|
className={b('issue-summary')}
|
|
82
82
|
>
|
|
83
|
-
<Flex
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
<Flex
|
|
84
|
+
gap={2}
|
|
85
|
+
alignItems="center"
|
|
86
|
+
className={b('issue-message')}
|
|
87
|
+
>
|
|
86
88
|
{issue.status && (
|
|
87
89
|
<div className={b('issue-status')}>
|
|
88
90
|
<EntityStatus.Label
|
|
91
|
+
view="compact"
|
|
89
92
|
size="s"
|
|
90
93
|
status={hcStatusToColorFlag[issue.status]}
|
|
91
94
|
/>
|
|
92
95
|
</div>
|
|
93
96
|
)}
|
|
97
|
+
<Text
|
|
98
|
+
variant="subheader-2"
|
|
99
|
+
className={b('issue-title')}
|
|
100
|
+
>
|
|
101
|
+
{issue.message}
|
|
102
|
+
</Text>
|
|
94
103
|
</Flex>
|
|
95
104
|
<Flex
|
|
96
105
|
wrap="nowrap"
|
|
@@ -124,21 +133,22 @@ export function HealthcheckIssue({
|
|
|
124
133
|
>
|
|
125
134
|
<Flex
|
|
126
135
|
id={id}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
alignSelf="center"
|
|
136
|
+
gap={2}
|
|
137
|
+
alignItems="center"
|
|
130
138
|
className={b('issue-message')}
|
|
131
139
|
>
|
|
132
|
-
<Text variant="subheader-2">{issue.message}</Text>
|
|
133
|
-
|
|
134
140
|
{issue.status && (
|
|
135
141
|
<div className={b('issue-status')}>
|
|
136
142
|
<EntityStatus.Label
|
|
143
|
+
view="compact"
|
|
137
144
|
size="s"
|
|
138
145
|
status={hcStatusToColorFlag[issue.status]}
|
|
139
146
|
/>
|
|
140
147
|
</div>
|
|
141
148
|
)}
|
|
149
|
+
<Text variant="subheader-2" className={b('issue-title')}>
|
|
150
|
+
{issue.message}
|
|
151
|
+
</Text>
|
|
142
152
|
</Flex>
|
|
143
153
|
<div
|
|
144
154
|
className={b('issue-action')}
|