ydb-embedded-ui 22.3.0 → 22.5.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 (472) hide show
  1. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.d.ts +3 -2
  2. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js +19 -4
  3. package/dist/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.js.map +1 -1
  4. package/dist/components/CopyableValue/CopyableValue.d.ts +10 -0
  5. package/dist/components/CopyableValue/CopyableValue.js +10 -0
  6. package/dist/components/CopyableValue/CopyableValue.js.map +1 -0
  7. package/dist/components/CopyableValue/CopyableValue.scss +16 -0
  8. package/dist/components/CopyableValue/i18n/en.json +3 -0
  9. package/dist/components/CopyableValue/i18n/index.d.ts +2 -0
  10. package/dist/components/CopyableValue/i18n/index.js +6 -0
  11. package/dist/components/CopyableValue/i18n/index.js.map +1 -0
  12. package/dist/components/CriticalActionDialog/CriticalActionDialog.d.ts +2 -1
  13. package/dist/components/CriticalActionDialog/CriticalActionDialog.js +2 -1
  14. package/dist/components/CriticalActionDialog/CriticalActionDialog.js.map +1 -1
  15. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.d.ts +8 -19
  16. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js +68 -92
  17. package/dist/components/DiskCapacityInfo/DiskCapacityInfo.js.map +1 -1
  18. package/dist/components/DiskCapacityInfo/i18n/en.json +0 -1
  19. package/dist/components/DiskCapacityInfo/i18n/index.d.ts +1 -1
  20. package/dist/components/DiskPopup/DiskPopup.d.ts +25 -0
  21. package/dist/components/DiskPopup/DiskPopup.js +44 -0
  22. package/dist/components/DiskPopup/DiskPopup.js.map +1 -0
  23. package/dist/components/DiskPopup/DiskPopup.scss +203 -0
  24. package/dist/components/DiskPopup/i18n/en.json +3 -0
  25. package/dist/components/DiskPopup/i18n/index.d.ts +2 -0
  26. package/dist/components/DiskPopup/i18n/index.js +4 -0
  27. package/dist/components/DiskPopup/i18n/index.js.map +1 -0
  28. package/dist/components/DiskStatus/DiskStatus.d.ts +31 -0
  29. package/dist/components/DiskStatus/DiskStatus.js +61 -0
  30. package/dist/components/DiskStatus/DiskStatus.js.map +1 -0
  31. package/dist/components/DiskStatus/DiskStatus.scss +59 -0
  32. package/dist/components/DiskStatus/i18n/en.json +6 -0
  33. package/dist/components/DiskStatus/i18n/index.d.ts +2 -0
  34. package/dist/components/DiskStatus/i18n/index.js +4 -0
  35. package/dist/components/DiskStatus/i18n/index.js.map +1 -0
  36. package/dist/components/EntityStatus/EntityStatus.d.ts +19 -6
  37. package/dist/components/EntityStatus/EntityStatus.js +6 -2
  38. package/dist/components/EntityStatus/EntityStatus.js.map +1 -1
  39. package/dist/components/EntityStatus/EntityStatus.scss +5 -0
  40. package/dist/components/EvictVDiskButton/EvictVDiskButton.d.ts +5 -2
  41. package/dist/components/EvictVDiskButton/EvictVDiskButton.js +3 -2
  42. package/dist/components/EvictVDiskButton/EvictVDiskButton.js.map +1 -1
  43. package/dist/components/EvictVDiskButton/i18n/en.json +2 -2
  44. package/dist/components/FullNodeViewer/FullNodeViewer.js +4 -7
  45. package/dist/components/FullNodeViewer/FullNodeViewer.js.map +1 -1
  46. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  47. package/dist/components/HoverPopup/HoverPopup.d.ts +3 -1
  48. package/dist/components/HoverPopup/HoverPopup.js +131 -28
  49. package/dist/components/HoverPopup/HoverPopup.js.map +1 -1
  50. package/dist/components/HoverPopup/usePopupPriority.d.ts +4 -0
  51. package/dist/components/HoverPopup/usePopupPriority.js +30 -0
  52. package/dist/components/HoverPopup/usePopupPriority.js.map +1 -0
  53. package/dist/components/MemoryViewer/MemoryViewer.d.ts +3 -1
  54. package/dist/components/MemoryViewer/MemoryViewer.js +25 -16
  55. package/dist/components/MemoryViewer/MemoryViewer.js.map +1 -1
  56. package/dist/components/MemoryViewer/i18n/en.json +4 -3
  57. package/dist/components/MemoryViewer/i18n/index.d.ts +1 -1
  58. package/dist/components/MemoryViewer/utils.d.ts +4 -2
  59. package/dist/components/MemoryViewer/utils.js +11 -11
  60. package/dist/components/MemoryViewer/utils.js.map +1 -1
  61. package/dist/components/PDiskInfo/PDiskInfo.d.ts +4 -9
  62. package/dist/components/PDiskInfo/PDiskInfo.js +32 -144
  63. package/dist/components/PDiskInfo/PDiskInfo.js.map +1 -1
  64. package/dist/components/PDiskInfo/PDiskInfo.scss +15 -0
  65. package/dist/components/PDiskInfo/PDiskLogSize.d.ts +5 -0
  66. package/dist/components/PDiskInfo/PDiskLogSize.js +20 -0
  67. package/dist/components/PDiskInfo/PDiskLogSize.js.map +1 -0
  68. package/dist/components/PDiskInfo/PDiskLogSize.scss +12 -0
  69. package/dist/components/PDiskInfo/getPDiskDetails.d.ts +4 -0
  70. package/dist/components/PDiskInfo/getPDiskDetails.js +33 -0
  71. package/dist/components/PDiskInfo/getPDiskDetails.js.map +1 -0
  72. package/dist/components/PDiskInfo/i18n/en.json +69 -4
  73. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  74. package/dist/components/PDiskInfo/statuses.d.ts +7 -0
  75. package/dist/components/PDiskInfo/statuses.js +194 -0
  76. package/dist/components/PDiskInfo/statuses.js.map +1 -0
  77. package/dist/components/PDiskPopup/PDiskPopup.d.ts +4 -7
  78. package/dist/components/PDiskPopup/PDiskPopup.js +28 -99
  79. package/dist/components/PDiskPopup/PDiskPopup.js.map +1 -1
  80. package/dist/components/PDiskPopup/i18n/en.json +2 -12
  81. package/dist/components/PDiskPopup/i18n/index.d.ts +1 -1
  82. package/dist/components/Search/Search.js +3 -1
  83. package/dist/components/Search/Search.js.map +1 -1
  84. package/dist/components/StorageGroupInfo/StorageGroupInfo.d.ts +3 -3
  85. package/dist/components/StorageGroupInfo/StorageGroupInfo.js +73 -218
  86. package/dist/components/StorageGroupInfo/StorageGroupInfo.js.map +1 -1
  87. package/dist/components/StorageGroupInfo/StorageGroupInfo.scss +21 -0
  88. package/dist/components/StorageGroupInfo/i18n/en.json +1 -9
  89. package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
  90. package/dist/components/TenantNameWrapper/i18n/index.d.ts +1 -1
  91. package/dist/components/VDisk/VDisk.d.ts +2 -1
  92. package/dist/components/VDisk/VDisk.js +24 -33
  93. package/dist/components/VDisk/VDisk.js.map +1 -1
  94. package/dist/components/VDisk/VDiskWithDonorsStack.d.ts +1 -1
  95. package/dist/components/VDisk/VDiskWithDonorsStack.js +2 -1
  96. package/dist/components/VDisk/VDiskWithDonorsStack.js.map +1 -1
  97. package/dist/components/VDisk/getFlagStatusText.d.ts +2 -0
  98. package/dist/components/VDisk/getFlagStatusText.js +18 -0
  99. package/dist/components/VDisk/getFlagStatusText.js.map +1 -0
  100. package/dist/components/VDisk/i18n/en.json +1 -1
  101. package/dist/components/VDisk/i18n/index.d.ts +1 -1
  102. package/dist/components/VDiskInfo/VDiskInfo.d.ts +3 -7
  103. package/dist/components/VDiskInfo/VDiskInfo.js +57 -235
  104. package/dist/components/VDiskInfo/VDiskInfo.js.map +1 -1
  105. package/dist/components/VDiskInfo/VDiskInfo.scss +19 -3
  106. package/dist/components/VDiskInfo/getVDiskDetails.d.ts +11 -0
  107. package/dist/components/VDiskInfo/getVDiskDetails.js +42 -0
  108. package/dist/components/VDiskInfo/getVDiskDetails.js.map +1 -0
  109. package/dist/components/VDiskInfo/i18n/en.json +5 -12
  110. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  111. package/dist/components/VDiskPopup/VDiskPopup.d.ts +7 -8
  112. package/dist/components/VDiskPopup/VDiskPopup.js +91 -241
  113. package/dist/components/VDiskPopup/VDiskPopup.js.map +1 -1
  114. package/dist/components/VDiskPopup/VDiskPopup.scss +3 -10
  115. package/dist/components/VDiskPopup/i18n/en.json +4 -22
  116. package/dist/components/VDiskPopup/i18n/index.d.ts +1 -1
  117. package/dist/components/VDiskStatus/VDiskReplicationStatus.d.ts +8 -0
  118. package/dist/components/VDiskStatus/VDiskReplicationStatus.js +32 -0
  119. package/dist/components/VDiskStatus/VDiskReplicationStatus.js.map +1 -0
  120. package/dist/components/VDiskStatus/VDiskStatus.d.ts +16 -0
  121. package/dist/components/VDiskStatus/VDiskStatus.js +20 -0
  122. package/dist/components/VDiskStatus/VDiskStatus.js.map +1 -0
  123. package/dist/components/VDiskStatus/VDiskStatus.scss +36 -0
  124. package/dist/components/VDiskStatus/i18n/en.json +33 -0
  125. package/dist/components/VDiskStatus/i18n/index.d.ts +1 -0
  126. package/dist/components/VDiskStatus/i18n/index.js +5 -0
  127. package/dist/components/VDiskStatus/i18n/index.js.map +1 -0
  128. package/dist/components/VDiskStatus/index.d.ts +2 -0
  129. package/dist/components/VDiskStatus/index.js +3 -0
  130. package/dist/components/VDiskStatus/index.js.map +1 -0
  131. package/dist/components/VDiskStatus/statuses.d.ts +4 -0
  132. package/dist/components/VDiskStatus/statuses.js +120 -0
  133. package/dist/components/VDiskStatus/statuses.js.map +1 -0
  134. package/dist/components/capacityMetricsColumns/i18n/en.json +4 -4
  135. package/dist/components/nodesColumns/columns.d.ts +1 -0
  136. package/dist/components/nodesColumns/columns.js +13 -6
  137. package/dist/components/nodesColumns/columns.js.map +1 -1
  138. package/dist/containers/Cluster/ClusterDrawerHealthcheck.js +6 -1
  139. package/dist/containers/Cluster/ClusterDrawerHealthcheck.js.map +1 -1
  140. package/dist/containers/Clusters/ClusterDrawerHealthcheck.js +1 -1
  141. package/dist/containers/Clusters/ClusterDrawerHealthcheck.js.map +1 -1
  142. package/dist/containers/Clusters/Clusters.js +35 -6
  143. package/dist/containers/Clusters/Clusters.js.map +1 -1
  144. package/dist/containers/Clusters/Clusters.scss +24 -6
  145. package/dist/containers/Clusters/columns.js +9 -4
  146. package/dist/containers/Clusters/columns.js.map +1 -1
  147. package/dist/containers/Clusters/i18n/en.json +6 -0
  148. package/dist/containers/Clusters/i18n/index.d.ts +1 -1
  149. package/dist/containers/Header/Header.js +16 -2
  150. package/dist/containers/Header/Header.js.map +1 -1
  151. package/dist/containers/Header/HeaderLeftControls.js +3 -1
  152. package/dist/containers/Header/HeaderLeftControls.js.map +1 -1
  153. package/dist/containers/Header/PDiskLeftControls.d.ts +1 -0
  154. package/dist/containers/Header/PDiskLeftControls.js +24 -0
  155. package/dist/containers/Header/PDiskLeftControls.js.map +1 -0
  156. package/dist/containers/Header/StorageGroupLeftControls.d.ts +1 -0
  157. package/dist/containers/Header/StorageGroupLeftControls.js +23 -0
  158. package/dist/containers/Header/StorageGroupLeftControls.js.map +1 -0
  159. package/dist/containers/Header/VDiskLeftControls.d.ts +1 -0
  160. package/dist/containers/Header/VDiskLeftControls.js +23 -0
  161. package/dist/containers/Header/VDiskLeftControls.js.map +1 -0
  162. package/dist/containers/Header/breadcrumbs.js +5 -2
  163. package/dist/containers/Header/breadcrumbs.js.map +1 -1
  164. package/dist/containers/Header/i18n/en.json +6 -1
  165. package/dist/containers/Header/i18n/index.d.ts +1 -1
  166. package/dist/containers/Nodes/NodesControls/NodesControls.js +1 -1
  167. package/dist/containers/Nodes/NodesControls/NodesControls.js.map +1 -1
  168. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js +5 -3
  169. package/dist/containers/Nodes/PaginatedNodes/GroupedNodesComponent.js.map +1 -1
  170. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js +4 -2
  171. package/dist/containers/Nodes/PaginatedNodes/NodesComponent.js.map +1 -1
  172. package/dist/containers/Nodes/useDebouncedSearch.d.ts +2 -0
  173. package/dist/containers/Nodes/useDebouncedSearch.js +11 -0
  174. package/dist/containers/Nodes/useDebouncedSearch.js.map +1 -0
  175. package/dist/containers/Operations/constants.d.ts +1 -1
  176. package/dist/containers/PDiskPage/PDiskPage.js +30 -31
  177. package/dist/containers/PDiskPage/PDiskPage.js.map +1 -1
  178. package/dist/containers/PDiskPage/PDiskPage.scss +22 -11
  179. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js +7 -7
  180. package/dist/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.js.map +1 -1
  181. package/dist/containers/PDiskPage/PDiskStorageDetails.d.ts +6 -0
  182. package/dist/containers/PDiskPage/PDiskStorageDetails.js +28 -0
  183. package/dist/containers/PDiskPage/PDiskStorageDetails.js.map +1 -0
  184. package/dist/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  185. package/dist/containers/PDiskPage/i18n/en.json +2 -0
  186. package/dist/containers/PDiskPage/i18n/index.d.ts +1 -1
  187. package/dist/containers/Storage/Disks/Disks.js +36 -9
  188. package/dist/containers/Storage/Disks/Disks.js.map +1 -1
  189. package/dist/containers/Storage/PDisk/PDisk.d.ts +2 -1
  190. package/dist/containers/Storage/PDisk/PDisk.js +2 -2
  191. package/dist/containers/Storage/PDisk/PDisk.js.map +1 -1
  192. package/dist/containers/Storage/PDisk/i18n/index.d.ts +1 -1
  193. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js +7 -2
  194. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/columns.js.map +1 -1
  195. package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
  196. package/dist/containers/Storage/StorageExpertModePanel/components/SpaceLegend.scss +14 -82
  197. package/dist/containers/Storage/StorageExpertModePanel/constants.d.ts +1 -1
  198. package/dist/containers/Storage/StorageExpertModePanel/i18n/index.d.ts +1 -1
  199. package/dist/containers/Storage/StorageGroupStateLabel.d.ts +4 -0
  200. package/dist/containers/Storage/StorageGroupStateLabel.js +9 -0
  201. package/dist/containers/Storage/StorageGroupStateLabel.js.map +1 -0
  202. package/dist/containers/Storage/useStorageQueryParams.d.ts +4 -4
  203. package/dist/containers/Storage/utils/getStorageGroupStateLabel.d.ts +2 -0
  204. package/dist/containers/Storage/utils/getStorageGroupStateLabel.js +35 -0
  205. package/dist/containers/Storage/utils/getStorageGroupStateLabel.js.map +1 -0
  206. package/dist/containers/StorageGroupPage/StorageGroupPage.js +20 -13
  207. package/dist/containers/StorageGroupPage/StorageGroupPage.js.map +1 -1
  208. package/dist/containers/StorageGroupPage/StorageGroupPage.scss +18 -12
  209. package/dist/containers/StorageGroupPage/i18n/en.json +2 -1
  210. package/dist/containers/StorageGroupPage/i18n/index.d.ts +1 -1
  211. package/dist/containers/Tenant/Diagnostics/Overview/Overview.d.ts +2 -1
  212. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js +4 -1
  213. package/dist/containers/Tenant/Diagnostics/Overview/Overview.js.map +1 -1
  214. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.d.ts +2 -1
  215. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.js +11 -2
  216. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.js.map +1 -1
  217. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.d.ts +2 -1
  218. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.js +9 -8
  219. package/dist/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.js.map +1 -1
  220. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.d.ts +16 -1
  221. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.js +56 -19
  222. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.js.map +1 -1
  223. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/en.json +5 -1
  224. package/dist/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/index.d.ts +1 -1
  225. package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/ManagePartitioningDialog/i18n/index.d.ts +1 -1
  226. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js +5 -12
  227. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.js.map +1 -1
  228. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/i18n/index.d.ts +1 -1
  229. package/dist/containers/Tenant/Diagnostics/TopQueries/columns/i18n/index.d.ts +1 -1
  230. package/dist/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  231. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.d.ts +3 -1
  232. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js +3 -3
  233. package/dist/containers/Tenant/Healthcheck/components/HealthcheckDrawer.js.map +1 -1
  234. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js +2 -2
  235. package/dist/containers/Tenant/Healthcheck/components/HealthcheckIssue.js.map +1 -1
  236. package/dist/containers/Tenant/TenantDrawerHealthcheck.js +17 -2
  237. package/dist/containers/Tenant/TenantDrawerHealthcheck.js.map +1 -1
  238. package/dist/containers/Tenants/DatabaseDrawerHealthcheck.js +8 -1
  239. package/dist/containers/Tenants/DatabaseDrawerHealthcheck.js.map +1 -1
  240. package/dist/containers/VDiskPage/VDiskPage.js +33 -33
  241. package/dist/containers/VDiskPage/VDiskPage.js.map +1 -1
  242. package/dist/containers/VDiskPage/VDiskPage.scss +21 -8
  243. package/dist/containers/VDiskPage/VDiskStorageDetails.js +27 -29
  244. package/dist/containers/VDiskPage/VDiskStorageDetails.js.map +1 -1
  245. package/dist/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  246. package/dist/containers/VDiskPage/i18n/en.json +3 -12
  247. package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
  248. package/dist/lib.d.ts +1 -1
  249. package/dist/lib.js.map +1 -1
  250. package/dist/store/configureStore.d.ts +2 -2
  251. package/dist/store/defaultStore.d.ts +1 -1
  252. package/dist/store/reducers/cluster/parseFields.js +1 -0
  253. package/dist/store/reducers/cluster/parseFields.js.map +1 -1
  254. package/dist/store/reducers/clusters/clusters.js +1 -0
  255. package/dist/store/reducers/clusters/clusters.js.map +1 -1
  256. package/dist/store/reducers/clusters/selectors.d.ts +1 -0
  257. package/dist/store/reducers/clusters/selectors.js +4 -1
  258. package/dist/store/reducers/clusters/selectors.js.map +1 -1
  259. package/dist/store/reducers/clusters/types.d.ts +2 -0
  260. package/dist/store/reducers/header/types.d.ts +1 -1
  261. package/dist/store/reducers/index.d.ts +2 -2
  262. package/dist/store/reducers/pdisk/types.d.ts +1 -0
  263. package/dist/store/reducers/pdisk/utils.js +6 -1
  264. package/dist/store/reducers/pdisk/utils.js.map +1 -1
  265. package/dist/store/reducers/storage/prepareGroupsDisks.d.ts +2 -1
  266. package/dist/store/reducers/storage/prepareGroupsDisks.js +9 -19
  267. package/dist/store/reducers/storage/prepareGroupsDisks.js.map +1 -1
  268. package/dist/store/reducers/storage/utils.js +14 -3
  269. package/dist/store/reducers/storage/utils.js.map +1 -1
  270. package/dist/store/reducers/streamingQuery/streamingQuery.js +2 -4
  271. package/dist/store/reducers/streamingQuery/streamingQuery.js.map +1 -1
  272. package/dist/store/reducers/vdisk/types.d.ts +1 -1
  273. package/dist/store/reducers/vdisk/utils.js +5 -5
  274. package/dist/store/reducers/vdisk/utils.js.map +1 -1
  275. package/dist/styles/mixins.scss +22 -0
  276. package/dist/types/api/meta.d.ts +1 -0
  277. package/dist/types/api/nodesList.d.ts +2 -0
  278. package/dist/types/api/pdisk.d.ts +4 -0
  279. package/dist/types/api/pdisk.js.map +1 -1
  280. package/dist/types/api/vdisk.d.ts +8 -0
  281. package/dist/types/api/vdisk.js +7 -0
  282. package/dist/types/api/vdisk.js.map +1 -1
  283. package/dist/types/store/nodesList.d.ts +4 -2
  284. package/dist/uiFactory/types.d.ts +5 -2
  285. package/dist/utils/bytesParsers/formatBytes.d.ts +3 -1
  286. package/dist/utils/bytesParsers/formatBytes.js +12 -3
  287. package/dist/utils/bytesParsers/formatBytes.js.map +1 -1
  288. package/dist/utils/disks/constants.d.ts +1 -0
  289. package/dist/utils/disks/constants.js +4 -0
  290. package/dist/utils/disks/constants.js.map +1 -1
  291. package/dist/utils/disks/diskInfo/getDiskLocationItems.d.ts +16 -0
  292. package/dist/utils/disks/diskInfo/getDiskLocationItems.js +30 -0
  293. package/dist/utils/disks/diskInfo/getDiskLocationItems.js.map +1 -0
  294. package/dist/utils/disks/diskInfo/i18n/en.json +9 -0
  295. package/dist/utils/disks/diskInfo/i18n/index.d.ts +2 -0
  296. package/dist/utils/disks/diskInfo/i18n/index.js +4 -0
  297. package/dist/utils/disks/diskInfo/i18n/index.js.map +1 -0
  298. package/dist/utils/disks/iconCalculators.d.ts +5 -0
  299. package/dist/utils/disks/iconCalculators.js +1 -1
  300. package/dist/utils/disks/iconCalculators.js.map +1 -1
  301. package/dist/utils/disks/prepareDisks.d.ts +6 -2
  302. package/dist/utils/disks/prepareDisks.js +22 -35
  303. package/dist/utils/disks/prepareDisks.js.map +1 -1
  304. package/dist/utils/disks/types.d.ts +9 -2
  305. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.d.ts +2 -0
  306. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js +6 -0
  307. package/dist/utils/hooks/useDatabaseHealthcheckAvailable.js.map +1 -0
  308. package/dist/utils/hooks/useNodeMetadata.d.ts +2 -0
  309. package/dist/utils/hooks/useNodeMetadata.js +15 -0
  310. package/dist/utils/hooks/useNodeMetadata.js.map +1 -0
  311. package/dist/utils/memory.d.ts +5 -0
  312. package/dist/utils/memory.js +9 -0
  313. package/dist/utils/memory.js.map +1 -0
  314. package/dist/utils/nodes.js +6 -2
  315. package/dist/utils/nodes.js.map +1 -1
  316. package/dist/utils/storageMetrics.d.ts +3 -2
  317. package/dist/utils/storageMetrics.js +30 -10
  318. package/dist/utils/storageMetrics.js.map +1 -1
  319. package/dist/utils/timeParsers/formatDuration.d.ts +4 -1
  320. package/dist/utils/timeParsers/formatDuration.js +16 -1
  321. package/dist/utils/timeParsers/formatDuration.js.map +1 -1
  322. package/dist/utils/timeParsers/i18n/en.json +5 -1
  323. package/dist/utils/timeParsers/i18n/index.d.ts +1 -1
  324. package/dist/utils/timeParsers/i18n/ru.json +5 -1
  325. package/package.json +2 -2
  326. package/src/components/ButtonWithConfirmDialog/ButtonWithConfirmDialog.tsx +22 -3
  327. package/src/components/CopyableValue/CopyableValue.scss +16 -0
  328. package/src/components/CopyableValue/CopyableValue.tsx +40 -0
  329. package/src/components/CopyableValue/i18n/en.json +3 -0
  330. package/src/components/CopyableValue/i18n/index.ts +8 -0
  331. package/src/components/CriticalActionDialog/CriticalActionDialog.tsx +3 -0
  332. package/src/components/DiskCapacityInfo/DiskCapacityInfo.tsx +75 -129
  333. package/src/components/DiskCapacityInfo/i18n/en.json +0 -1
  334. package/src/components/DiskPopup/DiskPopup.scss +203 -0
  335. package/src/components/DiskPopup/DiskPopup.tsx +123 -0
  336. package/src/components/DiskPopup/i18n/en.json +3 -0
  337. package/src/components/DiskPopup/i18n/index.ts +5 -0
  338. package/src/components/DiskStatus/DiskStatus.scss +59 -0
  339. package/src/components/DiskStatus/DiskStatus.tsx +149 -0
  340. package/src/components/DiskStatus/i18n/en.json +6 -0
  341. package/src/components/DiskStatus/i18n/index.ts +5 -0
  342. package/src/components/EntityStatus/EntityStatus.scss +5 -0
  343. package/src/components/EntityStatus/EntityStatus.tsx +39 -6
  344. package/src/components/EvictVDiskButton/EvictVDiskButton.tsx +10 -2
  345. package/src/components/EvictVDiskButton/i18n/en.json +2 -2
  346. package/src/components/FullNodeViewer/FullNodeViewer.tsx +4 -9
  347. package/src/components/HoverPopup/HoverPopup.tsx +157 -34
  348. package/src/components/HoverPopup/usePopupPriority.ts +39 -0
  349. package/src/components/MemoryViewer/MemoryViewer.tsx +30 -17
  350. package/src/components/MemoryViewer/i18n/en.json +4 -3
  351. package/src/components/MemoryViewer/utils.ts +19 -12
  352. package/src/components/PDiskInfo/PDiskInfo.scss +15 -0
  353. package/src/components/PDiskInfo/PDiskInfo.tsx +51 -243
  354. package/src/components/PDiskInfo/PDiskLogSize.scss +12 -0
  355. package/src/components/PDiskInfo/PDiskLogSize.tsx +41 -0
  356. package/src/components/PDiskInfo/getPDiskDetails.tsx +37 -0
  357. package/src/components/PDiskInfo/i18n/en.json +69 -10
  358. package/src/components/PDiskInfo/statuses.ts +222 -0
  359. package/src/components/PDiskPopup/PDiskPopup.tsx +62 -147
  360. package/src/components/PDiskPopup/i18n/en.json +2 -12
  361. package/src/components/Search/Search.tsx +5 -2
  362. package/src/components/StorageGroupInfo/StorageGroupInfo.scss +21 -0
  363. package/src/components/StorageGroupInfo/StorageGroupInfo.tsx +119 -263
  364. package/src/components/StorageGroupInfo/i18n/en.json +1 -9
  365. package/src/components/VDisk/VDisk.tsx +34 -36
  366. package/src/components/VDisk/VDiskWithDonorsStack.tsx +2 -0
  367. package/src/components/VDisk/getFlagStatusText.ts +19 -0
  368. package/src/components/VDisk/i18n/en.json +1 -1
  369. package/src/components/VDiskInfo/VDiskInfo.scss +19 -3
  370. package/src/components/VDiskInfo/VDiskInfo.tsx +119 -341
  371. package/src/components/VDiskInfo/getVDiskDetails.tsx +63 -0
  372. package/src/components/VDiskInfo/i18n/en.json +5 -21
  373. package/src/components/VDiskPopup/VDiskPopup.scss +3 -10
  374. package/src/components/VDiskPopup/VDiskPopup.tsx +192 -424
  375. package/src/components/VDiskPopup/i18n/en.json +4 -22
  376. package/src/components/VDiskStatus/VDiskReplicationStatus.tsx +77 -0
  377. package/src/components/VDiskStatus/VDiskStatus.scss +36 -0
  378. package/src/components/VDiskStatus/VDiskStatus.tsx +49 -0
  379. package/src/components/VDiskStatus/i18n/en.json +33 -0
  380. package/src/components/VDiskStatus/i18n/index.ts +7 -0
  381. package/src/components/VDiskStatus/index.ts +7 -0
  382. package/src/components/VDiskStatus/statuses.ts +139 -0
  383. package/src/components/capacityMetricsColumns/i18n/en.json +4 -4
  384. package/src/components/nodesColumns/columns.tsx +26 -12
  385. package/src/containers/Cluster/ClusterDrawerHealthcheck.tsx +6 -0
  386. package/src/containers/Clusters/ClusterDrawerHealthcheck.tsx +1 -0
  387. package/src/containers/Clusters/Clusters.scss +24 -6
  388. package/src/containers/Clusters/Clusters.tsx +74 -5
  389. package/src/containers/Clusters/columns.tsx +36 -6
  390. package/src/containers/Clusters/i18n/en.json +6 -0
  391. package/src/containers/Header/Header.tsx +19 -3
  392. package/src/containers/Header/HeaderLeftControls.tsx +3 -1
  393. package/src/containers/Header/PDiskLeftControls.tsx +41 -0
  394. package/src/containers/Header/StorageGroupLeftControls.tsx +38 -0
  395. package/src/containers/Header/VDiskLeftControls.tsx +40 -0
  396. package/src/containers/Header/breadcrumbs.tsx +4 -2
  397. package/src/containers/Header/i18n/en.json +6 -1
  398. package/src/containers/Nodes/NodesControls/NodesControls.tsx +1 -0
  399. package/src/containers/Nodes/PaginatedNodes/GroupedNodesComponent.tsx +5 -3
  400. package/src/containers/Nodes/PaginatedNodes/NodesComponent.tsx +4 -2
  401. package/src/containers/Nodes/useDebouncedSearch.ts +13 -0
  402. package/src/containers/PDiskPage/PDiskPage.scss +22 -11
  403. package/src/containers/PDiskPage/PDiskPage.tsx +88 -56
  404. package/src/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.tsx +16 -11
  405. package/src/containers/PDiskPage/PDiskStorageDetails.scss +51 -0
  406. package/src/containers/PDiskPage/PDiskStorageDetails.tsx +64 -0
  407. package/src/containers/PDiskPage/i18n/en.json +2 -0
  408. package/src/containers/Storage/Disks/Disks.tsx +66 -12
  409. package/src/containers/Storage/PDisk/PDisk.tsx +3 -0
  410. package/src/containers/Storage/PaginatedStorageGroupsTable/columns/columns.tsx +24 -3
  411. package/src/containers/Storage/StorageExpertModePanel/components/SpaceLegend.scss +14 -82
  412. package/src/containers/Storage/StorageGroupStateLabel.tsx +22 -0
  413. package/src/containers/Storage/utils/getStorageGroupStateLabel.ts +49 -0
  414. package/src/containers/StorageGroupPage/StorageGroupPage.scss +18 -12
  415. package/src/containers/StorageGroupPage/StorageGroupPage.tsx +63 -26
  416. package/src/containers/StorageGroupPage/i18n/en.json +2 -1
  417. package/src/containers/Tenant/Diagnostics/Overview/Overview.tsx +5 -1
  418. package/src/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/SchemaObjectInfo.tsx +12 -1
  419. package/src/containers/Tenant/Diagnostics/Overview/SchemaObjectInfo/prepareSchemaObjectInfo.tsx +11 -10
  420. package/src/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/StreamingQueryInfo.tsx +83 -20
  421. package/src/containers/Tenant/Diagnostics/Overview/StreamingQueryInfo/i18n/en.json +5 -1
  422. package/src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +5 -32
  423. package/src/containers/Tenant/Healthcheck/Healthcheck.scss +6 -1
  424. package/src/containers/Tenant/Healthcheck/components/HealthcheckDrawer.tsx +5 -2
  425. package/src/containers/Tenant/Healthcheck/components/HealthcheckIssue.tsx +18 -8
  426. package/src/containers/Tenant/TenantDrawerHealthcheck.tsx +24 -1
  427. package/src/containers/Tenants/DatabaseDrawerHealthcheck.tsx +10 -0
  428. package/src/containers/VDiskPage/VDiskPage.scss +21 -8
  429. package/src/containers/VDiskPage/VDiskPage.tsx +103 -64
  430. package/src/containers/VDiskPage/VDiskStorageDetails.scss +24 -93
  431. package/src/containers/VDiskPage/VDiskStorageDetails.tsx +50 -158
  432. package/src/containers/VDiskPage/i18n/en.json +3 -14
  433. package/src/lib.ts +1 -0
  434. package/src/store/reducers/cluster/parseFields.ts +1 -0
  435. package/src/store/reducers/clusters/clusters.ts +1 -0
  436. package/src/store/reducers/clusters/selectors.ts +4 -0
  437. package/src/store/reducers/clusters/types.ts +3 -0
  438. package/src/store/reducers/header/types.ts +3 -1
  439. package/src/store/reducers/pdisk/types.ts +1 -0
  440. package/src/store/reducers/pdisk/utils.ts +6 -3
  441. package/src/store/reducers/storage/prepareGroupsDisks.ts +9 -22
  442. package/src/store/reducers/storage/utils.ts +17 -3
  443. package/src/store/reducers/streamingQuery/streamingQuery.ts +2 -4
  444. package/src/store/reducers/vdisk/types.ts +2 -1
  445. package/src/store/reducers/vdisk/utils.ts +4 -5
  446. package/src/styles/mixins.scss +22 -0
  447. package/src/types/api/meta.ts +1 -0
  448. package/src/types/api/nodesList.ts +3 -0
  449. package/src/types/api/pdisk.ts +4 -0
  450. package/src/types/api/vdisk.ts +9 -0
  451. package/src/types/store/nodesList.ts +7 -7
  452. package/src/uiFactory/types.ts +9 -2
  453. package/src/utils/bytesParsers/formatBytes.ts +23 -4
  454. package/src/utils/disks/constants.ts +5 -0
  455. package/src/utils/disks/diskInfo/getDiskLocationItems.ts +50 -0
  456. package/src/utils/disks/diskInfo/i18n/en.json +9 -0
  457. package/src/utils/disks/diskInfo/i18n/index.ts +5 -0
  458. package/src/utils/disks/iconCalculators.ts +1 -1
  459. package/src/utils/disks/prepareDisks.ts +21 -47
  460. package/src/utils/disks/types.ts +10 -2
  461. package/src/utils/hooks/useDatabaseHealthcheckAvailable.ts +9 -0
  462. package/src/utils/hooks/useNodeMetadata.ts +21 -0
  463. package/src/utils/memory.ts +16 -0
  464. package/src/utils/nodes.ts +7 -1
  465. package/src/utils/storageMetrics.ts +38 -14
  466. package/src/utils/timeParsers/formatDuration.ts +22 -1
  467. package/src/utils/timeParsers/i18n/en.json +5 -1
  468. package/src/utils/timeParsers/i18n/ru.json +5 -1
  469. package/dist/components/VDiskInfo/getVDiskCapacityColumns.d.ts +0 -11
  470. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js +0 -52
  471. package/dist/components/VDiskInfo/getVDiskCapacityColumns.js.map +0 -1
  472. package/src/components/VDiskInfo/getVDiskCapacityColumns.tsx +0 -83
@@ -1,297 +1,153 @@
1
- import {Flex} from '@gravity-ui/uikit';
1
+ import {Flex, Text, Tooltip} from '@gravity-ui/uikit';
2
2
 
3
3
  import {useBlobStorageCapacityMetricsEnabled} from '../../store/reducers/capabilities/hooks';
4
4
  import type {PreparedStorageGroup} from '../../store/reducers/storage/types';
5
- import {valueIsDefined} from '../../utils';
6
- import {formatStorageValuesToGb} from '../../utils/dataFormatters/dataFormatters';
7
- import {getDocsLink} from '../../utils/docs';
8
- import {formatToMs} from '../../utils/timeParsers';
9
- import {bytesToSpeed} from '../../utils/utils';
5
+ import {isNonEmptyValue} from '../../utils';
6
+ import {formatBytes} from '../../utils/bytesParsers';
7
+ import {cn} from '../../utils/cn';
8
+ import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
10
9
  import {
11
- getStorageGroupCapacityInfoItems,
12
- toInfoViewerItems,
13
- } from '../DiskCapacityInfo/DiskCapacityInfo';
10
+ formatMetricPercent,
11
+ formatStorageMetricPair,
12
+ formatStorageThroughput,
13
+ } from '../../utils/storageMetrics';
14
+ import {formatToMs} from '../../utils/timeParsers';
15
+ import {parseOptionalNonNegativeNumber} from '../../utils/utils';
16
+ import {getStorageGroupCapacityInfoItems} from '../DiskCapacityInfo/DiskCapacityInfo';
14
17
  import diskCapacityInfoKeyset from '../DiskCapacityInfo/i18n';
15
- import type {InfoViewerItem} from '../InfoViewer';
16
- import {InfoViewer} from '../InfoViewer';
17
- import type {InfoViewerProps} from '../InfoViewer/InfoViewer';
18
18
  import {StatusIcon} from '../StatusIcon/StatusIcon';
19
- import {TitleWithHelpMark} from '../TitleWithHelpmark/TitleWithHelpmark';
19
+ import type {YDBDefinitionListItem} from '../YDBDefinitionList/YDBDefinitionList';
20
+ import {YDBDefinitionList} from '../YDBDefinitionList/YDBDefinitionList';
20
21
  import {CAPACITY_CONFIGURATION_HELP_TEXT} from '../capacityMetricsColumns/constants';
21
22
  import {formatCapacityUnitCount} from '../capacityMetricsColumns/formatters';
22
23
 
23
24
  import {storageGroupInfoKeyset} from './i18n';
24
25
 
25
- interface StorageGroupInfoProps extends Omit<InfoViewerProps, 'info'> {
26
+ import './StorageGroupInfo.scss';
27
+
28
+ const b = cn('ydb-storage-group-info');
29
+
30
+ interface StorageGroupInfoProps {
26
31
  data?: PreparedStorageGroup;
27
32
  className?: string;
28
33
  }
29
34
 
30
- // eslint-disable-next-line complexity
31
- export function StorageGroupInfo({data, className, ...infoViewerProps}: StorageGroupInfoProps) {
35
+ export function StorageGroupInfo({data, className}: StorageGroupInfoProps) {
32
36
  const capacityMetricsEnabled = useBlobStorageCapacityMetricsEnabled();
33
-
34
37
  const {
35
- Encryption,
36
- Overall,
37
- DiskSpace,
38
- MediaType,
39
- ErasureSpecies,
40
- Used,
41
- Limit,
42
- Usage,
43
- Read,
44
- Write,
38
+ PoolName,
45
39
  GroupGeneration,
46
- AllocationUnits,
47
- State,
40
+ ErasureSpecies,
48
41
  MissingDisks,
49
- Available,
50
42
  LatencyPutTabletLogMs,
51
43
  LatencyPutUserDataMs,
52
44
  LatencyGetFastMs,
45
+ Read,
46
+ Write,
53
47
  GroupSizeInUnits,
48
+ Used,
49
+ Limit,
50
+ Available,
51
+ Usage,
52
+ DiskSpace,
54
53
  } = data || {};
54
+ const configurationItems: YDBDefinitionListItem[] = [
55
+ {
56
+ name: storageGroupInfoKeyset('field_pool-name'),
57
+ content: PoolName ? (
58
+ <Tooltip content={PoolName}>
59
+ <Text ellipsisLines={2} wordBreak="break-word">
60
+ {PoolName}
61
+ </Text>
62
+ </Tooltip>
63
+ ) : (
64
+ EMPTY_DATA_PLACEHOLDER
65
+ ),
66
+ },
67
+ ...(
68
+ [
69
+ [storageGroupInfoKeyset('group-generation'), GroupGeneration],
70
+ [storageGroupInfoKeyset('erasure-species'), ErasureSpecies],
71
+ [storageGroupInfoKeyset('missing-disks'), MissingDisks],
72
+ ] as const
73
+ ).map(([name, value]) => ({
74
+ name,
75
+ content: isNonEmptyValue(value) ? value : EMPTY_DATA_PLACEHOLDER,
76
+ })),
77
+ ];
78
+ const latencyItems: YDBDefinitionListItem[] = (
79
+ [
80
+ [storageGroupInfoKeyset('latency-put-tablet-log'), LatencyPutTabletLogMs],
81
+ [storageGroupInfoKeyset('latency-put-user-data'), LatencyPutUserDataMs],
82
+ [storageGroupInfoKeyset('latency-get-fast'), LatencyGetFastMs],
83
+ ] as const
84
+ ).map(([name, value]) => {
85
+ const latency = parseOptionalNonNegativeNumber(value);
86
+ return {
87
+ name,
88
+ content: latency === undefined ? EMPTY_DATA_PLACEHOLDER : formatToMs(latency),
89
+ };
90
+ });
91
+ const throughputItems: YDBDefinitionListItem[] = (
92
+ [
93
+ [storageGroupInfoKeyset('read-throughput'), Read],
94
+ [storageGroupInfoKeyset('write-throughput'), Write],
95
+ ] as const
96
+ ).map(([name, value]) => ({
97
+ name,
98
+ content: formatStorageThroughput(value),
99
+ }));
100
+ const capacityItems: YDBDefinitionListItem[] = [];
55
101
 
56
- const distributedStorageChannelDocsLink = getDocsLink('distributedStorageChannel');
57
- const allocationUnitsLabel = (
58
- <TitleWithHelpMark
59
- header={storageGroupInfoKeyset('allocation-units')}
60
- note={storageGroupInfoKeyset('context_allocation-units')}
61
- docsLink={distributedStorageChannelDocsLink}
62
- />
102
+ if (capacityMetricsEnabled) {
103
+ capacityItems.push({
104
+ name: diskCapacityInfoKeyset('field_group-size-in-units'),
105
+ content: formatCapacityUnitCount(GroupSizeInUnits),
106
+ note: CAPACITY_CONFIGURATION_HELP_TEXT.GroupSizeInUnits,
107
+ });
108
+ }
109
+ capacityItems.push(
110
+ {
111
+ name: storageGroupInfoKeyset('used-space'),
112
+ content: formatStorageMetricPair(Used, Limit, 2),
113
+ },
114
+ {
115
+ name: storageGroupInfoKeyset('available'),
116
+ content:
117
+ formatBytes({
118
+ value: parseOptionalNonNegativeNumber(Available),
119
+ size: 'gb',
120
+ fixedDecimalPlaces: 2,
121
+ }) || EMPTY_DATA_PLACEHOLDER,
122
+ },
63
123
  );
64
-
65
124
  if (capacityMetricsEnabled) {
66
- const configurationInfo: InfoViewerItem[] = [];
67
- const runtimeInfo: InfoViewerItem[] = [];
68
-
69
- if (valueIsDefined(GroupGeneration)) {
70
- configurationInfo.push({
71
- label: storageGroupInfoKeyset('group-generation'),
72
- value: GroupGeneration,
73
- });
74
- }
75
- if (valueIsDefined(ErasureSpecies)) {
76
- configurationInfo.push({
77
- label: storageGroupInfoKeyset('erasure-species'),
78
- value: ErasureSpecies,
79
- });
80
- }
81
- if (valueIsDefined(MediaType)) {
82
- configurationInfo.push({
83
- label: storageGroupInfoKeyset('media-type'),
84
- value: MediaType,
85
- });
86
- }
87
- if (valueIsDefined(Encryption)) {
88
- configurationInfo.push({
89
- label: storageGroupInfoKeyset('encryption'),
90
- value: Encryption ? storageGroupInfoKeyset('yes') : storageGroupInfoKeyset('no'),
91
- });
92
- }
93
- configurationInfo.push({
94
- label: (
95
- <TitleWithHelpMark
96
- header={diskCapacityInfoKeyset('field_group-size-in-units')}
97
- note={CAPACITY_CONFIGURATION_HELP_TEXT.GroupSizeInUnits}
98
- />
99
- ),
100
- value: formatCapacityUnitCount(GroupSizeInUnits),
101
- });
102
-
103
- if (valueIsDefined(Overall)) {
104
- runtimeInfo.push({
105
- label: storageGroupInfoKeyset('overall'),
106
- value: <StatusIcon status={Overall} />,
107
- });
108
- }
109
- if (valueIsDefined(State)) {
110
- runtimeInfo.push({label: storageGroupInfoKeyset('state'), value: State});
111
- }
112
- if (valueIsDefined(MissingDisks)) {
113
- runtimeInfo.push({
114
- label: storageGroupInfoKeyset('missing-disks'),
115
- value: MissingDisks,
116
- });
117
- }
118
- if (valueIsDefined(Used) && valueIsDefined(Limit)) {
119
- const usedNum = Number(Used);
120
- const limitNum = Number(Limit);
121
- const hasSpaceData = Number.isFinite(usedNum) && Number.isFinite(limitNum);
122
- runtimeInfo.push({
123
- label: storageGroupInfoKeyset('used-space'),
124
- value: hasSpaceData
125
- ? formatStorageValuesToGb(usedNum, limitNum).join(' / ')
126
- : storageGroupInfoKeyset('no-data'),
127
- });
128
- }
129
- if (valueIsDefined(Available)) {
130
- runtimeInfo.push({
131
- label: storageGroupInfoKeyset('available'),
132
- value: formatStorageValuesToGb(Number(Available)),
133
- });
134
- }
135
- if (valueIsDefined(AllocationUnits)) {
136
- runtimeInfo.push({
137
- label: allocationUnitsLabel,
138
- value: AllocationUnits,
139
- });
140
- }
141
- runtimeInfo.push(...toInfoViewerItems(getStorageGroupCapacityInfoItems(data)));
142
- if (valueIsDefined(LatencyPutTabletLogMs)) {
143
- runtimeInfo.push({
144
- label: storageGroupInfoKeyset('latency-put-tablet-log'),
145
- value: formatToMs(LatencyPutTabletLogMs),
146
- });
147
- }
148
- if (valueIsDefined(LatencyPutUserDataMs)) {
149
- runtimeInfo.push({
150
- label: storageGroupInfoKeyset('latency-put-user-data'),
151
- value: formatToMs(LatencyPutUserDataMs),
152
- });
153
- }
154
- if (valueIsDefined(LatencyGetFastMs)) {
155
- runtimeInfo.push({
156
- label: storageGroupInfoKeyset('latency-get-fast'),
157
- value: formatToMs(LatencyGetFastMs),
158
- });
159
- }
160
- if (valueIsDefined(Read)) {
161
- runtimeInfo.push({
162
- label: storageGroupInfoKeyset('read-throughput'),
163
- value: bytesToSpeed(Number(Read)),
164
- });
165
- }
166
- if (valueIsDefined(Write)) {
167
- runtimeInfo.push({
168
- label: storageGroupInfoKeyset('write-throughput'),
169
- value: bytesToSpeed(Number(Write)),
170
- });
171
- }
172
-
173
- return (
174
- <Flex className={className} gap={2} direction="row" wrap>
175
- <InfoViewer info={configurationInfo} {...infoViewerProps} />
176
- <InfoViewer info={runtimeInfo} {...infoViewerProps} />
177
- </Flex>
125
+ capacityItems.push(...getStorageGroupCapacityInfoItems(data));
126
+ } else {
127
+ capacityItems.push(
128
+ {
129
+ name: storageGroupInfoKeyset('usage'),
130
+ content: formatMetricPercent(Usage, 2),
131
+ },
132
+ {
133
+ name: storageGroupInfoKeyset('disk-space'),
134
+ content: DiskSpace ? <StatusIcon status={DiskSpace} /> : EMPTY_DATA_PLACEHOLDER,
135
+ },
178
136
  );
179
137
  }
180
138
 
181
- const storageGroupInfoFirstColumn = [];
182
-
183
- if (valueIsDefined(GroupGeneration)) {
184
- storageGroupInfoFirstColumn.push({
185
- label: storageGroupInfoKeyset('group-generation'),
186
- value: GroupGeneration,
187
- });
188
- }
189
- if (valueIsDefined(ErasureSpecies)) {
190
- storageGroupInfoFirstColumn.push({
191
- label: storageGroupInfoKeyset('erasure-species'),
192
- value: ErasureSpecies,
193
- });
194
- }
195
- if (valueIsDefined(MediaType)) {
196
- storageGroupInfoFirstColumn.push({
197
- label: storageGroupInfoKeyset('media-type'),
198
- value: MediaType,
199
- });
200
- }
201
- if (valueIsDefined(Encryption)) {
202
- storageGroupInfoFirstColumn.push({
203
- label: storageGroupInfoKeyset('encryption'),
204
- value: Encryption ? storageGroupInfoKeyset('yes') : storageGroupInfoKeyset('no'),
205
- });
206
- }
207
- if (valueIsDefined(Overall)) {
208
- storageGroupInfoFirstColumn.push({
209
- label: storageGroupInfoKeyset('overall'),
210
- value: <StatusIcon status={Overall} />,
211
- });
212
- }
213
- if (valueIsDefined(State)) {
214
- storageGroupInfoFirstColumn.push({label: storageGroupInfoKeyset('state'), value: State});
215
- }
216
- if (valueIsDefined(MissingDisks)) {
217
- storageGroupInfoFirstColumn.push({
218
- label: storageGroupInfoKeyset('missing-disks'),
219
- value: MissingDisks,
220
- });
221
- }
222
-
223
- const storageGroupInfoSecondColumn = [];
224
-
225
- if (valueIsDefined(Used) && valueIsDefined(Limit)) {
226
- const usedNum = Number(Used);
227
- const limitNum = Number(Limit);
228
- const hasSpaceData = Number.isFinite(usedNum) && Number.isFinite(limitNum);
229
- storageGroupInfoSecondColumn.push({
230
- label: storageGroupInfoKeyset('used-space'),
231
- value: hasSpaceData
232
- ? formatStorageValuesToGb(usedNum, limitNum).join(' / ')
233
- : storageGroupInfoKeyset('no-data'),
234
- });
235
- }
236
- if (valueIsDefined(Available)) {
237
- storageGroupInfoSecondColumn.push({
238
- label: storageGroupInfoKeyset('available'),
239
- value: formatStorageValuesToGb(Number(Available)),
240
- });
241
- }
242
- if (valueIsDefined(Usage)) {
243
- storageGroupInfoSecondColumn.push({
244
- label: storageGroupInfoKeyset('usage'),
245
- value: `${Usage.toFixed(2)}%`,
246
- });
247
- }
248
- if (valueIsDefined(DiskSpace)) {
249
- storageGroupInfoSecondColumn.push({
250
- label: storageGroupInfoKeyset('disk-space'),
251
- value: <StatusIcon status={DiskSpace} />,
252
- });
253
- }
254
- if (valueIsDefined(LatencyPutTabletLogMs)) {
255
- storageGroupInfoSecondColumn.push({
256
- label: storageGroupInfoKeyset('latency-put-tablet-log'),
257
- value: formatToMs(LatencyPutTabletLogMs),
258
- });
259
- }
260
- if (valueIsDefined(LatencyPutUserDataMs)) {
261
- storageGroupInfoSecondColumn.push({
262
- label: storageGroupInfoKeyset('latency-put-user-data'),
263
- value: formatToMs(LatencyPutUserDataMs),
264
- });
265
- }
266
- if (valueIsDefined(LatencyGetFastMs)) {
267
- storageGroupInfoSecondColumn.push({
268
- label: storageGroupInfoKeyset('latency-get-fast'),
269
- value: formatToMs(LatencyGetFastMs),
270
- });
271
- }
272
- if (valueIsDefined(AllocationUnits)) {
273
- storageGroupInfoSecondColumn.push({
274
- label: allocationUnitsLabel,
275
- value: AllocationUnits,
276
- });
277
- }
278
- if (valueIsDefined(Read)) {
279
- storageGroupInfoSecondColumn.push({
280
- label: storageGroupInfoKeyset('read-throughput'),
281
- value: bytesToSpeed(Number(Read)),
282
- });
283
- }
284
- if (valueIsDefined(Write)) {
285
- storageGroupInfoSecondColumn.push({
286
- label: storageGroupInfoKeyset('write-throughput'),
287
- value: bytesToSpeed(Number(Write)),
288
- });
289
- }
290
-
291
139
  return (
292
- <Flex className={className} gap={2} direction="row" wrap>
293
- <InfoViewer info={storageGroupInfoFirstColumn} {...infoViewerProps} />
294
- <InfoViewer info={storageGroupInfoSecondColumn} {...infoViewerProps} />
140
+ <Flex className={b(null, className)} wrap="wrap">
141
+ <Flex direction="column" gap={4} className={b('configuration')}>
142
+ <YDBDefinitionList items={configurationItems} nameMaxWidth={200} />
143
+ <YDBDefinitionList items={latencyItems} nameMaxWidth={200} />
144
+ <YDBDefinitionList items={throughputItems} nameMaxWidth={200} />
145
+ </Flex>
146
+ <YDBDefinitionList
147
+ items={capacityItems}
148
+ nameMaxWidth={200}
149
+ wrapperClassName={b('capacity')}
150
+ />
295
151
  </Flex>
296
152
  );
297
153
  }
@@ -1,20 +1,12 @@
1
1
  {
2
- "encryption": "Encryption",
3
- "overall": "Overall",
4
2
  "disk-space": "Disk Space",
5
- "media-type": "Media Type",
3
+ "field_pool-name": "Pool Name",
6
4
  "erasure-species": "Erasure Species",
7
5
  "used-space": "Used Space",
8
- "no-data": "No data",
9
6
  "usage": "Usage",
10
7
  "read-throughput": "Read Throughput",
11
8
  "write-throughput": "Write Throughput",
12
- "yes": "Yes",
13
- "no": "No",
14
9
  "group-generation": "Group Generation",
15
- "allocation-units": "Allocation Units",
16
- "context_allocation-units": "The number of channels used by tablets to write data to the storage group.",
17
- "state": "State",
18
10
  "missing-disks": "Missing Disks",
19
11
  "available": "Available Space",
20
12
  "latency-put-tablet-log": "Latency (Put Tablet Log)",
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import type {PopupPlacement, PopupProps} from '@gravity-ui/uikit';
4
4
 
5
5
  import {useVDiskPagePath} from '../../routes';
6
- import {EFlag, isCapacityAlert} from '../../types/api/enums';
6
+ import {isCapacityAlert} from '../../types/api/enums';
7
7
  import {cn} from '../../utils/cn';
8
8
  import {NOT_AVAILABLE_SEVERITY} from '../../utils/disks/constants';
9
9
  import type {
@@ -25,6 +25,7 @@ import {HoverPopup} from '../HoverPopup/HoverPopup';
25
25
  import {InternalLink} from '../InternalLink';
26
26
  import {VDiskPopup} from '../VDiskPopup/VDiskPopup';
27
27
 
28
+ import {getFlagStatusText} from './getFlagStatusText';
28
29
  import {i18n} from './i18n';
29
30
 
30
31
  import './VDisk.scss';
@@ -110,22 +111,6 @@ function getVDiskBarIndicator({
110
111
  };
111
112
  }
112
113
 
113
- function getFlagAccessibleName(flag: EFlag | undefined) {
114
- switch (flag) {
115
- case EFlag.Green:
116
- case EFlag.Blue:
117
- return i18n('value_ok');
118
- case EFlag.Yellow:
119
- return i18n('value_notice');
120
- case EFlag.Orange:
121
- return i18n('value_warning');
122
- case EFlag.Red:
123
- return i18n('value_impaired');
124
- default:
125
- return i18n('context_no-data');
126
- }
127
- }
128
-
129
114
  function getReplicationAccessibleName(replicated: boolean | undefined) {
130
115
  if (replicated === undefined) {
131
116
  return i18n('context_no-data');
@@ -163,32 +148,41 @@ function getAllModeAccessibleName(data: PreparedVDisk, hasIssues: boolean | unde
163
148
  });
164
149
  }
165
150
 
151
+ function getAccessibleDiskName(
152
+ data: PreparedVDisk,
153
+ {mode, isNoData}: Pick<VDiskDisplayState, 'mode' | 'isNoData'>,
154
+ ) {
155
+ const noData = i18n('context_no-data');
156
+ const diskName = i18n(data.DonorMode ? 'context_donor-vdisk' : 'context_vdisk', {
157
+ vdiskId: data.StringifiedId || noData,
158
+ nodeId: data.NodeId ?? noData,
159
+ });
160
+ if (!isNoData) {
161
+ return diskName;
162
+ }
163
+
164
+ const hasVDiskWhiteboardData = data.HasWhiteboardData ?? Boolean(data.VDiskId);
165
+ return i18n(
166
+ mode === 'driveType' && hasVDiskWhiteboardData
167
+ ? 'context_pdisk-no-whiteboard'
168
+ : 'context_vdisk-no-whiteboard',
169
+ {disk: diskName, noData},
170
+ );
171
+ }
172
+
166
173
  function getAccessibleName(
167
174
  data: PreparedVDisk,
168
175
  {mode, allMode, isNoData, driveType}: VDiskDisplayState,
169
176
  ) {
170
177
  if (!mode) {
171
- return undefined;
178
+ return getAccessibleDiskName(data, {mode, isNoData});
172
179
  }
173
180
  if (mode === 'all') {
174
181
  return getAllModeAccessibleName(data, allMode?.hasIssues);
175
182
  }
176
183
 
177
184
  const noData = i18n('context_no-data');
178
- let diskName = i18n(data.DonorMode ? 'context_donor-vdisk' : 'context_vdisk', {
179
- vdiskId: data.StringifiedId || noData,
180
- nodeId: data.NodeId ?? noData,
181
- });
182
- if (isNoData) {
183
- const hasVDiskWhiteboardData = data.HasWhiteboardData ?? Boolean(data.VDiskId);
184
- diskName = i18n(
185
- mode === 'driveType' && hasVDiskWhiteboardData
186
- ? 'context_pdisk-no-whiteboard'
187
- : 'context_vdisk-no-whiteboard',
188
- {disk: diskName, noData},
189
- );
190
- }
191
-
185
+ const diskName = getAccessibleDiskName(data, {mode, isNoData});
192
186
  const {CapacityAlert, FrontQueues, SatisfactionRank, Replicated} = isNoData ? {} : data;
193
187
  const {FreshRank, LevelRank} = SatisfactionRank ?? {};
194
188
 
@@ -212,13 +206,13 @@ function getAccessibleName(
212
206
  case 'frontQueues':
213
207
  return i18n('context_front-queues-accessible-name', {
214
208
  disk: diskName,
215
- frontQueues: getFlagAccessibleName(FrontQueues),
209
+ frontQueues: getFlagStatusText(FrontQueues),
216
210
  });
217
211
  case 'compaction':
218
212
  return i18n('context_compaction-accessible-name', {
219
213
  disk: diskName,
220
- freshCompaction: getFlagAccessibleName(FreshRank?.Flag),
221
- levelCompaction: getFlagAccessibleName(LevelRank?.Flag),
214
+ freshCompaction: getFlagStatusText(FreshRank?.Flag),
215
+ levelCompaction: getFlagStatusText(LevelRank?.Flag),
222
216
  });
223
217
  default:
224
218
  return undefined;
@@ -233,6 +227,7 @@ export interface VDiskProps {
233
227
  showPopup?: boolean;
234
228
  onShowPopup?: VoidFunction;
235
229
  onHidePopup?: VoidFunction;
230
+ onClosePopup?: VoidFunction;
236
231
  progressBarClassName?: string;
237
232
  delayOpen?: number;
238
233
  delayClose?: number;
@@ -256,6 +251,7 @@ export const VDisk = ({
256
251
  showPopup,
257
252
  onShowPopup,
258
253
  onHidePopup,
254
+ onClosePopup,
259
255
  progressBarClassName,
260
256
  delayClose,
261
257
  delayOpen,
@@ -337,10 +333,12 @@ export const VDisk = ({
337
333
  showPopup={showPopup}
338
334
  onShowPopup={onShowPopup}
339
335
  onHidePopup={onHidePopup}
340
- renderPopupContent={({onClose}) => (
336
+ onClosePopup={onClosePopup}
337
+ renderPopupContent={({onClose, holdOpen}) => (
341
338
  <VDiskPopup
342
339
  data={hidePDiskInPopup ? {...data, PDisk: undefined} : data}
343
340
  onClose={onClose}
341
+ onDialogOpen={holdOpen}
344
342
  />
345
343
  )}
346
344
  offset={popupOffset}
@@ -37,6 +37,7 @@ export function VDiskWithDonorsStack({
37
37
  showPopup: _showPopup,
38
38
  onShowPopup: _onShowPopup,
39
39
  onHidePopup: _onHidePopup,
40
+ onClosePopup,
40
41
  highlighted: _highlighted,
41
42
  renderContent = true,
42
43
  placeholderProps,
@@ -90,6 +91,7 @@ export function VDiskWithDonorsStack({
90
91
  highlighted: isHighlighted,
91
92
  onShowPopup,
92
93
  onHidePopup,
94
+ onClosePopup,
93
95
  };
94
96
 
95
97
  // Donor VDisks intentionally avoid using and changing highlightedVDiskState.
@@ -0,0 +1,19 @@
1
+ import {EFlag} from '../../types/api/enums';
2
+
3
+ import {i18n} from './i18n';
4
+
5
+ export function getFlagStatusText(flag: EFlag | undefined) {
6
+ switch (flag) {
7
+ case EFlag.Green:
8
+ case EFlag.Blue:
9
+ return i18n('value_ok');
10
+ case EFlag.Yellow:
11
+ return i18n('value_notice');
12
+ case EFlag.Orange:
13
+ return i18n('value_warning');
14
+ case EFlag.Red:
15
+ return i18n('value_impaired');
16
+ default:
17
+ return i18n('context_no-data');
18
+ }
19
+ }
@@ -8,7 +8,7 @@
8
8
  "context_space-accessible-name": "{{disk}}. Capacity alert: {{capacityAlert}}.",
9
9
  "context_front-queues-accessible-name": "{{disk}}. Front queues: {{frontQueues}}.",
10
10
  "context_compaction-accessible-name": "{{disk}}. Fresh compaction: {{freshCompaction}}. Level compaction: {{levelCompaction}}.",
11
- "value_ok": "OK",
11
+ "value_ok": "Ok",
12
12
  "value_notice": "Notice",
13
13
  "value_warning": "Warning",
14
14
  "value_impaired": "Impaired",
@@ -1,7 +1,23 @@
1
1
  .ydb-vdisk-info {
2
- &__info {
3
- flex: unset;
2
+ --g-definition-list-item-gap: var(--g-spacing-3);
4
3
 
5
- width: 500px;
4
+ &__metrics {
5
+ width: 100%;
6
+ }
7
+
8
+ &__column {
9
+ flex: 1 1 400px;
10
+
11
+ min-width: 0;
12
+ max-width: 500px;
13
+ }
14
+
15
+ &__identity {
16
+ width: 100%;
17
+ max-width: 500px;
18
+ }
19
+
20
+ &__disk {
21
+ width: 55px;
6
22
  }
7
23
  }