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.
Files changed (337) hide show
  1. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.d.ts +2 -0
  2. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.js +9 -0
  3. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.js.map +1 -0
  4. package/dist/components/AutoRefreshControl/StickyAutoRefreshControl.scss +18 -0
  5. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.d.ts +3 -2
  6. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js +19 -4
  7. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js.map +1 -1
  8. package/dist/components/CopyableValue/CopyableValue.d.ts +10 -0
  9. package/dist/components/CopyableValue/CopyableValue.js +10 -0
  10. package/dist/components/CopyableValue/CopyableValue.js.map +1 -0
  11. package/dist/components/CopyableValue/CopyableValue.scss +16 -0
  12. package/dist/components/CopyableValue/i18n/en.json +3 -0
  13. package/dist/components/CopyableValue/i18n/index.d.ts +2 -0
  14. package/dist/components/CopyableValue/i18n/index.js +6 -0
  15. package/dist/components/CopyableValue/i18n/index.js.map +1 -0
  16. package/dist/components/CriticalActionDialog/CriticalActionDialog.d.ts +2 -1
  17. package/dist/components/CriticalActionDialog/CriticalActionDialog.js +2 -1
  18. package/dist/components/CriticalActionDialog/CriticalActionDialog.js.map +1 -1
  19. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.d.ts +1 -21
  20. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js +40 -126
  21. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js.map +1 -1
  22. package/dist/components/DiskCapacityInfo/i18n/en.json +0 -1
  23. package/dist/components/DiskCapacityInfo/i18n/index.d.ts +1 -1
  24. package/dist/components/EntityStatus/EntityStatus.d.ts +18 -6
  25. package/dist/components/EntityStatus/EntityStatus.js +5 -1
  26. package/dist/components/EntityStatus/EntityStatus.js.map +1 -1
  27. package/dist/components/EntityStatus/EntityStatus.scss +5 -0
  28. package/dist/components/EvictVDiskButton/EvictVDiskButton.d.ts +5 -2
  29. package/dist/components/EvictVDiskButton/EvictVDiskButton.js +3 -2
  30. package/dist/components/EvictVDiskButton/EvictVDiskButton.js.map +1 -1
  31. package/dist/components/EvictVDiskButton/i18n/en.json +2 -2
  32. package/dist/components/FullNodeViewer/FullNodeViewer.js +4 -7
  33. package/dist/components/FullNodeViewer/FullNodeViewer.js.map +1 -1
  34. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  35. package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.d.ts +3 -0
  36. package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.js +12 -0
  37. package/dist/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.js.map +1 -0
  38. package/dist/components/HideUnavailableNodesSwitch/i18n/en.json +3 -0
  39. package/dist/components/HideUnavailableNodesSwitch/i18n/index.d.ts +2 -0
  40. package/dist/components/HideUnavailableNodesSwitch/i18n/index.js +6 -0
  41. package/dist/components/HideUnavailableNodesSwitch/i18n/index.js.map +1 -0
  42. package/dist/components/HideUnavailableNodesSwitch/i18n/ru.json +3 -0
  43. package/dist/components/HoverPopup/HoverPopup.d.ts +1 -0
  44. package/dist/components/HoverPopup/HoverPopup.js +87 -16
  45. package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
  46. package/dist/components/MemoryViewer/MemoryViewer.d.ts +3 -1
  47. package/dist/components/MemoryViewer/MemoryViewer.js +25 -16
  48. package/dist/components/MemoryViewer/MemoryViewer.js.map +1 -1
  49. package/dist/components/MemoryViewer/i18n/en.json +4 -3
  50. package/dist/components/MemoryViewer/i18n/index.d.ts +1 -1
  51. package/dist/components/MemoryViewer/utils.d.ts +4 -2
  52. package/dist/components/MemoryViewer/utils.js +11 -11
  53. package/dist/components/MemoryViewer/utils.js.map +1 -1
  54. package/dist/components/PDiskInfo/PDiskInfo.d.ts +4 -9
  55. package/dist/components/PDiskInfo/PDiskInfo.js +32 -144
  56. package/dist/components/PDiskInfo/PDiskInfo.js.map +1 -1
  57. package/dist/components/PDiskInfo/PDiskInfo.scss +15 -0
  58. package/dist/components/PDiskInfo/PDiskLogSize.js +1 -1
  59. package/dist/components/PDiskInfo/PDiskLogSize.js.map +1 -1
  60. package/dist/components/PDiskInfo/i18n/en.json +6 -3
  61. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  62. package/dist/components/PDiskInfo/statuses.js +12 -3
  63. package/dist/components/PDiskInfo/statuses.js.map +1 -1
  64. package/dist/components/PageMeta/PageMeta.d.ts +0 -2
  65. package/dist/components/PageMeta/PageMeta.js +1 -6
  66. package/dist/components/PageMeta/PageMeta.js.map +1 -1
  67. package/dist/components/Search/Search.js +3 -1
  68. package/dist/components/Search/Search.js.map +1 -1
  69. package/dist/components/StorageGroupInfo/StorageGroupInfo.js +4 -9
  70. package/dist/components/StorageGroupInfo/StorageGroupInfo.js.map +1 -1
  71. package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
  72. package/dist/components/TenantNameWrapper/i18n/index.d.ts +1 -1
  73. package/dist/components/VDisk/VDisk.js +2 -2
  74. package/dist/components/VDisk/VDisk.js.map +1 -1
  75. package/dist/components/VDiskInfo/VDiskInfo.d.ts +3 -7
  76. package/dist/components/VDiskInfo/VDiskInfo.js +57 -235
  77. package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
  78. package/dist/components/VDiskInfo/VDiskInfo.scss +19 -3
  79. package/dist/components/VDiskInfo/getVDiskDetails.d.ts +7 -1
  80. package/dist/components/VDiskInfo/getVDiskDetails.js +14 -1
  81. package/dist/components/VDiskInfo/getVDiskDetails.js.map +1 -1
  82. package/dist/components/VDiskInfo/i18n/en.json +4 -13
  83. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  84. package/dist/components/VDiskPopup/VDiskPopup.d.ts +2 -1
  85. package/dist/components/VDiskPopup/VDiskPopup.js +10 -26
  86. package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
  87. package/dist/components/VDiskPopup/i18n/en.json +0 -2
  88. package/dist/components/VDiskPopup/i18n/index.d.ts +1 -1
  89. package/dist/components/VDiskStatus/VDiskReplicationStatus.js +1 -1
  90. package/dist/components/VDiskStatus/VDiskReplicationStatus.js.map +1 -1
  91. package/dist/components/VDiskStatus/VDiskStatus.js +2 -2
  92. package/dist/components/VDiskStatus/VDiskStatus.js.map +1 -1
  93. package/dist/components/VDiskStatus/VDiskStatus.scss +4 -0
  94. package/dist/components/VDiskStatus/statuses.js +2 -2
  95. package/dist/components/VDiskStatus/statuses.js.map +1 -1
  96. package/dist/components/nodesColumns/columns.d.ts +1 -0
  97. package/dist/components/nodesColumns/columns.js +13 -6
  98. package/dist/components/nodesColumns/columns.js.map +1 -1
  99. package/dist/containers/Clusters/Clusters.js +35 -6
  100. package/dist/containers/Clusters/Clusters.js.map +1 -1
  101. package/dist/containers/Clusters/Clusters.scss +24 -6
  102. package/dist/containers/Clusters/columns.js +9 -4
  103. package/dist/containers/Clusters/columns.js.map +1 -1
  104. package/dist/containers/Clusters/i18n/en.json +6 -0
  105. package/dist/containers/Clusters/i18n/index.d.ts +1 -1
  106. package/dist/containers/Header/Header.js +8 -0
  107. package/dist/containers/Header/Header.js.map +1 -1
  108. package/dist/containers/Header/HeaderLeftControls.js +3 -1
  109. package/dist/containers/Header/HeaderLeftControls.js.map +1 -1
  110. package/dist/containers/Header/PDiskLeftControls.d.ts +1 -0
  111. package/dist/containers/Header/PDiskLeftControls.js +24 -0
  112. package/dist/containers/Header/PDiskLeftControls.js.map +1 -0
  113. package/dist/containers/Header/VDiskLeftControls.d.ts +1 -0
  114. package/dist/containers/Header/VDiskLeftControls.js +23 -0
  115. package/dist/containers/Header/VDiskLeftControls.js.map +1 -0
  116. package/dist/containers/Header/breadcrumbs.js +5 -2
  117. package/dist/containers/Header/breadcrumbs.js.map +1 -1
  118. package/dist/containers/Header/i18n/en.json +4 -1
  119. package/dist/containers/Header/i18n/index.d.ts +1 -1
  120. package/dist/containers/Node/Node.js +4 -3
  121. package/dist/containers/Node/Node.js.map +1 -1
  122. package/dist/containers/Node/Node.scss +14 -2
  123. package/dist/containers/Nodes/NodesControls/NodesControls.js +2 -1
  124. package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
  125. package/dist/containers/Nodes/NodesTable.js +4 -0
  126. package/dist/containers/Nodes/NodesTable.js.map +1 -1
  127. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +8 -3
  128. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
  129. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js +12 -2
  130. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js.map +1 -1
  131. package/dist/containers/Nodes/getNodes.js +2 -1
  132. package/dist/containers/Nodes/getNodes.js.map +1 -1
  133. package/dist/containers/Nodes/useDebouncedSearch.d.ts +2 -0
  134. package/dist/containers/Nodes/useDebouncedSearch.js +11 -0
  135. package/dist/containers/Nodes/useDebouncedSearch.js.map +1 -0
  136. package/dist/containers/PDiskPage/PDiskPage.js +24 -34
  137. package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
  138. package/dist/containers/PDiskPage/PDiskPage.scss +29 -11
  139. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js +3 -3
  140. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js.map +1 -1
  141. package/dist/containers/PDiskPage/PDiskStorageDetails.d.ts +6 -0
  142. package/dist/containers/PDiskPage/PDiskStorageDetails.js +28 -0
  143. package/dist/containers/PDiskPage/PDiskStorageDetails.js.map +1 -0
  144. package/dist/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  145. package/dist/containers/PDiskPage/i18n/en.json +1 -0
  146. package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
  147. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
  148. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js +3 -0
  149. package/dist/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.js.map +1 -1
  150. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js +8 -1
  151. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.js.map +1 -1
  152. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js +2 -1
  153. package/dist/containers/Storage/PaginatedStorageNodes/StorageNodesControls.js.map +1 -1
  154. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js +4 -0
  155. package/dist/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.js.map +1 -1
  156. package/dist/containers/Storage/PaginatedStorageNodesTable/getNodes.js +2 -1
  157. package/dist/containers/Storage/PaginatedStorageNodesTable/getNodes.js.map +1 -1
  158. package/dist/containers/Storage/Storage.scss +4 -0
  159. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +1 -1
  160. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  161. package/dist/containers/Storage/useStorageQueryParams.d.ts +4 -4
  162. package/dist/containers/StorageGroupPage/StorageGroupPage.js +5 -14
  163. package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
  164. package/dist/containers/StorageGroupPage/StorageGroupPage.scss +19 -4
  165. package/dist/containers/StorageGroupPage/i18n/en.json +0 -2
  166. package/dist/containers/StorageGroupPage/i18n/index.d.ts +1 -1
  167. package/dist/containers/Tablet/Tablet.js +3 -2
  168. package/dist/containers/Tablet/Tablet.js.map +1 -1
  169. package/dist/containers/Tablet/Tablet.scss +15 -1
  170. package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/ManagePartitioningDialog/i18n/index.d.ts +1 -1
  171. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +5 -12
  172. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  173. package/dist/containers/Tenant/Diagnostics/TopQueries/columns/i18n/index.d.ts +1 -1
  174. package/dist/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  175. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js +2 -2
  176. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js.map +1 -1
  177. package/dist/containers/Tenant/TenantDrawerHealthcheck.js +10 -2
  178. package/dist/containers/Tenant/TenantDrawerHealthcheck.js.map +1 -1
  179. package/dist/containers/VDiskPage/VDiskPage.js +27 -36
  180. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  181. package/dist/containers/VDiskPage/VDiskPage.scss +39 -7
  182. package/dist/containers/VDiskPage/VDiskStorageDetails.js +27 -29
  183. package/dist/containers/VDiskPage/VDiskStorageDetails.js.map +1 -1
  184. package/dist/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  185. package/dist/containers/VDiskPage/i18n/en.json +2 -12
  186. package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
  187. package/dist/store/reducers/capabilities/hooks.d.ts +1 -0
  188. package/dist/store/reducers/capabilities/hooks.js +3 -0
  189. package/dist/store/reducers/capabilities/hooks.js.map +1 -1
  190. package/dist/store/reducers/cluster/parseFields.js +1 -0
  191. package/dist/store/reducers/cluster/parseFields.js.map +1 -1
  192. package/dist/store/reducers/clusters/clusters.js +1 -0
  193. package/dist/store/reducers/clusters/clusters.js.map +1 -1
  194. package/dist/store/reducers/clusters/selectors.d.ts +1 -0
  195. package/dist/store/reducers/clusters/selectors.js +4 -1
  196. package/dist/store/reducers/clusters/selectors.js.map +1 -1
  197. package/dist/store/reducers/clusters/types.d.ts +2 -0
  198. package/dist/store/reducers/nodes/types.d.ts +1 -0
  199. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +1 -1
  200. package/dist/store/reducers/storage/prepareGroupsDisks.js +2 -1
  201. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  202. package/dist/store/reducers/storage/types.d.ts +1 -0
  203. package/dist/store/reducers/storage/utils.js +10 -3
  204. package/dist/store/reducers/storage/utils.js.map +1 -1
  205. package/dist/store/reducers/vdisk/types.d.ts +1 -1
  206. package/dist/store/reducers/vdisk/utils.js +5 -5
  207. package/dist/store/reducers/vdisk/utils.js.map +1 -1
  208. package/dist/types/api/capabilities.d.ts +1 -1
  209. package/dist/types/api/meta.d.ts +1 -0
  210. package/dist/types/api/nodes.d.ts +2 -0
  211. package/dist/types/api/nodesList.d.ts +2 -0
  212. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.d.ts +2 -0
  213. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js +6 -0
  214. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js.map +1 -0
  215. package/dist/utils/hooks/useHideUnavailableNodes.d.ts +5 -0
  216. package/dist/utils/hooks/useHideUnavailableNodes.js +21 -0
  217. package/dist/utils/hooks/useHideUnavailableNodes.js.map +1 -0
  218. package/dist/utils/memory.d.ts +5 -0
  219. package/dist/utils/memory.js +9 -0
  220. package/dist/utils/memory.js.map +1 -0
  221. package/dist/utils/nodes.js +3 -3
  222. package/dist/utils/nodes.js.map +1 -1
  223. package/dist/utils/storageMetrics.d.ts +1 -0
  224. package/dist/utils/storageMetrics.js +8 -0
  225. package/dist/utils/storageMetrics.js.map +1 -1
  226. package/package.json +1 -1
  227. package/src/components/AutoRefreshControl/StickyAutoRefreshControl.scss +18 -0
  228. package/src/components/AutoRefreshControl/StickyAutoRefreshControl.tsx +15 -0
  229. package/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx +22 -3
  230. package/src/components/CopyableValue/CopyableValue.scss +16 -0
  231. package/src/components/CopyableValue/CopyableValue.tsx +40 -0
  232. package/src/components/CopyableValue/i18n/en.json +3 -0
  233. package/src/components/CopyableValue/i18n/index.ts +8 -0
  234. package/src/components/CriticalActionDialog/CriticalActionDialog.tsx +3 -0
  235. package/src/components/DiskCapacityInfo/DiskCapacityInfo.tsx +40 -185
  236. package/src/components/DiskCapacityInfo/i18n/en.json +0 -1
  237. package/src/components/EntityStatus/EntityStatus.scss +5 -0
  238. package/src/components/EntityStatus/EntityStatus.tsx +38 -5
  239. package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -2
  240. package/src/components/EvictVDiskButton/i18n/en.json +2 -2
  241. package/src/components/FullNodeViewer/FullNodeViewer.tsx +4 -9
  242. package/src/components/HideUnavailableNodesSwitch/HideUnavailableNodesSwitch.tsx +24 -0
  243. package/src/components/HideUnavailableNodesSwitch/i18n/en.json +3 -0
  244. package/src/components/HideUnavailableNodesSwitch/i18n/index.ts +7 -0
  245. package/src/components/HideUnavailableNodesSwitch/i18n/ru.json +3 -0
  246. package/src/components/HoverPopup/HoverPopup.tsx +95 -19
  247. package/src/components/MemoryViewer/MemoryViewer.tsx +30 -17
  248. package/src/components/MemoryViewer/i18n/en.json +4 -3
  249. package/src/components/MemoryViewer/utils.ts +19 -12
  250. package/src/components/PDiskInfo/PDiskInfo.scss +15 -0
  251. package/src/components/PDiskInfo/PDiskInfo.tsx +51 -243
  252. package/src/components/PDiskInfo/PDiskLogSize.tsx +12 -8
  253. package/src/components/PDiskInfo/i18n/en.json +6 -3
  254. package/src/components/PDiskInfo/statuses.ts +16 -3
  255. package/src/components/PageMeta/PageMeta.tsx +0 -18
  256. package/src/components/Search/Search.tsx +5 -2
  257. package/src/components/StorageGroupInfo/StorageGroupInfo.tsx +8 -13
  258. package/src/components/VDisk/VDisk.tsx +3 -2
  259. package/src/components/VDiskInfo/VDiskInfo.scss +19 -3
  260. package/src/components/VDiskInfo/VDiskInfo.tsx +119 -341
  261. package/src/components/VDiskInfo/getVDiskDetails.tsx +24 -2
  262. package/src/components/VDiskInfo/i18n/en.json +4 -13
  263. package/src/components/VDiskPopup/VDiskPopup.tsx +16 -24
  264. package/src/components/VDiskPopup/i18n/en.json +0 -2
  265. package/src/components/VDiskStatus/VDiskReplicationStatus.tsx +1 -1
  266. package/src/components/VDiskStatus/VDiskStatus.scss +4 -0
  267. package/src/components/VDiskStatus/VDiskStatus.tsx +13 -2
  268. package/src/components/VDiskStatus/statuses.ts +2 -2
  269. package/src/components/nodesColumns/columns.tsx +26 -12
  270. package/src/containers/Clusters/Clusters.scss +24 -6
  271. package/src/containers/Clusters/Clusters.tsx +74 -5
  272. package/src/containers/Clusters/columns.tsx +36 -6
  273. package/src/containers/Clusters/i18n/en.json +6 -0
  274. package/src/containers/Header/Header.tsx +8 -0
  275. package/src/containers/Header/HeaderLeftControls.tsx +3 -1
  276. package/src/containers/Header/PDiskLeftControls.tsx +41 -0
  277. package/src/containers/Header/VDiskLeftControls.tsx +40 -0
  278. package/src/containers/Header/breadcrumbs.tsx +4 -2
  279. package/src/containers/Header/i18n/en.json +4 -1
  280. package/src/containers/Node/Node.scss +14 -2
  281. package/src/containers/Node/Node.tsx +6 -6
  282. package/src/containers/Nodes/NodesControls/NodesControls.tsx +3 -0
  283. package/src/containers/Nodes/NodesTable.tsx +4 -0
  284. package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +8 -3
  285. package/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx +12 -2
  286. package/src/containers/Nodes/getNodes.ts +2 -0
  287. package/src/containers/Nodes/useDebouncedSearch.ts +13 -0
  288. package/src/containers/PDiskPage/PDiskPage.scss +29 -11
  289. package/src/containers/PDiskPage/PDiskPage.tsx +69 -63
  290. package/src/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.tsx +3 -9
  291. package/src/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  292. package/src/containers/PDiskPage/PDiskStorageDetails.tsx +64 -0
  293. package/src/containers/PDiskPage/i18n/en.json +1 -0
  294. package/src/containers/Storage/PaginatedStorageNodes/GroupedStorageNodesComponent.tsx +3 -0
  295. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesComponent.tsx +8 -1
  296. package/src/containers/Storage/PaginatedStorageNodes/StorageNodesControls.tsx +2 -0
  297. package/src/containers/Storage/PaginatedStorageNodesTable/PaginatedStorageNodesTable.tsx +4 -0
  298. package/src/containers/Storage/PaginatedStorageNodesTable/getNodes.ts +2 -0
  299. package/src/containers/Storage/Storage.scss +4 -0
  300. package/src/containers/StorageGroupPage/StorageGroupPage.scss +19 -4
  301. package/src/containers/StorageGroupPage/StorageGroupPage.tsx +25 -45
  302. package/src/containers/StorageGroupPage/i18n/en.json +0 -2
  303. package/src/containers/Tablet/Tablet.scss +15 -1
  304. package/src/containers/Tablet/Tablet.tsx +21 -15
  305. package/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +5 -32
  306. package/src/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  307. package/src/containers/Tenant/Healthcheck/components/HealthcheckIssue.tsx +18 -8
  308. package/src/containers/Tenant/TenantDrawerHealthcheck.tsx +14 -1
  309. package/src/containers/VDiskPage/VDiskPage.scss +39 -7
  310. package/src/containers/VDiskPage/VDiskPage.tsx +84 -72
  311. package/src/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  312. package/src/containers/VDiskPage/VDiskStorageDetails.tsx +50 -158
  313. package/src/containers/VDiskPage/i18n/en.json +2 -14
  314. package/src/store/reducers/capabilities/hooks.ts +4 -0
  315. package/src/store/reducers/cluster/parseFields.ts +1 -0
  316. package/src/store/reducers/clusters/clusters.ts +1 -0
  317. package/src/store/reducers/clusters/selectors.ts +4 -0
  318. package/src/store/reducers/clusters/types.ts +3 -0
  319. package/src/store/reducers/nodes/types.ts +1 -0
  320. package/src/store/reducers/storage/prepareGroupsDisks.ts +2 -0
  321. package/src/store/reducers/storage/types.ts +1 -0
  322. package/src/store/reducers/storage/utils.ts +13 -3
  323. package/src/store/reducers/vdisk/types.ts +2 -1
  324. package/src/store/reducers/vdisk/utils.ts +4 -5
  325. package/src/types/api/capabilities.ts +1 -0
  326. package/src/types/api/meta.ts +1 -0
  327. package/src/types/api/nodes.ts +2 -0
  328. package/src/types/api/nodesList.ts +3 -0
  329. package/src/utils/hooks/useDatabaseHealthcheckAvailable.ts +9 -0
  330. package/src/utils/hooks/useHideUnavailableNodes.ts +33 -0
  331. package/src/utils/memory.ts +16 -0
  332. package/src/utils/nodes.ts +3 -2
  333. package/src/utils/storageMetrics.ts +11 -0
  334. package/dist/components/VDiskInfo/getVDiskCapacityColumns.d.ts +0 -11
  335. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js +0 -52
  336. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js.map +0 -1
  337. package/src/components/VDiskInfo/getVDiskCapacityColumns.tsx +0 -83
@@ -1,375 +1,153 @@
1
1
  import React from 'react';
2
2
 
3
- import {Flex} from '@gravity-ui/uikit';
3
+ import {ChevronDown, ChevronUp} from '@gravity-ui/icons';
4
+ import {Button, Flex, Icon} from '@gravity-ui/uikit';
4
5
  import {isNil} from 'lodash';
5
6
 
6
- import {getPDiskPagePath, useVDiskPagePath} from '../../routes';
7
7
  import {useBlobStorageCapacityMetricsEnabled} from '../../store/reducers/capabilities/hooks';
8
- import {EVDiskState} from '../../types/api/vdisk';
9
8
  import {cn} from '../../utils/cn';
10
- import {
11
- formatDurationSeconds,
12
- formatStorageValuesToGb,
13
- } from '../../utils/dataFormatters/dataFormatters';
14
- import {createVDiskDeveloperUILink, useHasDeveloperUi} from '../../utils/developerUI/developerUI';
15
- import {getDataSeverityColor} from '../../utils/disks/helpers';
9
+ import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
16
10
  import type {PreparedVDisk} from '../../utils/disks/types';
17
- import {useIsViewerUser} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
18
- import {bytesToSpeed} from '../../utils/utils';
19
- import {InternalLink} from '../InternalLink';
20
- import {LinkWithIcon} from '../LinkWithIcon/LinkWithIcon';
21
- import {ProgressViewer} from '../ProgressViewer/ProgressViewer';
22
- import {StatusIcon} from '../StatusIcon/StatusIcon';
11
+ import {formatMetricPercent} from '../../utils/storageMetrics';
12
+ import {CopyableValue} from '../CopyableValue/CopyableValue';
13
+ import {getVDiskCapacityItems} from '../DiskCapacityInfo/DiskCapacityInfo';
14
+ import {DiskFlagLabel} from '../DiskStatus/DiskStatus';
15
+ import {VDisk} from '../VDisk/VDisk';
16
+ import {VDiskCompactionRankLabel, VDiskFrontQueuesLabel} from '../VDiskStatus';
23
17
  import type {YDBDefinitionListItem} from '../YDBDefinitionList/YDBDefinitionList';
24
18
  import {YDBDefinitionList} from '../YDBDefinitionList/YDBDefinitionList';
25
19
 
26
- import {getVDiskCapacityColumns} from './getVDiskCapacityColumns';
20
+ import {getVDiskIdentityItems, getVDiskThroughputItems} from './getVDiskDetails';
27
21
  import {vDiskInfoKeyset} from './i18n';
28
22
 
29
23
  import './VDiskInfo.scss';
30
24
 
31
25
  const b = cn('ydb-vdisk-info');
32
26
 
33
- interface VDiskInfoProps<T extends PreparedVDisk> {
34
- data?: T;
35
- /** @deprecated VDisk page link is now rendered externally */
36
- withVDiskPageLink?: boolean;
37
- withTitle?: boolean;
27
+ interface VDiskInfoProps {
28
+ data?: PreparedVDisk;
38
29
  className?: string;
39
- wrap?: true;
40
30
  }
41
31
 
42
- // eslint-disable-next-line complexity
43
- export function VDiskInfo<T extends PreparedVDisk>({
44
- data,
45
- withVDiskPageLink,
46
- withTitle,
47
- className,
48
- wrap,
49
- }: VDiskInfoProps<T>) {
50
- const hasDeveloperUi = useHasDeveloperUi();
51
- const isViewerUser = useIsViewerUser();
52
- const capacityMetricsEnabled = useBlobStorageCapacityMetricsEnabled();
53
-
54
- const getVDiskPagePath = useVDiskPagePath();
55
-
56
- const {
57
- FrontQueues,
58
- Guid,
59
- Replicated,
60
- ReplicationProgress,
61
- ReplicationSecondsRemaining,
62
- Donors,
63
- VDiskState,
64
- VDiskSlotId,
65
- Kind,
66
- SatisfactionRank,
67
- HasUnreadableBlobs,
68
- IncarnationGuid,
69
- InstanceGuid,
70
- StoragePoolName,
71
- ReadThroughput,
72
- WriteThroughput,
73
- PDiskId,
74
- StringifiedId,
75
- NodeId,
76
- Recipient,
77
- } = data || {};
78
-
79
- const capacityColumns = capacityMetricsEnabled
80
- ? getVDiskCapacityColumns({data, isViewerUser})
81
- : undefined;
82
- const leftColumn: YDBDefinitionListItem[] = capacityColumns?.leftColumn ?? [];
83
- const rightColumn: YDBDefinitionListItem[] = capacityColumns?.rightColumn ?? [];
84
- const linksColumn = capacityMetricsEnabled ? leftColumn : rightColumn;
85
-
32
+ function getPageCapacityItems(data: PreparedVDisk, capacityMetricsEnabled: boolean) {
33
+ const capacityItems = getVDiskCapacityItems(data, {capacityMetricsEnabled});
86
34
  if (!capacityMetricsEnabled) {
87
- const {AllocatedSize, SizeLimit, AllocatedPercent, DiskSpace} = data || {};
88
-
89
- if (!isNil(StoragePoolName)) {
90
- leftColumn.push({name: vDiskInfoKeyset('pool-name'), content: StoragePoolName});
91
- }
92
- if (!isNil(VDiskState)) {
93
- leftColumn.push({
94
- name: vDiskInfoKeyset('state-status'),
95
- content: VDiskState,
96
- });
97
- }
98
-
99
- if (Number(AllocatedSize) >= 0 && Number(SizeLimit) >= 0) {
100
- leftColumn.push({
101
- name: vDiskInfoKeyset('size'),
102
- content: formatStorageValuesToGb(Number(AllocatedSize), Number(SizeLimit)).join(
103
- ' / ',
104
- ),
105
- });
106
- }
107
- if (!isNaN(Number(AllocatedPercent))) {
108
- leftColumn.push({
35
+ capacityItems.push(
36
+ {
37
+ id: 'usage',
109
38
  name: vDiskInfoKeyset('usage'),
110
- content: `${AllocatedPercent}%`,
111
- });
112
- }
113
-
114
- if (!isNil(DiskSpace)) {
115
- leftColumn.push({
39
+ content: formatMetricPercent(data.AllocatedPercent, 2),
40
+ },
41
+ {
42
+ id: 'disk-space',
116
43
  name: vDiskInfoKeyset('space-status'),
117
- content: <StatusIcon status={DiskSpace} />,
118
- });
119
- }
120
- }
121
-
122
- if (!capacityMetricsEnabled) {
123
- if (!isNil(FrontQueues)) {
124
- leftColumn.push({
125
- name: vDiskInfoKeyset('front-queues'),
126
- content: <StatusIcon status={FrontQueues} />,
127
- });
128
- }
129
- if (!isNil(SatisfactionRank?.FreshRank?.Flag)) {
130
- leftColumn.push({
131
- name: vDiskInfoKeyset('fresh-rank-satisfaction'),
132
- content: <StatusIcon status={SatisfactionRank?.FreshRank?.Flag} />,
133
- });
134
- }
135
- if (!isNil(SatisfactionRank?.LevelRank?.Flag)) {
136
- leftColumn.push({
137
- name: vDiskInfoKeyset('level-rank-satisfaction'),
138
- content: <StatusIcon status={SatisfactionRank?.LevelRank?.Flag} />,
139
- });
140
- }
141
- if (!isNil(ReadThroughput)) {
142
- leftColumn.push({
143
- name: vDiskInfoKeyset('read-throughput'),
144
- content: bytesToSpeed(ReadThroughput),
145
- });
146
- }
147
- if (!isNil(WriteThroughput)) {
148
- leftColumn.push({
149
- name: vDiskInfoKeyset('write-throughput'),
150
- content: bytesToSpeed(WriteThroughput),
151
- });
152
- }
153
- }
154
-
155
- if (!isNil(Replicated)) {
156
- rightColumn.push({
157
- name: vDiskInfoKeyset('replication-status'),
158
- content: Replicated ? vDiskInfoKeyset('yes') : vDiskInfoKeyset('no'),
159
- });
160
- }
161
- // Only show replication progress and time remaining when disk is not replicated and state is OK
162
- if (Replicated === false && VDiskState === EVDiskState.OK) {
163
- if (!isNil(ReplicationProgress)) {
164
- rightColumn.push({
165
- name: vDiskInfoKeyset('replication-progress'),
166
- content: (
167
- <ProgressViewer
168
- value={Math.round(ReplicationProgress * 100)}
169
- percents
170
- defaultStatus="info"
171
- capacity={100}
172
- />
173
- ),
174
- });
175
- }
176
- if (!isNil(ReplicationSecondsRemaining)) {
177
- const timeRemaining = formatDurationSeconds(ReplicationSecondsRemaining);
178
- if (timeRemaining) {
179
- rightColumn.push({
180
- name: vDiskInfoKeyset('replication-time-remaining'),
181
- content: timeRemaining,
182
- });
183
- }
184
- }
185
- }
186
- if (!capacityMetricsEnabled && !isNil(VDiskSlotId)) {
187
- rightColumn.push({name: vDiskInfoKeyset('slot-id'), content: VDiskSlotId});
188
- }
189
- if (!capacityMetricsEnabled && !isNil(PDiskId)) {
190
- const pDiskPath =
191
- isViewerUser && !isNil(NodeId) ? getPDiskPagePath(PDiskId, NodeId) : undefined;
192
-
193
- const content = pDiskPath ? <InternalLink to={pDiskPath}>{PDiskId}</InternalLink> : PDiskId;
194
-
195
- rightColumn.push({
196
- name: vDiskInfoKeyset('label_pdisk-id'),
197
- content,
198
- });
199
- }
200
-
201
- if (!capacityMetricsEnabled && !isNil(Kind)) {
202
- rightColumn.push({name: vDiskInfoKeyset('kind'), content: Kind});
203
- }
204
- if (!capacityMetricsEnabled && !isNil(Guid)) {
205
- rightColumn.push({name: vDiskInfoKeyset('guid'), content: Guid});
206
- }
207
- if (!capacityMetricsEnabled && !isNil(IncarnationGuid)) {
208
- rightColumn.push({name: vDiskInfoKeyset('incarnation-guid'), content: IncarnationGuid});
209
- }
210
- if (!capacityMetricsEnabled && !isNil(InstanceGuid)) {
211
- rightColumn.push({name: vDiskInfoKeyset('instance-guid'), content: InstanceGuid});
212
- }
213
- if (!capacityMetricsEnabled && !isNil(HasUnreadableBlobs)) {
214
- rightColumn.push({
215
- name: vDiskInfoKeyset('has-unreadable-blobs'),
216
- content: HasUnreadableBlobs ? vDiskInfoKeyset('yes') : vDiskInfoKeyset('no'),
217
- });
218
- }
219
- if (!isNil(Recipient) && !isNil(Recipient.StringifiedId)) {
220
- const recipientPath = getVDiskPagePath({
221
- nodeId: Recipient.NodeId,
222
- vDiskId: Recipient.StringifiedId,
223
- });
224
- rightColumn.push({
225
- name: vDiskInfoKeyset('label_recipient'),
226
- content: recipientPath ? (
227
- <InternalLink to={recipientPath}>{Recipient.StringifiedId}</InternalLink>
228
- ) : (
229
- Recipient.StringifiedId
230
- ),
231
- });
232
- }
233
-
234
- // Show donors list when replication is in progress
235
- if (Replicated === false && Donors?.length) {
236
- const donorLinks = Donors.map((donor, index) => {
237
- const {StringifiedId: id, NodeId: dNodeId} = donor;
238
-
239
- if (!id) {
240
- return null;
241
- }
242
-
243
- const vDiskPath = getVDiskPagePath({
244
- nodeId: dNodeId,
245
- vDiskId: id,
246
- });
247
-
248
- return vDiskPath ? (
249
- <InternalLink key={index} to={vDiskPath}>
250
- {id}
251
- </InternalLink>
252
- ) : null;
253
- }).filter(Boolean);
254
-
255
- if (donorLinks.length) {
256
- rightColumn.push({
257
- name: vDiskInfoKeyset('donors'),
258
- content: (
259
- <Flex direction="column" gap={1}>
260
- {donorLinks}
261
- </Flex>
262
- ),
263
- });
264
- }
265
- }
266
- if (capacityMetricsEnabled) {
267
- if (!isNil(FrontQueues)) {
268
- rightColumn.push({
269
- name: vDiskInfoKeyset('front-queues'),
270
- content: <StatusIcon status={FrontQueues} />,
271
- });
272
- }
273
- if (!isNil(SatisfactionRank?.FreshRank?.Flag)) {
274
- rightColumn.push({
275
- name: vDiskInfoKeyset('fresh-rank-satisfaction'),
276
- content: <StatusIcon status={SatisfactionRank?.FreshRank?.Flag} />,
277
- });
278
- }
279
- if (!isNil(SatisfactionRank?.LevelRank?.Flag)) {
280
- rightColumn.push({
281
- name: vDiskInfoKeyset('level-rank-satisfaction'),
282
- content: <StatusIcon status={SatisfactionRank?.LevelRank?.Flag} />,
283
- });
284
- }
285
- if (!isNil(HasUnreadableBlobs)) {
286
- rightColumn.push({
287
- name: vDiskInfoKeyset('has-unreadable-blobs'),
288
- content: HasUnreadableBlobs ? vDiskInfoKeyset('yes') : vDiskInfoKeyset('no'),
289
- });
290
- }
291
- if (!isNil(ReadThroughput)) {
292
- rightColumn.push({
293
- name: vDiskInfoKeyset('read-throughput'),
294
- content: bytesToSpeed(ReadThroughput),
295
- });
296
- }
297
- if (!isNil(WriteThroughput)) {
298
- rightColumn.push({
299
- name: vDiskInfoKeyset('write-throughput'),
300
- content: bytesToSpeed(WriteThroughput),
301
- });
302
- }
303
- }
304
- const links: React.ReactNode[] = [];
305
- const vDiskPagePath = getVDiskPagePath({
306
- nodeId: NodeId,
307
- vDiskId: StringifiedId,
308
- });
309
- if (withVDiskPageLink && vDiskPagePath) {
310
- links.push(
311
- <LinkWithIcon
312
- key={vDiskPagePath}
313
- title={vDiskInfoKeyset('vdisk-page')}
314
- url={vDiskPagePath}
315
- external={false}
316
- />,
317
- );
318
- }
319
-
320
- if (hasDeveloperUi && !isNil(NodeId) && !isNil(VDiskSlotId) && !isNil(PDiskId)) {
321
- const vDiskInternalViewerPath = createVDiskDeveloperUILink({
322
- nodeId: NodeId,
323
- pDiskId: PDiskId,
324
- vDiskSlotId: VDiskSlotId,
325
- });
326
-
327
- links.push(
328
- <LinkWithIcon
329
- key={vDiskInternalViewerPath}
330
- title={vDiskInfoKeyset('developer-ui')}
331
- url={vDiskInternalViewerPath}
332
- />,
44
+ content: <DiskFlagLabel flag={data.DiskSpace} />,
45
+ },
333
46
  );
334
47
  }
48
+ return capacityItems;
49
+ }
335
50
 
336
- if (links.length) {
337
- linksColumn.push({
338
- name: vDiskInfoKeyset('links'),
51
+ export function VDiskInfo({data = {}, className}: VDiskInfoProps) {
52
+ const [expanded, setExpanded] = React.useState(false);
53
+ const capacityMetricsEnabled = useBlobStorageCapacityMetricsEnabled();
54
+ const donors = data.Replicated === false ? data.Donors : undefined;
55
+ const disks = data.DonorMode ? [data.Recipient].filter((disk) => disk !== undefined) : donors;
56
+ const runtimeItems: YDBDefinitionListItem[] = [
57
+ {
58
+ name: vDiskInfoKeyset('front-queues'),
59
+ content: <VDiskFrontQueuesLabel flag={data.FrontQueues} />,
60
+ },
61
+ {
62
+ name: vDiskInfoKeyset('field_compaction'),
339
63
  content: (
340
- <Flex wrap="wrap" gap={2}>
341
- {links}
64
+ <Flex gap={1} wrap="wrap">
65
+ <VDiskCompactionRankLabel
66
+ flag={data.SatisfactionRank?.FreshRank?.Flag}
67
+ rank="fresh"
68
+ />
69
+ <VDiskCompactionRankLabel
70
+ flag={data.SatisfactionRank?.LevelRank?.Flag}
71
+ rank="level"
72
+ />
342
73
  </Flex>
343
74
  ),
344
- });
345
- }
346
-
347
- const title = data && withTitle ? <VDiskTitle data={data} /> : null;
75
+ },
76
+ {
77
+ name: vDiskInfoKeyset('has-unreadable-blobs'),
78
+ content: isNil(data.HasUnreadableBlobs)
79
+ ? EMPTY_DATA_PLACEHOLDER
80
+ : vDiskInfoKeyset(data.HasUnreadableBlobs ? 'yes' : 'no'),
81
+ },
82
+ ...getVDiskThroughputItems(data),
83
+ {
84
+ name: vDiskInfoKeyset(data.DonorMode ? 'label_recipient' : 'donors'),
85
+ content: disks?.length ? (
86
+ <Flex gap={2} wrap="wrap">
87
+ {disks.map((disk) => (
88
+ <div className={b('disk')} key={disk.StringifiedId}>
89
+ <VDisk data={disk} withIcon />
90
+ </div>
91
+ ))}
92
+ </Flex>
93
+ ) : (
94
+ vDiskInfoKeyset('no')
95
+ ),
96
+ },
97
+ ];
98
+ const capacityItems = getPageCapacityItems(data, capacityMetricsEnabled);
99
+ const identityItems = getVDiskIdentityItems(data, {
100
+ copyFields: ['guid', 'incarnation-guid', 'instance-guid'],
101
+ }).map(({copyText, ...item}) => ({
102
+ ...item,
103
+ content: (
104
+ <CopyableValue
105
+ copyText={copyText === undefined ? undefined : String(copyText)}
106
+ fieldName={item.name}
107
+ >
108
+ {item.content}
109
+ </CopyableValue>
110
+ ),
111
+ }));
348
112
 
349
- // Component is used both on vdisk page and in popups
350
- // Display in two columns on page (row + wrap) and in one column in popups (column + nowrap)
351
113
  return (
352
- <Flex className={className} gap={2} direction={wrap ? 'row' : 'column'} wrap={wrap}>
353
- {leftColumn.length > 0 && (
354
- <YDBDefinitionList title={title} items={leftColumn} wrapperClassName={b('info')} />
355
- )}
356
- {rightColumn.length > 0 && (
357
- <YDBDefinitionList items={rightColumn} wrapperClassName={b('info')} />
114
+ <Flex
115
+ className={b(null, className)}
116
+ direction="column"
117
+ alignItems="flex-start"
118
+ gap={3}
119
+ qa="vdisk-page-info"
120
+ >
121
+ <Flex className={b('metrics')} gap={6} gapRow={3} wrap="wrap">
122
+ <YDBDefinitionList
123
+ items={runtimeItems}
124
+ nameMaxWidth={200}
125
+ wrapperClassName={b('column')}
126
+ />
127
+ {capacityItems.length > 0 && (
128
+ <YDBDefinitionList
129
+ items={capacityItems}
130
+ nameMaxWidth={200}
131
+ wrapperClassName={b('column')}
132
+ />
133
+ )}
134
+ </Flex>
135
+ {expanded && (
136
+ <YDBDefinitionList
137
+ items={identityItems}
138
+ nameMaxWidth={200}
139
+ wrapperClassName={b('identity')}
140
+ />
358
141
  )}
359
- </Flex>
360
- );
361
- }
362
-
363
- interface VDiskTitleProps<T extends PreparedVDisk> {
364
- data: T;
365
- }
366
-
367
- function VDiskTitle<T extends PreparedVDisk>({data}: VDiskTitleProps<T>) {
368
- return (
369
- <Flex gap={2} alignItems="center">
370
- {vDiskInfoKeyset('vdiks-title')}
371
- <StatusIcon status={getDataSeverityColor(data.Severity)} />
372
- {data.StringifiedId}
142
+ <Button
143
+ size="m"
144
+ view="outlined"
145
+ onClick={() => setExpanded(!expanded)}
146
+ aria-expanded={expanded}
147
+ >
148
+ {vDiskInfoKeyset(expanded ? 'action_show-less' : 'action_show-more')}
149
+ <Icon data={expanded ? ChevronUp : ChevronDown} />
150
+ </Button>
373
151
  </Flex>
374
152
  );
375
153
  }
@@ -6,6 +6,8 @@ import type {DiskDetailItem} from '../../utils/disks/diskInfo/getDiskLocationIte
6
6
  import {getDiskLocationItems} from '../../utils/disks/diskInfo/getDiskLocationItems';
7
7
  import {isFullVDiskData} from '../../utils/disks/helpers';
8
8
  import type {PreparedVDisk} from '../../utils/disks/types';
9
+ import {formatStorageThroughput} from '../../utils/storageMetrics';
10
+ import type {YDBDefinitionListItem} from '../YDBDefinitionList/YDBDefinitionList';
9
11
 
10
12
  import {vDiskInfoKeyset as i18n} from './i18n';
11
13
 
@@ -26,16 +28,36 @@ export function getVDiskLocationItems(
26
28
  );
27
29
  }
28
30
 
29
- export function getVDiskIdentityItems(data: PreparedVDisk = {}): DiskDetailItem[] {
31
+ type VDiskIdentityField = 'kind' | 'guid' | 'incarnation-guid' | 'instance-guid';
32
+
33
+ export function getVDiskIdentityItems(
34
+ data: PreparedVDisk = {},
35
+ {copyFields = []}: {copyFields?: readonly VDiskIdentityField[]} = {},
36
+ ): DiskDetailItem[] {
30
37
  const entries = [
31
38
  {id: 'kind', name: i18n('kind'), value: data.Kind},
32
39
  {id: 'guid', name: i18n('guid'), value: data.Guid},
33
40
  {id: 'incarnation-guid', name: i18n('incarnation-guid'), value: data.IncarnationGuid},
34
41
  {id: 'instance-guid', name: i18n('instance-guid'), value: data.InstanceGuid},
35
- ];
42
+ ] as const;
36
43
  return entries.map(({id, name, value}) => ({
37
44
  id,
38
45
  name,
39
46
  content: isNil(value) || value === '' ? EMPTY_DATA_PLACEHOLDER : value,
47
+ ...(copyFields.includes(id) && !isNil(value) && value !== ''
48
+ ? {copyText: String(value)}
49
+ : {}),
50
+ }));
51
+ }
52
+
53
+ export function getVDiskThroughputItems(data: PreparedVDisk = {}): YDBDefinitionListItem[] {
54
+ return (
55
+ [
56
+ [i18n('read-throughput'), data.ReadThroughput],
57
+ [i18n('write-throughput'), data.WriteThroughput],
58
+ ] as const
59
+ ).map(([name, value]) => ({
60
+ name,
61
+ content: formatStorageThroughput(value),
40
62
  }));
41
63
  }
@@ -1,32 +1,23 @@
1
1
  {
2
- "slot-id": "VDisk Slot Id",
3
- "label_pdisk-id": "PDisk Id",
4
2
  "pool-name": "Storage Pool Name",
5
3
  "kind": "Kind",
6
4
  "guid": "GUID",
7
5
  "incarnation-guid": "Incarnation GUID",
8
6
  "instance-guid": "Instance GUID",
9
- "replication-status": "Replicated",
10
- "replication-progress": "Replication Progress",
11
- "replication-time-remaining": "Time Remaining",
12
7
  "donors": "Donors",
13
8
  "label_recipient": "Recipient",
14
- "state-status": "VDisk State",
15
9
  "space-status": "Disk Space",
16
- "fresh-rank-satisfaction": "Fresh Rank Satisfaction",
17
- "level-rank-satisfaction": "Level Rank Satisfaction",
18
10
  "front-queues": "Front Queues",
19
11
  "has-unreadable-blobs": "Has Unreadable Blobs",
20
12
  "size": "Size",
21
13
  "usage": "Usage",
22
14
  "read-throughput": "Read Throughput",
23
15
  "write-throughput": "Write Throughput",
24
- "links": "Links",
25
- "vdisk-page": "VDisk page",
26
- "developer-ui": "Developer UI",
27
16
  "yes": "Yes",
28
17
  "no": "No",
29
- "vdiks-title": "VDisk",
30
18
  "field_group-size-in-units": "Group Size in Units",
31
- "field_capacity-alert": "Capacity alert"
19
+ "field_capacity-alert": "Capacity alert",
20
+ "field_compaction": "Compaction",
21
+ "action_show-more": "Show more",
22
+ "action_show-less": "Show less"
32
23
  }