ydb-embedded-ui 22.3.0 → 22.4.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/DiskCapacityInfo/DiskCapacityInfo.d.ts +10 -1
- package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js +75 -13
- package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js.map +1 -1
- package/dist/components/DiskCapacityInfo/i18n/index.d.ts +1 -1
- package/dist/components/DiskPopup/DiskPopup.d.ts +25 -0
- package/dist/components/DiskPopup/DiskPopup.js +44 -0
- package/dist/components/DiskPopup/DiskPopup.js.map +1 -0
- package/dist/components/DiskPopup/DiskPopup.scss +203 -0
- package/dist/components/DiskPopup/i18n/en.json +3 -0
- package/dist/components/DiskPopup/i18n/index.d.ts +2 -0
- package/dist/components/DiskPopup/i18n/index.js +4 -0
- package/dist/components/DiskPopup/i18n/index.js.map +1 -0
- package/dist/components/DiskStatus/DiskStatus.d.ts +31 -0
- package/dist/components/DiskStatus/DiskStatus.js +61 -0
- package/dist/components/DiskStatus/DiskStatus.js.map +1 -0
- package/dist/components/DiskStatus/DiskStatus.scss +59 -0
- package/dist/components/DiskStatus/i18n/en.json +6 -0
- package/dist/components/DiskStatus/i18n/index.d.ts +2 -0
- package/dist/components/DiskStatus/i18n/index.js +4 -0
- package/dist/components/DiskStatus/i18n/index.js.map +1 -0
- package/dist/components/EntityStatus/EntityStatus.d.ts +1 -0
- package/dist/components/EntityStatus/EntityStatus.js +1 -1
- package/dist/components/EntityStatus/EntityStatus.js.map +1 -1
- package/dist/components/EvictVDiskButton/i18n/en.json +1 -1
- package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
- package/dist/components/HoverPopup/HoverPopup.d.ts +2 -1
- package/dist/components/HoverPopup/HoverPopup.js +49 -17
- package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
- package/dist/components/HoverPopup/usePopupPriority.d.ts +4 -0
- package/dist/components/HoverPopup/usePopupPriority.js +30 -0
- package/dist/components/HoverPopup/usePopupPriority.js.map +1 -0
- package/dist/components/PDiskInfo/PDiskLogSize.d.ts +5 -0
- package/dist/components/PDiskInfo/PDiskLogSize.js +20 -0
- package/dist/components/PDiskInfo/PDiskLogSize.js.map +1 -0
- package/dist/components/PDiskInfo/PDiskLogSize.scss +12 -0
- package/dist/components/PDiskInfo/getPDiskDetails.d.ts +4 -0
- package/dist/components/PDiskInfo/getPDiskDetails.js +33 -0
- package/dist/components/PDiskInfo/getPDiskDetails.js.map +1 -0
- package/dist/components/PDiskInfo/i18n/en.json +64 -2
- package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/PDiskInfo/statuses.d.ts +7 -0
- package/dist/components/PDiskInfo/statuses.js +185 -0
- package/dist/components/PDiskInfo/statuses.js.map +1 -0
- package/dist/components/PDiskPopup/PDiskPopup.d.ts +4 -7
- package/dist/components/PDiskPopup/PDiskPopup.js +28 -99
- package/dist/components/PDiskPopup/PDiskPopup.js.map +1 -1
- package/dist/components/PDiskPopup/i18n/en.json +2 -12
- package/dist/components/PDiskPopup/i18n/index.d.ts +1 -1
- package/dist/components/StorageGroupInfo/StorageGroupInfo.d.ts +3 -3
- package/dist/components/StorageGroupInfo/StorageGroupInfo.js +78 -218
- package/dist/components/StorageGroupInfo/StorageGroupInfo.js.map +1 -1
- package/dist/components/StorageGroupInfo/StorageGroupInfo.scss +21 -0
- package/dist/components/StorageGroupInfo/i18n/en.json +1 -9
- package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
- package/dist/components/VDisk/VDisk.d.ts +2 -1
- package/dist/components/VDisk/VDisk.js +23 -32
- package/dist/components/VDisk/VDisk.js.map +1 -1
- package/dist/components/VDisk/VDiskWithDonorsStack.d.ts +1 -1
- package/dist/components/VDisk/VDiskWithDonorsStack.js +2 -1
- package/dist/components/VDisk/VDiskWithDonorsStack.js.map +1 -1
- package/dist/components/VDisk/getFlagStatusText.d.ts +2 -0
- package/dist/components/VDisk/getFlagStatusText.js +18 -0
- package/dist/components/VDisk/getFlagStatusText.js.map +1 -0
- package/dist/components/VDisk/i18n/en.json +1 -1
- package/dist/components/VDisk/i18n/index.d.ts +1 -1
- package/dist/components/VDiskInfo/getVDiskDetails.d.ts +5 -0
- package/dist/components/VDiskInfo/getVDiskDetails.js +29 -0
- package/dist/components/VDiskInfo/getVDiskDetails.js.map +1 -0
- package/dist/components/VDiskInfo/i18n/en.json +3 -1
- package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/VDiskPopup/VDiskPopup.d.ts +6 -8
- package/dist/components/VDiskPopup/VDiskPopup.js +106 -240
- package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
- package/dist/components/VDiskPopup/VDiskPopup.scss +3 -10
- package/dist/components/VDiskPopup/i18n/en.json +6 -22
- package/dist/components/VDiskPopup/i18n/index.d.ts +1 -1
- package/dist/components/VDiskStatus/VDiskReplicationStatus.d.ts +8 -0
- package/dist/components/VDiskStatus/VDiskReplicationStatus.js +32 -0
- package/dist/components/VDiskStatus/VDiskReplicationStatus.js.map +1 -0
- package/dist/components/VDiskStatus/VDiskStatus.d.ts +16 -0
- package/dist/components/VDiskStatus/VDiskStatus.js +20 -0
- package/dist/components/VDiskStatus/VDiskStatus.js.map +1 -0
- package/dist/components/VDiskStatus/VDiskStatus.scss +32 -0
- package/dist/components/VDiskStatus/i18n/en.json +33 -0
- package/dist/components/VDiskStatus/i18n/index.d.ts +1 -0
- package/dist/components/VDiskStatus/i18n/index.js +5 -0
- package/dist/components/VDiskStatus/i18n/index.js.map +1 -0
- package/dist/components/VDiskStatus/index.d.ts +2 -0
- package/dist/components/VDiskStatus/index.js +3 -0
- package/dist/components/VDiskStatus/index.js.map +1 -0
- package/dist/components/VDiskStatus/statuses.d.ts +4 -0
- package/dist/components/VDiskStatus/statuses.js +120 -0
- package/dist/components/VDiskStatus/statuses.js.map +1 -0
- package/dist/components/capacityMetricsColumns/i18n/en.json +4 -4
- package/dist/containers/Cluster/ClusterDrawerHealthcheck.js +6 -1
- package/dist/containers/Cluster/ClusterDrawerHealthcheck.js.map +1 -1
- package/dist/containers/Clusters/ClusterDrawerHealthcheck.js +1 -1
- package/dist/containers/Clusters/ClusterDrawerHealthcheck.js.map +1 -1
- package/dist/containers/Header/Header.js +8 -2
- package/dist/containers/Header/Header.js.map +1 -1
- package/dist/containers/Header/StorageGroupLeftControls.d.ts +1 -0
- package/dist/containers/Header/StorageGroupLeftControls.js +23 -0
- package/dist/containers/Header/StorageGroupLeftControls.js.map +1 -0
- package/dist/containers/Header/i18n/en.json +3 -1
- package/dist/containers/Header/i18n/index.d.ts +1 -1
- package/dist/containers/Operations/constants.d.ts +1 -1
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js +4 -4
- package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js.map +1 -1
- package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/Disks/Disks.js +36 -9
- package/dist/containers/Storage/Disks/Disks.js.map +1 -1
- package/dist/containers/Storage/PDisk/PDisk.d.ts +2 -1
- package/dist/containers/Storage/PDisk/PDisk.js +2 -2
- package/dist/containers/Storage/PDisk/PDisk.js.map +1 -1
- package/dist/containers/Storage/PDisk/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js +7 -2
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js.map +1 -1
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.scss +14 -82
- package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/StorageGroupStateLabel.d.ts +4 -0
- package/dist/containers/Storage/StorageGroupStateLabel.js +9 -0
- package/dist/containers/Storage/StorageGroupStateLabel.js.map +1 -0
- package/dist/containers/Storage/utils/getStorageGroupStateLabel.d.ts +2 -0
- package/dist/containers/Storage/utils/getStorageGroupStateLabel.js +35 -0
- package/dist/containers/Storage/utils/getStorageGroupStateLabel.js.map +1 -0
- package/dist/containers/StorageGroupPage/StorageGroupPage.js +17 -12
- package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
- package/dist/containers/StorageGroupPage/StorageGroupPage.scss +9 -13
- package/dist/containers/StorageGroupPage/i18n/en.json +3 -1
- package/dist/containers/StorageGroupPage/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/Overview/Overview.d.ts +2 -1
- package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +4 -1
- package/dist/containers/Tenant/Diagnostics/Overview/Overview.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.d.ts +2 -1
- package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.js +11 -2
- package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.d.ts +2 -1
- package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.js +9 -8
- package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.d.ts +16 -1
- package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.js +56 -19
- package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/en.json +5 -1
- package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.d.ts +3 -1
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js +3 -3
- package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js.map +1 -1
- package/dist/containers/Tenant/TenantDrawerHealthcheck.js +8 -1
- package/dist/containers/Tenant/TenantDrawerHealthcheck.js.map +1 -1
- package/dist/containers/Tenants/DatabaseDrawerHealthcheck.js +8 -1
- package/dist/containers/Tenants/DatabaseDrawerHealthcheck.js.map +1 -1
- package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
- package/dist/lib.d.ts +1 -1
- package/dist/lib.js.map +1 -1
- package/dist/store/configureStore.d.ts +2 -2
- package/dist/store/defaultStore.d.ts +1 -1
- package/dist/store/reducers/header/types.d.ts +1 -1
- package/dist/store/reducers/index.d.ts +2 -2
- package/dist/store/reducers/pdisk/types.d.ts +1 -0
- package/dist/store/reducers/pdisk/utils.js +6 -1
- package/dist/store/reducers/pdisk/utils.js.map +1 -1
- package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +1 -0
- package/dist/store/reducers/storage/prepareGroupsDisks.js +7 -18
- package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
- package/dist/store/reducers/storage/utils.js +4 -0
- package/dist/store/reducers/storage/utils.js.map +1 -1
- package/dist/store/reducers/streamingQuery/streamingQuery.js +2 -4
- package/dist/store/reducers/streamingQuery/streamingQuery.js.map +1 -1
- package/dist/styles/mixins.scss +22 -0
- package/dist/types/api/pdisk.d.ts +4 -0
- package/dist/types/api/pdisk.js.map +1 -1
- package/dist/types/api/vdisk.d.ts +8 -0
- package/dist/types/api/vdisk.js +7 -0
- package/dist/types/api/vdisk.js.map +1 -1
- package/dist/types/store/nodesList.d.ts +4 -2
- package/dist/uiFactory/types.d.ts +5 -2
- package/dist/utils/bytesParsers/formatBytes.d.ts +3 -1
- package/dist/utils/bytesParsers/formatBytes.js +12 -3
- package/dist/utils/bytesParsers/formatBytes.js.map +1 -1
- package/dist/utils/disks/constants.d.ts +1 -0
- package/dist/utils/disks/constants.js +4 -0
- package/dist/utils/disks/constants.js.map +1 -1
- package/dist/utils/disks/diskInfo/getDiskLocationItems.d.ts +16 -0
- package/dist/utils/disks/diskInfo/getDiskLocationItems.js +30 -0
- package/dist/utils/disks/diskInfo/getDiskLocationItems.js.map +1 -0
- package/dist/utils/disks/diskInfo/i18n/en.json +9 -0
- package/dist/utils/disks/diskInfo/i18n/index.d.ts +2 -0
- package/dist/utils/disks/diskInfo/i18n/index.js +4 -0
- package/dist/utils/disks/diskInfo/i18n/index.js.map +1 -0
- package/dist/utils/disks/iconCalculators.d.ts +5 -0
- package/dist/utils/disks/iconCalculators.js +1 -1
- package/dist/utils/disks/iconCalculators.js.map +1 -1
- package/dist/utils/disks/prepareDisks.d.ts +6 -2
- package/dist/utils/disks/prepareDisks.js +22 -35
- package/dist/utils/disks/prepareDisks.js.map +1 -1
- package/dist/utils/disks/types.d.ts +9 -2
- package/dist/utils/hooks/useNodeMetadata.d.ts +2 -0
- package/dist/utils/hooks/useNodeMetadata.js +15 -0
- package/dist/utils/hooks/useNodeMetadata.js.map +1 -0
- package/dist/utils/nodes.js +6 -2
- package/dist/utils/nodes.js.map +1 -1
- package/dist/utils/storageMetrics.d.ts +2 -2
- package/dist/utils/storageMetrics.js +22 -10
- package/dist/utils/storageMetrics.js.map +1 -1
- package/dist/utils/timeParsers/formatDuration.d.ts +4 -1
- package/dist/utils/timeParsers/formatDuration.js +16 -1
- package/dist/utils/timeParsers/formatDuration.js.map +1 -1
- package/dist/utils/timeParsers/i18n/en.json +5 -1
- package/dist/utils/timeParsers/i18n/index.d.ts +1 -1
- package/dist/utils/timeParsers/i18n/ru.json +5 -1
- package/package.json +2 -2
- package/src/components/DiskCapacityInfo/DiskCapacityInfo.tsx +106 -15
- package/src/components/DiskPopup/DiskPopup.scss +203 -0
- package/src/components/DiskPopup/DiskPopup.tsx +123 -0
- package/src/components/DiskPopup/i18n/en.json +3 -0
- package/src/components/DiskPopup/i18n/index.ts +5 -0
- package/src/components/DiskStatus/DiskStatus.scss +59 -0
- package/src/components/DiskStatus/DiskStatus.tsx +149 -0
- package/src/components/DiskStatus/i18n/en.json +6 -0
- package/src/components/DiskStatus/i18n/index.ts +5 -0
- package/src/components/EntityStatus/EntityStatus.tsx +1 -1
- package/src/components/EvictVDiskButton/i18n/en.json +1 -1
- package/src/components/HoverPopup/HoverPopup.tsx +67 -20
- package/src/components/HoverPopup/usePopupPriority.ts +39 -0
- package/src/components/PDiskInfo/PDiskLogSize.scss +12 -0
- package/src/components/PDiskInfo/PDiskLogSize.tsx +37 -0
- package/src/components/PDiskInfo/getPDiskDetails.tsx +37 -0
- package/src/components/PDiskInfo/i18n/en.json +64 -8
- package/src/components/PDiskInfo/statuses.ts +209 -0
- package/src/components/PDiskPopup/PDiskPopup.tsx +62 -147
- package/src/components/PDiskPopup/i18n/en.json +2 -12
- package/src/components/StorageGroupInfo/StorageGroupInfo.scss +21 -0
- package/src/components/StorageGroupInfo/StorageGroupInfo.tsx +121 -260
- package/src/components/StorageGroupInfo/i18n/en.json +1 -9
- package/src/components/VDisk/VDisk.tsx +31 -34
- package/src/components/VDisk/VDiskWithDonorsStack.tsx +2 -0
- package/src/components/VDisk/getFlagStatusText.ts +19 -0
- package/src/components/VDisk/i18n/en.json +1 -1
- package/src/components/VDiskInfo/getVDiskDetails.tsx +41 -0
- package/src/components/VDiskInfo/i18n/en.json +3 -10
- package/src/components/VDiskPopup/VDiskPopup.scss +3 -10
- package/src/components/VDiskPopup/VDiskPopup.tsx +197 -421
- package/src/components/VDiskPopup/i18n/en.json +6 -22
- package/src/components/VDiskStatus/VDiskReplicationStatus.tsx +77 -0
- package/src/components/VDiskStatus/VDiskStatus.scss +32 -0
- package/src/components/VDiskStatus/VDiskStatus.tsx +38 -0
- package/src/components/VDiskStatus/i18n/en.json +33 -0
- package/src/components/VDiskStatus/i18n/index.ts +7 -0
- package/src/components/VDiskStatus/index.ts +7 -0
- package/src/components/VDiskStatus/statuses.ts +139 -0
- package/src/components/capacityMetricsColumns/i18n/en.json +4 -4
- package/src/containers/Cluster/ClusterDrawerHealthcheck.tsx +6 -0
- package/src/containers/Clusters/ClusterDrawerHealthcheck.tsx +1 -0
- package/src/containers/Header/Header.tsx +11 -3
- package/src/containers/Header/StorageGroupLeftControls.tsx +38 -0
- package/src/containers/Header/i18n/en.json +3 -1
- package/src/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.tsx +13 -2
- package/src/containers/Storage/Disks/Disks.tsx +66 -12
- package/src/containers/Storage/PDisk/PDisk.tsx +3 -0
- package/src/containers/Storage/PaginatedStorageGroupsTable/columns/columns.tsx +24 -3
- package/src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.scss +14 -82
- package/src/containers/Storage/StorageGroupStateLabel.tsx +22 -0
- package/src/containers/Storage/utils/getStorageGroupStateLabel.ts +49 -0
- package/src/containers/StorageGroupPage/StorageGroupPage.scss +9 -13
- package/src/containers/StorageGroupPage/StorageGroupPage.tsx +53 -25
- package/src/containers/StorageGroupPage/i18n/en.json +3 -1
- package/src/containers/Tenant/Diagnostics/Overview/Overview.tsx +5 -1
- package/src/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.tsx +12 -1
- package/src/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.tsx +11 -10
- package/src/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.tsx +83 -20
- package/src/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/en.json +5 -1
- package/src/containers/Tenant/Healthcheck/components/HealthcheckDrawer.tsx +5 -2
- package/src/containers/Tenant/TenantDrawerHealthcheck.tsx +10 -0
- package/src/containers/Tenants/DatabaseDrawerHealthcheck.tsx +10 -0
- package/src/lib.ts +1 -0
- package/src/store/reducers/header/types.ts +3 -1
- package/src/store/reducers/pdisk/types.ts +1 -0
- package/src/store/reducers/pdisk/utils.ts +6 -3
- package/src/store/reducers/storage/prepareGroupsDisks.ts +7 -22
- package/src/store/reducers/storage/utils.ts +4 -0
- package/src/store/reducers/streamingQuery/streamingQuery.ts +2 -4
- package/src/styles/mixins.scss +22 -0
- package/src/types/api/pdisk.ts +4 -0
- package/src/types/api/vdisk.ts +9 -0
- package/src/types/store/nodesList.ts +7 -7
- package/src/uiFactory/types.ts +9 -2
- package/src/utils/bytesParsers/formatBytes.ts +23 -4
- package/src/utils/disks/constants.ts +5 -0
- package/src/utils/disks/diskInfo/getDiskLocationItems.ts +50 -0
- package/src/utils/disks/diskInfo/i18n/en.json +9 -0
- package/src/utils/disks/diskInfo/i18n/index.ts +5 -0
- package/src/utils/disks/iconCalculators.ts +1 -1
- package/src/utils/disks/prepareDisks.ts +21 -47
- package/src/utils/disks/types.ts +10 -2
- package/src/utils/hooks/useNodeMetadata.ts +21 -0
- package/src/utils/nodes.ts +6 -1
- package/src/utils/storageMetrics.ts +27 -14
- package/src/utils/timeParsers/formatDuration.ts +22 -1
- package/src/utils/timeParsers/i18n/en.json +5 -1
- package/src/utils/timeParsers/i18n/ru.json +5 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type {IconData, LabelProps} from '@gravity-ui/uikit';
|
|
2
|
+
import {Icon, Label, Tooltip} from '@gravity-ui/uikit';
|
|
3
|
+
import {capitalize} from 'lodash';
|
|
4
|
+
|
|
5
|
+
import {EFlag, isCapacityAlert} from '../../types/api/enums';
|
|
6
|
+
import {normalizeCapacityAlert} from '../../utils/capacityAlerts';
|
|
7
|
+
import {cn} from '../../utils/cn';
|
|
8
|
+
import {formatPDiskType} from '../../utils/disks/getPDiskType';
|
|
9
|
+
import {getDisplaySeverityColor} from '../../utils/disks/helpers';
|
|
10
|
+
import {getFlagIconWithColor} from '../../utils/disks/iconCalculators';
|
|
11
|
+
import {normalizeMediaType} from '../../utils/disks/normalizeMediaType';
|
|
12
|
+
import {calculateSpaceSeverity} from '../../utils/disks/severityCalculators';
|
|
13
|
+
import {EFlagToLabelTheme} from '../EntityStatus/EntityStatus';
|
|
14
|
+
import {getFlagStatusText} from '../VDisk/getFlagStatusText';
|
|
15
|
+
|
|
16
|
+
import i18n from './i18n';
|
|
17
|
+
|
|
18
|
+
import './DiskStatus.scss';
|
|
19
|
+
|
|
20
|
+
const b = cn('ydb-disk-status');
|
|
21
|
+
|
|
22
|
+
export interface DiskStatusLabelData {
|
|
23
|
+
value: string;
|
|
24
|
+
title?: string;
|
|
25
|
+
theme?: LabelProps['theme'];
|
|
26
|
+
icon?: IconData;
|
|
27
|
+
tooltip?: string;
|
|
28
|
+
dangerHeavy?: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type TitledDiskStatusLabelData = Omit<DiskStatusLabelData, 'title' | 'value'> & {
|
|
32
|
+
title: string;
|
|
33
|
+
value?: string;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export function DiskStatusLabel({
|
|
37
|
+
value,
|
|
38
|
+
theme = 'normal',
|
|
39
|
+
icon,
|
|
40
|
+
title,
|
|
41
|
+
tooltip,
|
|
42
|
+
dangerHeavy,
|
|
43
|
+
size = 's',
|
|
44
|
+
iconSize = 12,
|
|
45
|
+
className,
|
|
46
|
+
}: (DiskStatusLabelData | TitledDiskStatusLabelData) &
|
|
47
|
+
Pick<LabelProps, 'size' | 'className'> & {iconSize?: number}) {
|
|
48
|
+
const label = (
|
|
49
|
+
<Label
|
|
50
|
+
size={size}
|
|
51
|
+
theme={theme}
|
|
52
|
+
className={b('label', {'danger-heavy': dangerHeavy}, className)}
|
|
53
|
+
icon={icon ? <Icon data={icon} size={iconSize} /> : undefined}
|
|
54
|
+
value={title ? value : undefined}
|
|
55
|
+
>
|
|
56
|
+
{title ?? value}
|
|
57
|
+
</Label>
|
|
58
|
+
);
|
|
59
|
+
return tooltip ? (
|
|
60
|
+
<Tooltip content={tooltip} placement="top">
|
|
61
|
+
<span tabIndex={0} className={b('tooltip')}>
|
|
62
|
+
{label}
|
|
63
|
+
</span>
|
|
64
|
+
</Tooltip>
|
|
65
|
+
) : (
|
|
66
|
+
label
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function DiskTypeLabel({type, size}: {type?: string} & Pick<LabelProps, 'size'>) {
|
|
71
|
+
if (!type?.trim()) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const mediaType = normalizeMediaType(type);
|
|
75
|
+
const value = formatPDiskType(mediaType) ?? mediaType;
|
|
76
|
+
let tooltip: string | undefined;
|
|
77
|
+
switch (mediaType) {
|
|
78
|
+
case 'HDD':
|
|
79
|
+
tooltip = i18n('context_hdd');
|
|
80
|
+
break;
|
|
81
|
+
case 'SSD':
|
|
82
|
+
tooltip = i18n('context_ssd');
|
|
83
|
+
break;
|
|
84
|
+
case 'NVME':
|
|
85
|
+
tooltip = i18n('context_nvme');
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
return (
|
|
89
|
+
<DiskStatusLabel
|
|
90
|
+
value={value}
|
|
91
|
+
tooltip={tooltip}
|
|
92
|
+
size={size}
|
|
93
|
+
className={b('type', {
|
|
94
|
+
hdd: mediaType === 'HDD',
|
|
95
|
+
ssd: mediaType === 'SSD',
|
|
96
|
+
nvme: mediaType === 'NVME',
|
|
97
|
+
})}
|
|
98
|
+
/>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function DiskCapacityAlertLabel({
|
|
103
|
+
value,
|
|
104
|
+
emptyText = i18n('value_no-data'),
|
|
105
|
+
}: {
|
|
106
|
+
value?: string;
|
|
107
|
+
emptyText?: string;
|
|
108
|
+
}) {
|
|
109
|
+
const capacityAlert = normalizeCapacityAlert(value);
|
|
110
|
+
if (!capacityAlert) {
|
|
111
|
+
return <DiskStatusLabel size="xs" value={emptyText} theme="unknown" />;
|
|
112
|
+
}
|
|
113
|
+
const color = isCapacityAlert(capacityAlert)
|
|
114
|
+
? getDisplaySeverityColor(
|
|
115
|
+
calculateSpaceSeverity({CapacityAlert: capacityAlert}),
|
|
116
|
+
).toLowerCase()
|
|
117
|
+
: undefined;
|
|
118
|
+
return (
|
|
119
|
+
<DiskStatusLabel
|
|
120
|
+
size="xs"
|
|
121
|
+
value={capitalize(capacityAlert.replaceAll('_', ' '))}
|
|
122
|
+
className={b('capacity-alert', {color})}
|
|
123
|
+
/>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function DiskFlagLabel({
|
|
128
|
+
flag,
|
|
129
|
+
title,
|
|
130
|
+
icon,
|
|
131
|
+
emptyText = i18n('value_no-data'),
|
|
132
|
+
}: {
|
|
133
|
+
flag?: EFlag;
|
|
134
|
+
title?: string;
|
|
135
|
+
icon?: IconData;
|
|
136
|
+
emptyText?: string;
|
|
137
|
+
}) {
|
|
138
|
+
const resolvedFlag = flag || EFlag.Grey;
|
|
139
|
+
return (
|
|
140
|
+
<DiskStatusLabel
|
|
141
|
+
value={resolvedFlag === EFlag.Grey ? emptyText : getFlagStatusText(resolvedFlag)}
|
|
142
|
+
title={title}
|
|
143
|
+
theme={EFlagToLabelTheme[resolvedFlag] ?? 'normal'}
|
|
144
|
+
icon={icon ?? getFlagIconWithColor(resolvedFlag)?.icon}
|
|
145
|
+
dangerHeavy={resolvedFlag === EFlag.Red}
|
|
146
|
+
size="xs"
|
|
147
|
+
/>
|
|
148
|
+
);
|
|
149
|
+
}
|
|
@@ -14,7 +14,7 @@ import './EntityStatus.scss';
|
|
|
14
14
|
|
|
15
15
|
const b = cn('ydb-entity-status');
|
|
16
16
|
|
|
17
|
-
const EFlagToLabelTheme: Record<EFlag, LabelProps['theme']> = {
|
|
17
|
+
export const EFlagToLabelTheme: Record<EFlag, LabelProps['theme']> = {
|
|
18
18
|
[EFlag.Red]: 'danger',
|
|
19
19
|
[EFlag.Blue]: 'success',
|
|
20
20
|
[EFlag.Green]: 'success',
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"action_evict-short": "Evict",
|
|
4
4
|
"action_force-evict": "Evict anyway",
|
|
5
5
|
"title_evict-dialog": "Evict VDisk?",
|
|
6
|
-
"confirm_evict": "The VDisk will be evicted from the PDisk.
|
|
6
|
+
"confirm_evict": "The VDisk will be evicted from the PDisk. This VDisk will be replaced by a new one in the group. Data will be replicated to the new disk. The old VDisk will serve as a donor until replication is complete, and then it will be removed.",
|
|
7
7
|
"alert_evict": "This operation cannot be cancelled.",
|
|
8
8
|
"alert_not-allowed": "You don't have enough rights to evict VDisk",
|
|
9
9
|
"alert_donor-mode-impossible": "Evicting a donor VDisk is not possible"
|
|
@@ -8,26 +8,38 @@ import {YDB_POPOVER_CLASS_NAME} from '../../utils/constants';
|
|
|
8
8
|
import {useEventHandler} from '../../utils/hooks/useEventHandler';
|
|
9
9
|
|
|
10
10
|
import {getPopupScrollContainer} from './getPopupScrollContainer';
|
|
11
|
+
import {usePopupPriority} from './usePopupPriority';
|
|
11
12
|
|
|
12
13
|
const DEBOUNCE_TIMEOUT = 100;
|
|
13
14
|
|
|
14
|
-
function useVisibleAnchor(
|
|
15
|
+
function useVisibleAnchor(
|
|
16
|
+
anchorElement: HTMLElement | null,
|
|
17
|
+
open: boolean,
|
|
18
|
+
onHidden: VoidFunction,
|
|
19
|
+
) {
|
|
15
20
|
const [visibleAnchor, setVisibleAnchor] = React.useState<HTMLElement | null>(null);
|
|
21
|
+
// Mouse events can arrive before React renders the observer's next visibility state.
|
|
22
|
+
const visibleAnchorRef = React.useRef<HTMLElement | null>(null);
|
|
16
23
|
|
|
17
24
|
React.useLayoutEffect(() => {
|
|
18
25
|
setVisibleAnchor(null);
|
|
26
|
+
visibleAnchorRef.current = null;
|
|
19
27
|
if (!open || !anchorElement) {
|
|
20
28
|
return undefined;
|
|
21
29
|
}
|
|
22
30
|
|
|
23
31
|
const observer = new IntersectionObserver(([entry]) => {
|
|
24
|
-
|
|
32
|
+
visibleAnchorRef.current = entry.isIntersecting ? anchorElement : null;
|
|
33
|
+
setVisibleAnchor(visibleAnchorRef.current);
|
|
34
|
+
if (!entry.isIntersecting) {
|
|
35
|
+
onHidden();
|
|
36
|
+
}
|
|
25
37
|
});
|
|
26
38
|
observer.observe(anchorElement);
|
|
27
39
|
return () => observer.disconnect();
|
|
28
|
-
}, [anchorElement, open]);
|
|
40
|
+
}, [anchorElement, open, onHidden]);
|
|
29
41
|
|
|
30
|
-
return anchorElement !== null && visibleAnchor === anchorElement;
|
|
42
|
+
return [anchorElement !== null && visibleAnchor === anchorElement, visibleAnchorRef] as const;
|
|
31
43
|
}
|
|
32
44
|
|
|
33
45
|
type HoverPopupProps = {
|
|
@@ -37,6 +49,7 @@ type HoverPopupProps = {
|
|
|
37
49
|
anchorRef?: React.RefObject<HTMLElement>;
|
|
38
50
|
onShowPopup?: VoidFunction;
|
|
39
51
|
onHidePopup?: VoidFunction;
|
|
52
|
+
onClosePopup?: VoidFunction;
|
|
40
53
|
delayOpen?: number;
|
|
41
54
|
delayClose?: number;
|
|
42
55
|
contentClassName?: string;
|
|
@@ -50,6 +63,7 @@ export const HoverPopup = ({
|
|
|
50
63
|
anchorRef,
|
|
51
64
|
onShowPopup,
|
|
52
65
|
onHidePopup,
|
|
66
|
+
onClosePopup,
|
|
53
67
|
placement = ['top', 'bottom', 'left', 'right'],
|
|
54
68
|
contentClassName,
|
|
55
69
|
delayClose = DEBOUNCE_TIMEOUT,
|
|
@@ -60,6 +74,8 @@ export const HoverPopup = ({
|
|
|
60
74
|
const [isFocused, setIsFocused] = React.useState(false);
|
|
61
75
|
|
|
62
76
|
const anchor = React.useRef<HTMLSpanElement>(null);
|
|
77
|
+
const {activate, zIndex} = usePopupPriority();
|
|
78
|
+
const bringToFront = useEventHandler(() => activate(anchorRef?.current || anchor.current));
|
|
63
79
|
|
|
64
80
|
const reportedOpenRef = React.useRef(false);
|
|
65
81
|
|
|
@@ -113,9 +129,33 @@ export const HoverPopup = ({
|
|
|
113
129
|
setIsPopupContentHovered(false);
|
|
114
130
|
setIsFocused(false);
|
|
115
131
|
reportOpen(false, true);
|
|
116
|
-
|
|
132
|
+
onClosePopup?.();
|
|
133
|
+
}, [debouncedHandleHidePopup, debouncedHandleShowPopup, onClosePopup, reportOpen]);
|
|
117
134
|
|
|
118
|
-
const
|
|
135
|
+
const hideClippedPopup = useEventHandler(() => {
|
|
136
|
+
debouncedHandleShowPopup.cancel();
|
|
137
|
+
setIsPopupContentHovered(false);
|
|
138
|
+
setIsFocused(false);
|
|
139
|
+
debouncedHandleHidePopup();
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
const internalOpen = isPopupVisible || isPopupContentHovered || isFocused;
|
|
143
|
+
const open = Boolean(internalOpen || showPopup);
|
|
144
|
+
|
|
145
|
+
const anchorElement = anchorRef?.current || anchor.current;
|
|
146
|
+
// Release only this popup's hover source; a hovered peer can keep the pair open.
|
|
147
|
+
const [isAnchorVisible, visibleAnchorRef] = useVisibleAnchor(
|
|
148
|
+
anchorElement,
|
|
149
|
+
open,
|
|
150
|
+
hideClippedPopup,
|
|
151
|
+
);
|
|
152
|
+
const container = getPopupScrollContainer(anchorElement);
|
|
153
|
+
|
|
154
|
+
const onMouseEnter = (event: React.MouseEvent<HTMLSpanElement>) => {
|
|
155
|
+
if (event.buttons !== 0) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
bringToFront();
|
|
119
159
|
debouncedHandleHidePopup.cancel();
|
|
120
160
|
debouncedHandleShowPopup();
|
|
121
161
|
};
|
|
@@ -125,11 +165,21 @@ export const HoverPopup = ({
|
|
|
125
165
|
debouncedHandleHidePopup();
|
|
126
166
|
};
|
|
127
167
|
|
|
128
|
-
const onPopupMouseEnter = React.useCallback(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
168
|
+
const onPopupMouseEnter = React.useCallback(
|
|
169
|
+
(event: React.MouseEvent<HTMLDivElement>) => {
|
|
170
|
+
// An exiting popup can still receive events during its close animation.
|
|
171
|
+
if (!open || visibleAnchorRef.current !== anchorElement) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if (event.buttons === 0) {
|
|
175
|
+
bringToFront();
|
|
176
|
+
}
|
|
177
|
+
debouncedHandleHidePopup.cancel();
|
|
178
|
+
setIsPopupContentHovered(true);
|
|
179
|
+
reportOpen(true);
|
|
180
|
+
},
|
|
181
|
+
[bringToFront, reportOpen, debouncedHandleHidePopup, open, visibleAnchorRef, anchorElement],
|
|
182
|
+
);
|
|
133
183
|
|
|
134
184
|
const onPopupMouseLeave = React.useCallback(() => {
|
|
135
185
|
setIsPopupContentHovered(false);
|
|
@@ -137,9 +187,13 @@ export const HoverPopup = ({
|
|
|
137
187
|
}, [debouncedHandleHidePopup]);
|
|
138
188
|
|
|
139
189
|
const onPopupContextMenu = React.useCallback(() => {
|
|
190
|
+
if (!open || visibleAnchorRef.current !== anchorElement) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
bringToFront();
|
|
140
194
|
setIsFocused(true);
|
|
141
195
|
reportOpen(true);
|
|
142
|
-
}, [reportOpen]);
|
|
196
|
+
}, [bringToFront, reportOpen, open, visibleAnchorRef, anchorElement]);
|
|
143
197
|
|
|
144
198
|
const onPopupBlur = React.useCallback(() => {
|
|
145
199
|
setIsFocused(false);
|
|
@@ -149,14 +203,6 @@ export const HoverPopup = ({
|
|
|
149
203
|
closePopup();
|
|
150
204
|
}, [closePopup]);
|
|
151
205
|
|
|
152
|
-
const internalOpen = isPopupVisible || isPopupContentHovered || isFocused;
|
|
153
|
-
const open = Boolean(internalOpen || showPopup);
|
|
154
|
-
|
|
155
|
-
const anchorElement = anchorRef?.current || anchor.current;
|
|
156
|
-
// Clipping a paired disk must not clear the shared hover state via onHidePopup.
|
|
157
|
-
const isAnchorVisible = useVisibleAnchor(anchorElement, open);
|
|
158
|
-
const container = getPopupScrollContainer(anchorElement);
|
|
159
|
-
|
|
160
206
|
return (
|
|
161
207
|
<React.Fragment>
|
|
162
208
|
<span ref={anchor} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
|
|
@@ -165,6 +211,7 @@ export const HoverPopup = ({
|
|
|
165
211
|
{anchorElement ? (
|
|
166
212
|
<Popup
|
|
167
213
|
container={container}
|
|
214
|
+
zIndex={zIndex}
|
|
168
215
|
// Keep portal typography when the page uses a different font.
|
|
169
216
|
floatingStyles={{fontFamily: 'var(--g-text-body-font-family)'}}
|
|
170
217
|
anchorElement={anchorElement}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
// Only the previously active popup needs updating when another one is entered.
|
|
4
|
+
const activePopups = new WeakMap<Document, VoidFunction>();
|
|
5
|
+
|
|
6
|
+
export function usePopupPriority() {
|
|
7
|
+
const [active, setActive] = React.useState(false);
|
|
8
|
+
const documentRef = React.useRef<Document>();
|
|
9
|
+
const deactivate = React.useCallback(() => setActive(false), []);
|
|
10
|
+
const activate = React.useCallback(
|
|
11
|
+
(element: HTMLElement | null) => {
|
|
12
|
+
if (!element) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const doc = element.ownerDocument;
|
|
16
|
+
const previous = activePopups.get(doc);
|
|
17
|
+
if (previous !== deactivate) {
|
|
18
|
+
previous?.();
|
|
19
|
+
activePopups.set(doc, deactivate);
|
|
20
|
+
}
|
|
21
|
+
documentRef.current = doc;
|
|
22
|
+
setActive(true);
|
|
23
|
+
},
|
|
24
|
+
[deactivate],
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
React.useEffect(
|
|
28
|
+
() => () => {
|
|
29
|
+
const doc = documentRef.current;
|
|
30
|
+
if (doc && activePopups.get(doc) === deactivate) {
|
|
31
|
+
activePopups.delete(doc);
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
[deactivate],
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
// Keep tooltips, menus and modal dialogs (Gravity UI's default 1000) above cards.
|
|
38
|
+
return {activate, zIndex: active ? 999 : 998};
|
|
39
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {Flex, Progress} from '@gravity-ui/uikit';
|
|
2
|
+
|
|
3
|
+
import {cn} from '../../utils/cn';
|
|
4
|
+
import {formatStorageMetricPair} from '../../utils/storageMetrics';
|
|
5
|
+
import {parseOptionalNonNegativeNumber} from '../../utils/utils';
|
|
6
|
+
|
|
7
|
+
import {pDiskInfoKeyset as i18n} from './i18n';
|
|
8
|
+
|
|
9
|
+
import './PDiskLogSize.scss';
|
|
10
|
+
|
|
11
|
+
const b = cn('ydb-pdisk-log-size');
|
|
12
|
+
|
|
13
|
+
export function PDiskLogSize({used, total}: {used?: string; total?: string}) {
|
|
14
|
+
const usedSize = parseOptionalNonNegativeNumber(used);
|
|
15
|
+
const totalSize = parseOptionalNonNegativeNumber(total);
|
|
16
|
+
const percentage =
|
|
17
|
+
usedSize !== undefined && totalSize !== undefined && totalSize > 0
|
|
18
|
+
? Math.min(100, (usedSize / totalSize) * 100)
|
|
19
|
+
: undefined;
|
|
20
|
+
|
|
21
|
+
if (percentage === undefined) {
|
|
22
|
+
return formatStorageMetricPair(usedSize, totalSize, 2);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<Flex gap={1} alignItems="center" className={b()}>
|
|
27
|
+
<Progress
|
|
28
|
+
className={b('progress')}
|
|
29
|
+
value={percentage}
|
|
30
|
+
theme="success"
|
|
31
|
+
size="s"
|
|
32
|
+
aria-label={i18n('log-size')}
|
|
33
|
+
/>
|
|
34
|
+
<span>{formatStorageMetricPair(usedSize, totalSize, 2)}</span>
|
|
35
|
+
</Flex>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {formatBytes} from '../../utils/bytesParsers';
|
|
2
|
+
import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
|
|
3
|
+
import type {DiskDetailItem} from '../../utils/disks/diskInfo/getDiskLocationItems';
|
|
4
|
+
import type {PreparedPDisk} from '../../utils/disks/types';
|
|
5
|
+
import {parseOptionalNonNegativeNumber} from '../../utils/utils';
|
|
6
|
+
import {DiskFlagLabel} from '../DiskStatus/DiskStatus';
|
|
7
|
+
|
|
8
|
+
import {PDiskLogSize} from './PDiskLogSize';
|
|
9
|
+
import {pDiskInfoKeyset as i18n} from './i18n';
|
|
10
|
+
|
|
11
|
+
export function getPDiskRuntimeItems(data: PreparedPDisk): DiskDetailItem[] {
|
|
12
|
+
return [
|
|
13
|
+
{id: 'device', name: i18n('device'), content: <DiskFlagLabel flag={data.Device} />},
|
|
14
|
+
{id: 'realtime', name: i18n('realtime'), content: <DiskFlagLabel flag={data.Realtime} />},
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function getPDiskLogItems(data: PreparedPDisk): DiskDetailItem[] {
|
|
19
|
+
const systemSize = parseOptionalNonNegativeNumber(data.SystemSize);
|
|
20
|
+
return [
|
|
21
|
+
{
|
|
22
|
+
id: 'log-size',
|
|
23
|
+
name: i18n('log-size'),
|
|
24
|
+
content: <PDiskLogSize used={data.LogUsedSize} total={data.LogTotalSize} />,
|
|
25
|
+
note: i18n('context_log-size'),
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
id: 'system-size',
|
|
29
|
+
name: i18n('system-size'),
|
|
30
|
+
content:
|
|
31
|
+
systemSize === undefined
|
|
32
|
+
? EMPTY_DATA_PLACEHOLDER
|
|
33
|
+
: formatBytes({value: systemSize, fixedDecimalPlaces: 2}),
|
|
34
|
+
note: i18n('context_system-size'),
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
}
|
|
@@ -4,23 +4,79 @@
|
|
|
4
4
|
"guid": "GUID",
|
|
5
5
|
"serial-number": "Serial Number",
|
|
6
6
|
"shared-with-os": "SharedWithOs",
|
|
7
|
-
|
|
8
7
|
"drive-status": "Drive Status",
|
|
9
8
|
"state": "State",
|
|
10
9
|
"device": "Device",
|
|
11
10
|
"realtime": "Realtime",
|
|
12
|
-
|
|
13
|
-
"value_no-data": "No data",
|
|
14
|
-
|
|
11
|
+
"value_no-data": "Not Available",
|
|
15
12
|
"space": "Space",
|
|
16
13
|
"usage": "Usage",
|
|
17
14
|
"slots": "Slots",
|
|
18
15
|
"log-size": "Log Size",
|
|
19
16
|
"system-size": "System Size",
|
|
20
|
-
|
|
21
17
|
"links": "Links",
|
|
22
|
-
|
|
23
18
|
"developer-ui": "Developer UI",
|
|
24
|
-
|
|
25
|
-
"
|
|
19
|
+
"yes": "Yes",
|
|
20
|
+
"context_slots": "The number of VDisks residing on this PDisk",
|
|
21
|
+
"context_log-size": "The size of the Common Log shared by the residing VDisks",
|
|
22
|
+
"context_system-size": "The size reserved for the PDisk system components. Includes SysLog",
|
|
23
|
+
"value_unknown": "Unknown",
|
|
24
|
+
"value_ok": "Ok",
|
|
25
|
+
"value_initial": "Initial",
|
|
26
|
+
"value_initial-format-read": "Initial Format Read",
|
|
27
|
+
"value_initial-sys-log-read": "Initial Sys Log Read",
|
|
28
|
+
"value_initial-common-log-read": "Initial Common Log Read",
|
|
29
|
+
"value_open-file-error": "Open File Error",
|
|
30
|
+
"value_device-io-error": "Device Io Error",
|
|
31
|
+
"value_stopped": "Stopped",
|
|
32
|
+
"value_initial-format-read-error": "Initial Format Read Error",
|
|
33
|
+
"value_initial-sys-log-read-error": "Initial Sys Log Read Error",
|
|
34
|
+
"value_initial-sys-log-parse-error": "Initial Sys Log Parse Error",
|
|
35
|
+
"value_common-logger-init-error": "Common Logger Init Error",
|
|
36
|
+
"value_initial-common-log-read-error": "Initial Common Log Read Error",
|
|
37
|
+
"value_initial-common-log-parse-error": "Initial Common Log Parse Error",
|
|
38
|
+
"value_chunk-quota-error": "Chunk Quota Error",
|
|
39
|
+
"value_active": "Active",
|
|
40
|
+
"value_inactive": "Inactive",
|
|
41
|
+
"value_to-be-removed": "To be removed",
|
|
42
|
+
"value_faulty": "Faulty",
|
|
43
|
+
"value_broken": "Broken",
|
|
44
|
+
"value_decommit-none": "No decommission",
|
|
45
|
+
"value_decommit-pending": "Decommission pending",
|
|
46
|
+
"value_decommit-rejected": "Decommission rejected",
|
|
47
|
+
"value_decommit-imminent": "Decommission imminent",
|
|
48
|
+
"label_maintenance": "Maintenance",
|
|
49
|
+
"value_maintenance-none": "None",
|
|
50
|
+
"value_maintenance-unset": "Unset",
|
|
51
|
+
"value_maintenance-no-new-vdisks": "No new VDisks",
|
|
52
|
+
"value_maintenance-long-term": "Long term",
|
|
53
|
+
"context_unknown": "Value of status is unknown (default)",
|
|
54
|
+
"context_state-normal": "The PDisk is operating normally",
|
|
55
|
+
"context_state-initial": "The PDisk actor is starting and has not yet begun reading disk metadata",
|
|
56
|
+
"context_initial-format-read": "The PDisk is reading and validating its format record",
|
|
57
|
+
"context_initial-sys-log-read": "The PDisk is reading its system log during startup",
|
|
58
|
+
"context_initial-common-log-read": "The PDisk is reading VDisk common log during startup",
|
|
59
|
+
"context_open-file-error": "The PDisk could not open its backing device",
|
|
60
|
+
"context_device-io-error": "The PDisk encountered a fatal physical device I/O error",
|
|
61
|
+
"context_stopped": "The PDisk was explicitly stopped by a control request",
|
|
62
|
+
"context_initial-format-read-error": "The format record could not be read or validated",
|
|
63
|
+
"context_initial-sys-log-read-error": "The system log could not be read",
|
|
64
|
+
"context_initial-sys-log-parse-error": "The system log was read but could not be parsed",
|
|
65
|
+
"context_common-logger-init-error": "The PDisk failed to initialize the VDisk common log writer",
|
|
66
|
+
"context_initial-common-log-read-error": "VDisk common log could not be read",
|
|
67
|
+
"context_initial-common-log-parse-error": "VDisk common log was read but could not be parsed",
|
|
68
|
+
"context_chunk-quota-error": "The PDisk failed to calculate or initialize chunk quotas",
|
|
69
|
+
"context_active": "Working as expected",
|
|
70
|
+
"context_inactive": "New groups are not created over this drive, but existing ones continue to work as expected",
|
|
71
|
+
"context_to-be-removed": "Same as INACTIVE, but drive is counted in fault model as not working",
|
|
72
|
+
"context_faulty": "Drive is expected to become BROKEN soon, new groups are not created, old groups are asynchronously moved out from this drive",
|
|
73
|
+
"context_broken": "Drive is not working, groups are automatically moved out of this drive upon reception of this status",
|
|
74
|
+
"context_decommit-none": "The PDisk is not being decommissioned",
|
|
75
|
+
"context_decommit-pending": "Decommissioning is planned; allocation of new VDisks is blocked, existing VDisks are not moved",
|
|
76
|
+
"context_decommit-rejected": "The PDisk is operational but cannot receive VDisks moved from the other decommitted PDisks",
|
|
77
|
+
"context_decommit-imminent": "Active phase of decommissioning, existing VDisks are moved from the PDisk asynchronously",
|
|
78
|
+
"context_maintenance-none": "There is no active maintenance request for this PDisk",
|
|
79
|
+
"context_maintenance-unset": "No maintenance status has been explicitly provided",
|
|
80
|
+
"context_maintenance-no-new-vdisks": "Allocation of new VDisks is blocked, existing VDisks are not moved",
|
|
81
|
+
"context_maintenance-long-term": "Device is requested for a long-term maintenance, existing VDisks are moved from the PDisk asynchronously"
|
|
26
82
|
}
|