@ytsaurus/ui 1.103.0 → 1.103.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +40 -40
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css +2 -0
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css.map +1 -0
- package/dist/public/build/css/{main.d1987746.css → main.23e8d0fd.css} +2 -2
- package/dist/public/build/css/main.23e8d0fd.css.map +1 -0
- package/dist/public/build/js/6157.6786c942.chunk.js +2 -0
- package/dist/public/build/js/6157.6786c942.chunk.js.map +1 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js +2 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js.map +1 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js +2 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js.map +1 -0
- package/dist/public/build/js/{accounts.aaa21eca.chunk.js → accounts.f328f823.chunk.js} +2 -2
- package/dist/public/build/js/accounts.f328f823.chunk.js.map +1 -0
- package/dist/public/build/js/acl.556f2525.chunk.js +2 -0
- package/dist/public/build/js/acl.556f2525.chunk.js.map +1 -0
- package/dist/public/build/js/{bundles.b851f32c.chunk.js → bundles.0ab2d6f4.chunk.js} +2 -2
- package/dist/public/build/js/{bundles.b851f32c.chunk.js.map → bundles.0ab2d6f4.chunk.js.map} +1 -1
- package/dist/public/build/js/cluster-page-wrapper.a5c05070.chunk.js +2 -0
- package/dist/public/build/js/{cluster-page-wrapper.45436df6.chunk.js.map → cluster-page-wrapper.a5c05070.chunk.js.map} +1 -1
- package/dist/public/build/js/dashboard.efdd63a2.chunk.js +3 -0
- package/dist/public/build/js/{dashboard.234b8062.chunk.js.map → dashboard.efdd63a2.chunk.js.map} +1 -1
- package/dist/public/build/js/main.a89bac74.js +3 -0
- package/dist/public/build/js/main.a89bac74.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js → navigation-flow.1d83e216.chunk.js} +2 -2
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js.map → navigation-flow.1d83e216.chunk.js.map} +1 -1
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js → navigation.0aff5a3a.chunk.js} +2 -2
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js.map → navigation.0aff5a3a.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js → query-tracker.b7334a6f.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js.map → query-tracker.b7334a6f.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.8a460b23.js → runtime.d583e98e.js} +2 -2
- package/dist/public/build/js/{runtime.8a460b23.js.map → runtime.d583e98e.js.map} +1 -1
- package/dist/public/build/js/users.aec1e380.chunk.js +2 -0
- package/dist/public/build/js/users.aec1e380.chunk.js.map +1 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js +3 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +34 -34
- package/package.json +4 -3
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css +0 -2
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css.map +0 -1
- package/dist/public/build/css/main.d1987746.css.map +0 -1
- package/dist/public/build/js/2009.8121a60e.chunk.js +0 -2
- package/dist/public/build/js/2009.8121a60e.chunk.js.map +0 -1
- package/dist/public/build/js/6157.92170346.chunk.js +0 -2
- package/dist/public/build/js/6157.92170346.chunk.js.map +0 -1
- package/dist/public/build/js/6960.8b7e01c6.chunk.js +0 -2
- package/dist/public/build/js/6960.8b7e01c6.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.aaa21eca.chunk.js.map +0 -1
- package/dist/public/build/js/acl.1ad3d494.chunk.js +0 -2
- package/dist/public/build/js/acl.1ad3d494.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.45436df6.chunk.js +0 -2
- package/dist/public/build/js/dashboard.234b8062.chunk.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js.map +0 -1
- package/dist/public/build/js/users.a0dc610f.chunk.js +0 -2
- package/dist/public/build/js/users.a0dc610f.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js +0 -3
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js.map +0 -1
- /package/dist/public/build/js/{dashboard.234b8062.chunk.js.LICENSE.txt → dashboard.efdd63a2.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.aa6a17d8.js.LICENSE.txt → main.a89bac74.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{yt-df-dialog.acab4eb0.chunk.js.LICENSE.txt → yt-df-dialog.1d05b0a5.chunk.js.LICENSE.txt} +0 -0
package/dist/public/build/js/{bundles.b851f32c.chunk.js.map → bundles.0ab2d6f4.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js/bundles.b851f32c.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/bars-descending-align-left.svg","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/types.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/Progress.js","webpack://@ytsaurus/ui/./src/ui/containers/Host/Host.tsx","webpack://@ytsaurus/ui/./src/ui/utils/cypress-attributes.ts","webpack://@ytsaurus/ui/./src/ui/components/Health/Health.tsx","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/./src/ui/components/Breadcrumbs/Breadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/PageCounter/PageCounter.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColumnHeader/ColumnHeader.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/components/build/esm/components/utils/cn.js","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/pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList.tsx","webpack://@ytsaurus/ui/./src/ui/containers/WaitForFont/WaitForFont.tsx","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.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/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/bundle/BundleGeneralMeta.tsx","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/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/common/hammer/validate-number.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/components/ColorCircle/ColorCircle.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useResizeObserver/useResizeObserver.js"],"sourcesContent":["import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:attributes-button', {en, ru});\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\nimport i18n from './i18n';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: i18n('tooltip-content')},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","const SvgBarsDescendingAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1 3.25a.75.75 0 0 1 .75-.75h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 3.25M1 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 1 8m.75 4a.75.75 0 0 0 0 1.5h2.5a.75.75 0 0 0 0-1.5z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgBarsDescendingAlignLeft;","import { block } from '../utils/cn';\nexport const progressBlock = block('progress');\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { progressBlock } from './constants';\nexport function ProgressInnerText(props) {\n const { text, offset = 0 } = props;\n if (!text) {\n return null;\n }\n return (_jsx(\"div\", { className: progressBlock('text-inner'), style: { transform: `translateX(calc(var(--g-flow-direction) * ${-offset}%))` }, children: text }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\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 (_jsx(\"div\", { className: progressBlock('item', modifiers, className), style: { width: `${value}%`, backgroundColor: color }, title: title, children: 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 { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\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 (_jsxs(\"div\", { className: progressBlock('stack', stackClassName), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` }, children: [_jsx(\"div\", { className: progressBlock('item'), style: { width: `${-offset}%` } }), stack.map((item, index) => (_jsx(ProgressStackItem, { item: item }, index))), _jsx(ProgressInnerText, { offset: offset, text: text })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\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 (_jsx(\"div\", { className: progressBlock('item', { theme: getTheme(props), loading }), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` }, children: _jsx(ProgressInnerText, { offset: offset, text: text }) }));\n}\n","export function isProgressWithStack(props) {\n return props.stack !== undefined;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as 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 (_jsxs(\"div\", { ref: ref, className: progressBlock({ size }, className), \"data-qa\": qa, children: [_jsx(\"div\", { className: progressBlock('text'), children: text }), isProgressWithStack(resolvedProps) ? (_jsx(ProgressWithStack, Object.assign({}, resolvedProps))) : (_jsx(ProgressWithValue, Object.assign({}, resolvedProps)))] }));\n});\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {getCluster} from '../../store/selectors/global';\nimport Link from '../../components/Link/Link';\nimport ClipboardButton from '../../components/ClipboardButton/ClipboardButton';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {uiSettings} from '../../config/ui-settings';\nimport {makeRegexpFromSettings} from '../../../shared/utils';\n\nimport './Host.scss';\n\nconst reShortName = makeRegexpFromSettings(uiSettings.reShortNameFromAddress);\nconst reTabletNodeShortName = makeRegexpFromSettings(uiSettings.reShortNameFromTabletNodeAddress);\n\nexport function calcShortNameByRegExp(address: string, asTabletNode?: boolean) {\n const re = asTabletNode ? reTabletNodeShortName : reShortName;\n if (re) {\n const res = re?.exec(address);\n if (res?.groups?.shortname) {\n return [res.groups.shortname, res.groups.suffix].filter(Boolean).join('');\n }\n }\n return undefined;\n}\n\nconst block = cn('yt-host');\n\ninterface Props {\n address: string;\n className?: string;\n copyBtnClassName?: string;\n onClick?: () => void;\n useText?: boolean;\n prefix?: React.ReactNode;\n asTabletNode?: boolean;\n inlineMargins?: boolean;\n}\n\nexport function Host({\n address = '',\n prefix,\n className,\n copyBtnClassName,\n onClick,\n useText,\n asTabletNode,\n inlineMargins,\n}: Props) {\n const host = React.useMemo(() => {\n return calcShortNameByRegExp(address, asTabletNode) || address;\n }, [address, asTabletNode]);\n\n const cluster = useSelector(getCluster);\n\n return (\n <span\n className={block(\n {hidden: !host, 'inline-margins': inlineMargins},\n ['elements-monospace', className].filter(Boolean).join(' '),\n )}\n onClick={onClick}\n >\n {prefix}\n <Tooltip className={block('tooltip')} content={address}>\n {useText ? (\n host\n ) : (\n <Link url={`/${cluster}/components/nodes/${address}`} routed>\n {host}\n </Link>\n )}\n </Tooltip>\n <span className={block('copy-btn', copyBtnClassName)}>\n <ClipboardButton view={'flat-secondary'} text={address} />\n </span>\n </span>\n );\n}\n","import cloneDeep_ from 'lodash/cloneDeep';\nimport forEach_ from 'lodash/forEach';\nimport isEqual_ from 'lodash/isEqual';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {SELECT_EMPTY_VALUE} from '../constants/navigation/modals/create-table';\nimport {SelectWithSubItemsProps} from '../components/Dialog/controls/SelectWithSubItems/SelectWithSubItems';\nimport {wrapBatchPromise} from './utils';\nimport {YTApiId, ytApiV3Id} from '../rum/rum-wrap-api';\nimport {BatchSubRequest, GetParams} from '../../shared/yt-types';\nimport {ValueOf} from '../../@types/types';\n\nexport interface WithAttrs<T> {\n $attributes: T;\n}\n\nexport const compressionExtras: Pick<SelectWithSubItemsProps, 'labels' | 'items' | 'subItemsMap'> =\n {\n labels: ['codec:', 'level:'],\n items: [\n ...[\n 'none',\n 'snappy',\n 'zlib_',\n 'lz4',\n 'lz4_high_compression',\n 'quick_lz',\n 'zstd_',\n 'brotli_',\n 'lzma_',\n 'bzip2_',\n ].map((value) => ({value, content: value})),\n ],\n subItemsMap: {\n zlib_: genComperessionLevelItems(1, 9),\n zstd_: genComperessionLevelItems(1, 21),\n brotli_: genComperessionLevelItems(1, 11),\n lzma_: genComperessionLevelItems(0, 9),\n bzip2_: genComperessionLevelItems(1, 9),\n },\n };\n\nfunction genComperessionLevelItems(from: number, to: number) {\n const res = [];\n for (let i = from; i <= to; ++i) {\n res.push({value: String(i), content: String(i)});\n }\n return res;\n}\n\nexport function compressionCodecValueFromString(value: string) {\n if (!value) {\n return [SELECT_EMPTY_VALUE];\n }\n\n for (const k in compressionExtras.subItemsMap) {\n if (value.startsWith(k)) {\n return [k, value.substr(k.length)];\n }\n }\n return [value];\n}\n\nexport function compressionCodecValueToString(value: Array<string>) {\n if (isEqual_(value, [SELECT_EMPTY_VALUE])) {\n return '';\n }\n return value?.join('');\n}\n\ntype StorageOptionsType = 'replication' | 'erasure';\n\nexport const StorageOptions = {\n REPLICATION: 'replication' as StorageOptionsType,\n ERASURE: 'erasure' as StorageOptionsType,\n};\n\nexport const ERASURE_CODECS = [\n {value: 'lrc_12_2_2', title: 'lrc_12_2_2 (recommended)'},\n {value: 'reed_solomon_6_3', title: 'reed_solomon_6_3'},\n];\n\nexport function storageOptionFromErasureCodec(codec: string) {\n return !codec || codec === 'none' ? StorageOptions.REPLICATION : StorageOptions.ERASURE;\n}\n\nexport function normalizeErasureCodec(erasureCodec: string) {\n return !erasureCodec || erasureCodec === 'none' ? ERASURE_CODECS[0].value : erasureCodec;\n}\n\nexport function erasureCodecFromStorageOption(type?: StorageOptionsType, erasureCodec?: string) {\n if (type === StorageOptions.REPLICATION) {\n return 'none';\n }\n return erasureCodec || ERASURE_CODECS[0].value;\n}\n\nexport type InMemoryModeType = ValueOf<typeof InMemoryMode>;\n\nexport const InMemoryMode = {\n NONE: 'none',\n COMPRESSED: 'compressed',\n UNCOMPRESSED: 'uncompressed',\n} as const;\n\nexport function makeUiMarker(ui_marker: string) {\n return {ui_marker};\n}\n\nexport function prepareSetCommandForBatch(path: string, value: any, additionalParameters?: object) {\n if (value === undefined || value === null) {\n return {\n command: 'remove' as const,\n parameters: {\n path,\n ...additionalParameters,\n },\n };\n }\n\n return {\n command: 'set' as const,\n parameters: {\n path,\n ...additionalParameters,\n force: true,\n },\n input: value,\n };\n}\n\nexport const CypressNodeTypes = {\n REPLICATED_TABLE: 'replicated_table',\n REPLICATION_LOG_TABLE: 'replication_log_table',\n CHAOS_REPLICATED_TABLE: 'chaos_replicated_table',\n MAP_NODE: 'map_node',\n TABLE: 'table',\n // TODO: add more types\n};\n\nexport async function createParentsBeforeSet(nodePath: string, attributesToSet: Array<string>) {\n if (!attributesToSet.length) {\n return Promise.resolve();\n }\n\n const parentPaths: Record<string, boolean> = {};\n forEach_(attributesToSet, (attr) => {\n const parents = attr.split('/');\n for (let i = 1; i < parents.length; ++i) {\n const key = parents.slice(0, i).join('/');\n if (key) {\n parentPaths[key] = true;\n }\n }\n });\n const toCreate = Object.keys(parentPaths).sort();\n\n for (const attr of toCreate) {\n const path = nodePath + '/@' + attr;\n await yt.v3.exists({path}).then((isCreated: boolean) => {\n if (!isCreated) {\n return yt.v3.set({path}, {});\n }\n });\n }\n}\n\nexport function updateNodeAttributes(\n nodePath: string,\n changes: Array<{attr: string; value: any}>,\n): Promise<unknown> {\n if (isEmpty_(changes)) {\n return Promise.resolve();\n }\n\n const requests: Array<BatchSubRequest> = [];\n\n const oneLevelDiffsParents: Array<string> = [];\n const oneLevelDiffs: Record<string, Record<string, unknown>> = {};\n forEach_(changes, ({attr, value}) => {\n const attrPath = attr.split('/');\n if (attrPath.length === 1) {\n const path = nodePath + '/@' + attrPath.join('/');\n requests.push(prepareSetCommandForBatch(path, value));\n } else {\n const [last] = attrPath.splice(attrPath.length - 1, 1);\n const parentPath = attrPath.join('/');\n oneLevelDiffsParents.push(parentPath);\n const path = nodePath + '/@' + parentPath;\n const diff = (oneLevelDiffs[path] = oneLevelDiffs[path] || {});\n diff[last] = value;\n }\n });\n\n return Promise.all([\n ...(requests.length\n ? [\n wrapBatchPromise(\n ytApiV3Id.executeBatch(YTApiId.updateNodeAttributes, {requests}),\n 'Failed to update node attributes',\n ),\n ]\n : []),\n createParentsBeforeSet(nodePath, oneLevelDiffsParents).then(() => {\n if (isEmpty_(oneLevelDiffs)) {\n return Promise.resolve([]);\n }\n\n const promises: Array<Promise<unknown>> = map_(oneLevelDiffs, async (diff, path) => {\n const p = updateAttributes(path, diff);\n await p;\n return p;\n });\n\n return Promise.all(promises);\n }),\n ]);\n}\n\nfunction updateAttributes(path: string, oneLevelDiff: Record<'string', unknown>) {\n if (isEmpty_(oneLevelDiff)) {\n return Promise.resolve();\n }\n\n const modifyGuarantee = (data: any = {}) => {\n const res = cloneDeep_(data);\n forEach_(oneLevelDiff, (value, key) => {\n if (value === undefined) {\n delete res[key];\n } else {\n res[key] = value;\n }\n });\n if (isEqual_(data, res)) {\n return Promise.resolve();\n }\n return yt.v3.set({path}, res);\n };\n\n return yt.v3.exists({path}).then((isExists: boolean) => {\n if (isExists) {\n return ytApiV3Id.get(YTApiId.updateAttributes, {path}).then(modifyGuarantee);\n }\n return modifyGuarantee({});\n });\n}\n\nexport function makeBatchSubRequest<T extends BatchSubRequest>(\n command: T['command'],\n parameters: T['parameters'],\n setup?: T['setup'],\n) {\n return {\n command,\n parameters,\n setup,\n } as BatchSubRequest;\n}\n\nexport function prepareAttributes(attributes: readonly string[]): GetParams['attributes'] {\n const [keys, paths] = partition_(attributes, (k) => -1 === k.indexOf('/'));\n\n if (!paths.length) {\n return keys;\n }\n\n return {keys, paths};\n}\n","import React from 'react';\n\nimport hammer from '../../common/hammer';\n\nimport Label, {LabelTheme} from '../../components/Label/Label';\n\nimport {YTHealth} from '../../types';\n\nimport {StrawberryCliqueHealthType} from '../../utils/strawberryControllerApi';\n\nconst HEALTH_TO_THEME: {[health: string]: LabelTheme} = {\n good: 'success',\n initializing: 'warning',\n degrading: 'warning',\n failed: 'danger',\n changing: 'info',\n pending: 'info',\n};\n\nexport function Health(props: {value?: YTHealth | StrawberryCliqueHealthType; 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","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 { jsx as _jsx } from \"react/jsx-runtime\";\nimport { filterDOMProps } from '../../utils/filterDOMProps';\nimport { b, shouldClientNavigate } from './utils';\nexport function BreadcrumbItem(props) {\n var _a;\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) {\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;\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'] = (_a = props['aria-current']) !== null && _a !== void 0 ? _a : 'page';\n }\n if (props.itemType === 'menu') {\n linkProps = {};\n }\n return (_jsx(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 }), children: props.children })));\n}\nBreadcrumbItem.displayName = 'Breadcrumbs.Item';\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { b } from './utils';\nexport function BreadcrumbsSeparator({ separator }) {\n return (_jsx(\"div\", { \"aria-hidden\": true, className: b('divider'), children: separator !== null && separator !== void 0 ? separator : '/' }));\n}\nBreadcrumbsSeparator.displayName = 'Breadcrumbs.Separator';\n","import { addComponentKeysets } from '../../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'lab/Breadcrumbs';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","'use client';\nimport { createElement as _createElement } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as 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 = (_jsx(BreadcrumbItem, { itemType: \"menu\", children: _jsx(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 }) => (_jsx(Button, { title: i18n('label_more'), className: b('more-button'), onClick: onClick, size: \"s\", view: \"flat\", disabled: props.disabled, children: _jsx(Button.Icon, { children: \"...\" }) })) }) }));\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 (_jsxs(\"li\", { className: b('item', { calculating: !calculated }), children: [_createElement(BreadcrumbItem, Object.assign({}, child.props, { key: key, current: isCurrent, disabled: props.disabled || child.props.disabled, onAction: handleAction, navigate: navigate }), child.props.children), isCurrent ? null : _jsx(BreadcrumbsSeparator, { separator: props.separator })] }, index));\n });\n return (_jsx(\"ol\", Object.assign({ ref: containerRef }, filterDOMProps(props, { labelable: true }), { \"data-qa\": props.qa, className: b(null, props.className), style: props.style, children: breadcrumbItems })));\n});\nBreadcrumbs.Item = Item;\nBreadcrumbs.displayName = 'Breadcrumbs';\nexport { Item as BreadcrumbsItem };\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 cn from 'bem-cn-lite';\n\nconst block = cn('yt-page-counter');\n\nexport interface PageCounterProps {\n className?: string;\n pageIndex?: number;\n pageCount?: number;\n}\n\nfunction PageCounter({pageIndex, pageCount, className}: PageCounterProps) {\n if (pageIndex === undefined || pageCount === undefined) {\n return null;\n }\n\n return pageCount! > 1 ? (\n <span className={block(null, className)}>\n Page: {(pageIndex || 0) + 1} / {pageCount}\n </span>\n ) : null;\n}\n\nexport default React.memo(PageCounter);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport capitalize_ from 'lodash/capitalize';\n\nimport barsDescendingSvg from '@gravity-ui/icons/svgs/bars-descending-align-left.svg';\nimport {Button, DropdownMenu, Icon, Text} from '@gravity-ui/uikit';\n\nimport SortIcon from '../../components/SortIcon/SortIcon';\n\nimport {OrderType, calculateNextOrderValue, nextSortOrderValue} from '../../utils/sort-helpers';\nimport PageCounter, {PageCounterProps} from '../../components/PageCounter/PageCounter';\nimport Loader from '../../components/Loader/Loader';\nimport {rumLogError} from '../../rum/rum-counter';\n\nimport './ColumnHeader.scss';\n\nconst block = cn('column-header');\n\nexport type ColumnInfo<T> = {\n column: T;\n title?: string;\n shortTitle?: string;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n allowUnordered?: boolean;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n withUndefined?: boolean;\n allowedOrderTypes?: Array<OrderType>;\n};\n\nexport type HasSortColumn<T> =\n | (ColumnInfo<T> & {options?: undefined})\n | ({\n title: string;\n shortTitle?: string;\n column: T;\n options: Array<ColumnInfo<T>>;\n } & Partial<Record<keyof Omit<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>, undefined>>);\n\nexport type ColumnHeaderProps<T extends string = string> = PageCounterProps &\n HasSortColumn<T> & {\n className?: string;\n order?: OrderType;\n multisortIndex?: number;\n onSort?: (\n column: T,\n nextOrder: OrderType,\n options: {currentOrder?: OrderType; multisort?: boolean},\n ) => void;\n\n loading?: boolean;\n\n align?: 'center' | 'left' | 'right';\n };\n\ntype NameTitleContent = {\n nameContent: string;\n titleContent: string;\n};\n\nfunction getNameTitle<T extends string>({\n column,\n title,\n shortTitle,\n}: Pick<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>): NameTitleContent {\n const t = title ?? capitalize_(column);\n const nameContent = !shortTitle ? t : shortTitle;\n return {nameContent, titleContent: t};\n}\n\nfunction useColumnInfo<T extends string = string>(\n props: ColumnHeaderProps<T>,\n): ColumnInfo<T> & NameTitleContent & {subColumn?: NameTitleContent} {\n if (props.options === undefined) {\n const {column, allowUnordered, withUndefined, title, shortTitle, allowedOrderTypes} = props;\n return {\n column,\n allowUnordered,\n withUndefined,\n allowedOrderTypes,\n ...getNameTitle({column, title, shortTitle}),\n };\n }\n\n const {column: value, options, title, shortTitle} = props;\n const columnData = options.find(({column}) => value === column)!;\n if (!columnData) {\n rumLogError({\n message: 'Unexpected behavior: missing value in ColumnHeader.props.options',\n additional: props,\n });\n }\n return {\n subColumn: getNameTitle({...columnData}),\n ...columnData,\n ...getNameTitle({column: '', title, shortTitle}),\n };\n}\n\nexport default function ColumnHeader<T extends string = string>(props: ColumnHeaderProps<T>) {\n const {className, align, order, onSort, multisortIndex, loading, pageIndex, pageCount} = props;\n const {\n column,\n allowUnordered,\n withUndefined,\n nameContent,\n titleContent,\n allowedOrderTypes,\n subColumn,\n } = useColumnInfo(props);\n\n const changeHandler = React.useCallback(\n (e: React.MouseEvent) => {\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort?.(column, nextOrder, {\n currentOrder: order,\n multisort: e.ctrlKey || e.metaKey,\n });\n },\n [column, order, onSort, allowUnordered, allowedOrderTypes, withUndefined],\n );\n\n const sortable = Boolean(onSort);\n\n return (\n <div className={block(null, className)}>\n <div\n className={block('label-icon', {sortable, align})}\n onClick={sortable ? changeHandler : undefined}\n >\n <span className={block('label')} title={titleContent}>\n {nameContent}\n </span>\n {sortable && (\n <span className={block('icon')}>\n <SortIcon order={order} />\n </span>\n )}\n {multisortIndex !== undefined && (\n <span className={block('multisort')}>\n <sup>{multisortIndex}</sup>\n </span>\n )}\n {Boolean(order) && Boolean(subColumn) && (\n <Text\n className={block('label', {'sub-column': true})}\n variant=\"caption-2\"\n title={subColumn?.titleContent}\n color=\"dark-secondary\"\n >\n {subColumn?.nameContent}\n </Text>\n )}\n </div>\n <SubColumnSelector options={props.options} order={order} onSort={onSort} />\n {loading !== undefined && (\n <div className={block('loader')}>\n <Loader visible={loading} />\n </div>\n )}\n {Boolean(pageCount) && (\n <PageCounter\n className={block('page-counter')}\n pageIndex={pageIndex}\n pageCount={pageCount}\n />\n )}\n </div>\n );\n}\n\nfunction SubColumnSelector<T extends string>({\n order,\n options,\n onSort,\n}: Pick<ColumnHeaderProps<T>, 'onSort'> & {\n order?: ColumnHeaderProps<T>['order'];\n options?: Array<ColumnInfo<T>>;\n}) {\n return !options ? null : (\n <DropdownMenu\n items={options.map((x) => {\n const {titleContent} = getNameTitle(x);\n return {\n text: titleContent,\n action() {\n if (!onSort) {\n return;\n }\n const {column, allowUnordered, withUndefined, allowedOrderTypes} = x;\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort(column, nextOrder, {\n currentOrder: order,\n });\n },\n };\n })}\n renderSwitcher={({onClick}) => (\n <Button onClick={onClick} view=\"flat\" size=\"xs\">\n <Icon size={12} data={barsDescendingSvg} />\n </Button>\n )}\n />\n );\n}\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:chart-link', {en, ru});\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\nimport i18n from './i18n';\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\n className={className}\n target=\"_blank\"\n theme={theme}\n url={url}\n title={title ?? i18n('View')}\n >\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\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","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, {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 {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, {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","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 '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';\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 '../../../components/Health/Health';\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\n hideToolbarShadow\n toolbar={<CellsInstruments />}\n content={<CellsTable />}\n />\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 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.078.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.325.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.54.54 0 0 0 .075-.312c0-.3-.244-.641-.84-.641a1 1 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 0 1-1.5 0c0-.674.345-1.22.78-1.577M8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2\", 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';\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 AccountLink from '../../accounts/AccountLink';\nimport {Health} from '../../../components/Health/Health';\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\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: '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 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 {Health} from '../../../components/Health/Health';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport {BundleBalancerValue} 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 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_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 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_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 '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 hideToolbarShadow\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';\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 '../../../components/Health/Health';\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 \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 \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 hideToolbarShadow\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 'query',\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 query: 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 query: memory_limits?.query || 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\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, net_bytes, vcpu, memory} = itemData.resource_guarantee;\n return {\n id: type,\n type,\n memory: hammer.format['Bytes'](memory),\n net: hammer.format['BytesPerSecond'](net_bytes ? net_bytes : net / 8),\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 addToChange('@bundle_controller_target_config/memory_limits/query', 'memory_limits.query');\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","/**\n * Validates a number against various constraints\n * @param constraints Object containing constraints: ge (>=), le (<=), gt (>), lt (<)\n * @param v The number to validate\n * @returns Error message if validation fails, undefined otherwise\n */\nexport function validateNumber(\n {\n ge,\n le,\n gt,\n lt,\n allowParse,\n }: {ge?: number; le?: number; lt?: number; gt?: number; allowParse?: boolean},\n value?: number | string,\n): string | undefined {\n const v = valueOrParsed(value, allowParse);\n\n if (v === undefined || !Number.isFinite(v)) {\n return 'Incorrect value';\n }\n\n if (ge !== undefined && !(v >= ge)) {\n return `The value must be \\u2265 ${ge}`;\n }\n\n if (le !== undefined && !(v <= le)) {\n return `The value must be \\u2264 ${le}`;\n }\n\n if (gt !== undefined && !(v > gt)) {\n return `The value must be > ${gt}`;\n }\n\n if (lt !== undefined && !(v < lt)) {\n return `The value must be < ${lt}`;\n }\n\n return undefined;\n}\n\nfunction valueOrParsed(v?: number | string, allowParse?: boolean): number {\n if (Number.isFinite(v) || !allowParse) {\n return v as number;\n }\n\n if (v === null || v === '') {\n return NaN;\n } else {\n return Number(v);\n }\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';\nimport {getQueryMemoryLimitIsSupported} from '../../../../store/selectors/global/supported-features';\nimport {validateNumber} from '../../../../common/hammer/validate-number';\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 query?: 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 const queryMemoryLimitIsSupported = useSelector(getQueryMemoryLimitIsSupported);\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 if (queryMemoryLimitIsSupported) {\n renderMemoryTab.fields.push({\n name: 'query',\n type: 'bundle-input',\n caption: 'Query memory limit',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\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: validateNumber.bind(null, {gt: 0}),\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: validateNumber.bind(null, {gt: 0}),\n },\n {\n name: 'write_thread_pool_size',\n type: 'bundle-input',\n caption: 'Tablet cells per node',\n warning:\n 'Changing tablet cell count is discouraged. Do not modify this parameter unless you understand what you are doing',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: validateNumber.bind(null, {gt: 0}),\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 '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 hideToolbarShadow\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 {Progress} from '@gravity-ui/uikit';\nimport {DialogWrapper as Dialog} from '../../../../components/DialogWrapper/DialogWrapper';\n\nimport hammer from '../../../../common/hammer';\nimport ypath from '../../../../common/thor/ypath';\nimport Button from '../../../../components/Button/Button';\nimport {YTErrorBlock} 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 && <YTErrorBlock 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\n hideToolbarShadow\n toolbar={<CellsInstruments />}\n content={<CellsTable />}\n />\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 {YTErrorBlock} 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 && <YTErrorBlock 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 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 * as React from 'react';\nexport function useResizeObserver({ ref, onResize, box, }) {\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, { box });\n return () => {\n observer.disconnect();\n };\n }, [ref, onResize, box]);\n}\n"],"names":["addI18Keysets","en","ru","connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","i18n","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","props","xmlns","fill","viewBox","children","fillRule","d","clipRule","progressBlock","ProgressInnerText","text","offset","className","style","transform","ProgressStackItem","item","value","color","theme","loading","modifiers","Number","isFinite","width","backgroundColor","getOffset","getTheme","colorStops","colorStopsValue","matchingColorStopItem","find","index","currentValue","minValue","stop","maxValue","length","ProgressWithStack","stack","stackClassName","reduce","sum","getValueFromStack","map","ProgressWithValue","isProgressWithStack","undefined","Progress","ref","size","qa","resolvedProps","Object","assign","reShortName","makeRegexpFromSettings","uiSettings","reShortNameFromAddress","reTabletNodeShortName","reShortNameFromTabletNodeAddress","block","cn","Host","_ref$address","address","prefix","copyBtnClassName","useText","asTabletNode","inlineMargins","host","React","re","_res$groups","res","exec","groups","shortname","suffix","filter","Boolean","join","calcShortNameByRegExp","cluster","useSelector","getCluster","_jsxs","hidden","Tooltip","Link","url","concat","routed","ClipboardButton","view","compressionExtras","labels","items","_toConsumableArray","subItemsMap","zlib_","genComperessionLevelItems","zstd_","brotli_","lzma_","bzip2_","from","to","i","push","String","compressionCodecValueFromString","SELECT_EMPTY_VALUE","k","startsWith","substr","compressionCodecValueToString","isEqual_","StorageOptions","REPLICATION","ERASURE","ERASURE_CODECS","storageOptionFromErasureCodec","codec","normalizeErasureCodec","erasureCodec","erasureCodecFromStorageOption","type","InMemoryMode","NONE","COMPRESSED","UNCOMPRESSED","makeUiMarker","ui_marker","prepareSetCommandForBatch","additionalParameters","command","parameters","force","input","CypressNodeTypes","REPLICATED_TABLE","REPLICATION_LOG_TABLE","CHAOS_REPLICATED_TABLE","MAP_NODE","TABLE","createParentsBeforeSet","_x","_x2","_createParentsBeforeSet","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","nodePath","attributesToSet","parentPaths","toCreate","_iterator","_step","_loop","wrap","_context3","prev","next","abrupt","Promise","resolve","forEach_","attr","parents","split","key","slice","keys","sort","_createForOfIteratorHelper","_context2","yt","exists","then","isCreated","set","s","n","done","delegateYield","t1","e","f","finish","updateNodeAttributes","changes","isEmpty_","requests","oneLevelDiffsParents","oneLevelDiffs","attrPath","_attrPath$splice","splice","last","_slicedToArray","parentPath","all","wrapBatchPromise","ytApiV3Id","executeBatch","YTApiId","promises","map_","_ref2","_callee","diff","p","_context","updateAttributes","_x3","_x4","oneLevelDiff","modifyGuarantee","data","cloneDeep_","isExists","get","makeBatchSubRequest","setup","prepareAttributes","_partition_","partition_","indexOf","_partition_2","paths","HEALTH_TO_THEME","good","initializing","degrading","failed","changing","pending","Health","Label","hammer","format","NO_VALUE","shouldClientNavigate","link","target","getAttribute","href","origin","location","hasAttribute","metaKey","ctrlKey","altKey","shiftKey","b","BreadcrumbItem","_a","Element","domProps","filterDOMProps","labelable","handleAction","event","disabled","preventDefault","onAction","currentTarget","navigate","HTMLAnchorElement","isDefaultPrevented","routerOptions","isDisabled","linkProps","hrefLang","rel","download","ping","referrerPolicy","role","tabIndex","onKeyDown","current","itemType","BreadcrumbsSeparator","separator","displayName","addComponentKeysets","Item","_props","listRef","containerRef","useForkRef","forEach","child","visibleItemsCount","setVisibleItemsCount","calculated","setCalculated","handleResize","useResizeObserver","onResize","lastChildren","visibleItems","list","listItems","Array","containerWidth","offsetWidth","newVisibleItemsCount","calculatedWidth","maxItems","Infinity","rootWidth","showRoot","shift","scrollWidth","lastItem","pop","Math","min","max","recalculate","contents","breadcrumbs","endItems","rootItem","hiddenItems","menuItem","DropdownMenu","el","action","popupProps","staircase","popupStyle","popupPlacement","renderSwitcher","Button","Icon","lastIndex","breadcrumbItems","isCurrent","calculating","Breadcrumbs","UBreadcrumbs","PageCounter","pageIndex","pageCount","getNameTitle","column","shortTitle","t","capitalize_","nameContent","titleContent","ColumnHeader","align","order","onSort","multisortIndex","_useColumnInfo","options","allowUnordered","withUndefined","allowedOrderTypes","columnData","rumLogError","message","additional","subColumn","useColumnInfo","changeHandler","nextOrder","calculateNextOrderValue","nextSortOrderValue","currentOrder","multisort","sortable","SortIcon","Text","variant","SubColumnSelector","Loader","visible","_ref3","x","_ref4","barsDescendingSvg","ChartLink","hideIcon","face","wrapContent","icon","awesome","NAMESPACE","withNaming","m","v","Info","infoIcon","BundleParamsList","params","_ref$size","param","postfix","WaitForFont","_useSelector","getFontFamilies","regular","monospace","_React$useState","_React$useState2","ready","setReady","waitForFontFamily","Favourites","_Component","_this","_classCallCheck","_len","args","_key","_callSuper","state","isActive","toggleActive","onToggle","setState","prevState","onItemClick","_inherits","_createClass","_this2","this","dropItems","switcher","renderButton","pin","empty","Hotkey","settings","handler","scope","buttonProps","themeProps","_this$props","toggleDisabled","clear","selected","renderDropDownMenu","renderHotkey","Component","PropTypes","_React$Component","CellsTableInstruments","onIdFilter","id","setTabletsPartial","cellsIdFilter","onBundleFilter","bundle","cellsBundleFilter","onHostFilterChange","hostFilter","onHostSelected","cellsHostFilter","onHostInputBlur","getBundleFilterItems","bundles","filter_","getHostFilterItems","hosts","idFilter","bundleFilter","activeBundle","activeBundleHosts","Toolbar","itemsToWrap","name","node","Filter","hasClear","placeholder","onChange","autofocus","shrinkable","growable","wrapperClassName","Suggest","_items","popupClassName","onTextUpdate","onBlur","autoFocus","buttonText","cancelHelper","CancelHelper","fetchTabletsBundles","dispatch","TABLETS_BUNDLES_LOAD_REQUEST","USE_MAX_SIZE","removeAllRequests","tabletCellBundles","cancellation","saveCancelToken","results","_results","_toArray","isBundleControllerSupported","output","_rest","cells","error","getBatchError","allCells","prepareTabletCells","allBundles","prepareBundles","zones","Map","has","getZones","getState","user","getCurrentUserName","makeCheckPermissionBatchSubRequestUI","permission","wrapApiPromiseByToaster","tabletBundlesCheckWrite","_splitBatchResults","splitBatchResults","outputs","writableByName","reduce_","acc","TABLETS_BUNDLES_PARTIAL","reject","toasterName","skipSuccessToast","errorTitle","fetchWritePermissions","bundleControllerZones","result","bundleDefaultConfig","entries","ypath","create","prepareBundleDefaultConfig","TABLETS_BUNDLES_LOAD_SUCCESS","isCancelled","TABLETS_BUNDLES_LOAD_FAILURE","setTabletsActiveBundle","bundlesTrackVisit","TABLETS_BUNDLES_ACTIVE_ACCOUNT","mapDispatchToProps","getTabletsActiveBundle","getTabletsCellsHostsOfActiveBundle","getTabletsCellsIdFilter","getTabletsCellsBundleFilter","getTabletsCellsHostFilter","getTabletsCellsBundles","getTabletsCellsHosts","STATE_THEME","leading","none","elections","leader_recovery","TABLE_SETTINGS","displayIndices","stickyHead","DataTable","MOVING","stickyTop","STICKY_TOOLBAR_BOTTOM","syncHeadOnResize","dynamicRender","COLUMN_TITLE","uncompressed","compressed","peerAddress","actions","HoverAction","wrapCell","renderCell","CellsTable","_len2","_key2","renderColumnHeader","col","_COLUMN_TITLE$col","_this$props$sortState","sortState","isSorted","onColumnSort","cellsSort","renderId","row","renderBundle","activeBundleLink","renderState","_data$row","capitalize","renderActions","_this$props2","attributesPath","cellNavigationLink","ClickableAttributesButton","colName","health","_data$row2","toLocaleLowerCase","header","columns","Columns","call","_this$props3","loaded","DataTableYT","sortableColumn","render","renderHealth","tablets","renderNumber","bind","memory","renderBytes","renderHost","getTabletsIsLoading","getTabletsIsLoaded","getTabletsCellsSorted","getTabletsCellsSortState","tabletActiveBundleLink","tabletAttributesPath","tabletCellNavigationLink","BundleCells","ErrorBoundary","WithStickyToolbar","hideToolbarShadow","toolbar","CellsInstruments","setChaosPartial","CHAOS_BUNDLES_PARTIAL","setChaosActiveBundle","CHAOS_BUNDLES_ACTIVE_ACCOUNT","height","HelpPopover","Popover","buttonRef","I","BundleBalancerValue","_props$value","blocking","success","BundleGeneralMeta","bundleData","getTabletsActiveBundleData","clusterUiConfig","getClusterUiConfig","allowTabletAccounting","getClusterUiConfigEnablePerBundleTabletAccounting","leftGroup","UIFactory","getExtraMetaTableItemsForBundle","tabletCells","enable_bundle_controller","node_tag_filter","rightGroup","renderResourceProgress","changelog_account","AccountLink","account","snapshot_account","MetaTable","resourceName","usage","getValue","limit","calcProgressProps","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","setBundlesSortState","has_tag","setActiveBundle","renderBundlesTableItemExtraControls","itemClassName","renderAccount","renderNodes","nodes","unique_node_tag","help_tooltip","delayClosing","allowPerBundleAccounting","bundleDashboardUrl","pathPrefix","showCellBundleEditor","writeableByName","_ref5","allowEdit","_ref8","_calcProgressProps","_data$row3","_calcProgressProps2","toLowerCase","columnName","total","footerData","renderTabletCountPercentage","renderTabletStaticMemoryPercentage","renderBC","fetchTabletCellBundleEditor","bundleName","TABLETS_BUNDLES_EDITOR_LOAD_REQUREST","toEdit","getTabletsBundles","defaultReservedMemoryLimit","getTabletsDefaultMemoryConfiguration","tabletCellBundlesEditData","_results$","bundleControllerIsUnavailable","code","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","allocated_rpc_proxies","errors","tabletCellBundlesInstancesDetails","nodesResults","keys_","instanceDetailsMap","_output","nanny_service","_output$","TABLETS_BUNDLES_EDITOR_PARTIAL","TABLETS_BUNDLES_EDITOR_LOAD_FAILURE","showTabletCellBundleEditor","visibleEditor","setBundleEditorController","bundlePath","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","NoContent","warning","hint","StatisticsComponent","getStatisticsComponentForBundle","BundleMonitorTab","BundleMonitor","component","tablet_cell_bundle","BundleAclTab","allowAcl","isPoolAclAllowed","BundleAcl","BundleMetaResourceProgress","resourceType","_ref$postfix","_getProgressData","trim","metaItems","formattedValue","getProgressBarColorByIndex","label","ColorCircle","marginRight","Readable","fraction","commonTooltip","getProgressData","DETAILS_KEYS","ActiveAccountBundleControllerUpdater","fetchFn","useUpdater","prevBundleControllerState","checkBundleControllerState","_yield$wrapApiPromise","_yield$wrapApiPromise2","_yield$wrapApiPromise3","alerts","inProgressCount","tabletBundleControllerState","sent","timeout","BundleConfigurationMeta","bundleControllerConfig","orchidData","getActiveBundleControllerData","bundleGroup","resource_quota","resource_allocated","allMemory","allVCPU","vcpu","allocMemory","allocVCPU","details","_getBundleStateData","detailsEntries","entries_","pick_","_ref6","_ref7","getBundleStateData","_ref9","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","visibleOnRowHover","_props$row$data","resource","formattedMemory","Bytes","formattedVcpu","vCores","_computeProgress","used","progress","computeProgress","getProgressTheme","hulkRequestPath","uuid","lastWord","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","query","threadPool_reset","lookup_thread_pool_size","query_thread_pool_size","write_thread_pool_size","getResourceData","source","getInitialFormValues","slug","changelogAccount","snapshotAccount","general","abc","info","createConfigurationList","itemData","_itemData$resource_gu","resource_guarantee","net","net_bytes","initialData","createParams","formatType","_hammer$format$format","_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","instanceCountValidate","number","getBundleControllerResource","defaultValues","_current$key","err","validateNumber","ge","le","gt","lt","allowParse","NaN","valueOrParsed","BundleEditorDialog","_initialValues$resour","getTabletCellBundleEditorState","queryMemoryLimitIsSupported","getQueryMemoryLimitIsSupported","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","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","currentAccLimit","tabletNode","_resources$rpc_proxy_","_resources$tablet_nod","requiredCpu","violatedResources","requiredMemory","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","_defineProperty","AccountsSuggestWithLoading","getChaosCellBundleEditorData","chaosCellBundleEditor","hideBundleEditor","attrs","console","log","chaosCellBundlesSetAttrs","activeTab","setActiveTab","Dialog","open","Header","Divider","Body","Tabs","layout","active","onTabChange","YTErrorBlock","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","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","_ref$marginRight","box","element","window","ResizeObserver","addEventListener","removeEventListener","observer","observe","disconnect"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"js/bundles.0ab2d6f4.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/bars-descending-align-left.svg","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/types.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Progress/Progress.js","webpack://@ytsaurus/ui/./src/ui/containers/Host/Host.tsx","webpack://@ytsaurus/ui/./src/ui/utils/cypress-attributes.ts","webpack://@ytsaurus/ui/./src/ui/components/Health/Health.tsx","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/./src/ui/components/Breadcrumbs/Breadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/PageCounter/PageCounter.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColumnHeader/ColumnHeader.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/components/build/esm/components/utils/cn.js","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/pages/tablet_cell_bundles/bundles/BundleEditorDialog/components/BundleParamsList/BundleParamsList.tsx","webpack://@ytsaurus/ui/./src/ui/containers/WaitForFont/WaitForFont.tsx","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.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/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/bundle/BundleGeneralMeta.tsx","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/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/common/hammer/validate-number.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/components/ColorCircle/ColorCircle.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useResizeObserver/useResizeObserver.js"],"sourcesContent":["import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:attributes-button', {en, ru});\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\nimport i18n from './i18n';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: i18n('tooltip-content')},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","const SvgBarsDescendingAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1 3.25a.75.75 0 0 1 .75-.75h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 3.25M1 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 1 8m.75 4a.75.75 0 0 0 0 1.5h2.5a.75.75 0 0 0 0-1.5z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgBarsDescendingAlignLeft;","import { block } from '../utils/cn';\nexport const progressBlock = block('progress');\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { progressBlock } from './constants';\nexport function ProgressInnerText(props) {\n const { text, offset = 0 } = props;\n if (!text) {\n return null;\n }\n return (_jsx(\"div\", { className: progressBlock('text-inner'), style: { transform: `translateX(calc(var(--g-flow-direction) * ${-offset}%))` }, children: text }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\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 (_jsx(\"div\", { className: progressBlock('item', modifiers, className), style: { width: `${value}%`, backgroundColor: color }, title: title, children: 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 { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\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 (_jsxs(\"div\", { className: progressBlock('stack', stackClassName), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` }, children: [_jsx(\"div\", { className: progressBlock('item'), style: { width: `${-offset}%` } }), stack.map((item, index) => (_jsx(ProgressStackItem, { item: item }, index))), _jsx(ProgressInnerText, { offset: offset, text: text })] }));\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\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 (_jsx(\"div\", { className: progressBlock('item', { theme: getTheme(props), loading }), style: { transform: `translateX(calc(var(--g-flow-direction) * ${offset}%))` }, children: _jsx(ProgressInnerText, { offset: offset, text: text }) }));\n}\n","export function isProgressWithStack(props) {\n return props.stack !== undefined;\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as 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 (_jsxs(\"div\", { ref: ref, className: progressBlock({ size }, className), \"data-qa\": qa, children: [_jsx(\"div\", { className: progressBlock('text'), children: text }), isProgressWithStack(resolvedProps) ? (_jsx(ProgressWithStack, Object.assign({}, resolvedProps))) : (_jsx(ProgressWithValue, Object.assign({}, resolvedProps)))] }));\n});\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {getCluster} from '../../store/selectors/global';\nimport Link from '../../components/Link/Link';\nimport ClipboardButton from '../../components/ClipboardButton/ClipboardButton';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {uiSettings} from '../../config/ui-settings';\nimport {makeRegexpFromSettings} from '../../../shared/utils';\n\nimport './Host.scss';\n\nconst reShortName = makeRegexpFromSettings(uiSettings.reShortNameFromAddress);\nconst reTabletNodeShortName = makeRegexpFromSettings(uiSettings.reShortNameFromTabletNodeAddress);\n\nexport function calcShortNameByRegExp(address: string, asTabletNode?: boolean) {\n const re = asTabletNode ? reTabletNodeShortName : reShortName;\n if (re) {\n const res = re?.exec(address);\n if (res?.groups?.shortname) {\n return [res.groups.shortname, res.groups.suffix].filter(Boolean).join('');\n }\n }\n return undefined;\n}\n\nconst block = cn('yt-host');\n\ninterface Props {\n address: string;\n className?: string;\n copyBtnClassName?: string;\n onClick?: () => void;\n useText?: boolean;\n prefix?: React.ReactNode;\n asTabletNode?: boolean;\n inlineMargins?: boolean;\n}\n\nexport function Host({\n address = '',\n prefix,\n className,\n copyBtnClassName,\n onClick,\n useText,\n asTabletNode,\n inlineMargins,\n}: Props) {\n const host = React.useMemo(() => {\n return calcShortNameByRegExp(address, asTabletNode) || address;\n }, [address, asTabletNode]);\n\n const cluster = useSelector(getCluster);\n\n return (\n <span\n className={block(\n {hidden: !host, 'inline-margins': inlineMargins},\n ['elements-monospace', className].filter(Boolean).join(' '),\n )}\n onClick={onClick}\n >\n {prefix}\n <Tooltip className={block('tooltip')} content={address}>\n {useText ? (\n host\n ) : (\n <Link url={`/${cluster}/components/nodes/${address}`} routed>\n {host}\n </Link>\n )}\n </Tooltip>\n <span className={block('copy-btn', copyBtnClassName)}>\n <ClipboardButton view={'flat-secondary'} text={address} />\n </span>\n </span>\n );\n}\n","import cloneDeep_ from 'lodash/cloneDeep';\nimport forEach_ from 'lodash/forEach';\nimport isEqual_ from 'lodash/isEqual';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {SELECT_EMPTY_VALUE} from '../constants/navigation/modals/create-table';\nimport {SelectWithSubItemsProps} from '../components/Dialog/controls/SelectWithSubItems/SelectWithSubItems';\nimport {wrapBatchPromise} from './utils';\nimport {YTApiId, ytApiV3Id} from '../rum/rum-wrap-api';\nimport {BatchSubRequest, GetParams} from '../../shared/yt-types';\nimport {ValueOf} from '../../@types/types';\n\nexport interface WithAttrs<T> {\n $attributes: T;\n}\n\nexport const compressionExtras: Pick<SelectWithSubItemsProps, 'labels' | 'items' | 'subItemsMap'> =\n {\n labels: ['codec:', 'level:'],\n items: [\n ...[\n 'none',\n 'snappy',\n 'zlib_',\n 'lz4',\n 'lz4_high_compression',\n 'quick_lz',\n 'zstd_',\n 'brotli_',\n 'lzma_',\n 'bzip2_',\n ].map((value) => ({value, content: value})),\n ],\n subItemsMap: {\n zlib_: genComperessionLevelItems(1, 9),\n zstd_: genComperessionLevelItems(1, 21),\n brotli_: genComperessionLevelItems(1, 11),\n lzma_: genComperessionLevelItems(0, 9),\n bzip2_: genComperessionLevelItems(1, 9),\n },\n };\n\nfunction genComperessionLevelItems(from: number, to: number) {\n const res = [];\n for (let i = from; i <= to; ++i) {\n res.push({value: String(i), content: String(i)});\n }\n return res;\n}\n\nexport function compressionCodecValueFromString(value: string) {\n if (!value) {\n return [SELECT_EMPTY_VALUE];\n }\n\n for (const k in compressionExtras.subItemsMap) {\n if (value.startsWith(k)) {\n return [k, value.substr(k.length)];\n }\n }\n return [value];\n}\n\nexport function compressionCodecValueToString(value: Array<string>) {\n if (isEqual_(value, [SELECT_EMPTY_VALUE])) {\n return '';\n }\n return value?.join('');\n}\n\ntype StorageOptionsType = 'replication' | 'erasure';\n\nexport const StorageOptions = {\n REPLICATION: 'replication' as StorageOptionsType,\n ERASURE: 'erasure' as StorageOptionsType,\n};\n\nexport const ERASURE_CODECS = [\n {value: 'lrc_12_2_2', title: 'lrc_12_2_2 (recommended)'},\n {value: 'reed_solomon_6_3', title: 'reed_solomon_6_3'},\n];\n\nexport function storageOptionFromErasureCodec(codec: string) {\n return !codec || codec === 'none' ? StorageOptions.REPLICATION : StorageOptions.ERASURE;\n}\n\nexport function normalizeErasureCodec(erasureCodec: string) {\n return !erasureCodec || erasureCodec === 'none' ? ERASURE_CODECS[0].value : erasureCodec;\n}\n\nexport function erasureCodecFromStorageOption(type?: StorageOptionsType, erasureCodec?: string) {\n if (type === StorageOptions.REPLICATION) {\n return 'none';\n }\n return erasureCodec || ERASURE_CODECS[0].value;\n}\n\nexport type InMemoryModeType = ValueOf<typeof InMemoryMode>;\n\nexport const InMemoryMode = {\n NONE: 'none',\n COMPRESSED: 'compressed',\n UNCOMPRESSED: 'uncompressed',\n} as const;\n\nexport function makeUiMarker(ui_marker: string) {\n return {ui_marker};\n}\n\nexport function prepareSetCommandForBatch(path: string, value: any, additionalParameters?: object) {\n if (value === undefined || value === null) {\n return {\n command: 'remove' as const,\n parameters: {\n path,\n ...additionalParameters,\n },\n };\n }\n\n return {\n command: 'set' as const,\n parameters: {\n path,\n ...additionalParameters,\n force: true,\n },\n input: value,\n };\n}\n\nexport const CypressNodeTypes = {\n REPLICATED_TABLE: 'replicated_table',\n REPLICATION_LOG_TABLE: 'replication_log_table',\n CHAOS_REPLICATED_TABLE: 'chaos_replicated_table',\n MAP_NODE: 'map_node',\n TABLE: 'table',\n // TODO: add more types\n};\n\nexport async function createParentsBeforeSet(nodePath: string, attributesToSet: Array<string>) {\n if (!attributesToSet.length) {\n return Promise.resolve();\n }\n\n const parentPaths: Record<string, boolean> = {};\n forEach_(attributesToSet, (attr) => {\n const parents = attr.split('/');\n for (let i = 1; i < parents.length; ++i) {\n const key = parents.slice(0, i).join('/');\n if (key) {\n parentPaths[key] = true;\n }\n }\n });\n const toCreate = Object.keys(parentPaths).sort();\n\n for (const attr of toCreate) {\n const path = nodePath + '/@' + attr;\n await yt.v3.exists({path}).then((isCreated: boolean) => {\n if (!isCreated) {\n return yt.v3.set({path}, {});\n }\n });\n }\n}\n\nexport function updateNodeAttributes(\n nodePath: string,\n changes: Array<{attr: string; value: any}>,\n): Promise<unknown> {\n if (isEmpty_(changes)) {\n return Promise.resolve();\n }\n\n const requests: Array<BatchSubRequest> = [];\n\n const oneLevelDiffsParents: Array<string> = [];\n const oneLevelDiffs: Record<string, Record<string, unknown>> = {};\n forEach_(changes, ({attr, value}) => {\n const attrPath = attr.split('/');\n if (attrPath.length === 1) {\n const path = nodePath + '/@' + attrPath.join('/');\n requests.push(prepareSetCommandForBatch(path, value));\n } else {\n const [last] = attrPath.splice(attrPath.length - 1, 1);\n const parentPath = attrPath.join('/');\n oneLevelDiffsParents.push(parentPath);\n const path = nodePath + '/@' + parentPath;\n const diff = (oneLevelDiffs[path] = oneLevelDiffs[path] || {});\n diff[last] = value;\n }\n });\n\n return Promise.all([\n ...(requests.length\n ? [\n wrapBatchPromise(\n ytApiV3Id.executeBatch(YTApiId.updateNodeAttributes, {requests}),\n 'Failed to update node attributes',\n ),\n ]\n : []),\n createParentsBeforeSet(nodePath, oneLevelDiffsParents).then(() => {\n if (isEmpty_(oneLevelDiffs)) {\n return Promise.resolve([]);\n }\n\n const promises: Array<Promise<unknown>> = map_(oneLevelDiffs, async (diff, path) => {\n const p = updateAttributes(path, diff);\n await p;\n return p;\n });\n\n return Promise.all(promises);\n }),\n ]);\n}\n\nfunction updateAttributes(path: string, oneLevelDiff: Record<'string', unknown>) {\n if (isEmpty_(oneLevelDiff)) {\n return Promise.resolve();\n }\n\n const modifyGuarantee = (data: any = {}) => {\n const res = cloneDeep_(data);\n forEach_(oneLevelDiff, (value, key) => {\n if (value === undefined) {\n delete res[key];\n } else {\n res[key] = value;\n }\n });\n if (isEqual_(data, res)) {\n return Promise.resolve();\n }\n return yt.v3.set({path}, res);\n };\n\n return yt.v3.exists({path}).then((isExists: boolean) => {\n if (isExists) {\n return ytApiV3Id.get(YTApiId.updateAttributes, {path}).then(modifyGuarantee);\n }\n return modifyGuarantee({});\n });\n}\n\nexport function makeBatchSubRequest<T extends BatchSubRequest>(\n command: T['command'],\n parameters: T['parameters'],\n setup?: T['setup'],\n) {\n return {\n command,\n parameters,\n setup,\n } as BatchSubRequest;\n}\n\nexport function prepareAttributes(attributes: readonly string[]): GetParams['attributes'] {\n const [keys, paths] = partition_(attributes, (k) => -1 === k.indexOf('/'));\n\n if (!paths.length) {\n return keys;\n }\n\n return {keys, paths};\n}\n","import React from 'react';\n\nimport hammer from '../../common/hammer';\n\nimport Label, {LabelTheme} from '../../components/Label/Label';\n\nimport {YTHealth} from '../../types';\n\nimport {StrawberryCliqueHealthType} from '../../utils/strawberryControllerApi';\n\nconst HEALTH_TO_THEME: {[health: string]: LabelTheme} = {\n good: 'success',\n initializing: 'warning',\n degrading: 'warning',\n failed: 'danger',\n changing: 'info',\n pending: 'info',\n};\n\nexport function Health(props: {value?: YTHealth | StrawberryCliqueHealthType; 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","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 { jsx as _jsx } from \"react/jsx-runtime\";\nimport { filterDOMProps } from '../../utils/filterDOMProps';\nimport { b, shouldClientNavigate } from './utils';\nexport function BreadcrumbItem(props) {\n var _a;\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) {\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;\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'] = (_a = props['aria-current']) !== null && _a !== void 0 ? _a : 'page';\n }\n if (props.itemType === 'menu') {\n linkProps = {};\n }\n return (_jsx(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 }), children: props.children })));\n}\nBreadcrumbItem.displayName = 'Breadcrumbs.Item';\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { b } from './utils';\nexport function BreadcrumbsSeparator({ separator }) {\n return (_jsx(\"div\", { \"aria-hidden\": true, className: b('divider'), children: separator !== null && separator !== void 0 ? separator : '/' }));\n}\nBreadcrumbsSeparator.displayName = 'Breadcrumbs.Separator';\n","import { addComponentKeysets } from '../../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'lab/Breadcrumbs';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","'use client';\nimport { createElement as _createElement } from \"react\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as 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 = (_jsx(BreadcrumbItem, { itemType: \"menu\", children: _jsx(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 }) => (_jsx(Button, { title: i18n('label_more'), className: b('more-button'), onClick: onClick, size: \"s\", view: \"flat\", disabled: props.disabled, children: _jsx(Button.Icon, { children: \"...\" }) })) }) }));\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 (_jsxs(\"li\", { className: b('item', { calculating: !calculated }), children: [_createElement(BreadcrumbItem, Object.assign({}, child.props, { key: key, current: isCurrent, disabled: props.disabled || child.props.disabled, onAction: handleAction, navigate: navigate }), child.props.children), isCurrent ? null : _jsx(BreadcrumbsSeparator, { separator: props.separator })] }, index));\n });\n return (_jsx(\"ol\", Object.assign({ ref: containerRef }, filterDOMProps(props, { labelable: true }), { \"data-qa\": props.qa, className: b(null, props.className), style: props.style, children: breadcrumbItems })));\n});\nBreadcrumbs.Item = Item;\nBreadcrumbs.displayName = 'Breadcrumbs';\nexport { Item as BreadcrumbsItem };\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 cn from 'bem-cn-lite';\n\nconst block = cn('yt-page-counter');\n\nexport interface PageCounterProps {\n className?: string;\n pageIndex?: number;\n pageCount?: number;\n}\n\nfunction PageCounter({pageIndex, pageCount, className}: PageCounterProps) {\n if (pageIndex === undefined || pageCount === undefined) {\n return null;\n }\n\n return pageCount! > 1 ? (\n <span className={block(null, className)}>\n Page: {(pageIndex || 0) + 1} / {pageCount}\n </span>\n ) : null;\n}\n\nexport default React.memo(PageCounter);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport capitalize_ from 'lodash/capitalize';\n\nimport barsDescendingSvg from '@gravity-ui/icons/svgs/bars-descending-align-left.svg';\nimport {Button, DropdownMenu, Icon, Text} from '@gravity-ui/uikit';\n\nimport SortIcon from '../../components/SortIcon/SortIcon';\n\nimport {OrderType, calculateNextOrderValue, nextSortOrderValue} from '../../utils/sort-helpers';\nimport PageCounter, {PageCounterProps} from '../../components/PageCounter/PageCounter';\nimport Loader from '../../components/Loader/Loader';\nimport {rumLogError} from '../../rum/rum-counter';\n\nimport './ColumnHeader.scss';\n\nconst block = cn('column-header');\n\nexport type ColumnInfo<T> = {\n column: T;\n title?: string;\n shortTitle?: string;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n allowUnordered?: boolean;\n /**\n * Ignored when allowedOrderTypes is defined\n */\n withUndefined?: boolean;\n allowedOrderTypes?: Array<OrderType>;\n};\n\nexport type HasSortColumn<T> =\n | (ColumnInfo<T> & {options?: undefined})\n | ({\n title: string;\n shortTitle?: string;\n column: T;\n options: Array<ColumnInfo<T>>;\n } & Partial<Record<keyof Omit<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>, undefined>>);\n\nexport type ColumnHeaderProps<T extends string = string> = PageCounterProps &\n HasSortColumn<T> & {\n className?: string;\n order?: OrderType;\n multisortIndex?: number;\n onSort?: (\n column: T,\n nextOrder: OrderType,\n options: {currentOrder?: OrderType; multisort?: boolean},\n ) => void;\n\n loading?: boolean;\n\n align?: 'center' | 'left' | 'right';\n };\n\ntype NameTitleContent = {\n nameContent: string;\n titleContent: string;\n};\n\nfunction getNameTitle<T extends string>({\n column,\n title,\n shortTitle,\n}: Pick<ColumnInfo<T>, 'column' | 'title' | 'shortTitle'>): NameTitleContent {\n const t = title ?? capitalize_(column);\n const nameContent = !shortTitle ? t : shortTitle;\n return {nameContent, titleContent: t};\n}\n\nfunction useColumnInfo<T extends string = string>(\n props: ColumnHeaderProps<T>,\n): ColumnInfo<T> & NameTitleContent & {subColumn?: NameTitleContent} {\n if (props.options === undefined) {\n const {column, allowUnordered, withUndefined, title, shortTitle, allowedOrderTypes} = props;\n return {\n column,\n allowUnordered,\n withUndefined,\n allowedOrderTypes,\n ...getNameTitle({column, title, shortTitle}),\n };\n }\n\n const {column: value, options, title, shortTitle} = props;\n const columnData = options.find(({column}) => value === column)!;\n if (!columnData) {\n rumLogError({\n message: 'Unexpected behavior: missing value in ColumnHeader.props.options',\n additional: props,\n });\n }\n return {\n subColumn: getNameTitle({...columnData}),\n ...columnData,\n ...getNameTitle({column: '', title, shortTitle}),\n };\n}\n\nexport default function ColumnHeader<T extends string = string>(props: ColumnHeaderProps<T>) {\n const {className, align, order, onSort, multisortIndex, loading, pageIndex, pageCount} = props;\n const {\n column,\n allowUnordered,\n withUndefined,\n nameContent,\n titleContent,\n allowedOrderTypes,\n subColumn,\n } = useColumnInfo(props);\n\n const changeHandler = React.useCallback(\n (e: React.MouseEvent) => {\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort?.(column, nextOrder, {\n currentOrder: order,\n multisort: e.ctrlKey || e.metaKey,\n });\n },\n [column, order, onSort, allowUnordered, allowedOrderTypes, withUndefined],\n );\n\n const sortable = Boolean(onSort);\n\n return (\n <div className={block(null, className)}>\n <div\n className={block('label-icon', {sortable, align})}\n onClick={sortable ? changeHandler : undefined}\n >\n <span className={block('label')} title={titleContent}>\n {nameContent}\n </span>\n {sortable && (\n <span className={block('icon')}>\n <SortIcon order={order} />\n </span>\n )}\n {multisortIndex !== undefined && (\n <span className={block('multisort')}>\n <sup>{multisortIndex}</sup>\n </span>\n )}\n {Boolean(order) && Boolean(subColumn) && (\n <Text\n className={block('label', {'sub-column': true})}\n variant=\"caption-2\"\n title={subColumn?.titleContent}\n color=\"dark-secondary\"\n >\n {subColumn?.nameContent}\n </Text>\n )}\n </div>\n <SubColumnSelector options={props.options} order={order} onSort={onSort} />\n {loading !== undefined && (\n <div className={block('loader')}>\n <Loader visible={loading} />\n </div>\n )}\n {Boolean(pageCount) && (\n <PageCounter\n className={block('page-counter')}\n pageIndex={pageIndex}\n pageCount={pageCount}\n />\n )}\n </div>\n );\n}\n\nfunction SubColumnSelector<T extends string>({\n order,\n options,\n onSort,\n}: Pick<ColumnHeaderProps<T>, 'onSort'> & {\n order?: ColumnHeaderProps<T>['order'];\n options?: Array<ColumnInfo<T>>;\n}) {\n return !options ? null : (\n <DropdownMenu\n items={options.map((x) => {\n const {titleContent} = getNameTitle(x);\n return {\n text: titleContent,\n action() {\n if (!onSort) {\n return;\n }\n const {column, allowUnordered, withUndefined, allowedOrderTypes} = x;\n const nextOrder = allowedOrderTypes\n ? calculateNextOrderValue(order, allowedOrderTypes)\n : nextSortOrderValue(order, allowUnordered, withUndefined);\n onSort(column, nextOrder, {\n currentOrder: order,\n });\n },\n };\n })}\n renderSwitcher={({onClick}) => (\n <Button onClick={onClick} view=\"flat\" size=\"xs\">\n <Icon size={12} data={barsDescendingSvg} />\n </Button>\n )}\n />\n );\n}\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:chart-link', {en, ru});\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\nimport i18n from './i18n';\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\n className={className}\n target=\"_blank\"\n theme={theme}\n url={url}\n title={title ?? i18n('View')}\n >\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\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","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, {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 {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, {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","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 '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';\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 '../../../components/Health/Health';\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\n hideToolbarShadow\n toolbar={<CellsInstruments />}\n content={<CellsTable />}\n />\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 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.078.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.325.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.54.54 0 0 0 .075-.312c0-.3-.244-.641-.84-.641a1 1 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 0 1-1.5 0c0-.674.345-1.22.78-1.577M8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2\", 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';\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 AccountLink from '../../accounts/AccountLink';\nimport {Health} from '../../../components/Health/Health';\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\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: '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 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 {Health} from '../../../components/Health/Health';\nimport {STICKY_TOOLBAR_BOTTOM} from '../../../components/WithStickyToolbar/WithStickyToolbar';\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\nimport {BundleBalancerValue} 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 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_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 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_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 '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 hideToolbarShadow\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 warning={\"The cluster is not ready to work with bundle's ACL\"}\n />\n )}\n </ErrorBoundary>\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 '../../../components/Health/Health';\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 \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 \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 hideToolbarShadow\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 'query',\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 query: 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 query: memory_limits?.query || 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\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, net_bytes, vcpu, memory} = itemData.resource_guarantee;\n return {\n id: type,\n type,\n memory: hammer.format['Bytes'](memory),\n net: hammer.format['BytesPerSecond'](net_bytes ? net_bytes : net / 8),\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 addToChange('@bundle_controller_target_config/memory_limits/query', 'memory_limits.query');\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","/**\n * Validates a number against various constraints\n * @param constraints Object containing constraints: ge (>=), le (<=), gt (>), lt (<)\n * @param v The number to validate\n * @returns Error message if validation fails, undefined otherwise\n */\nexport function validateNumber(\n {\n ge,\n le,\n gt,\n lt,\n allowParse,\n }: {ge?: number; le?: number; lt?: number; gt?: number; allowParse?: boolean},\n value?: number | string,\n): string | undefined {\n const v = valueOrParsed(value, allowParse);\n\n if (v === undefined || !Number.isFinite(v)) {\n return 'Incorrect value';\n }\n\n if (ge !== undefined && !(v >= ge)) {\n return `The value must be \\u2265 ${ge}`;\n }\n\n if (le !== undefined && !(v <= le)) {\n return `The value must be \\u2264 ${le}`;\n }\n\n if (gt !== undefined && !(v > gt)) {\n return `The value must be > ${gt}`;\n }\n\n if (lt !== undefined && !(v < lt)) {\n return `The value must be < ${lt}`;\n }\n\n return undefined;\n}\n\nfunction valueOrParsed(v?: number | string, allowParse?: boolean): number {\n if (Number.isFinite(v) || !allowParse) {\n return v as number;\n }\n\n if (v === null || v === '') {\n return NaN;\n } else {\n return Number(v);\n }\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';\nimport {getQueryMemoryLimitIsSupported} from '../../../../store/selectors/global/supported-features';\nimport {validateNumber} from '../../../../common/hammer/validate-number';\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 query?: 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 const queryMemoryLimitIsSupported = useSelector(getQueryMemoryLimitIsSupported);\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 if (queryMemoryLimitIsSupported) {\n renderMemoryTab.fields.push({\n name: 'query',\n type: 'bundle-input',\n caption: 'Query memory limit',\n extras: {\n format: 'Bytes',\n hasClear: true,\n },\n validator: simpleBundleValidate,\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: validateNumber.bind(null, {gt: 0}),\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: validateNumber.bind(null, {gt: 0}),\n },\n {\n name: 'write_thread_pool_size',\n type: 'bundle-input',\n caption: 'Tablet cells per node',\n warning:\n 'Changing tablet cell count is discouraged. Do not modify this parameter unless you understand what you are doing',\n extras: {\n postfix: 'threads',\n format: 'Number',\n hasClear: true,\n },\n validator: validateNumber.bind(null, {gt: 0}),\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 '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 hideToolbarShadow\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 {Progress} from '@gravity-ui/uikit';\nimport {DialogWrapper as Dialog} from '../../../../components/DialogWrapper/DialogWrapper';\n\nimport hammer from '../../../../common/hammer';\nimport ypath from '../../../../common/thor/ypath';\nimport Button from '../../../../components/Button/Button';\nimport {YTErrorBlock} 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 && <YTErrorBlock 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\n hideToolbarShadow\n toolbar={<CellsInstruments />}\n content={<CellsTable />}\n />\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 {YTErrorBlock} 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 && <YTErrorBlock 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 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 * as React from 'react';\nexport function useResizeObserver({ ref, onResize, box, }) {\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, { box });\n return () => {\n observer.disconnect();\n };\n }, [ref, onResize, box]);\n}\n"],"names":["addI18Keysets","en","ru","connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","i18n","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","props","xmlns","fill","viewBox","children","fillRule","d","clipRule","progressBlock","ProgressInnerText","text","offset","className","style","transform","ProgressStackItem","item","value","color","theme","loading","modifiers","Number","isFinite","width","backgroundColor","getOffset","getTheme","colorStops","colorStopsValue","matchingColorStopItem","find","index","currentValue","minValue","stop","maxValue","length","ProgressWithStack","stack","stackClassName","reduce","sum","getValueFromStack","map","ProgressWithValue","isProgressWithStack","undefined","Progress","ref","size","qa","resolvedProps","Object","assign","reShortName","makeRegexpFromSettings","uiSettings","reShortNameFromAddress","reTabletNodeShortName","reShortNameFromTabletNodeAddress","block","cn","Host","_ref$address","address","prefix","copyBtnClassName","useText","asTabletNode","inlineMargins","host","React","re","_res$groups","res","exec","groups","shortname","suffix","filter","Boolean","join","calcShortNameByRegExp","cluster","useSelector","getCluster","_jsxs","hidden","Tooltip","Link","url","concat","routed","ClipboardButton","view","compressionExtras","labels","items","_toConsumableArray","subItemsMap","zlib_","genComperessionLevelItems","zstd_","brotli_","lzma_","bzip2_","from","to","i","push","String","compressionCodecValueFromString","SELECT_EMPTY_VALUE","k","startsWith","substr","compressionCodecValueToString","isEqual_","StorageOptions","REPLICATION","ERASURE","ERASURE_CODECS","storageOptionFromErasureCodec","codec","normalizeErasureCodec","erasureCodec","erasureCodecFromStorageOption","type","InMemoryMode","NONE","COMPRESSED","UNCOMPRESSED","makeUiMarker","ui_marker","prepareSetCommandForBatch","additionalParameters","command","parameters","force","input","CypressNodeTypes","REPLICATED_TABLE","REPLICATION_LOG_TABLE","CHAOS_REPLICATED_TABLE","MAP_NODE","TABLE","createParentsBeforeSet","_x","_x2","_createParentsBeforeSet","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","nodePath","attributesToSet","parentPaths","toCreate","_iterator","_step","_loop","wrap","_context3","prev","next","abrupt","Promise","resolve","forEach_","attr","parents","split","key","slice","keys","sort","_createForOfIteratorHelper","_context2","yt","exists","then","isCreated","set","s","n","done","delegateYield","t1","e","f","finish","updateNodeAttributes","changes","isEmpty_","requests","oneLevelDiffsParents","oneLevelDiffs","attrPath","_attrPath$splice","splice","last","_slicedToArray","parentPath","all","wrapBatchPromise","ytApiV3Id","executeBatch","YTApiId","promises","map_","_ref2","_callee","diff","p","_context","updateAttributes","_x3","_x4","oneLevelDiff","modifyGuarantee","data","cloneDeep_","isExists","get","makeBatchSubRequest","setup","prepareAttributes","_partition_","partition_","indexOf","_partition_2","paths","HEALTH_TO_THEME","good","initializing","degrading","failed","changing","pending","Health","Label","hammer","format","NO_VALUE","shouldClientNavigate","link","target","getAttribute","href","origin","location","hasAttribute","metaKey","ctrlKey","altKey","shiftKey","b","BreadcrumbItem","_a","Element","domProps","filterDOMProps","labelable","handleAction","event","disabled","preventDefault","onAction","currentTarget","navigate","HTMLAnchorElement","isDefaultPrevented","routerOptions","isDisabled","linkProps","hrefLang","rel","download","ping","referrerPolicy","role","tabIndex","onKeyDown","current","itemType","BreadcrumbsSeparator","separator","displayName","addComponentKeysets","Item","_props","listRef","containerRef","useForkRef","forEach","child","visibleItemsCount","setVisibleItemsCount","calculated","setCalculated","handleResize","useResizeObserver","onResize","lastChildren","visibleItems","list","listItems","Array","containerWidth","offsetWidth","newVisibleItemsCount","calculatedWidth","maxItems","Infinity","rootWidth","showRoot","shift","scrollWidth","lastItem","pop","Math","min","max","recalculate","contents","breadcrumbs","endItems","rootItem","hiddenItems","menuItem","DropdownMenu","el","action","popupProps","staircase","popupStyle","popupPlacement","renderSwitcher","Button","Icon","lastIndex","breadcrumbItems","isCurrent","calculating","Breadcrumbs","UBreadcrumbs","PageCounter","pageIndex","pageCount","getNameTitle","column","shortTitle","t","capitalize_","nameContent","titleContent","ColumnHeader","align","order","onSort","multisortIndex","_useColumnInfo","options","allowUnordered","withUndefined","allowedOrderTypes","columnData","rumLogError","message","additional","subColumn","useColumnInfo","changeHandler","nextOrder","calculateNextOrderValue","nextSortOrderValue","currentOrder","multisort","sortable","SortIcon","Text","variant","SubColumnSelector","Loader","visible","_ref3","x","_ref4","barsDescendingSvg","ChartLink","hideIcon","face","wrapContent","icon","awesome","NAMESPACE","withNaming","m","v","Info","infoIcon","BundleParamsList","params","_ref$size","param","postfix","WaitForFont","_useSelector","getFontFamilies","regular","monospace","_React$useState","_React$useState2","ready","setReady","waitForFontFamily","Favourites","_Component","_this","_classCallCheck","_len","args","_key","_callSuper","state","isActive","toggleActive","onToggle","setState","prevState","onItemClick","_inherits","_createClass","_this2","this","dropItems","switcher","renderButton","pin","empty","Hotkey","settings","handler","scope","buttonProps","themeProps","_this$props","toggleDisabled","clear","selected","renderDropDownMenu","renderHotkey","Component","PropTypes","_React$Component","CellsTableInstruments","onIdFilter","id","setTabletsPartial","cellsIdFilter","onBundleFilter","bundle","cellsBundleFilter","onHostFilterChange","hostFilter","onHostSelected","cellsHostFilter","onHostInputBlur","getBundleFilterItems","bundles","filter_","getHostFilterItems","hosts","idFilter","bundleFilter","activeBundle","activeBundleHosts","Toolbar","itemsToWrap","name","node","Filter","hasClear","placeholder","onChange","autofocus","shrinkable","growable","wrapperClassName","Suggest","_items","popupClassName","onTextUpdate","onBlur","autoFocus","buttonText","cancelHelper","CancelHelper","fetchTabletsBundles","dispatch","TABLETS_BUNDLES_LOAD_REQUEST","USE_MAX_SIZE","removeAllRequests","tabletCellBundles","cancellation","saveCancelToken","results","_results","_toArray","isBundleControllerSupported","output","_rest","cells","error","getBatchError","allCells","prepareTabletCells","allBundles","prepareBundles","zones","Map","has","getZones","getState","user","getCurrentUserName","makeCheckPermissionBatchSubRequestUI","permission","wrapApiPromiseByToaster","tabletBundlesCheckWrite","_splitBatchResults","splitBatchResults","outputs","writableByName","reduce_","acc","TABLETS_BUNDLES_PARTIAL","reject","toasterName","skipSuccessToast","errorTitle","fetchWritePermissions","bundleControllerZones","result","bundleDefaultConfig","entries","ypath","create","prepareBundleDefaultConfig","TABLETS_BUNDLES_LOAD_SUCCESS","isCancelled","TABLETS_BUNDLES_LOAD_FAILURE","setTabletsActiveBundle","bundlesTrackVisit","TABLETS_BUNDLES_ACTIVE_ACCOUNT","mapDispatchToProps","getTabletsActiveBundle","getTabletsCellsHostsOfActiveBundle","getTabletsCellsIdFilter","getTabletsCellsBundleFilter","getTabletsCellsHostFilter","getTabletsCellsBundles","getTabletsCellsHosts","STATE_THEME","leading","none","elections","leader_recovery","TABLE_SETTINGS","displayIndices","stickyHead","DataTable","MOVING","stickyTop","STICKY_TOOLBAR_BOTTOM","syncHeadOnResize","dynamicRender","COLUMN_TITLE","uncompressed","compressed","peerAddress","actions","HoverAction","wrapCell","renderCell","CellsTable","_len2","_key2","renderColumnHeader","col","_COLUMN_TITLE$col","_this$props$sortState","sortState","isSorted","onColumnSort","cellsSort","renderId","row","renderBundle","activeBundleLink","renderState","_data$row","capitalize","renderActions","_this$props2","attributesPath","cellNavigationLink","ClickableAttributesButton","colName","health","_data$row2","toLocaleLowerCase","header","columns","Columns","call","_this$props3","loaded","DataTableYT","sortableColumn","render","renderHealth","tablets","renderNumber","bind","memory","renderBytes","renderHost","getTabletsIsLoading","getTabletsIsLoaded","getTabletsCellsSorted","getTabletsCellsSortState","tabletActiveBundleLink","tabletAttributesPath","tabletCellNavigationLink","BundleCells","ErrorBoundary","WithStickyToolbar","hideToolbarShadow","toolbar","CellsInstruments","setChaosPartial","CHAOS_BUNDLES_PARTIAL","setChaosActiveBundle","CHAOS_BUNDLES_ACTIVE_ACCOUNT","height","HelpPopover","Popover","buttonRef","I","BundleBalancerValue","_props$value","blocking","success","BundleGeneralMeta","bundleData","getTabletsActiveBundleData","clusterUiConfig","getClusterUiConfig","allowTabletAccounting","getClusterUiConfigEnablePerBundleTabletAccounting","leftGroup","UIFactory","getExtraMetaTableItemsForBundle","tabletCells","enable_bundle_controller","node_tag_filter","rightGroup","renderResourceProgress","changelog_account","AccountLink","account","snapshot_account","MetaTable","resourceName","usage","getValue","limit","calcProgressProps","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","setBundlesSortState","has_tag","setActiveBundle","renderBundlesTableItemExtraControls","itemClassName","renderAccount","renderNodes","nodes","unique_node_tag","help_tooltip","delayClosing","allowPerBundleAccounting","bundleDashboardUrl","pathPrefix","showCellBundleEditor","writeableByName","_ref5","allowEdit","_ref8","_calcProgressProps","_data$row3","_calcProgressProps2","toLowerCase","columnName","total","footerData","renderTabletCountPercentage","renderTabletStaticMemoryPercentage","renderBC","fetchTabletCellBundleEditor","bundleName","TABLETS_BUNDLES_EDITOR_LOAD_REQUREST","toEdit","getTabletsBundles","defaultReservedMemoryLimit","getTabletsDefaultMemoryConfiguration","tabletCellBundlesEditData","_results$","bundleControllerIsUnavailable","code","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","allocated_rpc_proxies","errors","tabletCellBundlesInstancesDetails","nodesResults","keys_","instanceDetailsMap","_output","nanny_service","_output$","TABLETS_BUNDLES_EDITOR_PARTIAL","TABLETS_BUNDLES_EDITOR_LOAD_FAILURE","showTabletCellBundleEditor","visibleEditor","setBundleEditorController","bundlePath","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","NoContent","warning","hint","StatisticsComponent","getStatisticsComponentForBundle","BundleMonitorTab","BundleMonitor","component","tablet_cell_bundle","BundleAclTab","allowAcl","isPoolAclAllowed","BundleAcl","BundleMetaResourceProgress","resourceType","_ref$postfix","_getProgressData","trim","metaItems","formattedValue","getProgressBarColorByIndex","label","ColorCircle","marginRight","Readable","fraction","commonTooltip","getProgressData","DETAILS_KEYS","ActiveAccountBundleControllerUpdater","fetchFn","useUpdater","prevBundleControllerState","checkBundleControllerState","_yield$wrapApiPromise","_yield$wrapApiPromise2","_yield$wrapApiPromise3","alerts","inProgressCount","tabletBundleControllerState","sent","timeout","BundleConfigurationMeta","bundleControllerConfig","orchidData","getActiveBundleControllerData","bundleGroup","resource_quota","resource_allocated","allMemory","allVCPU","vcpu","allocMemory","allocVCPU","details","_getBundleStateData","detailsEntries","entries_","pick_","_ref6","_ref7","getBundleStateData","_ref9","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","visibleOnRowHover","_props$row$data","resource","formattedMemory","Bytes","formattedVcpu","vCores","_computeProgress","used","progress","computeProgress","getProgressTheme","hulkRequestPath","uuid","lastWord","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","query","threadPool_reset","lookup_thread_pool_size","query_thread_pool_size","write_thread_pool_size","getResourceData","source","getInitialFormValues","slug","changelogAccount","snapshotAccount","general","abc","info","createConfigurationList","itemData","_itemData$resource_gu","resource_guarantee","net","net_bytes","initialData","createParams","formatType","_hammer$format$format","_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","instanceCountValidate","number","getBundleControllerResource","defaultValues","_current$key","err","validateNumber","ge","le","gt","lt","allowParse","NaN","valueOrParsed","BundleEditorDialog","_initialValues$resour","getTabletCellBundleEditorState","queryMemoryLimitIsSupported","getQueryMemoryLimitIsSupported","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","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","currentAccLimit","tabletNode","_resources$rpc_proxy_","_resources$tablet_nod","requiredCpu","violatedResources","requiredMemory","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","_defineProperty","AccountsSuggestWithLoading","getChaosCellBundleEditorData","chaosCellBundleEditor","hideBundleEditor","attrs","console","log","chaosCellBundlesSetAttrs","activeTab","setActiveTab","Dialog","open","Header","Divider","Body","Tabs","layout","active","onTabChange","YTErrorBlock","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","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","_ref$marginRight","box","element","window","ResizeObserver","addEventListener","removeEventListener","observer","observe","disconnect"],"sourceRoot":""}
|