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,129 +1,60 @@
1
1
  .ydb-vdisk-storage-details {
2
- &__title {
3
- margin-bottom: var(--g-spacing-4);
4
- }
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ gap: var(--g-spacing-1);
5
5
 
6
- &__cards {
6
+ &__card {
7
7
  display: flex;
8
8
  flex-wrap: wrap;
9
- align-items: flex-start;
10
- gap: var(--g-spacing-1);
11
-
12
- width: fit-content;
13
- max-width: 100%;
14
- }
9
+ align-items: center;
10
+ gap: var(--g-spacing-5);
15
11
 
16
- &__card {
17
12
  min-width: 0;
18
- padding: var(--g-spacing-4) var(--g-spacing-5);
13
+ padding: var(--g-spacing-3) var(--g-spacing-5);
19
14
 
20
15
  border-radius: var(--g-border-radius-m) var(--g-border-radius-xs) var(--g-border-radius-xs)
21
16
  var(--g-border-radius-m);
22
17
  background-color: var(--g-color-base-generic);
23
18
 
24
- &_metrics {
25
- display: flex;
26
- flex: 0 0 auto;
27
- align-items: stretch;
28
- gap: var(--g-spacing-5);
29
-
30
- width: max-content;
31
- max-width: 100%;
32
- min-height: 74px;
33
- }
34
-
35
- &_details {
36
- display: flex;
37
- flex: 0 1 auto;
38
- flex-wrap: wrap;
39
- justify-content: flex-start;
40
- align-items: center;
41
- gap: var(--g-spacing-4);
42
-
43
- width: fit-content;
44
- max-width: 100%;
45
- min-height: 74px;
46
-
19
+ &_ids {
47
20
  border-radius: var(--g-border-radius-xs) var(--g-border-radius-m)
48
21
  var(--g-border-radius-m) var(--g-border-radius-xs);
49
22
  }
50
23
  }
51
24
 
52
- &__details {
53
- display: flex;
54
- flex: 0 1 auto;
55
- flex-wrap: wrap;
56
- align-items: stretch;
57
- gap: var(--g-spacing-4);
58
-
59
- min-width: 0;
60
- max-width: 100%;
61
- }
62
-
63
- &__metric,
64
25
  &__detail {
65
26
  display: flex;
66
27
  flex-direction: column;
67
- justify-content: center;
68
- align-items: flex-start;
69
- gap: var(--g-spacing-1);
28
+ gap: var(--g-spacing-half);
70
29
 
71
30
  min-width: 0;
72
- padding-right: var(--g-spacing-4);
73
- }
31
+ max-width: 250px;
74
32
 
75
- &__detail {
76
- flex: 0 1 auto;
77
-
78
- min-width: 100px;
79
- max-width: 200px;
80
- }
81
-
82
- &__value,
83
- &__label {
84
- display: block;
85
-
86
- white-space: nowrap;
87
- }
88
-
89
- &__value-row &__value {
90
- overflow: hidden;
91
-
92
- text-overflow: ellipsis;
93
- }
94
-
95
- &__value-row {
96
- flex-wrap: nowrap;
97
-
98
- width: 100%;
99
- min-width: 0;
100
- height: 20px;
101
-
102
- &_copyable {
103
- width: auto;
104
- max-width: 100%;
33
+ &_location {
34
+ min-width: 100px;
35
+ max-width: 200px;
105
36
  }
106
37
  }
107
38
 
108
39
  &__value-popover {
109
- flex: 1 1 auto;
40
+ flex: 0 1 auto;
110
41
 
111
42
  min-width: 0;
112
-
113
- &_copyable {
114
- flex: 0 1 auto;
115
-
116
- max-width: 100%;
117
- }
43
+ max-width: 100%;
118
44
  }
119
45
 
120
46
  &__value-popover-content {
121
- width: 100%;
47
+ width: auto;
122
48
  min-width: 0;
49
+ max-width: 100%;
50
+
51
+ &_with-left-trim {
52
+ text-align: end;
53
+ direction: rtl;
123
54
 
124
- &_copyable {
125
- width: auto;
126
- max-width: 100%;
55
+ > span {
56
+ unicode-bidi: plaintext;
57
+ }
127
58
  }
128
59
  }
129
60
  }
@@ -1,195 +1,87 @@
1
- import {Button, Divider, Flex, Text} from '@gravity-ui/uikit';
1
+ import {Text} from '@gravity-ui/uikit';
2
+ import {isNil} from 'lodash';
2
3
 
3
4
  import {CellWithPopover} from '../../components/CellWithPopover/CellWithPopover';
4
- import {ClipboardButton} from '../../components/ClipboardButton/ClipboardButton';
5
+ import {CopyableValue} from '../../components/CopyableValue/CopyableValue';
6
+ import {InternalLinkButton} from '../../components/InternalLinkButton';
7
+ import {getVDiskLocationItems} from '../../components/VDiskInfo/getVDiskDetails';
5
8
  import {getPDiskPagePath} from '../../routes';
9
+ import {useNewStorageViewEnabled} from '../../store/reducers/capabilities/hooks';
6
10
  import type {VDiskData} from '../../store/reducers/vdisk/types';
7
11
  import {cn} from '../../utils/cn';
8
- import {BRAND_BUTTON_CLASS, EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
12
+ import type {DiskDetailItem} from '../../utils/disks/diskInfo/getDiskLocationItems';
9
13
  import {useIsViewerUser} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
10
- import {
11
- formatMetricBytes,
12
- formatMetricPercent,
13
- getMetricBytesCommonSize,
14
- } from '../../utils/storageMetrics';
15
14
 
16
15
  import {vDiskPageKeyset} from './i18n';
17
16
 
18
17
  import './VDiskStorageDetails.scss';
19
18
 
20
19
  const b = cn('ydb-vdisk-storage-details');
20
+ const LOCATION_IDS = ['datacenter', 'rack', 'fqdn', 'pdisk-path'];
21
21
 
22
22
  interface VDiskStorageDetailsProps {
23
23
  className?: string;
24
24
  data?: VDiskData;
25
25
  }
26
26
 
27
- interface MetricItemProps {
28
- title: string;
29
- value: string;
30
- }
31
-
32
- interface CopyableDetailItemProps {
33
- title: string;
34
- value?: string | number;
35
- }
36
-
37
- interface DetailItemProps {
38
- title: string;
39
- value?: string | number;
40
- }
41
-
42
- interface TruncatedDetailValueProps {
43
- value?: string | number;
44
- }
45
-
46
- function MetricItem({title, value}: MetricItemProps) {
47
- return (
48
- <div className={b('metric')}>
49
- <Text variant="subheader-2" className={b('value')}>
50
- {value}
51
- </Text>
52
- <Text color="secondary" className={b('label')}>
53
- {title}
54
- </Text>
55
- </div>
56
- );
57
- }
58
-
59
- function DetailItem({title, value}: DetailItemProps) {
60
- return (
61
- <div className={b('detail')}>
62
- <TruncatedDetailValue value={value} />
63
- <Text color="secondary" className={b('label')}>
64
- {title}
65
- </Text>
66
- </div>
67
- );
68
- }
69
-
70
- function TruncatedDetailValue({value}: TruncatedDetailValueProps) {
71
- const normalizedValue =
72
- value === undefined || value === null || value === '' ? undefined : String(value);
73
- const displayValue = normalizedValue ?? EMPTY_DATA_PLACEHOLDER;
74
-
27
+ function DetailItem({item}: {item: DiskDetailItem}) {
28
+ const copyText = item.copyText === undefined ? undefined : String(item.copyText);
75
29
  return (
76
- <CellWithPopover
77
- content={normalizedValue}
78
- disabled={!normalizedValue}
79
- placement={['top', 'bottom']}
80
- fullWidth
81
- wrapperClassName={b('value-popover')}
82
- className={b('value-popover-content')}
30
+ <div
31
+ className={b('detail', {location: LOCATION_IDS.includes(item.id)})}
32
+ data-qa={`vdisk-location-${item.id}`}
83
33
  >
84
- <Text variant="subheader-2" className={b('value')}>
85
- {displayValue}
86
- </Text>
87
- </CellWithPopover>
88
- );
89
- }
90
-
91
- function CopyableDetailItem({title, value}: CopyableDetailItemProps) {
92
- const normalizedValue =
93
- value === undefined || value === null || value === '' ? undefined : String(value);
94
- const displayValue = normalizedValue ?? EMPTY_DATA_PLACEHOLDER;
95
-
96
- return (
97
- <div className={b('detail')}>
98
- <Flex alignItems="center" gap="1" className={b('value-row', {copyable: true})}>
34
+ <Text color="secondary">{item.name}</Text>
35
+ <CopyableValue copyText={copyText} fieldName={item.name}>
99
36
  <CellWithPopover
100
- content={normalizedValue}
101
- disabled={!normalizedValue}
37
+ content={copyText}
38
+ disabled={!copyText}
102
39
  placement={['top', 'bottom']}
103
40
  fullWidth
104
- wrapperClassName={b('value-popover', {copyable: true})}
105
- className={b('value-popover-content', {copyable: true})}
41
+ wrapperClassName={b('value-popover')}
42
+ className={b('value-popover-content', {
43
+ 'with-left-trim': item.id === 'pdisk-path',
44
+ })}
106
45
  >
107
- <Text variant="subheader-2" className={b('value')}>
108
- {displayValue}
109
- </Text>
46
+ <span tabIndex={copyText ? 0 : undefined}>{item.content}</span>
110
47
  </CellWithPopover>
111
- <ClipboardButton
112
- copyText={normalizedValue}
113
- withLabel={false}
114
- view="flat-secondary"
115
- size="s"
116
- />
117
- </Flex>
118
- <Text color="secondary" className={b('label')}>
119
- {title}
120
- </Text>
48
+ </CopyableValue>
121
49
  </div>
122
50
  );
123
51
  }
124
52
 
125
- export function VDiskStorageDetails({className, data}: VDiskStorageDetailsProps) {
53
+ export function VDiskStorageDetails({className, data = {}}: VDiskStorageDetailsProps) {
126
54
  const isViewerUser = useIsViewerUser();
127
-
128
- const used = Number(data?.AllocatedSize);
129
- const total = Number(data?.SizeLimit);
130
- const usage = Number(data?.AllocatedPercent);
131
- const free = Number(data?.FreeSize);
132
- const metricsSize = getMetricBytesCommonSize([used, total, free]);
133
-
134
- const {NodeDC, NodeRack, NodeHost, NodeId, PDiskId} = data || {};
135
-
55
+ const newStorageViewEnabled = useNewStorageViewEnabled();
136
56
  const pDiskPath =
137
- isViewerUser && NodeId !== undefined && PDiskId !== undefined
138
- ? getPDiskPagePath(PDiskId, NodeId, undefined, {withBasename: true})
57
+ isViewerUser && !isNil(data.NodeId) && !isNil(data.PDiskId)
58
+ ? getPDiskPagePath(data.PDiskId, data.NodeId)
139
59
  : undefined;
60
+ const items = getVDiskLocationItems(data, {
61
+ Host: data.NodeHost,
62
+ Rack: data.NodeRack,
63
+ DC: data.NodeDC,
64
+ }).filter(({id}) => newStorageViewEnabled || (id !== 'rack' && id !== 'pdisk-path'));
140
65
 
141
66
  return (
142
- <div className={b(null, className)}>
143
- <Flex alignItems="center" gap="1" className={b('title')}>
144
- <Text variant="subheader-2">{vDiskPageKeyset('title_storage-details')}</Text>
145
- </Flex>
146
- <div className={b('cards')}>
147
- <div className={b('card', {metrics: true})}>
148
- <MetricItem
149
- title={vDiskPageKeyset('field_storage-details-used')}
150
- value={formatMetricBytes(used, metricsSize)}
151
- />
152
- <MetricItem
153
- title={vDiskPageKeyset('field_storage-details-total')}
154
- value={formatMetricBytes(total, metricsSize)}
155
- />
156
- <MetricItem
157
- title={vDiskPageKeyset('field_storage-details-free')}
158
- value={formatMetricBytes(free, metricsSize)}
159
- />
160
- <Divider orientation="vertical" />
161
- <MetricItem
162
- title={vDiskPageKeyset('field_storage-details-usage')}
163
- value={formatMetricPercent(usage)}
164
- />
165
- </div>
166
- <div className={b('card', {details: true})}>
167
- <div className={b('details')}>
168
- <DetailItem title={vDiskPageKeyset('field_datacenter')} value={NodeDC} />
169
- <CopyableDetailItem
170
- title={vDiskPageKeyset('field_rack')}
171
- value={NodeRack}
172
- />
173
- <CopyableDetailItem
174
- title={vDiskPageKeyset('field_node')}
175
- value={NodeHost}
176
- />
177
- <CopyableDetailItem
178
- title={vDiskPageKeyset('field_pdisk-id')}
179
- value={PDiskId}
180
- />
181
- </div>
182
- {pDiskPath ? (
183
- <Button
184
- href={pDiskPath}
185
- view="action"
186
- size="m"
187
- className={BRAND_BUTTON_CLASS}
188
- >
189
- {vDiskPageKeyset('action_go-to-pdisk')}
190
- </Button>
191
- ) : null}
192
- </div>
67
+ <div className={b(null, className)} data-qa="vdisk-location">
68
+ <div className={b('card')}>
69
+ {LOCATION_IDS.map((id) => {
70
+ const item = items.find((entry) => entry.id === id);
71
+ return item ? <DetailItem key={id} item={item} /> : null;
72
+ })}
73
+ </div>
74
+ <div className={b('card', {ids: true})}>
75
+ {items
76
+ .filter(({id}) => !LOCATION_IDS.includes(id))
77
+ .map((item) => (
78
+ <DetailItem key={item.id} item={item} />
79
+ ))}
80
+ {pDiskPath && (
81
+ <InternalLinkButton href={pDiskPath} size="s" view="normal">
82
+ {vDiskPageKeyset('action_go-to-pdisk')}
83
+ </InternalLinkButton>
84
+ )}
193
85
  </div>
194
86
  </div>
195
87
  );
@@ -1,25 +1,14 @@
1
1
  {
2
- "fqdn": "FQDN",
3
2
  "node": "Node",
4
3
  "pdisk": "PDisk",
5
4
  "vdisk": "VDisk",
6
5
  "storage": "Storage",
7
6
  "tablets": "Tablets",
8
- "title_storage-details": "Storage details",
9
- "field_storage-details-used": "Used",
10
- "field_storage-details-total": "Total",
11
- "field_storage-details-free": "Free",
12
- "field_storage-details-usage": "Usage",
13
- "field_datacenter": "Datacenter",
14
- "field_rack": "Rack",
15
- "field_node": "Node",
16
- "field_pdisk-id": "PDisk ID",
7
+ "action_back": "Back",
17
8
  "action_go-to-pdisk": "Go to PDisk",
18
-
9
+ "action_open-in-developer-ui": "Open in Developer UI",
19
10
  "tablet-id": "Tablet ID",
20
11
  "channel-id": "Channel ID",
21
12
  "count": "Count",
22
- "size": "Size",
23
-
24
- "label_donor": "Donor"
13
+ "size": "Size"
25
14
  }
package/src/lib.ts CHANGED
@@ -46,6 +46,7 @@ export type {
46
46
  IllustrationComponent,
47
47
  IllustrationName,
48
48
  RenderHealthcheckAssistantAction,
49
+ HealthcheckDrawerExtensionProps,
49
50
  } from './uiFactory/types';
50
51
  export type {
51
52
  HealthcheckAssistantActionProps,
@@ -118,6 +118,7 @@ export function parseLoggingUrls(
118
118
  }
119
119
 
120
120
  const settingsSchema = z.object({
121
+ unavailable: z.boolean().optional().catch(undefined),
121
122
  use_meta_proxy: z.boolean().optional(),
122
123
  cluster_domain: z.string().optional(),
123
124
  cluster_external_name: z.string().optional(),
@@ -8,6 +8,7 @@ import type {ClustersFilters} from './types';
8
8
  import {prepareClustersData} from './utils';
9
9
 
10
10
  const initialState: ClustersFilters = {
11
+ availability: ['available'],
11
12
  clusterName: '',
12
13
  status: [],
13
14
  service: [],
@@ -9,6 +9,7 @@ export const selectStatusFilter = (state: ClustersStateSlice) => state.clusters.
9
9
  export const selectServiceFilter = (state: ClustersStateSlice) => state.clusters.service;
10
10
  export const selectVersionFilter = (state: ClustersStateSlice) => state.clusters.version;
11
11
  export const selectGalaxyFilter = (state: ClustersStateSlice) => state.clusters.galaxy;
12
+ export const selectAvailabilityFilter = (state: ClustersStateSlice) => state.clusters.availability;
12
13
 
13
14
  // ==== Filters ====
14
15
 
@@ -85,6 +86,9 @@ const isMatchesByTextQuery = (clusterData: PreparedCluster, searchQuery = '') =>
85
86
  export function filterClusters(clusters: PreparedCluster[], filters: ClustersFilters) {
86
87
  return clusters.filter((cluster) => {
87
88
  return (
89
+ filters.availability.includes(
90
+ cluster.settings?.unavailable === true ? 'unavailable' : 'available',
91
+ ) &&
88
92
  isMatchesByGalaxy(cluster, filters.galaxy) &&
89
93
  isMatchesByStatus(cluster, filters.status) &&
90
94
  isMatchesByService(cluster, filters.service) &&
@@ -26,7 +26,10 @@ export interface PreparedCluster extends Omit<MetaExtendedClusterInfo, 'name' |
26
26
  clusterExternalName?: string;
27
27
  }
28
28
 
29
+ export type ClusterAvailability = 'available' | 'unavailable';
30
+
29
31
  export interface ClustersFilters {
32
+ availability: ClusterAvailability[];
30
33
  status: string[];
31
34
  service: string[];
32
35
  version: string[];
@@ -76,7 +76,9 @@ export type PageBreadcrumbsOptions<T extends Page = undefined> = T extends 'home
76
76
  ? NodeBreadcrumbsOptions
77
77
  : T extends 'tablet'
78
78
  ? TabletBreadcrumbsOptions
79
- : {};
79
+ : T extends 'storageGroup'
80
+ ? StorageGroupBreadcrumbsOptions
81
+ : {};
80
82
 
81
83
  export interface HeaderState {
82
84
  page?: Page;
@@ -5,6 +5,7 @@ export interface PDiskData extends PreparedPDisk {
5
5
  NodeHost?: string;
6
6
  NodeType?: string;
7
7
  NodeDC?: string;
8
+ NodeRack?: string;
8
9
  SlotItems?: (SlotItem<'vDisk'> | SlotItem<'log'> | SlotItem<'empty'>)[];
9
10
  }
10
11
 
@@ -62,9 +62,11 @@ export function preparePDiskDataResponse([pdiskResponse = {}, nodeResponse]: [
62
62
  };
63
63
  }
64
64
 
65
- const preparedVDisks = WhiteboardVDisksData.map((disk) =>
66
- prepareWhiteboardVDiskData({...disk, NodeId}),
67
- );
65
+ const preparedVDisks = WhiteboardVDisksData.map((disk) => ({
66
+ ...prepareWhiteboardVDiskData({...disk, NodeId}),
67
+ PDiskType: preparedPDisk.Type,
68
+ PDiskPath: preparedPDisk.Path,
69
+ }));
68
70
 
69
71
  setDonorRecipientReferences((cb) => {
70
72
  for (const vDisk of preparedVDisks) {
@@ -145,6 +147,7 @@ export function preparePDiskDataResponse([pdiskResponse = {}, nodeResponse]: [
145
147
  NodeHost: preparedNode.Host,
146
148
  NodeType: preparedNode.Roles?.[0],
147
149
  NodeDC: preparedNode.DC,
150
+ NodeRack: preparedNode.Rack,
148
151
  SlotItems: diskSlots,
149
152
  };
150
153
  }
@@ -32,31 +32,14 @@ export function prepareGroupsVDisk(data: TStorageVDisk = {}): PreparedVDisk {
32
32
  SlotSize: PDisk?.SlotSize,
33
33
  });
34
34
 
35
- const whiteboardAllocatedSize = parseOptionalNonNegativeNumber(whiteboardVDisk.AllocatedSize);
36
- const whiteboardAvailableSize = parseOptionalNonNegativeNumber(whiteboardVDisk.AvailableSize);
37
- const whiteboardSlotSize = parseOptionalNonNegativeNumber(
38
- PDisk?.Whiteboard?.EnforcedDynamicSlotSize,
39
- );
40
- const whiteboardSizeFields =
35
+ const WhiteboardSize =
41
36
  hasWhiteboardData && data.Whiteboard
42
37
  ? prepareVDiskSizeFields({
43
- AvailableSize: whiteboardAvailableSize,
44
- AllocatedSize: whiteboardAllocatedSize,
45
- SlotSize: whiteboardSlotSize,
46
- })
38
+ AvailableSize: whiteboardVDisk.AvailableSize,
39
+ AllocatedSize: whiteboardVDisk.AllocatedSize,
40
+ SlotSize: PDisk?.Whiteboard?.EnforcedDynamicSlotSize,
41
+ }).DisplaySize
47
42
  : undefined;
48
- const WhiteboardSize = whiteboardSizeFields
49
- ? {
50
- AllocatedSize:
51
- whiteboardAllocatedSize === undefined
52
- ? undefined
53
- : whiteboardSizeFields.AllocatedSize,
54
- SizeLimit:
55
- whiteboardAvailableSize === undefined && whiteboardSlotSize === undefined
56
- ? undefined
57
- : whiteboardSizeFields.SizeLimit,
58
- }
59
- : undefined;
60
43
 
61
44
  const preparedDonors = bscVDisk.Donors?.map((donor) => {
62
45
  const preparedDonor = prepareGroupsVDisk(donor);
@@ -77,6 +60,8 @@ export function prepareGroupsVDisk(data: TStorageVDisk = {}): PreparedVDisk {
77
60
  HasWhiteboardData: hasWhiteboardData,
78
61
  ...(WhiteboardSize ? {WhiteboardSize} : {}),
79
62
  PDisk: preparedPDisk,
63
+ PDiskType: preparedPDisk.Type,
64
+ PDiskPath: preparedPDisk.Path,
80
65
  Donors: preparedDonors,
81
66
  PDiskId,
82
67
  StringifiedId,
@@ -152,6 +137,8 @@ export function prepareGroupsPDisk(data: TStoragePDisk & {NodeId?: number} = {})
152
137
  Type,
153
138
  Severity,
154
139
  SlotSize,
140
+ ExpectedSlotCount:
141
+ mergedPDiskData.ExpectedSlotCount ?? parseOptionalNonNegativeNumber(bscPDisk.SlotCount),
155
142
  DriveStatus,
156
143
  };
157
144
  }
@@ -37,6 +37,16 @@ const normalizeMaxPercent = (value: number | string | null | undefined): number
37
37
 
38
38
  // ==== Prepare groups ====
39
39
 
40
+ function parseLatencyUsToMs(value: unknown): number | undefined {
41
+ if (typeof value !== 'string' && typeof value !== 'number') {
42
+ return undefined;
43
+ }
44
+
45
+ const latency = parseOptionalNonNegativeNumber(value);
46
+
47
+ return latency === undefined ? undefined : parseUsToMs(latency);
48
+ }
49
+
40
50
  function getGroupDiskSpaceStatus(group: TGroupsStorageGroupInfo): EFlag {
41
51
  const {DiskSpace, VDisks = []} = group;
42
52
 
@@ -88,10 +98,14 @@ const prepareStorageNodeData = (
88
98
  pDisk.Realtime !== undefined);
89
99
  return prepareWhiteboardPDiskData({...pDisk, NodeId}, hasWhiteboardData ? pDisk : null);
90
100
  });
101
+ const pDisksById = new Map(pDisks?.map((pDisk) => [pDisk.PDiskId, pDisk]));
91
102
  const vDisks = VDisks?.map((vDisk) => {
103
+ const pDisk = vDisk.PDiskId === undefined ? undefined : pDisksById.get(vDisk.PDiskId);
92
104
  return {
93
105
  ...prepareWhiteboardVDiskData({...vDisk, VDiskId: vDisk.VDiskId}),
94
106
  NodeId,
107
+ PDiskType: pDisk?.Type,
108
+ PDiskPath: pDisk?.Path,
95
109
  };
96
110
  });
97
111
 
@@ -243,9 +257,9 @@ export function prepareGroupsResponse(data: StorageGroupsResponse): PreparedStor
243
257
  Used: Number(Used),
244
258
  Limit: Number(Limit),
245
259
 
246
- LatencyPutTabletLogMs: parseUsToMs(LatencyPutTabletLog),
247
- LatencyPutUserDataMs: parseUsToMs(LatencyPutUserData),
248
- LatencyGetFastMs: parseUsToMs(LatencyGetFast),
260
+ LatencyPutTabletLogMs: parseLatencyUsToMs(LatencyPutTabletLog),
261
+ LatencyPutUserDataMs: parseLatencyUsToMs(LatencyPutUserData),
262
+ LatencyGetFastMs: parseLatencyUsToMs(LatencyGetFast),
249
263
 
250
264
  Degraded: Number(MissingDisks),
251
265
  Overall,
@@ -3,12 +3,10 @@ import {isQueryErrorResponse, parseQueryAPIResponse} from '../../../utils/query'
3
3
  import {api} from '../api';
4
4
 
5
5
  function getStreamingQueryInfoSQL(path: string) {
6
+ // Select available columns so older backends without lifecycle fields remain supported.
6
7
  const safePath = path.replace(/'/g, "''");
7
8
  return `${QUERY_TECHNICAL_MARK}
8
- SELECT
9
- Status AS State,
10
- Issues AS Error,
11
- Text
9
+ SELECT * WITHOUT Plan, Ast
12
10
  FROM \`.sys/streaming_queries\`
13
11
  WHERE Path = '${safePath}'
14
12
  LIMIT 1`;
@@ -1,9 +1,10 @@
1
1
  import type {PreparedVDisk} from '../../../utils/disks/types';
2
2
 
3
3
  export interface VDiskData extends PreparedVDisk {
4
+ Recipient?: PreparedVDisk;
5
+
4
6
  NodeId?: number;
5
7
  NodeHost?: string;
6
- NodeType?: string;
7
8
  NodeDC?: string;
8
9
  NodeRack?: string;
9
10