@ytsaurus/ui 1.71.1 → 1.72.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 (84) hide show
  1. package/dist/public/build/assets-manifest.json +55 -55
  2. package/dist/public/build/js/1260.534f3f75.chunk.js +2 -0
  3. package/dist/public/build/js/{1260.e955a5ff.chunk.js.map → 1260.534f3f75.chunk.js.map} +1 -1
  4. package/dist/public/build/js/{1983.3d8315a1.chunk.js → 1983.666923be.chunk.js} +2 -2
  5. package/dist/public/build/js/{1983.3d8315a1.chunk.js.map → 1983.666923be.chunk.js.map} +1 -1
  6. package/dist/public/build/js/3337.31ee332d.chunk.js +3 -0
  7. package/dist/public/build/js/3337.31ee332d.chunk.js.map +1 -0
  8. package/dist/public/build/js/3724.425d01ec.chunk.js +2 -0
  9. package/dist/public/build/js/{3724.49a6f456.chunk.js.map → 3724.425d01ec.chunk.js.map} +1 -1
  10. package/dist/public/build/js/5088.64e090aa.chunk.js +2 -0
  11. package/dist/public/build/js/{5088.f0feaa1e.chunk.js.map → 5088.64e090aa.chunk.js.map} +1 -1
  12. package/dist/public/build/js/{5177.3e2a0ddb.chunk.js → 5177.8978a5b3.chunk.js} +2 -2
  13. package/dist/public/build/js/{5177.3e2a0ddb.chunk.js.map → 5177.8978a5b3.chunk.js.map} +1 -1
  14. package/dist/public/build/js/6729.c07b8f4c.chunk.js +2 -0
  15. package/dist/public/build/js/6729.c07b8f4c.chunk.js.map +1 -0
  16. package/dist/public/build/js/{7263.860d7c88.chunk.js → 7263.210dadfd.chunk.js} +3 -3
  17. package/dist/public/build/js/{7263.860d7c88.chunk.js.map → 7263.210dadfd.chunk.js.map} +1 -1
  18. package/dist/public/build/js/{7959.ab3789db.chunk.js → 7959.fedd6b2e.chunk.js} +2 -2
  19. package/dist/public/build/js/{7959.ab3789db.chunk.js.map → 7959.fedd6b2e.chunk.js.map} +1 -1
  20. package/dist/public/build/js/9558.a6ea64c9.chunk.js +2 -0
  21. package/dist/public/build/js/9558.a6ea64c9.chunk.js.map +1 -0
  22. package/dist/public/build/js/accounts.2ba221c2.chunk.js +2 -0
  23. package/dist/public/build/js/{accounts.69da4208.chunk.js.map → accounts.2ba221c2.chunk.js.map} +1 -1
  24. package/dist/public/build/js/acl.5e54e4b4.chunk.js +2 -0
  25. package/dist/public/build/js/acl.5e54e4b4.chunk.js.map +1 -0
  26. package/dist/public/build/js/bundles.7fc5e9e7.chunk.js +2 -0
  27. package/dist/public/build/js/{bundles.86be96f0.chunk.js.map → bundles.7fc5e9e7.chunk.js.map} +1 -1
  28. package/dist/public/build/js/{chyt.6901fd41.chunk.js → chyt.eff6e270.chunk.js} +2 -2
  29. package/dist/public/build/js/{chyt.6901fd41.chunk.js.map → chyt.eff6e270.chunk.js.map} +1 -1
  30. package/dist/public/build/js/{cluster-page-wrapper.af414db5.chunk.js → cluster-page-wrapper.434bb4ef.chunk.js} +2 -2
  31. package/dist/public/build/js/{cluster-page-wrapper.af414db5.chunk.js.map → cluster-page-wrapper.434bb4ef.chunk.js.map} +1 -1
  32. package/dist/public/build/js/groups.923ba865.chunk.js +2 -0
  33. package/dist/public/build/js/groups.923ba865.chunk.js.map +1 -0
  34. package/dist/public/build/js/job.1bfebd02.chunk.js +2 -0
  35. package/dist/public/build/js/{job.64020b69.chunk.js.map → job.1bfebd02.chunk.js.map} +1 -1
  36. package/dist/public/build/js/main.c46b0cfa.js +3 -0
  37. package/dist/public/build/js/main.c46b0cfa.js.map +1 -0
  38. package/dist/public/build/js/navigation.f5cf971c.chunk.js +2 -0
  39. package/dist/public/build/js/navigation.f5cf971c.chunk.js.map +1 -0
  40. package/dist/public/build/js/query-navigation.76b02345.chunk.js +2 -0
  41. package/dist/public/build/js/{query-navigation.38a9af12.chunk.js.map → query-navigation.76b02345.chunk.js.map} +1 -1
  42. package/dist/public/build/js/{runtime.e38921d0.js → runtime.c88113bf.js} +2 -2
  43. package/dist/public/build/js/{runtime.e38921d0.js.map → runtime.c88113bf.js.map} +1 -1
  44. package/dist/public/build/js/scheduling.428b3b4f.chunk.js +2 -0
  45. package/dist/public/build/js/{scheduling.8bc4b3c7.chunk.js.map → scheduling.428b3b4f.chunk.js.map} +1 -1
  46. package/dist/public/build/js/system.65647634.chunk.js +2 -0
  47. package/dist/public/build/js/{system.eed98c65.chunk.js.map → system.65647634.chunk.js.map} +1 -1
  48. package/dist/public/build/js/{yt-df-dialog.0886347f.chunk.js → yt-df-dialog.636f6f6b.chunk.js} +2 -2
  49. package/dist/public/build/js/{yt-df-dialog.0886347f.chunk.js.map → yt-df-dialog.636f6f6b.chunk.js.map} +1 -1
  50. package/dist/public/build/js/yt-monaco-editor.59382231.chunk.js +2 -0
  51. package/dist/public/build/js/{yt-monaco-editor.61605970.chunk.js.map → yt-monaco-editor.59382231.chunk.js.map} +1 -1
  52. package/dist/public/build/manifest.json +50 -50
  53. package/dist/server/components/oauth.js +3 -0
  54. package/dist/server/utils/index.d.ts +1 -1
  55. package/dist/server/utils/index.js +0 -1
  56. package/dist/shared/constants/settings-types.d.ts +1 -1
  57. package/package.json +2 -2
  58. package/dist/public/build/js/1260.e955a5ff.chunk.js +0 -2
  59. package/dist/public/build/js/3337.b59984e8.chunk.js +0 -3
  60. package/dist/public/build/js/3337.b59984e8.chunk.js.map +0 -1
  61. package/dist/public/build/js/3724.49a6f456.chunk.js +0 -2
  62. package/dist/public/build/js/5088.f0feaa1e.chunk.js +0 -2
  63. package/dist/public/build/js/6729.90d07a56.chunk.js +0 -2
  64. package/dist/public/build/js/6729.90d07a56.chunk.js.map +0 -1
  65. package/dist/public/build/js/9558.65b707cc.chunk.js +0 -2
  66. package/dist/public/build/js/9558.65b707cc.chunk.js.map +0 -1
  67. package/dist/public/build/js/accounts.69da4208.chunk.js +0 -2
  68. package/dist/public/build/js/acl.81abf8c2.chunk.js +0 -2
  69. package/dist/public/build/js/acl.81abf8c2.chunk.js.map +0 -1
  70. package/dist/public/build/js/bundles.86be96f0.chunk.js +0 -2
  71. package/dist/public/build/js/groups.acc74ffc.chunk.js +0 -2
  72. package/dist/public/build/js/groups.acc74ffc.chunk.js.map +0 -1
  73. package/dist/public/build/js/job.64020b69.chunk.js +0 -2
  74. package/dist/public/build/js/main.0840984c.js +0 -3
  75. package/dist/public/build/js/main.0840984c.js.map +0 -1
  76. package/dist/public/build/js/navigation.f21aa950.chunk.js +0 -2
  77. package/dist/public/build/js/navigation.f21aa950.chunk.js.map +0 -1
  78. package/dist/public/build/js/query-navigation.38a9af12.chunk.js +0 -2
  79. package/dist/public/build/js/scheduling.8bc4b3c7.chunk.js +0 -2
  80. package/dist/public/build/js/system.eed98c65.chunk.js +0 -2
  81. package/dist/public/build/js/yt-monaco-editor.61605970.chunk.js +0 -2
  82. /package/dist/public/build/js/{3337.b59984e8.chunk.js.LICENSE.txt → 3337.31ee332d.chunk.js.LICENSE.txt} +0 -0
  83. /package/dist/public/build/js/{7263.860d7c88.chunk.js.LICENSE.txt → 7263.210dadfd.chunk.js.LICENSE.txt} +0 -0
  84. /package/dist/public/build/js/{main.0840984c.js.LICENSE.txt → main.c46b0cfa.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"js/bundles.86be96f0.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/BreadcrumbItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/BreadcrumbsSeparator.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/Breadcrumbs.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useResizeObserver/useResizeObserver.js","webpack://@ytsaurus/ui/./src/ui/components/Breadcrumbs/Breadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/info-icon2.svg","webpack://@ytsaurus/ui/./src/ui/components/Info/Info.tsx","webpack://@ytsaurus/ui/./src/ui/containers/WaitForFont/WaitForFont.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsInstruments.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleGeneralMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/Cells.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleQuestion.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/components/build/esm/components/HelpPopover/HelpPopover.js","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTable.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/tablet_cell_bundles/tablet-cell-bundle-editor.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTableModeRadio.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTableInstruments.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTableInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/Bundles.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleStatisticsTab.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleMonitorTab.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleAclTab.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx","webpack://@ytsaurus/ui/./src/ui/components/BundleMetaResourceProgress/BundleMetaResourceProgress.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleConfigurationMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleMetaTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsBundleController.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleInstancesTab.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleProxiesTab.tsx","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/chaos_cell_bundles/tablet-cell-bundle-editor.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/BundlesTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/BundlesTableInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/Bundles.tsx","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/tablet-cell-bundle-editor.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/cells/CellsInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/cells/CellsTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/cells/Cells.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet-errors-by-bundle/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/TabletCellBundles.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/TabletCellBundlesTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/TabletCellBundlesTopRowContent.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/ChaosCellBundlesTopRowContent.connected.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/global/fonts.ts","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/components/build/esm/components/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressInnerText.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressStackItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressWithStack.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressWithValue.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/Progress.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/types.js","webpack://@ytsaurus/ui/./node_modules/fontfaceobserver/fontfaceobserver.standalone.js"],"sourcesContent":["import { block } from '../../utils/cn';\nexport function shouldClientNavigate(link, modifiers) {\n // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n const target = link.getAttribute('target');\n return (link.href &&\n (!target || target === '_self') &&\n link.origin === location.origin &&\n !link.hasAttribute('download') &&\n !modifiers.metaKey && // open in new tab (mac)\n !modifiers.ctrlKey && // open in new tab (windows)\n !modifiers.altKey && // download\n !modifiers.shiftKey);\n}\nexport const b = block('breadcrumbs2');\n","'use client';\nimport React from 'react';\nimport { filterDOMProps } from '../../utils/filterDOMProps';\nimport { b, shouldClientNavigate } from './utils';\nexport function BreadcrumbItem(props) {\n const Element = props.href ? 'a' : 'span';\n const domProps = filterDOMProps(props, { labelable: true });\n let title = props.title;\n if (!title && typeof props.children === 'string') {\n title = props.children;\n }\n const handleAction = (event) => {\n if (props.disabled || props.current) {\n event.preventDefault();\n return;\n }\n if (typeof props.onAction === 'function') {\n props.onAction();\n }\n const target = event.currentTarget;\n if (typeof props.navigate === 'function' && target instanceof HTMLAnchorElement) {\n if (props.href && !event.isDefaultPrevented() && shouldClientNavigate(target, event)) {\n event.preventDefault();\n props.navigate(props.href, props.routerOptions);\n }\n }\n };\n const isDisabled = props.disabled || props.current;\n let linkProps = {\n title,\n onClick: handleAction,\n 'aria-disabled': isDisabled ? true : undefined,\n };\n if (Element === 'a') {\n linkProps.href = props.href;\n linkProps.hrefLang = props.hrefLang;\n linkProps.target = props.target;\n linkProps.rel = props.target === '_blank' && !props.rel ? 'noopener noreferrer' : props.rel;\n linkProps.download = props.download;\n linkProps.ping = props.ping;\n linkProps.referrerPolicy = props.referrerPolicy;\n }\n else {\n linkProps.role = 'link';\n linkProps.tabIndex = isDisabled ? undefined : 0;\n linkProps.onKeyDown = (event) => {\n if (event.key === 'Enter') {\n handleAction(event);\n }\n };\n }\n if (props.current) {\n linkProps['aria-current'] = 'page';\n }\n if (props.itemType === 'menu') {\n linkProps = {};\n }\n return (React.createElement(Element, Object.assign({}, domProps, linkProps, { className: props.itemType === 'menu'\n ? b('menu')\n : b('link', {\n 'is-current': props.current,\n 'is-disabled': isDisabled && !props.current,\n }) }), props.children));\n}\nBreadcrumbItem.displayName = 'Breadcrumbs.Item';\n","import React from 'react';\nimport { b } from './utils';\nexport function BreadcrumbsSeparator({ separator }) {\n return (React.createElement(\"div\", { \"aria-hidden\": true, className: b('divider') }, separator !== null && separator !== void 0 ? separator : '/'));\n}\nBreadcrumbsSeparator.displayName = 'Breadcrumbs.Separator';\n","import { addComponentKeysets } from '../../../utils/addComponentKeysets';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'lab/Breadcrumbs';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","'use client';\nimport React from 'react';\nimport { useForkRef, useResizeObserver } from '../../../hooks';\nimport { Button } from '../../Button';\nimport { DropdownMenu } from '../../DropdownMenu';\nimport { filterDOMProps } from '../../utils/filterDOMProps';\nimport { BreadcrumbItem } from './BreadcrumbItem';\nimport { BreadcrumbsSeparator } from './BreadcrumbsSeparator';\nimport i18n from './i18n';\nimport { b, shouldClientNavigate } from './utils';\nimport './Breadcrumbs.css';\nfunction Item(_props) {\n return null;\n}\nexport const Breadcrumbs = React.forwardRef(function Breadcrumbs(props, ref) {\n const listRef = React.useRef(null);\n const containerRef = useForkRef(ref, listRef);\n const items = [];\n React.Children.forEach(props.children, (child, index) => {\n if (React.isValidElement(child)) {\n if (child.key === undefined || child.key === null) {\n child = React.cloneElement(child, { key: index });\n }\n items.push(child);\n }\n });\n const [visibleItemsCount, setVisibleItemsCount] = React.useState(items.length);\n const [calculated, setCalculated] = React.useState(false);\n const recalculate = (visibleItems) => {\n const list = listRef.current;\n if (!list) {\n return;\n }\n const listItems = Array.from(list.children);\n if (listItems.length === 0) {\n return;\n }\n const containerWidth = list.offsetWidth;\n let newVisibleItemsCount = 0;\n let calculatedWidth = 0;\n let maxItems = props.maxItems || Infinity;\n let rootWidth = 0;\n if (props.showRoot) {\n const item = listItems.shift();\n if (item) {\n rootWidth = item.scrollWidth;\n calculatedWidth += rootWidth;\n }\n newVisibleItemsCount++;\n }\n const hasMenu = items.length > visibleItems;\n if (hasMenu) {\n const item = listItems.shift();\n if (item) {\n calculatedWidth += item.offsetWidth;\n }\n maxItems--;\n }\n if (props.showRoot && calculatedWidth >= containerWidth) {\n calculatedWidth -= rootWidth;\n newVisibleItemsCount--;\n }\n const lastItem = listItems.pop();\n if (lastItem) {\n calculatedWidth += Math.min(lastItem.offsetWidth, 200);\n if (calculatedWidth < containerWidth) {\n newVisibleItemsCount++;\n }\n }\n for (let i = listItems.length - 1; i >= 0; i--) {\n const item = listItems[i];\n calculatedWidth += item.offsetWidth;\n if (calculatedWidth >= containerWidth) {\n break;\n }\n newVisibleItemsCount++;\n }\n newVisibleItemsCount = Math.max(Math.min(maxItems, newVisibleItemsCount), 1);\n if (newVisibleItemsCount === visibleItemsCount) {\n setCalculated(true);\n }\n else {\n setVisibleItemsCount(newVisibleItemsCount);\n }\n };\n const handleResize = React.useCallback(() => {\n setCalculated(false);\n setVisibleItemsCount(items.length);\n }, [items.length]);\n useResizeObserver({\n ref: listRef,\n onResize: handleResize,\n });\n const lastChildren = React.useRef(null);\n React.useLayoutEffect(() => {\n if (calculated && props.children !== lastChildren.current) {\n lastChildren.current = props.children;\n setCalculated(false);\n setVisibleItemsCount(items.length);\n }\n }, [calculated, items.length, props.children]);\n React.useLayoutEffect(() => {\n if (!calculated) {\n recalculate(visibleItemsCount);\n }\n });\n const { navigate } = props;\n let contents = items;\n if (items.length > visibleItemsCount) {\n contents = [];\n const breadcrumbs = [...items];\n let endItems = visibleItemsCount;\n if (props.showRoot && visibleItemsCount > 1) {\n const rootItem = breadcrumbs.shift();\n if (rootItem) {\n contents.push(rootItem);\n }\n endItems--;\n }\n const hiddenItems = breadcrumbs.slice(0, -endItems);\n const menuItem = (React.createElement(BreadcrumbItem, { itemType: \"menu\" },\n React.createElement(DropdownMenu, { items: hiddenItems.map((el, index) => {\n return Object.assign(Object.assign({}, el.props), { text: el.props.children, disabled: props.disabled, items: [], action: (event) => {\n var _a;\n if (typeof props.onAction === 'function') {\n props.onAction((_a = el.key) !== null && _a !== void 0 ? _a : index);\n }\n // TODO: move this logic to DropdownMenu\n const target = event.currentTarget;\n if (typeof navigate === 'function' &&\n target instanceof HTMLAnchorElement) {\n if (el.props.href && shouldClientNavigate(target, event)) {\n event.preventDefault();\n navigate(el.props.href, el.props.routerOptions);\n }\n }\n } });\n }), popupProps: {\n className: b('popup', {\n staircase: props.popupStyle === 'staircase',\n }),\n placement: props.popupPlacement,\n }, renderSwitcher: ({ onClick }) => (React.createElement(Button, { title: i18n('label_more'), className: b('more-button'), onClick: onClick, size: \"s\", view: \"flat\", disabled: props.disabled },\n React.createElement(Button.Icon, null, \"...\"))) })));\n contents.push(menuItem);\n contents.push(...breadcrumbs.slice(-endItems));\n }\n const lastIndex = contents.length - 1;\n const breadcrumbItems = contents.map((child, index) => {\n var _a;\n const isCurrent = index === lastIndex;\n const key = (_a = child.key) !== null && _a !== void 0 ? _a : index;\n const handleAction = () => {\n if (typeof props.onAction === 'function') {\n props.onAction(key);\n }\n };\n return (React.createElement(\"li\", { key: index, className: b('item', { calculating: !calculated }) },\n React.createElement(BreadcrumbItem, Object.assign({}, child.props, { key: key, current: isCurrent, disabled: props.disabled, onAction: handleAction, navigate: navigate }), child.props.children),\n isCurrent ? null : React.createElement(BreadcrumbsSeparator, { separator: props.separator })));\n });\n return (React.createElement(\"ol\", Object.assign({ ref: containerRef }, filterDOMProps(props, { labelable: true }), { \"data-qa\": props.qa, className: b(null, props.className), style: props.style }), breadcrumbItems));\n});\nBreadcrumbs.Item = Item;\nBreadcrumbs.displayName = 'Breadcrumbs';\nexport { Item as BreadcrumbsItem };\n","import React from 'react';\nexport function useResizeObserver({ ref, onResize }) {\n React.useEffect(() => {\n const element = ref === null || ref === void 0 ? void 0 : ref.current;\n if (!element) {\n return undefined;\n }\n if (typeof window.ResizeObserver === 'undefined') {\n window.addEventListener('resize', onResize, false);\n return () => {\n window.removeEventListener('resize', onResize, false);\n };\n }\n const observer = new ResizeObserver((entries) => {\n if (!entries.length) {\n return;\n }\n onResize();\n });\n observer.observe(element);\n return () => {\n observer.disconnect();\n };\n }, [ref, onResize]);\n}\n","import React, {FC, PropsWithChildren} from 'react';\nimport {\n unstable_BreadcrumbsProps as BreadcrumbsProps,\n unstable_Breadcrumbs as UBreadcrumbs,\n} from '@gravity-ui/uikit/unstable';\nimport './Breadcrumbs.scss';\nimport cn from 'bem-cn-lite';\n\nconst b = cn('yt-u-breadcrumbs');\n\nexport const Breadcrumbs: FC<PropsWithChildren<BreadcrumbsProps>> = ({children, ...props}) => {\n return (\n <UBreadcrumbs {...props} className={b(null, props.className)}>\n {children}\n </UBreadcrumbs>\n );\n};\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","const SvgInfoIcon2 = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\" {...props}><path fill=\"#027BF3\" d=\"M7 .828C3.521.828.703 3.672.703 7.125A6.296 6.296 0 0 0 7 13.422c3.453 0 6.297-2.818 6.297-6.297C13.297 3.672 10.453.828 7 .828m0 11.375a5.06 5.06 0 0 1-5.078-5.078A5.077 5.077 0 0 1 7 2.047c2.793 0 5.078 2.285 5.078 5.078A5.077 5.077 0 0 1 7 12.203m0-8.582c-.61 0-1.066.483-1.066 1.067 0 .609.457 1.066 1.066 1.066.584 0 1.066-.457 1.066-1.066 0-.584-.482-1.067-1.066-1.067m1.422 6.45v-.61a.33.33 0 0 0-.305-.305h-.305V6.617a.33.33 0 0 0-.304-.304H5.883a.31.31 0 0 0-.305.304v.61c0 .177.127.304.305.304h.305v1.625h-.305a.31.31 0 0 0-.305.305v.61c0 .177.127.304.305.304h2.234a.31.31 0 0 0 .305-.305\" /></svg>;\nexport default SvgInfoIcon2;","import React, {ReactNode} from 'react';\nimport block from 'bem-cn-lite';\nimport {Icon} from '@gravity-ui/uikit';\n\nimport infoIcon from '../../assets/img/svg/info-icon2.svg';\n\nimport './Info.scss';\n\nconst b = block('info-block');\n\ninterface InfoProps {\n children: ReactNode;\n className?: string;\n}\nexport function Info({children, className}: InfoProps) {\n return (\n <div className={b(null, className)}>\n <div className={b('icon')}>\n <Icon data={infoIcon} />\n </div>\n <div className={b('body')}>{children}</div>\n </div>\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getFontFamilies} from '../../store/selectors/global/fonts';\nimport {waitForFontFamily} from '../../store/actions/global/fonts';\n\nexport function WaitForFont({children}: {children: React.ReactNode}) {\n const {regular, monospace} = useSelector(getFontFamilies);\n const [ready, setReady] = React.useState(false);\n React.useEffect(() => {\n Promise.all([waitForFontFamily(regular), waitForFontFamily(monospace)]).then(() =>\n setReady(true),\n );\n }, [regular, monospace]);\n\n return ready ? children : null;\n}\n","import React, {FC} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './BundleParamsList.scss';\n\nconst block = cn('bundle-params-list');\n\nexport interface BundleParam {\n title: string;\n value: string | number;\n type?: 'positive' | 'negative';\n postfix?: string;\n}\n\ninterface BundleParamsListProps {\n className?: string;\n params: BundleParam[];\n size?: 's' | 'm';\n}\n\nexport const BundleParamsList: FC<BundleParamsListProps> = ({className, params, size = 's'}) => {\n return (\n <div className={block({size}, className)}>\n {params.map((param) => (\n <span key={param.title}>\n {param.title}{' '}\n <span className={block('value', {type: param.type})}>\n {param.value} {param.postfix}\n </span>\n </span>\n ))}\n </div>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\n\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport Filter from '../../../components/Filter/Filter';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport Suggest from '../../../components/Suggest/Suggest';\nimport type {TabletsPartialAction} from '../../../store/reducers/tablet_cell_bundles';\n\nimport './CellsInstruments.scss';\n\nconst block = cn('cells-table-instruments');\n\nexport interface Props {\n className?: string;\n}\n\nclass CellsTableInstruments extends React.Component<Props & ReduxProps> {\n onIdFilter = (id: string) => {\n this.props.setTabletsPartial({cellsIdFilter: id});\n };\n\n onBundleFilter = (bundle: string) => {\n this.props.setTabletsPartial({cellsBundleFilter: bundle});\n };\n\n onHostFilterChange = (hostFilter: string) => {\n this.onHostSelected(hostFilter);\n };\n\n onHostSelected = (host: string) => {\n this.props.setTabletsPartial({cellsHostFilter: host});\n };\n\n onHostInputBlur = () => {\n this.setState({hostFilter: this.props.hostFilter});\n };\n\n getBundleFilterItems = (text?: string) => {\n const {bundles} = this.props;\n if (!text) {\n return bundles;\n }\n return filter_(bundles, (bundle = '') => bundle.indexOf(text) !== -1);\n };\n\n getHostFilterItems = (text?: string) => {\n const {hosts} = this.props;\n if (!text) {\n return hosts;\n }\n return filter_(hosts, (host = '') => host.indexOf(text) !== -1);\n };\n\n render() {\n const {className, idFilter, bundleFilter, activeBundle, activeBundleHosts} = this.props;\n\n return (\n <Toolbar\n className={block(null, className)}\n itemsToWrap={[\n {\n name: 'id1',\n node: (\n <Filter\n className={block('text-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={idFilter}\n placeholder=\"Enter cell id...\"\n onChange={this.onIdFilter}\n autofocus={false}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n ...(!activeBundle\n ? [\n {\n name: 'bundle',\n node: (\n <Suggest\n className={block('suggest')}\n text={bundleFilter}\n apply={(item) =>\n this.onBundleFilter(\n 'string' === typeof item ? item : item.value,\n )\n }\n filter={(_items, filter) =>\n this.getBundleFilterItems(filter)\n }\n placeholder={'Enter bundle name...'}\n popupClassName={block('suggest-popup')}\n />\n ),\n growable: true,\n shrinkable: true,\n wrapperClassName: block('item'),\n },\n ]\n : []),\n {\n name: 'host',\n node: (\n <Suggest\n className={block('suggest')}\n text={this.props.hostFilter}\n onTextUpdate={this.onHostFilterChange}\n onItemClick={(item) =>\n this.onHostSelected(\n 'string' === typeof item ? item : item.value,\n )\n }\n onBlur={this.onHostInputBlur}\n filter={(_items, filter = '') => this.getHostFilterItems(filter)}\n placeholder={'Enter host...'}\n autoFocus={false}\n popupClassName={block('suggest-popup')}\n />\n ),\n growable: true,\n shrinkable: true,\n wrapperClassName: block('item'),\n },\n ...(activeBundleHosts\n ? [\n {\n name: 'copy-hosts',\n node: (\n <ClipboardButton\n pin=\"round\"\n text={activeBundleHosts}\n awesome=\"clipboard-list\"\n buttonText=\"Copy host list\"\n />\n ),\n },\n ]\n : []),\n ]}\n />\n );\n }\n}\n\nexport type ReduxProps = {\n activeBundle: string;\n activeBundleHosts: string;\n idFilter: string;\n bundleFilter: string;\n hostFilter: string;\n bundles: string[];\n hosts: string[];\n} & {\n setTabletsPartial(data: TabletsPartialAction['data']): void;\n};\n\nexport default CellsTableInstruments;\n","import {ThunkAction} from 'redux-thunk';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\n// @ts-ignore\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\n\nimport {CheckPermissionResult} from '../../../../shared/utils/check-permission';\n\nimport {RootState} from '../../reducers';\nimport {\n TabletBundle,\n TabletsBundlesAction,\n TabletsPartialAction,\n} from '../../reducers/tablet_cell_bundles';\nimport {\n TABLETS_BUNDLES_ACTIVE_ACCOUNT,\n TABLETS_BUNDLES_LOAD_FAILURE,\n TABLETS_BUNDLES_LOAD_REQUEST,\n TABLETS_BUNDLES_LOAD_SUCCESS,\n TABLETS_BUNDLES_PARTIAL,\n} from '../../../constants/tablets';\nimport {\n prepareBundles,\n prepareTabletCells,\n tabletActiveBundleLink,\n} from '../../../utils/components/tablet-cells';\nimport {SortState} from '../../../types';\nimport {bundlesTrackVisit} from '../favourites';\nimport {\n filterTabletCellsByBundle,\n getTabletsBundlesSorted,\n getTabletsCells,\n prepareHostsFromCells,\n} from '../../selectors/tablet_cell_bundles';\n\nimport copy from 'copy-to-clipboard';\nimport {getBatchError, splitBatchResults, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {getCluster, getCurrentUserName} from '../../selectors/global';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getAppBrowserHistory} from '../../../store/window-store';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\nimport {makeCheckPermissionBatchSubRequestUI} from '../../../utils/acl/acl-api';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\n\nfunction getZones(allBundles: TabletBundle[]) {\n const map = new Map<string, boolean>();\n allBundles.forEach(({bundle}) => {\n if (!map.has(bundle)) {\n map.set(bundle, true);\n }\n });\n\n return [...map.keys()];\n}\n\nfunction prepareBundleDefaultConfig(result: object) {\n return Object.entries(result).reduce((acc, [k, v]) => {\n acc[k] = ypath.getValue(v, '/@');\n return acc;\n }, Object.create(null));\n}\n\ntype TabletsBundlesThunkAction = ThunkAction<any, RootState, any, TabletsBundlesAction>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function fetchTabletsBundles(): TabletsBundlesThunkAction {\n return (dispatch) => {\n dispatch({type: TABLETS_BUNDLES_LOAD_REQUEST});\n const requests: BatchSubRequest[] = [\n {\n command: 'exists' as const,\n parameters: {\n path: '//sys/bundle_controller/orchid/bundle_controller/state/bundles',\n },\n },\n {\n command: 'list' as const,\n parameters: {\n path: '//sys/tablet_cells',\n attributes: ['peers', 'id', 'tablet_cell_bundle', 'total_statistics', 'status'],\n ...USE_MAX_SIZE,\n },\n },\n {\n command: 'get' as const,\n parameters: {\n path: '//sys/tablet_cell_bundles',\n attributes: [\n 'nodes',\n 'enable_bundle_balancer',\n 'health',\n 'options',\n 'node_tag_filter',\n 'resource_limits',\n 'resource_usage',\n 'folder_id',\n 'abc',\n 'dynamic_options',\n 'bundle_controller_target_config',\n 'enable_bundle_controller',\n 'zone',\n ],\n ...USE_MAX_SIZE,\n },\n },\n ];\n\n cancelHelper.removeAllRequests();\n\n return ytApiV3Id\n .executeBatch(YTApiId.tabletCellBundles, {\n parameters: {requests},\n cancellation: cancelHelper.saveCancelToken,\n })\n .then((results: Array<any>) => {\n const [{output: isBundleControllerSupported}, ...rest] = results;\n\n const [{output: cells}, {output: bundles}] = rest;\n\n const error = getBatchError(rest, 'Tablet cell bundles cannot be loaded');\n if (error) {\n throw error;\n }\n\n const allCells = prepareTabletCells(cells);\n const allBundles = prepareBundles(allCells, bundles);\n\n const zones = getZones(allBundles);\n\n dispatch(fetchWritePermissions(allBundles));\n\n if (!zones.length || !isBundleControllerSupported) {\n dispatch({\n type: TABLETS_BUNDLES_LOAD_SUCCESS,\n data: {\n cells: allCells,\n bundles: allBundles,\n },\n });\n return;\n }\n\n ytApiV3Id\n .get(YTApiId.bundleControllerZones, {\n parameters: {\n path: `//sys/bundle_controller/controller/zones`,\n attributes: ['tablet_node_sizes', 'rpc_proxy_sizes', 'data_centers'],\n },\n cancellation: cancelHelper.saveCancelToken,\n })\n .then((result: object) => {\n const bundleDefaultConfig = prepareBundleDefaultConfig(result);\n dispatch({\n type: TABLETS_BUNDLES_LOAD_SUCCESS,\n data: {\n cells: allCells,\n bundles: allBundles,\n bundleDefaultConfig,\n },\n });\n })\n .catch((e: any) => {\n if (!isCancelled(e)) {\n dispatch({type: TABLETS_BUNDLES_LOAD_FAILURE, data: e});\n }\n });\n })\n .catch((e: any) => {\n if (!isCancelled(e)) {\n dispatch({type: TABLETS_BUNDLES_LOAD_FAILURE, data: e});\n }\n });\n };\n}\n\nexport function fetchWritePermissions(\n bundles: Array<{bundle: string}> = [],\n): TabletsBundlesThunkAction {\n return (dispatch, getState) => {\n const user = getCurrentUserName(getState());\n const requests: Array<BatchSubRequest> = map_(bundles, (item) => {\n return makeCheckPermissionBatchSubRequestUI({\n path: `//sys/tablet_cell_bundles/${item.bundle}`,\n user,\n permission: 'write',\n });\n });\n return wrapApiPromiseByToaster(\n ytApiV3Id\n .executeBatch(YTApiId.tabletBundlesCheckWrite, {\n parameters: {requests},\n cancellation: cancelHelper.saveCancelToken,\n })\n .then((data) => {\n const {error, outputs} = splitBatchResults<CheckPermissionResult>(\n data,\n 'Failed to get bundle permissions',\n );\n const writableByName = reduce_(\n outputs,\n (acc, item, index) => {\n if (item?.action === 'allow') {\n const name = bundles[index].bundle;\n acc.set(name, true);\n }\n return acc;\n },\n new Map<string, boolean>(),\n );\n\n dispatch({type: TABLETS_BUNDLES_PARTIAL, data: {writableByName}});\n\n return error ? Promise.reject(error) : undefined;\n }),\n {\n toasterName: 'bundleWritePermissions',\n skipSuccessToast: true,\n errorTitle: 'Fetch write permissions',\n },\n );\n };\n}\n\nexport function setTabletsBundlesSortState(\n bundlesSort: SortState<keyof TabletBundle>,\n): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesSort}};\n}\n\nexport function setTabletsBundlesNameFilter(bundlesNameFilter: string): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesNameFilter}};\n}\n\nexport function setTabletsBundlesAccountFilter(bundlesAccountFilter: string): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesAccountFilter}};\n}\n\nexport function setTabletsBundlesTagNodeFilter(bundlesTagNodeFilter: string): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesTagNodeFilter}};\n}\n\nexport function setTabletsPartial(data: TabletsPartialAction['data']) {\n return {type: TABLETS_BUNDLES_PARTIAL, data};\n}\n\nexport function setTabletsActiveBundle(activeBundle: string): TabletsBundlesThunkAction {\n return (dispatch) => {\n dispatch(bundlesTrackVisit(activeBundle));\n dispatch({\n type: TABLETS_BUNDLES_ACTIVE_ACCOUNT,\n data: {activeBundle},\n });\n };\n}\n\nexport function setTabletsFirstBundleAsActive(): TabletsBundlesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const bundles = getTabletsBundlesSorted(state);\n const [first] = bundles;\n if (!first) {\n return;\n }\n\n const cluster = getCluster(state);\n dispatch(setTabletsActiveBundle(first.bundle));\n getAppBrowserHistory().push(tabletActiveBundleLink(cluster, first.bundle));\n };\n}\n\nexport function copyHostListToClipboard(bundle: string): TabletsBundlesThunkAction {\n return (_dispatch, getState) => {\n const cells = filterTabletCellsByBundle(bundle, getTabletsCells(getState()));\n const hosts = prepareHostsFromCells(cells);\n copy(hosts || '');\n };\n}\n","import {connect} from 'react-redux';\n\nimport CellsTableInstruments from '../../../pages/tablet_cell_bundles/cells/CellsInstruments';\nimport {setTabletsPartial} from '../../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {\n getTabletsActiveBundle,\n getTabletsCellsBundleFilter,\n getTabletsCellsBundles,\n getTabletsCellsHostFilter,\n getTabletsCellsHosts,\n getTabletsCellsHostsOfActiveBundle,\n getTabletsCellsIdFilter,\n} from '../../../store/selectors/tablet_cell_bundles';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getTabletsActiveBundle(state),\n activeBundleHosts: getTabletsCellsHostsOfActiveBundle(state),\n\n idFilter: getTabletsCellsIdFilter(state),\n bundleFilter: getTabletsCellsBundleFilter(state),\n hostFilter: getTabletsCellsHostFilter(state),\n\n bundles: getTabletsCellsBundles(state),\n hosts: getTabletsCellsHosts(state),\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTableInstruments);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {getTabletsActiveBundleData} from '../../../store/selectors/tablet_cell_bundles';\nimport {useSelector} from 'react-redux';\nimport MetaTable, {MetaTableItem} from '../../../components/MetaTable/MetaTable';\nimport {Progress} from '@gravity-ui/uikit';\n\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport ypath from '../../../common/thor/ypath';\n\nimport {YTHealth} from '../../../types';\nimport AccountLink from '../../accounts/AccountLink';\nimport Label, {LabelTheme} from '../../../components/Label/Label';\nimport {calcProgressProps} from '../../../utils/utils';\nimport {\n getCluster,\n getClusterUiConfig,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../../store/selectors/global';\n\nimport './BundleGeneralMeta.scss';\nimport UIFactory from '../../../UIFactory';\n\nconst block = cn('bundle-general-meta');\n\nexport function BundleBalancerValue(props: {value?: boolean; blocking?: boolean}) {\n const {value = true, blocking} = props;\n return <span className={block('bb', {success: value, blocking})}>{value ? 'on' : 'off'}</span>;\n}\n\nconst HEALTH_TO_THEME: {[health: string]: LabelTheme} = {\n good: 'success',\n initializing: 'warning',\n degrading: 'warning',\n failed: 'danger',\n changing: 'info',\n};\n\nexport function Health(props: {value?: YTHealth; className?: string}) {\n const {value, className} = props;\n const theme: LabelTheme = HEALTH_TO_THEME[value || ''];\n return !value ? (\n hammer.format.NO_VALUE\n ) : (\n <Label className={className} theme={theme}>\n {value}\n </Label>\n );\n}\n\nexport default function BundleGeneralMeta() {\n const bundleData = useSelector(getTabletsActiveBundleData);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n const cluster = useSelector(getCluster);\n const allowTabletAccounting = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n if (!bundleData) {\n return null;\n }\n\n const leftGroup: Array<MetaTableItem> = [\n ...(UIFactory.getExtraMetaTableItemsForBundle({bundle: bundleData, clusterUiConfig}) || []),\n {\n key: 'Health',\n value: <Health value={bundleData.health} />,\n },\n {\n key: 'Tablet cells',\n value: hammer.format['Number'](bundleData.tabletCells),\n },\n {\n key: 'Tablets',\n value: hammer.format['Number'](bundleData.tablets),\n visible: !allowTabletAccounting,\n },\n {\n key: 'Bundle controller',\n value: <BundleBalancerValue value={bundleData.enable_bundle_controller} />,\n },\n {\n key: 'Bundle balancer',\n value: (\n <BundleBalancerValue\n value={bundleData.enable_bundle_balancer}\n blocking={bundleData.enable_bundle_controller}\n />\n ),\n },\n {\n key: 'Node tag filter',\n value: bundleData.node_tag_filter || hammer.format.NO_VALUE,\n },\n ];\n\n const rightGroup: Array<MetaTableItem> = [\n {\n key: 'Memory',\n value: hammer.format['Bytes'](bundleData.memory),\n visible: !allowTabletAccounting,\n },\n {\n key: 'Tablets',\n value: renderResourceProgress(bundleData, 'tablet_count'),\n visible: allowTabletAccounting,\n },\n {\n key: 'Tablet static memory',\n value: renderResourceProgress(bundleData, 'tablet_static_memory'),\n visible: allowTabletAccounting,\n },\n {\n key: 'Uncompressed size',\n value: hammer.format['Bytes'](bundleData.uncompressed),\n },\n {\n key: 'Compressed size',\n value: hammer.format['Bytes'](bundleData.compressed),\n },\n {\n key: 'Changelog account',\n value: bundleData.changelog_account ? (\n <AccountLink\n className={block('account-link')}\n account={bundleData.changelog_account}\n cluster={cluster}\n />\n ) : (\n hammer.format.NO_VALUE\n ),\n },\n {\n key: 'Snapshot account',\n value: bundleData.snapshot_account ? (\n <AccountLink\n className={block('account-link')}\n account={bundleData.snapshot_account}\n cluster={cluster}\n />\n ) : (\n hammer.format.NO_VALUE\n ),\n },\n ];\n\n return <MetaTable className={block()} items={[leftGroup, rightGroup]} title={'General'} />;\n}\n\nfunction renderResourceProgress(data: object, resourceName: string) {\n const usage = ypath.getValue(data, `/resource_usage/${resourceName}`);\n const limit = ypath.getValue(data, `/resource_limits/${resourceName}`);\n\n const format = resourceName === 'tablet_static_memory' ? 'Bytes' : 'Number';\n const props = calcProgressProps(usage, limit, format);\n\n return <Progress className={block('progress')} {...props} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\n\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport ColumnHeader from '../../../components/ColumnHeader/ColumnHeader';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport Icon from '../../../components/Icon/Icon';\nimport Label, {LabelTheme} from '../../../components/Label/Label';\nimport Link from '../../../components/Link/Link';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Health} from '../../../pages/tablet_cell_bundles/bundle/BundleGeneralMeta';\nimport {OrderType} from '../../../utils/sort-helpers';\nimport {Host} from '../../../containers/Host/Host';\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport type {TabletCell, TabletsPartialAction} from '../../../store/reducers/tablet_cell_bundles';\nimport type {SortState} from '../../../types';\n\nimport './CellsTable.scss';\n\nconst block = cn('cells-table');\n\nexport interface Props {}\n\nconst STATE_THEME: {[type: string]: LabelTheme} = {\n leading: 'success',\n //following: 'primary',\n none: 'default',\n elections: 'warning',\n leader_recovery: 'warning',\n};\n\nconst TABLE_SETTINGS: Settings = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n//\n// function valueOrNone(value: any) {\n// return value === undefined ? hammer.format.NO_VALUE : value;\n// }\n\nconst COLUMN_TITLE: {[name: string]: string} = {\n id: 'Cell id',\n uncompressed: 'Uncompressed size',\n compressed: 'Compressed size',\n peerAddress: 'Node',\n actions: ' ',\n};\n\ninterface HoverActionProps {\n children: React.ReactNode;\n}\n\nfunction HoverAction(props: HoverActionProps) {\n return <span className={block('hover-action')}>{props.children}</span>;\n}\n\nfunction wrapCell<T extends (...args: any) => any>(renderCell: T) {\n return function WrappedCell(...args: Parameters<T>) {\n return <div className={block('wrapped')}>{renderCell(...(args as any))}</div>;\n };\n}\n\nclass CellsTable extends React.Component<Props & ReduxProps> {\n renderColumnHeader = (col: string, sortable: boolean) => {\n const {\n sortState: {column, order},\n } = this.props;\n const isSorted = col === column;\n\n return (\n <ColumnHeader\n className={block('header-cell', {col, sortable}, 'data-table__head-cell')}\n column={col}\n title={COLUMN_TITLE[col] ?? capitalize_(col)}\n order={isSorted ? order : undefined}\n onSort={this.onColumnSort}\n withUndefined\n />\n );\n };\n\n onColumnSort = (column: string, order: OrderType) => {\n this.props.setTabletsPartial({\n cellsSort: {column: column as keyof TabletCell, order},\n });\n };\n\n renderNumber(colName: keyof TabletCell, data: {row: TabletCell}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Number'](value);\n }\n\n renderBytes(colName: keyof TabletCell, data: {row: TabletCell}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Bytes'](value);\n }\n\n renderHealth(data: {row: TabletCell}) {\n const {health} = data?.row || {};\n return <Health value={health} />;\n }\n\n renderId = (data: {row: TabletCell}) => {\n const {id} = data?.row || {};\n return (\n <div className={block('id')}>\n <span className={block('id-id')}>{id}</span>\n <HoverAction>\n <ClipboardButton view=\"flat-secondary\" text={id} />\n </HoverAction>\n </div>\n );\n };\n\n renderHost(data: {row: TabletCell}) {\n return (\n <Host\n asTabletNode\n address={data?.row?.peerAddress}\n copyBtnClassName={block('hover-action')}\n />\n );\n }\n\n renderBundle = (data: {row: TabletCell}) => {\n const {activeBundleLink, cluster} = this.props;\n const {bundle} = data?.row || {};\n return (\n <Link\n routed\n theme={'primary'}\n url={activeBundleLink(cluster, bundle)}\n onClick={() => {\n this.props.setTabletsActiveBundle(bundle);\n }}\n >\n {bundle}\n </Link>\n );\n };\n\n renderState = (data: {row: TabletCell}) => {\n const {state} = data?.row ?? {};\n const theme = state ? STATE_THEME[state] : undefined;\n return <Label theme={theme} type=\"text\" text={state} capitalize />;\n };\n\n renderActions = (data: {row: TabletCell}) => {\n const {attributesPath, cellNavigationLink, cluster} = this.props;\n const {id} = data?.row || {};\n return (\n <div className={block('actions')}>\n <Tooltip placement={['bottom', 'top']} content={'Go to Navigation'}>\n <Link url={cellNavigationLink(cluster, id)} theme=\"ghost\" routed>\n <Icon awesome=\"folder\" />\n </Link>\n </Tooltip>\n <ClickableAttributesButton\n size=\"m\"\n view=\"flat-secondary\"\n title={id}\n path={attributesPath(id)}\n />\n </div>\n );\n };\n\n column(name: string, sortable = false): Column<TabletCell> {\n return {\n name,\n align: 'left',\n sortable: false,\n className: block('td', {col: name.toLocaleLowerCase()}),\n header: this.renderColumnHeader(name, sortable),\n };\n }\n\n sortableColumn(name: keyof TabletCell) {\n return this.column(name, true);\n }\n\n render() {\n const columns = this.props.columns.map((x) => Columns[x].call(this));\n\n const {data, loading, loaded} = this.props;\n\n return (\n <div className={block()}>\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={data}\n settings={TABLE_SETTINGS}\n theme={'bundles-table'}\n />\n </div>\n );\n }\n}\n\nconst Columns = {\n id(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('id'),\n render: this.renderId,\n width: 400,\n };\n },\n bundle(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('bundle'),\n render: wrapCell(this.renderBundle),\n };\n },\n health(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('health'),\n render: wrapCell(this.renderHealth),\n width: 80,\n };\n },\n tablets(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('tablets'),\n render: wrapCell(this.renderNumber.bind(this, 'tablets')),\n align: 'right',\n width: 100,\n };\n },\n memory(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('memory'),\n render: wrapCell(this.renderBytes.bind(this, 'memory')),\n align: 'right',\n width: 100,\n };\n },\n uncompressed(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('uncompressed'),\n render: wrapCell(this.renderBytes.bind(this, 'uncompressed')),\n align: 'right',\n width: 150,\n };\n },\n compressed(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('compressed'),\n render: wrapCell(this.renderBytes.bind(this, 'compressed')),\n align: 'right',\n width: 130,\n };\n },\n peerAddress(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('peerAddress'),\n render: this.renderHost,\n width: 130,\n };\n },\n state(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('state'),\n render: wrapCell(this.renderState),\n width: 100,\n };\n },\n actions(this: CellsTable): Column<TabletCell> {\n return {\n ...this.column('actions'),\n render: this.renderActions,\n width: 70,\n };\n },\n};\n\nexport type ReduxProps = {\n cluster: string;\n loading: boolean;\n loaded: boolean;\n data: TabletCell[];\n sortState: SortState<keyof TabletCell>;\n columns: Array<keyof typeof Columns>;\n activeBundleLink(cluster: string, bundle: string): string;\n attributesPath(id: string): string;\n cellNavigationLink(cluster: string, cellId: string): string;\n} & {\n setTabletsPartial(data: TabletsPartialAction['data']): void;\n setTabletsActiveBundle(activeBundle: string): void;\n};\n\nexport default CellsTable;\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\n\nimport CellsTable from '../../../pages/tablet_cell_bundles/cells/CellsTable';\nimport {\n setTabletsActiveBundle,\n setTabletsPartial,\n} from '../../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getTabletsCellsSortState,\n getTabletsCellsSorted,\n getTabletsIsLoaded,\n getTabletsIsLoading,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {\n tabletActiveBundleLink,\n tabletAttributesPath,\n tabletCellNavigationLink,\n} from '../../../utils/components/tablet-cells';\n\nconst columns: ComponentProps<typeof CellsTable>['columns'] = [\n 'id',\n 'bundle',\n 'health',\n 'tablets',\n 'memory',\n 'uncompressed',\n 'compressed',\n 'peerAddress',\n 'state',\n 'actions',\n];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n cluster: getCluster(state),\n loading: getTabletsIsLoading(state),\n loaded: getTabletsIsLoaded(state),\n data: getTabletsCellsSorted(state),\n sortState: getTabletsCellsSortState(state),\n columns,\n activeBundleLink: tabletActiveBundleLink,\n attributesPath: tabletAttributesPath,\n cellNavigationLink: tabletCellNavigationLink,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial,\n setTabletsActiveBundle,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTable);\n","import React from 'react';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport CellsInstruments from '../../../pages/tablet_cell_bundles/cells/CellsInstruments.connected';\nimport CellsTable from '../../../pages/tablet_cell_bundles/cells/CellsTable.connected';\n\nexport function BundleCells() {\n return (\n <ErrorBoundary>\n <WithStickyToolbar toolbar={<CellsInstruments />} content={<CellsTable />} />\n </ErrorBoundary>\n );\n}\n","import copy from 'copy-to-clipboard';\nimport type {ThunkAction} from 'redux-thunk';\n\nimport {\n CHAOS_BUNDLES_ACTIVE_ACCOUNT,\n CHAOS_BUNDLES_LOAD_FAILURE,\n CHAOS_BUNDLES_LOAD_REQUEST,\n CHAOS_BUNDLES_LOAD_SUCCESS,\n CHAOS_BUNDLES_PARTIAL,\n} from '../../../constants/tablets';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {bundlesTrackVisit} from '../../../store/actions/favourites';\nimport type {RootState} from '../../../store/reducers';\nimport type {\n ChaosBundle,\n ChaosBundlesAction,\n ChaosPartialAction,\n} from '../../../store/reducers/chaos_cell_bundles';\nimport {\n filterChaosCellsByBundle,\n getChaosBundlesSorted,\n getChaosCells,\n prepareHostsFromCells,\n} from '../../../store/selectors/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport type {SortState} from '../../../types';\nimport {\n prepareBundles,\n prepareTabletCells,\n tabletActiveBundleLink,\n} from '../../../utils/components/tablet-cells';\nimport {getBatchError} from '../../../utils/utils';\nimport {getAppBrowserHistory} from '../../../store/window-store';\nimport {USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\n\ntype ChaosBundlesThunkAction = ThunkAction<void, RootState, unknown, ChaosBundlesAction>;\n\nexport function fetchChaosBundles(): ChaosBundlesThunkAction {\n return (dispatch) => {\n dispatch({type: CHAOS_BUNDLES_LOAD_REQUEST});\n const requests: BatchSubRequest[] = [\n {\n command: 'list' as const,\n parameters: {\n path: '//sys/chaos_cells',\n attributes: ['health', 'id', 'peers', 'status', 'tablet_cell_bundle'],\n ...USE_MAX_SIZE,\n },\n },\n {\n command: 'get' as const,\n parameters: {\n path: '//sys/chaos_cell_bundles',\n attributes: ['health', 'id', 'options'],\n ...USE_MAX_SIZE,\n },\n },\n ];\n\n return ytApiV3Id\n .executeBatch(YTApiId.chaosCellBundles, {requests})\n .then((results: Array<any>) => {\n const [{output: cells}, {output: bundles}] = results;\n const error = getBatchError(results, 'Tablet cell bundles cannot be loaded');\n if (error) {\n throw error;\n }\n\n const allCells = prepareTabletCells(cells);\n const allBundles = prepareBundles(allCells, bundles);\n\n dispatch({\n type: CHAOS_BUNDLES_LOAD_SUCCESS,\n data: {cells: allCells, bundles: allBundles},\n });\n })\n .catch((e: any) => {\n dispatch({type: CHAOS_BUNDLES_LOAD_FAILURE, data: e});\n });\n };\n}\n\nexport function setChaosBundlesSortState(\n bundlesSort: SortState<keyof ChaosBundle>,\n): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesSort}};\n}\n\nexport function setChaosBundlesNameFilter(bundlesNameFilter: string): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesNameFilter}};\n}\n\nexport function setChaosBundlesAccountFilter(bundlesAccountFilter: string): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesAccountFilter}};\n}\n\nexport function setChaosBundlesTagNodeFilter(bundlesTagNodeFilter: string): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesTagNodeFilter}};\n}\n\nexport function setChaosPartial(data: ChaosPartialAction['data']) {\n return {type: CHAOS_BUNDLES_PARTIAL, data};\n}\n\nexport function setChaosActiveBundle(activeBundle: string): ChaosBundlesThunkAction {\n return (dispatch) => {\n dispatch(bundlesTrackVisit(activeBundle));\n dispatch({\n type: CHAOS_BUNDLES_ACTIVE_ACCOUNT,\n data: {activeBundle},\n });\n };\n}\n\nexport function setChaosFirstBundleAsActive(): ChaosBundlesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const bundles = getChaosBundlesSorted(state);\n const [first] = bundles;\n if (!first) {\n return;\n }\n\n const cluster = getCluster(state);\n dispatch(setChaosActiveBundle(first.bundle));\n getAppBrowserHistory().push(tabletActiveBundleLink(cluster, first.bundle));\n };\n}\n\nexport function copyHostListToClipboard(bundle: string): ChaosBundlesThunkAction {\n return (_dispatch, getState) => {\n const cells = filterChaosCellsByBundle(bundle, getChaosCells(getState()));\n const hosts = prepareHostsFromCells(cells);\n copy(hosts || '');\n };\n}\n","import * as React from 'react';\nconst CircleQuestion = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.079.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.326.257-.379.328-.038.052-.038.07-.038.089a.75.75 0 0 1-1.5 0c0-.794.544-1.286 1.057-1.645.28-.196.4-.332.458-.426a.543.543 0 0 0 .074-.312c0-.3-.243-.641-.839-.641a.997.997 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 1 1-1.5 0c0-.674.345-1.22.78-1.577ZM8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\", clipRule: \"evenodd\" })));\nexport default CircleQuestion;\n","import React from 'react';\nimport { CircleQuestion } from '@gravity-ui/icons';\nimport { Icon, Popover } from '@gravity-ui/uikit';\nimport { block } from '../utils/cn';\nimport './HelpPopover.css';\nconst b = block('help-popover');\nconst ICON_SIZE = 16;\nexport function HelpPopover(props) {\n var _a;\n return (React.createElement(Popover, Object.assign({}, props, { className: b(null, props.className) }),\n React.createElement(\"button\", Object.assign({ ref: props.buttonRef, type: \"button\" }, props.buttonProps, { className: b('button', (_a = props.buttonProps) === null || _a === void 0 ? void 0 : _a.className) }),\n React.createElement(Icon, { data: CircleQuestion, size: ICON_SIZE }))));\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\nimport {Progress} from '@gravity-ui/uikit';\nimport {HelpPopover} from '@gravity-ui/components';\n\nimport AccountLink from '../../../pages/accounts/AccountLink';\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport Button from '../../../components/Button/Button';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport ColumnHeader from '../../../components/ColumnHeader/ColumnHeader';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport Icon from '../../../components/Icon/Icon';\nimport Link from '../../../components/Link/Link';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport {\n BundleBalancerValue,\n Health,\n} from '../../../pages/tablet_cell_bundles/bundle/BundleGeneralMeta';\nimport type {TabletBundle} from '../../../store/reducers/tablet_cell_bundles';\nimport type {SortState} from '../../../types';\nimport type {OrderType} from '../../../utils/sort-helpers';\nimport {calcProgressProps} from '../../../utils/utils';\n\nimport './BundlesTable.scss';\nimport UIFactory from '../../../UIFactory';\nimport {ClusterUiConfig} from '../../../../shared/yt-types';\nimport {WaitForFont} from '../../../containers/WaitForFont/WaitForFont';\n\nconst block = cn('bundles-table');\n\nconst TABLE_SETTINGS: Settings = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyFooter: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n stickyBottom: 0,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n\nconst COLUMN_TITLE: {[name: string]: string} = {\n bundle: 'Bundle / Node tag filter',\n tabletCells: 'Cells',\n uncompressed: 'Uncompressed size',\n compressed: 'Compressed size',\n enable_bundle_controller: 'Bundle controller',\n enable_bundle_balancer: 'Bundle balancer',\n changelog_account: 'Changelog and Snapshot account',\n node_tag_filter: 'Node tag filter',\n actions: ' ',\n tablet_count: 'Usage',\n tablet_count_limit: 'Limit',\n tablet_count_free: 'Free',\n tablet_count_percentage: 'Percentage',\n tablet_static_memory: 'Usage',\n tablet_static_memory_limit: 'Limit',\n tablet_static_memory_free: 'Free',\n tablet_static_memory_percentage: 'Percentage',\n};\n\nconst SHORT_TITLE: typeof COLUMN_TITLE = {\n enable_bundle_balancer: 'BB',\n enable_bundle_controller: 'BC',\n};\n\nfunction CopyHostListAction(props: {\n bundle: string;\n copyHostListToClipboard(bundle: string): void;\n}) {\n const {bundle, copyHostListToClipboard} = props;\n\n const handleClick = React.useCallback(\n () => copyHostListToClipboard(bundle),\n [bundle, copyHostListToClipboard],\n );\n\n return (\n <div className={block('actions-copy-hosts')} onClick={handleClick}>\n <Tooltip\n content={<span className={block('no-wrap')}>Copy hosts to clipboard</span>}\n placement={'bottom-start'}\n >\n <ClipboardButton view=\"flat-secondary\" onCopy={handleClick} />\n </Tooltip>\n </div>\n );\n}\n\nclass BundlesTable extends React.Component<ReduxProps> {\n renderColumnHeader = (col: string, sortable: boolean) => {\n const {column, order} = this.props.sortState || {};\n const isSorted = col === column;\n\n return (\n <ColumnHeader\n className={block('header-cell', {col, sortable}, 'data-table__head-cell')}\n column={col}\n title={COLUMN_TITLE[col]}\n shortTitle={SHORT_TITLE[col]}\n order={isSorted ? order : undefined}\n onSort={sortable ? this.onColumnSort : undefined}\n withUndefined\n />\n );\n };\n\n onColumnSort = (column: string, order: OrderType) => {\n this.props.setBundlesSortState({\n column: column as keyof TabletBundle,\n order,\n });\n };\n\n renderBundle = (data: {row: TabletBundle}) => {\n const {activeBundleLink, cluster, clusterUiConfig} = this.props;\n const {bundle, node_tag_filter, enable_bundle_controller} = data?.row || {};\n const has_tag = Boolean(node_tag_filter);\n return (\n <div className={block('bundle')}>\n <div className={block('name', {has_tag})}>\n {!bundle ? (\n 'Total'\n ) : (\n <Link\n routed\n theme={'primary'}\n url={activeBundleLink(cluster, bundle, enable_bundle_controller)}\n onClick={() => {\n this.props.setActiveBundle(bundle);\n }}\n >\n {data?.row?.bundle}\n </Link>\n )}\n {has_tag && <span className={block('name-tag')}>{node_tag_filter}</span>}\n </div>\n {UIFactory.renderBundlesTableItemExtraControls({\n bundle: data.row,\n clusterUiConfig,\n itemClassName: block('extra-control'),\n })}\n </div>\n );\n };\n\n renderNumber(colName: keyof TabletBundle, data: {row: TabletBundle}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Number'](value);\n }\n\n renderBytes(colName: keyof TabletBundle, data: {row: TabletBundle}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Bytes'](value);\n }\n\n renderBB(data: {row: TabletBundle}) {\n const {bundle, enable_bundle_balancer: value} = data?.row || {};\n const isTotalAggregatedRow = !bundle;\n if (isTotalAggregatedRow) return null;\n\n return <BundleBalancerValue value={value} />;\n }\n\n renderBC(data: {row: TabletBundle}) {\n const {bundle, enable_bundle_controller: value} = data?.row || {};\n const isTotalAggregatedRow = !bundle;\n if (isTotalAggregatedRow) return null;\n\n return <BundleBalancerValue value={value} />;\n }\n\n renderAccount = (data: {row: TabletBundle}) => {\n const {cluster} = this.props;\n const {changelog_account, snapshot_account} = data?.row || {};\n return (\n <React.Fragment>\n <AccountLink cluster={cluster} account={changelog_account} />\n {changelog_account !== snapshot_account && (\n <React.Fragment>\n {', '}\n <AccountLink cluster={cluster} account={snapshot_account} />\n </React.Fragment>\n )}\n </React.Fragment>\n );\n };\n\n renderHealth(data: {row: TabletBundle}) {\n const {health} = data?.row || {};\n return <Health value={health} />;\n }\n\n renderNodes = (data: {row: TabletBundle}) => {\n const {nodes, node_tag_filter, unique_node_tag, bundle} = data?.row || {};\n if (!unique_node_tag && bundle) {\n const help_tooltip = `This bundle shares nodes with other bundles having node tag filter\n \"${node_tag_filter}\". Actual amount of available resources depends on the number of tablet cells and may\n be less than displayed in this column.`;\n return (\n <div className={block('nodes')}>\n <HelpPopover\n className={block('help-tooltip')}\n delayClosing={50}\n placement={'auto'}\n content={help_tooltip}\n />\n {nodes?.length}\n </div>\n );\n }\n return nodes?.length;\n };\n\n renderActions = (data: {row: TabletBundle}) => {\n const {\n allowPerBundleAccounting,\n bundleDashboardUrl,\n cluster,\n copyHostListToClipboard,\n pathPrefix,\n showCellBundleEditor,\n writeableByName,\n } = this.props;\n const {bundle, nodes, enable_bundle_controller} = data?.row || {};\n if (!bundle) {\n return;\n }\n const path = `${pathPrefix}${bundle}`;\n\n const allowEdit = enable_bundle_controller ?? writeableByName?.get(bundle);\n return (\n <div className={block('actions')}>\n <div className={block('actions-attrs')}>\n <ClickableAttributesButton\n size=\"m\"\n view=\"flat-secondary\"\n title={path}\n path={path}\n />\n </div>\n {allowPerBundleAccounting && allowEdit && (\n <div className={block('actions-attrs')}>\n <Button\n size=\"m\"\n view=\"flat-secondary\"\n onClick={() => showCellBundleEditor(bundle)}\n >\n <Icon awesome={'pencil'} />\n </Button>\n </div>\n )}\n {bundleDashboardUrl && (\n <div className={block('actions-attrs')}>\n <ChartLink\n url={bundleDashboardUrl(cluster, bundle)}\n wrapContent={(node) => (\n <Button size=\"m\" view=\"flat-secondary\">\n {node}\n </Button>\n )}\n />\n </div>\n )}\n {nodes && nodes.length > 0 && (\n <CopyHostListAction\n bundle={bundle}\n copyHostListToClipboard={copyHostListToClipboard}\n />\n )}\n </div>\n );\n };\n\n renderTabletCountPercentage(data: {row: TabletBundle}) {\n if (data.row.tablet_count_percentage === undefined) {\n return hammer.format.NO_VALUE;\n }\n\n const {tablet_count, tablet_count_limit} = data.row;\n const {value, theme, text} = calcProgressProps(tablet_count, tablet_count_limit, 'Number');\n\n return value === undefined ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value} theme={theme} text={text} />\n );\n }\n\n renderTabletStaticMemoryPercentage(data: {row: TabletBundle}) {\n if (data.row.tablet_static_memory_percentage === undefined) {\n return hammer.format.NO_VALUE;\n }\n\n const {tablet_static_memory, tablet_static_memory_limit} = data.row;\n const {value, theme, text} = calcProgressProps(\n tablet_static_memory,\n tablet_static_memory_limit,\n 'Bytes',\n );\n\n return value === undefined ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value} theme={theme} text={text} />\n );\n }\n\n column(name: string, sortable = false): Column<TabletBundle> {\n return {\n name,\n align: 'left',\n sortable: false,\n className: block('td', {col: name.toLowerCase()}),\n header: this.renderColumnHeader(name, sortable),\n };\n }\n\n sortableColumn(columnName: keyof TabletBundle) {\n return this.column(columnName, true);\n }\n\n render() {\n const columns = this.props.columns.map((x) => Columns[x].call(this));\n\n const {data, total, loading, loaded} = this.props;\n\n return (\n <div className={block()}>\n <WaitForFont>\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={data}\n settings={TABLE_SETTINGS}\n theme={'bundles-table'}\n footerData={data.length ? [total] : undefined}\n />\n </WaitForFont>\n </div>\n );\n }\n}\n\nconst Columns = {\n bundle(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('bundle'),\n render: this.renderBundle,\n };\n },\n tablet_count_percentage(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count_percentage'),\n render: this.renderTabletCountPercentage,\n width: 260,\n align: 'center',\n };\n },\n tablet_count(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count'),\n render: this.renderNumber.bind(this, 'tablet_count'),\n align: 'right',\n width: 150,\n };\n },\n tablet_count_limit(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count_limit'),\n render: this.renderNumber.bind(this, 'tablet_count_limit'),\n align: 'right',\n width: 150,\n };\n },\n tablet_count_free(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count_free'),\n render: this.renderNumber.bind(this, 'tablet_count_free'),\n align: 'right',\n width: 150,\n };\n },\n tablet_static_memory_percentage(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory_percentage'),\n render: this.renderTabletStaticMemoryPercentage,\n width: 260,\n align: 'center',\n };\n },\n tablet_static_memory(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory'),\n render: this.renderBytes.bind(this, 'tablet_static_memory'),\n align: 'right',\n width: 150,\n };\n },\n tablet_static_memory_limit(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory_limit'),\n render: this.renderBytes.bind(this, 'tablet_static_memory_limit'),\n align: 'right',\n width: 150,\n };\n },\n tablet_static_memory_free(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory_free'),\n render: this.renderBytes.bind(this, 'tablet_static_memory_free'),\n align: 'right',\n width: 150,\n };\n },\n health(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('health'),\n render: this.renderHealth,\n align: 'center',\n width: 110,\n };\n },\n nodes(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('nodes'),\n render: this.renderNodes,\n align: 'right',\n width: 85,\n };\n },\n tabletCells(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tabletCells'),\n render: this.renderNumber.bind(this, 'tabletCells'),\n align: 'right',\n width: 85,\n };\n },\n tablets(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablets'),\n render: this.renderNumber.bind(this, 'tablets'),\n align: 'right',\n width: 100,\n };\n },\n memory(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('memory'),\n render: this.renderBytes.bind(this, 'memory'),\n align: 'right',\n width: 100,\n };\n },\n uncompressed(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('uncompressed'),\n align: 'right',\n render: this.renderBytes.bind(this, 'uncompressed'),\n width: 150,\n };\n },\n compressed(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('compressed'),\n align: 'right',\n render: this.renderBytes.bind(this, 'compressed'),\n width: 120,\n };\n },\n enable_bundle_balancer(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('enable_bundle_balancer'),\n align: 'center',\n render: this.renderBB,\n width: 80,\n };\n },\n enable_bundle_controller(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('enable_bundle_controller'),\n align: 'center',\n render: this.renderBC,\n width: 80,\n };\n },\n changelog_account(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('changelog_account'),\n render: this.renderAccount,\n width: 235,\n };\n },\n actions(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.column('actions'),\n render: this.renderActions,\n width: 100,\n };\n },\n};\n\nexport type ReduxProps = {\n loading: boolean;\n loaded: boolean;\n data: TabletBundle[];\n total: TabletBundle;\n sortState?: SortState<keyof TabletBundle>;\n cluster: string;\n clusterUiConfig?: ClusterUiConfig;\n allowPerBundleAccounting: boolean | undefined;\n pathPrefix: string;\n columns: Array<keyof typeof Columns>;\n activeBundleLink(cluster: string, bundle: string, enable_bundle_controller?: boolean): string;\n bundleDashboardUrl?(cluster: string, bundle: string): string | undefined;\n writeableByName?: {get: (bundleName: string) => boolean | undefined};\n} & {\n copyHostListToClipboard(bundle: string): void;\n setBundlesSortState(bundlesSort: SortState<keyof TabletBundle>): void;\n setActiveBundle(activeBundle: string): void;\n showCellBundleEditor(bundleName: string): void;\n};\n\nexport default BundlesTable;\n","import type {ThunkAction} from 'redux-thunk';\n\nimport forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\n\nimport hammer from '../../../common/hammer';\nimport {\n TABLETS_BUNDLES_EDITOR_LOAD_FAILURE,\n TABLETS_BUNDLES_EDITOR_LOAD_REQUREST,\n TABLETS_BUNDLES_EDITOR_LOAD_SUCCESS,\n TABLETS_BUNDLES_EDITOR_PARTIAL,\n} from '../../../constants/tablets';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../store/reducers';\nimport type {\n BundleControllerInstanceDetails,\n TabletCellBundleEditorAction,\n} from '../../../store/reducers/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {fetchTabletsBundles} from '../../../store/actions/tablet_cell_bundles';\nimport {getBatchError, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {makeBatchSubRequest, prepareSetCommandForBatch} from '../../../utils/cypress-attributes';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {\n getTabletsBundles,\n getTabletsDefaultMemoryConfiguration,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {OrchidBundlesData} from '../../../store/reducers/tablet_cell_bundles';\nimport {BatchResults, BatchSubRequest} from '../../../../shared/yt-types';\n\ntype TabletCellBundleEditorThunkAction = ThunkAction<\n any,\n RootState,\n any,\n TabletCellBundleEditorAction\n>;\n\nexport function fetchTabletCellBundleEditor(bundleName: string): TabletCellBundleEditorThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n dispatch({type: TABLETS_BUNDLES_EDITOR_LOAD_REQUREST, data: {bundleName}});\n\n const bundles = getTabletsBundles(state);\n const toEdit = bundles.find(({bundle}) => bundle === bundleName);\n if (!toEdit) {\n return Promise.resolve();\n }\n const defaultReservedMemoryLimit = getTabletsDefaultMemoryConfiguration(state);\n\n const requests: Array<BatchSubRequest> = [\n {\n command: 'get',\n parameters: {\n path: `//sys/tablet_cell_bundles/${bundleName}`,\n attributes: [\n 'resource_usage',\n 'resource_limits',\n 'options',\n 'abc',\n 'folder_id',\n 'zone',\n 'enable_bundle_controller',\n ],\n },\n },\n ];\n\n if (toEdit.enable_bundle_controller) {\n requests.push({\n command: 'get',\n parameters: {\n path: `//sys/bundle_controller/orchid/bundle_controller/state/bundles/${bundleName}`,\n },\n });\n }\n\n return wrapApiPromiseByToaster(\n ytApiV3Id\n .executeBatch(YTApiId.tabletCellBundlesEditData, {requests})\n .then((results) => {\n const bundleControllerIsUnavailable =\n toEdit.enable_bundle_controller &&\n results[2]?.error?.code === yt.codes.NODE_DOES_NOT_EXIST;\n const error = getBatchError(\n bundleControllerIsUnavailable ? [results[0]] : results,\n 'Failed to get bundle edit data',\n );\n\n if (error) {\n throw error;\n }\n return results;\n }),\n {\n toasterName: 'edit-bundle-data',\n skipSuccessToast: true,\n errorContent: 'Failed to load bundle details',\n },\n )\n .then((results) => {\n const [{output: data}, {output: bundleControllerData} = {output: undefined}] =\n results as BatchResults<[unknown, OrchidBundlesData]>;\n\n let bundleData = toEdit;\n\n if (\n !toEdit.bundle_controller_target_config?.memory_limits.reserved &&\n defaultReservedMemoryLimit\n ) {\n bundleData = {\n ...toEdit,\n bundle_controller_target_config: {\n ...toEdit.bundle_controller_target_config!,\n memory_limits: {\n ...toEdit.bundle_controller_target_config?.memory_limits,\n reserved: defaultReservedMemoryLimit,\n },\n },\n };\n }\n\n dispatch({\n type: TABLETS_BUNDLES_EDITOR_LOAD_SUCCESS,\n data: {\n bundleData,\n data,\n bundleControllerData,\n },\n });\n\n const requestGroups: Array<Array<BatchSubRequest>> = [\n ...map_(bundleControllerData?.allocated_tablet_nodes, (_item, key) => {\n return [\n makeBatchSubRequest('get', {\n path: `//sys/cluster_nodes/${key}/@bundle_controller_annotations/nanny_service`,\n }),\n makeBatchSubRequest('get', {\n path: `//sys/cluster_nodes/${key}/@statistics/memory/tablet_static`,\n }),\n ];\n }),\n ...map_(bundleControllerData?.allocated_rpc_proxies, (_item, key) => {\n return [\n makeBatchSubRequest('get', {\n path: `//sys/rpc_proxies/${key}/@bundle_controller_annotations/nanny_service`,\n }),\n ];\n }),\n ];\n const errors = [];\n wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletCellBundlesInstancesDetails, {\n requests: map_(requestGroups, (item) => {\n return makeBatchSubRequest('execute_batch', {requests: item});\n }),\n }),\n {\n toasterName: 'bundle-controller-tablet-static-memory',\n skipSuccessToast: true,\n errorContent:\n 'BundleController: Cannot load tablet static memory of isntances',\n },\n ).then((nodesResults) => {\n const keys = [\n ...keys_(bundleControllerData?.allocated_tablet_nodes),\n ...keys_(bundleControllerData?.allocated_rpc_proxies),\n ];\n const instanceDetailsMap: Record<string, BundleControllerInstanceDetails> = {};\n forEach_(nodesResults, ({output, error}, index) => {\n if (error) {\n errors.push(error);\n } else {\n const [\n {output: nanny_service},\n {output: tablet_static_memory} = {output: undefined},\n ] = output;\n instanceDetailsMap[keys[index]] = {\n nanny_service,\n tablet_static_memory,\n };\n }\n });\n dispatch({type: TABLETS_BUNDLES_EDITOR_PARTIAL, data: {instanceDetailsMap}});\n });\n })\n .catch((e: any) => {\n dispatch({\n type: TABLETS_BUNDLES_EDITOR_LOAD_FAILURE,\n data: e,\n });\n return Promise.reject(e);\n });\n };\n}\n\nexport function showTabletCellBundleEditor(bundle: string): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch(fetchTabletCellBundleEditor(bundle)).then(() => {\n dispatch({type: TABLETS_BUNDLES_EDITOR_PARTIAL, data: {visibleEditor: true}});\n });\n };\n}\n\nexport function hideTabletCellBundleEditor(): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch({\n type: TABLETS_BUNDLES_EDITOR_PARTIAL,\n data: {bundleName: undefined, loaded: true, visibleEditor: false},\n });\n };\n}\n\nexport type BundleResourceType = 'tablet_count' | 'tablet_static_memory';\n\nexport function setBundleQuota(params: {\n bundleName: string;\n resourceType: BundleResourceType;\n limit: number;\n}): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n const {bundleName, resourceType, limit} = params;\n\n const resource = hammer.format['Readable'](resourceType);\n\n return wrapApiPromiseByToaster(\n yt.v3.set(\n {\n path: `//sys/tablet_cell_bundles/${bundleName}/@resource_limits/${resourceType}`,\n },\n limit,\n ),\n {\n toasterName: `edit_bundle_${bundleName}`,\n successContent: `Set quota limit for ${resource}`,\n errorContent: `Cannot set quota limit for ${resource}`,\n },\n ).then(() => {\n dispatch(showTabletCellBundleEditor(bundleName));\n });\n };\n}\n\nexport function setBundleEditorController(params: {\n bundleName: string;\n data: Record<string, unknown>;\n}): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n const {bundleName, data} = params;\n\n const bundlePath = `//sys/tablet_cell_bundles/${bundleName}`;\n\n const requests = map_(data, (value, path) =>\n prepareSetCommandForBatch(`${bundlePath}/${path}`, value),\n );\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletCellBundlesSetAttrs, {\n requests,\n } as any),\n {\n toasterName: `edit_bundle_${bundleName}`,\n successContent: `Set bundle edit data`,\n batchType: 'v3',\n errorTitle: 'Failed to set bundle edit data',\n },\n ).then(() => {\n dispatch(fetchTabletsBundles());\n });\n };\n}\n\nexport interface EditBundleParams {\n attributes: {\n abc?: {\n id: number;\n slug: string;\n };\n };\n options: {\n changelog_account?: string;\n snapshot_account?: string;\n };\n}\n\nexport function setBunndleAttributes(\n bundle: string,\n attrs: Partial<EditBundleParams>,\n): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n const {attributes, options} = attrs;\n\n const bundlePath = `//sys/tablet_cell_bundles/${bundle}`;\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletCellBundlesSetAttrs, {\n requests: [\n ...map_(attributes, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@${key}`, v),\n ),\n ...map_(options, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@options/${key}`, v),\n ),\n ],\n } as any),\n {\n toasterName: `update-bundle_${bundle}`,\n successContent: `${bundle} successfully updated`,\n batchType: 'v3',\n errorTitle: 'Failed to edit bundle',\n },\n ).then(() => {\n dispatch(showTabletCellBundleEditor(bundle));\n });\n };\n}\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\nimport {createSelector} from 'reselect';\n\nimport BundlesTable from '../../../pages/tablet_cell_bundles/bundles/BundlesTable';\nimport {\n setTabletsActiveBundle,\n setTabletsBundlesSortState,\n} from '../../../store/actions/tablet_cell_bundles';\nimport {showTabletCellBundleEditor} from '../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport type {RootState} from '../../../store/reducers';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\nimport {\n getCluster,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../../store/selectors/global';\nimport {\n getTabletBundlesTableMode,\n getTabletBundlesWriteableByName,\n getTabletsBundlesSortState,\n getTabletsBundlesSorted,\n getTabletsBundlesTotal,\n getTabletsIsLoaded,\n getTabletsIsLoading,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {tabletActiveBundleLink} from '../../../utils/components/tablet-cells';\nimport {tabletCellBundleDashboardUrl} from '../../../utils/tablet_cell_bundles';\n\nconst calcColumns = createSelector([getTabletBundlesTableMode], (mode: BundlesTableMode) => {\n const columns: ComponentProps<typeof BundlesTable>['columns'] = ['bundle'];\n\n switch (mode) {\n case 'tablets': {\n columns.push(\n 'tablet_count_percentage',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n );\n break;\n }\n case 'tablets_memory': {\n columns.push(\n 'tablet_static_memory_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n );\n break;\n }\n default: {\n columns.push(\n 'health',\n 'nodes',\n 'tabletCells',\n 'tablets',\n 'memory',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_controller',\n 'enable_bundle_balancer',\n 'changelog_account',\n );\n }\n }\n\n columns.push('actions');\n\n return columns;\n});\n\nconst mapStateToProps = (state: RootState) => {\n return {\n loading: getTabletsIsLoading(state),\n loaded: getTabletsIsLoaded(state),\n data: getTabletsBundlesSorted(state),\n total: getTabletsBundlesTotal(state),\n sortState: getTabletsBundlesSortState(state),\n cluster: getCluster(state),\n allowPerBundleAccounting: getClusterUiConfigEnablePerBundleTabletAccounting(state),\n pathPrefix: '//sys/tablet_cell_bundles/',\n columns: calcColumns(state),\n activeBundleLink: tabletActiveBundleLink,\n bundleDashboardUrl: tabletCellBundleDashboardUrl,\n writeableByName: getTabletBundlesWriteableByName(state),\n };\n};\n\nconst mapDispatchToProps = {\n setBundlesSortState: setTabletsBundlesSortState,\n setActiveBundle: setTabletsActiveBundle,\n showCellBundleEditor: showTabletCellBundleEditor,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTable);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport CustomRadioButton from '../../../components/RadioButton/RadioButton';\nimport type {setTabletsPartial} from '../../../store/actions/tablet_cell_bundles';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\nimport {getClusterUiConfigEnablePerBundleTabletAccounting} from '../../../store/selectors/global';\n\ninterface Props {\n bundlesTableMode: BundlesTableMode;\n setTabletsPartial: typeof setTabletsPartial;\n modes: BundlesTableMode[];\n}\n\nfunction BundlesTableModeRadio({bundlesTableMode: value, setTabletsPartial, modes}: Props) {\n const dispatch = useDispatch();\n\n const allowTabs = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(setTabletsPartial({bundlesTableMode: e.target.value as any}));\n },\n [dispatch],\n );\n\n const modeItems = modes.map(CustomRadioButton.prepareSimpleValue);\n\n return !allowTabs ? null : (\n <CustomRadioButton items={modeItems} value={value} onChange={handleChange} />\n );\n}\n\nexport default React.memo(BundlesTableModeRadio);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport compact_ from 'lodash/compact';\n\nimport Filter from '../../../components/Filter/Filter';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport BundlesTableModeRadio from '../../../pages/tablet_cell_bundles/bundles/BundlesTableModeRadio';\nimport type {setTabletsPartial} from '../../../store/actions/tablet_cell_bundles';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\n\nimport './BundlesTableInstruments.scss';\n\nconst block = cn('bundles-table-instruments');\n\nexport interface Props {\n className?: string;\n}\n\nclass BundlesTableInstruments extends React.Component<Props & ReduxProps> {\n onNameEnterKeyDown = () => {\n this.props.setTabletsFirstBundleAsActive();\n };\n\n render() {\n const {\n accountFilter,\n bundlesTableMode,\n className,\n modes,\n nameFilter,\n setTabletsPartial,\n tagNodeFilter,\n } = this.props;\n\n return (\n <Toolbar\n className={block(null, className)}\n itemsToWrap={compact_([\n {\n name: 'name',\n node: (\n <Filter\n className={block('text-filter')}\n hasClear\n autofocus\n size=\"m\"\n type=\"text\"\n value={nameFilter}\n placeholder=\"Enter bundle name...\"\n onChange={this.props.setTabletsBundlesNameFilter}\n onEnterKeyDown={this.onNameEnterKeyDown}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'account',\n node: (\n <Filter\n className={block('account-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={accountFilter}\n placeholder=\"Enter changelog or snapshot account...\"\n onChange={this.props.setTabletsBundlesAccountFilter}\n autofocus={false}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'tagNode',\n node: (\n <Filter\n className={block('account-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={tagNodeFilter}\n placeholder=\"Enter node tag filter...\"\n onChange={this.props.setTabletsBundlesTagNodeFilter}\n autofocus={false}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n (modes.length > 1 || modes[0] !== bundlesTableMode) && {\n name: 'tableMode',\n node: (\n <BundlesTableModeRadio\n bundlesTableMode={bundlesTableMode}\n setTabletsPartial={setTabletsPartial}\n modes={modes}\n />\n ),\n shrinkable: false,\n growable: false,\n wrapperClassName: block('item'),\n },\n ])}\n />\n );\n }\n}\n\ntype ReduxProps = {\n accountFilter: string;\n bundlesTableMode: BundlesTableMode;\n modes: BundlesTableMode[];\n nameFilter: string;\n tagNodeFilter: string;\n} & {\n setTabletsBundlesNameFilter(bundlesNameFilter: string): void;\n setTabletsBundlesAccountFilter(bundlesAccountFilter: string): void;\n setTabletsBundlesTagNodeFilter(bundlesTagNodeFilter: string): void;\n setTabletsFirstBundleAsActive(): void;\n setTabletsPartial: typeof setTabletsPartial;\n};\n\nexport default BundlesTableInstruments;\n","import {connect} from 'react-redux';\n\nimport BundlesTableInstruments from '../../../pages/tablet_cell_bundles/bundles/BundlesTableInstruments';\nimport {\n setTabletsBundlesAccountFilter,\n setTabletsBundlesNameFilter,\n setTabletsBundlesTagNodeFilter,\n setTabletsFirstBundleAsActive,\n setTabletsPartial,\n} from '../../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\nimport {\n getTabletBundlesTableMode,\n getTabletsBundlesAccountFilter,\n getTabletsBundlesNameFilter,\n getTabletsBundlesTagNodeFilter,\n} from '../../../store/selectors/tablet_cell_bundles';\n\nconst modes: Array<BundlesTableMode> = ['default', 'tablets', 'tablets_memory'];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n accountFilter: getTabletsBundlesAccountFilter(state),\n bundlesTableMode: getTabletBundlesTableMode(state),\n nameFilter: getTabletsBundlesNameFilter(state),\n tagNodeFilter: getTabletsBundlesTagNodeFilter(state),\n modes,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsBundlesNameFilter,\n setTabletsBundlesAccountFilter,\n setTabletsBundlesTagNodeFilter,\n setTabletsFirstBundleAsActive,\n setTabletsPartial: setTabletsPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTableInstruments);\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport BundlesTable from '../../../pages/tablet_cell_bundles/bundles/BundlesTable.connected';\nimport BundlesTableInstruments from '../../../pages/tablet_cell_bundles/bundles/BundlesTableInstruments.connected';\nimport {\n copyHostListToClipboard,\n setTabletsActiveBundle,\n} from '../../../store/actions/tablet_cell_bundles';\n\nexport default function Bundles() {\n const dispatch = useDispatch();\n\n const handleCopyHostListToClipboard = React.useCallback(\n (bundle: string) => {\n dispatch(copyHostListToClipboard(bundle));\n },\n [dispatch],\n );\n\n React.useEffect(() => {\n dispatch(setTabletsActiveBundle(''));\n }, [dispatch]);\n\n return (\n <ErrorBoundary>\n <WithStickyToolbar\n toolbar={<BundlesTableInstruments />}\n content={<BundlesTable copyHostListToClipboard={handleCopyHostListToClipboard} />}\n />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {getTabletsActiveBundle} from '../../../store/selectors/tablet_cell_bundles';\nimport {getCluster, getTheme} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\nimport {NoContent} from '../../../components/NoContent/NoContent';\n\nfunction BundleStatisticsTab() {\n const cluster = useSelector(getCluster);\n const bundle = useSelector(getTabletsActiveBundle);\n const theme = useSelector(getTheme);\n\n if (!bundle) {\n return (\n <NoContent\n warning=\"You don't have any selected bundles\"\n hint=\"Please choose one to display charts\"\n />\n );\n }\n\n const StatisticsComponent = UIFactory.getStatisticsComponentForBundle()!;\n\n return (\n <ErrorBoundary>\n <StatisticsComponent {...{cluster, bundle, theme}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(BundleStatisticsTab);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../../../store/selectors/global';\nimport ypath from '../../../common/thor/ypath';\nimport {getTabletsActiveBundleData} from '../../../store/selectors/tablet_cell_bundles';\n\nimport {NoContent} from '../../../components/NoContent/NoContent';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\n\nimport './BundleMonitorTab.scss';\n\nfunction BundleMonitorTab(props: {\n component: React.ComponentType<{cluster: string; tablet_cell_bundle: string; bundleData: any}>;\n}) {\n const {component: BundleMonitor} = props;\n const bundleData = useSelector(getTabletsActiveBundleData);\n const cluster = useSelector(getCluster);\n\n const tablet_cell_bundle: undefined | string = React.useMemo(() => {\n return ypath.getValue(bundleData, '/bundle');\n }, [bundleData]);\n\n if (!tablet_cell_bundle) {\n return (\n <NoContent\n warning=\"You don't have any selected bundles\"\n hint=\"Please choose one to display charts\"\n />\n );\n }\n\n return (\n <ErrorBoundary>\n <BundleMonitor {...{cluster, tablet_cell_bundle, bundleData}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(BundleMonitorTab);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {getTabletsActiveBundle} from '../../../store/selectors/tablet_cell_bundles';\nimport {isPoolAclAllowed} from '../../../store/selectors/scheduling/scheduling';\nimport {NoContent} from '../../../components/NoContent/NoContent';\nimport {BundleAcl} from '../../../containers/ACL';\n\nexport default function BundleAclTab({className}: {className: string}) {\n const activeBundle = useSelector(getTabletsActiveBundle);\n const allowAcl = useSelector(isPoolAclAllowed);\n return (\n <ErrorBoundary>\n {allowAcl ? (\n <BundleAcl {...{path: activeBundle, className}} />\n ) : (\n <NoContent\n className={className}\n hint={\"The cluster is not ready to work with bundle's ACL\"}\n />\n )}\n </ErrorBoundary>\n );\n}\n","import React from 'react';\n\nimport cn from 'bem-cn-lite';\n\nimport './ColorCircle.scss';\n\nconst block = cn('yt-color-circle');\n\nexport function ColorCircle({color, marginRight = true}: {color: string; marginRight?: boolean}) {\n return (\n <div className={block({'margin-right': marginRight})} style={{backgroundColor: color}} />\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../common/hammer';\n\nimport {Progress, ProgressProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {ColorCircle} from '../../components/ColorCircle/ColorCircle';\n\nimport {getProgressBarColorByIndex} from '../../constants/colors';\nimport MetaTable, {MetaTableItem} from '../../components/MetaTable/MetaTable';\n\nimport {CPULimits, MemoryLimits} from '../../store/reducers/tablet_cell_bundles';\n\nimport './BundleMetaResourceProgress.scss';\n\nconst block = cn('bundle-meta-resource-progress');\n\ntype ResourceProgress = {\n data: MemoryLimits | CPULimits;\n limit?: number;\n resourceType: 'Number' | 'vCores' | 'Bytes';\n postfix?: string;\n};\n\nexport function BundleMetaResourceProgress(\n title: string,\n {data, limit, resourceType, postfix = ''}: ResourceProgress,\n) {\n const {props, text, commonTooltip} = getProgressData({data, limit, resourceType, postfix});\n\n return {\n key: title,\n value: (\n <div className={block()}>\n <Tooltip placement={'bottom'} content={commonTooltip}>\n <Progress className={block('progress')} {...props} text={text} />\n </Tooltip>\n </div>\n ),\n };\n}\n\nfunction getProgressData({data, limit, resourceType, postfix}: ResourceProgress) {\n const props: ProgressProps = {\n stack: [],\n };\n\n const sum = reduce_(data, (acc, v) => acc + Number(v), 0);\n const max = limit ?? sum;\n\n const text = `${hammer.format[resourceType](sum)} ${postfix}`.trim();\n const metaItems: Array<MetaTableItem> = [];\n\n forEach_(data, (value, name) => {\n const formattedValue = hammer.format[resourceType](value);\n const color = getProgressBarColorByIndex(props.stack.length);\n\n metaItems.push({\n key: name,\n label: (\n <span>\n <ColorCircle color={color} marginRight />\n {hammer.format.Readable(name)}\n </span>\n ),\n value: `${formattedValue} ${postfix}`,\n });\n const fraction = (Number(value) / max) * 100;\n\n props.stack.push({\n color,\n value: fraction,\n });\n });\n\n const commonTooltip = <MetaTable items={metaItems} />;\n\n return {props, text, commonTooltip};\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport entries_ from 'lodash/entries';\nimport map_ from 'lodash/map';\nimport pick_ from 'lodash/pick';\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../../common/hammer';\n\nimport {\n getActiveBundleControllerData,\n getTabletsActiveBundleData,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {fetchTabletCellBundleEditor} from '../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {OrchidBundlesData} from '../../../store/reducers/tablet_cell_bundles';\nimport Icon from '../../../components/Icon/Icon';\nimport MetaTable, {MetaTableItem} from '../../../components/MetaTable/MetaTable';\nimport {BundleMetaResourceProgress} from '../../../components/BundleMetaResourceProgress/BundleMetaResourceProgress';\nimport {Health} from './BundleGeneralMeta';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {printUsageLimit} from '../../../utils';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\n\nimport './BundleConfigurationMeta.scss';\n\nconst block = cn('bundle-configuration-meta');\n\nconst DETAILS_KEYS = [\n 'allocating_rpc_proxy_count',\n 'allocating_tablet_node_count',\n 'deallocating_rpc_proxy_count',\n 'deallocating_tablet_node_count',\n 'removing_cell_count',\n] as const;\n\nexport function ActiveAccountBundleControllerUpdater() {\n const dispatch = useDispatch();\n const {bundle: activeBundle, enable_bundle_controller} =\n useSelector(getTabletsActiveBundleData) || {};\n const fetchFn = React.useCallback(() => {\n if (activeBundle) {\n dispatch(fetchTabletCellBundleEditor(activeBundle));\n }\n }, [dispatch, activeBundle]);\n useUpdater(fetchFn);\n\n const prevBundleControllerState = React.useRef<null | 'failed' | 'changing' | 'good'>(null);\n const checkBundleControllerState = React.useCallback(async () => {\n if (!activeBundle || !enable_bundle_controller) {\n return;\n }\n\n const requests: Array<BatchSubRequest> = [\n {\n command: 'get',\n parameters: {\n path: `//sys/bundle_controller/orchid/bundle_controller/state/bundles/${activeBundle}/alerts`,\n },\n },\n ...map_(DETAILS_KEYS, (attr) => {\n return {\n command: 'get' as const,\n parameters: {\n path: `//sys/bundle_controller/orchid/bundle_controller/state/bundles/${activeBundle}/${attr}`,\n },\n };\n }),\n ];\n\n const [{output: alerts} = {output: []}, ...rest] = await wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletBundleControllerState, {requests}),\n {\n toasterName: 'active-bundle-controller-status',\n skipSuccessToast: true,\n errorContent: `Cannot load bundle controller details for \"${activeBundle}\".`,\n },\n ).catch(() => []);\n\n const inProgressCount = reduce_(\n rest,\n (acc, {output}) => {\n return acc + (output ?? 0);\n },\n 0,\n );\n\n const state = getState(alerts, inProgressCount);\n if (prevBundleControllerState.current === null) {\n prevBundleControllerState.current = state;\n return;\n }\n\n if (prevBundleControllerState.current !== state) {\n prevBundleControllerState.current = state;\n fetchFn();\n }\n }, [fetchFn, activeBundle, enable_bundle_controller]);\n useUpdater(checkBundleControllerState, {timeout: 3000});\n\n return null;\n}\n\nexport default function BundleConfigurationMeta() {\n const {bundle_controller_target_config: bundleControllerConfig} =\n useSelector(getTabletsActiveBundleData) || {};\n const orchidData = useSelector(getActiveBundleControllerData);\n\n if (!bundleControllerConfig || !orchidData) {\n return null;\n }\n\n const bundleGroup: Array<MetaTableItem> = [];\n\n if (orchidData) {\n const {resource_quota, resource_allocated} = orchidData;\n const {memory: allMemory, vcpu: allVCPU} = resource_quota;\n const {memory: allocMemory, vcpu: allocVCPU} = resource_allocated;\n\n bundleGroup.push(\n getBundleStateField(orchidData),\n getLimitAllocatedField('Memory allocated/limit', allocMemory, allMemory, 'Bytes'),\n getLimitAllocatedField('vCPU allocated/limit', allocVCPU, allVCPU, 'vCores'),\n );\n }\n\n if (typeof bundleControllerConfig.rpc_proxy_count !== 'undefined') {\n const {\n rpc_proxy_count: count,\n rpc_proxy_resource_guarantee: {memory, vcpu},\n } = bundleControllerConfig;\n\n bundleGroup.push(getRpcNodeField('RPC proxies', count, memory, vcpu));\n }\n\n if (typeof bundleControllerConfig.tablet_node_count !== 'undefined') {\n const {\n tablet_node_count: count,\n tablet_node_resource_guarantee: {memory, vcpu},\n } = bundleControllerConfig;\n bundleGroup.push(getRpcNodeField('Tablet nodes', count, memory, vcpu));\n }\n\n if (bundleControllerConfig.memory_limits) {\n const {memory} = bundleControllerConfig?.tablet_node_resource_guarantee || {};\n bundleGroup.push(\n BundleMetaResourceProgress('Memory allocation', {\n data: bundleControllerConfig.memory_limits,\n resourceType: 'Bytes',\n limit: memory,\n }),\n );\n }\n\n if (bundleControllerConfig.cpu_limits) {\n bundleGroup.push(\n BundleMetaResourceProgress('vCPU allocation', {\n data: bundleControllerConfig.cpu_limits,\n resourceType: 'Number',\n postfix: 'threads',\n }),\n );\n }\n\n return (\n <MetaTable className={block()} subTitles={['Bundle configuration']} items={[bundleGroup]} />\n );\n}\n\nfunction getLimitAllocatedField(\n title: string,\n allocated: number,\n all: number,\n type: 'Bytes' | 'vCores',\n) {\n const allStr = hammer.format[type](all);\n const allocatedStr = hammer.format[type](allocated);\n const percentage = hammer.format['Number']((allocated / all) * 100 || 0);\n\n return {\n key: title,\n value: (\n <span>\n {printUsageLimit(allocatedStr, allStr)}\n <span className={block('percentage')}>{percentage}%</span>\n </span>\n ),\n };\n}\n\nfunction getRpcNodeField(title: string, count: number, memory: number, vcpu: number) {\n const printMemory = hammer.format['Bytes'](memory);\n const printVCPU = hammer.format['vCores'](vcpu);\n return {\n key: title,\n value: count ? `${count} x (${printMemory}, ${printVCPU})` : 0,\n };\n}\n\nfunction getState(alerts?: OrchidBundlesData['alerts'], totalCounts = 0) {\n if (!alerts?.length && totalCounts === 0) {\n return 'good' as const;\n } else if (!alerts?.length && totalCounts > 0) {\n return 'changing' as const;\n }\n return 'failed' as const;\n}\n\nexport function getBundleStateData(orchidData: OrchidBundlesData) {\n const alerts = orchidData.alerts;\n const detailsEntries = entries_(pick_(orchidData, DETAILS_KEYS));\n const totalCounts = reduce_(detailsEntries, (acc, [_k, v]) => acc + v, 0);\n const state = getState(alerts, totalCounts);\n return {state, detailsEntries};\n}\n\nfunction getBundleStateField(orchidData: OrchidBundlesData) {\n const {alerts} = orchidData;\n\n const {state: value, detailsEntries} = getBundleStateData(orchidData);\n if (value === 'good') {\n return {\n key: 'State',\n value: <Health className={block('health', {value})} value={value} />,\n };\n }\n\n if (value === 'changing') {\n return {\n key: 'State',\n value: (\n <Tooltip\n content={renderDetails(detailsEntries)}\n placement={'bottom'}\n className={block('state-with-icon')}\n >\n <Health className={block('health', {value})} value={value} />\n &nbsp;\n <Icon awesome=\"question-circle\" />\n </Tooltip>\n ),\n };\n }\n\n return {\n key: 'State',\n value: (\n <Tooltip\n content={renderErrors(alerts)}\n placement={'bottom'}\n className={block('state-with-icon')}\n >\n <Health className={block('health', {value})} value={value} />\n &nbsp;\n <Icon awesome=\"exclamation-triangle\" />\n </Tooltip>\n ),\n };\n}\n\nfunction renderDetails(details: Array<[string, number]>) {\n const list = details.map(([k, v]) => `${k} - ${v}`);\n return (\n <ul className={block('tooltip-list')}>\n {list.map((text, i) => {\n return (\n <li key={i} className={block('tooltip-item')}>\n {text}\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction renderErrors(alerts: OrchidBundlesData['alerts']) {\n return (\n <ol className={block('tooltip-list', {alerts: true})}>\n {alerts.map((alert) => {\n return (\n <li key={alert.id} className={block('tooltip-item')}>\n {alert.id} - {alert.description}\n </li>\n );\n })}\n </ol>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport BundleGeneralMeta from './BundleGeneralMeta';\nimport BundleConfigurationMeta, {\n ActiveAccountBundleControllerUpdater,\n} from './BundleConfigurationMeta';\n\nimport './BundleMetaTable.scss';\n\nconst block = cn('bundle-meta-table');\n\nexport default function BundleMetaTable() {\n return (\n <div className={block('container')}>\n <BundleGeneralMeta />\n <BundleConfigurationMeta />\n <ActiveAccountBundleControllerUpdater />\n </div>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\n\nimport format from '../../../common/hammer/format';\n\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport Filter from '../../../components/Filter/Filter';\nimport Label from '../../../components/Label/Label';\nimport Link from '../../../components/Link/Link';\nimport WithStickyToolbar, {\n STICKY_TOOLBAR_BOTTOM,\n} from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport Icon from '../../../components/Icon/Icon';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\n\nimport {AllocatedInstance, InProgressInstance} from '../../../store/reducers/tablet_cell_bundles';\n\nimport './CellsBundleController.scss';\nimport {lastWord, printUsageLimit} from '../../../utils';\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport {makeNavigationLink} from '../../../utils/app-url';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {Progress} from '@gravity-ui/uikit';\nimport {computeProgress, getProgressTheme} from '../../../utils/progress';\n\nconst block = cn('cells-bundle-controller');\n\ninterface RowData {\n address?: string;\n url?: string;\n data?: AllocatedInstance;\n allocationState?: InProgressInstance['hulk_request_state'] | 'removing';\n hulkRequestPath?: string;\n tablet_static_memory?: {used?: number; limit?: number};\n deployUrl?: string;\n nannyUrl?: string;\n}\n\ntype ColumnRenderProps<T> = {\n value?: unknown;\n row: T;\n index: number;\n footer?: boolean;\n headerData?: boolean;\n};\n\nconst COLUMNS: Array<Column<RowData>> = [\n {\n name: 'Address',\n render: ({row}) => {\n const {url, address} = row;\n return (\n <span>\n <Link className={block('address-host')} url={url} routed>\n {address}\n </Link>\n {address && (\n <ClipboardButton\n text={address}\n view={'flat'}\n inlineMargins\n visibleOnRowHover\n />\n )}\n </span>\n );\n },\n sortable: false,\n },\n {\n name: 'Type',\n render: renderType,\n sortable: false,\n width: 200,\n },\n {\n name: 'tablet_static_memory',\n header: 'Tablet static memory',\n render: ({row}) => {\n const {tablet_static_memory} = row;\n if (!tablet_static_memory) {\n return format.NO_VALUE;\n }\n\n const {used, limit} = tablet_static_memory;\n const text = printUsageLimit(format.Bytes(used), format.Bytes(limit));\n const progress = computeProgress(used, limit) ?? 0;\n return <Progress value={progress} theme={getProgressTheme(progress)} text={text} />;\n },\n sortable: false,\n width: 200,\n align: 'center',\n },\n {\n name: 'Allocation request',\n render: ({row}) => {\n const {hulkRequestPath} = row;\n if (!hulkRequestPath) {\n return format.NO_VALUE;\n }\n\n const {suffix: uuid} = lastWord(hulkRequestPath, '/');\n return (\n <span className={block('alloc-request')}>\n <ClickableAttributesButton\n className={block('alloc-request-attrs')}\n title={uuid}\n exactPath={hulkRequestPath}\n />\n <Link\n className={block('alloc-request-url')}\n url={makeNavigationLink({path: hulkRequestPath})}\n >\n {uuid}\n </Link>\n </span>\n );\n },\n width: 300,\n align: 'center',\n sortable: false,\n },\n {\n name: 'Allocation state',\n render: ({row}) => {\n const {allocationState} = row;\n const tooltip =\n allocationState === 'IN_PROGRESS'\n ? 'Please note that allocating new instances on MapReduce clusters can take several hours.'\n : undefined;\n\n return !allocationState ? (\n format.NO_VALUE\n ) : (\n <Tooltip content={tooltip} useFlex>\n <Label text={format.ReadableField(allocationState.toLocaleLowerCase())} />\n {Boolean(tooltip) && <Icon awesome=\"question-circle\" color=\"secondary\" />}\n </Tooltip>\n );\n },\n sortable: false,\n align: 'center',\n width: 200,\n },\n {\n name: '',\n render: ({row}) => {\n return (\n <React.Fragment>\n {renderDeployUrl(row)}\n {renderNannyUrl(row)}\n </React.Fragment>\n );\n },\n width: 80,\n align: 'center',\n },\n];\n\nfunction useColumns(hideColumns?: Array<string>) {\n const res = React.useMemo(() => {\n if (!hideColumns?.length) {\n return COLUMNS;\n }\n\n const toHide = new Set(hideColumns);\n return COLUMNS.filter((item) => !toHide.has(item.name));\n }, [hideColumns]);\n return res;\n}\n\nfunction renderDeployUrl(row: RowData) {\n const {deployUrl} = row;\n return !deployUrl ? null : (\n <Tooltip\n className={block('link-icon')}\n content=\"Deploy\"\n placement={['top-end', 'bottom-end']}\n >\n <ChartLink url={deployUrl} hideIcon>\n <Icon awesome=\"rocket\" face=\"solid\" />\n </ChartLink>\n </Tooltip>\n );\n}\n\nfunction renderNannyUrl(row: RowData) {\n const {nannyUrl} = row;\n if (!nannyUrl) {\n return null;\n }\n return (\n <Tooltip\n className={block('link-icon')}\n content=\"Nanny\"\n placement={['top-end', 'bottom-end']}\n >\n <ChartLink url={nannyUrl} hideIcon>\n <Icon awesome={'cloud'} face=\"solid\" />\n </ChartLink>\n </Tooltip>\n );\n}\n\nfunction renderType(props: ColumnRenderProps<RowData>) {\n const {memory, vcpu} = props.row.data?.resource || {};\n const formattedMemory = format.Bytes(memory);\n const formattedVcpu = format.vCores(vcpu);\n return (\n <div>\n {formattedMemory}, {formattedVcpu}\n </div>\n );\n}\n\nconst TABLE_SETTINGS: Settings = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n\ninterface CellsBundleControllerProps {\n hideColumns?: Array<string>;\n items: Array<RowData>;\n}\n\nexport function CellsBundleController({items, hideColumns}: CellsBundleControllerProps) {\n const [filter, setFilter] = React.useState('');\n\n const data = React.useMemo(() => {\n return !filter ? items : filter_(items, ({address}) => -1 !== address?.indexOf(filter));\n }, [items, filter]);\n\n const columns = useColumns(hideColumns);\n\n const renderToolbar = (\n <Toolbar\n itemsToWrap={[\n {\n name: 'filter',\n node: (\n <Filter\n hasClear\n size=\"m\"\n type=\"text\"\n value={filter}\n placeholder=\"Enter address...\"\n onChange={setFilter}\n autofocus={false}\n debounce={400}\n skipBlurByEnter\n />\n ),\n },\n ]}\n />\n );\n\n return (\n <div className={block()}>\n <WithStickyToolbar\n toolbar={renderToolbar}\n content={\n <DataTableYT<RowData>\n useThemeYT\n columns={columns}\n data={data}\n settings={TABLE_SETTINGS}\n emptyDataMessage=\"No items to show\"\n />\n }\n />\n </div>\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getActiveBundleInstances} from '../../../store/selectors/tablet_cell_bundles';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {CellsBundleController} from '../cells/CellsBundleController';\n\nexport const BundleInstancesTab = () => {\n const items = useSelector(getActiveBundleInstances);\n\n return (\n <ErrorBoundary>\n <CellsBundleController items={items} />\n </ErrorBoundary>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getActiveBundleProxies} from '../../../store/selectors/tablet_cell_bundles';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {CellsBundleController} from '../cells/CellsBundleController';\n\nexport const BundleProxiesTab = () => {\n const items = useSelector(getActiveBundleProxies);\n return (\n <ErrorBoundary>\n <CellsBundleController items={items} hideColumns={['tablet_static_memory']} />\n </ErrorBoundary>\n );\n};\n","import get_ from 'lodash/get';\n\nimport type {KeysByDot} from '../../../../../shared/keys-by-dot';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type {\n BundleControllerConfig,\n BundleDataCenter,\n BundleDefaultConfigData,\n} from '../../../../store/reducers/tablet_cell_bundles';\nimport type {BundleParam} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList';\nimport type {BundleEditorDialogFormValues} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog';\nimport type {FormApi} from '../../../../components/Dialog';\n\ntype InnerKeys<T> = {[K in keyof T]: Array<keyof T[K]>};\ntype FormKeys = InnerKeys<Required<BundleEditorDialogFormValues>>;\n\nexport const bundleEditorDict: {\n keys: Pick<FormKeys, 'memory_limits' | 'resources' | 'cpu_limits'>;\n defaults: Pick<Required<BundleEditorDialogFormValues>, 'memory_limits' | 'cpu_limits'>;\n} = {\n keys: {\n resources: [\n 'rpc_proxy_count',\n 'rpc_proxy_resource_guarantee',\n 'tablet_node_count',\n 'tablet_node_resource_guarantee',\n ],\n memory_limits: [\n 'reserved',\n 'tablet_static',\n 'tablet_dynamic',\n 'compressed_block_cache',\n 'uncompressed_block_cache',\n 'versioned_chunk_meta',\n 'lookup_row_cache',\n 'key_filter_block_cache',\n ],\n cpu_limits: ['lookup_thread_pool_size', 'query_thread_pool_size', 'write_thread_pool_size'],\n },\n defaults: {\n memory_limits: {\n memory_reset: false,\n tablet_static: 0,\n tablet_dynamic: 0,\n compressed_block_cache: 0,\n uncompressed_block_cache: 0,\n versioned_chunk_meta: 0,\n lookup_row_cache: 0,\n key_filter_block_cache: 0,\n },\n cpu_limits: {\n threadPool_reset: false,\n lookup_thread_pool_size: 0,\n query_thread_pool_size: 0,\n write_thread_pool_size: 0,\n },\n },\n};\n\nexport const getResourceData = (source: object, resourceType: string) => {\n const usage = ypath.getValue(source, `/@resource_usage/${resourceType}`);\n const limit = ypath.getValue(source, `/@resource_limits/${resourceType}`);\n return {\n usage,\n limit,\n };\n};\n\nexport const getInitialFormValues = (\n data: object,\n bundleControllerConfig?: BundleControllerConfig,\n): Partial<BundleEditorDialogFormValues> => {\n const slug = ypath.getValue(data, '/@abc/slug');\n const changelogAccount = ypath.getValue(data, `/@options/changelog_account`);\n const snapshotAccount = ypath.getValue(data, `/@options/snapshot_account`);\n const {limit: tablet_count} = getResourceData(data, 'tablet_count');\n const {limit: tablet_static_memory} = getResourceData(data, 'tablet_static_memory');\n\n if (!bundleControllerConfig) {\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n tablet_count: tablet_count || 0,\n tablet_static_memory: tablet_static_memory || 0,\n },\n };\n }\n\n const {\n rpc_proxy_count,\n tablet_node_count,\n cpu_limits,\n memory_limits,\n rpc_proxy_resource_guarantee,\n tablet_node_resource_guarantee,\n } = bundleControllerConfig;\n\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n info: '', // system\n tablet_count: tablet_count || 0,\n rpc_proxy_count: rpc_proxy_count, // todo\n rpc_proxy_resource_guarantee: rpc_proxy_resource_guarantee || undefined,\n tablet_node_count: tablet_node_count,\n tablet_node_resource_guarantee: tablet_node_resource_guarantee || undefined,\n },\n memory_limits: {\n memory_reset: false, // system\n reserved: memory_limits?.reserved || 0,\n tablet_static: memory_limits?.tablet_static || 0,\n tablet_dynamic: memory_limits?.tablet_dynamic || 0,\n compressed_block_cache: memory_limits?.compressed_block_cache || 0,\n uncompressed_block_cache: memory_limits?.uncompressed_block_cache || 0,\n versioned_chunk_meta: memory_limits?.versioned_chunk_meta || 0,\n lookup_row_cache: memory_limits?.lookup_row_cache || 0,\n key_filter_block_cache: memory_limits?.key_filter_block_cache || 0,\n },\n cpu_limits: {\n threadPool_reset: false, //system\n lookup_thread_pool_size: cpu_limits?.lookup_thread_pool_size || 0,\n query_thread_pool_size: cpu_limits?.query_thread_pool_size || 0,\n write_thread_pool_size: cpu_limits?.write_thread_pool_size || 0,\n },\n };\n};\n\nfunction formatNetwork(value?: number) {\n const formatted = typeof value !== 'undefined' ? (value / 1000e6).toPrecision(2) : 0;\n return `${formatted} Gbit RX/TX`;\n}\n\nexport const createConfigurationList = (\n data: BundleDefaultConfigData['rpc_proxy_sizes'] | BundleDefaultConfigData['tablet_node_sizes'],\n) => {\n return Object.entries(data).map(([type, itemData]) => {\n const {net, vcpu, memory} = itemData.resource_guarantee;\n return {\n id: type,\n type,\n memory: hammer.format['Bytes'](memory),\n net: formatNetwork(net),\n vcpu: hammer.format['vCores'](vcpu),\n initialData: {...itemData.resource_guarantee, type},\n };\n });\n};\n\nexport const createParams = (formatType: 'Bytes' | 'vCores', total: number, used?: number) => {\n const [totalVal, totalPref] = hammer.format[formatType](total).split(' ');\n const params: BundleParam[] = [{title: 'Total', value: totalVal, postfix: totalPref}];\n\n if (typeof used !== 'undefined') {\n const difference = total - used;\n const [usedVal, usedPref] = hammer.format[formatType](difference).split(' ');\n params.push({\n title: 'Free',\n value: usedVal === hammer.format.NO_VALUE ? '0' : usedVal,\n postfix: usedPref,\n type: difference >= 0 ? 'positive' : 'negative',\n });\n }\n return params;\n};\n\nfunction prepareAbc(value: {id: number; slug: string}) {\n const {id, slug} = value;\n return id && slug ? {id, slug} : undefined;\n}\n\nexport const prepareSubmitBundle = (form: FormApi<BundleEditorDialogFormValues>) => {\n const prepare: {[path: string]: any} = {};\n const {dirtyFields, values} = form.getState();\n\n function addToChange(\n attr: string,\n field: KeysByDot<BundleEditorDialogFormValues>,\n prepareValue?: Function,\n ) {\n if (!dirtyFields[field]) {\n return;\n }\n const value = get_(values, field);\n prepare[attr] = typeof prepareValue === 'function' ? prepareValue(value) : value;\n }\n\n // Generel\n addToChange('@abc', 'general.abc', prepareAbc);\n addToChange('@options/changelog_account', 'general.changelog_account');\n addToChange('@options/snapshot_account', 'general.snapshot_account');\n // Resources\n addToChange('@resource_limits/tablet_count', 'resources.tablet_count');\n addToChange('@resource_limits/tablet_static_memory', 'resources.tablet_static_memory');\n addToChange('@bundle_controller_target_config/rpc_proxy_count', 'resources.rpc_proxy_count');\n addToChange(\n '@bundle_controller_target_config/tablet_node_count',\n 'resources.tablet_node_count',\n );\n addToChange(\n '@bundle_controller_target_config/rpc_proxy_resource_guarantee',\n 'resources.rpc_proxy_resource_guarantee',\n );\n addToChange(\n '@bundle_controller_target_config/tablet_node_resource_guarantee',\n 'resources.tablet_node_resource_guarantee',\n );\n // Memory_limits\n addToChange(\n '@bundle_controller_target_config/memory_limits/reserved',\n 'memory_limits.reserved',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_static',\n 'memory_limits.tablet_static',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_dynamic',\n 'memory_limits.tablet_dynamic',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/compressed_block_cache',\n 'memory_limits.compressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/uncompressed_block_cache',\n 'memory_limits.uncompressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/versioned_chunk_meta',\n 'memory_limits.versioned_chunk_meta',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/lookup_row_cache',\n 'memory_limits.lookup_row_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/key_filter_block_cache',\n 'memory_limits.key_filter_block_cache',\n );\n // Cpu_limits\n addToChange(\n '@bundle_controller_target_config/cpu_limits/lookup_thread_pool_size',\n 'cpu_limits.lookup_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/query_thread_pool_size',\n 'cpu_limits.query_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/write_thread_pool_size',\n 'cpu_limits.write_thread_pool_size',\n );\n\n return prepare;\n};\n\nexport const simpleBundleValidate = (v?: number | string) => {\n const toNumber = Number(v);\n let error;\n if (!Number.isFinite(toNumber)) {\n error = 'Incorrect value';\n }\n\n if (toNumber < 0) {\n error = 'Must be greater than or equal to zero';\n }\n\n return error;\n};\n\nexport const instanceCountValidate = ({\n length,\n}: BundleDataCenter[]): ((input?: number | string) => string | undefined) => {\n return (input?: number | string): string | undefined => {\n const number = Number(input);\n let error: string | undefined;\n\n if (!Number.isFinite(number)) {\n error = 'Incorrect value';\n } else if (number < 0) {\n error = 'Must be greater than or equal to zero';\n } else if (length > 0 && number % length !== 0) {\n error = `Must be divisible by ${length}`;\n }\n\n return error;\n };\n};\n\nexport function getBundleControllerResource<K extends 'cpu_limits' | 'memory_limits'>(\n current: Partial<Required<BundleEditorDialogFormValues>[K]>,\n defaultValues: Partial<Required<BundleEditorDialogFormValues>[K]>,\n resourceName: K,\n) {\n const result: Partial<BundleEditorDialogFormValues[K]> = {};\n\n for (const key of bundleEditorDict.keys[resourceName]) {\n result[key] = current[key] ?? defaultValues[key];\n }\n\n return result;\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport {Info} from '../../../../components/Info/Info';\nimport {BundleParamsList} from './components/BundleParamsList/BundleParamsList';\nimport {\n DialogField,\n DialogTabField,\n FormApi,\n YTDFDialog,\n makeFormSubmitError,\n} from '../../../../components/Dialog';\nimport hammer from '../../../../common/hammer';\n\nimport {getClusterUiConfig} from '../../../../store/selectors/global';\nimport {isDeveloper} from '../../../../store/selectors/global/is-developer';\nimport {\n hideTabletCellBundleEditor,\n setBundleEditorController,\n} from '../../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {\n getBundleEditorData,\n getTabletBundlesWriteableByName,\n} from '../../../../store/selectors/tablet_cell_bundles';\nimport {\n BundleResourceGuarantee,\n OrchidBundleResource,\n} from '../../../../store/reducers/tablet_cell_bundles';\nimport {getTabletCellBundleEditorState} from '../../../../store/selectors/tablet_cell_bundles/tablet-cell-bundle-editor';\n\nimport {\n bundleEditorDict,\n createConfigurationList,\n createParams,\n getBundleControllerResource,\n getInitialFormValues,\n getResourceData,\n instanceCountValidate,\n prepareSubmitBundle,\n simpleBundleValidate,\n} from '../../../../utils/tablet_cell_bundles/bundles/bundle-editor-dialog';\nimport UIFactory, {isAbcAllowed} from '../../../../UIFactory';\nimport {makeLink} from '../../../../utils/utils';\nimport {docsUrl} from '../../../../config';\n\nimport './BundleEditorDialog.scss';\nimport {Pick2} from '../../../../../@types/types';\n\nconst block = cn('bundle-editor');\n\nexport interface BundleEditorDialogFormValues {\n general: {\n abc?: {slug: string; id?: number};\n changelog_account?: string;\n snapshot_account?: string;\n };\n resources: {\n info?: string; // system\n rpc_proxy_count?: number; // todo\n rpc_proxy_resource_guarantee?: BundleResourceGuarantee;\n tablet_node_count?: number;\n tablet_node_resource_guarantee?: BundleResourceGuarantee;\n tablet_count?: number; // old\n tablet_static_memory?: number; // pld\n };\n memory_limits: {\n memory_reset: boolean; // system\n reserved?: number;\n tablet_static?: number;\n tablet_dynamic?: number;\n compressed_block_cache?: number;\n uncompressed_block_cache?: number;\n versioned_chunk_meta?: number;\n lookup_row_cache?: number;\n key_filter_block_cache?: number;\n };\n cpu_limits: {\n threadPool_reset?: boolean; //system\n lookup_thread_pool_size?: number;\n query_thread_pool_size?: number;\n write_thread_pool_size?: number;\n };\n}\n\nexport function BundleEditorDialog() {\n const {\n visibleEditor,\n bundleName,\n bundleData,\n data,\n bundleControllerData: orchidData,\n } = useSelector(getTabletCellBundleEditorState);\n\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n const {defaultConfig: bundleDefaultConfig} = useSelector(getBundleEditorData);\n\n const bundleControllerConfig = bundleData?.bundle_controller_target_config;\n const enableBundleController = bundleData?.enable_bundle_controller || false;\n\n const {usage: tabletCountUsage} = getResourceData(data, 'tablet_count');\n const {usage: tabletStaticMemoryUsage} = getResourceData(data, 'tablet_static_memory');\n\n const writeableByName = useSelector(getTabletBundlesWriteableByName);\n const allowTabletCount = writeableByName.get(bundleName ?? '');\n const allowEdit = useSelector(isDeveloper);\n\n const initialValues: Partial<BundleEditorDialogFormValues> = (() => {\n if (!enableBundleController) {\n return getInitialFormValues(data);\n }\n if (!bundleControllerConfig) {\n return {};\n }\n return getInitialFormValues(data, bundleControllerConfig);\n })();\n\n const [rpcConfigurations, nodeConfigurations, dcConfigurations] = (() => {\n if (!bundleDefaultConfig) {\n return [[], [], []];\n }\n const {rpc_proxy_sizes, tablet_node_sizes, data_centers} = bundleDefaultConfig;\n\n return [\n createConfigurationList(rpc_proxy_sizes),\n createConfigurationList(tablet_node_sizes),\n data_centers ? [...Object.values(data_centers)] : [],\n ];\n })();\n\n const renderGeneralTabs: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'general',\n title: 'General',\n type: 'tab-vertical',\n size: 's',\n fields: [\n ...(!isAbcAllowed()\n ? []\n : [\n {\n name: 'abc',\n type: 'abc-control' as const,\n caption: 'ABC Service',\n extras: {\n placeholder: 'Select ABC service...',\n disabled: !allowEdit,\n },\n },\n ]),\n {\n name: 'changelog_account',\n type: 'accounts-suggest-with-loading',\n caption: 'Changelog account',\n extras: {\n allowRootAccount: true,\n disabled: !allowEdit,\n },\n },\n {\n name: 'snapshot_account',\n type: 'accounts-suggest-with-loading',\n caption: 'Snapshot account',\n extras: {\n allowRootAccount: true,\n disabled: !allowEdit,\n },\n },\n ],\n };\n\n const renderResourceTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'resources',\n title: 'Resources',\n type: 'tab-vertical',\n size: 's',\n fields: [\n {\n name: 'info',\n type: 'block',\n fullWidth: true,\n touched: true,\n extras: {\n children: (\n <Info className={block('info')}>\n {UIFactory.renderTableCellBundleEditorNotice({\n bundleData,\n clusterUiConfig,\n })}\n <BundleParamsList\n className={block('params')}\n params={[\n {\n title: 'Memory',\n value: hammer.format['Bytes'](\n orchidData?.resource_quota.memory || '0',\n ),\n },\n {\n title: 'vCPU',\n value: hammer.format['vCores'](\n orchidData?.resource_quota.vcpu || '0',\n ),\n },\n {\n title: 'Tablet count',\n value: hammer.format.Number(\n initialValues.resources?.tablet_count,\n ),\n },\n ]}\n />\n </Info>\n ),\n },\n },\n ...(!allowTabletCount\n ? []\n : [\n {\n name: 'tablet_count',\n type: 'bundle-input',\n caption: 'Tablet count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n progress: {\n usage: tabletCountUsage,\n },\n },\n validator: simpleBundleValidate,\n } as const,\n ]),\n {section: 'RPC proxy'},\n {\n type: 'bundle-input',\n name: 'rpc_proxy_count',\n caption: 'RPC proxy count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n hasClear: true,\n },\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['dynamic-tables:cross-dc'], 'Help')),\n validator: instanceCountValidate(dcConfigurations),\n },\n {\n type: 'bundle-table-field',\n name: 'rpc_proxy_resource_guarantee',\n caption: 'Instance configuration',\n fullWidth: true,\n extras: {\n data: rpcConfigurations,\n },\n },\n {section: 'Tablet node'},\n {\n type: 'bundle-input',\n name: 'tablet_node_count',\n caption: 'Tablet node count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n hasClear: true,\n },\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['dynamic-tables:cross-dc'], 'Help')),\n validator: instanceCountValidate(dcConfigurations),\n },\n {\n type: 'bundle-table-field',\n name: 'tablet_node_resource_guarantee',\n caption: 'Instance configuration',\n fullWidth: true,\n extras: function (values, {form}) {\n const onRadioClick = (value: BundleResourceGuarantee) => {\n const nodeConfigurationType = value.type || '';\n\n const defaultMemory =\n bundleDefaultConfig?.tablet_node_sizes[nodeConfigurationType]\n .default_config.memory_limits || {};\n const defaultThreadPool =\n bundleDefaultConfig?.tablet_node_sizes[nodeConfigurationType]\n .default_config.cpu_limits || {};\n const defaultMemoryLimit =\n bundleDefaultConfig?.tablet_node_sizes[nodeConfigurationType]\n .default_config.memory_limits?.reserved || undefined;\n\n const resultMemory = getBundleControllerResource(\n values.memory_limits,\n defaultMemory,\n 'memory_limits',\n );\n const resultThreadPool = getBundleControllerResource(\n values.cpu_limits,\n defaultThreadPool,\n 'cpu_limits',\n );\n\n resultMemory.reserved = defaultMemoryLimit;\n\n form.change('memory_limits', {\n ...bundleEditorDict.defaults.memory_limits,\n ...resultMemory,\n });\n form.change('cpu_limits', {\n ...bundleEditorDict.defaults.cpu_limits,\n ...resultThreadPool,\n });\n };\n\n return {\n data: nodeConfigurations,\n onRadioClick,\n };\n },\n },\n ],\n };\n\n const renderSimpleResourceTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'resources',\n title: 'Resources',\n type: 'tab-vertical',\n size: 's',\n fields: [\n {\n name: 'tablet_count',\n type: 'bundle-input',\n caption: 'Tablet count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n progress: {\n usage: tabletCountUsage,\n },\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'tablet_static_memory',\n type: 'bundle-input',\n caption: 'Tablet static memory',\n extras: {\n format: 'Bytes',\n progress: {\n usage: tabletStaticMemoryUsage,\n },\n },\n validator: simpleBundleValidate,\n tooltip: (\n <span>\n Tablet static memory limit is based on hardware resources. Do not increase\n it unless you fully understand what you are doing. In case of emergency\n consider adding new tablet cells to the bundle, consulting with\n Components/Nodes page and increasing the limit only when new nodes are added\n to the bundle.\n </span>\n ),\n },\n ],\n };\n\n const renderMemoryTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'memory_limits',\n title: 'Memory',\n type: 'tab-vertical',\n size: 's',\n visibilityCondition: {\n when: 'resources.tablet_node_resource_guarantee',\n isActive: (v) => typeof v !== 'undefined',\n },\n fields: [\n {\n name: 'memory_reset',\n type: 'bundle-title',\n caption: 'Memory',\n touched: true,\n extras: (allValues, {form}) => {\n const tablet_node_resource_guarantee =\n allValues.resources?.tablet_node_resource_guarantee;\n\n const onReset = () => {\n if (\n !tablet_node_resource_guarantee ||\n !tablet_node_resource_guarantee.type ||\n !bundleDefaultConfig\n ) {\n return;\n }\n const type = tablet_node_resource_guarantee.type;\n const {tablet_node_sizes} = bundleDefaultConfig;\n const {memory_limits} = tablet_node_sizes[type].default_config;\n\n form.change('memory_limits', {\n ...bundleEditorDict.defaults.memory_limits,\n ...memory_limits,\n });\n };\n\n if (!tablet_node_resource_guarantee) {\n return {\n params: [],\n onReset,\n };\n }\n const {memory} = tablet_node_resource_guarantee;\n\n const used = bundleEditorDict.keys.memory_limits.reduce((sum, k) => {\n const v = allValues?.memory_limits?.[k];\n return typeof v !== 'number' || isNaN(v) ? sum : sum + v;\n }, 0);\n\n return {\n params: createParams('Bytes', memory, used),\n onReset,\n };\n },\n },\n {\n name: 'reserved',\n type: 'bundle-input',\n caption: 'Reserved',\n extras: {\n format: 'Bytes',\n disabled: true,\n },\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['bundle-controller:reserved-memory'], 'Help'),\n ),\n },\n {\n name: 'tablet_static',\n type: 'bundle-input',\n caption: 'Tablet static',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'tablet_dynamic',\n type: 'bundle-input',\n caption: 'Tablet dynamic',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'compressed_block_cache',\n type: 'bundle-input',\n caption: 'Compressed block cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'uncompressed_block_cache',\n type: 'bundle-input',\n caption: 'Uncompressed block cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'versioned_chunk_meta',\n type: 'bundle-input',\n caption: 'Versioned chunk meta',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'lookup_row_cache',\n type: 'bundle-input',\n caption: 'Lookup row cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'key_filter_block_cache',\n type: 'bundle-input',\n caption: 'Key filter block cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n ],\n };\n\n const renderThreadPoolTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'cpu_limits',\n title: 'Thread pools',\n type: 'tab-vertical',\n size: 's',\n visibilityCondition: {\n when: 'resources.tablet_node_resource_guarantee',\n isActive: (v) => typeof v !== 'undefined',\n },\n fields: [\n {\n name: 'threadPool_reset',\n type: 'bundle-title',\n caption: 'vCPU',\n extras: (allValues, {form}) => {\n const tablet_node_resource_guarantee =\n allValues.resources?.tablet_node_resource_guarantee;\n\n if (\n !tablet_node_resource_guarantee ||\n !tablet_node_resource_guarantee.type ||\n !bundleDefaultConfig\n ) {\n return {\n params: [],\n onReset: () => {},\n };\n }\n\n const onReset = () => {\n const type = tablet_node_resource_guarantee.type;\n if (!type) {\n return;\n }\n\n const {tablet_node_sizes} = bundleDefaultConfig;\n const {cpu_limits} = tablet_node_sizes[type].default_config;\n\n form.change('cpu_limits', {\n ...bundleEditorDict.defaults.cpu_limits,\n ...cpu_limits,\n });\n };\n\n const {vcpu} = tablet_node_resource_guarantee;\n\n return {\n params: createParams('vCores', vcpu),\n onReset,\n };\n },\n },\n {\n name: 'lookup_thread_pool_size',\n type: 'bundle-input',\n caption: 'Lookup thread pool size',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'query_thread_pool_size',\n type: 'bundle-input',\n caption: 'Query thread pool size',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'write_thread_pool_size',\n type: 'bundle-input',\n caption: 'Write thread pool size',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n ],\n };\n\n const fields = [renderGeneralTabs];\n if (enableBundleController) {\n fields.push(renderResourceTab, renderMemoryTab, renderThreadPoolTab);\n } else {\n fields.push(renderSimpleResourceTab);\n }\n\n const dispatch = useDispatch();\n const onClose = () => {\n dispatch(hideTabletCellBundleEditor());\n };\n\n const onSubmit = async (form: FormApi<BundleEditorDialogFormValues>) => {\n if (!bundleName) {\n return {};\n }\n\n const preparedData = prepareSubmitBundle(form);\n\n try {\n await dispatch(\n setBundleEditorController({\n bundleName,\n data: preparedData,\n }),\n );\n return undefined;\n } catch (error: any) {\n return makeFormSubmitError(error);\n }\n };\n\n if (isEmpty_(data)) {\n return null;\n }\n\n return (\n <YTDFDialog<BundleEditorDialogFormValues>\n className={block('dialog')}\n headerProps={{\n title: bundleName,\n }}\n size=\"l\"\n initialValues={initialValues}\n visible={visibleEditor}\n onAdd={onSubmit}\n onClose={onClose}\n fields={fields}\n validate={validateFormValues.bind(null, orchidData?.resource_quota)}\n />\n );\n}\n\nfunction validateFormValues(\n quota: OrchidBundleResource | undefined,\n values: BundleEditorDialogFormValues,\n) {\n const res: Pick2<typeof values, 'resources', 'info', string | undefined> &\n Pick2<typeof values, 'memory_limits', 'memory_reset', string | undefined> = {\n resources: {info: undefined},\n memory_limits: {memory_reset: undefined},\n };\n\n const {resources} = values;\n\n const currentAccLimit = Object.values(values.memory_limits || {}).reduce(\n (acc: number, v: number | boolean) => {\n if (typeof v !== 'number') {\n return acc;\n }\n return acc + v;\n },\n 0,\n );\n\n const tabletNode = resources.tablet_node_resource_guarantee;\n res.memory_limits.memory_reset =\n currentAccLimit > (tabletNode?.memory ?? 0)\n ? 'The sum of the memory limits exceeds the allowed values'\n : undefined;\n\n const {rpc_proxy_count = 0, tablet_node_count = 0} = resources;\n\n const requiredCpu =\n (tabletNode?.vcpu ?? 0) * tablet_node_count +\n (resources.rpc_proxy_resource_guarantee?.vcpu ?? 0) * rpc_proxy_count;\n\n const violatedResources = [];\n\n if (requiredCpu > quota?.vcpu!) {\n violatedResources.push(`${hammer.format.Number(requiredCpu / 1000)} cpu required`);\n }\n\n const requiredMemory =\n (tabletNode?.memory ?? 0) * tablet_node_count +\n (resources.rpc_proxy_resource_guarantee?.memory ?? 0) * rpc_proxy_count;\n\n if (requiredMemory > quota?.memory!) {\n violatedResources.push(`${hammer.format.Bytes(requiredMemory)} memory requried`);\n }\n\n res.resources.info = violatedResources.length ? violatedResources.join(', ') : undefined;\n\n return res;\n}\n","import type {ThunkAction} from 'redux-thunk';\nimport map_ from 'lodash/map';\nimport hammer from '../../../common/hammer';\nimport {\n CHAOS_BUNDLES_EDITOR_LOAD_FAILURE,\n CHAOS_BUNDLES_EDITOR_LOAD_REQUREST,\n CHAOS_BUNDLES_EDITOR_LOAD_SUCCESS,\n CHAOS_BUNDLES_EDITOR_PARTIAL,\n} from '../../../constants/tablets';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosCellBundleEditorAction} from '../../../store/reducers/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {prepareSetCommandForBatch} from '../../../utils/cypress-attributes';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\ntype ChaosCellBundleEditorThunkAction = ThunkAction<\n any,\n RootState,\n any,\n ChaosCellBundleEditorAction\n>;\n\nexport function showChaosCellBundleEditor(bundleName: string): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch({type: CHAOS_BUNDLES_EDITOR_LOAD_REQUREST});\n\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_PARTIAL,\n data: {bundleName, visibleEditor: true},\n });\n\n return ytApiV3Id\n .get(YTApiId.chaosCellBundlesEditData, {\n path: `//sys/chaos_cell_bundles/${bundleName}`,\n attributes: ['resource_usage', 'resource_limits', 'options', 'abc'],\n })\n .then((data: object) => {\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_LOAD_SUCCESS,\n data: {data},\n });\n })\n .catch((e: any) => {\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_LOAD_FAILURE,\n data: e,\n });\n });\n };\n}\n\nexport function hideChaosCellBundleEditor(): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_PARTIAL,\n data: {bundleName: undefined, loaded: true, visibleEditor: false},\n });\n };\n}\n\nexport type BundleResourceType = 'tablet_count' | 'tablet_static_memory';\n\nexport function setBundleQuota(params: {\n bundleName: string;\n resourceType: BundleResourceType;\n limit: number;\n}): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n const {bundleName, resourceType, limit} = params;\n\n const resource = hammer.format['Readable'](resourceType);\n\n return wrapApiPromiseByToaster(\n yt.v3.set(\n {\n path: `//sys/chaos_cell_bundles/${bundleName}/@resource_limits/${resourceType}`,\n },\n limit,\n ),\n {\n toasterName: `edit_bundle_${bundleName}`,\n successContent: `Set quota limit for ${resource}`,\n errorContent: `Cannot set quota limit for ${resource}`,\n },\n ).then(() => {\n dispatch(showChaosCellBundleEditor(bundleName));\n });\n };\n}\n\nexport interface EditBundleParams {\n attributes: {\n abc?: {\n id: number;\n slug: string;\n };\n };\n options: {\n changelog_account?: string;\n snapshot_account?: string;\n };\n}\n\nexport function setBunndleAttributes(\n bundle: string,\n attrs: Partial<EditBundleParams>,\n): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n console.log(attrs);\n const {attributes, options} = attrs;\n\n const bundlePath = `//sys/chaos_cell_bundles/${bundle}`;\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.chaosCellBundlesSetAttrs, {\n requests: [\n ...map_(attributes, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@${key}`, v),\n ),\n ...map_(options, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@options/${key}`, v),\n ),\n ],\n } as any),\n {\n toasterName: `update-bundle_${bundle}`,\n successContent: `${bundle} successfully updated`,\n errorContent: `${bundle} cannot be updated`,\n batchType: 'v3',\n errorTitle: 'Failed to update bundle configuration',\n },\n ).then(() => {\n dispatch(showChaosCellBundleEditor(bundle));\n });\n };\n}\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\n\nimport BundlesTable from '../../../pages/tablet_cell_bundles/bundles/BundlesTable';\nimport {\n setChaosActiveBundle,\n setChaosBundlesSortState,\n} from '../../../store/actions/chaos_cell_bundles';\nimport {showChaosCellBundleEditor} from '../../../store/actions/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport type {RootState} from '../../../store/reducers';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getChaosBundlesSortState,\n getChaosBundlesSorted,\n getChaosBundlesTableMode,\n getChaosBundlesTotal,\n getChaosIsLoaded,\n getChaosIsLoading,\n} from '../../../store/selectors/chaos_cell_bundles';\nimport {chaosActiveBundleLink} from '../../../utils/components/tablet-cells';\n\nconst columns: ComponentProps<typeof BundlesTable>['columns'] = [\n 'bundle',\n 'health',\n 'tabletCells',\n 'enable_bundle_balancer',\n 'changelog_account',\n 'actions',\n];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n loading: getChaosIsLoading(state),\n loaded: getChaosIsLoaded(state),\n data: getChaosBundlesSorted(state),\n total: getChaosBundlesTotal(state),\n sortState: getChaosBundlesSortState(state),\n cluster: getCluster(state),\n allowPerBundleAccounting: false,\n mode: getChaosBundlesTableMode(state),\n pathPrefix: '//sys/chaos_cell_bundles/',\n columns,\n activeBundleLink: chaosActiveBundleLink,\n writeableByName: {get: () => true},\n };\n};\n\nconst mapDispatchToProps = {\n setBundlesSortState: setChaosBundlesSortState,\n setActiveBundle: setChaosActiveBundle,\n showCellBundleEditor: showChaosCellBundleEditor,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTable);\n","import {connect} from 'react-redux';\n\nimport BundlesTableInstruments from '../../../pages/tablet_cell_bundles/bundles/BundlesTableInstruments';\nimport {\n setChaosBundlesAccountFilter,\n setChaosBundlesNameFilter,\n setChaosBundlesTagNodeFilter,\n setChaosFirstBundleAsActive,\n setChaosPartial,\n} from '../../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport type {BundlesTableMode} from '../../../store/reducers/chaos_cell_bundles';\nimport {\n getChaosBundlesAccountFilter,\n getChaosBundlesNameFilter,\n getChaosBundlesTableMode,\n getChaosBundlesTagNodeFilter,\n} from '../../../store/selectors/chaos_cell_bundles';\n\nconst modes: Array<BundlesTableMode> = ['default'];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n accountFilter: getChaosBundlesAccountFilter(state),\n bundlesTableMode: getChaosBundlesTableMode(state),\n nameFilter: getChaosBundlesNameFilter(state),\n tagNodeFilter: getChaosBundlesTagNodeFilter(state),\n modes,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsBundlesNameFilter: setChaosBundlesNameFilter,\n setTabletsBundlesAccountFilter: setChaosBundlesAccountFilter,\n setTabletsBundlesTagNodeFilter: setChaosBundlesTagNodeFilter,\n setTabletsFirstBundleAsActive: setChaosFirstBundleAsActive,\n setTabletsPartial: setChaosPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTableInstruments);\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport BundlesTable from '../../../pages/chaos_cell_bundles/bundles/BundlesTable.connected';\nimport BundlesTableInstruments from '../../../pages/chaos_cell_bundles/bundles/BundlesTableInstruments.connected';\nimport {\n copyHostListToClipboard,\n setChaosActiveBundle,\n} from '../../../store/actions/chaos_cell_bundles';\n\nexport default function ChaosCellBundles() {\n const dispatch = useDispatch();\n\n const handleCopyHostListToClipboard = React.useCallback(\n (bundle: string) => {\n dispatch(copyHostListToClipboard(bundle));\n },\n [dispatch],\n );\n\n React.useEffect(() => {\n dispatch(setChaosActiveBundle(''));\n }, [dispatch]);\n\n return (\n <ErrorBoundary>\n <WithStickyToolbar\n toolbar={<BundlesTableInstruments />}\n content={<BundlesTable copyHostListToClipboard={handleCopyHostListToClipboard} />}\n />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport {Dialog, Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../common/hammer';\nimport ypath from '../../../../common/thor/ypath';\nimport Button from '../../../../components/Button/Button';\nimport ErrorBlock from '../../../../components/Error/Error';\nimport Icon from '../../../../components/Icon/Icon';\nimport QuotaEditorWithHide from '../../../../components/QuotaEditor/QuotaEditorWithHide';\nimport Tabs from '../../../../components/Tabs/Tabs';\nimport {Bold} from '../../../../components/Text/Text';\nimport {AccountsSuggestWithLoading} from '../../../../pages/accounts/AccountsSuggest';\nimport {WithHeader} from '../../../../pages/accounts/tabs/general/Editor/content/GeneralContent';\nimport type {\n BundleResourceType,\n EditBundleParams,\n setBundleQuota,\n setBunndleAttributes,\n} from '../../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {ChaosCellBundleEditorState} from '../../../../store/reducers/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport {isDeveloper} from '../../../../store/selectors/global/is-developer';\nimport {calcProgressProps} from '../../../../utils/utils';\n\nimport './ChaosBundleEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\n\nconst block = cn('chaos-editor');\n\nconst TABS = [\n {\n value: 'general',\n text: 'General',\n show: true,\n },\n {\n value: 'resources',\n text: 'Resources',\n show: true,\n },\n];\n\nexport interface Props {\n bundleEditorData: ChaosCellBundleEditorState;\n hideBundleEditor(): void;\n setBundleQuota: typeof setBundleQuota;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nexport function ChaosBundleEditorDialog({\n bundleEditorData,\n hideBundleEditor,\n setBundleQuota,\n setBunndleAttributes,\n}: Props) {\n const {visibleEditor, bundleName, error} = bundleEditorData;\n\n const [activeTab, setActiveTab] = React.useState(TABS[0].value);\n\n const dispatch = useDispatch();\n const onClose = React.useCallback(() => {\n dispatch(hideBundleEditor());\n }, []);\n\n return !visibleEditor ? null : (\n <Dialog open={true} onClose={onClose}>\n <Dialog.Header caption={<React.Fragment>{bundleName}</React.Fragment>} />\n <Dialog.Divider />\n <Dialog.Body className={block('body')}>\n <div className={block('body-tabs')}>\n <Tabs\n items={TABS}\n size=\"m\"\n layout=\"vertical\"\n active={activeTab}\n onTabChange={setActiveTab}\n />\n </div>\n <div className={block('body-tab-content')}>\n {activeTab === 'resources' && (\n <React.Fragment>\n <ChaosBundleResourceUsage\n bundleEditorData={bundleEditorData}\n resourceType={'tablet_count'}\n setBundleQuota={setBundleQuota}\n />\n <ChaosBundleResourceUsage\n bundleEditorData={bundleEditorData}\n resourceType={'tablet_static_memory'}\n setBundleQuota={setBundleQuota}\n />\n {error && <ErrorBlock error={error} />}\n </React.Fragment>\n )}\n {activeTab === 'general' && (\n <ChaosBundleEditorGeneral\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n )}\n </div>\n </Dialog.Body>\n </Dialog>\n );\n}\n\ninterface ChaosBundleResourceUsageProps {\n bundleEditorData: ChaosCellBundleEditorState;\n resourceType: BundleResourceType;\n setBundleQuota: typeof setBundleQuota;\n}\n\nfunction ChaosBundleResourceUsage({\n bundleEditorData,\n resourceType,\n setBundleQuota,\n}: ChaosBundleResourceUsageProps) {\n const {data} = bundleEditorData;\n\n const limit = ypath.getValue(data, `/@resource_limits/${resourceType}`);\n const usage = ypath.getValue(data, `/@resource_usage/${resourceType}`);\n\n const [showEditor, setShowEditor] = React.useState(false);\n\n const toggleEditor = React.useCallback(() => {\n setShowEditor(!showEditor);\n }, [showEditor, setShowEditor]);\n\n const {value = 0, theme, text} = calcProgressProps(usage, limit, FORMATS[resourceType]);\n\n return (\n <div className={block('item')}>\n <div className={block('name-usage')}>\n <div className={block('name')}>\n <Bold>{hammer.format['Readable'](resourceType)}</Bold>\n </div>\n <Progress className={block('progress')} value={value} theme={theme} text={text} />\n <Button view=\"flat-secondary\" onClick={toggleEditor}>\n <Icon awesome={'pencil'} />\n </Button>\n </div>\n {showEditor && (\n <ChaosBundleResourceEditor\n bundleEditorData={bundleEditorData}\n resourceType={resourceType}\n setBundleQuota={setBundleQuota}\n toggleVisibility={toggleEditor}\n />\n )}\n </div>\n );\n}\n\nconst FORMATS: {[resourceType: string]: 'Number' | 'Bytes'} = {\n tablet_count: 'Number',\n tablet_static_memory: 'Bytes',\n};\n\ninterface ChaosBundleResourceEditorProps {\n bundleEditorData: ChaosCellBundleEditorState;\n resourceType: BundleResourceType;\n setBundleQuota: typeof setBundleQuota;\n toggleVisibility(): void;\n}\n\nfunction ChaosBundleResourceEditor({\n bundleEditorData,\n resourceType,\n setBundleQuota,\n toggleVisibility,\n}: ChaosBundleResourceEditorProps) {\n const {bundleName = '', data} = bundleEditorData;\n\n const limit = ypath.getValue(data, `/@resource_limits/${resourceType}`);\n const value = ypath.getValue(data, `/@resource_usage/${resourceType}`);\n\n const dispatch = useDispatch();\n\n const onSave = React.useCallback(\n (limit: number) => {\n dispatch(setBundleQuota({bundleName, resourceType, limit}));\n },\n [resourceType],\n );\n\n return (\n <QuotaEditorWithHide\n format={FORMATS[resourceType]}\n limit={limit}\n onHide={toggleVisibility}\n onSave={onSave}\n getInfoByName={() => ({limit, total: value})}\n currentAccount={bundleName}\n parentOfCurrentAccount={''}\n max={Infinity}\n />\n );\n}\n\ninterface ChaosBundleEditorGeneralProps {\n bundleEditorData: ChaosCellBundleEditorState;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nfunction ChaosBundleEditorGeneral({\n bundleEditorData,\n setBunndleAttributes,\n}: ChaosBundleEditorGeneralProps) {\n return (\n <React.Fragment>\n <ChaosBundleAbcServiceEditor\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n <ChaosBundleAccountEditor\n attributeName={'changelog_account'}\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n <ChaosBundleAccountEditor\n attributeName={'snapshot_account'}\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n </React.Fragment>\n );\n}\n\ninterface ChaosBundleAbcServiceEditorProps {\n bundleEditorData: ChaosCellBundleEditorState;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nfunction ChaosBundleAbcServiceEditor({\n bundleEditorData,\n setBunndleAttributes,\n}: ChaosBundleAbcServiceEditorProps) {\n const {bundleName, data} = bundleEditorData;\n const slug = ypath.getValue(data, '/@abc/slug');\n const allowEdit = useSelector(isDeveloper);\n\n const dispatch = useDispatch();\n const onAbcChange = React.useCallback(({id, slug}: {id?: number; slug?: string} = {}) => {\n if (!bundleName) {\n throw new Error('Name of bundle cannot be empty');\n }\n dispatch(\n setBunndleAttributes(bundleName, {\n attributes: {\n abc: id && slug ? {id, slug} : undefined,\n },\n }),\n );\n }, []);\n\n const control = UIFactory.renderControlAbcService({\n value: {slug},\n onChange: onAbcChange,\n placeholder: 'Select ABC service...',\n disabled: !allowEdit,\n });\n\n return !control ? null : (\n <WithHeader header={'ABC Service'}>\n <>{control}</>\n </WithHeader>\n );\n}\n\ninterface ChaosBundleAccountEditorProps {\n attributeName: keyof EditBundleParams['options'];\n bundleEditorData: ChaosCellBundleEditorState;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nfunction ChaosBundleAccountEditor(props: ChaosBundleAccountEditorProps) {\n const {attributeName, bundleEditorData, setBunndleAttributes} = props;\n const {bundleName, data} = bundleEditorData;\n const account = ypath.getValue(data, `/@options/${attributeName}`);\n const allowEdit = useSelector(isDeveloper);\n\n const dispatch = useDispatch();\n const onChange = React.useCallback((value?: string) => {\n if (!bundleName) {\n throw new Error('Name of bundle cannot be empty');\n }\n dispatch(\n setBunndleAttributes(bundleName, {\n options: {[attributeName]: value},\n }),\n );\n }, []);\n\n return (\n <WithHeader header={`${capitalize_(attributeName)} account`}>\n <AccountsSuggestWithLoading\n value={account || ''}\n onChange={onChange}\n disabled={!allowEdit}\n allowRootAccount={true}\n />\n </WithHeader>\n );\n}\n","import type {RootState} from '../../../store/reducers';\n\nexport const getChaosCellBundleEditorData = (state: RootState) => state.chaosCellBundleEditor;\n","import {connect} from 'react-redux';\n\nimport {ChaosBundleEditorDialog} from '../../../../pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog';\nimport {\n hideChaosCellBundleEditor,\n setBundleQuota,\n setBunndleAttributes,\n} from '../../../../store/actions/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport type {RootState} from '../../../../store/reducers';\nimport {getChaosCellBundleEditorData} from '../../../../store/selectors/chaos_cell_bundles/tablet-cell-bundle-editor';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n bundleEditorData: getChaosCellBundleEditorData(state),\n };\n};\n\nconst mapDispatchToProps = {\n hideBundleEditor: hideChaosCellBundleEditor,\n setBundleQuota,\n setBunndleAttributes,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(ChaosBundleEditorDialog);\n","import {connect} from 'react-redux';\n\nimport CellsTableInstruments from '../../../pages/tablet_cell_bundles/cells/CellsInstruments';\nimport {setChaosPartial} from '../../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {\n getChaosActiveBundle,\n getChaosCellsBundleFilter,\n getChaosCellsBundles,\n getChaosCellsHostFilter,\n getChaosCellsHosts,\n getChaosCellsHostsOfActiveBundle,\n getChaosCellsIdFilter,\n} from '../../../store/selectors/chaos_cell_bundles';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getChaosActiveBundle(state),\n activeBundleHosts: getChaosCellsHostsOfActiveBundle(state),\n\n idFilter: getChaosCellsIdFilter(state),\n bundleFilter: getChaosCellsBundleFilter(state),\n hostFilter: getChaosCellsHostFilter(state),\n\n bundles: getChaosCellsBundles(state),\n hosts: getChaosCellsHosts(state),\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial: setChaosPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTableInstruments);\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\n\nimport CellsTable from '../../../pages/tablet_cell_bundles/cells/CellsTable';\nimport {setChaosActiveBundle, setChaosPartial} from '../../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getChaosCellsSortState,\n getChaosCellsSorted,\n getChaosIsLoaded,\n getChaosIsLoading,\n} from '../../../store/selectors/chaos_cell_bundles';\nimport {\n chaosActiveBundleLink,\n chaosAttributesPath,\n chaosCellNavigationLink,\n} from '../../../utils/components/tablet-cells';\n\nconst columns: ComponentProps<typeof CellsTable>['columns'] = [\n 'id',\n 'bundle',\n 'health',\n 'peerAddress',\n 'state',\n 'actions',\n];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n cluster: getCluster(state),\n loading: getChaosIsLoading(state),\n loaded: getChaosIsLoaded(state),\n data: getChaosCellsSorted(state),\n sortState: getChaosCellsSortState(state),\n columns,\n activeBundleLink: chaosActiveBundleLink,\n attributesPath: chaosAttributesPath,\n cellNavigationLink: chaosCellNavigationLink,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial: setChaosPartial,\n setTabletsActiveBundle: setChaosActiveBundle,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTable);\n","import React from 'react';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport CellsInstruments from '../../../pages/chaos_cell_bundles/cells/CellsInstruments.connected';\nimport CellsTable from '../../../pages/chaos_cell_bundles/cells/CellsTable.connected';\n\nexport function ChaosCells() {\n return (\n <ErrorBoundary>\n <WithStickyToolbar toolbar={<CellsInstruments />} content={<CellsTable />} />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\n\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"tablet-errors-by-bundle\" */ './TabletErrorsByBundle');\n}\n\nexport const TabletErrorsLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).TabletErrorsByBundle};\n }),\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport Tabs from '../../components/Tabs/Tabs';\nimport {TabletsTab} from '../../constants/tablets';\nimport {Redirect, Route, Switch, useRouteMatch} from 'react-router';\nimport {BundleCells} from './cells/Cells';\nimport {TabSettings, makeTabProps} from '../../utils';\nimport {useUpdater} from '../../hooks/use-updater';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {fetchChaosBundles as fetchChaosBundles} from '../../store/actions/chaos_cell_bundles';\nimport {fetchTabletsBundles} from '../../store/actions/tablet_cell_bundles';\nimport {\n getTabletBundlesWriteableByName,\n getTabletsActiveBundle,\n getTabletsActiveBundleData,\n getTabletsError,\n} from '../../store/selectors/tablet_cell_bundles/index';\nimport Error from '../../components/Error/Error';\nimport Bundles from './bundles/Bundles';\n\nimport './TabletCellBundles.scss';\nimport BundleStatisticsTab from './bundle/BundleStatisticsTab';\nimport BundleMonitorTab from './bundle/BundleMonitorTab';\nimport BundleAclTab from './bundle/BundleAclTab';\nimport BundleMetaTable from './bundle/BundleMetaTable';\nimport {BundleInstancesTab} from './bundle/BundleInstancesTab';\nimport {BundleProxiesTab} from './bundle/BundleProxiesTab';\nimport Icon from '../../components/Icon/Icon';\nimport {tabletCellBundleDashboardUrl} from '../../utils/tablet_cell_bundles';\nimport {BundleEditorDialog as TabletBundleEditorDialog} from '../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog';\nimport {showTabletCellBundleEditor} from '../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport Button from '../../components/Button/Button';\nimport {\n getCluster,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../store/selectors/global';\nimport ChartLink from '../../components/ChartLink/ChartLink';\nimport {Page} from '../../constants/index';\nimport ChaosCellBundles from '../../pages/chaos_cell_bundles/bundles/Bundles';\nimport ChaosBundleEditorDialog from '../../pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog.connected';\nimport {ChaosCells} from '../../pages/chaos_cell_bundles/cells/Cells';\nimport UIFactory from '../../UIFactory';\nimport {TabletBundle} from '../../store/reducers/tablet_cell_bundles';\nimport {formatByParams} from '../../utils/format';\nimport {UI_TAB_SIZE} from '../../constants/global';\nimport {TabletErrorsLazy} from '../../pages/tablet-errors-by-bundle/lazy';\nimport {getConfigData} from '../../config/ui-settings';\n\nconst b = cn('tablets');\n\nconst TabletsTabs = React.memo(TabletsTabsImpl);\n\nfunction useShowSettings(activeBundle: string | undefined, enableBundleController: boolean) {\n return React.useMemo(() => {\n return reduce_(\n TabletsTab,\n (acc, v) => {\n if (v === TabletsTab.CHAOS_CELLS) {\n // TODO: fix me when a page of active chaos-cell-bundle is ready\n acc[v] = {show: false};\n } else {\n acc[v] = {show: v === TabletsTab.TABLET_CELLS || Boolean(activeBundle)};\n }\n return acc;\n },\n {} as Record<(typeof TabletsTab)[keyof typeof TabletsTab], TabSettings>,\n );\n }, [activeBundle, enableBundleController]);\n}\n\nexport default function TabletCellBundles() {\n const match = useRouteMatch();\n const cluster = useSelector(getCluster);\n\n const error = useSelector(getTabletsError);\n const activeBundle = useSelector(getTabletsActiveBundle);\n const {enable_bundle_controller: enableBundleController = false} =\n useSelector(getTabletsActiveBundleData) || ({} as Partial<TabletBundle>);\n const dispatch = useDispatch();\n const fetchFn = React.useCallback(() => {\n Promise.all([dispatch(fetchChaosBundles()), dispatch(fetchTabletsBundles())]);\n }, [dispatch]);\n useUpdater(fetchFn);\n\n const writeableByName = useSelector(getTabletBundlesWriteableByName);\n\n const bundleWritable = writeableByName.get(activeBundle);\n\n const allowEdit = enableBundleController || bundleWritable;\n\n const showSettings = useShowSettings(activeBundle, enableBundleController);\n\n const statsTab = showSettings[TabletsTab.STATISTICS];\n statsTab.show = statsTab.show && Boolean(UIFactory.getStatisticsComponentForBundle());\n\n const monTab = showSettings[TabletsTab.MONITOR];\n\n const {\n component: monitoringComponent,\n urlTemplate,\n title: monitoringTitle,\n } = UIFactory.getMonitoringForBundle() ?? {};\n monTab.show = monTab.show && Boolean(monitoringComponent || urlTemplate);\n\n if (urlTemplate) {\n monTab.external = true;\n monTab.routed = false;\n monTab.url = formatByParams(urlTemplate, {\n ytCluster: cluster,\n ytTabletCellBundle: activeBundle,\n });\n }\n\n const instTab = showSettings[TabletsTab.INSTANCES];\n instTab.show = instTab.show && enableBundleController;\n\n const proxyTab = showSettings[TabletsTab.PROXIES];\n proxyTab.show = proxyTab.show && enableBundleController;\n\n const errorsTab = showSettings[TabletsTab.TABLET_ERRORS];\n errorsTab.show = errorsTab.show && getConfigData().allowTabletErrorsAPI;\n\n return (\n <div className=\"elements-page__content\">\n <section className={b(null, 'elements-main-section')}>\n <div className={b('content')}>\n <div className={b('heading')}>\n <ActiveBundleDetails\n allowEdit={allowEdit}\n activeBundle={activeBundle}\n cluster={cluster}\n />\n <div className={b('tabs')}>\n <TabletsTabs\n activeBundle={activeBundle}\n showSettings={showSettings}\n monitoringTitle={monitoringTitle}\n />\n </div>\n </div>\n </div>\n {error && <Error error={error} />}\n <div className={b('tab-viewer')}>\n <Switch>\n {instTab && (\n <Route\n path={`${match.path}/${TabletsTab.INSTANCES}`}\n component={BundleInstancesTab}\n />\n )}\n {proxyTab && (\n <Route\n path={`${match.path}/${TabletsTab.PROXIES}`}\n component={BundleProxiesTab}\n />\n )}\n {errorsTab.show && (\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_ERRORS}`}\n render={() => <TabletErrorsLazy bundle={activeBundle} />}\n />\n )}\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}`}\n component={BundleCells}\n />\n <Route\n path={`/${cluster}/${Page.CHAOS_CELL_BUNDLES}/${TabletsTab.CHAOS_CELLS}`}\n component={ChaosCells}\n />\n {statsTab.show && (\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.STATISTICS}`}\n component={BundleStatisticsTab}\n />\n )}\n {monTab.show && monitoringComponent && (\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.MONITOR}`}\n render={() => <BundleMonitorTab component={monitoringComponent} />}\n />\n )}\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.ACL}`}\n render={() => <BundleAclTab className={b('acl-tab')} />}\n />\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}`}\n component={Bundles}\n />\n <Route\n path={`/${cluster}/${Page.CHAOS_CELL_BUNDLES}`}\n component={ChaosCellBundles}\n />\n <Redirect\n from={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/*`}\n to={match.path}\n />\n </Switch>\n </div>\n </section>\n <TabletBundleEditorDialog />\n <ChaosBundleEditorDialog />\n </div>\n );\n}\n\nfunction ActiveBundleDetails({\n activeBundle,\n allowEdit,\n cluster,\n}: {\n activeBundle?: string;\n allowEdit?: boolean;\n cluster: string;\n}) {\n const dispatch = useDispatch();\n const allowAccounting = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n const showEditor = React.useCallback(() => {\n if (activeBundle) {\n dispatch(showTabletCellBundleEditor(activeBundle));\n }\n }, [activeBundle, dispatch]);\n\n return (\n <React.Fragment>\n {activeBundle && (\n <div className=\"elements-heading elements-heading_size_l\">\n <div className={b('bundle-name')}>\n <div className={b('bundle-name-left')}>\n {activeBundle}\n <ChartLink\n className={b('dashboard-link')}\n theme={'ghost'}\n url={tabletCellBundleDashboardUrl(cluster, activeBundle)}\n />\n </div>\n {allowAccounting && allowEdit && (\n <div className={b('tabs-edit-btn')}>\n <Button className={b('edit-btn')} size={'m'} onClick={showEditor}>\n <Icon awesome={'pencil'} />\n Edit Bundle\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n <BundleMetaTable />\n </React.Fragment>\n );\n}\n\nfunction makeAllTabsProps(matchUrl: string, cluster: string) {\n const res = makeTabProps(matchUrl, {});\n res.items = [\n {\n value: Page.TABLET_CELL_BUNDLES,\n text: 'Tablet cell bundles',\n show: true,\n url: `/${cluster}/${Page.TABLET_CELL_BUNDLES}`,\n },\n {\n value: TabletsTab.TABLET_CELLS,\n text: 'Tablet cells',\n show: true,\n url: `/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}`,\n },\n {\n value: Page.CHAOS_CELL_BUNDLES,\n text: 'Chaos cell bundles',\n show: true,\n url: `/${cluster}/${Page.CHAOS_CELL_BUNDLES}`,\n },\n {\n value: TabletsTab.CHAOS_CELLS,\n text: 'Chaos cells',\n show: true,\n url: `/${cluster}/${Page.CHAOS_CELL_BUNDLES}/${TabletsTab.CHAOS_CELLS}`,\n },\n ];\n return res;\n}\n\nfunction TabletsTabsImpl({\n activeBundle,\n showSettings,\n monitoringTitle = 'Monitoring',\n}: {\n activeBundle: string | undefined;\n showSettings: Record<string, TabSettings>;\n monitoringTitle?: string;\n}) {\n const match = useRouteMatch<{cluster: string}>();\n const {cluster} = match.params;\n\n const tabProps = activeBundle\n ? makeTabProps(match.url, TabletsTab, showSettings, undefined, {\n [TabletsTab.MONITOR]: monitoringTitle,\n })\n : makeAllTabsProps(match.url, cluster);\n\n return (\n <Tabs\n {...tabProps}\n className={b('tabs')}\n routed\n routedPreserveLocation\n exactNavLink\n size={UI_TAB_SIZE}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Breadcrumbs, BreadcrumbsItem} from '../../components/Breadcrumbs';\nimport {useHistory} from 'react-router';\n\nimport Favourites, {FavouritesItem} from '../../components/Favourites/Favourites';\nimport {Page} from '../../constants/index';\nimport {TabletsTab} from '../../constants/tablets';\nimport {RowWithName} from '../../containers/AppNavigation/TopRowContent/SectionName';\nimport {getCluster, getClusterUiConfig} from '../../store/selectors/global';\nimport type {TabletsCellBundlesBreadcrumbsItem} from '../../store/selectors/tablet_cell_bundles';\nimport type {ValueOf} from '../../types';\n\nimport './TabletCellBundlesTopRowContent.scss';\nimport {getAppBrowserHistory} from '../../store/window-store';\nimport UIFactory from '../../UIFactory';\nimport {TabletBundle} from '../../store/reducers/tablet_cell_bundles';\n\nconst block = cn('tablet-cell-bundles-top-row-content');\n\nexport interface PropsFromRedux {\n isActiveBundleInFavourites: boolean;\n activeBundle: string;\n activeBundleData?: TabletBundle;\n bcItems: TabletsCellBundlesBreadcrumbsItem[];\n page: ValueOf<typeof Page>;\n setActiveBundle(activeBundle: string): void;\n favourites: Array<FavouritesItem>;\n toggleFavourite(bundle: string): void;\n}\n\nfunction TabletCellBundlesTopRowContent({\n isActiveBundleInFavourites,\n favourites,\n toggleFavourite,\n activeBundle,\n activeBundleData,\n bcItems,\n page,\n setActiveBundle,\n}: PropsFromRedux) {\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <RowWithName page={page} urlParams={{activeBundle: ''}}>\n <BundleFavourites\n isActiveBundleInFavourites={isActiveBundleInFavourites}\n activeBundle={activeBundle}\n page={page}\n setActiveBundle={setActiveBundle}\n items={favourites}\n toggleFavourite={toggleFavourite}\n />\n <BundleBreadcrumbs\n className={block('breadcrumbs')}\n bcItems={bcItems}\n setActiveBundle={setActiveBundle}\n />\n {UIFactory.renderTopRowExtraControlsForBundle({\n itemClassName: block('extra-control'),\n clusterUiConfig,\n bundle: activeBundleData,\n })}\n </RowWithName>\n );\n}\n\ninterface BundleFavouritesProps {\n isActiveBundleInFavourites: boolean;\n activeBundle: string;\n page: ValueOf<typeof Page>;\n setActiveBundle(activeBundle: string): void;\n toggleFavourite(bundle: string): void;\n items: Array<FavouritesItem>;\n}\n\nfunction BundleFavourites({\n isActiveBundleInFavourites,\n items,\n activeBundle,\n page,\n setActiveBundle,\n toggleFavourite,\n}: BundleFavouritesProps) {\n const cluster = useSelector(getCluster);\n\n const handleFavouriteItemClick = React.useCallback(\n (item: FavouritesItem) => {\n setActiveBundle(item.path);\n if (!item.path) {\n getAppBrowserHistory().push(`/${cluster}/${page}`);\n } else {\n getAppBrowserHistory().push(\n `/${cluster}/${page}/${TabletsTab.TABLET_CELLS}?activeBundle=${item.path}`,\n );\n }\n },\n [cluster, setActiveBundle],\n );\n\n const handleFavouriteToggle = React.useCallback(() => {\n toggleFavourite(activeBundle);\n }, [toggleFavourite]);\n\n return (\n <Favourites\n className={block('favourites')}\n isActive={isActiveBundleInFavourites}\n items={items}\n onItemClick={handleFavouriteItemClick}\n onToggle={handleFavouriteToggle}\n toggleDisabled={!activeBundle}\n theme={'clear'}\n />\n );\n}\n\ninterface BundleBreadcrumbsProps {\n className: string;\n bcItems: TabletsCellBundlesBreadcrumbsItem[];\n setActiveBundle(activeBundle: string): void;\n}\n\nfunction BundleBreadcrumbs({className, bcItems, setActiveBundle}: BundleBreadcrumbsProps) {\n const history = useHistory();\n\n const handleItemClick = React.useCallback(\n (item: string | number) => {\n setActiveBundle(item.toString());\n },\n [setActiveBundle],\n );\n\n const items = React.useMemo(() => {\n return bcItems.map((item) => {\n const text = item.text || item.title || '';\n return (\n <BreadcrumbsItem key={text} href={item.href}>\n {text}\n </BreadcrumbsItem>\n );\n });\n }, [bcItems]);\n\n return (\n <Breadcrumbs\n navigate={history.push}\n onAction={handleItemClick}\n className={className}\n showRoot\n >\n {items}\n </Breadcrumbs>\n );\n}\n\nexport default TabletCellBundlesTopRowContent;\n","import {connect} from 'react-redux';\n\nimport {Page} from '../../constants/index';\nimport TabletCellBundlesTopRowContent from '../../pages/tablet_cell_bundles/TabletCellBundlesTopRowContent';\nimport {setTabletsActiveBundle} from '../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../store/reducers';\nimport {\n getTabletsActiveBundle,\n getTabletsActiveBundleData,\n getTabletsBreadcrumbItems,\n} from '../../store/selectors/tablet_cell_bundles';\nimport {bundlesToggleFavourite} from '../../store/actions/favourites';\nimport {getFavouriteBundles, isActiveBundleInFavourites} from '../../store/selectors/favourites';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getTabletsActiveBundle(state),\n activeBundleData: getTabletsActiveBundleData(state),\n bcItems: getTabletsBreadcrumbItems(state),\n page: Page.TABLET_CELL_BUNDLES,\n favourites: getFavouriteBundles(state),\n isActiveBundleInFavourites: isActiveBundleInFavourites(state),\n };\n};\n\nconst mapDispatchToProps = {\n setActiveBundle: setTabletsActiveBundle,\n toggleFavourite: bundlesToggleFavourite,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(TabletCellBundlesTopRowContent);\n","import {connect} from 'react-redux';\n\nimport {Page} from '../../constants/index';\nimport TabletCellBundlesTopRowContent from '../../pages/tablet_cell_bundles/TabletCellBundlesTopRowContent';\nimport {setChaosActiveBundle} from '../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../store/reducers';\nimport {\n getChaosActiveBundle,\n getChaosActiveBundleData,\n getChaosBreadcrumbItems,\n} from '../../store/selectors/chaos_cell_bundles';\nimport {\n getFavouriteChaosBundles,\n isActiveChaosBundleInFavourites,\n} from '../../store/selectors/favourites';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getChaosActiveBundle(state),\n activeBundleData: getChaosActiveBundleData(state),\n bcItems: getChaosBreadcrumbItems(state),\n page: Page.CHAOS_CELL_BUNDLES,\n favourites: getFavouriteChaosBundles(state),\n isActiveBundleInFavourites: isActiveChaosBundleInFavourites(state),\n };\n};\n\nconst mapDispatchToProps = {\n setActiveBundle: setChaosActiveBundle,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(TabletCellBundlesTopRowContent);\n","import {ThunkAction} from 'redux-thunk';\nimport FontFaceObserver from 'fontfaceobserver';\nimport {getFontFamilies} from '../../../store/selectors/global/fonts';\nimport {RootState} from '../../../store/reducers';\n\n// TODO: consider switching back for <link rel=\"preload\"> once it's supported in all major browsers\nexport function waitForFontFamily(fontFamily: string) {\n return new FontFaceObserver(fontFamily).load(null, 10000);\n}\n\nexport function waitForFontFamilies<T>(\n promiseToWrap: T,\n): ThunkAction<Promise<T>, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const fontFamilies = getFontFamilies(getState());\n return Promise.all([\n waitForFontFamily(fontFamilies.regular),\n waitForFontFamily(fontFamilies.monospace),\n ]).then(() => {\n return promiseToWrap;\n });\n };\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n","import { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'gc-';\nexport const cn = withNaming({ e: '__', m: '_', v: '_' });\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_', v: '_' });\n","import { block } from '../utils/cn';\nexport const progressBlock = block('progress');\n","import React from 'react';\nimport { progressBlock } from './constants';\nexport function ProgressInnerText(props) {\n const { text, offset = 0 } = props;\n if (!text) {\n return null;\n }\n return (React.createElement(\"div\", { className: progressBlock('text-inner'), style: { transform: `translateX(calc(var(--g-flow-direction) * ${-offset}%))` } }, text));\n}\n","import React from 'react';\nimport { progressBlock } from './constants';\nexport function ProgressStackItem({ item }) {\n const { value, color, className, theme, title, content, loading } = item;\n const modifiers = {\n loading,\n };\n if (typeof color === 'undefined') {\n modifiers.theme = theme || 'default';\n }\n if (Number.isFinite(value)) {\n return (React.createElement(\"div\", { className: progressBlock('item', modifiers, className), style: { width: `${value}%`, backgroundColor: color }, title: title }, content));\n }\n return null;\n}\n","export function getOffset(value) {\n return value < 100 ? value - 100 : 0;\n}\nexport function getValueFromStack(stack) {\n return stack.reduce((sum, { value }) => sum + value, 0);\n}\nexport function getTheme(props) {\n const { theme, colorStops, colorStopsValue, value } = props;\n if (colorStops) {\n const matchingColorStopItem = colorStops.find((item, index) => {\n const currentValue = typeof colorStopsValue === 'number' ? colorStopsValue : value;\n const minValue = index > 1 ? colorStops[index - 1].stop : 0;\n const maxValue = index < colorStops.length - 1 ? item.stop : 100;\n return currentValue >= minValue && currentValue <= maxValue;\n });\n return matchingColorStopItem ? matchingColorStopItem.theme : theme;\n }\n return theme;\n}\n","import React from 'react';\nimport { ProgressInnerText } from './ProgressInnerText';\nimport { ProgressStackItem } from './ProgressStackItem';\nimport { progressBlock } from './constants';\nimport { getOffset, getValueFromStack } from './utils';\nexport function ProgressWithStack(props) {\n const { stack, stackClassName, value, text } = props;\n const offset = getOffset(value || getValueFromStack(stack));\n return (React.createElement(\"div\", { className: progressBlock('stack', stackClassName), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` } },\n React.createElement(\"div\", { className: progressBlock('item'), style: { width: `${-offset}%` } }),\n stack.map((item, index) => (React.createElement(ProgressStackItem, { key: index, item: item }))),\n React.createElement(ProgressInnerText, { offset: offset, text: text })));\n}\n","import React from 'react';\nimport { ProgressInnerText } from './ProgressInnerText';\nimport { progressBlock } from './constants';\nimport { getOffset, getTheme } from './utils';\nexport function ProgressWithValue(props) {\n const { value, loading, text } = props;\n const offset = getOffset(value);\n if (!Number.isFinite(value)) {\n return null;\n }\n return (React.createElement(\"div\", { className: progressBlock('item', { theme: getTheme(props), loading }), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` } },\n React.createElement(ProgressInnerText, { offset: offset, text: text })));\n}\n","import React from 'react';\nimport { ProgressWithStack } from './ProgressWithStack';\nimport { ProgressWithValue } from './ProgressWithValue';\nimport { progressBlock } from './constants';\nimport { isProgressWithStack } from './types';\nimport './Progress.css';\nexport const Progress = React.forwardRef(function Progress(props, ref) {\n const { text = '', theme = 'default', size = 'm', loading = false, className, qa } = props;\n const resolvedProps = Object.assign(Object.assign({}, props), { text, theme, size, loading });\n return (React.createElement(\"div\", { ref: ref, className: progressBlock({ size }, className), \"data-qa\": qa },\n React.createElement(\"div\", { className: progressBlock('text') }, text),\n isProgressWithStack(resolvedProps) ? (React.createElement(ProgressWithStack, Object.assign({}, resolvedProps))) : (React.createElement(ProgressWithValue, Object.assign({}, resolvedProps)))));\n});\n","export function isProgressWithStack(props) {\n return props.stack !== undefined;\n}\n","/* Font Face Observer v2.3.0 - © Bram Stein. License: BSD-3-Clause */(function(){function p(a,c){document.addEventListener?a.addEventListener(\"scroll\",c,!1):a.attachEvent(\"scroll\",c)}function u(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function b(){document.removeEventListener(\"DOMContentLoaded\",b);a()}):document.attachEvent(\"onreadystatechange\",function g(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",g),a()})};function w(a){this.g=document.createElement(\"div\");this.g.setAttribute(\"aria-hidden\",\"true\");this.g.appendChild(document.createTextNode(a));this.h=document.createElement(\"span\");this.i=document.createElement(\"span\");this.m=document.createElement(\"span\");this.j=document.createElement(\"span\");this.l=-1;this.h.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.i.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\nthis.j.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.m.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.h.appendChild(this.m);this.i.appendChild(this.j);this.g.appendChild(this.h);this.g.appendChild(this.i)}\nfunction x(a,c){a.g.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+c+\";\"}function B(a){var c=a.g.offsetWidth,b=c+100;a.j.style.width=b+\"px\";a.i.scrollLeft=b;a.h.scrollLeft=a.h.scrollWidth+100;return a.l!==c?(a.l=c,!0):!1}function C(a,c){function b(){var e=g;B(e)&&null!==e.g.parentNode&&c(e.l)}var g=a;p(a.h,b);p(a.i,b);B(a)};function D(a,c,b){c=c||{};b=b||window;this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\";this.context=b}var E=null,F=null,G=null,H=null;function I(a){null===F&&(M(a)&&/Apple/.test(window.navigator.vendor)?(a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent),F=!!a&&603>parseInt(a[1],10)):F=!1);return F}function M(a){null===H&&(H=!!a.document.fonts);return H}\nfunction N(a,c){var b=a.style,g=a.weight;if(null===G){var e=document.createElement(\"div\");try{e.style.font=\"condensed 100px sans-serif\"}catch(q){}G=\"\"!==e.style.font}return[b,g,G?a.stretch:\"\",\"100px\",c].join(\" \")}\nD.prototype.load=function(a,c){var b=this,g=a||\"BESbswy\",e=0,q=c||3E3,J=(new Date).getTime();return new Promise(function(K,L){if(M(b.context)&&!I(b.context)){var O=new Promise(function(r,t){function h(){(new Date).getTime()-J>=q?t(Error(\"\"+q+\"ms timeout exceeded\")):b.context.document.fonts.load(N(b,'\"'+b.family+'\"'),g).then(function(n){1<=n.length?r():setTimeout(h,25)},t)}h()}),P=new Promise(function(r,t){e=setTimeout(function(){t(Error(\"\"+q+\"ms timeout exceeded\"))},q)});Promise.race([P,O]).then(function(){clearTimeout(e);\nK(b)},L)}else u(function(){function r(){var d;if(d=-1!=k&&-1!=l||-1!=k&&-1!=m||-1!=l&&-1!=m)(d=k!=l&&k!=m&&l!=m)||(null===E&&(d=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),E=!!d&&(536>parseInt(d[1],10)||536===parseInt(d[1],10)&&11>=parseInt(d[2],10))),d=E&&(k==y&&l==y&&m==y||k==z&&l==z&&m==z||k==A&&l==A&&m==A)),d=!d;d&&(null!==f.parentNode&&f.parentNode.removeChild(f),clearTimeout(e),K(b))}function t(){if((new Date).getTime()-J>=q)null!==f.parentNode&&f.parentNode.removeChild(f),\nL(Error(\"\"+q+\"ms timeout exceeded\"));else{var d=b.context.document.hidden;if(!0===d||void 0===d)k=h.g.offsetWidth,l=n.g.offsetWidth,m=v.g.offsetWidth,r();e=setTimeout(t,50)}}var h=new w(g),n=new w(g),v=new w(g),k=-1,l=-1,m=-1,y=-1,z=-1,A=-1,f=document.createElement(\"div\");f.dir=\"ltr\";x(h,N(b,\"sans-serif\"));x(n,N(b,\"serif\"));x(v,N(b,\"monospace\"));f.appendChild(h.g);f.appendChild(n.g);f.appendChild(v.g);b.context.document.body.appendChild(f);y=h.g.offsetWidth;z=n.g.offsetWidth;A=v.g.offsetWidth;t();\nC(h,function(d){k=d;r()});x(h,N(b,'\"'+b.family+'\",sans-serif'));C(n,function(d){l=d;r()});x(n,N(b,'\"'+b.family+'\",serif'));C(v,function(d){m=d;r()});x(v,N(b,'\"'+b.family+'\",monospace'))})})};\"object\"===typeof module?module.exports=D:(window.FontFaceObserver=D,window.FontFaceObserver.prototype.load=D.prototype.load);}());\n"],"names":["shouldClientNavigate","link","modifiers","target","getAttribute","href","origin","location","hasAttribute","metaKey","ctrlKey","altKey","shiftKey","b","BreadcrumbItem","props","Element","domProps","filterDOMProps","labelable","title","children","handleAction","event","disabled","current","preventDefault","onAction","currentTarget","navigate","HTMLAnchorElement","isDefaultPrevented","routerOptions","isDisabled","linkProps","onClick","undefined","hrefLang","rel","download","ping","referrerPolicy","role","tabIndex","onKeyDown","key","itemType","Object","assign","className","BreadcrumbsSeparator","separator","displayName","addComponentKeysets","en","Item","_props","ref","listRef","containerRef","useForkRef","items","forEach","child","index","push","visibleItemsCount","setVisibleItemsCount","length","calculated","setCalculated","handleResize","onResize","element","window","ResizeObserver","addEventListener","removeEventListener","observer","entries","observe","disconnect","useResizeObserver","lastChildren","visibleItems","list","listItems","Array","from","containerWidth","offsetWidth","newVisibleItemsCount","calculatedWidth","maxItems","Infinity","rootWidth","showRoot","item","shift","scrollWidth","lastItem","pop","Math","min","i","max","recalculate","contents","breadcrumbs","endItems","rootItem","hiddenItems","slice","menuItem","DropdownMenu","map","el","text","action","_a","popupProps","staircase","popupStyle","placement","popupPlacement","renderSwitcher","Button","i18n","size","view","Icon","lastIndex","breadcrumbItems","isCurrent","calculating","qa","style","cn","Breadcrumbs","_ref","_objectWithoutProperties","_excluded","_jsx","UBreadcrumbs","_objectSpread","ChartLink","url","theme","hideIcon","face","wrapContent","icon","awesome","content","_jsxs","React","Link","block","Favourites","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","args","_key","call","apply","concat","state","isActive","toggleActive","onToggle","setState","prevState","onItemClick","_createClass","value","_this2","this","dropItems","map_","path","switcher","renderButton","pin","empty","Hotkey","settings","keys","handler","scope","buttonProps","themeProps","_this$props","toggleDisabled","clear","selected","renderDropDownMenu","renderHotkey","Component","PropTypes","xmlns","fill","viewBox","d","Info","data","infoIcon","WaitForFont","_useSelector","useSelector","getFontFamilies","regular","monospace","_React$useState","_React$useState2","_slicedToArray","ready","setReady","Promise","all","waitForFontFamily","then","BundleParamsList","params","_ref$size","param","type","postfix","_React$Component","CellsTableInstruments","onIdFilter","id","setTabletsPartial","cellsIdFilter","onBundleFilter","bundle","cellsBundleFilter","onHostFilterChange","hostFilter","onHostSelected","host","cellsHostFilter","onHostInputBlur","getBundleFilterItems","bundles","filter_","indexOf","getHostFilterItems","hosts","idFilter","bundleFilter","activeBundle","activeBundleHosts","Toolbar","itemsToWrap","name","node","Filter","hasClear","placeholder","onChange","autofocus","shrinkable","growable","wrapperClassName","_toConsumableArray","Suggest","filter","_items","popupClassName","onTextUpdate","onBlur","autoFocus","ClipboardButton","buttonText","cancelHelper","CancelHelper","fetchTabletsBundles","dispatch","TABLETS_BUNDLES_LOAD_REQUEST","requests","command","parameters","attributes","USE_MAX_SIZE","removeAllRequests","ytApiV3Id","executeBatch","YTApiId","tabletCellBundles","cancellation","saveCancelToken","results","_results","_toArray","isBundleControllerSupported","output","rest","_rest","cells","error","getBatchError","allCells","prepareTabletCells","allBundles","prepareBundles","zones","Map","has","set","getZones","getState","user","getCurrentUserName","makeCheckPermissionBatchSubRequestUI","permission","wrapApiPromiseByToaster","tabletBundlesCheckWrite","_splitBatchResults","splitBatchResults","outputs","writableByName","reduce_","acc","TABLETS_BUNDLES_PARTIAL","reject","toasterName","skipSuccessToast","errorTitle","fetchWritePermissions","get","bundleControllerZones","result","bundleDefaultConfig","reduce","_ref2","_ref3","k","v","ypath","create","prepareBundleDefaultConfig","TABLETS_BUNDLES_LOAD_SUCCESS","e","isCancelled","TABLETS_BUNDLES_LOAD_FAILURE","setTabletsActiveBundle","bundlesTrackVisit","TABLETS_BUNDLES_ACTIVE_ACCOUNT","mapDispatchToProps","connect","getTabletsActiveBundle","getTabletsCellsHostsOfActiveBundle","getTabletsCellsIdFilter","getTabletsCellsBundleFilter","getTabletsCellsHostFilter","getTabletsCellsBundles","getTabletsCellsHosts","BundleBalancerValue","_props$value","blocking","success","HEALTH_TO_THEME","good","initializing","degrading","failed","changing","Health","Label","hammer","NO_VALUE","BundleGeneralMeta","bundleData","getTabletsActiveBundleData","clusterUiConfig","getClusterUiConfig","cluster","getCluster","allowTabletAccounting","getClusterUiConfigEnablePerBundleTabletAccounting","leftGroup","UIFactory","getExtraMetaTableItemsForBundle","health","tabletCells","tablets","visible","enable_bundle_controller","enable_bundle_balancer","node_tag_filter","rightGroup","memory","renderResourceProgress","uncompressed","compressed","changelog_account","AccountLink","account","snapshot_account","MetaTable","resourceName","usage","getValue","limit","format","calcProgressProps","Progress","STATE_THEME","leading","none","elections","leader_recovery","TABLE_SETTINGS","displayIndices","stickyHead","DataTable","MOVING","stickyTop","STICKY_TOOLBAR_BOTTOM","syncHeadOnResize","dynamicRender","COLUMN_TITLE","peerAddress","actions","HoverAction","wrapCell","renderCell","CellsTable","_len2","_key2","renderColumnHeader","col","sortable","_COLUMN_TITLE$col","_this$props$sortState","sortState","column","order","isSorted","ColumnHeader","capitalize_","onSort","onColumnSort","withUndefined","cellsSort","renderId","row","renderBundle","activeBundleLink","routed","renderState","_data$row","capitalize","renderActions","_this$props2","attributesPath","cellNavigationLink","Tooltip","ClickableAttributesButton","colName","_data$row2","Host","asTabletNode","address","copyBtnClassName","align","toLocaleLowerCase","header","columns","x","Columns","_this$props3","loading","loaded","DataTableYT","sortableColumn","render","width","renderHealth","renderNumber","bind","renderBytes","renderHost","getTabletsIsLoading","getTabletsIsLoaded","getTabletsCellsSorted","getTabletsCellsSortState","tabletActiveBundleLink","tabletAttributesPath","tabletCellNavigationLink","BundleCells","ErrorBoundary","WithStickyToolbar","toolbar","CellsInstruments","setChaosPartial","CHAOS_BUNDLES_PARTIAL","setChaosActiveBundle","CHAOS_BUNDLES_ACTIVE_ACCOUNT","height","fillRule","clipRule","HelpPopover","Popover","buttonRef","I","stickyFooter","stickyBottom","tablet_count","tablet_count_limit","tablet_count_free","tablet_count_percentage","tablet_static_memory","tablet_static_memory_limit","tablet_static_memory_free","tablet_static_memory_percentage","SHORT_TITLE","CopyHostListAction","copyHostListToClipboard","handleClick","onCopy","BundlesTable","shortTitle","setBundlesSortState","has_tag","Boolean","setActiveBundle","renderBundlesTableItemExtraControls","itemClassName","renderAccount","renderNodes","_ref4","nodes","unique_node_tag","help_tooltip","delayClosing","allowPerBundleAccounting","bundleDashboardUrl","pathPrefix","showCellBundleEditor","writeableByName","_ref5","allowEdit","_ref8","_ref9","_calcProgressProps","_data$row3","_calcProgressProps2","toLowerCase","columnName","total","footerData","renderTabletCountPercentage","renderTabletStaticMemoryPercentage","renderBB","renderBC","fetchTabletCellBundleEditor","bundleName","TABLETS_BUNDLES_EDITOR_LOAD_REQUREST","toEdit","getTabletsBundles","find","resolve","defaultReservedMemoryLimit","getTabletsDefaultMemoryConfiguration","tabletCellBundlesEditData","_results$","bundleControllerIsUnavailable","code","yt","NODE_DOES_NOT_EXIST","errorContent","_toEdit$bundle_contro","_toEdit$bundle_contro2","_ref3$","bundleControllerData","bundle_controller_target_config","memory_limits","reserved","TABLETS_BUNDLES_EDITOR_LOAD_SUCCESS","requestGroups","allocated_tablet_nodes","_item","makeBatchSubRequest","allocated_rpc_proxies","errors","tabletCellBundlesInstancesDetails","nodesResults","keys_","instanceDetailsMap","forEach_","_output","nanny_service","_output$","TABLETS_BUNDLES_EDITOR_PARTIAL","TABLETS_BUNDLES_EDITOR_LOAD_FAILURE","showTabletCellBundleEditor","visibleEditor","setBundleEditorController","bundlePath","prepareSetCommandForBatch","tabletCellBundlesSetAttrs","successContent","batchType","calcColumns","createSelector","getTabletBundlesTableMode","mode","bundlesSort","getTabletsBundlesSorted","getTabletsBundlesTotal","getTabletsBundlesSortState","tabletCellBundleDashboardUrl","getTabletBundlesWriteableByName","BundlesTableModeRadio","bundlesTableMode","modes","useDispatch","allowTabs","handleChange","modeItems","CustomRadioButton","prepareSimpleValue","BundlesTableInstruments","onNameEnterKeyDown","setTabletsFirstBundleAsActive","accountFilter","nameFilter","tagNodeFilter","compact_","setTabletsBundlesNameFilter","onEnterKeyDown","setTabletsBundlesAccountFilter","setTabletsBundlesTagNodeFilter","bundlesNameFilter","bundlesAccountFilter","bundlesTagNodeFilter","first","getAppBrowserHistory","getTabletsBundlesAccountFilter","getTabletsBundlesNameFilter","getTabletsBundlesTagNodeFilter","Bundles","handleCopyHostListToClipboard","_dispatch","filterTabletCellsByBundle","getTabletsCells","prepareHostsFromCells","copy","BundleStatisticsTab","getTheme","NoContent","warning","hint","StatisticsComponent","getStatisticsComponentForBundle","BundleMonitorTab","BundleMonitor","component","tablet_cell_bundle","BundleAclTab","allowAcl","isPoolAclAllowed","BundleAcl","ColorCircle","color","_ref$marginRight","marginRight","backgroundColor","BundleMetaResourceProgress","resourceType","_ref$postfix","_getProgressData","stack","sum","Number","trim","metaItems","formattedValue","getProgressBarColorByIndex","label","Readable","fraction","commonTooltip","getProgressData","DETAILS_KEYS","ActiveAccountBundleControllerUpdater","fetchFn","useUpdater","prevBundleControllerState","checkBundleControllerState","_asyncToGenerator","_regeneratorRuntime","_callee","_yield$wrapApiPromise","_yield$wrapApiPromise2","_yield$wrapApiPromise3","alerts","inProgressCount","_context","prev","next","abrupt","attr","tabletBundleControllerState","sent","stop","timeout","BundleConfigurationMeta","bundleControllerConfig","orchidData","getActiveBundleControllerData","bundleGroup","resource_quota","resource_allocated","allMemory","allVCPU","vcpu","allocMemory","allocVCPU","details","_getBundleStateData","detailsEntries","entries_","pick_","_ref6","_ref7","getBundleStateData","renderErrors","getBundleStateField","getLimitAllocatedField","rpc_proxy_count","count","_bundleControllerConf","rpc_proxy_resource_guarantee","getRpcNodeField","tablet_node_count","_bundleControllerConf2","tablet_node_resource_guarantee","cpu_limits","subTitles","allocated","allStr","allocatedStr","percentage","printUsageLimit","printMemory","printVCPU","totalCounts","alert","description","BundleMetaTable","COLUMNS","inlineMargins","visibleOnRowHover","_props$row$data","resource","formattedMemory","Bytes","formattedVcpu","vCores","_computeProgress","used","progress","computeProgress","getProgressTheme","hulkRequestPath","uuid","lastWord","suffix","exactPath","makeNavigationLink","allocationState","tooltip","useFlex","ReadableField","renderDeployUrl","renderNannyUrl","deployUrl","nannyUrl","CellsBundleController","hideColumns","setFilter","toHide","Set","useColumns","renderToolbar","debounce","skipBlurByEnter","useThemeYT","emptyDataMessage","BundleInstancesTab","getActiveBundleInstances","BundleProxiesTab","getActiveBundleProxies","bundleEditorDict","resources","defaults","memory_reset","tablet_static","tablet_dynamic","compressed_block_cache","uncompressed_block_cache","versioned_chunk_meta","lookup_row_cache","key_filter_block_cache","threadPool_reset","lookup_thread_pool_size","query_thread_pool_size","write_thread_pool_size","getResourceData","source","getInitialFormValues","slug","changelogAccount","snapshotAccount","general","abc","info","createConfigurationList","formatted","itemData","_itemData$resource_gu","resource_guarantee","net","toPrecision","initialData","createParams","formatType","_hammer$format$format","split","_hammer$format$format2","difference","_hammer$format$format3","_hammer$format$format4","usedVal","usedPref","prepareAbc","prepareSubmitBundle","form","prepare","_form$getState","dirtyFields","values","addToChange","field","prepareValue","get_","simpleBundleValidate","toNumber","isFinite","instanceCountValidate","input","number","getBundleControllerResource","defaultValues","_step","_iterator","_createForOfIteratorHelper","s","n","done","_current$key","err","f","BundleEditorDialog","_initialValues$resour","getTabletCellBundleEditorState","getBundleEditorData","defaultConfig","enableBundleController","tabletCountUsage","tabletStaticMemoryUsage","allowTabletCount","isDeveloper","initialValues","rpc_proxy_sizes","tablet_node_sizes","data_centers","rpcConfigurations","nodeConfigurations","dcConfigurations","renderGeneralTabs","fields","isAbcAllowed","caption","extras","allowRootAccount","renderResourceTab","fullWidth","touched","renderTableCellBundleEditorNotice","withoutDetailedBar","validator","section","docsUrl","makeLink","docsUrls","onRadioClick","_bundleDefaultConfig$","nodeConfigurationType","defaultMemory","default_config","defaultThreadPool","defaultMemoryLimit","resultMemory","resultThreadPool","change","renderSimpleResourceTab","renderMemoryTab","visibilityCondition","when","allValues","_allValues$resources","onReset","_allValues$memory_lim","isNaN","renderThreadPoolTab","_allValues$resources2","onSubmit","preparedData","t0","makeFormSubmitError","_x","isEmpty_","YTDFDialog","headerProps","onAdd","onClose","validate","validateFormValues","quota","_tabletNode$memory","_tabletNode$vcpu","_resources$rpc_proxy_2","_resources$rpc_proxy_3","_tabletNode$memory2","_resources$rpc_proxy_4","_resources$rpc_proxy_5","res","currentAccLimit","tabletNode","_resources$rpc_proxy_","_resources$tablet_nod","requiredCpu","violatedResources","requiredMemory","join","showChaosCellBundleEditor","CHAOS_BUNDLES_EDITOR_LOAD_REQUREST","CHAOS_BUNDLES_EDITOR_PARTIAL","chaosCellBundlesEditData","CHAOS_BUNDLES_EDITOR_LOAD_SUCCESS","CHAOS_BUNDLES_EDITOR_LOAD_FAILURE","getChaosIsLoading","getChaosIsLoaded","getChaosBundlesSorted","getChaosBundlesTotal","getChaosBundlesSortState","getChaosBundlesTableMode","chaosActiveBundleLink","getChaosBundlesAccountFilter","getChaosBundlesNameFilter","getChaosBundlesTagNodeFilter","ChaosCellBundles","filterChaosCellsByBundle","getChaosCells","TABS","show","ChaosBundleResourceUsage","bundleEditorData","setBundleQuota","_React$useState3","_React$useState4","showEditor","setShowEditor","toggleEditor","FORMATS","_calcProgressProps$va","Bold","ChaosBundleResourceEditor","toggleVisibility","_bundleEditorData$bun","onSave","QuotaEditorWithHide","onHide","getInfoByName","currentAccount","parentOfCurrentAccount","ChaosBundleEditorGeneral","setBunndleAttributes","ChaosBundleAbcServiceEditor","ChaosBundleAccountEditor","attributeName","onAbcChange","Error","control","renderControlAbcService","WithHeader","_Fragment","options","_defineProperty","AccountsSuggestWithLoading","getChaosCellBundleEditorData","chaosCellBundleEditor","hideBundleEditor","attrs","console","log","chaosCellBundlesSetAttrs","activeTab","setActiveTab","Dialog","open","Header","Divider","Body","Tabs","layout","active","onTabChange","ErrorBlock","getChaosActiveBundle","getChaosCellsHostsOfActiveBundle","getChaosCellsIdFilter","getChaosCellsBundleFilter","getChaosCellsHostFilter","getChaosCellsBundles","getChaosCellsHosts","getChaosCellsSorted","getChaosCellsSortState","chaosAttributesPath","chaosCellNavigationLink","ChaosCells","TabletErrorsLazy","withLazyLoading","TabletErrorsByBundle","TabletsTabs","TabletsTabsImpl","TabletCellBundles","_UIFactory$getMonitor","match","useRouteMatch","getTabletsError","_ref$enable_bundle_co","CHAOS_BUNDLES_LOAD_REQUEST","chaosCellBundles","CHAOS_BUNDLES_LOAD_SUCCESS","CHAOS_BUNDLES_LOAD_FAILURE","bundleWritable","showSettings","TabletsTab","CHAOS_CELLS","TABLET_CELLS","useShowSettings","statsTab","STATISTICS","monTab","MONITOR","getMonitoringForBundle","monitoringComponent","urlTemplate","monitoringTitle","external","formatByParams","ytCluster","ytTabletCellBundle","instTab","INSTANCES","proxyTab","PROXIES","errorsTab","TABLET_ERRORS","getConfigData","allowTabletErrorsAPI","ActiveBundleDetails","Switch","Route","Page","TABLET_CELL_BUNDLES","CHAOS_CELL_BUNDLES","ACL","Redirect","to","TabletBundleEditorDialog","ChaosBundleEditorDialog","allowAccounting","_ref4$monitoringTitle","tabProps","makeTabProps","matchUrl","makeAllTabsProps","routedPreserveLocation","exactNavLink","UI_TAB_SIZE","BundleFavourites","isActiveBundleInFavourites","page","toggleFavourite","handleFavouriteItemClick","handleFavouriteToggle","BundleBreadcrumbs","bcItems","history","useHistory","handleItemClick","toString","BreadcrumbsItem","favourites","activeBundleData","RowWithName","urlParams","renderTopRowExtraControlsForBundle","bundlesToggleFavourite","getTabletsBreadcrumbItems","getFavouriteBundles","TabletCellBundlesTopRowContent","getChaosActiveBundleData","getChaosBreadcrumbItems","getFavouriteChaosBundles","isActiveChaosBundleInFavourites","fontFamily","FontFaceObserver","load","waitForFontFamilies","promiseToWrap","fontFamilies","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","prefix","compareBundlesByAccount","left","right","sortTableBundles","columnsSortable","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","sort","_ref2$nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes","reverse","NAMESPACE","withNaming","m","progressBlock","ProgressInnerText","offset","transform","ProgressStackItem","getOffset","colorStops","colorStopsValue","matchingColorStopItem","currentValue","minValue","maxValue","ProgressWithStack","stackClassName","getValueFromStack","ProgressWithValue","resolvedProps","isProgressWithStack","p","a","c","document","attachEvent","w","g","createElement","setAttribute","appendChild","createTextNode","h","j","cssText","B","scrollLeft","C","parentNode","D","family","weight","stretch","context","E","F","G","H","M","fonts","N","font","q","prototype","J","Date","getTime","K","L","test","navigator","vendor","exec","userAgent","parseInt","O","t","setTimeout","P","race","clearTimeout","body","readyState","detachEvent","u","y","z","A","removeChild","dir","hidden","module","exports"],"sourceRoot":""}
1
+ {"version":3,"file":"js/bundles.7fc5e9e7.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/BreadcrumbItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/BreadcrumbsSeparator.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/lab/Breadcrumbs/Breadcrumbs.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useResizeObserver/useResizeObserver.js","webpack://@ytsaurus/ui/./src/ui/components/Breadcrumbs/Breadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/info-icon2.svg","webpack://@ytsaurus/ui/./src/ui/components/Info/Info.tsx","webpack://@ytsaurus/ui/./src/ui/containers/WaitForFont/WaitForFont.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsInstruments.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleGeneralMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/Cells.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleQuestion.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/components/build/esm/components/HelpPopover/HelpPopover.js","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTable.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/tablet_cell_bundles/tablet-cell-bundle-editor.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTableModeRadio.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTableInstruments.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundlesTableInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/Bundles.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleStatisticsTab.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleMonitorTab.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleAclTab.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx","webpack://@ytsaurus/ui/./src/ui/components/BundleMetaResourceProgress/BundleMetaResourceProgress.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleConfigurationMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleMetaTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/cells/CellsBundleController.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleInstancesTab.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundle/BundleProxiesTab.tsx","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/bundles/bundle-editor-dialog/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/chaos_cell_bundles/tablet-cell-bundle-editor.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/BundlesTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/BundlesTableInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/Bundles.tsx","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/tablet-cell-bundle-editor.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/cells/CellsInstruments.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/cells/CellsTable.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/cells/Cells.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet-errors-by-bundle/lazy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/TabletCellBundles.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/TabletCellBundlesTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/tablet_cell_bundles/TabletCellBundlesTopRowContent.connected.ts","webpack://@ytsaurus/ui/./src/ui/pages/chaos_cell_bundles/ChaosCellBundlesTopRowContent.connected.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/global/fonts.ts","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/components/build/esm/components/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressInnerText.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressStackItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressWithStack.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/ProgressWithValue.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/Progress.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/types.js","webpack://@ytsaurus/ui/./node_modules/fontfaceobserver/fontfaceobserver.standalone.js"],"sourcesContent":["import { block } from '../../utils/cn';\nexport function shouldClientNavigate(link, modifiers) {\n // Use getAttribute here instead of link.target. Firefox will default link.target to \"_parent\" when inside an iframe.\n const target = link.getAttribute('target');\n return (link.href &&\n (!target || target === '_self') &&\n link.origin === location.origin &&\n !link.hasAttribute('download') &&\n !modifiers.metaKey && // open in new tab (mac)\n !modifiers.ctrlKey && // open in new tab (windows)\n !modifiers.altKey && // download\n !modifiers.shiftKey);\n}\nexport const b = block('breadcrumbs2');\n","'use client';\nimport React from 'react';\nimport { filterDOMProps } from '../../utils/filterDOMProps';\nimport { b, shouldClientNavigate } from './utils';\nexport function BreadcrumbItem(props) {\n const Element = props.href ? 'a' : 'span';\n const domProps = filterDOMProps(props, { labelable: true });\n let title = props.title;\n if (!title && typeof props.children === 'string') {\n title = props.children;\n }\n const handleAction = (event) => {\n if (props.disabled || props.current) {\n event.preventDefault();\n return;\n }\n if (typeof props.onAction === 'function') {\n props.onAction();\n }\n const target = event.currentTarget;\n if (typeof props.navigate === 'function' && target instanceof HTMLAnchorElement) {\n if (props.href && !event.isDefaultPrevented() && shouldClientNavigate(target, event)) {\n event.preventDefault();\n props.navigate(props.href, props.routerOptions);\n }\n }\n };\n const isDisabled = props.disabled || props.current;\n let linkProps = {\n title,\n onClick: handleAction,\n 'aria-disabled': isDisabled ? true : undefined,\n };\n if (Element === 'a') {\n linkProps.href = props.href;\n linkProps.hrefLang = props.hrefLang;\n linkProps.target = props.target;\n linkProps.rel = props.target === '_blank' && !props.rel ? 'noopener noreferrer' : props.rel;\n linkProps.download = props.download;\n linkProps.ping = props.ping;\n linkProps.referrerPolicy = props.referrerPolicy;\n }\n else {\n linkProps.role = 'link';\n linkProps.tabIndex = isDisabled ? undefined : 0;\n linkProps.onKeyDown = (event) => {\n if (event.key === 'Enter') {\n handleAction(event);\n }\n };\n }\n if (props.current) {\n linkProps['aria-current'] = 'page';\n }\n if (props.itemType === 'menu') {\n linkProps = {};\n }\n return (React.createElement(Element, Object.assign({}, domProps, linkProps, { className: props.itemType === 'menu'\n ? b('menu')\n : b('link', {\n 'is-current': props.current,\n 'is-disabled': isDisabled && !props.current,\n }) }), props.children));\n}\nBreadcrumbItem.displayName = 'Breadcrumbs.Item';\n","import React from 'react';\nimport { b } from './utils';\nexport function BreadcrumbsSeparator({ separator }) {\n return (React.createElement(\"div\", { \"aria-hidden\": true, className: b('divider') }, separator !== null && separator !== void 0 ? separator : '/'));\n}\nBreadcrumbsSeparator.displayName = 'Breadcrumbs.Separator';\n","import { addComponentKeysets } from '../../../utils/addComponentKeysets';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'lab/Breadcrumbs';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","'use client';\nimport React from 'react';\nimport { useForkRef, useResizeObserver } from '../../../hooks';\nimport { Button } from '../../Button';\nimport { DropdownMenu } from '../../DropdownMenu';\nimport { filterDOMProps } from '../../utils/filterDOMProps';\nimport { BreadcrumbItem } from './BreadcrumbItem';\nimport { BreadcrumbsSeparator } from './BreadcrumbsSeparator';\nimport i18n from './i18n';\nimport { b, shouldClientNavigate } from './utils';\nimport './Breadcrumbs.css';\nfunction Item(_props) {\n return null;\n}\nexport const Breadcrumbs = React.forwardRef(function Breadcrumbs(props, ref) {\n const listRef = React.useRef(null);\n const containerRef = useForkRef(ref, listRef);\n const items = [];\n React.Children.forEach(props.children, (child, index) => {\n if (React.isValidElement(child)) {\n if (child.key === undefined || child.key === null) {\n child = React.cloneElement(child, { key: index });\n }\n items.push(child);\n }\n });\n const [visibleItemsCount, setVisibleItemsCount] = React.useState(items.length);\n const [calculated, setCalculated] = React.useState(false);\n const recalculate = (visibleItems) => {\n const list = listRef.current;\n if (!list) {\n return;\n }\n const listItems = Array.from(list.children);\n if (listItems.length === 0) {\n return;\n }\n const containerWidth = list.offsetWidth;\n let newVisibleItemsCount = 0;\n let calculatedWidth = 0;\n let maxItems = props.maxItems || Infinity;\n let rootWidth = 0;\n if (props.showRoot) {\n const item = listItems.shift();\n if (item) {\n rootWidth = item.scrollWidth;\n calculatedWidth += rootWidth;\n }\n newVisibleItemsCount++;\n }\n const hasMenu = items.length > visibleItems;\n if (hasMenu) {\n const item = listItems.shift();\n if (item) {\n calculatedWidth += item.offsetWidth;\n }\n maxItems--;\n }\n if (props.showRoot && calculatedWidth >= containerWidth) {\n calculatedWidth -= rootWidth;\n newVisibleItemsCount--;\n }\n const lastItem = listItems.pop();\n if (lastItem) {\n calculatedWidth += Math.min(lastItem.offsetWidth, 200);\n if (calculatedWidth < containerWidth) {\n newVisibleItemsCount++;\n }\n }\n for (let i = listItems.length - 1; i >= 0; i--) {\n const item = listItems[i];\n calculatedWidth += item.offsetWidth;\n if (calculatedWidth >= containerWidth) {\n break;\n }\n newVisibleItemsCount++;\n }\n newVisibleItemsCount = Math.max(Math.min(maxItems, newVisibleItemsCount), 1);\n if (newVisibleItemsCount === visibleItemsCount) {\n setCalculated(true);\n }\n else {\n setVisibleItemsCount(newVisibleItemsCount);\n }\n };\n const handleResize = React.useCallback(() => {\n setCalculated(false);\n setVisibleItemsCount(items.length);\n }, [items.length]);\n useResizeObserver({\n ref: listRef,\n onResize: handleResize,\n });\n const lastChildren = React.useRef(null);\n React.useLayoutEffect(() => {\n if (calculated && props.children !== lastChildren.current) {\n lastChildren.current = props.children;\n setCalculated(false);\n setVisibleItemsCount(items.length);\n }\n }, [calculated, items.length, props.children]);\n React.useLayoutEffect(() => {\n if (!calculated) {\n recalculate(visibleItemsCount);\n }\n });\n const { navigate } = props;\n let contents = items;\n if (items.length > visibleItemsCount) {\n contents = [];\n const breadcrumbs = [...items];\n let endItems = visibleItemsCount;\n if (props.showRoot && visibleItemsCount > 1) {\n const rootItem = breadcrumbs.shift();\n if (rootItem) {\n contents.push(rootItem);\n }\n endItems--;\n }\n const hiddenItems = breadcrumbs.slice(0, -endItems);\n const menuItem = (React.createElement(BreadcrumbItem, { itemType: \"menu\" },\n React.createElement(DropdownMenu, { items: hiddenItems.map((el, index) => {\n return Object.assign(Object.assign({}, el.props), { text: el.props.children, disabled: props.disabled, items: [], action: (event) => {\n var _a;\n if (typeof props.onAction === 'function') {\n props.onAction((_a = el.key) !== null && _a !== void 0 ? _a : index);\n }\n // TODO: move this logic to DropdownMenu\n const target = event.currentTarget;\n if (typeof navigate === 'function' &&\n target instanceof HTMLAnchorElement) {\n if (el.props.href && shouldClientNavigate(target, event)) {\n event.preventDefault();\n navigate(el.props.href, el.props.routerOptions);\n }\n }\n } });\n }), popupProps: {\n className: b('popup', {\n staircase: props.popupStyle === 'staircase',\n }),\n placement: props.popupPlacement,\n }, renderSwitcher: ({ onClick }) => (React.createElement(Button, { title: i18n('label_more'), className: b('more-button'), onClick: onClick, size: \"s\", view: \"flat\", disabled: props.disabled },\n React.createElement(Button.Icon, null, \"...\"))) })));\n contents.push(menuItem);\n contents.push(...breadcrumbs.slice(-endItems));\n }\n const lastIndex = contents.length - 1;\n const breadcrumbItems = contents.map((child, index) => {\n var _a;\n const isCurrent = index === lastIndex;\n const key = (_a = child.key) !== null && _a !== void 0 ? _a : index;\n const handleAction = () => {\n if (typeof props.onAction === 'function') {\n props.onAction(key);\n }\n };\n return (React.createElement(\"li\", { key: index, className: b('item', { calculating: !calculated }) },\n React.createElement(BreadcrumbItem, Object.assign({}, child.props, { key: key, current: isCurrent, disabled: props.disabled, onAction: handleAction, navigate: navigate }), child.props.children),\n isCurrent ? null : React.createElement(BreadcrumbsSeparator, { separator: props.separator })));\n });\n return (React.createElement(\"ol\", Object.assign({ ref: containerRef }, filterDOMProps(props, { labelable: true }), { \"data-qa\": props.qa, className: b(null, props.className), style: props.style }), breadcrumbItems));\n});\nBreadcrumbs.Item = Item;\nBreadcrumbs.displayName = 'Breadcrumbs';\nexport { Item as BreadcrumbsItem };\n","import React from 'react';\nexport function useResizeObserver({ ref, onResize }) {\n React.useEffect(() => {\n const element = ref === null || ref === void 0 ? void 0 : ref.current;\n if (!element) {\n return undefined;\n }\n if (typeof window.ResizeObserver === 'undefined') {\n window.addEventListener('resize', onResize, false);\n return () => {\n window.removeEventListener('resize', onResize, false);\n };\n }\n const observer = new ResizeObserver((entries) => {\n if (!entries.length) {\n return;\n }\n onResize();\n });\n observer.observe(element);\n return () => {\n observer.disconnect();\n };\n }, [ref, onResize]);\n}\n","import React, {FC, PropsWithChildren} from 'react';\nimport {\n unstable_BreadcrumbsProps as BreadcrumbsProps,\n unstable_Breadcrumbs as UBreadcrumbs,\n} from '@gravity-ui/uikit/unstable';\nimport './Breadcrumbs.scss';\nimport cn from 'bem-cn-lite';\n\nconst b = cn('yt-u-breadcrumbs');\n\nexport const Breadcrumbs: FC<PropsWithChildren<BreadcrumbsProps>> = ({children, ...props}) => {\n return (\n <UBreadcrumbs {...props} className={b(null, props.className)}>\n {children}\n </UBreadcrumbs>\n );\n};\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","const SvgInfoIcon2 = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\" {...props}><path fill=\"#027BF3\" d=\"M7 .828C3.521.828.703 3.672.703 7.125A6.296 6.296 0 0 0 7 13.422c3.453 0 6.297-2.818 6.297-6.297C13.297 3.672 10.453.828 7 .828m0 11.375a5.06 5.06 0 0 1-5.078-5.078A5.077 5.077 0 0 1 7 2.047c2.793 0 5.078 2.285 5.078 5.078A5.077 5.077 0 0 1 7 12.203m0-8.582c-.61 0-1.066.483-1.066 1.067 0 .609.457 1.066 1.066 1.066.584 0 1.066-.457 1.066-1.066 0-.584-.482-1.067-1.066-1.067m1.422 6.45v-.61a.33.33 0 0 0-.305-.305h-.305V6.617a.33.33 0 0 0-.304-.304H5.883a.31.31 0 0 0-.305.304v.61c0 .177.127.304.305.304h.305v1.625h-.305a.31.31 0 0 0-.305.305v.61c0 .177.127.304.305.304h2.234a.31.31 0 0 0 .305-.305\" /></svg>;\nexport default SvgInfoIcon2;","import React, {ReactNode} from 'react';\nimport block from 'bem-cn-lite';\nimport {Icon} from '@gravity-ui/uikit';\n\nimport infoIcon from '../../assets/img/svg/info-icon2.svg';\n\nimport './Info.scss';\n\nconst b = block('info-block');\n\ninterface InfoProps {\n children: ReactNode;\n className?: string;\n}\nexport function Info({children, className}: InfoProps) {\n return (\n <div className={b(null, className)}>\n <div className={b('icon')}>\n <Icon data={infoIcon} />\n </div>\n <div className={b('body')}>{children}</div>\n </div>\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getFontFamilies} from '../../store/selectors/global/fonts';\nimport {waitForFontFamily} from '../../store/actions/global/fonts';\n\nexport function WaitForFont({children}: {children: React.ReactNode}) {\n const {regular, monospace} = useSelector(getFontFamilies);\n const [ready, setReady] = React.useState(false);\n React.useEffect(() => {\n Promise.all([waitForFontFamily(regular), waitForFontFamily(monospace)]).then(() =>\n setReady(true),\n );\n }, [regular, monospace]);\n\n return ready ? children : null;\n}\n","import React, {FC} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './BundleParamsList.scss';\n\nconst block = cn('bundle-params-list');\n\nexport interface BundleParam {\n title: string;\n value: string | number;\n type?: 'positive' | 'negative';\n postfix?: string;\n}\n\ninterface BundleParamsListProps {\n className?: string;\n params: BundleParam[];\n size?: 's' | 'm';\n}\n\nexport const BundleParamsList: FC<BundleParamsListProps> = ({className, params, size = 's'}) => {\n return (\n <div className={block({size}, className)}>\n {params.map((param) => (\n <span key={param.title}>\n {param.title}{' '}\n <span className={block('value', {type: param.type})}>\n {param.value} {param.postfix}\n </span>\n </span>\n ))}\n </div>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\n\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport Filter from '../../../components/Filter/Filter';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport Suggest from '../../../components/Suggest/Suggest';\nimport type {TabletsPartialAction} from '../../../store/reducers/tablet_cell_bundles';\n\nimport './CellsInstruments.scss';\n\nconst block = cn('cells-table-instruments');\n\nexport interface Props {\n className?: string;\n}\n\nclass CellsTableInstruments extends React.Component<Props & ReduxProps> {\n onIdFilter = (id: string) => {\n this.props.setTabletsPartial({cellsIdFilter: id});\n };\n\n onBundleFilter = (bundle: string) => {\n this.props.setTabletsPartial({cellsBundleFilter: bundle});\n };\n\n onHostFilterChange = (hostFilter: string) => {\n this.onHostSelected(hostFilter);\n };\n\n onHostSelected = (host: string) => {\n this.props.setTabletsPartial({cellsHostFilter: host});\n };\n\n onHostInputBlur = () => {\n this.setState({hostFilter: this.props.hostFilter});\n };\n\n getBundleFilterItems = (text?: string) => {\n const {bundles} = this.props;\n if (!text) {\n return bundles;\n }\n return filter_(bundles, (bundle = '') => bundle.indexOf(text) !== -1);\n };\n\n getHostFilterItems = (text?: string) => {\n const {hosts} = this.props;\n if (!text) {\n return hosts;\n }\n return filter_(hosts, (host = '') => host.indexOf(text) !== -1);\n };\n\n render() {\n const {className, idFilter, bundleFilter, activeBundle, activeBundleHosts} = this.props;\n\n return (\n <Toolbar\n className={block(null, className)}\n itemsToWrap={[\n {\n name: 'id1',\n node: (\n <Filter\n className={block('text-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={idFilter}\n placeholder=\"Enter cell id...\"\n onChange={this.onIdFilter}\n autofocus={false}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n ...(!activeBundle\n ? [\n {\n name: 'bundle',\n node: (\n <Suggest\n className={block('suggest')}\n text={bundleFilter}\n apply={(item) =>\n this.onBundleFilter(\n 'string' === typeof item ? item : item.value,\n )\n }\n filter={(_items, filter) =>\n this.getBundleFilterItems(filter)\n }\n placeholder={'Enter bundle name...'}\n popupClassName={block('suggest-popup')}\n />\n ),\n growable: true,\n shrinkable: true,\n wrapperClassName: block('item'),\n },\n ]\n : []),\n {\n name: 'host',\n node: (\n <Suggest\n className={block('suggest')}\n text={this.props.hostFilter}\n onTextUpdate={this.onHostFilterChange}\n onItemClick={(item) =>\n this.onHostSelected(\n 'string' === typeof item ? item : item.value,\n )\n }\n onBlur={this.onHostInputBlur}\n filter={(_items, filter = '') => this.getHostFilterItems(filter)}\n placeholder={'Enter host...'}\n autoFocus={false}\n popupClassName={block('suggest-popup')}\n />\n ),\n growable: true,\n shrinkable: true,\n wrapperClassName: block('item'),\n },\n ...(activeBundleHosts\n ? [\n {\n name: 'copy-hosts',\n node: (\n <ClipboardButton\n pin=\"round\"\n text={activeBundleHosts}\n awesome=\"clipboard-list\"\n buttonText=\"Copy host list\"\n />\n ),\n },\n ]\n : []),\n ]}\n />\n );\n }\n}\n\nexport type ReduxProps = {\n activeBundle: string;\n activeBundleHosts: string;\n idFilter: string;\n bundleFilter: string;\n hostFilter: string;\n bundles: string[];\n hosts: string[];\n} & {\n setTabletsPartial(data: TabletsPartialAction['data']): void;\n};\n\nexport default CellsTableInstruments;\n","import {ThunkAction} from 'redux-thunk';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\n// @ts-ignore\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\n\nimport {CheckPermissionResult} from '../../../../shared/utils/check-permission';\n\nimport {RootState} from '../../reducers';\nimport {\n TabletBundle,\n TabletsBundlesAction,\n TabletsPartialAction,\n} from '../../reducers/tablet_cell_bundles';\nimport {\n TABLETS_BUNDLES_ACTIVE_ACCOUNT,\n TABLETS_BUNDLES_LOAD_FAILURE,\n TABLETS_BUNDLES_LOAD_REQUEST,\n TABLETS_BUNDLES_LOAD_SUCCESS,\n TABLETS_BUNDLES_PARTIAL,\n} from '../../../constants/tablets';\nimport {\n prepareBundles,\n prepareTabletCells,\n tabletActiveBundleLink,\n} from '../../../utils/components/tablet-cells';\nimport {SortState} from '../../../types';\nimport {bundlesTrackVisit} from '../favourites';\nimport {\n filterTabletCellsByBundle,\n getTabletsBundlesSorted,\n getTabletsCells,\n prepareHostsFromCells,\n} from '../../selectors/tablet_cell_bundles';\n\nimport copy from 'copy-to-clipboard';\nimport {getBatchError, splitBatchResults, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {getCluster, getCurrentUserName} from '../../selectors/global';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getAppBrowserHistory} from '../../../store/window-store';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\nimport {makeCheckPermissionBatchSubRequestUI} from '../../../utils/acl/acl-api';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\n\nfunction getZones(allBundles: TabletBundle[]) {\n const map = new Map<string, boolean>();\n allBundles.forEach(({bundle}) => {\n if (!map.has(bundle)) {\n map.set(bundle, true);\n }\n });\n\n return [...map.keys()];\n}\n\nfunction prepareBundleDefaultConfig(result: object) {\n return Object.entries(result).reduce((acc, [k, v]) => {\n acc[k] = ypath.getValue(v, '/@');\n return acc;\n }, Object.create(null));\n}\n\ntype TabletsBundlesThunkAction = ThunkAction<any, RootState, any, TabletsBundlesAction>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function fetchTabletsBundles(): TabletsBundlesThunkAction {\n return (dispatch) => {\n dispatch({type: TABLETS_BUNDLES_LOAD_REQUEST});\n const requests: BatchSubRequest[] = [\n {\n command: 'exists' as const,\n parameters: {\n path: '//sys/bundle_controller/orchid/bundle_controller/state/bundles',\n },\n },\n {\n command: 'list' as const,\n parameters: {\n path: '//sys/tablet_cells',\n attributes: ['peers', 'id', 'tablet_cell_bundle', 'total_statistics', 'status'],\n ...USE_MAX_SIZE,\n },\n },\n {\n command: 'get' as const,\n parameters: {\n path: '//sys/tablet_cell_bundles',\n attributes: [\n 'nodes',\n 'enable_bundle_balancer',\n 'health',\n 'options',\n 'node_tag_filter',\n 'resource_limits',\n 'resource_usage',\n 'folder_id',\n 'abc',\n 'dynamic_options',\n 'bundle_controller_target_config',\n 'enable_bundle_controller',\n 'zone',\n ],\n ...USE_MAX_SIZE,\n },\n },\n ];\n\n cancelHelper.removeAllRequests();\n\n return ytApiV3Id\n .executeBatch(YTApiId.tabletCellBundles, {\n parameters: {requests},\n cancellation: cancelHelper.saveCancelToken,\n })\n .then((results: Array<any>) => {\n const [{output: isBundleControllerSupported}, ...rest] = results;\n\n const [{output: cells}, {output: bundles}] = rest;\n\n const error = getBatchError(rest, 'Tablet cell bundles cannot be loaded');\n if (error) {\n throw error;\n }\n\n const allCells = prepareTabletCells(cells);\n const allBundles = prepareBundles(allCells, bundles);\n\n const zones = getZones(allBundles);\n\n dispatch(fetchWritePermissions(allBundles));\n\n if (!zones.length || !isBundleControllerSupported) {\n dispatch({\n type: TABLETS_BUNDLES_LOAD_SUCCESS,\n data: {\n cells: allCells,\n bundles: allBundles,\n },\n });\n return;\n }\n\n ytApiV3Id\n .get(YTApiId.bundleControllerZones, {\n parameters: {\n path: `//sys/bundle_controller/controller/zones`,\n attributes: ['tablet_node_sizes', 'rpc_proxy_sizes', 'data_centers'],\n },\n cancellation: cancelHelper.saveCancelToken,\n })\n .then((result: object) => {\n const bundleDefaultConfig = prepareBundleDefaultConfig(result);\n dispatch({\n type: TABLETS_BUNDLES_LOAD_SUCCESS,\n data: {\n cells: allCells,\n bundles: allBundles,\n bundleDefaultConfig,\n },\n });\n })\n .catch((e: any) => {\n if (!isCancelled(e)) {\n dispatch({type: TABLETS_BUNDLES_LOAD_FAILURE, data: e});\n }\n });\n })\n .catch((e: any) => {\n if (!isCancelled(e)) {\n dispatch({type: TABLETS_BUNDLES_LOAD_FAILURE, data: e});\n }\n });\n };\n}\n\nexport function fetchWritePermissions(\n bundles: Array<{bundle: string}> = [],\n): TabletsBundlesThunkAction {\n return (dispatch, getState) => {\n const user = getCurrentUserName(getState());\n const requests: Array<BatchSubRequest> = map_(bundles, (item) => {\n return makeCheckPermissionBatchSubRequestUI({\n path: `//sys/tablet_cell_bundles/${item.bundle}`,\n user,\n permission: 'write',\n });\n });\n return wrapApiPromiseByToaster(\n ytApiV3Id\n .executeBatch(YTApiId.tabletBundlesCheckWrite, {\n parameters: {requests},\n cancellation: cancelHelper.saveCancelToken,\n })\n .then((data) => {\n const {error, outputs} = splitBatchResults<CheckPermissionResult>(\n data,\n 'Failed to get bundle permissions',\n );\n const writableByName = reduce_(\n outputs,\n (acc, item, index) => {\n if (item?.action === 'allow') {\n const name = bundles[index].bundle;\n acc.set(name, true);\n }\n return acc;\n },\n new Map<string, boolean>(),\n );\n\n dispatch({type: TABLETS_BUNDLES_PARTIAL, data: {writableByName}});\n\n return error ? Promise.reject(error) : undefined;\n }),\n {\n toasterName: 'bundleWritePermissions',\n skipSuccessToast: true,\n errorTitle: 'Fetch write permissions',\n },\n );\n };\n}\n\nexport function setTabletsBundlesSortState(\n bundlesSort: SortState<keyof TabletBundle>,\n): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesSort}};\n}\n\nexport function setTabletsBundlesNameFilter(bundlesNameFilter: string): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesNameFilter}};\n}\n\nexport function setTabletsBundlesAccountFilter(bundlesAccountFilter: string): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesAccountFilter}};\n}\n\nexport function setTabletsBundlesTagNodeFilter(bundlesTagNodeFilter: string): TabletsBundlesAction {\n return {type: TABLETS_BUNDLES_PARTIAL, data: {bundlesTagNodeFilter}};\n}\n\nexport function setTabletsPartial(data: TabletsPartialAction['data']) {\n return {type: TABLETS_BUNDLES_PARTIAL, data};\n}\n\nexport function setTabletsActiveBundle(activeBundle: string): TabletsBundlesThunkAction {\n return (dispatch) => {\n dispatch(bundlesTrackVisit(activeBundle));\n dispatch({\n type: TABLETS_BUNDLES_ACTIVE_ACCOUNT,\n data: {activeBundle},\n });\n };\n}\n\nexport function setTabletsFirstBundleAsActive(): TabletsBundlesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const bundles = getTabletsBundlesSorted(state);\n const [first] = bundles;\n if (!first) {\n return;\n }\n\n const cluster = getCluster(state);\n dispatch(setTabletsActiveBundle(first.bundle));\n getAppBrowserHistory().push(tabletActiveBundleLink(cluster, first.bundle));\n };\n}\n\nexport function copyHostListToClipboard(bundle: string): TabletsBundlesThunkAction {\n return (_dispatch, getState) => {\n const cells = filterTabletCellsByBundle(bundle, getTabletsCells(getState()));\n const hosts = prepareHostsFromCells(cells);\n copy(hosts || '');\n };\n}\n","import {connect} from 'react-redux';\n\nimport CellsTableInstruments from '../../../pages/tablet_cell_bundles/cells/CellsInstruments';\nimport {setTabletsPartial} from '../../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {\n getTabletsActiveBundle,\n getTabletsCellsBundleFilter,\n getTabletsCellsBundles,\n getTabletsCellsHostFilter,\n getTabletsCellsHosts,\n getTabletsCellsHostsOfActiveBundle,\n getTabletsCellsIdFilter,\n} from '../../../store/selectors/tablet_cell_bundles';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getTabletsActiveBundle(state),\n activeBundleHosts: getTabletsCellsHostsOfActiveBundle(state),\n\n idFilter: getTabletsCellsIdFilter(state),\n bundleFilter: getTabletsCellsBundleFilter(state),\n hostFilter: getTabletsCellsHostFilter(state),\n\n bundles: getTabletsCellsBundles(state),\n hosts: getTabletsCellsHosts(state),\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTableInstruments);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {getTabletsActiveBundleData} from '../../../store/selectors/tablet_cell_bundles';\nimport {useSelector} from 'react-redux';\nimport MetaTable, {MetaTableItem} from '../../../components/MetaTable/MetaTable';\nimport {Progress} from '@gravity-ui/uikit';\n\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport ypath from '../../../common/thor/ypath';\n\nimport {YTHealth} from '../../../types';\nimport AccountLink from '../../accounts/AccountLink';\nimport Label, {LabelTheme} from '../../../components/Label/Label';\nimport {calcProgressProps} from '../../../utils/utils';\nimport {\n getCluster,\n getClusterUiConfig,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../../store/selectors/global';\n\nimport './BundleGeneralMeta.scss';\nimport UIFactory from '../../../UIFactory';\n\nconst block = cn('bundle-general-meta');\n\nexport function BundleBalancerValue(props: {value?: boolean; blocking?: boolean}) {\n const {value = true, blocking} = props;\n return <span className={block('bb', {success: value, blocking})}>{value ? 'on' : 'off'}</span>;\n}\n\nconst HEALTH_TO_THEME: {[health: string]: LabelTheme} = {\n good: 'success',\n initializing: 'warning',\n degrading: 'warning',\n failed: 'danger',\n changing: 'info',\n};\n\nexport function Health(props: {value?: YTHealth; className?: string}) {\n const {value, className} = props;\n const theme: LabelTheme = HEALTH_TO_THEME[value || ''];\n return !value ? (\n hammer.format.NO_VALUE\n ) : (\n <Label className={className} theme={theme}>\n {value}\n </Label>\n );\n}\n\nexport default function BundleGeneralMeta() {\n const bundleData = useSelector(getTabletsActiveBundleData);\n const clusterUiConfig = useSelector(getClusterUiConfig);\n const cluster = useSelector(getCluster);\n const allowTabletAccounting = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n if (!bundleData) {\n return null;\n }\n\n const leftGroup: Array<MetaTableItem> = [\n ...(UIFactory.getExtraMetaTableItemsForBundle({bundle: bundleData, clusterUiConfig}) || []),\n {\n key: 'Health',\n value: <Health value={bundleData.health} />,\n },\n {\n key: 'Tablet cells',\n value: hammer.format['Number'](bundleData.tabletCells),\n },\n {\n key: 'Tablets',\n value: hammer.format['Number'](bundleData.tablets),\n visible: !allowTabletAccounting,\n },\n {\n key: 'Bundle controller',\n value: <BundleBalancerValue value={bundleData.enable_bundle_controller} />,\n },\n {\n key: 'Bundle balancer',\n value: (\n <BundleBalancerValue\n value={bundleData.enable_bundle_balancer}\n blocking={bundleData.enable_bundle_controller}\n />\n ),\n },\n {\n key: 'Node tag filter',\n value: bundleData.node_tag_filter || hammer.format.NO_VALUE,\n },\n ];\n\n const rightGroup: Array<MetaTableItem> = [\n {\n key: 'Memory',\n value: hammer.format['Bytes'](bundleData.memory),\n visible: !allowTabletAccounting,\n },\n {\n key: 'Tablets',\n value: renderResourceProgress(bundleData, 'tablet_count'),\n visible: allowTabletAccounting,\n },\n {\n key: 'Tablet static memory',\n value: renderResourceProgress(bundleData, 'tablet_static_memory'),\n visible: allowTabletAccounting,\n },\n {\n key: 'Uncompressed size',\n value: hammer.format['Bytes'](bundleData.uncompressed),\n },\n {\n key: 'Compressed size',\n value: hammer.format['Bytes'](bundleData.compressed),\n },\n {\n key: 'Changelog account',\n value: bundleData.changelog_account ? (\n <AccountLink\n className={block('account-link')}\n account={bundleData.changelog_account}\n cluster={cluster}\n />\n ) : (\n hammer.format.NO_VALUE\n ),\n },\n {\n key: 'Snapshot account',\n value: bundleData.snapshot_account ? (\n <AccountLink\n className={block('account-link')}\n account={bundleData.snapshot_account}\n cluster={cluster}\n />\n ) : (\n hammer.format.NO_VALUE\n ),\n },\n ];\n\n return <MetaTable className={block()} items={[leftGroup, rightGroup]} title={'General'} />;\n}\n\nfunction renderResourceProgress(data: object, resourceName: string) {\n const usage = ypath.getValue(data, `/resource_usage/${resourceName}`);\n const limit = ypath.getValue(data, `/resource_limits/${resourceName}`);\n\n const format = resourceName === 'tablet_static_memory' ? 'Bytes' : 'Number';\n const props = calcProgressProps(usage, limit, format);\n\n return <Progress className={block('progress')} {...props} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\n\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport ColumnHeader from '../../../components/ColumnHeader/ColumnHeader';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport Icon from '../../../components/Icon/Icon';\nimport Label, {LabelTheme} from '../../../components/Label/Label';\nimport Link from '../../../components/Link/Link';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Health} from '../../../pages/tablet_cell_bundles/bundle/BundleGeneralMeta';\nimport {OrderType} from '../../../utils/sort-helpers';\nimport {Host} from '../../../containers/Host/Host';\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport type {TabletCell, TabletsPartialAction} from '../../../store/reducers/tablet_cell_bundles';\nimport type {SortState} from '../../../types';\n\nimport './CellsTable.scss';\n\nconst block = cn('cells-table');\n\nexport interface Props {}\n\nconst STATE_THEME: {[type: string]: LabelTheme} = {\n leading: 'success',\n //following: 'primary',\n none: 'default',\n elections: 'warning',\n leader_recovery: 'warning',\n};\n\nconst TABLE_SETTINGS: Settings = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n//\n// function valueOrNone(value: any) {\n// return value === undefined ? hammer.format.NO_VALUE : value;\n// }\n\nconst COLUMN_TITLE: {[name: string]: string} = {\n id: 'Cell id',\n uncompressed: 'Uncompressed size',\n compressed: 'Compressed size',\n peerAddress: 'Node',\n actions: ' ',\n};\n\ninterface HoverActionProps {\n children: React.ReactNode;\n}\n\nfunction HoverAction(props: HoverActionProps) {\n return <span className={block('hover-action')}>{props.children}</span>;\n}\n\nfunction wrapCell<T extends (...args: any) => any>(renderCell: T) {\n return function WrappedCell(...args: Parameters<T>) {\n return <div className={block('wrapped')}>{renderCell(...(args as any))}</div>;\n };\n}\n\nclass CellsTable extends React.Component<Props & ReduxProps> {\n renderColumnHeader = (col: string, sortable: boolean) => {\n const {\n sortState: {column, order},\n } = this.props;\n const isSorted = col === column;\n\n return (\n <ColumnHeader\n className={block('header-cell', {col, sortable}, 'data-table__head-cell')}\n column={col}\n title={COLUMN_TITLE[col] ?? capitalize_(col)}\n order={isSorted ? order : undefined}\n onSort={this.onColumnSort}\n withUndefined\n />\n );\n };\n\n onColumnSort = (column: string, order: OrderType) => {\n this.props.setTabletsPartial({\n cellsSort: {column: column as keyof TabletCell, order},\n });\n };\n\n renderNumber(colName: keyof TabletCell, data: {row: TabletCell}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Number'](value);\n }\n\n renderBytes(colName: keyof TabletCell, data: {row: TabletCell}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Bytes'](value);\n }\n\n renderHealth(data: {row: TabletCell}) {\n const {health} = data?.row || {};\n return <Health value={health} />;\n }\n\n renderId = (data: {row: TabletCell}) => {\n const {id} = data?.row || {};\n return (\n <div className={block('id')}>\n <span className={block('id-id')}>{id}</span>\n <HoverAction>\n <ClipboardButton view=\"flat-secondary\" text={id} />\n </HoverAction>\n </div>\n );\n };\n\n renderHost(data: {row: TabletCell}) {\n return (\n <Host\n asTabletNode\n address={data?.row?.peerAddress}\n copyBtnClassName={block('hover-action')}\n />\n );\n }\n\n renderBundle = (data: {row: TabletCell}) => {\n const {activeBundleLink, cluster} = this.props;\n const {bundle} = data?.row || {};\n return (\n <Link\n routed\n theme={'primary'}\n url={activeBundleLink(cluster, bundle)}\n onClick={() => {\n this.props.setTabletsActiveBundle(bundle);\n }}\n >\n {bundle}\n </Link>\n );\n };\n\n renderState = (data: {row: TabletCell}) => {\n const {state} = data?.row ?? {};\n const theme = state ? STATE_THEME[state] : undefined;\n return <Label theme={theme} type=\"text\" text={state} capitalize />;\n };\n\n renderActions = (data: {row: TabletCell}) => {\n const {attributesPath, cellNavigationLink, cluster} = this.props;\n const {id} = data?.row || {};\n return (\n <div className={block('actions')}>\n <Tooltip placement={['bottom', 'top']} content={'Go to Navigation'}>\n <Link url={cellNavigationLink(cluster, id)} theme=\"ghost\" routed>\n <Icon awesome=\"folder\" />\n </Link>\n </Tooltip>\n <ClickableAttributesButton\n size=\"m\"\n view=\"flat-secondary\"\n title={id}\n path={attributesPath(id)}\n />\n </div>\n );\n };\n\n column(name: string, sortable = false): Column<TabletCell> {\n return {\n name,\n align: 'left',\n sortable: false,\n className: block('td', {col: name.toLocaleLowerCase()}),\n header: this.renderColumnHeader(name, sortable),\n };\n }\n\n sortableColumn(name: keyof TabletCell) {\n return this.column(name, true);\n }\n\n render() {\n const columns = this.props.columns.map((x) => Columns[x].call(this));\n\n const {data, loading, loaded} = this.props;\n\n return (\n <div className={block()}>\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={data}\n settings={TABLE_SETTINGS}\n theme={'bundles-table'}\n />\n </div>\n );\n }\n}\n\nconst Columns = {\n id(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('id'),\n render: this.renderId,\n width: 400,\n };\n },\n bundle(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('bundle'),\n render: wrapCell(this.renderBundle),\n };\n },\n health(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('health'),\n render: wrapCell(this.renderHealth),\n width: 80,\n };\n },\n tablets(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('tablets'),\n render: wrapCell(this.renderNumber.bind(this, 'tablets')),\n align: 'right',\n width: 100,\n };\n },\n memory(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('memory'),\n render: wrapCell(this.renderBytes.bind(this, 'memory')),\n align: 'right',\n width: 100,\n };\n },\n uncompressed(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('uncompressed'),\n render: wrapCell(this.renderBytes.bind(this, 'uncompressed')),\n align: 'right',\n width: 150,\n };\n },\n compressed(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('compressed'),\n render: wrapCell(this.renderBytes.bind(this, 'compressed')),\n align: 'right',\n width: 130,\n };\n },\n peerAddress(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('peerAddress'),\n render: this.renderHost,\n width: 130,\n };\n },\n state(this: CellsTable): Column<TabletCell> {\n return {\n ...this.sortableColumn('state'),\n render: wrapCell(this.renderState),\n width: 100,\n };\n },\n actions(this: CellsTable): Column<TabletCell> {\n return {\n ...this.column('actions'),\n render: this.renderActions,\n width: 70,\n };\n },\n};\n\nexport type ReduxProps = {\n cluster: string;\n loading: boolean;\n loaded: boolean;\n data: TabletCell[];\n sortState: SortState<keyof TabletCell>;\n columns: Array<keyof typeof Columns>;\n activeBundleLink(cluster: string, bundle: string): string;\n attributesPath(id: string): string;\n cellNavigationLink(cluster: string, cellId: string): string;\n} & {\n setTabletsPartial(data: TabletsPartialAction['data']): void;\n setTabletsActiveBundle(activeBundle: string): void;\n};\n\nexport default CellsTable;\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\n\nimport CellsTable from '../../../pages/tablet_cell_bundles/cells/CellsTable';\nimport {\n setTabletsActiveBundle,\n setTabletsPartial,\n} from '../../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getTabletsCellsSortState,\n getTabletsCellsSorted,\n getTabletsIsLoaded,\n getTabletsIsLoading,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {\n tabletActiveBundleLink,\n tabletAttributesPath,\n tabletCellNavigationLink,\n} from '../../../utils/components/tablet-cells';\n\nconst columns: ComponentProps<typeof CellsTable>['columns'] = [\n 'id',\n 'bundle',\n 'health',\n 'tablets',\n 'memory',\n 'uncompressed',\n 'compressed',\n 'peerAddress',\n 'state',\n 'actions',\n];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n cluster: getCluster(state),\n loading: getTabletsIsLoading(state),\n loaded: getTabletsIsLoaded(state),\n data: getTabletsCellsSorted(state),\n sortState: getTabletsCellsSortState(state),\n columns,\n activeBundleLink: tabletActiveBundleLink,\n attributesPath: tabletAttributesPath,\n cellNavigationLink: tabletCellNavigationLink,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial,\n setTabletsActiveBundle,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTable);\n","import React from 'react';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport CellsInstruments from '../../../pages/tablet_cell_bundles/cells/CellsInstruments.connected';\nimport CellsTable from '../../../pages/tablet_cell_bundles/cells/CellsTable.connected';\n\nexport function BundleCells() {\n return (\n <ErrorBoundary>\n <WithStickyToolbar toolbar={<CellsInstruments />} content={<CellsTable />} />\n </ErrorBoundary>\n );\n}\n","import copy from 'copy-to-clipboard';\nimport type {ThunkAction} from 'redux-thunk';\n\nimport {\n CHAOS_BUNDLES_ACTIVE_ACCOUNT,\n CHAOS_BUNDLES_LOAD_FAILURE,\n CHAOS_BUNDLES_LOAD_REQUEST,\n CHAOS_BUNDLES_LOAD_SUCCESS,\n CHAOS_BUNDLES_PARTIAL,\n} from '../../../constants/tablets';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {bundlesTrackVisit} from '../../../store/actions/favourites';\nimport type {RootState} from '../../../store/reducers';\nimport type {\n ChaosBundle,\n ChaosBundlesAction,\n ChaosPartialAction,\n} from '../../../store/reducers/chaos_cell_bundles';\nimport {\n filterChaosCellsByBundle,\n getChaosBundlesSorted,\n getChaosCells,\n prepareHostsFromCells,\n} from '../../../store/selectors/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport type {SortState} from '../../../types';\nimport {\n prepareBundles,\n prepareTabletCells,\n tabletActiveBundleLink,\n} from '../../../utils/components/tablet-cells';\nimport {getBatchError} from '../../../utils/utils';\nimport {getAppBrowserHistory} from '../../../store/window-store';\nimport {USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\n\ntype ChaosBundlesThunkAction = ThunkAction<void, RootState, unknown, ChaosBundlesAction>;\n\nexport function fetchChaosBundles(): ChaosBundlesThunkAction {\n return (dispatch) => {\n dispatch({type: CHAOS_BUNDLES_LOAD_REQUEST});\n const requests: BatchSubRequest[] = [\n {\n command: 'list' as const,\n parameters: {\n path: '//sys/chaos_cells',\n attributes: ['health', 'id', 'peers', 'status', 'tablet_cell_bundle'],\n ...USE_MAX_SIZE,\n },\n },\n {\n command: 'get' as const,\n parameters: {\n path: '//sys/chaos_cell_bundles',\n attributes: ['health', 'id', 'options'],\n ...USE_MAX_SIZE,\n },\n },\n ];\n\n return ytApiV3Id\n .executeBatch(YTApiId.chaosCellBundles, {requests})\n .then((results: Array<any>) => {\n const [{output: cells}, {output: bundles}] = results;\n const error = getBatchError(results, 'Tablet cell bundles cannot be loaded');\n if (error) {\n throw error;\n }\n\n const allCells = prepareTabletCells(cells);\n const allBundles = prepareBundles(allCells, bundles);\n\n dispatch({\n type: CHAOS_BUNDLES_LOAD_SUCCESS,\n data: {cells: allCells, bundles: allBundles},\n });\n })\n .catch((e: any) => {\n dispatch({type: CHAOS_BUNDLES_LOAD_FAILURE, data: e});\n });\n };\n}\n\nexport function setChaosBundlesSortState(\n bundlesSort: SortState<keyof ChaosBundle>,\n): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesSort}};\n}\n\nexport function setChaosBundlesNameFilter(bundlesNameFilter: string): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesNameFilter}};\n}\n\nexport function setChaosBundlesAccountFilter(bundlesAccountFilter: string): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesAccountFilter}};\n}\n\nexport function setChaosBundlesTagNodeFilter(bundlesTagNodeFilter: string): ChaosBundlesAction {\n return {type: CHAOS_BUNDLES_PARTIAL, data: {bundlesTagNodeFilter}};\n}\n\nexport function setChaosPartial(data: ChaosPartialAction['data']) {\n return {type: CHAOS_BUNDLES_PARTIAL, data};\n}\n\nexport function setChaosActiveBundle(activeBundle: string): ChaosBundlesThunkAction {\n return (dispatch) => {\n dispatch(bundlesTrackVisit(activeBundle));\n dispatch({\n type: CHAOS_BUNDLES_ACTIVE_ACCOUNT,\n data: {activeBundle},\n });\n };\n}\n\nexport function setChaosFirstBundleAsActive(): ChaosBundlesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const bundles = getChaosBundlesSorted(state);\n const [first] = bundles;\n if (!first) {\n return;\n }\n\n const cluster = getCluster(state);\n dispatch(setChaosActiveBundle(first.bundle));\n getAppBrowserHistory().push(tabletActiveBundleLink(cluster, first.bundle));\n };\n}\n\nexport function copyHostListToClipboard(bundle: string): ChaosBundlesThunkAction {\n return (_dispatch, getState) => {\n const cells = filterChaosCellsByBundle(bundle, getChaosCells(getState()));\n const hosts = prepareHostsFromCells(cells);\n copy(hosts || '');\n };\n}\n","import * as React from 'react';\nconst CircleQuestion = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11ZM8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14ZM6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.079.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.326.257-.379.328-.038.052-.038.07-.038.089a.75.75 0 0 1-1.5 0c0-.794.544-1.286 1.057-1.645.28-.196.4-.332.458-.426a.543.543 0 0 0 .074-.312c0-.3-.243-.641-.839-.641a.997.997 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 1 1-1.5 0c0-.674.345-1.22.78-1.577ZM8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\", clipRule: \"evenodd\" })));\nexport default CircleQuestion;\n","import React from 'react';\nimport { CircleQuestion } from '@gravity-ui/icons';\nimport { Icon, Popover } from '@gravity-ui/uikit';\nimport { block } from '../utils/cn';\nimport './HelpPopover.css';\nconst b = block('help-popover');\nconst ICON_SIZE = 16;\nexport function HelpPopover(props) {\n var _a;\n return (React.createElement(Popover, Object.assign({}, props, { className: b(null, props.className) }),\n React.createElement(\"button\", Object.assign({ ref: props.buttonRef, type: \"button\" }, props.buttonProps, { className: b('button', (_a = props.buttonProps) === null || _a === void 0 ? void 0 : _a.className) }),\n React.createElement(Icon, { data: CircleQuestion, size: ICON_SIZE }))));\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\nimport {Progress} from '@gravity-ui/uikit';\nimport {HelpPopover} from '@gravity-ui/components';\n\nimport AccountLink from '../../../pages/accounts/AccountLink';\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport Button from '../../../components/Button/Button';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport ColumnHeader from '../../../components/ColumnHeader/ColumnHeader';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport Icon from '../../../components/Icon/Icon';\nimport Link from '../../../components/Link/Link';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport {\n BundleBalancerValue,\n Health,\n} from '../../../pages/tablet_cell_bundles/bundle/BundleGeneralMeta';\nimport type {TabletBundle} from '../../../store/reducers/tablet_cell_bundles';\nimport type {SortState} from '../../../types';\nimport type {OrderType} from '../../../utils/sort-helpers';\nimport {calcProgressProps} from '../../../utils/utils';\n\nimport './BundlesTable.scss';\nimport UIFactory from '../../../UIFactory';\nimport {ClusterUiConfig} from '../../../../shared/yt-types';\nimport {WaitForFont} from '../../../containers/WaitForFont/WaitForFont';\n\nconst block = cn('bundles-table');\n\nconst TABLE_SETTINGS: Settings = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyFooter: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n stickyBottom: 0,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n\nconst COLUMN_TITLE: {[name: string]: string} = {\n bundle: 'Bundle / Node tag filter',\n tabletCells: 'Cells',\n uncompressed: 'Uncompressed size',\n compressed: 'Compressed size',\n enable_bundle_controller: 'Bundle controller',\n enable_bundle_balancer: 'Bundle balancer',\n changelog_account: 'Changelog and Snapshot account',\n node_tag_filter: 'Node tag filter',\n actions: ' ',\n tablet_count: 'Usage',\n tablet_count_limit: 'Limit',\n tablet_count_free: 'Free',\n tablet_count_percentage: 'Percentage',\n tablet_static_memory: 'Usage',\n tablet_static_memory_limit: 'Limit',\n tablet_static_memory_free: 'Free',\n tablet_static_memory_percentage: 'Percentage',\n};\n\nconst SHORT_TITLE: typeof COLUMN_TITLE = {\n enable_bundle_balancer: 'BB',\n enable_bundle_controller: 'BC',\n};\n\nfunction CopyHostListAction(props: {\n bundle: string;\n copyHostListToClipboard(bundle: string): void;\n}) {\n const {bundle, copyHostListToClipboard} = props;\n\n const handleClick = React.useCallback(\n () => copyHostListToClipboard(bundle),\n [bundle, copyHostListToClipboard],\n );\n\n return (\n <div className={block('actions-copy-hosts')} onClick={handleClick}>\n <Tooltip\n content={<span className={block('no-wrap')}>Copy hosts to clipboard</span>}\n placement={'bottom-start'}\n >\n <ClipboardButton view=\"flat-secondary\" onCopy={handleClick} />\n </Tooltip>\n </div>\n );\n}\n\nclass BundlesTable extends React.Component<ReduxProps> {\n renderColumnHeader = (col: string, sortable: boolean) => {\n const {column, order} = this.props.sortState || {};\n const isSorted = col === column;\n\n return (\n <ColumnHeader\n className={block('header-cell', {col, sortable}, 'data-table__head-cell')}\n column={col}\n title={COLUMN_TITLE[col]}\n shortTitle={SHORT_TITLE[col]}\n order={isSorted ? order : undefined}\n onSort={sortable ? this.onColumnSort : undefined}\n withUndefined\n />\n );\n };\n\n onColumnSort = (column: string, order: OrderType) => {\n this.props.setBundlesSortState({\n column: column as keyof TabletBundle,\n order,\n });\n };\n\n renderBundle = (data: {row: TabletBundle}) => {\n const {activeBundleLink, cluster, clusterUiConfig} = this.props;\n const {bundle, node_tag_filter, enable_bundle_controller} = data?.row || {};\n const has_tag = Boolean(node_tag_filter);\n return (\n <div className={block('bundle')}>\n <div className={block('name', {has_tag})}>\n {!bundle ? (\n 'Total'\n ) : (\n <Link\n routed\n theme={'primary'}\n url={activeBundleLink(cluster, bundle, enable_bundle_controller)}\n onClick={() => {\n this.props.setActiveBundle(bundle);\n }}\n >\n {data?.row?.bundle}\n </Link>\n )}\n {has_tag && <span className={block('name-tag')}>{node_tag_filter}</span>}\n </div>\n {UIFactory.renderBundlesTableItemExtraControls({\n bundle: data.row,\n clusterUiConfig,\n itemClassName: block('extra-control'),\n })}\n </div>\n );\n };\n\n renderNumber(colName: keyof TabletBundle, data: {row: TabletBundle}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Number'](value);\n }\n\n renderBytes(colName: keyof TabletBundle, data: {row: TabletBundle}) {\n const {[colName]: value} = data?.row || {};\n return hammer.format['Bytes'](value);\n }\n\n renderBB(data: {row: TabletBundle}) {\n const {bundle, enable_bundle_balancer: value} = data?.row || {};\n const isTotalAggregatedRow = !bundle;\n if (isTotalAggregatedRow) return null;\n\n return <BundleBalancerValue value={value} />;\n }\n\n renderBC(data: {row: TabletBundle}) {\n const {bundle, enable_bundle_controller: value} = data?.row || {};\n const isTotalAggregatedRow = !bundle;\n if (isTotalAggregatedRow) return null;\n\n return <BundleBalancerValue value={value} />;\n }\n\n renderAccount = (data: {row: TabletBundle}) => {\n const {cluster} = this.props;\n const {changelog_account, snapshot_account} = data?.row || {};\n return (\n <React.Fragment>\n <AccountLink cluster={cluster} account={changelog_account} />\n {changelog_account !== snapshot_account && (\n <React.Fragment>\n {', '}\n <AccountLink cluster={cluster} account={snapshot_account} />\n </React.Fragment>\n )}\n </React.Fragment>\n );\n };\n\n renderHealth(data: {row: TabletBundle}) {\n const {health} = data?.row || {};\n return <Health value={health} />;\n }\n\n renderNodes = (data: {row: TabletBundle}) => {\n const {nodes, node_tag_filter, unique_node_tag, bundle} = data?.row || {};\n if (!unique_node_tag && bundle) {\n const help_tooltip = `This bundle shares nodes with other bundles having node tag filter\n \"${node_tag_filter}\". Actual amount of available resources depends on the number of tablet cells and may\n be less than displayed in this column.`;\n return (\n <div className={block('nodes')}>\n <HelpPopover\n className={block('help-tooltip')}\n delayClosing={50}\n placement={'auto'}\n content={help_tooltip}\n />\n {nodes?.length}\n </div>\n );\n }\n return nodes?.length;\n };\n\n renderActions = (data: {row: TabletBundle}) => {\n const {\n allowPerBundleAccounting,\n bundleDashboardUrl,\n cluster,\n copyHostListToClipboard,\n pathPrefix,\n showCellBundleEditor,\n writeableByName,\n } = this.props;\n const {bundle, nodes, enable_bundle_controller} = data?.row || {};\n if (!bundle) {\n return;\n }\n const path = `${pathPrefix}${bundle}`;\n\n const allowEdit = enable_bundle_controller ?? writeableByName?.get(bundle);\n return (\n <div className={block('actions')}>\n <div className={block('actions-attrs')}>\n <ClickableAttributesButton\n size=\"m\"\n view=\"flat-secondary\"\n title={path}\n path={path}\n />\n </div>\n {allowPerBundleAccounting && allowEdit && (\n <div className={block('actions-attrs')}>\n <Button\n size=\"m\"\n view=\"flat-secondary\"\n onClick={() => showCellBundleEditor(bundle)}\n >\n <Icon awesome={'pencil'} />\n </Button>\n </div>\n )}\n {bundleDashboardUrl && (\n <div className={block('actions-attrs')}>\n <ChartLink\n url={bundleDashboardUrl(cluster, bundle)}\n wrapContent={(node) => (\n <Button size=\"m\" view=\"flat-secondary\">\n {node}\n </Button>\n )}\n />\n </div>\n )}\n {nodes && nodes.length > 0 && (\n <CopyHostListAction\n bundle={bundle}\n copyHostListToClipboard={copyHostListToClipboard}\n />\n )}\n </div>\n );\n };\n\n renderTabletCountPercentage(data: {row: TabletBundle}) {\n if (data.row.tablet_count_percentage === undefined) {\n return hammer.format.NO_VALUE;\n }\n\n const {tablet_count, tablet_count_limit} = data.row;\n const {value, theme, text} = calcProgressProps(tablet_count, tablet_count_limit, 'Number');\n\n return value === undefined ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value} theme={theme} text={text} />\n );\n }\n\n renderTabletStaticMemoryPercentage(data: {row: TabletBundle}) {\n if (data.row.tablet_static_memory_percentage === undefined) {\n return hammer.format.NO_VALUE;\n }\n\n const {tablet_static_memory, tablet_static_memory_limit} = data.row;\n const {value, theme, text} = calcProgressProps(\n tablet_static_memory,\n tablet_static_memory_limit,\n 'Bytes',\n );\n\n return value === undefined ? (\n hammer.format.NO_VALUE\n ) : (\n <Progress value={value} theme={theme} text={text} />\n );\n }\n\n column(name: string, sortable = false): Column<TabletBundle> {\n return {\n name,\n align: 'left',\n sortable: false,\n className: block('td', {col: name.toLowerCase()}),\n header: this.renderColumnHeader(name, sortable),\n };\n }\n\n sortableColumn(columnName: keyof TabletBundle) {\n return this.column(columnName, true);\n }\n\n render() {\n const columns = this.props.columns.map((x) => Columns[x].call(this));\n\n const {data, total, loading, loaded} = this.props;\n\n return (\n <div className={block()}>\n <WaitForFont>\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={data}\n settings={TABLE_SETTINGS}\n theme={'bundles-table'}\n footerData={data.length ? [total] : undefined}\n />\n </WaitForFont>\n </div>\n );\n }\n}\n\nconst Columns = {\n bundle(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('bundle'),\n render: this.renderBundle,\n };\n },\n tablet_count_percentage(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count_percentage'),\n render: this.renderTabletCountPercentage,\n width: 260,\n align: 'center',\n };\n },\n tablet_count(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count'),\n render: this.renderNumber.bind(this, 'tablet_count'),\n align: 'right',\n width: 150,\n };\n },\n tablet_count_limit(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count_limit'),\n render: this.renderNumber.bind(this, 'tablet_count_limit'),\n align: 'right',\n width: 150,\n };\n },\n tablet_count_free(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_count_free'),\n render: this.renderNumber.bind(this, 'tablet_count_free'),\n align: 'right',\n width: 150,\n };\n },\n tablet_static_memory_percentage(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory_percentage'),\n render: this.renderTabletStaticMemoryPercentage,\n width: 260,\n align: 'center',\n };\n },\n tablet_static_memory(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory'),\n render: this.renderBytes.bind(this, 'tablet_static_memory'),\n align: 'right',\n width: 150,\n };\n },\n tablet_static_memory_limit(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory_limit'),\n render: this.renderBytes.bind(this, 'tablet_static_memory_limit'),\n align: 'right',\n width: 150,\n };\n },\n tablet_static_memory_free(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablet_static_memory_free'),\n render: this.renderBytes.bind(this, 'tablet_static_memory_free'),\n align: 'right',\n width: 150,\n };\n },\n health(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('health'),\n render: this.renderHealth,\n align: 'center',\n width: 110,\n };\n },\n nodes(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('nodes'),\n render: this.renderNodes,\n align: 'right',\n width: 85,\n };\n },\n tabletCells(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tabletCells'),\n render: this.renderNumber.bind(this, 'tabletCells'),\n align: 'right',\n width: 85,\n };\n },\n tablets(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('tablets'),\n render: this.renderNumber.bind(this, 'tablets'),\n align: 'right',\n width: 100,\n };\n },\n memory(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('memory'),\n render: this.renderBytes.bind(this, 'memory'),\n align: 'right',\n width: 100,\n };\n },\n uncompressed(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('uncompressed'),\n align: 'right',\n render: this.renderBytes.bind(this, 'uncompressed'),\n width: 150,\n };\n },\n compressed(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('compressed'),\n align: 'right',\n render: this.renderBytes.bind(this, 'compressed'),\n width: 120,\n };\n },\n enable_bundle_balancer(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('enable_bundle_balancer'),\n align: 'center',\n render: this.renderBB,\n width: 80,\n };\n },\n enable_bundle_controller(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('enable_bundle_controller'),\n align: 'center',\n render: this.renderBC,\n width: 80,\n };\n },\n changelog_account(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.sortableColumn('changelog_account'),\n render: this.renderAccount,\n width: 235,\n };\n },\n actions(this: BundlesTable): Column<TabletBundle> {\n return {\n ...this.column('actions'),\n render: this.renderActions,\n width: 100,\n };\n },\n};\n\nexport type ReduxProps = {\n loading: boolean;\n loaded: boolean;\n data: TabletBundle[];\n total: TabletBundle;\n sortState?: SortState<keyof TabletBundle>;\n cluster: string;\n clusterUiConfig?: ClusterUiConfig;\n allowPerBundleAccounting: boolean | undefined;\n pathPrefix: string;\n columns: Array<keyof typeof Columns>;\n activeBundleLink(cluster: string, bundle: string, enable_bundle_controller?: boolean): string;\n bundleDashboardUrl?(cluster: string, bundle: string): string | undefined;\n writeableByName?: {get: (bundleName: string) => boolean | undefined};\n} & {\n copyHostListToClipboard(bundle: string): void;\n setBundlesSortState(bundlesSort: SortState<keyof TabletBundle>): void;\n setActiveBundle(activeBundle: string): void;\n showCellBundleEditor(bundleName: string): void;\n};\n\nexport default BundlesTable;\n","import type {ThunkAction} from 'redux-thunk';\n\nimport forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\n\nimport hammer from '../../../common/hammer';\nimport {\n TABLETS_BUNDLES_EDITOR_LOAD_FAILURE,\n TABLETS_BUNDLES_EDITOR_LOAD_REQUREST,\n TABLETS_BUNDLES_EDITOR_LOAD_SUCCESS,\n TABLETS_BUNDLES_EDITOR_PARTIAL,\n} from '../../../constants/tablets';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../store/reducers';\nimport type {\n BundleControllerInstanceDetails,\n TabletCellBundleEditorAction,\n} from '../../../store/reducers/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {fetchTabletsBundles} from '../../../store/actions/tablet_cell_bundles';\nimport {getBatchError, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {makeBatchSubRequest, prepareSetCommandForBatch} from '../../../utils/cypress-attributes';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {\n getTabletsBundles,\n getTabletsDefaultMemoryConfiguration,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {OrchidBundlesData} from '../../../store/reducers/tablet_cell_bundles';\nimport {BatchResults, BatchSubRequest} from '../../../../shared/yt-types';\n\ntype TabletCellBundleEditorThunkAction = ThunkAction<\n any,\n RootState,\n any,\n TabletCellBundleEditorAction\n>;\n\nexport function fetchTabletCellBundleEditor(bundleName: string): TabletCellBundleEditorThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n dispatch({type: TABLETS_BUNDLES_EDITOR_LOAD_REQUREST, data: {bundleName}});\n\n const bundles = getTabletsBundles(state);\n const toEdit = bundles.find(({bundle}) => bundle === bundleName);\n if (!toEdit) {\n return Promise.resolve();\n }\n const defaultReservedMemoryLimit = getTabletsDefaultMemoryConfiguration(state);\n\n const requests: Array<BatchSubRequest> = [\n {\n command: 'get',\n parameters: {\n path: `//sys/tablet_cell_bundles/${bundleName}`,\n attributes: [\n 'resource_usage',\n 'resource_limits',\n 'options',\n 'abc',\n 'folder_id',\n 'zone',\n 'enable_bundle_controller',\n ],\n },\n },\n ];\n\n if (toEdit.enable_bundle_controller) {\n requests.push({\n command: 'get',\n parameters: {\n path: `//sys/bundle_controller/orchid/bundle_controller/state/bundles/${bundleName}`,\n },\n });\n }\n\n return wrapApiPromiseByToaster(\n ytApiV3Id\n .executeBatch(YTApiId.tabletCellBundlesEditData, {requests})\n .then((results) => {\n const bundleControllerIsUnavailable =\n toEdit.enable_bundle_controller &&\n results[2]?.error?.code === yt.codes.NODE_DOES_NOT_EXIST;\n const error = getBatchError(\n bundleControllerIsUnavailable ? [results[0]] : results,\n 'Failed to get bundle edit data',\n );\n\n if (error) {\n throw error;\n }\n return results;\n }),\n {\n toasterName: 'edit-bundle-data',\n skipSuccessToast: true,\n errorContent: 'Failed to load bundle details',\n },\n )\n .then((results) => {\n const [{output: data}, {output: bundleControllerData} = {output: undefined}] =\n results as BatchResults<[unknown, OrchidBundlesData]>;\n\n let bundleData = toEdit;\n\n if (\n !toEdit.bundle_controller_target_config?.memory_limits.reserved &&\n defaultReservedMemoryLimit\n ) {\n bundleData = {\n ...toEdit,\n bundle_controller_target_config: {\n ...toEdit.bundle_controller_target_config!,\n memory_limits: {\n ...toEdit.bundle_controller_target_config?.memory_limits,\n reserved: defaultReservedMemoryLimit,\n },\n },\n };\n }\n\n dispatch({\n type: TABLETS_BUNDLES_EDITOR_LOAD_SUCCESS,\n data: {\n bundleData,\n data,\n bundleControllerData,\n },\n });\n\n const requestGroups: Array<Array<BatchSubRequest>> = [\n ...map_(bundleControllerData?.allocated_tablet_nodes, (_item, key) => {\n return [\n makeBatchSubRequest('get', {\n path: `//sys/cluster_nodes/${key}/@bundle_controller_annotations/nanny_service`,\n }),\n makeBatchSubRequest('get', {\n path: `//sys/cluster_nodes/${key}/@statistics/memory/tablet_static`,\n }),\n ];\n }),\n ...map_(bundleControllerData?.allocated_rpc_proxies, (_item, key) => {\n return [\n makeBatchSubRequest('get', {\n path: `//sys/rpc_proxies/${key}/@bundle_controller_annotations/nanny_service`,\n }),\n ];\n }),\n ];\n const errors = [];\n wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletCellBundlesInstancesDetails, {\n requests: map_(requestGroups, (item) => {\n return makeBatchSubRequest('execute_batch', {requests: item});\n }),\n }),\n {\n toasterName: 'bundle-controller-tablet-static-memory',\n skipSuccessToast: true,\n errorContent:\n 'BundleController: Cannot load tablet static memory of isntances',\n },\n ).then((nodesResults) => {\n const keys = [\n ...keys_(bundleControllerData?.allocated_tablet_nodes),\n ...keys_(bundleControllerData?.allocated_rpc_proxies),\n ];\n const instanceDetailsMap: Record<string, BundleControllerInstanceDetails> = {};\n forEach_(nodesResults, ({output, error}, index) => {\n if (error) {\n errors.push(error);\n } else {\n const [\n {output: nanny_service},\n {output: tablet_static_memory} = {output: undefined},\n ] = output;\n instanceDetailsMap[keys[index]] = {\n nanny_service,\n tablet_static_memory,\n };\n }\n });\n dispatch({type: TABLETS_BUNDLES_EDITOR_PARTIAL, data: {instanceDetailsMap}});\n });\n })\n .catch((e: any) => {\n dispatch({\n type: TABLETS_BUNDLES_EDITOR_LOAD_FAILURE,\n data: e,\n });\n return Promise.reject(e);\n });\n };\n}\n\nexport function showTabletCellBundleEditor(bundle: string): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch(fetchTabletCellBundleEditor(bundle)).then(() => {\n dispatch({type: TABLETS_BUNDLES_EDITOR_PARTIAL, data: {visibleEditor: true}});\n });\n };\n}\n\nexport function hideTabletCellBundleEditor(): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch({\n type: TABLETS_BUNDLES_EDITOR_PARTIAL,\n data: {bundleName: undefined, loaded: true, visibleEditor: false},\n });\n };\n}\n\nexport type BundleResourceType = 'tablet_count' | 'tablet_static_memory';\n\nexport function setBundleQuota(params: {\n bundleName: string;\n resourceType: BundleResourceType;\n limit: number;\n}): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n const {bundleName, resourceType, limit} = params;\n\n const resource = hammer.format['Readable'](resourceType);\n\n return wrapApiPromiseByToaster(\n yt.v3.set(\n {\n path: `//sys/tablet_cell_bundles/${bundleName}/@resource_limits/${resourceType}`,\n },\n limit,\n ),\n {\n toasterName: `edit_bundle_${bundleName}`,\n successContent: `Set quota limit for ${resource}`,\n errorContent: `Cannot set quota limit for ${resource}`,\n },\n ).then(() => {\n dispatch(showTabletCellBundleEditor(bundleName));\n });\n };\n}\n\nexport function setBundleEditorController(params: {\n bundleName: string;\n data: Record<string, unknown>;\n}): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n const {bundleName, data} = params;\n\n const bundlePath = `//sys/tablet_cell_bundles/${bundleName}`;\n\n const requests = map_(data, (value, path) =>\n prepareSetCommandForBatch(`${bundlePath}/${path}`, value),\n );\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletCellBundlesSetAttrs, {\n requests,\n } as any),\n {\n toasterName: `edit_bundle_${bundleName}`,\n successContent: `Set bundle edit data`,\n batchType: 'v3',\n errorTitle: 'Failed to set bundle edit data',\n },\n ).then(() => {\n dispatch(fetchTabletsBundles());\n });\n };\n}\n\nexport interface EditBundleParams {\n attributes: {\n abc?: {\n id: number;\n slug: string;\n };\n };\n options: {\n changelog_account?: string;\n snapshot_account?: string;\n };\n}\n\nexport function setBunndleAttributes(\n bundle: string,\n attrs: Partial<EditBundleParams>,\n): TabletCellBundleEditorThunkAction {\n return (dispatch) => {\n const {attributes, options} = attrs;\n\n const bundlePath = `//sys/tablet_cell_bundles/${bundle}`;\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletCellBundlesSetAttrs, {\n requests: [\n ...map_(attributes, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@${key}`, v),\n ),\n ...map_(options, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@options/${key}`, v),\n ),\n ],\n } as any),\n {\n toasterName: `update-bundle_${bundle}`,\n successContent: `${bundle} successfully updated`,\n batchType: 'v3',\n errorTitle: 'Failed to edit bundle',\n },\n ).then(() => {\n dispatch(showTabletCellBundleEditor(bundle));\n });\n };\n}\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\nimport {createSelector} from 'reselect';\n\nimport BundlesTable from '../../../pages/tablet_cell_bundles/bundles/BundlesTable';\nimport {\n setTabletsActiveBundle,\n setTabletsBundlesSortState,\n} from '../../../store/actions/tablet_cell_bundles';\nimport {showTabletCellBundleEditor} from '../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport type {RootState} from '../../../store/reducers';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\nimport {\n getCluster,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../../store/selectors/global';\nimport {\n getTabletBundlesTableMode,\n getTabletBundlesWriteableByName,\n getTabletsBundlesSortState,\n getTabletsBundlesSorted,\n getTabletsBundlesTotal,\n getTabletsIsLoaded,\n getTabletsIsLoading,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {tabletActiveBundleLink} from '../../../utils/components/tablet-cells';\nimport {tabletCellBundleDashboardUrl} from '../../../utils/tablet_cell_bundles';\n\nconst calcColumns = createSelector([getTabletBundlesTableMode], (mode: BundlesTableMode) => {\n const columns: ComponentProps<typeof BundlesTable>['columns'] = ['bundle'];\n\n switch (mode) {\n case 'tablets': {\n columns.push(\n 'tablet_count_percentage',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n );\n break;\n }\n case 'tablets_memory': {\n columns.push(\n 'tablet_static_memory_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n );\n break;\n }\n default: {\n columns.push(\n 'health',\n 'nodes',\n 'tabletCells',\n 'tablets',\n 'memory',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_controller',\n 'enable_bundle_balancer',\n 'changelog_account',\n );\n }\n }\n\n columns.push('actions');\n\n return columns;\n});\n\nconst mapStateToProps = (state: RootState) => {\n return {\n loading: getTabletsIsLoading(state),\n loaded: getTabletsIsLoaded(state),\n data: getTabletsBundlesSorted(state),\n total: getTabletsBundlesTotal(state),\n sortState: getTabletsBundlesSortState(state),\n cluster: getCluster(state),\n allowPerBundleAccounting: getClusterUiConfigEnablePerBundleTabletAccounting(state),\n pathPrefix: '//sys/tablet_cell_bundles/',\n columns: calcColumns(state),\n activeBundleLink: tabletActiveBundleLink,\n bundleDashboardUrl: tabletCellBundleDashboardUrl,\n writeableByName: getTabletBundlesWriteableByName(state),\n };\n};\n\nconst mapDispatchToProps = {\n setBundlesSortState: setTabletsBundlesSortState,\n setActiveBundle: setTabletsActiveBundle,\n showCellBundleEditor: showTabletCellBundleEditor,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTable);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport CustomRadioButton from '../../../components/RadioButton/RadioButton';\nimport type {setTabletsPartial} from '../../../store/actions/tablet_cell_bundles';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\nimport {getClusterUiConfigEnablePerBundleTabletAccounting} from '../../../store/selectors/global';\n\ninterface Props {\n bundlesTableMode: BundlesTableMode;\n setTabletsPartial: typeof setTabletsPartial;\n modes: BundlesTableMode[];\n}\n\nfunction BundlesTableModeRadio({bundlesTableMode: value, setTabletsPartial, modes}: Props) {\n const dispatch = useDispatch();\n\n const allowTabs = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(setTabletsPartial({bundlesTableMode: e.target.value as any}));\n },\n [dispatch],\n );\n\n const modeItems = modes.map(CustomRadioButton.prepareSimpleValue);\n\n return !allowTabs ? null : (\n <CustomRadioButton items={modeItems} value={value} onChange={handleChange} />\n );\n}\n\nexport default React.memo(BundlesTableModeRadio);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport compact_ from 'lodash/compact';\n\nimport Filter from '../../../components/Filter/Filter';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport BundlesTableModeRadio from '../../../pages/tablet_cell_bundles/bundles/BundlesTableModeRadio';\nimport type {setTabletsPartial} from '../../../store/actions/tablet_cell_bundles';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\n\nimport './BundlesTableInstruments.scss';\n\nconst block = cn('bundles-table-instruments');\n\nexport interface Props {\n className?: string;\n}\n\nclass BundlesTableInstruments extends React.Component<Props & ReduxProps> {\n onNameEnterKeyDown = () => {\n this.props.setTabletsFirstBundleAsActive();\n };\n\n render() {\n const {\n accountFilter,\n bundlesTableMode,\n className,\n modes,\n nameFilter,\n setTabletsPartial,\n tagNodeFilter,\n } = this.props;\n\n return (\n <Toolbar\n className={block(null, className)}\n itemsToWrap={compact_([\n {\n name: 'name',\n node: (\n <Filter\n className={block('text-filter')}\n hasClear\n autofocus\n size=\"m\"\n type=\"text\"\n value={nameFilter}\n placeholder=\"Enter bundle name...\"\n onChange={this.props.setTabletsBundlesNameFilter}\n onEnterKeyDown={this.onNameEnterKeyDown}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'account',\n node: (\n <Filter\n className={block('account-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={accountFilter}\n placeholder=\"Enter changelog or snapshot account...\"\n onChange={this.props.setTabletsBundlesAccountFilter}\n autofocus={false}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n {\n name: 'tagNode',\n node: (\n <Filter\n className={block('account-filter')}\n hasClear\n size=\"m\"\n type=\"text\"\n value={tagNodeFilter}\n placeholder=\"Enter node tag filter...\"\n onChange={this.props.setTabletsBundlesTagNodeFilter}\n autofocus={false}\n />\n ),\n shrinkable: true,\n growable: true,\n wrapperClassName: block('item'),\n },\n (modes.length > 1 || modes[0] !== bundlesTableMode) && {\n name: 'tableMode',\n node: (\n <BundlesTableModeRadio\n bundlesTableMode={bundlesTableMode}\n setTabletsPartial={setTabletsPartial}\n modes={modes}\n />\n ),\n shrinkable: false,\n growable: false,\n wrapperClassName: block('item'),\n },\n ])}\n />\n );\n }\n}\n\ntype ReduxProps = {\n accountFilter: string;\n bundlesTableMode: BundlesTableMode;\n modes: BundlesTableMode[];\n nameFilter: string;\n tagNodeFilter: string;\n} & {\n setTabletsBundlesNameFilter(bundlesNameFilter: string): void;\n setTabletsBundlesAccountFilter(bundlesAccountFilter: string): void;\n setTabletsBundlesTagNodeFilter(bundlesTagNodeFilter: string): void;\n setTabletsFirstBundleAsActive(): void;\n setTabletsPartial: typeof setTabletsPartial;\n};\n\nexport default BundlesTableInstruments;\n","import {connect} from 'react-redux';\n\nimport BundlesTableInstruments from '../../../pages/tablet_cell_bundles/bundles/BundlesTableInstruments';\nimport {\n setTabletsBundlesAccountFilter,\n setTabletsBundlesNameFilter,\n setTabletsBundlesTagNodeFilter,\n setTabletsFirstBundleAsActive,\n setTabletsPartial,\n} from '../../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport type {BundlesTableMode} from '../../../store/reducers/tablet_cell_bundles';\nimport {\n getTabletBundlesTableMode,\n getTabletsBundlesAccountFilter,\n getTabletsBundlesNameFilter,\n getTabletsBundlesTagNodeFilter,\n} from '../../../store/selectors/tablet_cell_bundles';\n\nconst modes: Array<BundlesTableMode> = ['default', 'tablets', 'tablets_memory'];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n accountFilter: getTabletsBundlesAccountFilter(state),\n bundlesTableMode: getTabletBundlesTableMode(state),\n nameFilter: getTabletsBundlesNameFilter(state),\n tagNodeFilter: getTabletsBundlesTagNodeFilter(state),\n modes,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsBundlesNameFilter,\n setTabletsBundlesAccountFilter,\n setTabletsBundlesTagNodeFilter,\n setTabletsFirstBundleAsActive,\n setTabletsPartial: setTabletsPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTableInstruments);\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport BundlesTable from '../../../pages/tablet_cell_bundles/bundles/BundlesTable.connected';\nimport BundlesTableInstruments from '../../../pages/tablet_cell_bundles/bundles/BundlesTableInstruments.connected';\nimport {\n copyHostListToClipboard,\n setTabletsActiveBundle,\n} from '../../../store/actions/tablet_cell_bundles';\n\nexport default function Bundles() {\n const dispatch = useDispatch();\n\n const handleCopyHostListToClipboard = React.useCallback(\n (bundle: string) => {\n dispatch(copyHostListToClipboard(bundle));\n },\n [dispatch],\n );\n\n React.useEffect(() => {\n dispatch(setTabletsActiveBundle(''));\n }, [dispatch]);\n\n return (\n <ErrorBoundary>\n <WithStickyToolbar\n toolbar={<BundlesTableInstruments />}\n content={<BundlesTable copyHostListToClipboard={handleCopyHostListToClipboard} />}\n />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {getTabletsActiveBundle} from '../../../store/selectors/tablet_cell_bundles';\nimport {getCluster, getTheme} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\nimport {NoContent} from '../../../components/NoContent/NoContent';\n\nfunction BundleStatisticsTab() {\n const cluster = useSelector(getCluster);\n const bundle = useSelector(getTabletsActiveBundle);\n const theme = useSelector(getTheme);\n\n if (!bundle) {\n return (\n <NoContent\n warning=\"You don't have any selected bundles\"\n hint=\"Please choose one to display charts\"\n />\n );\n }\n\n const StatisticsComponent = UIFactory.getStatisticsComponentForBundle()!;\n\n return (\n <ErrorBoundary>\n <StatisticsComponent {...{cluster, bundle, theme}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(BundleStatisticsTab);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../../../store/selectors/global';\nimport ypath from '../../../common/thor/ypath';\nimport {getTabletsActiveBundleData} from '../../../store/selectors/tablet_cell_bundles';\n\nimport {NoContent} from '../../../components/NoContent/NoContent';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\n\nimport './BundleMonitorTab.scss';\n\nfunction BundleMonitorTab(props: {\n component: React.ComponentType<{cluster: string; tablet_cell_bundle: string; bundleData: any}>;\n}) {\n const {component: BundleMonitor} = props;\n const bundleData = useSelector(getTabletsActiveBundleData);\n const cluster = useSelector(getCluster);\n\n const tablet_cell_bundle: undefined | string = React.useMemo(() => {\n return ypath.getValue(bundleData, '/bundle');\n }, [bundleData]);\n\n if (!tablet_cell_bundle) {\n return (\n <NoContent\n warning=\"You don't have any selected bundles\"\n hint=\"Please choose one to display charts\"\n />\n );\n }\n\n return (\n <ErrorBoundary>\n <BundleMonitor {...{cluster, tablet_cell_bundle, bundleData}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(BundleMonitorTab);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {getTabletsActiveBundle} from '../../../store/selectors/tablet_cell_bundles';\nimport {isPoolAclAllowed} from '../../../store/selectors/scheduling/scheduling';\nimport {NoContent} from '../../../components/NoContent/NoContent';\nimport {BundleAcl} from '../../../containers/ACL';\n\nexport default function BundleAclTab({className}: {className: string}) {\n const activeBundle = useSelector(getTabletsActiveBundle);\n const allowAcl = useSelector(isPoolAclAllowed);\n return (\n <ErrorBoundary>\n {allowAcl ? (\n <BundleAcl {...{path: activeBundle, className}} />\n ) : (\n <NoContent\n className={className}\n hint={\"The cluster is not ready to work with bundle's ACL\"}\n />\n )}\n </ErrorBoundary>\n );\n}\n","import React from 'react';\n\nimport cn from 'bem-cn-lite';\n\nimport './ColorCircle.scss';\n\nconst block = cn('yt-color-circle');\n\nexport function ColorCircle({color, marginRight = true}: {color: string; marginRight?: boolean}) {\n return (\n <div className={block({'margin-right': marginRight})} style={{backgroundColor: color}} />\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../common/hammer';\n\nimport {Progress, ProgressProps} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {ColorCircle} from '../../components/ColorCircle/ColorCircle';\n\nimport {getProgressBarColorByIndex} from '../../constants/colors';\nimport MetaTable, {MetaTableItem} from '../../components/MetaTable/MetaTable';\n\nimport {CPULimits, MemoryLimits} from '../../store/reducers/tablet_cell_bundles';\n\nimport './BundleMetaResourceProgress.scss';\n\nconst block = cn('bundle-meta-resource-progress');\n\ntype ResourceProgress = {\n data: MemoryLimits | CPULimits;\n limit?: number;\n resourceType: 'Number' | 'vCores' | 'Bytes';\n postfix?: string;\n};\n\nexport function BundleMetaResourceProgress(\n title: string,\n {data, limit, resourceType, postfix = ''}: ResourceProgress,\n) {\n const {props, text, commonTooltip} = getProgressData({data, limit, resourceType, postfix});\n\n return {\n key: title,\n value: (\n <div className={block()}>\n <Tooltip placement={'bottom'} content={commonTooltip}>\n <Progress className={block('progress')} {...props} text={text} />\n </Tooltip>\n </div>\n ),\n };\n}\n\nfunction getProgressData({data, limit, resourceType, postfix}: ResourceProgress) {\n const props: ProgressProps = {\n stack: [],\n };\n\n const sum = reduce_(data, (acc, v) => acc + Number(v), 0);\n const max = limit ?? sum;\n\n const text = `${hammer.format[resourceType](sum)} ${postfix}`.trim();\n const metaItems: Array<MetaTableItem> = [];\n\n forEach_(data, (value, name) => {\n const formattedValue = hammer.format[resourceType](value);\n const color = getProgressBarColorByIndex(props.stack.length);\n\n metaItems.push({\n key: name,\n label: (\n <span>\n <ColorCircle color={color} marginRight />\n {hammer.format.Readable(name)}\n </span>\n ),\n value: `${formattedValue} ${postfix}`,\n });\n const fraction = (Number(value) / max) * 100;\n\n props.stack.push({\n color,\n value: fraction,\n });\n });\n\n const commonTooltip = <MetaTable items={metaItems} />;\n\n return {props, text, commonTooltip};\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport entries_ from 'lodash/entries';\nimport map_ from 'lodash/map';\nimport pick_ from 'lodash/pick';\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../../common/hammer';\n\nimport {\n getActiveBundleControllerData,\n getTabletsActiveBundleData,\n} from '../../../store/selectors/tablet_cell_bundles';\nimport {fetchTabletCellBundleEditor} from '../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {OrchidBundlesData} from '../../../store/reducers/tablet_cell_bundles';\nimport Icon from '../../../components/Icon/Icon';\nimport MetaTable, {MetaTableItem} from '../../../components/MetaTable/MetaTable';\nimport {BundleMetaResourceProgress} from '../../../components/BundleMetaResourceProgress/BundleMetaResourceProgress';\nimport {Health} from './BundleGeneralMeta';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {printUsageLimit} from '../../../utils';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {BatchSubRequest} from '../../../../shared/yt-types';\n\nimport './BundleConfigurationMeta.scss';\n\nconst block = cn('bundle-configuration-meta');\n\nconst DETAILS_KEYS = [\n 'allocating_rpc_proxy_count',\n 'allocating_tablet_node_count',\n 'deallocating_rpc_proxy_count',\n 'deallocating_tablet_node_count',\n 'removing_cell_count',\n] as const;\n\nexport function ActiveAccountBundleControllerUpdater() {\n const dispatch = useDispatch();\n const {bundle: activeBundle, enable_bundle_controller} =\n useSelector(getTabletsActiveBundleData) || {};\n const fetchFn = React.useCallback(() => {\n if (activeBundle) {\n dispatch(fetchTabletCellBundleEditor(activeBundle));\n }\n }, [dispatch, activeBundle]);\n useUpdater(fetchFn);\n\n const prevBundleControllerState = React.useRef<null | 'failed' | 'changing' | 'good'>(null);\n const checkBundleControllerState = React.useCallback(async () => {\n if (!activeBundle || !enable_bundle_controller) {\n return;\n }\n\n const requests: Array<BatchSubRequest> = [\n {\n command: 'get',\n parameters: {\n path: `//sys/bundle_controller/orchid/bundle_controller/state/bundles/${activeBundle}/alerts`,\n },\n },\n ...map_(DETAILS_KEYS, (attr) => {\n return {\n command: 'get' as const,\n parameters: {\n path: `//sys/bundle_controller/orchid/bundle_controller/state/bundles/${activeBundle}/${attr}`,\n },\n };\n }),\n ];\n\n const [{output: alerts} = {output: []}, ...rest] = await wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.tabletBundleControllerState, {requests}),\n {\n toasterName: 'active-bundle-controller-status',\n skipSuccessToast: true,\n errorContent: `Cannot load bundle controller details for \"${activeBundle}\".`,\n },\n ).catch(() => []);\n\n const inProgressCount = reduce_(\n rest,\n (acc, {output}) => {\n return acc + (output ?? 0);\n },\n 0,\n );\n\n const state = getState(alerts, inProgressCount);\n if (prevBundleControllerState.current === null) {\n prevBundleControllerState.current = state;\n return;\n }\n\n if (prevBundleControllerState.current !== state) {\n prevBundleControllerState.current = state;\n fetchFn();\n }\n }, [fetchFn, activeBundle, enable_bundle_controller]);\n useUpdater(checkBundleControllerState, {timeout: 3000});\n\n return null;\n}\n\nexport default function BundleConfigurationMeta() {\n const {bundle_controller_target_config: bundleControllerConfig} =\n useSelector(getTabletsActiveBundleData) || {};\n const orchidData = useSelector(getActiveBundleControllerData);\n\n if (!bundleControllerConfig || !orchidData) {\n return null;\n }\n\n const bundleGroup: Array<MetaTableItem> = [];\n\n if (orchidData) {\n const {resource_quota, resource_allocated} = orchidData;\n const {memory: allMemory, vcpu: allVCPU} = resource_quota;\n const {memory: allocMemory, vcpu: allocVCPU} = resource_allocated;\n\n bundleGroup.push(\n getBundleStateField(orchidData),\n getLimitAllocatedField('Memory allocated/limit', allocMemory, allMemory, 'Bytes'),\n getLimitAllocatedField('vCPU allocated/limit', allocVCPU, allVCPU, 'vCores'),\n );\n }\n\n if (typeof bundleControllerConfig.rpc_proxy_count !== 'undefined') {\n const {\n rpc_proxy_count: count,\n rpc_proxy_resource_guarantee: {memory, vcpu},\n } = bundleControllerConfig;\n\n bundleGroup.push(getRpcNodeField('RPC proxies', count, memory, vcpu));\n }\n\n if (typeof bundleControllerConfig.tablet_node_count !== 'undefined') {\n const {\n tablet_node_count: count,\n tablet_node_resource_guarantee: {memory, vcpu},\n } = bundleControllerConfig;\n bundleGroup.push(getRpcNodeField('Tablet nodes', count, memory, vcpu));\n }\n\n if (bundleControllerConfig.memory_limits) {\n const {memory} = bundleControllerConfig?.tablet_node_resource_guarantee || {};\n bundleGroup.push(\n BundleMetaResourceProgress('Memory allocation', {\n data: bundleControllerConfig.memory_limits,\n resourceType: 'Bytes',\n limit: memory,\n }),\n );\n }\n\n if (bundleControllerConfig.cpu_limits) {\n bundleGroup.push(\n BundleMetaResourceProgress('vCPU allocation', {\n data: bundleControllerConfig.cpu_limits,\n resourceType: 'Number',\n postfix: 'threads',\n }),\n );\n }\n\n return (\n <MetaTable className={block()} subTitles={['Bundle configuration']} items={[bundleGroup]} />\n );\n}\n\nfunction getLimitAllocatedField(\n title: string,\n allocated: number,\n all: number,\n type: 'Bytes' | 'vCores',\n) {\n const allStr = hammer.format[type](all);\n const allocatedStr = hammer.format[type](allocated);\n const percentage = hammer.format['Number']((allocated / all) * 100 || 0);\n\n return {\n key: title,\n value: (\n <span>\n {printUsageLimit(allocatedStr, allStr)}\n <span className={block('percentage')}>{percentage}%</span>\n </span>\n ),\n };\n}\n\nfunction getRpcNodeField(title: string, count: number, memory: number, vcpu: number) {\n const printMemory = hammer.format['Bytes'](memory);\n const printVCPU = hammer.format['vCores'](vcpu);\n return {\n key: title,\n value: count ? `${count} x (${printMemory}, ${printVCPU})` : 0,\n };\n}\n\nfunction getState(alerts?: OrchidBundlesData['alerts'], totalCounts = 0) {\n if (!alerts?.length && totalCounts === 0) {\n return 'good' as const;\n } else if (!alerts?.length && totalCounts > 0) {\n return 'changing' as const;\n }\n return 'failed' as const;\n}\n\nexport function getBundleStateData(orchidData: OrchidBundlesData) {\n const alerts = orchidData.alerts;\n const detailsEntries = entries_(pick_(orchidData, DETAILS_KEYS));\n const totalCounts = reduce_(detailsEntries, (acc, [_k, v]) => acc + v, 0);\n const state = getState(alerts, totalCounts);\n return {state, detailsEntries};\n}\n\nfunction getBundleStateField(orchidData: OrchidBundlesData) {\n const {alerts} = orchidData;\n\n const {state: value, detailsEntries} = getBundleStateData(orchidData);\n if (value === 'good') {\n return {\n key: 'State',\n value: <Health className={block('health', {value})} value={value} />,\n };\n }\n\n if (value === 'changing') {\n return {\n key: 'State',\n value: (\n <Tooltip\n content={renderDetails(detailsEntries)}\n placement={'bottom'}\n className={block('state-with-icon')}\n >\n <Health className={block('health', {value})} value={value} />\n &nbsp;\n <Icon awesome=\"question-circle\" />\n </Tooltip>\n ),\n };\n }\n\n return {\n key: 'State',\n value: (\n <Tooltip\n content={renderErrors(alerts)}\n placement={'bottom'}\n className={block('state-with-icon')}\n >\n <Health className={block('health', {value})} value={value} />\n &nbsp;\n <Icon awesome=\"exclamation-triangle\" />\n </Tooltip>\n ),\n };\n}\n\nfunction renderDetails(details: Array<[string, number]>) {\n const list = details.map(([k, v]) => `${k} - ${v}`);\n return (\n <ul className={block('tooltip-list')}>\n {list.map((text, i) => {\n return (\n <li key={i} className={block('tooltip-item')}>\n {text}\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction renderErrors(alerts: OrchidBundlesData['alerts']) {\n return (\n <ol className={block('tooltip-list', {alerts: true})}>\n {alerts.map((alert) => {\n return (\n <li key={alert.id} className={block('tooltip-item')}>\n {alert.id} - {alert.description}\n </li>\n );\n })}\n </ol>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport BundleGeneralMeta from './BundleGeneralMeta';\nimport BundleConfigurationMeta, {\n ActiveAccountBundleControllerUpdater,\n} from './BundleConfigurationMeta';\n\nimport './BundleMetaTable.scss';\n\nconst block = cn('bundle-meta-table');\n\nexport default function BundleMetaTable() {\n return (\n <div className={block('container')}>\n <BundleGeneralMeta />\n <BundleConfigurationMeta />\n <ActiveAccountBundleControllerUpdater />\n </div>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\n\nimport format from '../../../common/hammer/format';\n\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\nimport DataTableYT from '../../../components/DataTableYT/DataTableYT';\nimport {Toolbar} from '../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport Filter from '../../../components/Filter/Filter';\nimport Label from '../../../components/Label/Label';\nimport Link from '../../../components/Link/Link';\nimport WithStickyToolbar, {\n STICKY_TOOLBAR_BOTTOM,\n} from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport Icon from '../../../components/Icon/Icon';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\n\nimport {AllocatedInstance, InProgressInstance} from '../../../store/reducers/tablet_cell_bundles';\n\nimport './CellsBundleController.scss';\nimport {lastWord, printUsageLimit} from '../../../utils';\nimport ClickableAttributesButton from '../../../components/AttributesButton/ClickableAttributesButton';\nimport {makeNavigationLink} from '../../../utils/app-url';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {Progress} from '@gravity-ui/uikit';\nimport {computeProgress, getProgressTheme} from '../../../utils/progress';\n\nconst block = cn('cells-bundle-controller');\n\ninterface RowData {\n address?: string;\n url?: string;\n data?: AllocatedInstance;\n allocationState?: InProgressInstance['hulk_request_state'] | 'removing';\n hulkRequestPath?: string;\n tablet_static_memory?: {used?: number; limit?: number};\n deployUrl?: string;\n nannyUrl?: string;\n}\n\ntype ColumnRenderProps<T> = {\n value?: unknown;\n row: T;\n index: number;\n footer?: boolean;\n headerData?: boolean;\n};\n\nconst COLUMNS: Array<Column<RowData>> = [\n {\n name: 'Address',\n render: ({row}) => {\n const {url, address} = row;\n return (\n <span>\n <Link className={block('address-host')} url={url} routed>\n {address}\n </Link>\n {address && (\n <ClipboardButton\n text={address}\n view={'flat'}\n inlineMargins\n visibleOnRowHover\n />\n )}\n </span>\n );\n },\n sortable: false,\n },\n {\n name: 'Type',\n render: renderType,\n sortable: false,\n width: 200,\n },\n {\n name: 'tablet_static_memory',\n header: 'Tablet static memory',\n render: ({row}) => {\n const {tablet_static_memory} = row;\n if (!tablet_static_memory) {\n return format.NO_VALUE;\n }\n\n const {used, limit} = tablet_static_memory;\n const text = printUsageLimit(format.Bytes(used), format.Bytes(limit));\n const progress = computeProgress(used, limit) ?? 0;\n return <Progress value={progress} theme={getProgressTheme(progress)} text={text} />;\n },\n sortable: false,\n width: 200,\n align: 'center',\n },\n {\n name: 'Allocation request',\n render: ({row}) => {\n const {hulkRequestPath} = row;\n if (!hulkRequestPath) {\n return format.NO_VALUE;\n }\n\n const {suffix: uuid} = lastWord(hulkRequestPath, '/');\n return (\n <span className={block('alloc-request')}>\n <ClickableAttributesButton\n className={block('alloc-request-attrs')}\n title={uuid}\n exactPath={hulkRequestPath}\n />\n <Link\n className={block('alloc-request-url')}\n url={makeNavigationLink({path: hulkRequestPath})}\n >\n {uuid}\n </Link>\n </span>\n );\n },\n width: 300,\n align: 'center',\n sortable: false,\n },\n {\n name: 'Allocation state',\n render: ({row}) => {\n const {allocationState} = row;\n const tooltip =\n allocationState === 'IN_PROGRESS'\n ? 'Please note that allocating new instances on MapReduce clusters can take several hours.'\n : undefined;\n\n return !allocationState ? (\n format.NO_VALUE\n ) : (\n <Tooltip content={tooltip} useFlex>\n <Label text={format.ReadableField(allocationState.toLocaleLowerCase())} />\n {Boolean(tooltip) && <Icon awesome=\"question-circle\" color=\"secondary\" />}\n </Tooltip>\n );\n },\n sortable: false,\n align: 'center',\n width: 200,\n },\n {\n name: '',\n render: ({row}) => {\n return (\n <React.Fragment>\n {renderDeployUrl(row)}\n {renderNannyUrl(row)}\n </React.Fragment>\n );\n },\n width: 80,\n align: 'center',\n },\n];\n\nfunction useColumns(hideColumns?: Array<string>) {\n const res = React.useMemo(() => {\n if (!hideColumns?.length) {\n return COLUMNS;\n }\n\n const toHide = new Set(hideColumns);\n return COLUMNS.filter((item) => !toHide.has(item.name));\n }, [hideColumns]);\n return res;\n}\n\nfunction renderDeployUrl(row: RowData) {\n const {deployUrl} = row;\n return !deployUrl ? null : (\n <Tooltip\n className={block('link-icon')}\n content=\"Deploy\"\n placement={['top-end', 'bottom-end']}\n >\n <ChartLink url={deployUrl} hideIcon>\n <Icon awesome=\"rocket\" face=\"solid\" />\n </ChartLink>\n </Tooltip>\n );\n}\n\nfunction renderNannyUrl(row: RowData) {\n const {nannyUrl} = row;\n if (!nannyUrl) {\n return null;\n }\n return (\n <Tooltip\n className={block('link-icon')}\n content=\"Nanny\"\n placement={['top-end', 'bottom-end']}\n >\n <ChartLink url={nannyUrl} hideIcon>\n <Icon awesome={'cloud'} face=\"solid\" />\n </ChartLink>\n </Tooltip>\n );\n}\n\nfunction renderType(props: ColumnRenderProps<RowData>) {\n const {memory, vcpu} = props.row.data?.resource || {};\n const formattedMemory = format.Bytes(memory);\n const formattedVcpu = format.vCores(vcpu);\n return (\n <div>\n {formattedMemory}, {formattedVcpu}\n </div>\n );\n}\n\nconst TABLE_SETTINGS: Settings = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyTop: STICKY_TOOLBAR_BOTTOM,\n syncHeadOnResize: true,\n dynamicRender: true,\n};\n\ninterface CellsBundleControllerProps {\n hideColumns?: Array<string>;\n items: Array<RowData>;\n}\n\nexport function CellsBundleController({items, hideColumns}: CellsBundleControllerProps) {\n const [filter, setFilter] = React.useState('');\n\n const data = React.useMemo(() => {\n return !filter ? items : filter_(items, ({address}) => -1 !== address?.indexOf(filter));\n }, [items, filter]);\n\n const columns = useColumns(hideColumns);\n\n const renderToolbar = (\n <Toolbar\n itemsToWrap={[\n {\n name: 'filter',\n node: (\n <Filter\n hasClear\n size=\"m\"\n type=\"text\"\n value={filter}\n placeholder=\"Enter address...\"\n onChange={setFilter}\n autofocus={false}\n debounce={400}\n skipBlurByEnter\n />\n ),\n },\n ]}\n />\n );\n\n return (\n <div className={block()}>\n <WithStickyToolbar\n toolbar={renderToolbar}\n content={\n <DataTableYT<RowData>\n useThemeYT\n columns={columns}\n data={data}\n settings={TABLE_SETTINGS}\n emptyDataMessage=\"No items to show\"\n />\n }\n />\n </div>\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getActiveBundleInstances} from '../../../store/selectors/tablet_cell_bundles';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {CellsBundleController} from '../cells/CellsBundleController';\n\nexport const BundleInstancesTab = () => {\n const items = useSelector(getActiveBundleInstances);\n\n return (\n <ErrorBoundary>\n <CellsBundleController items={items} />\n </ErrorBoundary>\n );\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getActiveBundleProxies} from '../../../store/selectors/tablet_cell_bundles';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {CellsBundleController} from '../cells/CellsBundleController';\n\nexport const BundleProxiesTab = () => {\n const items = useSelector(getActiveBundleProxies);\n return (\n <ErrorBoundary>\n <CellsBundleController items={items} hideColumns={['tablet_static_memory']} />\n </ErrorBoundary>\n );\n};\n","import get_ from 'lodash/get';\n\nimport type {KeysByDot} from '../../../../../shared/keys-by-dot';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type {\n BundleControllerConfig,\n BundleDataCenter,\n BundleDefaultConfigData,\n} from '../../../../store/reducers/tablet_cell_bundles';\nimport type {BundleParam} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList';\nimport type {BundleEditorDialogFormValues} from '../../../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog';\nimport type {FormApi} from '../../../../components/Dialog';\n\ntype InnerKeys<T> = {[K in keyof T]: Array<keyof T[K]>};\ntype FormKeys = InnerKeys<Required<BundleEditorDialogFormValues>>;\n\nexport const bundleEditorDict: {\n keys: Pick<FormKeys, 'memory_limits' | 'resources' | 'cpu_limits'>;\n defaults: Pick<Required<BundleEditorDialogFormValues>, 'memory_limits' | 'cpu_limits'>;\n} = {\n keys: {\n resources: [\n 'rpc_proxy_count',\n 'rpc_proxy_resource_guarantee',\n 'tablet_node_count',\n 'tablet_node_resource_guarantee',\n ],\n memory_limits: [\n 'reserved',\n 'tablet_static',\n 'tablet_dynamic',\n 'compressed_block_cache',\n 'uncompressed_block_cache',\n 'versioned_chunk_meta',\n 'lookup_row_cache',\n 'key_filter_block_cache',\n ],\n cpu_limits: ['lookup_thread_pool_size', 'query_thread_pool_size', 'write_thread_pool_size'],\n },\n defaults: {\n memory_limits: {\n memory_reset: false,\n tablet_static: 0,\n tablet_dynamic: 0,\n compressed_block_cache: 0,\n uncompressed_block_cache: 0,\n versioned_chunk_meta: 0,\n lookup_row_cache: 0,\n key_filter_block_cache: 0,\n },\n cpu_limits: {\n threadPool_reset: false,\n lookup_thread_pool_size: 0,\n query_thread_pool_size: 0,\n write_thread_pool_size: 0,\n },\n },\n};\n\nexport const getResourceData = (source: object, resourceType: string) => {\n const usage = ypath.getValue(source, `/@resource_usage/${resourceType}`);\n const limit = ypath.getValue(source, `/@resource_limits/${resourceType}`);\n return {\n usage,\n limit,\n };\n};\n\nexport const getInitialFormValues = (\n data: object,\n bundleControllerConfig?: BundleControllerConfig,\n): Partial<BundleEditorDialogFormValues> => {\n const slug = ypath.getValue(data, '/@abc/slug');\n const changelogAccount = ypath.getValue(data, `/@options/changelog_account`);\n const snapshotAccount = ypath.getValue(data, `/@options/snapshot_account`);\n const {limit: tablet_count} = getResourceData(data, 'tablet_count');\n const {limit: tablet_static_memory} = getResourceData(data, 'tablet_static_memory');\n\n if (!bundleControllerConfig) {\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n tablet_count: tablet_count || 0,\n tablet_static_memory: tablet_static_memory || 0,\n },\n };\n }\n\n const {\n rpc_proxy_count,\n tablet_node_count,\n cpu_limits,\n memory_limits,\n rpc_proxy_resource_guarantee,\n tablet_node_resource_guarantee,\n } = bundleControllerConfig;\n\n return {\n general: {\n abc: {slug},\n changelog_account: changelogAccount,\n snapshot_account: snapshotAccount,\n },\n resources: {\n info: '', // system\n tablet_count: tablet_count || 0,\n rpc_proxy_count: rpc_proxy_count, // todo\n rpc_proxy_resource_guarantee: rpc_proxy_resource_guarantee || undefined,\n tablet_node_count: tablet_node_count,\n tablet_node_resource_guarantee: tablet_node_resource_guarantee || undefined,\n },\n memory_limits: {\n memory_reset: false, // system\n reserved: memory_limits?.reserved || 0,\n tablet_static: memory_limits?.tablet_static || 0,\n tablet_dynamic: memory_limits?.tablet_dynamic || 0,\n compressed_block_cache: memory_limits?.compressed_block_cache || 0,\n uncompressed_block_cache: memory_limits?.uncompressed_block_cache || 0,\n versioned_chunk_meta: memory_limits?.versioned_chunk_meta || 0,\n lookup_row_cache: memory_limits?.lookup_row_cache || 0,\n key_filter_block_cache: memory_limits?.key_filter_block_cache || 0,\n },\n cpu_limits: {\n threadPool_reset: false, //system\n lookup_thread_pool_size: cpu_limits?.lookup_thread_pool_size || 0,\n query_thread_pool_size: cpu_limits?.query_thread_pool_size || 0,\n write_thread_pool_size: cpu_limits?.write_thread_pool_size || 0,\n },\n };\n};\n\nfunction formatNetwork(value?: number) {\n const formatted = typeof value !== 'undefined' ? (value / 1000e6).toPrecision(2) : 0;\n return `${formatted} Gbit RX/TX`;\n}\n\nexport const createConfigurationList = (\n data: BundleDefaultConfigData['rpc_proxy_sizes'] | BundleDefaultConfigData['tablet_node_sizes'],\n) => {\n return Object.entries(data).map(([type, itemData]) => {\n const {net, vcpu, memory} = itemData.resource_guarantee;\n return {\n id: type,\n type,\n memory: hammer.format['Bytes'](memory),\n net: formatNetwork(net),\n vcpu: hammer.format['vCores'](vcpu),\n initialData: {...itemData.resource_guarantee, type},\n };\n });\n};\n\nexport const createParams = (formatType: 'Bytes' | 'vCores', total: number, used?: number) => {\n const [totalVal, totalPref] = hammer.format[formatType](total).split(' ');\n const params: BundleParam[] = [{title: 'Total', value: totalVal, postfix: totalPref}];\n\n if (typeof used !== 'undefined') {\n const difference = total - used;\n const [usedVal, usedPref] = hammer.format[formatType](difference).split(' ');\n params.push({\n title: 'Free',\n value: usedVal === hammer.format.NO_VALUE ? '0' : usedVal,\n postfix: usedPref,\n type: difference >= 0 ? 'positive' : 'negative',\n });\n }\n return params;\n};\n\nfunction prepareAbc(value: {id: number; slug: string}) {\n const {id, slug} = value;\n return id && slug ? {id, slug} : undefined;\n}\n\nexport const prepareSubmitBundle = (form: FormApi<BundleEditorDialogFormValues>) => {\n const prepare: {[path: string]: any} = {};\n const {dirtyFields, values} = form.getState();\n\n function addToChange(\n attr: string,\n field: KeysByDot<BundleEditorDialogFormValues>,\n prepareValue?: Function,\n ) {\n if (!dirtyFields[field]) {\n return;\n }\n const value = get_(values, field);\n prepare[attr] = typeof prepareValue === 'function' ? prepareValue(value) : value;\n }\n\n // Generel\n addToChange('@abc', 'general.abc', prepareAbc);\n addToChange('@options/changelog_account', 'general.changelog_account');\n addToChange('@options/snapshot_account', 'general.snapshot_account');\n // Resources\n addToChange('@resource_limits/tablet_count', 'resources.tablet_count');\n addToChange('@resource_limits/tablet_static_memory', 'resources.tablet_static_memory');\n addToChange('@bundle_controller_target_config/rpc_proxy_count', 'resources.rpc_proxy_count');\n addToChange(\n '@bundle_controller_target_config/tablet_node_count',\n 'resources.tablet_node_count',\n );\n addToChange(\n '@bundle_controller_target_config/rpc_proxy_resource_guarantee',\n 'resources.rpc_proxy_resource_guarantee',\n );\n addToChange(\n '@bundle_controller_target_config/tablet_node_resource_guarantee',\n 'resources.tablet_node_resource_guarantee',\n );\n // Memory_limits\n addToChange(\n '@bundle_controller_target_config/memory_limits/reserved',\n 'memory_limits.reserved',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_static',\n 'memory_limits.tablet_static',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/tablet_dynamic',\n 'memory_limits.tablet_dynamic',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/compressed_block_cache',\n 'memory_limits.compressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/uncompressed_block_cache',\n 'memory_limits.uncompressed_block_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/versioned_chunk_meta',\n 'memory_limits.versioned_chunk_meta',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/lookup_row_cache',\n 'memory_limits.lookup_row_cache',\n );\n addToChange(\n '@bundle_controller_target_config/memory_limits/key_filter_block_cache',\n 'memory_limits.key_filter_block_cache',\n );\n // Cpu_limits\n addToChange(\n '@bundle_controller_target_config/cpu_limits/lookup_thread_pool_size',\n 'cpu_limits.lookup_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/query_thread_pool_size',\n 'cpu_limits.query_thread_pool_size',\n );\n addToChange(\n '@bundle_controller_target_config/cpu_limits/write_thread_pool_size',\n 'cpu_limits.write_thread_pool_size',\n );\n\n return prepare;\n};\n\nexport const simpleBundleValidate = (v?: number | string) => {\n const toNumber = Number(v);\n let error;\n if (!Number.isFinite(toNumber)) {\n error = 'Incorrect value';\n }\n\n if (toNumber < 0) {\n error = 'Must be greater than or equal to zero';\n }\n\n return error;\n};\n\nexport const instanceCountValidate = ({\n length,\n}: BundleDataCenter[]): ((input?: number | string) => string | undefined) => {\n return (input?: number | string): string | undefined => {\n const number = Number(input);\n let error: string | undefined;\n\n if (!Number.isFinite(number)) {\n error = 'Incorrect value';\n } else if (number < 0) {\n error = 'Must be greater than or equal to zero';\n } else if (length > 0 && number % length !== 0) {\n error = `Must be divisible by ${length}`;\n }\n\n return error;\n };\n};\n\nexport function getBundleControllerResource<K extends 'cpu_limits' | 'memory_limits'>(\n current: Partial<Required<BundleEditorDialogFormValues>[K]>,\n defaultValues: Partial<Required<BundleEditorDialogFormValues>[K]>,\n resourceName: K,\n) {\n const result: Partial<BundleEditorDialogFormValues[K]> = {};\n\n for (const key of bundleEditorDict.keys[resourceName]) {\n result[key] = current[key] ?? defaultValues[key];\n }\n\n return result;\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport {Info} from '../../../../components/Info/Info';\nimport {BundleParamsList} from './components/BundleParamsList/BundleParamsList';\nimport {\n DialogField,\n DialogTabField,\n FormApi,\n YTDFDialog,\n makeFormSubmitError,\n} from '../../../../components/Dialog';\nimport hammer from '../../../../common/hammer';\n\nimport {getClusterUiConfig} from '../../../../store/selectors/global';\nimport {isDeveloper} from '../../../../store/selectors/global/is-developer';\nimport {\n hideTabletCellBundleEditor,\n setBundleEditorController,\n} from '../../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {\n getBundleEditorData,\n getTabletBundlesWriteableByName,\n} from '../../../../store/selectors/tablet_cell_bundles';\nimport {\n BundleResourceGuarantee,\n OrchidBundleResource,\n} from '../../../../store/reducers/tablet_cell_bundles';\nimport {getTabletCellBundleEditorState} from '../../../../store/selectors/tablet_cell_bundles/tablet-cell-bundle-editor';\n\nimport {\n bundleEditorDict,\n createConfigurationList,\n createParams,\n getBundleControllerResource,\n getInitialFormValues,\n getResourceData,\n instanceCountValidate,\n prepareSubmitBundle,\n simpleBundleValidate,\n} from '../../../../utils/tablet_cell_bundles/bundles/bundle-editor-dialog';\nimport UIFactory, {isAbcAllowed} from '../../../../UIFactory';\nimport {makeLink} from '../../../../utils/utils';\nimport {docsUrl} from '../../../../config';\n\nimport './BundleEditorDialog.scss';\nimport {Pick2} from '../../../../../@types/types';\n\nconst block = cn('bundle-editor');\n\nexport interface BundleEditorDialogFormValues {\n general: {\n abc?: {slug: string; id?: number};\n changelog_account?: string;\n snapshot_account?: string;\n };\n resources: {\n info?: string; // system\n rpc_proxy_count?: number; // todo\n rpc_proxy_resource_guarantee?: BundleResourceGuarantee;\n tablet_node_count?: number;\n tablet_node_resource_guarantee?: BundleResourceGuarantee;\n tablet_count?: number; // old\n tablet_static_memory?: number; // pld\n };\n memory_limits: {\n memory_reset: boolean; // system\n reserved?: number;\n tablet_static?: number;\n tablet_dynamic?: number;\n compressed_block_cache?: number;\n uncompressed_block_cache?: number;\n versioned_chunk_meta?: number;\n lookup_row_cache?: number;\n key_filter_block_cache?: number;\n };\n cpu_limits: {\n threadPool_reset?: boolean; //system\n lookup_thread_pool_size?: number;\n query_thread_pool_size?: number;\n write_thread_pool_size?: number;\n };\n}\n\nexport function BundleEditorDialog() {\n const {\n visibleEditor,\n bundleName,\n bundleData,\n data,\n bundleControllerData: orchidData,\n } = useSelector(getTabletCellBundleEditorState);\n\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n const {defaultConfig: bundleDefaultConfig} = useSelector(getBundleEditorData);\n\n const bundleControllerConfig = bundleData?.bundle_controller_target_config;\n const enableBundleController = bundleData?.enable_bundle_controller || false;\n\n const {usage: tabletCountUsage} = getResourceData(data, 'tablet_count');\n const {usage: tabletStaticMemoryUsage} = getResourceData(data, 'tablet_static_memory');\n\n const writeableByName = useSelector(getTabletBundlesWriteableByName);\n const allowTabletCount = writeableByName.get(bundleName ?? '');\n const allowEdit = useSelector(isDeveloper);\n\n const initialValues: Partial<BundleEditorDialogFormValues> = (() => {\n if (!enableBundleController) {\n return getInitialFormValues(data);\n }\n if (!bundleControllerConfig) {\n return {};\n }\n return getInitialFormValues(data, bundleControllerConfig);\n })();\n\n const [rpcConfigurations, nodeConfigurations, dcConfigurations] = (() => {\n if (!bundleDefaultConfig) {\n return [[], [], []];\n }\n const {rpc_proxy_sizes, tablet_node_sizes, data_centers} = bundleDefaultConfig;\n\n return [\n createConfigurationList(rpc_proxy_sizes),\n createConfigurationList(tablet_node_sizes),\n data_centers ? [...Object.values(data_centers)] : [],\n ];\n })();\n\n const renderGeneralTabs: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'general',\n title: 'General',\n type: 'tab-vertical',\n size: 's',\n fields: [\n ...(!isAbcAllowed()\n ? []\n : [\n {\n name: 'abc',\n type: 'abc-control' as const,\n caption: 'ABC Service',\n extras: {\n placeholder: 'Select ABC service...',\n disabled: !allowEdit,\n },\n },\n ]),\n {\n name: 'changelog_account',\n type: 'accounts-suggest-with-loading',\n caption: 'Changelog account',\n extras: {\n allowRootAccount: true,\n disabled: !allowEdit,\n },\n },\n {\n name: 'snapshot_account',\n type: 'accounts-suggest-with-loading',\n caption: 'Snapshot account',\n extras: {\n allowRootAccount: true,\n disabled: !allowEdit,\n },\n },\n ],\n };\n\n const renderResourceTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'resources',\n title: 'Resources',\n type: 'tab-vertical',\n size: 's',\n fields: [\n {\n name: 'info',\n type: 'block',\n fullWidth: true,\n touched: true,\n extras: {\n children: (\n <Info className={block('info')}>\n {UIFactory.renderTableCellBundleEditorNotice({\n bundleData,\n clusterUiConfig,\n })}\n <BundleParamsList\n className={block('params')}\n params={[\n {\n title: 'Memory',\n value: hammer.format['Bytes'](\n orchidData?.resource_quota.memory || '0',\n ),\n },\n {\n title: 'vCPU',\n value: hammer.format['vCores'](\n orchidData?.resource_quota.vcpu || '0',\n ),\n },\n {\n title: 'Tablet count',\n value: hammer.format.Number(\n initialValues.resources?.tablet_count,\n ),\n },\n ]}\n />\n </Info>\n ),\n },\n },\n ...(!allowTabletCount\n ? []\n : [\n {\n name: 'tablet_count',\n type: 'bundle-input',\n caption: 'Tablet count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n progress: {\n usage: tabletCountUsage,\n },\n },\n validator: simpleBundleValidate,\n } as const,\n ]),\n {section: 'RPC proxy'},\n {\n type: 'bundle-input',\n name: 'rpc_proxy_count',\n caption: 'RPC proxy count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n hasClear: true,\n },\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['dynamic-tables:cross-dc'], 'Help')),\n validator: instanceCountValidate(dcConfigurations),\n },\n {\n type: 'bundle-table-field',\n name: 'rpc_proxy_resource_guarantee',\n caption: 'Instance configuration',\n fullWidth: true,\n extras: {\n data: rpcConfigurations,\n },\n },\n {section: 'Tablet node'},\n {\n type: 'bundle-input',\n name: 'tablet_node_count',\n caption: 'Tablet node count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n hasClear: true,\n },\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['dynamic-tables:cross-dc'], 'Help')),\n validator: instanceCountValidate(dcConfigurations),\n },\n {\n type: 'bundle-table-field',\n name: 'tablet_node_resource_guarantee',\n caption: 'Instance configuration',\n fullWidth: true,\n extras: function (values, {form}) {\n const onRadioClick = (value: BundleResourceGuarantee) => {\n const nodeConfigurationType = value.type || '';\n\n const defaultMemory =\n bundleDefaultConfig?.tablet_node_sizes[nodeConfigurationType]\n .default_config.memory_limits || {};\n const defaultThreadPool =\n bundleDefaultConfig?.tablet_node_sizes[nodeConfigurationType]\n .default_config.cpu_limits || {};\n const defaultMemoryLimit =\n bundleDefaultConfig?.tablet_node_sizes[nodeConfigurationType]\n .default_config.memory_limits?.reserved || undefined;\n\n const resultMemory = getBundleControllerResource(\n values.memory_limits,\n defaultMemory,\n 'memory_limits',\n );\n const resultThreadPool = getBundleControllerResource(\n values.cpu_limits,\n defaultThreadPool,\n 'cpu_limits',\n );\n\n resultMemory.reserved = defaultMemoryLimit;\n\n form.change('memory_limits', {\n ...bundleEditorDict.defaults.memory_limits,\n ...resultMemory,\n });\n form.change('cpu_limits', {\n ...bundleEditorDict.defaults.cpu_limits,\n ...resultThreadPool,\n });\n };\n\n return {\n data: nodeConfigurations,\n onRadioClick,\n };\n },\n },\n ],\n };\n\n const renderSimpleResourceTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'resources',\n title: 'Resources',\n type: 'tab-vertical',\n size: 's',\n fields: [\n {\n name: 'tablet_count',\n type: 'bundle-input',\n caption: 'Tablet count',\n extras: {\n format: 'Number',\n withoutDetailedBar: true,\n progress: {\n usage: tabletCountUsage,\n },\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'tablet_static_memory',\n type: 'bundle-input',\n caption: 'Tablet static memory',\n extras: {\n format: 'Bytes',\n progress: {\n usage: tabletStaticMemoryUsage,\n },\n },\n validator: simpleBundleValidate,\n tooltip: (\n <span>\n Tablet static memory limit is based on hardware resources. Do not increase\n it unless you fully understand what you are doing. In case of emergency\n consider adding new tablet cells to the bundle, consulting with\n Components/Nodes page and increasing the limit only when new nodes are added\n to the bundle.\n </span>\n ),\n },\n ],\n };\n\n const renderMemoryTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'memory_limits',\n title: 'Memory',\n type: 'tab-vertical',\n size: 's',\n visibilityCondition: {\n when: 'resources.tablet_node_resource_guarantee',\n isActive: (v) => typeof v !== 'undefined',\n },\n fields: [\n {\n name: 'memory_reset',\n type: 'bundle-title',\n caption: 'Memory',\n touched: true,\n extras: (allValues, {form}) => {\n const tablet_node_resource_guarantee =\n allValues.resources?.tablet_node_resource_guarantee;\n\n const onReset = () => {\n if (\n !tablet_node_resource_guarantee ||\n !tablet_node_resource_guarantee.type ||\n !bundleDefaultConfig\n ) {\n return;\n }\n const type = tablet_node_resource_guarantee.type;\n const {tablet_node_sizes} = bundleDefaultConfig;\n const {memory_limits} = tablet_node_sizes[type].default_config;\n\n form.change('memory_limits', {\n ...bundleEditorDict.defaults.memory_limits,\n ...memory_limits,\n });\n };\n\n if (!tablet_node_resource_guarantee) {\n return {\n params: [],\n onReset,\n };\n }\n const {memory} = tablet_node_resource_guarantee;\n\n const used = bundleEditorDict.keys.memory_limits.reduce((sum, k) => {\n const v = allValues?.memory_limits?.[k];\n return typeof v !== 'number' || isNaN(v) ? sum : sum + v;\n }, 0);\n\n return {\n params: createParams('Bytes', memory, used),\n onReset,\n };\n },\n },\n {\n name: 'reserved',\n type: 'bundle-input',\n caption: 'Reserved',\n extras: {\n format: 'Bytes',\n disabled: true,\n },\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['bundle-controller:reserved-memory'], 'Help'),\n ),\n },\n {\n name: 'tablet_static',\n type: 'bundle-input',\n caption: 'Tablet static',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'tablet_dynamic',\n type: 'bundle-input',\n caption: 'Tablet dynamic',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'compressed_block_cache',\n type: 'bundle-input',\n caption: 'Compressed block cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'uncompressed_block_cache',\n type: 'bundle-input',\n caption: 'Uncompressed block cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'versioned_chunk_meta',\n type: 'bundle-input',\n caption: 'Versioned chunk meta',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'lookup_row_cache',\n type: 'bundle-input',\n caption: 'Lookup row cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'key_filter_block_cache',\n type: 'bundle-input',\n caption: 'Key filter block cache',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n ],\n };\n\n const renderThreadPoolTab: DialogTabField<DialogField<BundleEditorDialogFormValues>> = {\n name: 'cpu_limits',\n title: 'Thread pools',\n type: 'tab-vertical',\n size: 's',\n visibilityCondition: {\n when: 'resources.tablet_node_resource_guarantee',\n isActive: (v) => typeof v !== 'undefined',\n },\n fields: [\n {\n name: 'threadPool_reset',\n type: 'bundle-title',\n caption: 'vCPU',\n extras: (allValues, {form}) => {\n const tablet_node_resource_guarantee =\n allValues.resources?.tablet_node_resource_guarantee;\n\n if (\n !tablet_node_resource_guarantee ||\n !tablet_node_resource_guarantee.type ||\n !bundleDefaultConfig\n ) {\n return {\n params: [],\n onReset: () => {},\n };\n }\n\n const onReset = () => {\n const type = tablet_node_resource_guarantee.type;\n if (!type) {\n return;\n }\n\n const {tablet_node_sizes} = bundleDefaultConfig;\n const {cpu_limits} = tablet_node_sizes[type].default_config;\n\n form.change('cpu_limits', {\n ...bundleEditorDict.defaults.cpu_limits,\n ...cpu_limits,\n });\n };\n\n const {vcpu} = tablet_node_resource_guarantee;\n\n return {\n params: createParams('vCores', vcpu),\n onReset,\n };\n },\n },\n {\n name: 'lookup_thread_pool_size',\n type: 'bundle-input',\n caption: 'Lookup thread pool size',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'query_thread_pool_size',\n type: 'bundle-input',\n caption: 'Query thread pool size',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n {\n name: 'write_thread_pool_size',\n type: 'bundle-input',\n caption: 'Write thread pool size',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: simpleBundleValidate,\n },\n ],\n };\n\n const fields = [renderGeneralTabs];\n if (enableBundleController) {\n fields.push(renderResourceTab, renderMemoryTab, renderThreadPoolTab);\n } else {\n fields.push(renderSimpleResourceTab);\n }\n\n const dispatch = useDispatch();\n const onClose = () => {\n dispatch(hideTabletCellBundleEditor());\n };\n\n const onSubmit = async (form: FormApi<BundleEditorDialogFormValues>) => {\n if (!bundleName) {\n return {};\n }\n\n const preparedData = prepareSubmitBundle(form);\n\n try {\n await dispatch(\n setBundleEditorController({\n bundleName,\n data: preparedData,\n }),\n );\n return undefined;\n } catch (error: any) {\n return makeFormSubmitError(error);\n }\n };\n\n if (isEmpty_(data)) {\n return null;\n }\n\n return (\n <YTDFDialog<BundleEditorDialogFormValues>\n className={block('dialog')}\n headerProps={{\n title: bundleName,\n }}\n size=\"l\"\n initialValues={initialValues}\n visible={visibleEditor}\n onAdd={onSubmit}\n onClose={onClose}\n fields={fields}\n validate={validateFormValues.bind(null, orchidData?.resource_quota)}\n />\n );\n}\n\nfunction validateFormValues(\n quota: OrchidBundleResource | undefined,\n values: BundleEditorDialogFormValues,\n) {\n const res: Pick2<typeof values, 'resources', 'info', string | undefined> &\n Pick2<typeof values, 'memory_limits', 'memory_reset', string | undefined> = {\n resources: {info: undefined},\n memory_limits: {memory_reset: undefined},\n };\n\n const {resources} = values;\n\n const currentAccLimit = Object.values(values.memory_limits || {}).reduce(\n (acc: number, v: number | boolean) => {\n if (typeof v !== 'number') {\n return acc;\n }\n return acc + v;\n },\n 0,\n );\n\n const tabletNode = resources.tablet_node_resource_guarantee;\n res.memory_limits.memory_reset =\n currentAccLimit > (tabletNode?.memory ?? 0)\n ? 'The sum of the memory limits exceeds the allowed values'\n : undefined;\n\n const {rpc_proxy_count = 0, tablet_node_count = 0} = resources;\n\n const requiredCpu =\n (tabletNode?.vcpu ?? 0) * tablet_node_count +\n (resources.rpc_proxy_resource_guarantee?.vcpu ?? 0) * rpc_proxy_count;\n\n const violatedResources = [];\n\n if (requiredCpu > quota?.vcpu!) {\n violatedResources.push(`${hammer.format.Number(requiredCpu / 1000)} cpu required`);\n }\n\n const requiredMemory =\n (tabletNode?.memory ?? 0) * tablet_node_count +\n (resources.rpc_proxy_resource_guarantee?.memory ?? 0) * rpc_proxy_count;\n\n if (requiredMemory > quota?.memory!) {\n violatedResources.push(`${hammer.format.Bytes(requiredMemory)} memory requried`);\n }\n\n res.resources.info = violatedResources.length ? violatedResources.join(', ') : undefined;\n\n return res;\n}\n","import type {ThunkAction} from 'redux-thunk';\nimport map_ from 'lodash/map';\nimport hammer from '../../../common/hammer';\nimport {\n CHAOS_BUNDLES_EDITOR_LOAD_FAILURE,\n CHAOS_BUNDLES_EDITOR_LOAD_REQUREST,\n CHAOS_BUNDLES_EDITOR_LOAD_SUCCESS,\n CHAOS_BUNDLES_EDITOR_PARTIAL,\n} from '../../../constants/tablets';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosCellBundleEditorAction} from '../../../store/reducers/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {prepareSetCommandForBatch} from '../../../utils/cypress-attributes';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\ntype ChaosCellBundleEditorThunkAction = ThunkAction<\n any,\n RootState,\n any,\n ChaosCellBundleEditorAction\n>;\n\nexport function showChaosCellBundleEditor(bundleName: string): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch({type: CHAOS_BUNDLES_EDITOR_LOAD_REQUREST});\n\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_PARTIAL,\n data: {bundleName, visibleEditor: true},\n });\n\n return ytApiV3Id\n .get(YTApiId.chaosCellBundlesEditData, {\n path: `//sys/chaos_cell_bundles/${bundleName}`,\n attributes: ['resource_usage', 'resource_limits', 'options', 'abc'],\n })\n .then((data: object) => {\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_LOAD_SUCCESS,\n data: {data},\n });\n })\n .catch((e: any) => {\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_LOAD_FAILURE,\n data: e,\n });\n });\n };\n}\n\nexport function hideChaosCellBundleEditor(): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n dispatch({\n type: CHAOS_BUNDLES_EDITOR_PARTIAL,\n data: {bundleName: undefined, loaded: true, visibleEditor: false},\n });\n };\n}\n\nexport type BundleResourceType = 'tablet_count' | 'tablet_static_memory';\n\nexport function setBundleQuota(params: {\n bundleName: string;\n resourceType: BundleResourceType;\n limit: number;\n}): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n const {bundleName, resourceType, limit} = params;\n\n const resource = hammer.format['Readable'](resourceType);\n\n return wrapApiPromiseByToaster(\n yt.v3.set(\n {\n path: `//sys/chaos_cell_bundles/${bundleName}/@resource_limits/${resourceType}`,\n },\n limit,\n ),\n {\n toasterName: `edit_bundle_${bundleName}`,\n successContent: `Set quota limit for ${resource}`,\n errorContent: `Cannot set quota limit for ${resource}`,\n },\n ).then(() => {\n dispatch(showChaosCellBundleEditor(bundleName));\n });\n };\n}\n\nexport interface EditBundleParams {\n attributes: {\n abc?: {\n id: number;\n slug: string;\n };\n };\n options: {\n changelog_account?: string;\n snapshot_account?: string;\n };\n}\n\nexport function setBunndleAttributes(\n bundle: string,\n attrs: Partial<EditBundleParams>,\n): ChaosCellBundleEditorThunkAction {\n return (dispatch) => {\n console.log(attrs);\n const {attributes, options} = attrs;\n\n const bundlePath = `//sys/chaos_cell_bundles/${bundle}`;\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.chaosCellBundlesSetAttrs, {\n requests: [\n ...map_(attributes, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@${key}`, v),\n ),\n ...map_(options, (v, key) =>\n prepareSetCommandForBatch(`${bundlePath}/@options/${key}`, v),\n ),\n ],\n } as any),\n {\n toasterName: `update-bundle_${bundle}`,\n successContent: `${bundle} successfully updated`,\n errorContent: `${bundle} cannot be updated`,\n batchType: 'v3',\n errorTitle: 'Failed to update bundle configuration',\n },\n ).then(() => {\n dispatch(showChaosCellBundleEditor(bundle));\n });\n };\n}\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\n\nimport BundlesTable from '../../../pages/tablet_cell_bundles/bundles/BundlesTable';\nimport {\n setChaosActiveBundle,\n setChaosBundlesSortState,\n} from '../../../store/actions/chaos_cell_bundles';\nimport {showChaosCellBundleEditor} from '../../../store/actions/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport type {RootState} from '../../../store/reducers';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getChaosBundlesSortState,\n getChaosBundlesSorted,\n getChaosBundlesTableMode,\n getChaosBundlesTotal,\n getChaosIsLoaded,\n getChaosIsLoading,\n} from '../../../store/selectors/chaos_cell_bundles';\nimport {chaosActiveBundleLink} from '../../../utils/components/tablet-cells';\n\nconst columns: ComponentProps<typeof BundlesTable>['columns'] = [\n 'bundle',\n 'health',\n 'tabletCells',\n 'enable_bundle_balancer',\n 'changelog_account',\n 'actions',\n];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n loading: getChaosIsLoading(state),\n loaded: getChaosIsLoaded(state),\n data: getChaosBundlesSorted(state),\n total: getChaosBundlesTotal(state),\n sortState: getChaosBundlesSortState(state),\n cluster: getCluster(state),\n allowPerBundleAccounting: false,\n mode: getChaosBundlesTableMode(state),\n pathPrefix: '//sys/chaos_cell_bundles/',\n columns,\n activeBundleLink: chaosActiveBundleLink,\n writeableByName: {get: () => true},\n };\n};\n\nconst mapDispatchToProps = {\n setBundlesSortState: setChaosBundlesSortState,\n setActiveBundle: setChaosActiveBundle,\n showCellBundleEditor: showChaosCellBundleEditor,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTable);\n","import {connect} from 'react-redux';\n\nimport BundlesTableInstruments from '../../../pages/tablet_cell_bundles/bundles/BundlesTableInstruments';\nimport {\n setChaosBundlesAccountFilter,\n setChaosBundlesNameFilter,\n setChaosBundlesTagNodeFilter,\n setChaosFirstBundleAsActive,\n setChaosPartial,\n} from '../../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport type {BundlesTableMode} from '../../../store/reducers/chaos_cell_bundles';\nimport {\n getChaosBundlesAccountFilter,\n getChaosBundlesNameFilter,\n getChaosBundlesTableMode,\n getChaosBundlesTagNodeFilter,\n} from '../../../store/selectors/chaos_cell_bundles';\n\nconst modes: Array<BundlesTableMode> = ['default'];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n accountFilter: getChaosBundlesAccountFilter(state),\n bundlesTableMode: getChaosBundlesTableMode(state),\n nameFilter: getChaosBundlesNameFilter(state),\n tagNodeFilter: getChaosBundlesTagNodeFilter(state),\n modes,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsBundlesNameFilter: setChaosBundlesNameFilter,\n setTabletsBundlesAccountFilter: setChaosBundlesAccountFilter,\n setTabletsBundlesTagNodeFilter: setChaosBundlesTagNodeFilter,\n setTabletsFirstBundleAsActive: setChaosFirstBundleAsActive,\n setTabletsPartial: setChaosPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(BundlesTableInstruments);\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport BundlesTable from '../../../pages/chaos_cell_bundles/bundles/BundlesTable.connected';\nimport BundlesTableInstruments from '../../../pages/chaos_cell_bundles/bundles/BundlesTableInstruments.connected';\nimport {\n copyHostListToClipboard,\n setChaosActiveBundle,\n} from '../../../store/actions/chaos_cell_bundles';\n\nexport default function ChaosCellBundles() {\n const dispatch = useDispatch();\n\n const handleCopyHostListToClipboard = React.useCallback(\n (bundle: string) => {\n dispatch(copyHostListToClipboard(bundle));\n },\n [dispatch],\n );\n\n React.useEffect(() => {\n dispatch(setChaosActiveBundle(''));\n }, [dispatch]);\n\n return (\n <ErrorBoundary>\n <WithStickyToolbar\n toolbar={<BundlesTableInstruments />}\n content={<BundlesTable copyHostListToClipboard={handleCopyHostListToClipboard} />}\n />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\n\nimport {Dialog, Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../common/hammer';\nimport ypath from '../../../../common/thor/ypath';\nimport Button from '../../../../components/Button/Button';\nimport ErrorBlock from '../../../../components/Error/Error';\nimport Icon from '../../../../components/Icon/Icon';\nimport QuotaEditorWithHide from '../../../../components/QuotaEditor/QuotaEditorWithHide';\nimport Tabs from '../../../../components/Tabs/Tabs';\nimport {Bold} from '../../../../components/Text/Text';\nimport {AccountsSuggestWithLoading} from '../../../../pages/accounts/AccountsSuggest';\nimport {WithHeader} from '../../../../pages/accounts/tabs/general/Editor/content/GeneralContent';\nimport type {\n BundleResourceType,\n EditBundleParams,\n setBundleQuota,\n setBunndleAttributes,\n} from '../../../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport {ChaosCellBundleEditorState} from '../../../../store/reducers/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport {isDeveloper} from '../../../../store/selectors/global/is-developer';\nimport {calcProgressProps} from '../../../../utils/utils';\n\nimport './ChaosBundleEditorDialog.scss';\nimport UIFactory from '../../../../UIFactory';\n\nconst block = cn('chaos-editor');\n\nconst TABS = [\n {\n value: 'general',\n text: 'General',\n show: true,\n },\n {\n value: 'resources',\n text: 'Resources',\n show: true,\n },\n];\n\nexport interface Props {\n bundleEditorData: ChaosCellBundleEditorState;\n hideBundleEditor(): void;\n setBundleQuota: typeof setBundleQuota;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nexport function ChaosBundleEditorDialog({\n bundleEditorData,\n hideBundleEditor,\n setBundleQuota,\n setBunndleAttributes,\n}: Props) {\n const {visibleEditor, bundleName, error} = bundleEditorData;\n\n const [activeTab, setActiveTab] = React.useState(TABS[0].value);\n\n const dispatch = useDispatch();\n const onClose = React.useCallback(() => {\n dispatch(hideBundleEditor());\n }, []);\n\n return !visibleEditor ? null : (\n <Dialog open={true} onClose={onClose}>\n <Dialog.Header caption={<React.Fragment>{bundleName}</React.Fragment>} />\n <Dialog.Divider />\n <Dialog.Body className={block('body')}>\n <div className={block('body-tabs')}>\n <Tabs\n items={TABS}\n size=\"m\"\n layout=\"vertical\"\n active={activeTab}\n onTabChange={setActiveTab}\n />\n </div>\n <div className={block('body-tab-content')}>\n {activeTab === 'resources' && (\n <React.Fragment>\n <ChaosBundleResourceUsage\n bundleEditorData={bundleEditorData}\n resourceType={'tablet_count'}\n setBundleQuota={setBundleQuota}\n />\n <ChaosBundleResourceUsage\n bundleEditorData={bundleEditorData}\n resourceType={'tablet_static_memory'}\n setBundleQuota={setBundleQuota}\n />\n {error && <ErrorBlock error={error} />}\n </React.Fragment>\n )}\n {activeTab === 'general' && (\n <ChaosBundleEditorGeneral\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n )}\n </div>\n </Dialog.Body>\n </Dialog>\n );\n}\n\ninterface ChaosBundleResourceUsageProps {\n bundleEditorData: ChaosCellBundleEditorState;\n resourceType: BundleResourceType;\n setBundleQuota: typeof setBundleQuota;\n}\n\nfunction ChaosBundleResourceUsage({\n bundleEditorData,\n resourceType,\n setBundleQuota,\n}: ChaosBundleResourceUsageProps) {\n const {data} = bundleEditorData;\n\n const limit = ypath.getValue(data, `/@resource_limits/${resourceType}`);\n const usage = ypath.getValue(data, `/@resource_usage/${resourceType}`);\n\n const [showEditor, setShowEditor] = React.useState(false);\n\n const toggleEditor = React.useCallback(() => {\n setShowEditor(!showEditor);\n }, [showEditor, setShowEditor]);\n\n const {value = 0, theme, text} = calcProgressProps(usage, limit, FORMATS[resourceType]);\n\n return (\n <div className={block('item')}>\n <div className={block('name-usage')}>\n <div className={block('name')}>\n <Bold>{hammer.format['Readable'](resourceType)}</Bold>\n </div>\n <Progress className={block('progress')} value={value} theme={theme} text={text} />\n <Button view=\"flat-secondary\" onClick={toggleEditor}>\n <Icon awesome={'pencil'} />\n </Button>\n </div>\n {showEditor && (\n <ChaosBundleResourceEditor\n bundleEditorData={bundleEditorData}\n resourceType={resourceType}\n setBundleQuota={setBundleQuota}\n toggleVisibility={toggleEditor}\n />\n )}\n </div>\n );\n}\n\nconst FORMATS: {[resourceType: string]: 'Number' | 'Bytes'} = {\n tablet_count: 'Number',\n tablet_static_memory: 'Bytes',\n};\n\ninterface ChaosBundleResourceEditorProps {\n bundleEditorData: ChaosCellBundleEditorState;\n resourceType: BundleResourceType;\n setBundleQuota: typeof setBundleQuota;\n toggleVisibility(): void;\n}\n\nfunction ChaosBundleResourceEditor({\n bundleEditorData,\n resourceType,\n setBundleQuota,\n toggleVisibility,\n}: ChaosBundleResourceEditorProps) {\n const {bundleName = '', data} = bundleEditorData;\n\n const limit = ypath.getValue(data, `/@resource_limits/${resourceType}`);\n const value = ypath.getValue(data, `/@resource_usage/${resourceType}`);\n\n const dispatch = useDispatch();\n\n const onSave = React.useCallback(\n (limit: number) => {\n dispatch(setBundleQuota({bundleName, resourceType, limit}));\n },\n [resourceType],\n );\n\n return (\n <QuotaEditorWithHide\n format={FORMATS[resourceType]}\n limit={limit}\n onHide={toggleVisibility}\n onSave={onSave}\n getInfoByName={() => ({limit, total: value})}\n currentAccount={bundleName}\n parentOfCurrentAccount={''}\n max={Infinity}\n />\n );\n}\n\ninterface ChaosBundleEditorGeneralProps {\n bundleEditorData: ChaosCellBundleEditorState;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nfunction ChaosBundleEditorGeneral({\n bundleEditorData,\n setBunndleAttributes,\n}: ChaosBundleEditorGeneralProps) {\n return (\n <React.Fragment>\n <ChaosBundleAbcServiceEditor\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n <ChaosBundleAccountEditor\n attributeName={'changelog_account'}\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n <ChaosBundleAccountEditor\n attributeName={'snapshot_account'}\n bundleEditorData={bundleEditorData}\n setBunndleAttributes={setBunndleAttributes}\n />\n </React.Fragment>\n );\n}\n\ninterface ChaosBundleAbcServiceEditorProps {\n bundleEditorData: ChaosCellBundleEditorState;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nfunction ChaosBundleAbcServiceEditor({\n bundleEditorData,\n setBunndleAttributes,\n}: ChaosBundleAbcServiceEditorProps) {\n const {bundleName, data} = bundleEditorData;\n const slug = ypath.getValue(data, '/@abc/slug');\n const allowEdit = useSelector(isDeveloper);\n\n const dispatch = useDispatch();\n const onAbcChange = React.useCallback(({id, slug}: {id?: number; slug?: string} = {}) => {\n if (!bundleName) {\n throw new Error('Name of bundle cannot be empty');\n }\n dispatch(\n setBunndleAttributes(bundleName, {\n attributes: {\n abc: id && slug ? {id, slug} : undefined,\n },\n }),\n );\n }, []);\n\n const control = UIFactory.renderControlAbcService({\n value: {slug},\n onChange: onAbcChange,\n placeholder: 'Select ABC service...',\n disabled: !allowEdit,\n });\n\n return !control ? null : (\n <WithHeader header={'ABC Service'}>\n <>{control}</>\n </WithHeader>\n );\n}\n\ninterface ChaosBundleAccountEditorProps {\n attributeName: keyof EditBundleParams['options'];\n bundleEditorData: ChaosCellBundleEditorState;\n setBunndleAttributes: typeof setBunndleAttributes;\n}\n\nfunction ChaosBundleAccountEditor(props: ChaosBundleAccountEditorProps) {\n const {attributeName, bundleEditorData, setBunndleAttributes} = props;\n const {bundleName, data} = bundleEditorData;\n const account = ypath.getValue(data, `/@options/${attributeName}`);\n const allowEdit = useSelector(isDeveloper);\n\n const dispatch = useDispatch();\n const onChange = React.useCallback((value?: string) => {\n if (!bundleName) {\n throw new Error('Name of bundle cannot be empty');\n }\n dispatch(\n setBunndleAttributes(bundleName, {\n options: {[attributeName]: value},\n }),\n );\n }, []);\n\n return (\n <WithHeader header={`${capitalize_(attributeName)} account`}>\n <AccountsSuggestWithLoading\n value={account || ''}\n onChange={onChange}\n disabled={!allowEdit}\n allowRootAccount={true}\n />\n </WithHeader>\n );\n}\n","import type {RootState} from '../../../store/reducers';\n\nexport const getChaosCellBundleEditorData = (state: RootState) => state.chaosCellBundleEditor;\n","import {connect} from 'react-redux';\n\nimport {ChaosBundleEditorDialog} from '../../../../pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog';\nimport {\n hideChaosCellBundleEditor,\n setBundleQuota,\n setBunndleAttributes,\n} from '../../../../store/actions/chaos_cell_bundles/tablet-cell-bundle-editor';\nimport type {RootState} from '../../../../store/reducers';\nimport {getChaosCellBundleEditorData} from '../../../../store/selectors/chaos_cell_bundles/tablet-cell-bundle-editor';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n bundleEditorData: getChaosCellBundleEditorData(state),\n };\n};\n\nconst mapDispatchToProps = {\n hideBundleEditor: hideChaosCellBundleEditor,\n setBundleQuota,\n setBunndleAttributes,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(ChaosBundleEditorDialog);\n","import {connect} from 'react-redux';\n\nimport CellsTableInstruments from '../../../pages/tablet_cell_bundles/cells/CellsInstruments';\nimport {setChaosPartial} from '../../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {\n getChaosActiveBundle,\n getChaosCellsBundleFilter,\n getChaosCellsBundles,\n getChaosCellsHostFilter,\n getChaosCellsHosts,\n getChaosCellsHostsOfActiveBundle,\n getChaosCellsIdFilter,\n} from '../../../store/selectors/chaos_cell_bundles';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getChaosActiveBundle(state),\n activeBundleHosts: getChaosCellsHostsOfActiveBundle(state),\n\n idFilter: getChaosCellsIdFilter(state),\n bundleFilter: getChaosCellsBundleFilter(state),\n hostFilter: getChaosCellsHostFilter(state),\n\n bundles: getChaosCellsBundles(state),\n hosts: getChaosCellsHosts(state),\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial: setChaosPartial,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTableInstruments);\n","import type {ComponentProps} from 'react';\nimport {connect} from 'react-redux';\n\nimport CellsTable from '../../../pages/tablet_cell_bundles/cells/CellsTable';\nimport {setChaosActiveBundle, setChaosPartial} from '../../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../../store/reducers';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n getChaosCellsSortState,\n getChaosCellsSorted,\n getChaosIsLoaded,\n getChaosIsLoading,\n} from '../../../store/selectors/chaos_cell_bundles';\nimport {\n chaosActiveBundleLink,\n chaosAttributesPath,\n chaosCellNavigationLink,\n} from '../../../utils/components/tablet-cells';\n\nconst columns: ComponentProps<typeof CellsTable>['columns'] = [\n 'id',\n 'bundle',\n 'health',\n 'peerAddress',\n 'state',\n 'actions',\n];\n\nconst mapStateToProps = (state: RootState) => {\n return {\n cluster: getCluster(state),\n loading: getChaosIsLoading(state),\n loaded: getChaosIsLoaded(state),\n data: getChaosCellsSorted(state),\n sortState: getChaosCellsSortState(state),\n columns,\n activeBundleLink: chaosActiveBundleLink,\n attributesPath: chaosAttributesPath,\n cellNavigationLink: chaosCellNavigationLink,\n };\n};\n\nconst mapDispatchToProps = {\n setTabletsPartial: setChaosPartial,\n setTabletsActiveBundle: setChaosActiveBundle,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CellsTable);\n","import React from 'react';\n\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../components/WithStickyToolbar/WithStickyToolbar';\nimport CellsInstruments from '../../../pages/chaos_cell_bundles/cells/CellsInstruments.connected';\nimport CellsTable from '../../../pages/chaos_cell_bundles/cells/CellsTable.connected';\n\nexport function ChaosCells() {\n return (\n <ErrorBoundary>\n <WithStickyToolbar toolbar={<CellsInstruments />} content={<CellsTable />} />\n </ErrorBoundary>\n );\n}\n","import React from 'react';\n\nimport withLazyLoading from '../../hocs/withLazyLoading';\n\nfunction importPage() {\n return import(/* webpackChunkName: \"tablet-errors-by-bundle\" */ './TabletErrorsByBundle');\n}\n\nexport const TabletErrorsLazy = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importPage()).TabletErrorsByBundle};\n }),\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport Tabs from '../../components/Tabs/Tabs';\nimport {TabletsTab} from '../../constants/tablets';\nimport {Redirect, Route, Switch, useRouteMatch} from 'react-router';\nimport {BundleCells} from './cells/Cells';\nimport {TabSettings, makeTabProps} from '../../utils';\nimport {useUpdater} from '../../hooks/use-updater';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {fetchChaosBundles as fetchChaosBundles} from '../../store/actions/chaos_cell_bundles';\nimport {fetchTabletsBundles} from '../../store/actions/tablet_cell_bundles';\nimport {\n getTabletBundlesWriteableByName,\n getTabletsActiveBundle,\n getTabletsActiveBundleData,\n getTabletsError,\n} from '../../store/selectors/tablet_cell_bundles/index';\nimport Error from '../../components/Error/Error';\nimport Bundles from './bundles/Bundles';\n\nimport './TabletCellBundles.scss';\nimport BundleStatisticsTab from './bundle/BundleStatisticsTab';\nimport BundleMonitorTab from './bundle/BundleMonitorTab';\nimport BundleAclTab from './bundle/BundleAclTab';\nimport BundleMetaTable from './bundle/BundleMetaTable';\nimport {BundleInstancesTab} from './bundle/BundleInstancesTab';\nimport {BundleProxiesTab} from './bundle/BundleProxiesTab';\nimport Icon from '../../components/Icon/Icon';\nimport {tabletCellBundleDashboardUrl} from '../../utils/tablet_cell_bundles';\nimport {BundleEditorDialog as TabletBundleEditorDialog} from '../../pages/tablet_cell_bundles/bundles/BundleEditorDialog/BundleEditorDialog';\nimport {showTabletCellBundleEditor} from '../../store/actions/tablet_cell_bundles/tablet-cell-bundle-editor';\nimport Button from '../../components/Button/Button';\nimport {\n getCluster,\n getClusterUiConfigEnablePerBundleTabletAccounting,\n} from '../../store/selectors/global';\nimport ChartLink from '../../components/ChartLink/ChartLink';\nimport {Page} from '../../constants/index';\nimport ChaosCellBundles from '../../pages/chaos_cell_bundles/bundles/Bundles';\nimport ChaosBundleEditorDialog from '../../pages/chaos_cell_bundles/bundles/ChaosBundleEditorDialog/ChaosBundleEditorDialog.connected';\nimport {ChaosCells} from '../../pages/chaos_cell_bundles/cells/Cells';\nimport UIFactory from '../../UIFactory';\nimport {TabletBundle} from '../../store/reducers/tablet_cell_bundles';\nimport {formatByParams} from '../../utils/format';\nimport {UI_TAB_SIZE} from '../../constants/global';\nimport {TabletErrorsLazy} from '../../pages/tablet-errors-by-bundle/lazy';\nimport {getConfigData} from '../../config/ui-settings';\n\nconst b = cn('tablets');\n\nconst TabletsTabs = React.memo(TabletsTabsImpl);\n\nfunction useShowSettings(activeBundle: string | undefined, enableBundleController: boolean) {\n return React.useMemo(() => {\n return reduce_(\n TabletsTab,\n (acc, v) => {\n if (v === TabletsTab.CHAOS_CELLS) {\n // TODO: fix me when a page of active chaos-cell-bundle is ready\n acc[v] = {show: false};\n } else {\n acc[v] = {show: v === TabletsTab.TABLET_CELLS || Boolean(activeBundle)};\n }\n return acc;\n },\n {} as Record<(typeof TabletsTab)[keyof typeof TabletsTab], TabSettings>,\n );\n }, [activeBundle, enableBundleController]);\n}\n\nexport default function TabletCellBundles() {\n const match = useRouteMatch();\n const cluster = useSelector(getCluster);\n\n const error = useSelector(getTabletsError);\n const activeBundle = useSelector(getTabletsActiveBundle);\n const {enable_bundle_controller: enableBundleController = false} =\n useSelector(getTabletsActiveBundleData) || ({} as Partial<TabletBundle>);\n const dispatch = useDispatch();\n const fetchFn = React.useCallback(() => {\n Promise.all([dispatch(fetchChaosBundles()), dispatch(fetchTabletsBundles())]);\n }, [dispatch]);\n useUpdater(fetchFn);\n\n const writeableByName = useSelector(getTabletBundlesWriteableByName);\n\n const bundleWritable = writeableByName.get(activeBundle);\n\n const allowEdit = enableBundleController || bundleWritable;\n\n const showSettings = useShowSettings(activeBundle, enableBundleController);\n\n const statsTab = showSettings[TabletsTab.STATISTICS];\n statsTab.show = statsTab.show && Boolean(UIFactory.getStatisticsComponentForBundle());\n\n const monTab = showSettings[TabletsTab.MONITOR];\n\n const {\n component: monitoringComponent,\n urlTemplate,\n title: monitoringTitle,\n } = UIFactory.getMonitoringForBundle() ?? {};\n monTab.show = monTab.show && Boolean(monitoringComponent || urlTemplate);\n\n if (urlTemplate) {\n monTab.external = true;\n monTab.routed = false;\n monTab.url = formatByParams(urlTemplate, {\n ytCluster: cluster,\n ytTabletCellBundle: activeBundle,\n });\n }\n\n const instTab = showSettings[TabletsTab.INSTANCES];\n instTab.show = instTab.show && enableBundleController;\n\n const proxyTab = showSettings[TabletsTab.PROXIES];\n proxyTab.show = proxyTab.show && enableBundleController;\n\n const errorsTab = showSettings[TabletsTab.TABLET_ERRORS];\n errorsTab.show = errorsTab.show && getConfigData().allowTabletErrorsAPI;\n\n return (\n <div className=\"elements-page__content\">\n <section className={b(null, 'elements-main-section')}>\n <div className={b('content')}>\n <div className={b('heading')}>\n <ActiveBundleDetails\n allowEdit={allowEdit}\n activeBundle={activeBundle}\n cluster={cluster}\n />\n <div className={b('tabs')}>\n <TabletsTabs\n activeBundle={activeBundle}\n showSettings={showSettings}\n monitoringTitle={monitoringTitle}\n />\n </div>\n </div>\n </div>\n {error && <Error error={error} />}\n <div className={b('tab-viewer')}>\n <Switch>\n {instTab && (\n <Route\n path={`${match.path}/${TabletsTab.INSTANCES}`}\n component={BundleInstancesTab}\n />\n )}\n {proxyTab && (\n <Route\n path={`${match.path}/${TabletsTab.PROXIES}`}\n component={BundleProxiesTab}\n />\n )}\n {errorsTab.show && (\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_ERRORS}`}\n render={() => <TabletErrorsLazy bundle={activeBundle} />}\n />\n )}\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}`}\n component={BundleCells}\n />\n <Route\n path={`/${cluster}/${Page.CHAOS_CELL_BUNDLES}/${TabletsTab.CHAOS_CELLS}`}\n component={ChaosCells}\n />\n {statsTab.show && (\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.STATISTICS}`}\n component={BundleStatisticsTab}\n />\n )}\n {monTab.show && monitoringComponent && (\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.MONITOR}`}\n render={() => <BundleMonitorTab component={monitoringComponent} />}\n />\n )}\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.ACL}`}\n render={() => <BundleAclTab className={b('acl-tab')} />}\n />\n <Route\n path={`/${cluster}/${Page.TABLET_CELL_BUNDLES}`}\n component={Bundles}\n />\n <Route\n path={`/${cluster}/${Page.CHAOS_CELL_BUNDLES}`}\n component={ChaosCellBundles}\n />\n <Redirect\n from={`/${cluster}/${Page.TABLET_CELL_BUNDLES}/*`}\n to={match.path}\n />\n </Switch>\n </div>\n </section>\n <TabletBundleEditorDialog />\n <ChaosBundleEditorDialog />\n </div>\n );\n}\n\nfunction ActiveBundleDetails({\n activeBundle,\n allowEdit,\n cluster,\n}: {\n activeBundle?: string;\n allowEdit?: boolean;\n cluster: string;\n}) {\n const dispatch = useDispatch();\n const allowAccounting = useSelector(getClusterUiConfigEnablePerBundleTabletAccounting);\n\n const showEditor = React.useCallback(() => {\n if (activeBundle) {\n dispatch(showTabletCellBundleEditor(activeBundle));\n }\n }, [activeBundle, dispatch]);\n\n return (\n <React.Fragment>\n {activeBundle && (\n <div className=\"elements-heading elements-heading_size_l\">\n <div className={b('bundle-name')}>\n <div className={b('bundle-name-left')}>\n {activeBundle}\n <ChartLink\n className={b('dashboard-link')}\n theme={'ghost'}\n url={tabletCellBundleDashboardUrl(cluster, activeBundle)}\n />\n </div>\n {allowAccounting && allowEdit && (\n <div className={b('tabs-edit-btn')}>\n <Button className={b('edit-btn')} size={'m'} onClick={showEditor}>\n <Icon awesome={'pencil'} />\n Edit Bundle\n </Button>\n </div>\n )}\n </div>\n </div>\n )}\n <BundleMetaTable />\n </React.Fragment>\n );\n}\n\nfunction makeAllTabsProps(matchUrl: string, cluster: string) {\n const res = makeTabProps(matchUrl, {});\n res.items = [\n {\n value: Page.TABLET_CELL_BUNDLES,\n text: 'Tablet cell bundles',\n show: true,\n url: `/${cluster}/${Page.TABLET_CELL_BUNDLES}`,\n },\n {\n value: TabletsTab.TABLET_CELLS,\n text: 'Tablet cells',\n show: true,\n url: `/${cluster}/${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}`,\n },\n {\n value: Page.CHAOS_CELL_BUNDLES,\n text: 'Chaos cell bundles',\n show: true,\n url: `/${cluster}/${Page.CHAOS_CELL_BUNDLES}`,\n },\n {\n value: TabletsTab.CHAOS_CELLS,\n text: 'Chaos cells',\n show: true,\n url: `/${cluster}/${Page.CHAOS_CELL_BUNDLES}/${TabletsTab.CHAOS_CELLS}`,\n },\n ];\n return res;\n}\n\nfunction TabletsTabsImpl({\n activeBundle,\n showSettings,\n monitoringTitle = 'Monitoring',\n}: {\n activeBundle: string | undefined;\n showSettings: Record<string, TabSettings>;\n monitoringTitle?: string;\n}) {\n const match = useRouteMatch<{cluster: string}>();\n const {cluster} = match.params;\n\n const tabProps = activeBundle\n ? makeTabProps(match.url, TabletsTab, showSettings, undefined, {\n [TabletsTab.MONITOR]: monitoringTitle,\n })\n : makeAllTabsProps(match.url, cluster);\n\n return (\n <Tabs\n {...tabProps}\n className={b('tabs')}\n routed\n routedPreserveLocation\n exactNavLink\n size={UI_TAB_SIZE}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {Breadcrumbs, BreadcrumbsItem} from '../../components/Breadcrumbs';\nimport {useHistory} from 'react-router';\n\nimport Favourites, {FavouritesItem} from '../../components/Favourites/Favourites';\nimport {Page} from '../../constants/index';\nimport {TabletsTab} from '../../constants/tablets';\nimport {RowWithName} from '../../containers/AppNavigation/TopRowContent/SectionName';\nimport {getCluster, getClusterUiConfig} from '../../store/selectors/global';\nimport type {TabletsCellBundlesBreadcrumbsItem} from '../../store/selectors/tablet_cell_bundles';\nimport type {ValueOf} from '../../types';\n\nimport './TabletCellBundlesTopRowContent.scss';\nimport {getAppBrowserHistory} from '../../store/window-store';\nimport UIFactory from '../../UIFactory';\nimport {TabletBundle} from '../../store/reducers/tablet_cell_bundles';\n\nconst block = cn('tablet-cell-bundles-top-row-content');\n\nexport interface PropsFromRedux {\n isActiveBundleInFavourites: boolean;\n activeBundle: string;\n activeBundleData?: TabletBundle;\n bcItems: TabletsCellBundlesBreadcrumbsItem[];\n page: ValueOf<typeof Page>;\n setActiveBundle(activeBundle: string): void;\n favourites: Array<FavouritesItem>;\n toggleFavourite(bundle: string): void;\n}\n\nfunction TabletCellBundlesTopRowContent({\n isActiveBundleInFavourites,\n favourites,\n toggleFavourite,\n activeBundle,\n activeBundleData,\n bcItems,\n page,\n setActiveBundle,\n}: PropsFromRedux) {\n const clusterUiConfig = useSelector(getClusterUiConfig);\n\n return (\n <RowWithName page={page} urlParams={{activeBundle: ''}}>\n <BundleFavourites\n isActiveBundleInFavourites={isActiveBundleInFavourites}\n activeBundle={activeBundle}\n page={page}\n setActiveBundle={setActiveBundle}\n items={favourites}\n toggleFavourite={toggleFavourite}\n />\n <BundleBreadcrumbs\n className={block('breadcrumbs')}\n bcItems={bcItems}\n setActiveBundle={setActiveBundle}\n />\n {UIFactory.renderTopRowExtraControlsForBundle({\n itemClassName: block('extra-control'),\n clusterUiConfig,\n bundle: activeBundleData,\n })}\n </RowWithName>\n );\n}\n\ninterface BundleFavouritesProps {\n isActiveBundleInFavourites: boolean;\n activeBundle: string;\n page: ValueOf<typeof Page>;\n setActiveBundle(activeBundle: string): void;\n toggleFavourite(bundle: string): void;\n items: Array<FavouritesItem>;\n}\n\nfunction BundleFavourites({\n isActiveBundleInFavourites,\n items,\n activeBundle,\n page,\n setActiveBundle,\n toggleFavourite,\n}: BundleFavouritesProps) {\n const cluster = useSelector(getCluster);\n\n const handleFavouriteItemClick = React.useCallback(\n (item: FavouritesItem) => {\n setActiveBundle(item.path);\n if (!item.path) {\n getAppBrowserHistory().push(`/${cluster}/${page}`);\n } else {\n getAppBrowserHistory().push(\n `/${cluster}/${page}/${TabletsTab.TABLET_CELLS}?activeBundle=${item.path}`,\n );\n }\n },\n [cluster, setActiveBundle],\n );\n\n const handleFavouriteToggle = React.useCallback(() => {\n toggleFavourite(activeBundle);\n }, [toggleFavourite]);\n\n return (\n <Favourites\n className={block('favourites')}\n isActive={isActiveBundleInFavourites}\n items={items}\n onItemClick={handleFavouriteItemClick}\n onToggle={handleFavouriteToggle}\n toggleDisabled={!activeBundle}\n theme={'clear'}\n />\n );\n}\n\ninterface BundleBreadcrumbsProps {\n className: string;\n bcItems: TabletsCellBundlesBreadcrumbsItem[];\n setActiveBundle(activeBundle: string): void;\n}\n\nfunction BundleBreadcrumbs({className, bcItems, setActiveBundle}: BundleBreadcrumbsProps) {\n const history = useHistory();\n\n const handleItemClick = React.useCallback(\n (item: string | number) => {\n setActiveBundle(item.toString());\n },\n [setActiveBundle],\n );\n\n const items = React.useMemo(() => {\n return bcItems.map((item) => {\n const text = item.text || item.title || '';\n return (\n <BreadcrumbsItem key={text} href={item.href}>\n {text}\n </BreadcrumbsItem>\n );\n });\n }, [bcItems]);\n\n return (\n <Breadcrumbs\n navigate={history.push}\n onAction={handleItemClick}\n className={className}\n showRoot\n >\n {items}\n </Breadcrumbs>\n );\n}\n\nexport default TabletCellBundlesTopRowContent;\n","import {connect} from 'react-redux';\n\nimport {Page} from '../../constants/index';\nimport TabletCellBundlesTopRowContent from '../../pages/tablet_cell_bundles/TabletCellBundlesTopRowContent';\nimport {setTabletsActiveBundle} from '../../store/actions/tablet_cell_bundles';\nimport type {RootState} from '../../store/reducers';\nimport {\n getTabletsActiveBundle,\n getTabletsActiveBundleData,\n getTabletsBreadcrumbItems,\n} from '../../store/selectors/tablet_cell_bundles';\nimport {bundlesToggleFavourite} from '../../store/actions/favourites';\nimport {getFavouriteBundles, isActiveBundleInFavourites} from '../../store/selectors/favourites';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getTabletsActiveBundle(state),\n activeBundleData: getTabletsActiveBundleData(state),\n bcItems: getTabletsBreadcrumbItems(state),\n page: Page.TABLET_CELL_BUNDLES,\n favourites: getFavouriteBundles(state),\n isActiveBundleInFavourites: isActiveBundleInFavourites(state),\n };\n};\n\nconst mapDispatchToProps = {\n setActiveBundle: setTabletsActiveBundle,\n toggleFavourite: bundlesToggleFavourite,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(TabletCellBundlesTopRowContent);\n","import {connect} from 'react-redux';\n\nimport {Page} from '../../constants/index';\nimport TabletCellBundlesTopRowContent from '../../pages/tablet_cell_bundles/TabletCellBundlesTopRowContent';\nimport {setChaosActiveBundle} from '../../store/actions/chaos_cell_bundles';\nimport type {RootState} from '../../store/reducers';\nimport {\n getChaosActiveBundle,\n getChaosActiveBundleData,\n getChaosBreadcrumbItems,\n} from '../../store/selectors/chaos_cell_bundles';\nimport {\n getFavouriteChaosBundles,\n isActiveChaosBundleInFavourites,\n} from '../../store/selectors/favourites';\n\nconst mapStateToProps = (state: RootState) => {\n return {\n activeBundle: getChaosActiveBundle(state),\n activeBundleData: getChaosActiveBundleData(state),\n bcItems: getChaosBreadcrumbItems(state),\n page: Page.CHAOS_CELL_BUNDLES,\n favourites: getFavouriteChaosBundles(state),\n isActiveBundleInFavourites: isActiveChaosBundleInFavourites(state),\n };\n};\n\nconst mapDispatchToProps = {\n setActiveBundle: setChaosActiveBundle,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(TabletCellBundlesTopRowContent);\n","import {ThunkAction} from 'redux-thunk';\nimport FontFaceObserver from 'fontfaceobserver';\nimport {getFontFamilies} from '../../../store/selectors/global/fonts';\nimport {RootState} from '../../../store/reducers';\n\n// TODO: consider switching back for <link rel=\"preload\"> once it's supported in all major browsers\nexport function waitForFontFamily(fontFamily: string) {\n return new FontFaceObserver(fontFamily).load(null, 10000);\n}\n\nexport function waitForFontFamilies<T>(\n promiseToWrap: T,\n): ThunkAction<Promise<T>, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const fontFamilies = getFontFamilies(getState());\n return Promise.all([\n waitForFontFamily(fontFamilies.regular),\n waitForFontFamily(fontFamilies.monospace),\n ]).then(() => {\n return promiseToWrap;\n });\n };\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n","import { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'gc-';\nexport const cn = withNaming({ e: '__', m: '_', v: '_' });\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_', v: '_' });\n","import { block } from '../utils/cn';\nexport const progressBlock = block('progress');\n","import React from 'react';\nimport { progressBlock } from './constants';\nexport function ProgressInnerText(props) {\n const { text, offset = 0 } = props;\n if (!text) {\n return null;\n }\n return (React.createElement(\"div\", { className: progressBlock('text-inner'), style: { transform: `translateX(calc(var(--g-flow-direction) * ${-offset}%))` } }, text));\n}\n","import React from 'react';\nimport { progressBlock } from './constants';\nexport function ProgressStackItem({ item }) {\n const { value, color, className, theme, title, content, loading } = item;\n const modifiers = {\n loading,\n };\n if (typeof color === 'undefined') {\n modifiers.theme = theme || 'default';\n }\n if (Number.isFinite(value)) {\n return (React.createElement(\"div\", { className: progressBlock('item', modifiers, className), style: { width: `${value}%`, backgroundColor: color }, title: title }, content));\n }\n return null;\n}\n","export function getOffset(value) {\n return value < 100 ? value - 100 : 0;\n}\nexport function getValueFromStack(stack) {\n return stack.reduce((sum, { value }) => sum + value, 0);\n}\nexport function getTheme(props) {\n const { theme, colorStops, colorStopsValue, value } = props;\n if (colorStops) {\n const matchingColorStopItem = colorStops.find((item, index) => {\n const currentValue = typeof colorStopsValue === 'number' ? colorStopsValue : value;\n const minValue = index > 1 ? colorStops[index - 1].stop : 0;\n const maxValue = index < colorStops.length - 1 ? item.stop : 100;\n return currentValue >= minValue && currentValue <= maxValue;\n });\n return matchingColorStopItem ? matchingColorStopItem.theme : theme;\n }\n return theme;\n}\n","import React from 'react';\nimport { ProgressInnerText } from './ProgressInnerText';\nimport { ProgressStackItem } from './ProgressStackItem';\nimport { progressBlock } from './constants';\nimport { getOffset, getValueFromStack } from './utils';\nexport function ProgressWithStack(props) {\n const { stack, stackClassName, value, text } = props;\n const offset = getOffset(value || getValueFromStack(stack));\n return (React.createElement(\"div\", { className: progressBlock('stack', stackClassName), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` } },\n React.createElement(\"div\", { className: progressBlock('item'), style: { width: `${-offset}%` } }),\n stack.map((item, index) => (React.createElement(ProgressStackItem, { key: index, item: item }))),\n React.createElement(ProgressInnerText, { offset: offset, text: text })));\n}\n","import React from 'react';\nimport { ProgressInnerText } from './ProgressInnerText';\nimport { progressBlock } from './constants';\nimport { getOffset, getTheme } from './utils';\nexport function ProgressWithValue(props) {\n const { value, loading, text } = props;\n const offset = getOffset(value);\n if (!Number.isFinite(value)) {\n return null;\n }\n return (React.createElement(\"div\", { className: progressBlock('item', { theme: getTheme(props), loading }), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` } },\n React.createElement(ProgressInnerText, { offset: offset, text: text })));\n}\n","import React from 'react';\nimport { ProgressWithStack } from './ProgressWithStack';\nimport { ProgressWithValue } from './ProgressWithValue';\nimport { progressBlock } from './constants';\nimport { isProgressWithStack } from './types';\nimport './Progress.css';\nexport const Progress = React.forwardRef(function Progress(props, ref) {\n const { text = '', theme = 'default', size = 'm', loading = false, className, qa } = props;\n const resolvedProps = Object.assign(Object.assign({}, props), { text, theme, size, loading });\n return (React.createElement(\"div\", { ref: ref, className: progressBlock({ size }, className), \"data-qa\": qa },\n React.createElement(\"div\", { className: progressBlock('text') }, text),\n isProgressWithStack(resolvedProps) ? (React.createElement(ProgressWithStack, Object.assign({}, resolvedProps))) : (React.createElement(ProgressWithValue, Object.assign({}, resolvedProps)))));\n});\n","export function isProgressWithStack(props) {\n return props.stack !== undefined;\n}\n","/* Font Face Observer v2.3.0 - © Bram Stein. License: BSD-3-Clause */(function(){function p(a,c){document.addEventListener?a.addEventListener(\"scroll\",c,!1):a.attachEvent(\"scroll\",c)}function u(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function b(){document.removeEventListener(\"DOMContentLoaded\",b);a()}):document.attachEvent(\"onreadystatechange\",function g(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",g),a()})};function w(a){this.g=document.createElement(\"div\");this.g.setAttribute(\"aria-hidden\",\"true\");this.g.appendChild(document.createTextNode(a));this.h=document.createElement(\"span\");this.i=document.createElement(\"span\");this.m=document.createElement(\"span\");this.j=document.createElement(\"span\");this.l=-1;this.h.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.i.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\nthis.j.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.m.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.h.appendChild(this.m);this.i.appendChild(this.j);this.g.appendChild(this.h);this.g.appendChild(this.i)}\nfunction x(a,c){a.g.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+c+\";\"}function B(a){var c=a.g.offsetWidth,b=c+100;a.j.style.width=b+\"px\";a.i.scrollLeft=b;a.h.scrollLeft=a.h.scrollWidth+100;return a.l!==c?(a.l=c,!0):!1}function C(a,c){function b(){var e=g;B(e)&&null!==e.g.parentNode&&c(e.l)}var g=a;p(a.h,b);p(a.i,b);B(a)};function D(a,c,b){c=c||{};b=b||window;this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\";this.context=b}var E=null,F=null,G=null,H=null;function I(a){null===F&&(M(a)&&/Apple/.test(window.navigator.vendor)?(a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent),F=!!a&&603>parseInt(a[1],10)):F=!1);return F}function M(a){null===H&&(H=!!a.document.fonts);return H}\nfunction N(a,c){var b=a.style,g=a.weight;if(null===G){var e=document.createElement(\"div\");try{e.style.font=\"condensed 100px sans-serif\"}catch(q){}G=\"\"!==e.style.font}return[b,g,G?a.stretch:\"\",\"100px\",c].join(\" \")}\nD.prototype.load=function(a,c){var b=this,g=a||\"BESbswy\",e=0,q=c||3E3,J=(new Date).getTime();return new Promise(function(K,L){if(M(b.context)&&!I(b.context)){var O=new Promise(function(r,t){function h(){(new Date).getTime()-J>=q?t(Error(\"\"+q+\"ms timeout exceeded\")):b.context.document.fonts.load(N(b,'\"'+b.family+'\"'),g).then(function(n){1<=n.length?r():setTimeout(h,25)},t)}h()}),P=new Promise(function(r,t){e=setTimeout(function(){t(Error(\"\"+q+\"ms timeout exceeded\"))},q)});Promise.race([P,O]).then(function(){clearTimeout(e);\nK(b)},L)}else u(function(){function r(){var d;if(d=-1!=k&&-1!=l||-1!=k&&-1!=m||-1!=l&&-1!=m)(d=k!=l&&k!=m&&l!=m)||(null===E&&(d=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),E=!!d&&(536>parseInt(d[1],10)||536===parseInt(d[1],10)&&11>=parseInt(d[2],10))),d=E&&(k==y&&l==y&&m==y||k==z&&l==z&&m==z||k==A&&l==A&&m==A)),d=!d;d&&(null!==f.parentNode&&f.parentNode.removeChild(f),clearTimeout(e),K(b))}function t(){if((new Date).getTime()-J>=q)null!==f.parentNode&&f.parentNode.removeChild(f),\nL(Error(\"\"+q+\"ms timeout exceeded\"));else{var d=b.context.document.hidden;if(!0===d||void 0===d)k=h.g.offsetWidth,l=n.g.offsetWidth,m=v.g.offsetWidth,r();e=setTimeout(t,50)}}var h=new w(g),n=new w(g),v=new w(g),k=-1,l=-1,m=-1,y=-1,z=-1,A=-1,f=document.createElement(\"div\");f.dir=\"ltr\";x(h,N(b,\"sans-serif\"));x(n,N(b,\"serif\"));x(v,N(b,\"monospace\"));f.appendChild(h.g);f.appendChild(n.g);f.appendChild(v.g);b.context.document.body.appendChild(f);y=h.g.offsetWidth;z=n.g.offsetWidth;A=v.g.offsetWidth;t();\nC(h,function(d){k=d;r()});x(h,N(b,'\"'+b.family+'\",sans-serif'));C(n,function(d){l=d;r()});x(n,N(b,'\"'+b.family+'\",serif'));C(v,function(d){m=d;r()});x(v,N(b,'\"'+b.family+'\",monospace'))})})};\"object\"===typeof module?module.exports=D:(window.FontFaceObserver=D,window.FontFaceObserver.prototype.load=D.prototype.load);}());\n"],"names":["shouldClientNavigate","link","modifiers","target","getAttribute","href","origin","location","hasAttribute","metaKey","ctrlKey","altKey","shiftKey","b","BreadcrumbItem","props","Element","domProps","filterDOMProps","labelable","title","children","handleAction","event","disabled","current","preventDefault","onAction","currentTarget","navigate","HTMLAnchorElement","isDefaultPrevented","routerOptions","isDisabled","linkProps","onClick","undefined","hrefLang","rel","download","ping","referrerPolicy","role","tabIndex","onKeyDown","key","itemType","Object","assign","className","BreadcrumbsSeparator","separator","displayName","addComponentKeysets","en","Item","_props","ref","listRef","containerRef","useForkRef","items","forEach","child","index","push","visibleItemsCount","setVisibleItemsCount","length","calculated","setCalculated","handleResize","onResize","element","window","ResizeObserver","addEventListener","removeEventListener","observer","entries","observe","disconnect","useResizeObserver","lastChildren","visibleItems","list","listItems","Array","from","containerWidth","offsetWidth","newVisibleItemsCount","calculatedWidth","maxItems","Infinity","rootWidth","showRoot","item","shift","scrollWidth","lastItem","pop","Math","min","i","max","recalculate","contents","breadcrumbs","endItems","rootItem","hiddenItems","slice","menuItem","DropdownMenu","map","el","text","action","_a","popupProps","staircase","popupStyle","placement","popupPlacement","renderSwitcher","Button","i18n","size","view","Icon","lastIndex","breadcrumbItems","isCurrent","calculating","qa","style","cn","Breadcrumbs","_ref","_objectWithoutProperties","_excluded","_jsx","UBreadcrumbs","_objectSpread","ChartLink","url","theme","hideIcon","face","wrapContent","icon","awesome","content","_jsxs","React","Link","block","Favourites","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","args","_key","call","apply","concat","state","isActive","toggleActive","onToggle","setState","prevState","onItemClick","_createClass","value","_this2","this","dropItems","map_","path","switcher","renderButton","pin","empty","Hotkey","settings","keys","handler","scope","buttonProps","themeProps","_this$props","toggleDisabled","clear","selected","renderDropDownMenu","renderHotkey","Component","PropTypes","xmlns","fill","viewBox","d","Info","data","infoIcon","WaitForFont","_useSelector","useSelector","getFontFamilies","regular","monospace","_React$useState","_React$useState2","_slicedToArray","ready","setReady","Promise","all","waitForFontFamily","then","BundleParamsList","params","_ref$size","param","type","postfix","_React$Component","CellsTableInstruments","onIdFilter","id","setTabletsPartial","cellsIdFilter","onBundleFilter","bundle","cellsBundleFilter","onHostFilterChange","hostFilter","onHostSelected","host","cellsHostFilter","onHostInputBlur","getBundleFilterItems","bundles","filter_","indexOf","getHostFilterItems","hosts","idFilter","bundleFilter","activeBundle","activeBundleHosts","Toolbar","itemsToWrap","name","node","Filter","hasClear","placeholder","onChange","autofocus","shrinkable","growable","wrapperClassName","_toConsumableArray","Suggest","filter","_items","popupClassName","onTextUpdate","onBlur","autoFocus","ClipboardButton","buttonText","cancelHelper","CancelHelper","fetchTabletsBundles","dispatch","TABLETS_BUNDLES_LOAD_REQUEST","requests","command","parameters","attributes","USE_MAX_SIZE","removeAllRequests","ytApiV3Id","executeBatch","YTApiId","tabletCellBundles","cancellation","saveCancelToken","results","_results","_toArray","isBundleControllerSupported","output","rest","_rest","cells","error","getBatchError","allCells","prepareTabletCells","allBundles","prepareBundles","zones","Map","has","set","getZones","getState","user","getCurrentUserName","makeCheckPermissionBatchSubRequestUI","permission","wrapApiPromiseByToaster","tabletBundlesCheckWrite","_splitBatchResults","splitBatchResults","outputs","writableByName","reduce_","acc","TABLETS_BUNDLES_PARTIAL","reject","toasterName","skipSuccessToast","errorTitle","fetchWritePermissions","get","bundleControllerZones","result","bundleDefaultConfig","reduce","_ref2","_ref3","k","v","ypath","create","prepareBundleDefaultConfig","TABLETS_BUNDLES_LOAD_SUCCESS","e","isCancelled","TABLETS_BUNDLES_LOAD_FAILURE","setTabletsActiveBundle","bundlesTrackVisit","TABLETS_BUNDLES_ACTIVE_ACCOUNT","mapDispatchToProps","connect","getTabletsActiveBundle","getTabletsCellsHostsOfActiveBundle","getTabletsCellsIdFilter","getTabletsCellsBundleFilter","getTabletsCellsHostFilter","getTabletsCellsBundles","getTabletsCellsHosts","BundleBalancerValue","_props$value","blocking","success","HEALTH_TO_THEME","good","initializing","degrading","failed","changing","Health","Label","hammer","NO_VALUE","BundleGeneralMeta","bundleData","getTabletsActiveBundleData","clusterUiConfig","getClusterUiConfig","cluster","getCluster","allowTabletAccounting","getClusterUiConfigEnablePerBundleTabletAccounting","leftGroup","UIFactory","getExtraMetaTableItemsForBundle","health","tabletCells","tablets","visible","enable_bundle_controller","enable_bundle_balancer","node_tag_filter","rightGroup","memory","renderResourceProgress","uncompressed","compressed","changelog_account","AccountLink","account","snapshot_account","MetaTable","resourceName","usage","getValue","limit","format","calcProgressProps","Progress","STATE_THEME","leading","none","elections","leader_recovery","TABLE_SETTINGS","displayIndices","stickyHead","DataTable","MOVING","stickyTop","STICKY_TOOLBAR_BOTTOM","syncHeadOnResize","dynamicRender","COLUMN_TITLE","peerAddress","actions","HoverAction","wrapCell","renderCell","CellsTable","_len2","_key2","renderColumnHeader","col","sortable","_COLUMN_TITLE$col","_this$props$sortState","sortState","column","order","isSorted","ColumnHeader","capitalize_","onSort","onColumnSort","withUndefined","cellsSort","renderId","row","renderBundle","activeBundleLink","routed","renderState","_data$row","capitalize","renderActions","_this$props2","attributesPath","cellNavigationLink","Tooltip","ClickableAttributesButton","colName","_data$row2","Host","asTabletNode","address","copyBtnClassName","align","toLocaleLowerCase","header","columns","x","Columns","_this$props3","loading","loaded","DataTableYT","sortableColumn","render","width","renderHealth","renderNumber","bind","renderBytes","renderHost","getTabletsIsLoading","getTabletsIsLoaded","getTabletsCellsSorted","getTabletsCellsSortState","tabletActiveBundleLink","tabletAttributesPath","tabletCellNavigationLink","BundleCells","ErrorBoundary","WithStickyToolbar","toolbar","CellsInstruments","setChaosPartial","CHAOS_BUNDLES_PARTIAL","setChaosActiveBundle","CHAOS_BUNDLES_ACTIVE_ACCOUNT","height","fillRule","clipRule","HelpPopover","Popover","buttonRef","I","stickyFooter","stickyBottom","tablet_count","tablet_count_limit","tablet_count_free","tablet_count_percentage","tablet_static_memory","tablet_static_memory_limit","tablet_static_memory_free","tablet_static_memory_percentage","SHORT_TITLE","CopyHostListAction","copyHostListToClipboard","handleClick","onCopy","BundlesTable","shortTitle","setBundlesSortState","has_tag","Boolean","setActiveBundle","renderBundlesTableItemExtraControls","itemClassName","renderAccount","renderNodes","_ref4","nodes","unique_node_tag","help_tooltip","delayClosing","allowPerBundleAccounting","bundleDashboardUrl","pathPrefix","showCellBundleEditor","writeableByName","_ref5","allowEdit","_ref8","_ref9","_calcProgressProps","_data$row3","_calcProgressProps2","toLowerCase","columnName","total","footerData","renderTabletCountPercentage","renderTabletStaticMemoryPercentage","renderBB","renderBC","fetchTabletCellBundleEditor","bundleName","TABLETS_BUNDLES_EDITOR_LOAD_REQUREST","toEdit","getTabletsBundles","find","resolve","defaultReservedMemoryLimit","getTabletsDefaultMemoryConfiguration","tabletCellBundlesEditData","_results$","bundleControllerIsUnavailable","code","yt","NODE_DOES_NOT_EXIST","errorContent","_toEdit$bundle_contro","_toEdit$bundle_contro2","_ref3$","bundleControllerData","bundle_controller_target_config","memory_limits","reserved","TABLETS_BUNDLES_EDITOR_LOAD_SUCCESS","requestGroups","allocated_tablet_nodes","_item","makeBatchSubRequest","allocated_rpc_proxies","errors","tabletCellBundlesInstancesDetails","nodesResults","keys_","instanceDetailsMap","forEach_","_output","nanny_service","_output$","TABLETS_BUNDLES_EDITOR_PARTIAL","TABLETS_BUNDLES_EDITOR_LOAD_FAILURE","showTabletCellBundleEditor","visibleEditor","setBundleEditorController","bundlePath","prepareSetCommandForBatch","tabletCellBundlesSetAttrs","successContent","batchType","calcColumns","createSelector","getTabletBundlesTableMode","mode","bundlesSort","getTabletsBundlesSorted","getTabletsBundlesTotal","getTabletsBundlesSortState","tabletCellBundleDashboardUrl","getTabletBundlesWriteableByName","BundlesTableModeRadio","bundlesTableMode","modes","useDispatch","allowTabs","handleChange","modeItems","CustomRadioButton","prepareSimpleValue","BundlesTableInstruments","onNameEnterKeyDown","setTabletsFirstBundleAsActive","accountFilter","nameFilter","tagNodeFilter","compact_","setTabletsBundlesNameFilter","onEnterKeyDown","setTabletsBundlesAccountFilter","setTabletsBundlesTagNodeFilter","bundlesNameFilter","bundlesAccountFilter","bundlesTagNodeFilter","first","getAppBrowserHistory","getTabletsBundlesAccountFilter","getTabletsBundlesNameFilter","getTabletsBundlesTagNodeFilter","Bundles","handleCopyHostListToClipboard","_dispatch","filterTabletCellsByBundle","getTabletsCells","prepareHostsFromCells","copy","BundleStatisticsTab","getTheme","NoContent","warning","hint","StatisticsComponent","getStatisticsComponentForBundle","BundleMonitorTab","BundleMonitor","component","tablet_cell_bundle","BundleAclTab","allowAcl","isPoolAclAllowed","BundleAcl","ColorCircle","color","_ref$marginRight","marginRight","backgroundColor","BundleMetaResourceProgress","resourceType","_ref$postfix","_getProgressData","stack","sum","Number","trim","metaItems","formattedValue","getProgressBarColorByIndex","label","Readable","fraction","commonTooltip","getProgressData","DETAILS_KEYS","ActiveAccountBundleControllerUpdater","fetchFn","useUpdater","prevBundleControllerState","checkBundleControllerState","_asyncToGenerator","_regeneratorRuntime","_callee","_yield$wrapApiPromise","_yield$wrapApiPromise2","_yield$wrapApiPromise3","alerts","inProgressCount","_context","prev","next","abrupt","attr","tabletBundleControllerState","sent","stop","timeout","BundleConfigurationMeta","bundleControllerConfig","orchidData","getActiveBundleControllerData","bundleGroup","resource_quota","resource_allocated","allMemory","allVCPU","vcpu","allocMemory","allocVCPU","details","_getBundleStateData","detailsEntries","entries_","pick_","_ref6","_ref7","getBundleStateData","renderErrors","getBundleStateField","getLimitAllocatedField","rpc_proxy_count","count","_bundleControllerConf","rpc_proxy_resource_guarantee","getRpcNodeField","tablet_node_count","_bundleControllerConf2","tablet_node_resource_guarantee","cpu_limits","subTitles","allocated","allStr","allocatedStr","percentage","printUsageLimit","printMemory","printVCPU","totalCounts","alert","description","BundleMetaTable","COLUMNS","inlineMargins","visibleOnRowHover","_props$row$data","resource","formattedMemory","Bytes","formattedVcpu","vCores","_computeProgress","used","progress","computeProgress","getProgressTheme","hulkRequestPath","uuid","lastWord","suffix","exactPath","makeNavigationLink","allocationState","tooltip","useFlex","ReadableField","renderDeployUrl","renderNannyUrl","deployUrl","nannyUrl","CellsBundleController","hideColumns","setFilter","toHide","Set","useColumns","renderToolbar","debounce","skipBlurByEnter","useThemeYT","emptyDataMessage","BundleInstancesTab","getActiveBundleInstances","BundleProxiesTab","getActiveBundleProxies","bundleEditorDict","resources","defaults","memory_reset","tablet_static","tablet_dynamic","compressed_block_cache","uncompressed_block_cache","versioned_chunk_meta","lookup_row_cache","key_filter_block_cache","threadPool_reset","lookup_thread_pool_size","query_thread_pool_size","write_thread_pool_size","getResourceData","source","getInitialFormValues","slug","changelogAccount","snapshotAccount","general","abc","info","createConfigurationList","formatted","itemData","_itemData$resource_gu","resource_guarantee","net","toPrecision","initialData","createParams","formatType","_hammer$format$format","split","_hammer$format$format2","difference","_hammer$format$format3","_hammer$format$format4","usedVal","usedPref","prepareAbc","prepareSubmitBundle","form","prepare","_form$getState","dirtyFields","values","addToChange","field","prepareValue","get_","simpleBundleValidate","toNumber","isFinite","instanceCountValidate","input","number","getBundleControllerResource","defaultValues","_step","_iterator","_createForOfIteratorHelper","s","n","done","_current$key","err","f","BundleEditorDialog","_initialValues$resour","getTabletCellBundleEditorState","getBundleEditorData","defaultConfig","enableBundleController","tabletCountUsage","tabletStaticMemoryUsage","allowTabletCount","isDeveloper","initialValues","rpc_proxy_sizes","tablet_node_sizes","data_centers","rpcConfigurations","nodeConfigurations","dcConfigurations","renderGeneralTabs","fields","isAbcAllowed","caption","extras","allowRootAccount","renderResourceTab","fullWidth","touched","renderTableCellBundleEditorNotice","withoutDetailedBar","validator","section","docsUrl","makeLink","docsUrls","onRadioClick","_bundleDefaultConfig$","nodeConfigurationType","defaultMemory","default_config","defaultThreadPool","defaultMemoryLimit","resultMemory","resultThreadPool","change","renderSimpleResourceTab","renderMemoryTab","visibilityCondition","when","allValues","_allValues$resources","onReset","_allValues$memory_lim","isNaN","renderThreadPoolTab","_allValues$resources2","onSubmit","preparedData","t0","makeFormSubmitError","_x","isEmpty_","YTDFDialog","headerProps","onAdd","onClose","validate","validateFormValues","quota","_tabletNode$memory","_tabletNode$vcpu","_resources$rpc_proxy_2","_resources$rpc_proxy_3","_tabletNode$memory2","_resources$rpc_proxy_4","_resources$rpc_proxy_5","res","currentAccLimit","tabletNode","_resources$rpc_proxy_","_resources$tablet_nod","requiredCpu","violatedResources","requiredMemory","join","showChaosCellBundleEditor","CHAOS_BUNDLES_EDITOR_LOAD_REQUREST","CHAOS_BUNDLES_EDITOR_PARTIAL","chaosCellBundlesEditData","CHAOS_BUNDLES_EDITOR_LOAD_SUCCESS","CHAOS_BUNDLES_EDITOR_LOAD_FAILURE","getChaosIsLoading","getChaosIsLoaded","getChaosBundlesSorted","getChaosBundlesTotal","getChaosBundlesSortState","getChaosBundlesTableMode","chaosActiveBundleLink","getChaosBundlesAccountFilter","getChaosBundlesNameFilter","getChaosBundlesTagNodeFilter","ChaosCellBundles","filterChaosCellsByBundle","getChaosCells","TABS","show","ChaosBundleResourceUsage","bundleEditorData","setBundleQuota","_React$useState3","_React$useState4","showEditor","setShowEditor","toggleEditor","FORMATS","_calcProgressProps$va","Bold","ChaosBundleResourceEditor","toggleVisibility","_bundleEditorData$bun","onSave","QuotaEditorWithHide","onHide","getInfoByName","currentAccount","parentOfCurrentAccount","ChaosBundleEditorGeneral","setBunndleAttributes","ChaosBundleAbcServiceEditor","ChaosBundleAccountEditor","attributeName","onAbcChange","Error","control","renderControlAbcService","WithHeader","_Fragment","options","_defineProperty","AccountsSuggestWithLoading","getChaosCellBundleEditorData","chaosCellBundleEditor","hideBundleEditor","attrs","console","log","chaosCellBundlesSetAttrs","activeTab","setActiveTab","Dialog","open","Header","Divider","Body","Tabs","layout","active","onTabChange","ErrorBlock","getChaosActiveBundle","getChaosCellsHostsOfActiveBundle","getChaosCellsIdFilter","getChaosCellsBundleFilter","getChaosCellsHostFilter","getChaosCellsBundles","getChaosCellsHosts","getChaosCellsSorted","getChaosCellsSortState","chaosAttributesPath","chaosCellNavigationLink","ChaosCells","TabletErrorsLazy","withLazyLoading","TabletErrorsByBundle","TabletsTabs","TabletsTabsImpl","TabletCellBundles","_UIFactory$getMonitor","match","useRouteMatch","getTabletsError","_ref$enable_bundle_co","CHAOS_BUNDLES_LOAD_REQUEST","chaosCellBundles","CHAOS_BUNDLES_LOAD_SUCCESS","CHAOS_BUNDLES_LOAD_FAILURE","bundleWritable","showSettings","TabletsTab","CHAOS_CELLS","TABLET_CELLS","useShowSettings","statsTab","STATISTICS","monTab","MONITOR","getMonitoringForBundle","monitoringComponent","urlTemplate","monitoringTitle","external","formatByParams","ytCluster","ytTabletCellBundle","instTab","INSTANCES","proxyTab","PROXIES","errorsTab","TABLET_ERRORS","getConfigData","allowTabletErrorsAPI","ActiveBundleDetails","Switch","Route","Page","TABLET_CELL_BUNDLES","CHAOS_CELL_BUNDLES","ACL","Redirect","to","TabletBundleEditorDialog","ChaosBundleEditorDialog","allowAccounting","_ref4$monitoringTitle","tabProps","makeTabProps","matchUrl","makeAllTabsProps","routedPreserveLocation","exactNavLink","UI_TAB_SIZE","BundleFavourites","isActiveBundleInFavourites","page","toggleFavourite","handleFavouriteItemClick","handleFavouriteToggle","BundleBreadcrumbs","bcItems","history","useHistory","handleItemClick","toString","BreadcrumbsItem","favourites","activeBundleData","RowWithName","urlParams","renderTopRowExtraControlsForBundle","bundlesToggleFavourite","getTabletsBreadcrumbItems","getFavouriteBundles","TabletCellBundlesTopRowContent","getChaosActiveBundleData","getChaosBreadcrumbItems","getFavouriteChaosBundles","isActiveChaosBundleInFavourites","fontFamily","FontFaceObserver","load","waitForFontFamilies","promiseToWrap","fontFamilies","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","prefix","compareBundlesByAccount","left","right","sortTableBundles","columnsSortable","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","sort","_ref2$nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes","reverse","NAMESPACE","withNaming","m","progressBlock","ProgressInnerText","offset","transform","ProgressStackItem","getOffset","colorStops","colorStopsValue","matchingColorStopItem","currentValue","minValue","maxValue","ProgressWithStack","stackClassName","getValueFromStack","ProgressWithValue","resolvedProps","isProgressWithStack","p","a","c","document","attachEvent","w","g","createElement","setAttribute","appendChild","createTextNode","h","j","cssText","B","scrollLeft","C","parentNode","D","family","weight","stretch","context","E","F","G","H","M","fonts","N","font","q","prototype","J","Date","getTime","K","L","test","navigator","vendor","exec","userAgent","parseInt","O","t","setTimeout","P","race","clearTimeout","body","readyState","detachEvent","u","y","z","A","removeChild","dir","hidden","module","exports"],"sourceRoot":""}