@ytsaurus/ui 1.75.1 → 1.77.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +75 -75
- package/dist/public/build/css/{job.c7c99207.chunk.css → job.9757ff68.chunk.css} +2 -2
- package/dist/public/build/css/job.9757ff68.chunk.css.map +1 -0
- package/dist/public/build/css/main.0efa9da5.css +10 -0
- package/dist/public/build/css/main.0efa9da5.css.map +1 -0
- package/dist/public/build/css/navigation.c199c4f2.chunk.css +2 -0
- package/dist/public/build/css/navigation.c199c4f2.chunk.css.map +1 -0
- package/dist/public/build/js/{1260.534f3f75.chunk.js → 1260.a1e22005.chunk.js} +2 -2
- package/dist/public/build/js/{1260.534f3f75.chunk.js.map → 1260.a1e22005.chunk.js.map} +1 -1
- package/dist/public/build/js/{1879.23423388.chunk.js → 1879.3975650a.chunk.js} +3 -3
- package/dist/public/build/js/{1879.23423388.chunk.js.map → 1879.3975650a.chunk.js.map} +1 -1
- package/dist/public/build/js/{1983.666923be.chunk.js → 1983.64a2e22f.chunk.js} +2 -2
- package/dist/public/build/js/{1983.666923be.chunk.js.map → 1983.64a2e22f.chunk.js.map} +1 -1
- package/dist/public/build/js/{2447.b2877275.chunk.js → 2447.eb8fde89.chunk.js} +2 -2
- package/dist/public/build/js/{2447.b2877275.chunk.js.map → 2447.eb8fde89.chunk.js.map} +1 -1
- package/dist/public/build/js/3724.3e5848f0.chunk.js +2 -0
- package/dist/public/build/js/{3724.425d01ec.chunk.js.map → 3724.3e5848f0.chunk.js.map} +1 -1
- package/dist/public/build/js/6729.39d7cf60.chunk.js +2 -0
- package/dist/public/build/js/6729.39d7cf60.chunk.js.map +1 -0
- package/dist/public/build/js/{7959.95ebd185.chunk.js → 7959.faac2ff8.chunk.js} +2 -2
- package/dist/public/build/js/{7959.95ebd185.chunk.js.map → 7959.faac2ff8.chunk.js.map} +1 -1
- package/dist/public/build/js/{8390.83f4531a.chunk.js → 8390.c3d2de6a.chunk.js} +2 -2
- package/dist/public/build/js/{8390.83f4531a.chunk.js.map → 8390.c3d2de6a.chunk.js.map} +1 -1
- package/dist/public/build/js/{8460.2d4d237e.chunk.js → 8460.fc8e2238.chunk.js} +2 -2
- package/dist/public/build/js/{8460.2d4d237e.chunk.js.map → 8460.fc8e2238.chunk.js.map} +1 -1
- package/dist/public/build/js/{8778.e18e655b.chunk.js → 8778.f3ea089f.chunk.js} +2 -2
- package/dist/public/build/js/{8778.e18e655b.chunk.js.map → 8778.f3ea089f.chunk.js.map} +1 -1
- package/dist/public/build/js/{9558.a6ea64c9.chunk.js → 9558.6a4bf9a9.chunk.js} +2 -2
- package/dist/public/build/js/{9558.a6ea64c9.chunk.js.map → 9558.6a4bf9a9.chunk.js.map} +1 -1
- package/dist/public/build/js/9569.aac48f3b.chunk.js +2 -0
- package/dist/public/build/js/9569.aac48f3b.chunk.js.map +1 -0
- package/dist/public/build/js/{accounts.2ba221c2.chunk.js → accounts.aa7ed73f.chunk.js} +2 -2
- package/dist/public/build/js/accounts.aa7ed73f.chunk.js.map +1 -0
- package/dist/public/build/js/{acl.c948c339.chunk.js → acl.4cd54663.chunk.js} +2 -2
- package/dist/public/build/js/{acl.c948c339.chunk.js.map → acl.4cd54663.chunk.js.map} +1 -1
- package/dist/public/build/js/{app-navigation.b062662b.chunk.js → app-navigation.13c65573.chunk.js} +2 -2
- package/dist/public/build/js/app-navigation.13c65573.chunk.js.map +1 -0
- package/dist/public/build/js/chyt.0ee6bfa2.chunk.js +2 -0
- package/dist/public/build/js/chyt.0ee6bfa2.chunk.js.map +1 -0
- package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js +2 -0
- package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js.map +1 -0
- package/dist/public/build/js/{components.bbe331cb.chunk.js → components.b39828bc.chunk.js} +2 -2
- package/dist/public/build/js/components.b39828bc.chunk.js.map +1 -0
- package/dist/public/build/js/job.ea2ba82d.chunk.js +2 -0
- package/dist/public/build/js/job.ea2ba82d.chunk.js.map +1 -0
- package/dist/public/build/js/main.6375dbc6.js +3 -0
- package/dist/public/build/js/main.6375dbc6.js.map +1 -0
- package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js +2 -0
- package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js → navigation-flow.6d67215a.chunk.js} +2 -2
- package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js.map → navigation-flow.6d67215a.chunk.js.map} +1 -1
- package/dist/public/build/js/navigation.529208de.chunk.js +2 -0
- package/dist/public/build/js/navigation.529208de.chunk.js.map +1 -0
- package/dist/public/build/js/odin.c4c4ef6f.chunk.js +2 -0
- package/dist/public/build/js/odin.c4c4ef6f.chunk.js.map +1 -0
- package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js → path-viewer.c091d9f4.chunk.js} +2 -2
- package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js.map → path-viewer.c091d9f4.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js → query-navigation.b1574290.chunk.js} +2 -2
- package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js.map → query-navigation.b1574290.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-results.733b1795.chunk.js → query-results.0a05cc41.chunk.js} +2 -2
- package/dist/public/build/js/{query-results.733b1795.chunk.js.map → query-results.0a05cc41.chunk.js.map} +1 -1
- package/dist/public/build/js/query-tracker.515069f6.chunk.js +2 -0
- package/dist/public/build/js/query-tracker.515069f6.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.481a6d3a.js → runtime.09217c31.js} +2 -2
- package/dist/public/build/js/{runtime.481a6d3a.js.map → runtime.09217c31.js.map} +1 -1
- package/dist/public/build/js/{scheduling.b70d4627.chunk.js → scheduling.6448eabd.chunk.js} +2 -2
- package/dist/public/build/js/{scheduling.b70d4627.chunk.js.map → scheduling.6448eabd.chunk.js.map} +1 -1
- package/dist/public/build/js/system.1114aa96.chunk.js +2 -0
- package/dist/public/build/js/system.1114aa96.chunk.js.map +1 -0
- package/dist/public/build/js/{yt-df-dialog.9ddda260.chunk.js → yt-df-dialog.4ad719bf.chunk.js} +2 -2
- package/dist/public/build/js/yt-df-dialog.4ad719bf.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +70 -70
- package/dist/shared/constants/settings-types.d.ts +1 -0
- package/package.json +3 -2
- package/dist/public/build/css/job.c7c99207.chunk.css.map +0 -1
- package/dist/public/build/css/main.2d3cbfcd.css +0 -10
- package/dist/public/build/css/main.2d3cbfcd.css.map +0 -1
- package/dist/public/build/css/navigation.0a9042b3.chunk.css +0 -2
- package/dist/public/build/css/navigation.0a9042b3.chunk.css.map +0 -1
- package/dist/public/build/js/3724.425d01ec.chunk.js +0 -2
- package/dist/public/build/js/5177.b4cec253.chunk.js +0 -2
- package/dist/public/build/js/5177.b4cec253.chunk.js.map +0 -1
- package/dist/public/build/js/6729.da9aa02f.chunk.js +0 -2
- package/dist/public/build/js/6729.da9aa02f.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.2ba221c2.chunk.js.map +0 -1
- package/dist/public/build/js/app-navigation.b062662b.chunk.js.map +0 -1
- package/dist/public/build/js/chyt.7f99f87d.chunk.js +0 -2
- package/dist/public/build/js/chyt.7f99f87d.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js +0 -2
- package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js.map +0 -1
- package/dist/public/build/js/components.bbe331cb.chunk.js.map +0 -1
- package/dist/public/build/js/job.4fc50056.chunk.js +0 -2
- package/dist/public/build/js/job.4fc50056.chunk.js.map +0 -1
- package/dist/public/build/js/main.7981a440.js +0 -3
- package/dist/public/build/js/main.7981a440.js.map +0 -1
- package/dist/public/build/js/manage-tokens.286a4da9.chunk.js +0 -2
- package/dist/public/build/js/manage-tokens.286a4da9.chunk.js.map +0 -1
- package/dist/public/build/js/navigation.d891266d.chunk.js +0 -2
- package/dist/public/build/js/navigation.d891266d.chunk.js.map +0 -1
- package/dist/public/build/js/odin.df1cfe56.chunk.js +0 -2
- package/dist/public/build/js/odin.df1cfe56.chunk.js.map +0 -1
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js +0 -2
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js.map +0 -1
- package/dist/public/build/js/system.f759d3f0.chunk.js +0 -2
- package/dist/public/build/js/system.f759d3f0.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.9ddda260.chunk.js.map +0 -1
- /package/dist/public/build/js/{1879.23423388.chunk.js.LICENSE.txt → 1879.3975650a.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.7981a440.js.LICENSE.txt → main.6375dbc6.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"js/1983.666923be.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/templates/utils.js","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/NodeColumns.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/MemoryProgress/MemoryProgress.js","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/Version.js","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/NodeActions/NodeActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/Nodes/NodesColumnHeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/tables.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Nodes/NodeTypeSelector.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/system/nodes-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/components/node-maintenance-modal.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/components/nodes/nodes.ts","webpack://@ytsaurus/ui/./src/ui/store/reducers/components/proxies/proxies/proxy.js","webpack://@ytsaurus/ui/./src/ui/store/actions/components/proxies/proxies.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/components/node-maintenance-modal.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/components/nodes/nodes/data.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/components/nodes/nodes/predicates.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/system/nodes.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/tables.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/thor/index.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/thor/support.ts","webpack://@ytsaurus/ui/./src/ui/utils/components/nodes/node.ts","webpack://@ytsaurus/ui/./src/ui/utils/components/nodes/setup.ts"],"sourcesContent":["import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n","import React from 'react';\nimport unipika from '../../common/thor/unipika';\nimport block from 'bem-cn-lite';\n\nimport Link from '../../components/Link/Link';\n\nimport hammer from '../../common/hammer';\nimport {showErrorPopup} from '../../utils/utils';\n\nimport './utils.scss';\n\nfunction wrapRenderMethods(templates) {\n return Object.keys(templates).reduce((newTemplates, key) => {\n newTemplates[key] = templates[key];\n\n return newTemplates;\n }, {});\n}\n\n/**\n * Template must be a scoped function, because they are bound to elements-table component instance\n * @param {ViewModel} item\n * @param {String} columnName\n */\nfunction defaultTemplate(item, columnName) {\n return String(hammer.format['ValueOrDefault'](item[columnName]));\n}\n\nfunction prepareTextProps(text, asHTML) {\n const props = {};\n\n if (asHTML) {\n // Need to render html strings\n props.dangerouslySetInnerHTML = {__html: text};\n } else {\n props.children = unipika.decode(String(text));\n }\n\n return props;\n}\n\nexport function renderText(text, settings = {}) {\n let className = block('elements-text');\n\n if (settings.mix) {\n className = className(\n false,\n block(settings.mix.block)(settings.mix.elem, {\n ...settings.mix.mods,\n }),\n );\n } else {\n className = className();\n }\n\n const textProps = prepareTextProps(text, settings.asHTML);\n\n const title = settings.title || text;\n\n return <span {...textProps} title={title} className={className} />;\n}\n\nexport function printColumnAsBytes(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Bytes'](column.get(item));\n}\n\nexport function printColumnAsNumber(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Number'](column.get(item));\n}\n\nexport function printColumnAsTimeDurationWithMs(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['TimeDuration'](column.get(item), {\n format: 'milliseconds',\n });\n}\n\nexport function printColumnAsReadableField(item, columnName) {\n const column = this.getColumn(columnName);\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['ReadableField'](column.get(item))}\n </span>\n );\n}\n\nexport function printColumnAsTime(item, columnName) {\n const value = this?.getColumn ? this.getColumn(columnName).get(item) : item[columnName];\n return <ColumnAsTime value={value} />;\n}\n\nexport function ColumnAsTime({value}) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['DateTime'](value, {format: 'full'})}\n </span>\n );\n}\n\nexport function printColumnAsError(error) {\n const showError = () => {\n showErrorPopup(error, {hideOopsMsg: true});\n };\n return typeof error === 'object' ? (\n <Link theme=\"ghost\" onClick={showError}>\n View\n </Link>\n ) : (\n hammer.format.NO_VALUE\n );\n}\n\n// Using prepared table data\nexport function asBytes(item, columnName) {\n return hammer.format['Bytes'](item[columnName]);\n}\n\nexport function asNumber(item, columnName) {\n return hammer.format['Number'](item[columnName]);\n}\n\nexport default {\n __default__: defaultTemplate,\n _templates: {},\n add: function (templateId, templates) {\n this._templates[templateId] = wrapRenderMethods(templates);\n },\n get: function (templateId) {\n return this._templates[templateId] || {};\n },\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../common/hammer/format';\nimport Label, {LabelTheme} from '../../../components/Label/Label';\nimport StatusBlock from '../../../components/StatusBlock/StatusBlock';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\n\nimport './NodeColumns.scss';\n\nconst block = cn('yt-node-columns');\n\nconst ROLE_THEME = {\n default: 'default',\n control: 'default',\n data: 'default',\n} as const;\n\nconst STATE_THEME: Record<string, LabelTheme> = {\n online: 'success',\n offline: 'danger',\n} as const;\n\nexport function NodeColumnState({state}: {state: 'online' | 'offline' | string}) {\n const text = format.FirstUppercase(state);\n const theme = STATE_THEME[state] ?? 'default';\n\n return <Label theme={theme} className={block('state')} type=\"text\" text={text} />;\n}\n\nexport function NodeColumnBanned({banned}: {banned: boolean}) {\n return banned ? <StatusBlock text=\"B\" theme=\"banned\" /> : format.NO_VALUE;\n}\n\nexport function NodeColumnRole({role}: {role: 'default' | 'control' | 'data'}) {\n const theme = ROLE_THEME[role] || 'info';\n const text = format.Address(role);\n\n return <Label theme={theme} type=\"text\" text={text} />;\n}\n\nexport function NodeColumnText({text}: {text: string}) {\n return (\n <div className={block('text', 'elements-column_with-hover-button')}>\n <div className={block('text-content')} title={text}>\n {text}\n </div>\n <ClipboardButton text={text} view=\"flat-secondary\" size=\"s\" />\n </div>\n );\n}\n\nexport function ClickableId({\n text,\n onClick,\n allowTooltip,\n format = (v) => v,\n}: {\n text: string;\n onClick?: () => void;\n allowTooltip?: boolean;\n format?: (v: string) => string;\n}) {\n return (\n <div className=\"elements-column_type_id elements-column_with-hover-button\">\n <ClickableText\n color=\"primary\"\n onClick={() => onClick?.()}\n className={'elements-monospace elements-ellipsis'}\n >\n <Tooltip\n className={block('clickable-column-tooltip')}\n content={allowTooltip ? format(text) : null}\n >\n {format(text)}\n </Tooltip>\n </ClickableText>\n \n <ClipboardButton text={text} view=\"flat-secondary\" size=\"s\" />\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport withVisible from '../../../../../hocs/withVisible';\nimport hammer from '../../../../../common/hammer';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\n\nimport './MemoryProgress.scss';\n\nconst block = cn('nodes-memory');\n\nclass MemoryProgress extends Component {\n static propTypes = {\n // from parent\n memoryText: PropTypes.string.isRequired,\n memoryData: PropTypes.arrayOf(\n PropTypes.shape({\n color: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n value: PropTypes.number.isRequired,\n rawData: PropTypes.shape({\n limit: PropTypes.number,\n used: PropTypes.number,\n }),\n }),\n ).isRequired,\n };\n\n progress = React.createRef();\n\n renderProgress() {\n const {memoryText, memoryData} = this.props;\n\n return <Progress stack={memoryData} text={memoryText} />;\n }\n\n renderItem(category) {\n const rawDataUsed = category.rawData?.used;\n const rawDataLimit = category.rawData?.limit;\n const rawDataLimitIsNumber = typeof rawDataLimit === 'number';\n\n return (\n <li key={category.name} className={block('category')}>\n <div className={block('category-legend')}>\n <div\n className={block('category-legend-color')}\n style={{backgroundColor: category.color}}\n />\n <strong className={block('category-legend-title')}>\n {hammer.format['ReadableField'](category.name)}\n </strong>\n </div>\n <div className={block('category-data')}>\n <span>{hammer.format['Bytes'](rawDataUsed)}</span>\n {rawDataLimitIsNumber && ' / '}\n {rawDataLimitIsNumber && <span>{hammer.format['Bytes'](rawDataLimit)}</span>}\n </div>\n </li>\n );\n }\n\n renderPopupContent() {\n const {memoryData} = this.props;\n\n return (\n memoryData.length > 0 && (\n <div className={block('popup')}>\n <ul className={block('content')}>\n {map_(memoryData, (category) => this.renderItem(category))}\n </ul>\n </div>\n )\n );\n }\n\n render() {\n return (\n <Tooltip className={block()} content={this.renderPopupContent()} disableInline>\n <div>{this.renderProgress()}</div>\n </Tooltip>\n );\n }\n}\n\nexport default withVisible(MemoryProgress);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport SimpleModal from '../../../../components/Modal/SimpleModal';\nimport Error from '../../../../components/Error/Error';\nimport Icon from '../../../../components/Icon/Icon';\nimport Link from '../../../../components/Link/Link';\n\nimport withVisible from '../../../../hocs/withVisible';\n\nconst block = cn('elements-column');\n\nclass Version extends Component {\n static propTypes = {\n // from parent component\n version: PropTypes.string.isRequired,\n error: PropTypes.object,\n\n // from hoc\n visible: PropTypes.bool.isRequired,\n handleClose: PropTypes.func.isRequired,\n handleShow: PropTypes.func.isRequired,\n };\n\n renderVersion() {\n const {version} = this.props;\n\n return (\n <div className={block({type: 'id', 'with-hover-button': true})} title={version}>\n <span className=\"elements-monospace elements-ellipsis\">{version}</span>\n \n <ClipboardButton\n text={version}\n view=\"flat-secondary\"\n size=\"s\"\n title={'Copy ' + version}\n />\n </div>\n );\n }\n\n renderErrorVersion() {\n const {handleShow, error, handleClose, visible} = this.props;\n\n return (\n <div className=\"elements-monospace elements-ellipsis\">\n <Icon awesome=\"exclamation-triangle\" /> Error  \n <Link theme=\"ghost\" onClick={handleShow}>\n View\n </Link>\n <SimpleModal visible={visible} onCancel={handleClose} onOutsideClick={handleClose}>\n <Error error={error} />\n </SimpleModal>\n </div>\n );\n }\n\n render() {\n const {error} = this.props;\n\n return error ? this.renderErrorVersion() : this.renderVersion();\n }\n}\n\nexport default withVisible(Version);\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport Button from '../../../../../components/Button/Button';\nimport Icon from '../../../../../components/Icon/Icon';\nimport ChartLink from '../../../../../components/ChartLink/ChartLink';\n\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {showNodeMaintenance} from '../../../../../store/actions/components/node-maintenance-modal';\n\nimport UIFactory from '../../../../../UIFactory';\nimport {RootState} from '../../../../../store/reducers';\n\nexport type NodeActionsProps = {node: {host: string}} & ConnectedProps<typeof connector>;\n\nclass NodeActions extends React.Component<NodeActionsProps> {\n handleEditClick = () => {\n const {node, showNodeMaintenance} = this.props;\n\n showNodeMaintenance({\n address: node.host,\n component: 'cluster_node',\n });\n };\n\n render() {\n const {node, cluster} = this.props;\n const {url, title} = UIFactory.getComponentsNodeDashboardUrl({cluster, host: node.host});\n\n return (\n <React.Fragment>\n <ClickableAttributesButton\n title={node.host}\n path={`//sys/cluster_nodes/${node.host}`}\n withTooltip\n />\n\n <ChartLink\n url={url}\n wrapContent={(node) => (\n <Button\n tooltipProps={{\n placement: 'bottom',\n content: title,\n }}\n target=\"_blank\"\n view=\"flat-secondary\"\n size=\"m\"\n withTooltip\n >\n {node}\n </Button>\n )}\n />\n <Button onClick={this.handleEditClick} view=\"flat-secondary\" size=\"m\" withTooltip>\n <Icon face=\"regular\" awesome=\"pencil\" />\n </Button>\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n return {\n cluster: getCluster(state),\n };\n};\n\nconst mapDispatchToProps = {\n showNodeMaintenance,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(NodeActions);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {COMPONENTS_NODES_TABLE_ID} from '../../../../../constants/components/nodes/nodes';\nimport ColumnHeader, {\n ColumnHeaderProps,\n HasSortColumn,\n} from '../../../../../components/ColumnHeader/ColumnHeader';\nimport {toggleColumnSortOrder} from '../../../../../store/actions/tables';\nimport {getTables} from '../../../../../store/selectors/tables';\nimport {NodesTableColumnNames} from '../../../../../pages/components/tabs/nodes/tables';\nimport {oldSortStateToOrderType} from '../../../../../utils/sort-helpers';\n\nexport function NodesColumnHeader(\n props: HasSortColumn<NodesTableColumnNames> & Pick<ColumnHeaderProps, 'align'>,\n) {\n const dispatch = useDispatch();\n const sortState = useSelector(getTables)[COMPONENTS_NODES_TABLE_ID];\n const order = oldSortStateToOrderType(sortState);\n\n const column = props.options?.find(({column}) => sortState.field === column);\n\n return (\n <ColumnHeader\n {...props}\n column={props.options ? column?.column ?? props.column : props.column}\n order={column ? order : undefined}\n onSort={(columnName) => {\n const colInfo = props.options?.find(({column}) => columnName === column);\n dispatch(\n toggleColumnSortOrder({\n columnName,\n withUndefined: colInfo?.withUndefined,\n allowUnordered: colInfo?.allowUnordered,\n tableId: COMPONENTS_NODES_TABLE_ID,\n }),\n );\n }}\n />\n );\n}\n","import React from 'react';\n\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport merge_ from 'lodash/merge';\nimport reduce_ from 'lodash/reduce';\nimport sortBy_ from 'lodash/sortBy';\n\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport {COMPONENTS_NODES_TABLE_ID} from '../../../../constants/components/nodes/nodes';\nimport {DESC_ASC_UNORDERED, compareArraysBySizeThenByItems} from '../../../../utils/sort-helpers';\n\nimport Version from '../../../../pages/components/tabs/nodes/Version';\nimport StatusBlock, {StatusBlockTheme} from '../../../../components/StatusBlock/StatusBlock';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport NodeActions from '../../../../pages/components/tabs/nodes/NodeActions/NodeActions';\nimport MemoryProgress from '../../../../pages/components/tabs/nodes/MemoryProgress/MemoryProgress';\nimport {Host} from '../../../../containers/Host/Host';\n\nimport hammer from '../../../../common/hammer';\nimport {TABLET_SLOTS, renderLabel} from '../../../../components/templates/components/nodes/nodes';\nimport type {Node, TabletSlotState} from '../../../../store/reducers/components/nodes/nodes/node';\nimport type {FIX_MY_TYPE} from '../../../../types';\nimport {NodeColumnBanned, NodeColumnState} from '../../../../pages/components/tabs/NodeColumns';\nimport {NodesColumnHeader} from '../../../../pages/components/tabs/nodes/Nodes/NodesColumnHeader';\nimport {ColumnInfo} from '../../../../components/ElementsTable/ElementsTableHeader';\nimport {progressText} from '../../../../utils/progress';\n\nimport './tables.scss';\n\nconst block = cn('components-nodes-templates');\n\nexport const PropertiesByColumn = {\n __default__: ['IOWeight'],\n actions: ['host'],\n alert_count: ['alertCount'],\n banned: ['banned'],\n chunks: ['chunks'],\n cpu: ['cpuProgress', 'cpuText'],\n cpu_limit: ['cpu'],\n cpu_usage: ['cpu'],\n data_center: ['dataCenter'],\n decommissioned: ['decommissioned'],\n elections: ['tabletSlots'],\n elections_chaos: ['chaosSlots'],\n follower_recovery: ['tabletSlots'],\n follower_recovery_chaos: ['chaosSlots'],\n following: ['tabletSlots'],\n following_chaos: ['chaosSlots'],\n full: ['full'],\n gpu: ['gpu'],\n gpu_usage: ['gpu'],\n gpu_limit: ['gpu'],\n host: ['cluster', 'host'],\n io_weight: ['IOWeight'],\n last_seen: ['lastSeenTime'],\n leader_recovery: ['tabletSlots'],\n leader_recovery_chaos: ['chaosSlots'],\n leading: ['tabletSlots'],\n leading_chaos: ['chaosSlots'],\n locations: ['locations', 'enabledLocations'],\n memory_total: ['memoryProgress', 'memoryTotalText'],\n memory: ['memoryData', 'memoryProgress', 'memoryText'],\n memory_limit: ['memoryTotal'],\n memory_usage: ['memoryTotal'],\n network: ['networkProgress', 'networkText'],\n network_usage: ['network'],\n network_limit: ['network'],\n none: ['tabletSlots'],\n none_chaos: ['chaosSlots'],\n physical_host: ['physicalHost'],\n flavors: ['flavors'],\n rack: ['rack'],\n removal_slots: ['removalSlots', 'removalSlotsProgress'],\n removal_slots_usage: ['removalSlots'],\n removal_slots_limit: ['removalSlots'],\n repair_slots: ['repairSlots', 'repairSlotsProgress'],\n repair_slots_usage: ['repairSlots'],\n repair_slots_limit: ['repairSlots'],\n replication_slots: ['replicationSlots', 'replicationSlotsProgress'],\n replication_slots_usage: ['replicationSlots'],\n replication_slots_limit: ['replicationSlots'],\n scheduler_jobs: ['disableJobs'],\n seal_slots: ['sealSlots', 'sealSlotsProgress'],\n seal_slots_usage: ['sealSlots'],\n seal_slots_limit: ['sealSlots'],\n sessions: ['sessions'],\n space_limit: ['spaceTotal'],\n space_usage: ['spaceUsed'],\n space: ['spaceProgress', 'spaceText'],\n state: ['state'],\n stopped: ['tabletSlots'],\n stopped_chaos: ['chaosSlots'],\n system_tags: ['systemTags'],\n tablet_cells: ['disableTabletCells'],\n tablet_memory_dynamic: ['tabletDynamicMemory'],\n tablet_memory_dynamic_usage: ['tabletDynamicMemory'],\n tablet_memory_dynamic_limit: ['tabletDynamicMemory'],\n tablet_memory_static: ['tabletStaticMemory'],\n tablet_memory_static_usage: ['tabletStaticMemory'],\n tablet_memory_static_limit: ['tabletStaticMemory'],\n tablet_memory: ['tabletStaticMemory', 'tabletDynamicMemory'],\n tablet_slots: ['tabletSlots'],\n user_slots: ['userSlots', 'userSlotsProgress'],\n user_slots_usage: ['userSlots'],\n user_slots_limit: ['userSlots'],\n user_tags: ['userTags'],\n version: ['version'],\n write_sessions: ['disableWriteSession'],\n} as const;\n\nexport type NodesTableColumnNames = keyof typeof PropertiesByColumn;\n\nexport type NodeWithProps<T extends keyof typeof PropertiesByColumn> = Pick<\n Node & {cluster: string},\n (typeof PropertiesByColumn)[T][number]\n>;\n\ntype ItemDef<P extends keyof typeof PropertiesByColumn> = {\n align?: 'left' | 'center' | 'right';\n get?: (node: NodeWithProps<P>) => void;\n sort?: ((node: NodeWithProps<P>) => void) | boolean;\n};\n\ntype Items = {\n [P in keyof typeof PropertiesByColumn]?: ItemDef<P> & {\n group?: boolean;\n items?: Record<string, ItemDef<P>>;\n set?: string[];\n };\n};\n\nconst ioWeight: NonNullable<Items['io_weight']> = {\n group: true,\n items: {\n default: {\n get(node) {\n return node.IOWeight.default;\n },\n sort: true,\n align: 'center',\n },\n cache: {\n get(node) {\n return node.IOWeight.cache;\n },\n sort: true,\n align: 'center',\n },\n ssd_blobs: {\n get(node) {\n return node.IOWeight.ssd_blobs;\n },\n sort: true,\n align: 'center',\n },\n ssd_journals: {\n get(node) {\n return node.IOWeight.ssd_journals;\n },\n sort: true,\n align: 'center',\n },\n },\n set: ['default', 'ssd_blobs', 'ssd_journals'],\n};\n\nconst nodesTableProps = {\n size: 's',\n virtual: true,\n virtualType: 'simple',\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: COMPONENTS_NODES_TABLE_ID,\n computeKey(node: NodeWithProps<'host'>) {\n return node.host;\n },\n columns: {\n items: {\n host: {\n get(node) {\n return node.host;\n },\n sort: true,\n align: 'left',\n },\n physical_host: {\n get(node) {\n return node.physicalHost;\n },\n sort: true,\n align: 'left',\n },\n flavors: {\n get(node) {\n return node.flavors;\n },\n sort: true,\n compareFn: compareArraysBySizeThenByItems,\n align: 'left',\n },\n state: {\n get(node) {\n return node.state;\n },\n sort: true,\n align: 'center',\n },\n data_center: {\n get(node) {\n return node.dataCenter;\n },\n sort: true,\n caption: 'DC',\n align: 'left',\n tooltipProps: {placement: 'bottom', content: 'Data Center'},\n },\n rack: {\n get(node) {\n return hammer.format['RackToVector'](node.rack);\n },\n sort: true,\n align: 'left',\n },\n user_tags: {\n get(node) {\n return node.userTags || -1;\n },\n sort(node) {\n return !node.userTags?.length ? undefined : node.userTags;\n },\n compareFn: compareArraysBySizeThenByItems,\n align: 'left',\n },\n system_tags: {\n get(node) {\n return node.systemTags || -1;\n },\n sort(node) {\n return node.systemTags || [];\n },\n compareFn: compareArraysBySizeThenByItems,\n align: 'left',\n },\n banned: {\n get(item) {\n return item.banned;\n },\n align: 'center',\n sort: true,\n caption: 'B',\n tooltipProps: {placement: 'bottom', content: 'Banned'},\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n decommissioned: {\n get(item) {\n return item.decommissioned;\n },\n align: 'center',\n sort: true,\n caption: 'D',\n tooltipProps: {\n placement: 'bottom',\n content: 'Decommissioned',\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n full: {\n get(item) {\n return item.full;\n },\n align: 'center',\n sort: true,\n caption: 'F',\n tooltipProps: {placement: 'bottom', content: 'Full'},\n },\n alert_count: {\n get(item) {\n return item.alertCount;\n },\n sort(item) {\n return item.alertCount;\n },\n align: 'center',\n caption: 'A',\n tooltipProps: {placement: 'bottom', content: 'Alerts'},\n },\n scheduler_jobs: {\n get(node) {\n return node.disableJobs;\n },\n sort: true,\n align: 'left',\n },\n write_sessions: {\n get(node) {\n return node.disableWriteSession;\n },\n sort: true,\n align: 'left',\n },\n tablet_cells: {\n get(node) {\n return node.disableTabletCells;\n },\n sort: true,\n align: 'left',\n },\n version: {\n get(node) {\n return node.version;\n },\n sort: true,\n align: 'left',\n },\n last_seen: {\n get(node) {\n return node.lastSeenTime;\n },\n sort: true,\n align: 'left',\n },\n space: {\n get(node) {\n return node.spaceProgress;\n },\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"space\"\n title=\"Space\"\n options={[\n {\n column: 'space',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'space_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'space_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n sortWithUndefined: true,\n align: 'center',\n },\n space_limit: {\n get(node) {\n return node.spaceTotal;\n },\n sort: true,\n sortWithUndefined: true,\n align: 'right',\n },\n space_usage: {\n get(node) {\n return node.spaceUsed;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n locations: {\n get(node) {\n return [\n node.locations && node.locations.length,\n node.locations && node.enabledLocations.length,\n ];\n },\n sort: true,\n align: 'center',\n },\n chunks: {\n get(node) {\n return node.chunks;\n },\n sort: true,\n sortWithUndefined: true,\n align: 'left',\n },\n sessions: {\n get(node) {\n return node.sessions;\n },\n sort: true,\n sortWithUndefined: true,\n align: 'left',\n },\n cpu: {\n get(node) {\n return node.cpuProgress;\n },\n sortWithUndefined: true,\n align: 'center',\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"cpu\"\n options={[\n {\n column: 'cpu',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'cpu_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'cpu_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n title=\"CPU\"\n />\n );\n },\n },\n cpu_limit: {\n get(node) {\n return node.cpu?.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n cpu_usage: {\n get(node) {\n return node.cpu?.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n gpu: {\n get(node) {\n return node.gpu?.progress;\n },\n sortWithUndefined: true,\n align: 'center',\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"gpu\"\n options={[\n {\n column: 'gpu',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'gpu_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'gpu_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n title=\"GPU\"\n />\n );\n },\n },\n gpu_limit: {\n get(node) {\n return node.gpu?.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n gpu_usage: {\n get(node) {\n return node.gpu?.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n memory: {\n get(node) {\n return node.memoryProgress;\n },\n sortWithUndefined: true,\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"memory\"\n title=\"Memory\"\n options={[\n {\n column: 'memory',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'memory_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'memory_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n memory_usage: {\n get(node) {\n return node.memoryTotal.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n memory_limit: {\n get(node) {\n return node.memoryTotal.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n memory_total: {\n get(node) {\n return node.memoryProgress;\n },\n sort: true,\n align: 'center',\n },\n network: {\n get(node) {\n return node.networkProgress;\n },\n sortWithUndefined: true,\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"network\"\n title=\"Network\"\n options={[\n {\n column: 'network',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'network_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'network_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n network_usage: {\n get(node) {\n return node.network.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n network_limit: {\n get(node) {\n return node.network.limit;\n },\n sortWithUndefined: true,\n hiddne: true,\n },\n repair_slots: {\n get(node) {\n return node.repairSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"repair_slots\"\n title=\"Repair slots\"\n options={[\n {\n column: 'repair_slots',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'repair_slots_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'repair_slots_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n repair_slots_usage: {\n get(node) {\n return node.repairSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n repair_slots_limit: {\n get(node) {\n return node.repairSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n removal_slots: {\n get(node) {\n return node.removalSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"removal_slots\"\n title=\"Removal slots\"\n options={[\n {\n column: 'removal_slots',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'removal_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'removal_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n removal_slots_usage: {\n get(node) {\n return node.removalSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n removal_slots_limit: {\n get(node) {\n return node.removalSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n replication_slots: {\n get(node) {\n return node.replicationSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"replication_slots\"\n title=\"Replication slots\"\n options={[\n {\n column: 'replication_slots',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'replication_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'replication_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n replication_slots_usage: {\n get(node) {\n return node.replicationSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n replication_slots_limit: {\n get(node) {\n return node.replicationSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n seal_slots: {\n get(node) {\n return node.sealSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"seal_slots\"\n title=\"Seal slots\"\n options={[\n {\n column: 'seal_slots',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'seal_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'seal_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n seal_slots_usage: {\n get(node) {\n return node.sealSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n seal_slots_limit: {\n get(node) {\n return node.sealSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n user_slots: {\n get(node) {\n return node.userSlotsProgress;\n },\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"user_slots\"\n title=\"User slots\"\n options={[\n {\n column: 'user_slots',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'user_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'user_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n user_slots_usage: {\n get(node) {\n return node.userSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n user_slots_limit: {\n get(node) {\n return node.userSlots.limits;\n },\n align: 'center',\n sortWithUndefined: true,\n hidden: true,\n },\n tablet_slots: {\n get(node) {\n if (node.tabletSlots && node.tabletSlots.raw && node.tabletSlots.raw.length) {\n return reduce_(\n node.tabletSlots.raw,\n (sum, slot) => (slot.state === 'none' ? sum : sum + 1),\n 0,\n );\n }\n\n return -1;\n },\n sort: true,\n align: 'left',\n },\n none: {\n get(node) {\n return node.tabletSlots?.byState.none;\n },\n sort(node) {\n return node.tabletSlots?.byState.none?.length;\n },\n // sort: true,\n align: 'center',\n ...makeCaptionProps('TS None', 'Tablet Slots None'),\n },\n none_chaos: {\n get(node) {\n return node.chaosSlots?.byState.none;\n },\n sort(node) {\n return node.chaosSlots?.byState.none?.length;\n },\n // sort: true,\n align: 'center',\n ...makeCaptionProps('CS None', 'Chaos Slots None'),\n },\n leading: {\n get(node) {\n return node.tabletSlots?.byState.leading;\n },\n sort(node) {\n return node.tabletSlots?.byState?.leading?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Leading', 'Tablet Slots Leading'),\n },\n leading_chaos: {\n get(node) {\n return node.chaosSlots?.byState.leading;\n },\n sort(node) {\n return node.chaosSlots?.byState?.leading?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Leading', 'Chaos Slots Leading'),\n },\n following: {\n get(node) {\n return node.tabletSlots?.byState.following;\n },\n sort(node) {\n return node.tabletSlots?.byState?.following?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Following', 'Tablet Slots Following'),\n },\n following_chaos: {\n get(node) {\n return node.chaosSlots?.byState.following;\n },\n sort(node) {\n return node.chaosSlots?.byState?.following?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Following', 'Chaos Slots Following'),\n },\n follower_recovery: {\n get(node) {\n return node.tabletSlots?.byState.follower_recovery;\n },\n sort(node) {\n return node.tabletSlots?.byState.follower_recovery?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS FR', 'Tablet Slots Follower Recovery'),\n },\n follower_recovery_chaos: {\n get(node) {\n return node.chaosSlots?.byState.follower_recovery;\n },\n sort(node) {\n return node.chaosSlots?.byState.follower_recovery?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS FR', 'Chaos Slots Follower Recovery'),\n },\n leader_recovery: {\n get(node) {\n return node.tabletSlots?.byState['leader_recovery'];\n },\n sort: true,\n align: 'center',\n ...makeCaptionProps('TS LR', 'Tablet Slots Leader Recovery'),\n },\n leader_recovery_chaos: {\n get(node) {\n return node.chaosSlots?.byState['leader_recovery'];\n },\n sort: true,\n align: 'center',\n ...makeCaptionProps('CS LR', 'Chaos Slots Leader Recovery'),\n },\n stopped: {\n get(node) {\n return node.tabletSlots?.byState.stopped;\n },\n sort(node) {\n return node.tabletSlots?.byState.stopped?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Stopped', 'Tablet Slots Stopped'),\n },\n stopped_chaos: {\n get(node) {\n return node.chaosSlots?.byState.stopped;\n },\n sort(node) {\n return node.chaosSlots?.byState.stopped?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Stopped', 'Chaos Slots Stopped'),\n },\n elections: {\n get(node) {\n return node.tabletSlots?.byState.elections;\n },\n sort(node) {\n return node.tabletSlots?.byState.elections?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Elections', 'Tablet Slots Elections'),\n },\n elections_chaos: {\n get(node) {\n return node.chaosSlots?.byState.elections;\n },\n sort(node) {\n return node.chaosSlots?.byState.elections?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Elections', 'Chaos Slots Elections'),\n },\n tablet_memory: {\n group: true,\n items: {\n static: {\n get(node) {\n return node.tabletStaticMemory.progress;\n },\n renderHeader: (column: ColumnInfo) => {\n return (\n <NodesColumnHeader\n column=\"tablet_memory_static\"\n align={column.align}\n title=\"Static memory\"\n options={[\n {\n column: 'tablet_memory_static',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_static_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_static_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n sortWithUndefined: true,\n align: 'center',\n },\n static_usage: {\n get(node) {\n return node.tabletStaticMemory.used;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n static_limit: {\n get(node) {\n return node.tabletStaticMemory.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n dynamic: {\n get(node) {\n return node.tabletDynamicMemory.progress;\n },\n renderHeader: (column: ColumnInfo) => {\n return (\n <NodesColumnHeader\n column=\"tablet_memory_dynamic\"\n align={column.align}\n title=\"Dynamic memory\"\n options={[\n {\n column: 'tablet_memory_dynamic',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_dynamic_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_dynamic_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n sortWithUndefined: true,\n align: 'center',\n },\n dynamic_usage: {\n get(node) {\n return node.tabletDynamicMemory.used;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n dynamic_limit: {\n get(node) {\n return node.tabletDynamicMemory.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n },\n set: ['static', 'dynamic'],\n },\n io_weight: ioWeight,\n actions: {\n get(node) {\n return node.host;\n },\n sort: false,\n caption: '',\n align: 'right',\n },\n } as Items,\n sets: {\n default: {\n items: [\n 'host',\n 'physical_host',\n 'user_tags',\n 'system_tags',\n 'state',\n 'data_center',\n 'rack',\n 'banned',\n 'decommissioned',\n 'full',\n 'alert_count',\n 'version',\n 'last_seen',\n 'actions',\n ],\n },\n storage: {\n items: ['host', 'space', 'sessions', 'chunks', 'io_weight', 'actions'],\n },\n cpu_and_memory: {\n items: ['host', 'cpu', 'memory', 'network', 'actions'],\n },\n resources: {\n items: [\n 'host',\n 'user_slots',\n 'seal_slots',\n 'repair_slots',\n 'removal_slots',\n 'replication_slots',\n 'actions',\n ],\n },\n tablets: {\n items: ['host', 'tablet_slots', 'tablet_memory', 'actions'],\n },\n tablet_slots: {\n items: [\n 'host',\n 'none',\n 'leading',\n 'following',\n 'follower_recovery',\n 'leader_recovery',\n 'stopped',\n 'elections',\n ],\n },\n chaos_slots: {\n items: [\n 'host',\n 'none_chaos',\n 'leading_chaos',\n 'following_chaos',\n 'follower_recovery_chaos',\n 'leader_recovery_chaos',\n 'stopped_chaos',\n 'elections_chaos',\n ],\n },\n custom: {\n items: [\n 'host',\n 'user_tags',\n 'state',\n 'banned',\n 'decommissioned',\n 'full',\n 'alert_count',\n 'last_seen',\n 'actions',\n ],\n },\n },\n },\n templates: {\n data: {\n onMemoryProgressMouseEnter() {},\n onMemoryProgressMouseLeave() {},\n },\n },\n};\n\nexport const defaultColumns = nodesTableProps.columns.sets.custom.items;\n\nfunction renderTags(tags?: Array<string | number>, themes?: StatusBlockTheme[], flexType?: 'flex') {\n return tags?.length ? (\n <TagsContainer flexType={flexType}>\n {map_(tags, (tag, index) => (\n <StatusBlock key={tag} theme={themes?.[index]} text={tag} />\n ))}\n </TagsContainer>\n ) : (\n hammer.format.NO_VALUE\n );\n}\n\nfunction TagsContainer({\n children,\n flexType = 'inline-flex',\n}: {\n children: React.ReactNode;\n flexType?: 'flex' | 'inline-flex';\n}) {\n return (\n <div className={block('tags-container', {inline: 'inline-flex' === flexType})}>\n {children}\n </div>\n );\n}\n\nconst IO_WEIGHT_PREFIX = 'io_weight_';\n\ntype Templates = {\n [P in keyof typeof PropertiesByColumn]?: (\n item: NodeWithProps<P>,\n columnName: string,\n ) => React.ReactNode;\n};\n\nexport const NODES_TABLE_TEMPLATES: Templates = {\n __default__(item, columnName) {\n if (typeof item.IOWeight === 'object' && columnName.startsWith(IO_WEIGHT_PREFIX)) {\n const mediumName = columnName.slice(IO_WEIGHT_PREFIX.length);\n\n return hammer.format['Number'](item.IOWeight[mediumName]);\n }\n },\n host(item) {\n return <Host address={item.host} />;\n },\n state(item) {\n return <NodeColumnState state={item.state} />;\n },\n banned(item) {\n return (\n <TagsContainer>\n <NodeColumnBanned banned={item.banned} />\n </TagsContainer>\n );\n },\n decommissioned(item) {\n return item.decommissioned ? renderTags(['D'], ['decommissioned']) : hammer.format.NO_VALUE;\n },\n flavors(item) {\n return renderTags(item.flavors);\n },\n full(item) {\n return item.full ? renderTags(['F'], ['full']) : hammer.format.NO_VALUE;\n },\n\n alert_count(item) {\n return item.alertCount! > 0\n ? renderTags([String(item.alertCount)], ['alerts'])\n : hammer.format.NO_VALUE;\n },\n\n physical_host(item, columnName) {\n return (\n <div\n className=\"elements-column_type_id elements-column_with-hover-button\"\n title={item.physicalHost}\n >\n <span className=\"elements-monospace elements-ellipsis\">\n {hammer.format['Address'](item.physicalHost)}\n </span>\n \n <ClipboardButton\n text={item.physicalHost}\n view=\"flat-secondary\"\n size=\"s\"\n title={'Copy ' + columnName}\n />\n </div>\n );\n },\n\n user_tags(item) {\n return renderTags(item.userTags, [], 'flex');\n },\n\n system_tags(item) {\n return renderTags(item.systemTags, [], 'flex');\n },\n\n scheduler_jobs(item) {\n return renderLabel(item.disableJobs);\n },\n write_sessions(item) {\n return renderLabel(item.disableWriteSession);\n },\n tablet_cells(item) {\n return renderLabel(item.disableTabletCells);\n },\n\n data_center(item) {\n return item.dataCenter?.toUpperCase() || hammer.format.NO_VALUE;\n },\n\n rack(item) {\n return <span className=\"elements-monospace\">{hammer.format['Address'](item.rack)}</span>;\n },\n\n version(item) {\n const {version} = item;\n\n return <Version version={version} />;\n },\n\n last_seen(item) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['DateTime'](item.lastSeenTime, {\n format: 'full',\n })}\n </span>\n );\n },\n\n actions(item) {\n return <NodeActions node={item} />;\n },\n\n space(item) {\n return <Progress value={item.spaceProgress || 0} text={item.spaceText} theme=\"success\" />;\n },\n\n space_limit(item) {\n return hammer.format['Bytes'](item.spaceTotal);\n },\n\n locations(item) {\n return item.locations\n ? progressText(item.enabledLocations.length, item.locations.length)\n : null;\n },\n\n sessions(item) {\n return hammer.format['Number'](item.sessions);\n },\n\n chunks(item) {\n return hammer.format['Number'](item.chunks);\n },\n\n io_weight(item) {\n return hammer.format['Number'](item.IOWeight);\n },\n\n cpu(item) {\n return <Progress value={item.cpuProgress || 0} text={item.cpuText} theme=\"success\" />;\n },\n\n gpu(item) {\n return (\n <Progress\n value={item.gpu?.progress || 0}\n text={item.gpu?.progressText}\n theme=\"success\"\n />\n );\n },\n\n memory(item) {\n return (\n <MemoryProgress\n memoryData={item.memoryData}\n memoryText={item.memoryText}\n memoryProgress={item.memoryProgress || 0}\n />\n );\n },\n\n memory_total(item) {\n return (\n <Progress\n value={item.memoryProgress || 0}\n text={item.memoryTotalText}\n theme=\"success\"\n />\n );\n },\n\n network(item) {\n return (\n <Progress value={item.networkProgress || 0} text={item.networkText} theme=\"success\" />\n );\n },\n\n repair_slots(item) {\n const text = progressText(item.repairSlots.usage, item.repairSlots.limits);\n\n return <Progress value={item.repairSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n removal_slots(item) {\n const text = progressText(item.removalSlots.usage, item.removalSlots.limits);\n\n return <Progress value={item.removalSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n replication_slots(item) {\n const text = progressText(item.replicationSlots.usage, item.replicationSlots.limits);\n\n return <Progress value={item.replicationSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n seal_slots(item) {\n const text = progressText(item.sealSlots.usage, item.sealSlots.limits);\n\n return <Progress value={item.sealSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n user_slots(item) {\n const text = progressText(item.userSlots.usage, item.userSlots.limits);\n\n return <Progress value={item.userSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n tablet_slots(item) {\n if (item.tabletSlots) {\n const statuses = sortBy_(keys_(item.tabletSlots.byState));\n\n return (\n <TagsContainer>\n {map_(statuses, (state: TabletSlotState) => {\n const tabletSlots = item.tabletSlots.byState[state]!;\n const {text, theme} = TABLET_SLOTS[state];\n const label = `${text}: ${tabletSlots.length}`;\n\n return <StatusBlock theme={theme} text={label} key={state} />;\n })}\n </TagsContainer>\n );\n }\n\n return null;\n },\n\n none(item) {\n const data = item.tabletSlots?.byState.none;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n none_chaos(item) {\n const data = item.chaosSlots?.byState.none;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n leading(item) {\n const data = item.tabletSlots?.byState.leading;\n\n return data ? renderTags([data.length], ['success']) : hammer.format.NO_VALUE;\n },\n\n leading_chaos(item) {\n const data = item.chaosSlots?.byState.leading;\n\n return data ? renderTags([data.length], ['success']) : hammer.format.NO_VALUE;\n },\n\n following(item) {\n const data = item.tabletSlots?.byState.following;\n\n return data ? renderTags([data.length], ['info']) : hammer.format.NO_VALUE;\n },\n\n following_chaos(item) {\n const data = item.chaosSlots?.byState.following;\n\n return data ? renderTags([data.length], ['info']) : hammer.format.NO_VALUE;\n },\n\n follower_recovery(item) {\n const data = item.tabletSlots?.byState['follower_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n follower_recovery_chaos(item) {\n const data = item.chaosSlots?.byState['follower_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n leader_recovery(item) {\n const data = item.tabletSlots?.byState['leader_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n leader_recovery_chaos(item) {\n const data = item.chaosSlots?.byState['leader_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n stopped(item) {\n const data = item.tabletSlots?.byState.stopped;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n stopped_chaos(item) {\n const data = item.chaosSlots?.byState.stopped;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n elections(item) {\n const data = item.tabletSlots?.byState.elections;\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n elections_chaos(item) {\n const data = item.chaosSlots?.byState.elections;\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n tablet_memory_static(item) {\n const text = progressText(item.tabletStaticMemory.used, item.tabletStaticMemory.limit, {\n type: 'bytes',\n });\n\n return (\n <Progress value={item.tabletStaticMemory.progress || 0} text={text} theme=\"success\" />\n );\n },\n\n tablet_memory_dynamic(item) {\n const text = progressText(item.tabletDynamicMemory.used, item.tabletDynamicMemory.limit, {\n type: 'bytes',\n });\n\n return (\n <Progress value={item.tabletDynamicMemory.progress || 0} text={text} theme=\"success\" />\n );\n },\n};\n\nexport function getNodeTablesProps(mediumList: string[] = []) {\n if (!mediumList?.length) {\n return nodesTableProps;\n }\n const actions = nodesTableProps.columns.items.actions;\n const allMediums = reduce_(\n mediumList,\n (acc, key) => {\n acc[key] = {\n get(node: Node) {\n return node.IOWeight[key];\n },\n sort: true,\n align: 'center',\n };\n return acc;\n },\n {actions} as {actions: typeof actions} & Record<string, FIX_MY_TYPE>,\n );\n const res = merge_({}, nodesTableProps, {\n columns: {\n items: {\n io_weight: {\n items: {\n ...allMediums,\n },\n groupHeaderStyle: mediumList.length\n ? {width: 100 * mediumList.length}\n : undefined,\n },\n },\n },\n templates: NODES_TABLE_TEMPLATES,\n });\n res.columns!.items!.io_weight!.set = mediumList;\n return res;\n}\n\nfunction makeCaptionProps(columnName: string, title: string) {\n return {\n caption: columnName,\n tooltipProps: {\n placement: 'bottom',\n content: title,\n },\n };\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {Select} from '@gravity-ui/uikit';\n\nimport {NODE_TYPE_ITEMS} from '../../../constants/components/nodes/nodes';\nimport {getSystemNodesNodeTypesToLoad} from '../../../store/selectors/system/nodes';\nimport {setSysmetNodesNodeType} from '../../../store/actions/system/nodes-ts';\nimport {NODE_TYPE, NodeType} from '../../../../shared/constants/system';\nimport {getComponentsNodesNodeTypes} from '../../../store/selectors/components/nodes/nodes';\nimport {componentsNodesSetNodeTypes} from '../../../store/actions/components/nodes/nodes';\nimport {updateListWithAll} from '../../../utils';\n\ntype NodeTypeSelectorProps = {\n className?: string;\n value: Array<NodeType>;\n onUpdate: (value: NodeTypeSelectorProps['value']) => void;\n};\n\nexport function NodeTypeSelector(props: NodeTypeSelectorProps) {\n const {className, value, onUpdate} = props;\n return (\n <Select\n className={className}\n value={value}\n multiple\n options={NODE_TYPE_ITEMS}\n onUpdate={(newVal) => {\n const newValue = updateListWithAll(\n {value, newValue: newVal as NodeType[]},\n NODE_TYPE.ALL_NODES,\n );\n onUpdate(newValue);\n }}\n label={'Node type:'}\n />\n );\n}\n\nexport function SystemNodeTypeSelector() {\n const dispatch = useDispatch();\n const value = useSelector(getSystemNodesNodeTypesToLoad);\n return (\n <NodeTypeSelector\n value={value}\n onUpdate={(newValue) => {\n dispatch(setSysmetNodesNodeType(newValue));\n }}\n />\n );\n}\n\nexport function ComponentsNodeTypeSelector({className}: {className?: string}) {\n const dispatch = useDispatch();\n\n const value = useSelector(getComponentsNodesNodeTypes);\n return (\n <NodeTypeSelector\n className={className}\n value={value}\n onUpdate={(newValue) => dispatch(componentsNodesSetNodeTypes(newValue))}\n />\n );\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {NodeType} from '../../../../shared/constants/system';\nimport {setSettingSystemNodesNodeType} from '../settings/settings';\nimport {RootState} from '../../../store/reducers';\n\nexport function setSysmetNodesNodeType(\n value: Array<NodeType>,\n): ThunkAction<void, RootState, unknown, any> {\n return (dispatch) => {\n dispatch(setSettingSystemNodesNodeType(value));\n };\n}\n","import type {ThunkAction} from 'redux-thunk';\nimport forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../../store/reducers';\nimport {\n NODE_MAINTENANCE_PARTIAL,\n NODE_MAINTENANCE_RESET,\n} from '../../../constants/components/node-maintenance-modal';\nimport {\n NodeMaintenanceAction,\n NodeMaintenanceState,\n NodeResourceLimits,\n} from '../../../store/reducers/components/node-maintenance-modal';\nimport {\n isAllowedMaintenanceApiNodes,\n isAllowedMaintenanceApiProxies,\n} from '../../../store/selectors/components/node-maintenance-modal';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {YTApiId, ytApiV3Id, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {AddMaintenanceParams, BatchSubRequest} from '../../../../shared/yt-types';\nimport {updateComponentsNode} from './nodes/nodes';\nimport {getCurrentUserName} from '../../../store/selectors/global';\nimport {prepareSetCommandForBatch} from '../../../utils/cypress-attributes';\nimport {getProxies} from './proxies/proxies';\n\ntype NodeMaintenanceThunkAction<T = Promise<unknown>> = ThunkAction<\n T,\n RootState,\n unknown,\n NodeMaintenanceAction\n>;\n\nfunction makeNodePath(address: string, component: AddMaintenanceParams['component']) {\n switch (component) {\n case 'cluster_node':\n return `//sys/cluster_nodes/${address}`;\n case 'http_proxy':\n return `//sys/http_proxies/${address}`;\n case 'rpc_proxy':\n return `//sys/rpc_proxies/${address}`;\n default:\n throw new Error(`Unexpected component type: ${component}`);\n }\n}\n\nfunction makeObsoleteMaintenanceRequests(\n command: 'add_maintenance' | 'remove_maintenance',\n {\n address,\n type,\n comment: c,\n component,\n }: Pick<AddMaintenanceParams, 'address' | 'type' | 'comment' | 'component'>,\n): Array<BatchSubRequest> {\n const path = makeNodePath(address, component);\n const isAdd = command === 'add_maintenance';\n const comment = isAdd ? c : '';\n switch (type) {\n case 'ban': {\n const banned = command === 'add_maintenance';\n return [\n {command: 'set', parameters: {path: `${path}/@banned`}, input: banned},\n {command: 'set', parameters: {path: `${path}/@ban_message`}, input: comment},\n ];\n }\n case 'disable_scheduler_jobs':\n case 'disable_tablet_cells':\n case 'disable_write_sessions':\n return [{command: 'set', parameters: {path: `${path}/@${type}`}, input: isAdd}];\n case 'decommission':\n return [\n {command: 'set', parameters: {path: `${path}/@decommissioned`}, input: isAdd},\n {\n command: 'set',\n parameters: {path: `${path}/@decommission_message`},\n input: isAdd ? comment : '',\n },\n ];\n default:\n return [];\n }\n}\n\nexport function applyMaintenance(\n address: string,\n component: NodeMaintenanceState['component'],\n data: NodeMaintenanceState['maintenance'],\n resourceLimitsOverrides?: Partial<NodeResourceLimits>,\n role?: string,\n): NodeMaintenanceThunkAction {\n return (dispatch, getState) => {\n const requests: Array<BatchSubRequest> = [];\n\n const path = makeNodePath(address, component);\n\n if (role && (component === 'http_proxy' || component === 'rpc_proxy')) {\n requests.push(prepareSetCommandForBatch(`${path}/@role`, role));\n }\n\n forEach_(resourceLimitsOverrides, (value, key) => {\n requests.push(\n prepareSetCommandForBatch(\n `${path}/@resource_limits_overrides/${key}`,\n isNaN(value!)\n ? undefined\n : {$value: value, $type: key === 'cpu' ? 'double' : 'int64'},\n {\n input_format: {\n $value: 'json',\n $attributes: {annotate_with_types: true},\n },\n },\n ),\n );\n });\n\n forEach_(data, (item, t) => {\n const type = t as AddMaintenanceParams['type'];\n const command = item?.state ? 'add_maintenance' : 'remove_maintenance';\n const comment = item?.comment;\n\n if (!isMaintenanceApiAllowedForComponent(component, getState())) {\n requests.push(\n ...makeObsoleteMaintenanceRequests(command, {\n address,\n component,\n comment,\n type,\n }),\n );\n } else {\n const parameters = {\n component,\n address,\n type,\n comment,\n };\n requests.push(\n command === 'add_maintenance'\n ? {command, parameters}\n : {\n command,\n parameters: {...parameters, mine: true},\n },\n );\n }\n });\n\n const reloadNodeData = () => {\n switch (component) {\n case 'cluster_node':\n return dispatch(updateComponentsNode(address));\n case 'http_proxy':\n return dispatch(getProxies('http'));\n case 'rpc_proxy':\n return dispatch(getProxies('rpc'));\n }\n };\n\n return wrapApiPromiseByToaster(ytApiV4Id.executeBatch(YTApiId.addMaintenance, {requests}), {\n toasterName: 'edit_node_' + address,\n batchType: 'v4',\n skipSuccessToast: true,\n errorTitle: `Failed to modify ${address}`,\n })\n .then(reloadNodeData)\n .catch(reloadNodeData);\n };\n}\n\nexport function showNodeMaintenance(\n params: Pick<NodeMaintenanceState, 'address' | 'component'>,\n): NodeMaintenanceThunkAction {\n return async (dispatch) => {\n const data = await dispatch(loadNodeMaintenanceData(params));\n\n return dispatch({\n type: NODE_MAINTENANCE_PARTIAL,\n data: {...params, ...data},\n });\n };\n}\n\nexport type MaintenanceRequestInfo = {\n user: string;\n comment: string;\n timestamp: string;\n type: AddMaintenanceParams['type'];\n};\n\ntype MaintenanceDataResponse = {\n banned?: boolean;\n ban?: boolean;\n ban_message?: string;\n decommissioned?: boolean;\n decommission_message?: string;\n disable_scheduler_jobs?: boolean;\n disable_tablet_cells?: boolean;\n disable_write_sessions?: boolean;\n\n resource_limits?: NodeResourceLimits;\n resource_limits_overrides?: Partial<NodeResourceLimits>;\n\n maintenance_requests?: Record<string, MaintenanceRequestInfo>;\n\n role?: string;\n};\n\nexport function loadNodeMaintenanceData({\n address,\n component,\n}: Pick<NodeMaintenanceState, 'address' | 'component'>): NodeMaintenanceThunkAction<\n Promise<{\n maintenance: NodeMaintenanceState['maintenance'];\n resourceLimits?: NodeResourceLimits;\n resourceLimitsOverrides?: Partial<NodeResourceLimits>;\n }>\n> {\n return (_dispatch, getState) => {\n const state = getState();\n const user = getCurrentUserName(state);\n const path = makeNodePath(address, component) + '/@';\n\n const allowMaintenanceRequests = isMaintenanceApiAllowedForComponent(component, state);\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.get(YTApiId.maintenanceRequests, {\n path,\n attributes: [\n 'resource_limits',\n 'resource_limits_overrides',\n ...(allowMaintenanceRequests\n ? ['maintenance_requests']\n : [\n 'ban_message',\n 'decommissioned',\n 'decommission_message',\n 'disable_scheduler_jobs',\n 'disable_tablet_cells',\n 'disable_write_sessions',\n ]),\n ...(component === 'http_proxy' || component === 'rpc_proxy'\n ? ['banned', 'role']\n : ['banned']),\n ],\n }),\n {\n toasterName: 'maintenance_attributes_request_' + path,\n skipSuccessToast: true,\n errorContent: `Cannot load node attributes for ${path}`,\n },\n ).then((data: MaintenanceDataResponse) => {\n const maintenance: NodeMaintenanceState['maintenance'] = {};\n if (allowMaintenanceRequests) {\n forEach_(data.maintenance_requests, (item) => {\n const dst =\n maintenance[item.type] ??\n (maintenance[item.type] = {comment: '', otherComments: '', state: ''});\n\n if (item.user === user) {\n dst.state = 'maintenance';\n if (dst.comment?.length) {\n dst.comment += '\\n';\n }\n dst.comment += item.comment;\n } else {\n dst.otherComments += `${item.timestamp} ${item.user}\\t${item.comment}`;\n }\n });\n } else {\n Object.assign(maintenance, {\n ban: {\n state: data.banned ? 'maintenance' : '',\n comment: data.ban_message,\n },\n decommission: {\n state: data.decommissioned ? 'maintenance' : '',\n comment: data.decommission_message,\n },\n disable_scheduler_jobs: {\n state: data.disable_scheduler_jobs ? 'maintenance' : '',\n },\n disable_tablet_cells: {state: data.disable_tablet_cells ? 'maintenance' : ''},\n disable_write_sessions: {\n state: data.disable_write_sessions ? 'maintenance' : '',\n },\n } as typeof maintenance);\n }\n return {\n maintenance,\n resourceLimits: data.resource_limits,\n resourceLimitsOverrides: data.resource_limits_overrides,\n role: data.role,\n };\n });\n };\n}\n\nexport function closeNodeMaintenanceModal(): NodeMaintenanceAction {\n return {type: NODE_MAINTENANCE_RESET};\n}\n\nfunction isMaintenanceApiAllowedForComponent(\n component: AddMaintenanceParams['component'],\n state: RootState,\n) {\n switch (component) {\n case 'cluster_node':\n return isAllowedMaintenanceApiNodes(state);\n case 'http_proxy':\n case 'rpc_proxy':\n return isAllowedMaintenanceApiProxies(state);\n default:\n return false;\n }\n}\n","// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport omit_ from 'lodash/omit';\nimport forEach_ from 'lodash/forEach';\nimport compact_ from 'lodash/compact';\nimport type {ThunkAction} from 'redux-thunk';\n\nimport ypath from '../../../../common/thor/ypath';\n\nimport {setSetting} from '../../../../store/actions/settings';\nimport {NAMESPACES, SettingName} from '../../../../../shared/constants/settings';\nimport {\n getRequiredAttributes,\n useRacksFromAttributes,\n useTagsFromAttributes,\n} from '../../../../store/selectors/components/nodes/nodes';\nimport {getTemplates} from '../../../../store/selectors/settings';\nimport type {RootState} from '../../../../store/reducers';\nimport {Node} from '../../../../store/reducers/components/nodes/nodes/node';\nimport type {\n NodesAction,\n NodesState,\n} from '../../../../store/reducers/components/nodes/nodes/nodes';\nimport type {NodesSetupState} from '../../../../store/reducers/components/nodes/setup/setup';\nimport {\n APPLY_SETUP,\n CHANGE_CONTENT_MODE,\n CHANGE_HOST_FILTER,\n CHANGE_NODE_TYPE,\n COMPONENTS_NODES_UPDATE_NODE,\n GET_NODES,\n GET_NODES_FILTER_OPTIONS,\n} from '../../../../constants/components/nodes/nodes';\nimport {USE_CACHE, USE_MAX_SIZE} from '../../../../../shared/constants/yt-api';\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport type {ActionD, FIX_MY_TYPE, PartialDeep} from '../../../../types';\nimport {prepareAttributes} from '../../../../utils/cypress-attributes';\nimport {splitBatchResults, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {NodeType} from '../../../../../shared/constants/system';\nimport {BatchSubRequest} from '../../../../../shared/yt-types';\n\nconst {COMPONENTS} = NAMESPACES;\nconst {TEMPLATES} = SettingName.COMPONENTS;\n\nexport type NodesThunkAction = ThunkAction<void, RootState, unknown, NodesAction>;\n\nexport function changeContentMode(\n contentMode: NodesState['contentMode'],\n): ActionD<typeof CHANGE_CONTENT_MODE, Pick<NodesState, 'contentMode'>> {\n return {\n type: CHANGE_CONTENT_MODE,\n data: {contentMode},\n };\n}\n\nconst updateNodeCanceler = new CancelHelper();\n\nexport function getNodes({\n attributes,\n nodeTypes,\n}: {\n attributes: ReturnType<typeof getRequiredAttributes>;\n nodeTypes: Array<NodeType>;\n}): NodesThunkAction {\n return (dispatch) => {\n dispatch({type: GET_NODES.REQUEST});\n\n const preparedAttrs = prepareAttributes(attributes);\n const requests: Array<BatchSubRequest> = nodeTypes.map((type) => {\n return {\n command: 'list',\n parameters: {\n path: `//sys/${type}`,\n attributes: preparedAttrs,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n };\n });\n\n return ytApiV3Id\n .executeBatch(YTApiId.componentsClusterNodes, {\n parameters: {requests},\n cancellation: updateNodeCanceler.removeAllAndSave,\n })\n .then((data) => {\n const {results, error} = splitBatchResults(data, 'Failed to get nodes');\n\n const outputs = results.map((output) => {\n return ypath.getValue(output) || [];\n });\n\n const nodes = [];\n\n const collectedItems = new Set<string>();\n\n for (const output of outputs) {\n for (const item of output) {\n const {$value: name} = item;\n if (!collectedItems.has(name)) {\n nodes.push(item);\n collectedItems.add(name);\n }\n }\n }\n\n dispatch({type: GET_NODES.SUCCESS, data: {nodes}});\n\n if (error) {\n throw error;\n }\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_NODES.CANCELLED});\n return;\n }\n dispatch({\n type: GET_NODES.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nexport function updateComponentsNode(host: string): NodesThunkAction {\n return (dispatch) => {\n return ytApiV3Id\n .get(YTApiId.componentsUpdateNodeData, {\n path: `//sys/cluster_nodes/${host}`,\n attributes: prepareAttributes(Node.ATTRIBUTES),\n })\n .then((node) => {\n dispatch({\n type: COMPONENTS_NODES_UPDATE_NODE,\n data: {node: {...node, $value: host}},\n });\n });\n };\n}\n\nexport function changeHostFilter(\n hostFilter: string,\n): ActionD<typeof CHANGE_HOST_FILTER, Pick<NodesState, 'hostFilter'>> {\n return {\n type: CHANGE_HOST_FILTER,\n data: {hostFilter: hostFilter.trim()},\n };\n}\n\nexport function componentsNodesSetNodeTypes(nodeTypes: Array<NodeType>): NodesThunkAction {\n return (dispatch) => {\n dispatch({\n type: CHANGE_NODE_TYPE,\n data: {nodeTypes},\n });\n };\n}\n\nexport function applyPreset(\n setup: PartialDeep<NodesSetupState>,\n): ActionD<typeof APPLY_SETUP, PartialDeep<NodesSetupState>> {\n return {\n type: APPLY_SETUP,\n data: setup,\n };\n}\n\nexport function savePreset(name: string, data: FIX_MY_TYPE): NodesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const prevTemplates = getTemplates(state) || {};\n const templates = {\n ...prevTemplates,\n [name]: data,\n };\n\n dispatch(setSetting(TEMPLATES, COMPONENTS, templates));\n };\n}\n\nexport function removePreset(name: string): NodesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const templates = omit_(getTemplates(state), name);\n\n dispatch(setSetting(TEMPLATES, COMPONENTS, templates));\n };\n}\n\nexport function handleColumnsChange(selectedColumns: string[]): NodesThunkAction {\n return async (dispatch) => {\n await dispatch(\n setSetting(\n SettingName.COMPONENTS.SELECTED_COLUMNS,\n NAMESPACES.COMPONENTS,\n selectedColumns,\n ),\n );\n };\n}\n\nexport function getComponentsNodesFilterOptions(): NodesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n const attributes = compact_([\n !useTagsFromAttributes(state) && 'tags',\n !useRacksFromAttributes(state) && 'rack',\n ]);\n\n if (0 === attributes.length) {\n return;\n }\n\n dispatch({type: GET_NODES_FILTER_OPTIONS.REQUEST});\n\n wrapApiPromiseByToaster(\n ytApiV3Id.list(YTApiId.componentsClusterNodes, {\n path: '//sys/cluster_nodes',\n attributes,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n }),\n {\n toasterName: 'node filter options',\n errorTitle: `Failed to load node ${attributes.join(',')}`,\n skipSuccessToast: true,\n },\n )\n .then((nodes) => {\n const tags = new Set<string>();\n const racks = new Set<string>();\n forEach_(nodes, (item) => {\n const node = new Node(item);\n forEach_(node.tags, (tag) => {\n if (tag) {\n tags.add(tag);\n }\n });\n if (node.rack) {\n racks.add(node.rack);\n }\n });\n\n dispatch({\n type: GET_NODES_FILTER_OPTIONS.SUCCESS,\n data: {\n filterOptionsTags: [...tags].sort(),\n filterOptionsRacks: [...racks].sort(),\n },\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_NODES_FILTER_OPTIONS.FAILURE,\n data: {error},\n });\n });\n };\n}\n","import ypath from '../../../../../common/thor/ypath';\n\nexport default class Proxy {\n constructor(data) {\n // data comes in format like in /hosts/all, not like //sys/http_proxies\n this.name = data.name;\n this.host = data.name;\n this.state = data.dead ? 'offline' : 'online';\n this.effectiveState = this.banned ? 'banned' : this.state;\n\n this.banned = ypath.getBoolean(data, '/banned') || false;\n this.banMessage = ypath.getValue(data, '/ban_message') || '';\n this.role = ypath.getValue(data, '/role');\n this.version = ypath.getValue(data, '/version');\n this.physicalHost = ypath.getValue(data, '/annotations/physical_host');\n this.liveness = ypath.getValue(data, '/liveness');\n\n this.loadAverage = ypath.getValue(this.liveness, '/load_average');\n this.updatedAt = ypath.getValue(this.liveness, '/updated_at');\n this.networkLoad = ypath.getValue(this.liveness, '/network_coef');\n\n this.maintenanceRequests = ypath.getValue(data, '/maintenance_requests');\n }\n\n static ATTRIBUTES = [\n 'ban_message',\n 'banned',\n 'liveness',\n 'role',\n 'version',\n 'annotations',\n 'maintenance_requests',\n ];\n}\n","import map_ from 'lodash/map';\n\nimport axios from 'axios';\nimport ypath from '../../../../common/thor/ypath';\n\nimport Proxy from '../../../../store/reducers/components/proxies/proxies/proxy';\nimport {\n GET_PROXIES,\n PROXIES_CHANGE_FILTERS,\n PROXY_TYPE,\n} from '../../../../constants/components/proxies/proxies';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\n\nfunction getRpcProxies() {\n return (dispatch) => {\n return Promise.all([\n ytApiV3Id.list(YTApiId.componentsRpcProxies, {\n path: '//sys/rpc_proxies',\n attributes: Proxy.ATTRIBUTES,\n }),\n ytApiV3Id.get(YTApiId.componentGetRpcProxies, {path: '//sys/rpc_proxies'}),\n ])\n .then(([data, proxiesMap]) => {\n const proxies = map_(data, (proxyData) => {\n const name = ypath.getValue(proxyData);\n const role = ypath.getValue(proxyData, '/role') || 'default';\n const alive = Boolean(ypath.getValue(proxiesMap, `/${name}`).alive);\n const attributes = ypath.getAttributes(proxyData);\n const meta = {name, role, dead: !alive};\n\n return new Proxy({...meta, ...attributes});\n });\n\n dispatch({\n type: GET_PROXIES.SUCCESS,\n data: {proxies},\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_PROXIES.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nfunction getHttpProxies() {\n return (dispatch, getState) => {\n const cluster = getCluster(getState());\n return Promise.all([\n axios.get(`/api/yt-proxy/${cluster}/hosts-all`),\n ytApiV3Id.get(YTApiId.systemProxies, {\n path: '//sys/http_proxies',\n attributes: Proxy.ATTRIBUTES,\n }),\n ])\n .then(([{data}, cypressData]) => {\n const proxies = map_(data, (proxyData) => {\n const cypressAttributes = ypath.getAttributes(\n ypath.getValue(cypressData)[proxyData.name],\n );\n\n return new Proxy({...proxyData, ...cypressAttributes});\n });\n\n dispatch({\n type: GET_PROXIES.SUCCESS,\n data: {proxies},\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_PROXIES.FAILURE,\n data: {error},\n });\n });\n };\n}\n\n/**\n *\n * @param {'http' | 'rpc'} type\n * @returns\n */\nexport function getProxies(type) {\n return (dispatch) => {\n dispatch({type: GET_PROXIES.REQUEST});\n\n return dispatch(type === PROXY_TYPE.HTTP ? getHttpProxies() : getRpcProxies());\n };\n}\n\nexport function changeHostFilter(hostFilter) {\n return {\n type: PROXIES_CHANGE_FILTERS,\n data: {hostFilter},\n };\n}\n\nexport function changeStateFilter(stateFilter) {\n return {\n type: PROXIES_CHANGE_FILTERS,\n data: {stateFilter},\n };\n}\n\nexport function changeRoleFilter(roleFilter) {\n return {\n type: PROXIES_CHANGE_FILTERS,\n data: {roleFilter},\n };\n}\n\nexport function changeBannedFilter(bannedFilter) {\n return {type: PROXIES_CHANGE_FILTERS, data: {bannedFilter}};\n}\n\nexport function resetProxyState() {\n return (dispatch) => {\n dispatch({type: GET_PROXIES.CANCELLED});\n };\n}\n","import reduce_ from 'lodash/reduce';\nimport {createSelector} from 'reselect';\n\nimport {RootState} from '../../reducers';\nimport {getClusterUiConfig} from '../global';\nimport {isSupportedNodeMaintenanceApi} from '../thor/support';\nimport {NodeResourceLimits} from '../../../store/reducers/components/node-maintenance-modal';\n\nexport const getNodeMaintenanceModalState = (state: RootState) =>\n state.components.nodeMaintenanceModal;\n\nexport const getNodeMaintenanceModalInitialValues = createSelector(\n [getNodeMaintenanceModalState],\n ({maintenance, resourceLimitsOverrides, role}) => {\n return {\n ...maintenance,\n role: {role},\n limits: reduce_(\n resourceLimitsOverrides,\n (acc, value, k) => {\n const key = k as keyof typeof acc;\n acc[key] = {value};\n return acc;\n },\n {} as Partial<Record<keyof NodeResourceLimits, {value?: number}>>,\n ),\n };\n },\n);\n\nexport const isAllowedMaintenanceApiNodes = createSelector(\n [isSupportedNodeMaintenanceApi, getClusterUiConfig],\n (isSupported, uiConfig) => {\n return isSupported && Boolean(uiConfig.enable_maintenance_api_nodes);\n },\n);\n\nexport const isAllowedMaintenanceApiProxies = createSelector(\n [isSupportedNodeMaintenanceApi, getClusterUiConfig],\n (isSupported, uiConfig) => {\n return isSupported && Boolean(uiConfig.enable_maintenance_api_proxies);\n },\n);\n","import filter_ from 'lodash/filter';\nimport some_ from 'lodash/some';\nimport union_ from 'lodash/union';\n\nimport hammer from '../../../../../common/hammer';\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../../../common/hammer/predicate';\nimport {COMPONENTS_NODES_TABLE_ID} from '../../../../../constants/components/nodes/nodes';\nimport {RootState} from '../../../../../store/reducers';\nimport {AttributesByProperty} from '../../../../../store/reducers/components/nodes/nodes/node';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {getSelectedColumns} from '../../../../../store/selectors/settings';\nimport {getMediumListNoCache} from '../../../../../store/selectors/thor';\nimport type {ValueOf} from '../../../../../types';\nimport {createMediumsPredicates} from '../../../../../utils/components/nodes/setup';\nimport {\n PropertiesByColumn,\n defaultColumns,\n getNodeTablesProps,\n} from '../../../../../pages/components/tabs/nodes/tables';\nimport {\n getComponentNodesFilterPredicates,\n getComponentNodesFilterStatePredicate,\n getComponentNodesFiltersSetup,\n getComponentNodesIndexByRack,\n getComponentNodesIndexByTag,\n getNodes,\n getPropertiesRequiredForFilters,\n} from './predicates';\nimport {NODE_TYPE, NodeType} from '../../../../../../shared/constants/system';\n\nconst getContentMode = (state: RootState) => state.components.nodes.nodes.contentMode;\nconst getHostFilter = (state: RootState) => state.components.nodes.nodes.hostFilter.toLowerCase();\nconst getSortState = (state: RootState) => state.tables[COMPONENTS_NODES_TABLE_ID];\nconst getComponentsNodesNodeTypeRaw = (state: RootState) => state.components.nodes.nodes.nodeTypes;\n\nconst getCustomColumns = (state: RootState) => getSelectedColumns(state) || defaultColumns;\n\nconst getMediumsPredicates = createSelector(\n [getComponentNodesFiltersSetup, getMediumListNoCache],\n createMediumsPredicates,\n);\n\nconst getPropertiesRequiredForMediums = createSelector(\n [getMediumsPredicates],\n (mediumsPredicates) => (mediumsPredicates.length > 0 ? (['IOWeight'] as const) : []),\n);\n\nconst getFilteredByHost = createSelector([getNodes, getHostFilter], (nodes, hostFilter) => {\n const hostFilters = hostFilter.split(/\\s+/);\n return filter_(nodes, (node) => {\n return some_(hostFilters, (hostFilter) => node?.host?.toLowerCase().includes(hostFilter));\n });\n});\n\nconst getFilteredNodes = createSelector(\n [getFilteredByHost, getComponentNodesFilterPredicates, getMediumsPredicates],\n (nodes, predicates, mediumsPredicates) => {\n const predicatesArray = predicates.concat(mediumsPredicates);\n if (!predicatesArray.length) {\n return nodes;\n }\n\n const predicate = concatByAnd(...predicatesArray);\n return filter_(nodes, (node) => {\n return predicate(node);\n });\n },\n);\n\nexport const getVisibleNodes = createSelector(\n [getFilteredNodes, getSortState, getMediumListNoCache, getCluster],\n (nodes, sortState, mediumList, cluster) => {\n return hammer.utils.sort(\n nodes.map((n) => ({...n, cluster})),\n sortState,\n getNodeTablesProps(mediumList).columns.items,\n ) as typeof nodes;\n },\n);\n\nexport const getComponentNodesTableProps = createSelector(\n [getMediumListNoCache],\n getNodeTablesProps,\n);\n\nconst getVisibleColumns = createSelector(\n [getComponentNodesTableProps, getContentMode, getCustomColumns],\n (nodesTableProps, contentMode, customColumns) =>\n contentMode === 'custom' ? customColumns : nodesTableProps.columns.sets[contentMode].items,\n);\n\nconst getPropertiesRequiredForRender = createSelector(\n [getVisibleColumns],\n (visibleColumns /* : Array<keyof typeof PropertiesByColumn> */) => {\n const requiredProperties = union_(\n ...visibleColumns.map(\n (x) => (PropertiesByColumn as any)[x] as ValueOf<typeof PropertiesByColumn>,\n ),\n );\n\n return requiredProperties;\n },\n);\n\nexport const getRequiredAttributes = createSelector(\n [\n getPropertiesRequiredForRender,\n getPropertiesRequiredForFilters,\n getPropertiesRequiredForMediums,\n ],\n (propertiesRequiredForRender, propertiesRequiredForFilters, propertiesRequiredForMediums) => {\n const allRequiredProperties = [\n ...propertiesRequiredForRender,\n ...propertiesRequiredForFilters,\n ...propertiesRequiredForMediums,\n ];\n\n const requiredAttributes = union_(\n ...allRequiredProperties.map(\n (x) => (AttributesByProperty as any)[x] as ValueOf<typeof AttributesByProperty>,\n ),\n );\n\n return requiredAttributes;\n },\n);\n\nexport const useTagsFromAttributes = createSelector([getRequiredAttributes], (attributes) => {\n return attributes.indexOf('tags') >= 0;\n});\n\nexport const useRacksFromAttributes = createSelector([getRequiredAttributes], (attributes) => {\n return attributes.indexOf('rack') >= 0;\n});\n\nconst getFetchedTags = (state: RootState): string[] =>\n state.components.nodes.nodes.filterOptionsTags;\nconst getFetchedRacks = (state: RootState): string[] =>\n state.components.nodes.nodes.filterOptionsRacks;\n\nexport const getComponentNodesTags = createSelector(\n [useTagsFromAttributes, getFetchedTags, getComponentNodesIndexByTag],\n (useFromAttrs, fetchedTags, nodesByTag) => {\n if (!useFromAttrs) {\n return fetchedTags;\n }\n\n return [...nodesByTag.keys()].sort();\n },\n);\n\nexport const getComponentNodesRacks = createSelector(\n [useRacksFromAttributes, getFetchedRacks, getComponentNodesIndexByRack],\n (useFromAttrs, fetchedRacks, nodesByRack) => {\n if (!useFromAttrs) {\n return fetchedRacks;\n }\n\n return [...nodesByRack.keys()].sort();\n },\n);\n\nexport const getComponentsNodesNodeTypes = createSelector(\n [getComponentsNodesNodeTypeRaw],\n (types) => {\n const res: Array<NodeType> = [...types];\n if (res.length === 0) {\n return [NODE_TYPE.ALL_NODES];\n }\n return res;\n },\n);\n\nexport const COMPONENTS_AVAILABLE_STATES = [\n 'all',\n 'being_disposed',\n 'online',\n 'offline',\n 'mixed',\n 'registered',\n 'unregistered',\n 'unknown',\n];\n\nexport const getComponentNodesFilterSetupStateValue = createSelector(\n [getComponentNodesFilterStatePredicate],\n (predicate) => {\n if (!predicate) {\n return ['all'];\n }\n\n return COMPONENTS_AVAILABLE_STATES.map((state) => ({state}))\n .filter(predicate)\n .map(({state}) => state);\n },\n);\n","import cloneDeep_ from 'lodash/cloneDeep';\nimport every_ from 'lodash/every';\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport merge_ from 'lodash/merge';\nimport pickBy_ from 'lodash/pickBy';\nimport reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\nimport values_ from 'lodash/values';\nimport union_ from 'lodash/union';\n\nimport {createSelector} from 'reselect';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {UNAWARE} from '../../../../../constants';\nimport {\n FlagState,\n NodeRange,\n TagFilter,\n groupFilterInitialState,\n} from '../../../../../store/reducers/components/nodes/setup/setup';\nimport {MEDIUM_COLS_PREFIX} from '../../../../../constants/components/nodes/nodes';\nimport {getMediumListNoCache} from '../../../../../store/selectors/thor';\nimport type {ValueOf} from '../../../../../types';\nimport {Node} from '../../../../reducers/components/nodes/nodes/node';\nimport {isRangeFilterDefined} from '../../../../../utils/components/nodes/setup';\n\nimport {RootState} from '../../../../reducers';\n\nexport const getSetupFiltersRaw = (state: RootState) => state.components.nodes.setup;\n\nexport const getNodes = (state: RootState): Array<Node> => state.components.nodes.nodes.nodes;\n\nexport const getComponentNodesFilterStatePredicate = createSelector(\n [getSetupFiltersRaw],\n ({default: {state}}) => {\n if (!state.length || (state.length === 1 && state[0] === 'all')) {\n return undefined;\n }\n const excludes = reduce_(\n state,\n (acc, item) => {\n if (item[0] === '!') {\n acc.add(item.substring(1));\n }\n return acc;\n },\n new Set<string>(),\n );\n\n if (excludes.size) {\n if (excludes.size !== state.length) {\n new Toaster().add({\n name: 'component-nodes-excludes',\n theme: 'danger',\n autoHiding: false,\n title: 'Unexpected behavior',\n content:\n 'Components/Nodes: It is not allowed to have excludes and includes for \"state\" filter at the same time',\n });\n }\n\n excludes.add('all');\n\n return (node: {state: string}) => {\n return !excludes.has(node.state);\n };\n } else {\n const includes = new Set(state);\n return (node: {state: string}) => {\n return includes.has(node.state);\n };\n }\n },\n);\n\nexport const getComponentNodesFiltersSetup = createSelector(\n [getSetupFiltersRaw, getMediumListNoCache],\n (setup, mediumList) => {\n const mediumDefaults = reduce_(\n mediumList,\n (acc, medium) => {\n acc[MEDIUM_COLS_PREFIX + medium] = cloneDeep_(groupFilterInitialState);\n return acc;\n },\n {} as Record<string, NodeRange>,\n );\n return merge_({}, {storage: mediumDefaults}, setup);\n },\n);\n\nexport const getComponentNodesIndexByTag = createSelector([getNodes], (nodes) => {\n const res = reduce_(\n nodes,\n (acc, node) => {\n const {tags} = node;\n forEach_(tags, (tag) => {\n if (acc.has(tag)) {\n acc.get(tag)?.add(node);\n } else {\n acc.set(tag, new Set([node]));\n }\n });\n return acc;\n },\n new Map<string, Set<Node>>(),\n );\n return res;\n});\n\nexport const getComponentNodesIndexByRack = createSelector([getNodes], (nodes) => {\n return reduce_(\n nodes,\n (acc, node) => {\n const rack = node.rack ?? UNAWARE;\n if (!acc.has(rack)) {\n acc.set(rack, new Set([node]));\n } else {\n acc.get(rack)?.add(node);\n }\n return acc;\n },\n new Map<string, Set<Node>>(),\n );\n});\n\nconst PropertiesByPredicate = {\n physicalHost: ['physicalHost'],\n tags: ['tags'],\n state: ['state'],\n rack: ['rack'],\n banned: ['banned'],\n decommissioned: ['decommissioned'],\n full: ['full'],\n alertCount: ['alertCount'],\n disableJobs: ['disableJobs'],\n disableWriteSession: ['disableWriteSession'],\n disableTabletCells: ['disableTabletCells'],\n sessions: ['sessions'],\n chunks: ['chunks'],\n spaceUsed: ['spaceUsed'],\n spaceTotal: ['spaceTotal'],\n blobSession: ['memory'],\n blockCache: ['memory'],\n chunkBlockMeta: ['memory'],\n chunkMeta: ['memory'],\n footprint: ['memory'],\n query: ['memory'],\n systemJobs: ['memory'],\n versionedChunkMeta: ['memory'],\n tabletDynamicUsed: ['memory'],\n tabletDynamicTotal: ['memory'],\n tabletStaticUsed: ['memory'],\n tabletStaticTotal: ['memory'],\n userJobsUsed: ['memory'],\n userJobsTotal: ['memory'],\n userSlotsUsed: ['userSlots'],\n userSlotsTotal: ['userSlots'],\n sealSlotsUsed: ['sealSlots'],\n sealSlotsTotal: ['sealSlots'],\n repairSlotsUsed: ['repairSlots'],\n repairSlotsTotal: ['repairSlots'],\n removalSlotsUsed: ['removalSlots'],\n removalSlotsTotal: ['removalSlots'],\n replicationSlotsUsed: ['replicationSlots'],\n replicationSlotsTotal: ['replicationSlots'],\n all: ['tabletSlots'],\n none: ['tabletSlots'],\n leading: ['tabletSlots'],\n following: ['tabletSlots'],\n followerRecovery: ['tabletSlots'],\n leaderRecovery: ['tabletSlots'],\n stopped: ['tabletSlots'],\n elections: ['tabletSlots'],\n staticUsed: ['tabletStaticMemory'],\n staticTotal: ['tabletStaticMemory'],\n dynamicUsed: ['tabletDynamicMemory'],\n dynamicTotal: ['tabletDynamicMemory'],\n} as const;\n\ntype NodeWithProps<T extends keyof typeof PropertiesByPredicate> = Pick<\n Node,\n (typeof PropertiesByPredicate)[T][number]\n>;\n\ntype Predicates = {\n [P in keyof typeof PropertiesByPredicate]:\n | false\n | undefined\n | ((node: NodeWithProps<P>) => boolean);\n};\n\nconst getRackPredicate = createSelector(\n [getSetupFiltersRaw, getComponentNodesIndexByRack],\n (setupFilters, nodesByRack) => {\n const {rack} = setupFilters.default;\n if ('string' !== typeof rack && rack.selected?.[0] === UNAWARE) {\n return ({rack}: {rack?: string}) => rack === undefined;\n }\n return createNodeTagPredicate<'rack'>(setupFilters.default.rack, nodesByRack, (node) => [\n node.rack,\n ]);\n },\n);\n\nconst getFilterPredicatesObject = createSelector(\n [\n getSetupFiltersRaw,\n getComponentNodesIndexByTag,\n getRackPredicate,\n getComponentNodesFilterStatePredicate,\n ],\n (setupFilters, nodesByTags, rackPredicate, statePredicate) => {\n const predicates: Predicates = {\n // filter by default\n physicalHost:\n Boolean(setupFilters.default.physicalHost) &&\n ((node) => {\n return -1 !== node.physicalHost?.indexOf(setupFilters.default.physicalHost);\n }),\n tags: createNodeTagPredicate<'tags'>(\n setupFilters.default.tag,\n nodesByTags,\n (node) => node.tags,\n ),\n state: statePredicate,\n rack: rackPredicate,\n\n banned: createFlagPredicate('banned', setupFilters.default.banned),\n decommissioned: createFlagPredicate(\n 'decommissioned',\n setupFilters.default.decommissioned,\n ),\n full: createFlagPredicate('full', setupFilters.default.full),\n alertCount: createAlertsFlagPredicate(setupFilters.default.alertCount),\n\n disableJobs: createAttributeStatePredicate(\n 'disableJobs',\n setupFilters.default.schedulerJobs,\n ),\n disableWriteSession: createAttributeStatePredicate(\n 'disableWriteSession',\n setupFilters.default.writeSessions,\n ),\n disableTabletCells: createAttributeStatePredicate(\n 'disableTabletCells',\n setupFilters.default.tabletCells,\n ),\n\n // filter by storage\n sessions: createRangePredicate(\n setupFilters.storage.sessions,\n 'sessions',\n (node) => node,\n ),\n chunks: createRangePredicate(setupFilters.storage.chunks, 'chunks', (node) => node),\n spaceUsed: createRangePredicate(\n setupFilters.storage.spaceUsed,\n 'spaceUsed',\n (node) => node,\n ),\n spaceTotal: createRangePredicate(\n setupFilters.storage.spaceTotal,\n 'spaceTotal',\n (node) => node,\n ),\n\n // filter by cpu\n blobSession: createRangePredicate(\n setupFilters.cpu.blobSession,\n 'used',\n (node) => node.memory.blob_session,\n ),\n blockCache: createRangePredicate(\n setupFilters.cpu.blockCache,\n 'used',\n (node) => node.memory.block_cache,\n ),\n chunkBlockMeta: createRangePredicate(\n setupFilters.cpu.chunkBlockMeta,\n 'used',\n (node) => node.memory.chunk_block_meta,\n ),\n chunkMeta: createRangePredicate(\n setupFilters.cpu.chunkMeta,\n 'used',\n (node) => node.memory.chunk_meta,\n ),\n footprint: createRangePredicate(\n setupFilters.cpu.footprint,\n 'used',\n (node) => node.memory.footprint,\n ),\n query: createRangePredicate(\n setupFilters.cpu.query,\n 'used',\n (node) => node.memory.query,\n ),\n systemJobs: createRangePredicate(\n setupFilters.cpu.systemJobs,\n 'used',\n (node) => node.memory.system_jobs,\n ),\n versionedChunkMeta: createRangePredicate(\n setupFilters.cpu.versionedChunkMeta,\n 'used',\n (node) => node.memory.versioned_chunk_meta,\n ),\n\n tabletDynamicUsed: createRangePredicate(\n setupFilters.cpu.tabletDynamicUsed,\n 'used',\n (node) => node.memory.tablet_dynamic,\n ),\n tabletDynamicTotal: createRangePredicate(\n setupFilters.cpu.tabletDynamicTotal,\n 'limit',\n (node) => node.memory.tablet_dynamic,\n ),\n\n tabletStaticUsed: createRangePredicate(\n setupFilters.cpu.tabletStaticUsed,\n 'used',\n (node) => node.memory.tablet_static,\n ),\n tabletStaticTotal: createRangePredicate(\n setupFilters.cpu.tabletStaticTotal,\n 'limit',\n (node) => node.memory.tablet_static,\n ),\n\n userJobsUsed: createRangePredicate(\n setupFilters.cpu.userJobsUsed,\n 'used',\n (node) => node.memory.user_jobs,\n ),\n userJobsTotal: createRangePredicate(\n setupFilters.cpu.userJobsTotal,\n 'limit',\n (node) => node.memory.user_jobs,\n ),\n\n // filter by resources\n userSlotsUsed: createRangePredicate(\n setupFilters.resources.userSlotsUsed,\n 'usage',\n (node) => node.userSlots,\n ),\n userSlotsTotal: createRangePredicate(\n setupFilters.resources.userSlotsTotal,\n 'limits',\n (node) => node.userSlots,\n ),\n sealSlotsUsed: createRangePredicate(\n setupFilters.resources.sealSlotsUsed,\n 'usage',\n (node) => node.sealSlots,\n ),\n sealSlotsTotal: createRangePredicate(\n setupFilters.resources.sealSlotsTotal,\n 'limits',\n (node) => node.sealSlots,\n ),\n repairSlotsUsed: createRangePredicate(\n setupFilters.resources.repairSlotsUsed,\n 'usage',\n (node) => node.repairSlots,\n ),\n repairSlotsTotal: createRangePredicate(\n setupFilters.resources.repairSlotsTotal,\n 'limits',\n (node) => node.repairSlots,\n ),\n removalSlotsUsed: createRangePredicate(\n setupFilters.resources.removalSlotsUsed,\n 'usage',\n (node) => node.removalSlots,\n ),\n removalSlotsTotal: createRangePredicate(\n setupFilters.resources.removalSlotsTotal,\n 'limits',\n (node) => node.removalSlots,\n ),\n replicationSlotsUsed: createRangePredicate(\n setupFilters.resources.replicationSlotsUsed,\n 'usage',\n (node) => node.replicationSlots,\n ),\n replicationSlotsTotal: createRangePredicate(\n setupFilters.resources.replicationSlotsTotal,\n 'limits',\n (node) => node.replicationSlots,\n ),\n\n // filter by tablets\n all: createRangePredicate(\n setupFilters.tablets.all,\n 'all',\n (node) => node.tabletSlots,\n true,\n ),\n none: createRangePredicate(\n setupFilters.tablets.none,\n 'none',\n (node) => node.tabletSlots.byState,\n true,\n ),\n leading: createRangePredicate(\n setupFilters.tablets.leading,\n 'leading',\n (node) => node.tabletSlots.byState,\n true,\n ),\n following: createRangePredicate(\n setupFilters.tablets.following,\n 'following',\n (node) => node.tabletSlots.byState,\n true,\n ),\n followerRecovery: createRangePredicate(\n setupFilters.tablets.followerRecovery,\n 'follower_recovery',\n (node) => node.tabletSlots.byState,\n true,\n ),\n leaderRecovery: createRangePredicate(\n setupFilters.tablets.leaderRecovery,\n 'leader_recovery',\n (node) => node.tabletSlots.byState,\n true,\n ),\n stopped: createRangePredicate(\n setupFilters.tablets.stopped,\n 'stopped',\n (node) => node.tabletSlots.byState,\n true,\n ),\n elections: createRangePredicate(\n setupFilters.tablets.elections,\n 'elections',\n (node) => node.tabletSlots.byState,\n true,\n ),\n\n staticUsed: createRangePredicate(\n setupFilters.tablets.staticUsed,\n 'used',\n (node) => node.tabletStaticMemory,\n ),\n staticTotal: createRangePredicate(\n setupFilters.tablets.staticTotal,\n 'limit',\n (node) => node.tabletStaticMemory,\n ),\n dynamicUsed: createRangePredicate(\n setupFilters.tablets.dynamicUsed,\n 'used',\n (node) => node.tabletDynamicMemory,\n ),\n dynamicTotal: createRangePredicate(\n setupFilters.tablets.dynamicTotal,\n 'limit',\n (node) => node.tabletDynamicMemory,\n ),\n };\n return predicates;\n },\n);\n\nexport const getComponentNodesFiltersCount = createSelector(\n [getFilterPredicatesObject],\n (filters) => {\n return reduce_(\n filters,\n (acc, predicate) => {\n return predicate ? acc + 1 : acc;\n },\n 0,\n );\n },\n);\n\nexport const getComponentNodesFilterPredicates = createSelector(\n [getFilterPredicatesObject],\n (filterPredicatesObject) => {\n return filter_(filterPredicatesObject, (p) => p) as Array<(node: Node) => boolean>;\n },\n);\n\nexport const getPropertiesRequiredForFilters = createSelector(\n [getFilterPredicatesObject],\n (filterPredicatesObject) => {\n const picked = values_(\n pickBy_(\n PropertiesByPredicate,\n (_value, key) => filterPredicatesObject[key as keyof typeof PropertiesByPredicate],\n ),\n ) as any;\n\n return union_(...picked) as Array<ValueOf<typeof PropertiesByPredicate>[number]>;\n },\n);\n\nfunction createNodeTagPredicate<K extends keyof typeof PropertiesByPredicate>(\n tagFilter: string | TagFilter,\n nodesByTags: Map<string, Set<NodeWithProps<K>>>,\n getTags: (node: NodeWithProps<K>) => Array<string>,\n): undefined | ((node: NodeWithProps<K>) => boolean) {\n if (!tagFilter) {\n return undefined;\n }\n\n if (typeof tagFilter === 'string') {\n return (node) => {\n return some_(\n getTags(node),\n (item) => -1 !== item?.toLowerCase().indexOf(tagFilter.toLowerCase()),\n );\n };\n }\n\n const {mode, useRegexp, filter, selected} = tagFilter;\n\n const selectedItems = selected || [];\n\n switch (mode) {\n case 'union': {\n if (!selected?.length) {\n return undefined;\n }\n return (node) => {\n return some_(selectedItems, (tagName) => {\n return nodesByTags.get(tagName)?.has(node);\n });\n };\n }\n case 'intersection': {\n if (!selected?.length) {\n return undefined;\n }\n return (node) => {\n return every_(selectedItems, (tagName) => {\n return nodesByTags.get(tagName)?.has(node);\n });\n };\n }\n default: {\n if (!filter) {\n return undefined;\n }\n if (!useRegexp) {\n return createNodeTagPredicate(filter, new Map(), getTags);\n }\n try {\n const re = new RegExp(filter);\n return (node) => {\n return some_(getTags(node), (tag) => re.test(tag));\n };\n } catch (e) {\n return () => false;\n }\n }\n }\n}\n\nfunction createFlagPredicate<T extends keyof typeof PropertiesByPredicate>(\n key: (typeof PropertiesByPredicate)[T][number],\n flag: FlagState,\n) {\n if (!flag || flag === 'all') {\n return undefined;\n }\n\n return (node: NodeWithProps<T>) => {\n return flag === 'disabled' ? !node[key] : Boolean(node[key]);\n };\n}\n\nfunction createAttributeStatePredicate<T extends keyof typeof PropertiesByPredicate>(\n key: (typeof PropertiesByPredicate)[T][number],\n value: FlagState,\n) {\n if (value === 'all') {\n return undefined;\n }\n\n return (node: NodeWithProps<T>) => {\n return value === 'disabled' ? Boolean(node[key]) : !node[key];\n };\n}\n\nfunction createAlertsFlagPredicate(flag: FlagState) {\n if (!flag || flag === 'all') {\n return undefined;\n }\n\n return (node: Pick<Node, 'alertCount'>) => {\n if (flag === 'disabled') {\n return node.alertCount === 0;\n }\n\n return node.alertCount! > 0;\n };\n}\n\nfunction createRangePredicate<T extends keyof typeof PropertiesByPredicate, U>(\n range: NodeRange,\n key: keyof U,\n get: (node: NodeWithProps<T>) => U,\n asArray?: boolean,\n) {\n if (!isRangeFilterDefined(range)) {\n return undefined;\n }\n\n const {from, to} = range;\n\n return (node: NodeWithProps<T>) => {\n const value: any = get(node)[key];\n\n const nodeValue = asArray ? value.length : value;\n\n return (\n nodeValue >= (from.value === null ? -Infinity : from.value) &&\n nodeValue <= (to.value === null ? Infinity : to.value)\n );\n };\n}\n","import {createSelector} from 'reselect';\n\nimport {getSettingSystemNodesNodeType} from '../../../store/selectors/settings-ts';\nimport {NODE_TYPE} from '../../../../shared/constants/system';\n\nexport const getSystemNodesNodeTypesToLoad = createSelector(\n [getSettingSystemNodesNodeType],\n (nodeTypes) => {\n const valueSet = new Set(nodeTypes);\n if (valueSet.has(NODE_TYPE.ALL_NODES)) {\n return [NODE_TYPE.ALL_NODES];\n }\n\n return [...valueSet.values()];\n },\n);\n","import {RootState} from '../../store/reducers';\nimport {initialState} from '../../store/reducers/tables';\n\nexport const getTables = (state: RootState) => state.tables || initialState;\n","import filter_ from 'lodash/filter';\nimport {createSelector} from 'reselect';\n\nimport hammer from '../../../common/hammer';\nimport {MediumType} from '../../../constants/index';\nexport {isSupportedSelector} from './support';\n\nexport const getMediumList = createSelector(\n (state) => state.global.mediumList,\n (data) => hammer.utils.sortInPredefinedOrder([MediumType.DEFAULT], [...data]),\n);\n\nexport const getMediumListNoCache = createSelector([getMediumList], (mediums) =>\n filter_(mediums, (item) => item !== 'cache'),\n);\n\nexport const getCurrentCluster = (state) => state.global.cluster;\n","import {createSelector} from 'reselect';\nimport map_ from 'lodash/map';\nimport isEmpty_ from 'lodash/isEmpty';\nimport every_ from 'lodash/every';\n\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\n\nimport {RootState} from '../../../store/reducers';\n\nexport const _LOCAL_ARCADIA_VERSION = '(development)';\n\nfunction versionToArray(version: string, build?: string) {\n const VERSION_DELIMITER = '.';\n const VERSION_CHUNK_COUNT = 3;\n const VERSION_CHUNK_PLACEHOLDER = 0;\n\n const versionArray: Array<string | number> = map_(\n version.split(VERSION_DELIMITER),\n (subversion) => {\n return parseInt(subversion, 10);\n },\n );\n\n while (versionArray.length < VERSION_CHUNK_COUNT) {\n versionArray.push(VERSION_CHUNK_PLACEHOLDER);\n }\n\n if (build) {\n versionArray.push(build);\n }\n\n return versionArray;\n}\n\n/**\n * Returns true if versionA >= versionB and comparator === 'greater'\n * Returns true if versionA < versionB and comparator === 'smaller'\n * @param {String} comparator - 'greater', 'smaller'\n * @param {String} versionA\n * @param {String} versionB\n * @returns {boolean}\n */\nexport function _compareVersions(\n comparator: 'greater' | 'smaller',\n versionA: string,\n versionB: string,\n) {\n if (versionA === versionB) {\n return comparator === 'greater';\n }\n\n return comparator === 'greater'\n ? hammer.utils.compareVectors(versionToArray(versionA), versionToArray(versionB)) >= 0\n : hammer.utils.compareVectors(versionToArray(versionA), versionToArray(versionB)) < 0;\n}\n\n/**\n * Determines wheter a given version belongs to a versionInterval [a, b)\n * Left end included, right end excluded (intuitive limitations - features are supported starting from a specific build)\n * @param {String} version\n * @param {String|Object} versionInterval\n * @returns {boolean}\n */\nexport function _versionInInterval(\n version: string,\n versionInterval: MajorMinorPatch | MajorMinorPatchRange | typeof _LOCAL_ARCADIA_VERSION,\n) {\n let supported;\n\n if (typeof versionInterval === 'object') {\n supported = Object.keys(versionInterval).every((comparator) => {\n if (!(comparator === 'greater' || comparator === 'smaller')) {\n throw new Error(\n 'thor.support: feature description has unknown comparator \"' +\n comparator +\n '\",' +\n ' cannot check support.',\n );\n }\n const key = comparator as keyof typeof versionInterval;\n return _compareVersions(comparator, version, versionInterval[key]!);\n });\n } else {\n supported = _compareVersions('greater', version, versionInterval);\n }\n\n return supported;\n}\n\nfunction getVersionAndBuild(version?: string): [string, string | undefined] | undefined {\n const parsedVersion = version?.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\n let parsedBuild;\n\n if (parsedVersion) {\n const majorMinorPatch = parsedVersion[0];\n parsedBuild = version?.substring(parsedVersion.length);\n\n return [majorMinorPatch, parsedBuild];\n }\n return undefined;\n}\n\nconst getRawProxyVersion = (state: RootState) => state.global.version;\nconst getRawSchedulerVersion = (state: RootState) => state.global.schedulerVersion;\nconst getRawMasterVersion = (state: RootState) => state.global.masterVersion;\n\ntype MajorMinorPatch = `${number}.${number}.${number}`;\ntype MajorMinorPatchRange = {greater?: MajorMinorPatch; smaller?: MajorMinorPatch};\n\nexport type RawVersion = `${MajorMinorPatch}-${string}`;\n\nexport type Versions<T> = {proxy?: T | typeof _LOCAL_ARCADIA_VERSION; scheduler?: T; master?: T};\n\ntype FeatureVersions = Versions<MajorMinorPatch | Array<MajorMinorPatchRange>>;\ntype RawFeatureVersions = Versions<RawVersion>;\n\nconst FEATURES = {\n fieldsFilter: {\n scheduler: '22.1.9091155',\n } as FeatureVersions,\n effectiveExpiration: {\n master: '23.1.11146445',\n } as FeatureVersions,\n clusterNodeVersion: {\n proxy: '23.2.0',\n } as FeatureVersions,\n nodeMaintenanceApi: {\n proxy: '23.1.11106567',\n } as FeatureVersions,\n schedulingChildrenByPool: {\n scheduler: '23.1.11146742',\n } as FeatureVersions,\n};\n\nexport function _isFeatureSupported<T extends Record<string, FeatureVersions>>(\n rawVersions: RawFeatureVersions,\n features: T,\n) {\n return (featureName: keyof T) => {\n function failFeature(message: string) {\n console.warn(`thor.support \"${featureName as string}\" ${message}`);\n return false;\n }\n\n const featureVersions: FeatureVersions = features[featureName];\n\n if (!featureVersions) {\n return failFeature(`${featureName as string} is unknown, cannot check support.`);\n }\n\n if (isEmpty_(featureVersions)) {\n return failFeature('feature component version is unknown, cannot check support.');\n }\n\n return every_(featureVersions, (value, k) => {\n const key = k as keyof typeof rawVersions;\n const rawVersion = rawVersions[key];\n\n // yt-local in arcadia is meant to be of the freshest version\n if (rawVersion === _LOCAL_ARCADIA_VERSION) {\n return true;\n }\n\n if (!value) {\n return failFeature(`feature version of '${key}' is unknown, connot check support`);\n }\n\n const buildVersion = getVersionAndBuild(rawVersion);\n if (!buildVersion) {\n return failFeature(\n `version of '${key}' component is unknown, cannot check support.`,\n );\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => _versionInInterval(buildVersion[0], item));\n } else {\n return _versionInInterval(buildVersion[0], value);\n }\n });\n };\n}\n\nexport const isSupportedSelector = createSelector(\n [getRawProxyVersion, getRawSchedulerVersion, getRawMasterVersion],\n (proxy, scheduler, master) => _isFeatureSupported({proxy, scheduler, master}, FEATURES),\n);\n\nexport const isSupportedEffectiveExpiration = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('effectiveExpiration');\n },\n);\n\nexport const isSupportedClusterNodeForVersions = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('clusterNodeVersion');\n },\n);\n\nexport const isSupportedNodeMaintenanceApi = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('nodeMaintenanceApi');\n },\n);\n\nexport const isSupportedSchedulingChildrenByPool = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('schedulingChildrenByPool');\n },\n);\n","import {COMPONENTS_NODES_NODE_TABLE_ID} from '../../../constants/components/nodes/nodes';\n\ninterface Node {\n cell_id: string;\n peer_id: string;\n state: string;\n}\n\nexport const nodeTableProps = {\n size: 's',\n virtual: false,\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: COMPONENTS_NODES_NODE_TABLE_ID,\n columns: {\n items: {\n cell_id: {\n get(node: Node) {\n return node.cell_id;\n },\n sort: true,\n align: 'left',\n caption: 'Cell ID',\n },\n peer_id: {\n sort: true,\n get(node: Node) {\n return node.peer_id;\n },\n align: 'right',\n caption: 'Peer ID',\n },\n state: {\n sort: true,\n get(node: Node) {\n return node.state;\n },\n align: 'right',\n },\n },\n sets: {\n default: {\n items: ['cell_id', 'peer_id', 'state'],\n },\n },\n mode: 'default',\n },\n templates: {\n key: 'components/nodes/node',\n },\n};\n\nexport type ComponentsNodesLinkParams = {\n cluster?: string;\n rackFilter?: string;\n rackSelected?: Array<string>;\n banned?: 'enabled';\n decommissioned?: 'enabled';\n alerts?: 'enabled';\n full?: 'enabled';\n state?: 'online' | 'offline' | string;\n nodeTypes?: Array<string>;\n};\n\nexport function makeComponentsNodesLink({\n cluster,\n state,\n rackFilter,\n rackSelected,\n banned,\n decommissioned,\n full,\n alerts,\n nodeTypes,\n}: ComponentsNodesLinkParams) {\n if (!cluster) {\n return '';\n }\n let search = '';\n if (rackFilter) {\n search += `rack=filter-${rackFilter}&`;\n } else if (rackSelected?.length) {\n search += `rack=mode-union,selected-${rackSelected.join('|')}&`;\n }\n if (banned) {\n search += `banned=${banned}&`;\n }\n if (state) {\n search += `state=${state}&`;\n }\n if (decommissioned) {\n search += `decommissioned=${decommissioned}&`;\n }\n if (alerts) {\n search += `alerts=${alerts}&`;\n }\n if (full) {\n search += `full=${full}&`;\n }\n if (nodeTypes?.length) {\n search += `nodeType=${nodeTypes?.join(',')}&`;\n }\n return `/${cluster}/components/nodes?${search}`;\n}\n","import {MEDIUM_COLS_PREFIX} from '../../../constants/components/nodes/nodes';\n\nimport forEach_ from 'lodash/forEach';\n\nimport type {Node} from '../../../store/reducers/components/nodes/nodes/node';\nimport type {\n NodeRange,\n NodesSetupState,\n} from '../../../store/reducers/components/nodes/setup/setup';\nimport type {FIX_MY_TYPE} from '../../../types';\n\nconst isCorrectRange = (\n node: Node['IOWeight'] = {},\n {from, to}: NodeRange,\n key: FIX_MY_TYPE,\n isArray = false,\n) => {\n if (!node[key]) {\n return from.value === null && to.value === null;\n }\n\n const nodeValue = isArray ? (node[key] as FIX_MY_TYPE).length : node[key];\n\n return (\n nodeValue >= (from.value === null ? -Infinity : from.value) &&\n nodeValue <= (to.value === null ? Infinity : to.value)\n );\n};\n\nexport function createMediumsPredicates(setupFilters: NodesSetupState, mediumList: FIX_MY_TYPE) {\n const {storage} = setupFilters;\n const predicates = [] as Array<(node: Pick<Node, 'IOWeight'>) => boolean>;\n forEach_(mediumList, (medium) => {\n const fromTo =\n storage[(MEDIUM_COLS_PREFIX + medium) as FIX_MY_TYPE as keyof typeof storage];\n if (isRangeFilterDefined(fromTo)) {\n predicates.push((node: Pick<Node, 'IOWeight'>) =>\n isCorrectRange(node.IOWeight, fromTo, medium),\n );\n }\n });\n return predicates;\n}\n\nexport function isRangeFilterDefined({from, to}: NodeRange) {\n return from.value !== null || to.value !== null;\n}\n"],"names":["ChartLink","props","className","url","title","theme","children","hideIcon","face","wrapContent","icon","_jsx","Icon","awesome","content","_jsxs","React","Link","target","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","collapsed","_createClass","key","value","_this$props","this","name","size","overview","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","margin","clickable","onClick","Component","CollapsibleSection","_React$useState","_React$useState2","_slicedToArray","setCollapsed","onChange","_objectSpread","defaultProps","renderText","text","settings","undefined","mix","elem","mods","textProps","asHTML","dangerouslySetInnerHTML","__html","unipika","decode","String","prepareTextProps","printColumnAsTimeDurationWithMs","item","columnName","column","getColumn","hammer","format","get","printColumnAsReadableField","printColumnAsTime","ColumnAsTime","_ref","printColumnAsError","error","_typeof","showErrorPopup","hideOopsMsg","NO_VALUE","asNumber","__default__","_templates","add","templateId","templates","Object","keys","reduce","newTemplates","wrapRenderMethods","cn","ROLE_THEME","default","control","data","STATE_THEME","online","offline","NodeColumnState","_STATE_THEME$state","state","FirstUppercase","Label","type","NodeColumnBanned","_ref2","banned","StatusBlock","NodeColumnRole","_ref3","role","Address","NodeColumnText","_ref4","ClipboardButton","view","ClickableId","_ref5","allowTooltip","_ref5$format","v","ClickableText","color","Tooltip","MemoryProgress","progress","memoryText","memoryData","Progress","stack","category","_category$rawData","_category$rawData2","rawDataUsed","rawData","used","rawDataLimit","limit","rawDataLimitIsNumber","style","backgroundColor","_this2","map_","renderItem","renderPopupContent","disableInline","renderProgress","withVisible","Version","version","handleShow","handleClose","visible","SimpleModal","onCancel","onOutsideClick","Error","renderErrorVersion","renderVersion","NodeActions","_React$Component","handleEditClick","node","showNodeMaintenance","address","host","component","_this$props2","cluster","_UIFactory$getCompone","UIFactory","getComponentsNodeDashboardUrl","ClickableAttributesButton","path","withTooltip","Button","tooltipProps","placement","mapDispatchToProps","connect","getCluster","NodesColumnHeader","_props$options","_column$column","dispatch","useDispatch","sortState","useSelector","getTables","COMPONENTS_NODES_TABLE_ID","order","oldSortStateToOrderType","options","find","field","ColumnHeader","onSort","_props$options2","colInfo","toggleColumnSortOrder","withUndefined","allowUnordered","tableId","PropertiesByColumn","actions","alert_count","chunks","cpu","cpu_limit","cpu_usage","data_center","decommissioned","elections","elections_chaos","follower_recovery","follower_recovery_chaos","following","following_chaos","full","gpu","gpu_usage","gpu_limit","io_weight","last_seen","leader_recovery","leader_recovery_chaos","leading","leading_chaos","locations","memory_total","memory","memory_limit","memory_usage","network","network_usage","network_limit","none","none_chaos","physical_host","flavors","rack","removal_slots","removal_slots_usage","removal_slots_limit","repair_slots","repair_slots_usage","repair_slots_limit","replication_slots","replication_slots_usage","replication_slots_limit","scheduler_jobs","seal_slots","seal_slots_usage","seal_slots_limit","sessions","space_limit","space_usage","space","stopped","stopped_chaos","system_tags","tablet_cells","tablet_memory_dynamic","tablet_memory_dynamic_usage","tablet_memory_dynamic_limit","tablet_memory_static","tablet_memory_static_usage","tablet_memory_static_limit","tablet_memory","tablet_slots","user_slots","user_slots_usage","user_slots_limit","user_tags","write_sessions","nodesTableProps","virtual","virtualType","cssHover","striped","computeKey","columns","items","sort","align","physicalHost","compareFn","compareArraysBySizeThenByItems","dataCenter","caption","userTags","_node$userTags","systemTags","allowedOrderTypes","DESC_ASC_UNORDERED","alertCount","disableJobs","disableWriteSession","disableTabletCells","lastSeenTime","spaceProgress","renderHeader","sortWithUndefined","spaceTotal","spaceUsed","hidden","enabledLocations","cpuProgress","_node$cpu","_node$cpu2","usage","_node$gpu","_node$gpu2","_node$gpu3","memoryProgress","memoryTotal","networkProgress","hiddne","repairSlotsProgress","_ref6","repairSlots","limits","removalSlotsProgress","_ref7","removalSlots","replicationSlotsProgress","_ref8","replicationSlots","sealSlotsProgress","_ref9","sealSlots","userSlotsProgress","_ref10","userSlots","tabletSlots","raw","reduce_","sum","slot","_node$tabletSlots","byState","_node$tabletSlots2","makeCaptionProps","_node$chaosSlots","chaosSlots","_node$chaosSlots2","_node$tabletSlots3","_node$tabletSlots4","_node$chaosSlots3","_node$chaosSlots4","_node$tabletSlots5","_node$tabletSlots6","_node$chaosSlots5","_node$chaosSlots6","_node$tabletSlots7","_node$tabletSlots8","_node$chaosSlots7","_node$chaosSlots8","_node$tabletSlots9","_node$chaosSlots9","_node$tabletSlots10","_node$tabletSlots11","_node$chaosSlots10","_node$chaosSlots11","_node$tabletSlots12","_node$tabletSlots13","_node$chaosSlots12","_node$chaosSlots13","group","static","tabletStaticMemory","static_usage","static_limit","dynamic","tabletDynamicMemory","dynamic_usage","dynamic_limit","set","IOWeight","cache","ssd_blobs","ssd_journals","sets","storage","cpu_and_memory","resources","tablets","chaos_slots","custom","onMemoryProgressMouseEnter","onMemoryProgressMouseLeave","defaultColumns","renderTags","tags","themes","flexType","TagsContainer","tag","index","_ref11","_ref11$flexType","inline","NODES_TABLE_TEMPLATES","startsWith","mediumName","slice","IO_WEIGHT_PREFIX","Host","renderLabel","_item$dataCenter","toUpperCase","spaceText","progressText","cpuText","_item$gpu","_item$gpu2","memoryTotalText","networkText","statuses","sortBy_","keys_","_TABLET_SLOTS$state","TABLET_SLOTS","label","_item$tabletSlots","_item$chaosSlots","_item$tabletSlots2","_item$chaosSlots2","_item$tabletSlots3","_item$chaosSlots3","_item$tabletSlots4","_item$chaosSlots4","_item$tabletSlots5","_item$chaosSlots5","_item$tabletSlots6","_item$chaosSlots6","_item$tabletSlots7","_item$chaosSlots7","getNodeTablesProps","mediumList","allMediums","acc","res","merge_","groupHeaderStyle","width","NodeTypeSelector","onUpdate","Select","multiple","NODE_TYPE_ITEMS","newVal","newValue","updateListWithAll","NODE_TYPE","ALL_NODES","SystemNodeTypeSelector","getSystemNodesNodeTypesToLoad","setSettingSystemNodesNodeType","setSysmetNodesNodeType","ComponentsNodeTypeSelector","getComponentsNodesNodeTypes","componentsNodesSetNodeTypes","makeNodePath","applyMaintenance","resourceLimitsOverrides","getState","requests","push","prepareSetCommandForBatch","forEach_","isNaN","$value","$type","input_format","$attributes","annotate_with_types","t","command","comment","isMaintenanceApiAllowedForComponent","parameters","mine","_toConsumableArray","c","isAdd","input","makeObsoleteMaintenanceRequests","reloadNodeData","updateComponentsNode","getProxies","wrapApiPromiseByToaster","ytApiV4Id","executeBatch","YTApiId","addMaintenance","toasterName","batchType","skipSuccessToast","errorTitle","then","params","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","loadNodeMaintenanceData","sent","abrupt","NODE_MAINTENANCE_PARTIAL","stop","_x","_dispatch","user","getCurrentUserName","allowMaintenanceRequests","ytApiV3Id","maintenanceRequests","attributes","errorContent","maintenance","maintenance_requests","_maintenance$item$typ","_dst$comment","dst","otherComments","timestamp","assign","ban","ban_message","decommission","decommission_message","disable_scheduler_jobs","disable_tablet_cells","disable_write_sessions","resourceLimits","resource_limits","resource_limits_overrides","closeNodeMaintenanceModal","NODE_MAINTENANCE_RESET","isAllowedMaintenanceApiNodes","isAllowedMaintenanceApiProxies","COMPONENTS","NAMESPACES","TEMPLATES","SettingName","changeContentMode","contentMode","CHANGE_CONTENT_MODE","updateNodeCanceler","CancelHelper","getNodes","nodeTypes","GET_NODES","REQUEST","preparedAttrs","prepareAttributes","map","USE_CACHE","USE_MAX_SIZE","componentsClusterNodes","cancellation","removeAllAndSave","_step","_splitBatchResults","splitBatchResults","results","outputs","output","ypath","getValue","nodes","collectedItems","Set","_iterator","_createForOfIteratorHelper","s","n","done","_step2","_iterator2","has","err","e","f","SUCCESS","code","yt","CANCELLED","FAILURE","componentsUpdateNodeData","Node","ATTRIBUTES","COMPONENTS_NODES_UPDATE_NODE","changeHostFilter","hostFilter","CHANGE_HOST_FILTER","trim","CHANGE_NODE_TYPE","applyPreset","setup","APPLY_SETUP","savePreset","prevTemplates","getTemplates","_defineProperty","setSetting","removePreset","omit_","handleColumnsChange","selectedColumns","SELECTED_COLUMNS","getComponentsNodesFilterOptions","compact_","useTagsFromAttributes","useRacksFromAttributes","GET_NODES_FILTER_OPTIONS","list","join","racks","filterOptionsTags","filterOptionsRacks","Proxy","dead","effectiveState","getBoolean","banMessage","liveness","loadAverage","updatedAt","networkLoad","GET_PROXIES","PROXY_TYPE","HTTP","Promise","all","axios","systemProxies","cypressData","proxies","proxyData","cypressAttributes","getAttributes","componentsRpcProxies","componentGetRpcProxies","proxiesMap","alive","Boolean","meta","PROXIES_CHANGE_FILTERS","changeStateFilter","stateFilter","changeRoleFilter","roleFilter","changeBannedFilter","bannedFilter","resetProxyState","getNodeMaintenanceModalState","components","nodeMaintenanceModal","getNodeMaintenanceModalInitialValues","createSelector","k","isSupportedNodeMaintenanceApi","getClusterUiConfig","isSupported","uiConfig","enable_maintenance_api_nodes","enable_maintenance_api_proxies","getMediumsPredicates","getComponentNodesFiltersSetup","getMediumListNoCache","createMediumsPredicates","getPropertiesRequiredForMediums","mediumsPredicates","getFilteredByHost","toLowerCase","hostFilters","split","filter_","some_","_node$host","includes","getFilteredNodes","getComponentNodesFilterPredicates","predicates","predicatesArray","predicate","concatByAnd","getVisibleNodes","tables","utils","getComponentNodesTableProps","getVisibleColumns","getSelectedColumns","customColumns","getPropertiesRequiredForRender","visibleColumns","union_","x","getRequiredAttributes","getPropertiesRequiredForFilters","propertiesRequiredForRender","propertiesRequiredForFilters","propertiesRequiredForMediums","allRequiredProperties","AttributesByProperty","indexOf","getComponentNodesTags","getComponentNodesIndexByTag","useFromAttrs","fetchedTags","nodesByTag","getComponentNodesRacks","getComponentNodesIndexByRack","fetchedRacks","nodesByRack","types","COMPONENTS_AVAILABLE_STATES","getComponentNodesFilterSetupStateValue","getComponentNodesFilterStatePredicate","filter","getSetupFiltersRaw","excludes","substring","Toaster","autoHiding","mediumDefaults","medium","MEDIUM_COLS_PREFIX","cloneDeep_","groupFilterInitialState","_acc$get","Map","_node$rack","_acc$get2","UNAWARE","PropertiesByPredicate","blobSession","blockCache","chunkBlockMeta","chunkMeta","footprint","query","systemJobs","versionedChunkMeta","tabletDynamicUsed","tabletDynamicTotal","tabletStaticUsed","tabletStaticTotal","userJobsUsed","userJobsTotal","userSlotsUsed","userSlotsTotal","sealSlotsUsed","sealSlotsTotal","repairSlotsUsed","repairSlotsTotal","removalSlotsUsed","removalSlotsTotal","replicationSlotsUsed","replicationSlotsTotal","followerRecovery","leaderRecovery","staticUsed","staticTotal","dynamicUsed","dynamicTotal","getRackPredicate","setupFilters","_rack$selected","selected","createNodeTagPredicate","getFilterPredicatesObject","nodesByTags","rackPredicate","statePredicate","_node$physicalHost","createFlagPredicate","createAlertsFlagPredicate","createAttributeStatePredicate","schedulerJobs","writeSessions","tabletCells","createRangePredicate","blob_session","block_cache","chunk_block_meta","chunk_meta","system_jobs","versioned_chunk_meta","tablet_dynamic","tablet_static","user_jobs","getComponentNodesFiltersCount","filters","filterPredicatesObject","p","picked","values_","pickBy_","_value","tagFilter","getTags","mode","useRegexp","selectedItems","tagName","_nodesByTags$get","every_","_nodesByTags$get2","re","RegExp","test","flag","range","asArray","isRangeFilterDefined","from","to","nodeValue","Infinity","getSettingSystemNodesNodeType","valueSet","values","initialState","getMediumList","global","sortInPredefinedOrder","MediumType","DEFAULT","mediums","getCurrentCluster","versionToArray","build","versionArray","subversion","parseInt","_compareVersions","comparator","versionA","versionB","compareVectors","_versionInInterval","versionInterval","every","FEATURES","fieldsFilter","scheduler","effectiveExpiration","master","clusterNodeVersion","proxy","nodeMaintenanceApi","schedulingChildrenByPool","isSupportedSelector","schedulerVersion","masterVersion","rawVersions","features","featureName","failFeature","message","console","warn","featureVersions","isEmpty_","rawVersion","buildVersion","parsedVersion","match","getVersionAndBuild","isArray","some","isSupportedEffectiveExpiration","isSupportedClusterNodeForVersions","isSupportedSchedulingChildrenByPool","nodeTableProps","COMPONENTS_NODES_NODE_TABLE_ID","cell_id","peer_id","makeComponentsNodesLink","rackFilter","rackSelected","alerts","search","isCorrectRange","fromTo"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"js/1983.64a2e22f.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/templates/utils.js","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/NodeColumns.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/MemoryProgress/MemoryProgress.js","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/Version.js","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/NodeActions/NodeActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/Nodes/NodesColumnHeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/tabs/nodes/tables.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Nodes/NodeTypeSelector.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/system/nodes-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/components/node-maintenance-modal.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/components/nodes/nodes.ts","webpack://@ytsaurus/ui/./src/ui/store/reducers/components/proxies/proxies/proxy.js","webpack://@ytsaurus/ui/./src/ui/store/actions/components/proxies/proxies.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/components/node-maintenance-modal.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/components/nodes/nodes/data.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/components/nodes/nodes/predicates.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/system/nodes.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/tables.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/thor/index.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/thor/support.ts","webpack://@ytsaurus/ui/./src/ui/utils/components/nodes/node.ts","webpack://@ytsaurus/ui/./src/ui/utils/components/nodes/setup.ts"],"sourcesContent":["import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n","import React from 'react';\nimport unipika from '../../common/thor/unipika';\nimport block from 'bem-cn-lite';\n\nimport Link from '../../components/Link/Link';\n\nimport hammer from '../../common/hammer';\nimport {showErrorPopup} from '../../utils/utils';\n\nimport './utils.scss';\n\nfunction wrapRenderMethods(templates) {\n return Object.keys(templates).reduce((newTemplates, key) => {\n newTemplates[key] = templates[key];\n\n return newTemplates;\n }, {});\n}\n\n/**\n * Template must be a scoped function, because they are bound to elements-table component instance\n * @param {ViewModel} item\n * @param {String} columnName\n */\nfunction defaultTemplate(item, columnName) {\n return String(hammer.format['ValueOrDefault'](item[columnName]));\n}\n\nfunction prepareTextProps(text, asHTML) {\n const props = {};\n\n if (asHTML) {\n // Need to render html strings\n props.dangerouslySetInnerHTML = {__html: text};\n } else {\n props.children = unipika.decode(String(text));\n }\n\n return props;\n}\n\nexport function renderText(text, settings = {}) {\n let className = block('elements-text');\n\n if (settings.mix) {\n className = className(\n false,\n block(settings.mix.block)(settings.mix.elem, {\n ...settings.mix.mods,\n }),\n );\n } else {\n className = className();\n }\n\n const textProps = prepareTextProps(text, settings.asHTML);\n\n const title = settings.title || text;\n\n return <span {...textProps} title={title} className={className} />;\n}\n\nexport function printColumnAsBytes(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Bytes'](column.get(item));\n}\n\nexport function printColumnAsNumber(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Number'](column.get(item));\n}\n\nexport function printColumnAsTimeDurationWithMs(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['TimeDuration'](column.get(item), {\n format: 'milliseconds',\n });\n}\n\nexport function printColumnAsReadableField(item, columnName) {\n const column = this.getColumn(columnName);\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['ReadableField'](column.get(item))}\n </span>\n );\n}\n\nexport function printColumnAsTime(item, columnName) {\n const value = this?.getColumn ? this.getColumn(columnName).get(item) : item[columnName];\n return <ColumnAsTime value={value} />;\n}\n\nexport function ColumnAsTime({value}) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['DateTime'](value, {format: 'full'})}\n </span>\n );\n}\n\nexport function printColumnAsError(error) {\n const showError = () => {\n showErrorPopup(error, {hideOopsMsg: true});\n };\n return typeof error === 'object' ? (\n <Link theme=\"ghost\" onClick={showError}>\n View\n </Link>\n ) : (\n hammer.format.NO_VALUE\n );\n}\n\n// Using prepared table data\nexport function asBytes(item, columnName) {\n return hammer.format['Bytes'](item[columnName]);\n}\n\nexport function asNumber(item, columnName) {\n return hammer.format['Number'](item[columnName]);\n}\n\nexport default {\n __default__: defaultTemplate,\n _templates: {},\n add: function (templateId, templates) {\n this._templates[templateId] = wrapRenderMethods(templates);\n },\n get: function (templateId) {\n return this._templates[templateId] || {};\n },\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../common/hammer/format';\nimport Label, {LabelTheme} from '../../../components/Label/Label';\nimport StatusBlock from '../../../components/StatusBlock/StatusBlock';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\n\nimport './NodeColumns.scss';\n\nconst block = cn('yt-node-columns');\n\nconst ROLE_THEME = {\n default: 'default',\n control: 'default',\n data: 'default',\n} as const;\n\nconst STATE_THEME: Record<string, LabelTheme> = {\n online: 'success',\n offline: 'danger',\n} as const;\n\nexport function NodeColumnState({state}: {state: 'online' | 'offline' | string}) {\n const text = format.FirstUppercase(state);\n const theme = STATE_THEME[state] ?? 'default';\n\n return <Label theme={theme} className={block('state')} type=\"text\" text={text} />;\n}\n\nexport function NodeColumnBanned({banned}: {banned: boolean}) {\n return banned ? <StatusBlock text=\"B\" theme=\"banned\" /> : format.NO_VALUE;\n}\n\nexport function NodeColumnRole({role}: {role: 'default' | 'control' | 'data'}) {\n const theme = ROLE_THEME[role] || 'info';\n const text = format.Address(role);\n\n return <Label theme={theme} type=\"text\" text={text} />;\n}\n\nexport function NodeColumnText({text}: {text: string}) {\n return (\n <div className={block('text', 'elements-column_with-hover-button')}>\n <div className={block('text-content')} title={text}>\n {text}\n </div>\n <ClipboardButton text={text} view=\"flat-secondary\" size=\"s\" />\n </div>\n );\n}\n\nexport function ClickableId({\n text,\n onClick,\n allowTooltip,\n format = (v) => v,\n}: {\n text: string;\n onClick?: () => void;\n allowTooltip?: boolean;\n format?: (v: string) => string;\n}) {\n return (\n <div className=\"elements-column_type_id elements-column_with-hover-button\">\n <ClickableText\n color=\"primary\"\n onClick={() => onClick?.()}\n className={'elements-monospace elements-ellipsis'}\n >\n <Tooltip\n className={block('clickable-column-tooltip')}\n content={allowTooltip ? format(text) : null}\n >\n {format(text)}\n </Tooltip>\n </ClickableText>\n \n <ClipboardButton text={text} view=\"flat-secondary\" size=\"s\" />\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport withVisible from '../../../../../hocs/withVisible';\nimport hammer from '../../../../../common/hammer';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\n\nimport './MemoryProgress.scss';\n\nconst block = cn('nodes-memory');\n\nclass MemoryProgress extends Component {\n static propTypes = {\n // from parent\n memoryText: PropTypes.string.isRequired,\n memoryData: PropTypes.arrayOf(\n PropTypes.shape({\n color: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n value: PropTypes.number.isRequired,\n rawData: PropTypes.shape({\n limit: PropTypes.number,\n used: PropTypes.number,\n }),\n }),\n ).isRequired,\n };\n\n progress = React.createRef();\n\n renderProgress() {\n const {memoryText, memoryData} = this.props;\n\n return <Progress stack={memoryData} text={memoryText} />;\n }\n\n renderItem(category) {\n const rawDataUsed = category.rawData?.used;\n const rawDataLimit = category.rawData?.limit;\n const rawDataLimitIsNumber = typeof rawDataLimit === 'number';\n\n return (\n <li key={category.name} className={block('category')}>\n <div className={block('category-legend')}>\n <div\n className={block('category-legend-color')}\n style={{backgroundColor: category.color}}\n />\n <strong className={block('category-legend-title')}>\n {hammer.format['ReadableField'](category.name)}\n </strong>\n </div>\n <div className={block('category-data')}>\n <span>{hammer.format['Bytes'](rawDataUsed)}</span>\n {rawDataLimitIsNumber && ' / '}\n {rawDataLimitIsNumber && <span>{hammer.format['Bytes'](rawDataLimit)}</span>}\n </div>\n </li>\n );\n }\n\n renderPopupContent() {\n const {memoryData} = this.props;\n\n return (\n memoryData.length > 0 && (\n <div className={block('popup')}>\n <ul className={block('content')}>\n {map_(memoryData, (category) => this.renderItem(category))}\n </ul>\n </div>\n )\n );\n }\n\n render() {\n return (\n <Tooltip className={block()} content={this.renderPopupContent()} disableInline>\n <div>{this.renderProgress()}</div>\n </Tooltip>\n );\n }\n}\n\nexport default withVisible(MemoryProgress);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport SimpleModal from '../../../../components/Modal/SimpleModal';\nimport Error from '../../../../components/Error/Error';\nimport Icon from '../../../../components/Icon/Icon';\nimport Link from '../../../../components/Link/Link';\n\nimport withVisible from '../../../../hocs/withVisible';\n\nconst block = cn('elements-column');\n\nclass Version extends Component {\n static propTypes = {\n // from parent component\n version: PropTypes.string.isRequired,\n error: PropTypes.object,\n\n // from hoc\n visible: PropTypes.bool.isRequired,\n handleClose: PropTypes.func.isRequired,\n handleShow: PropTypes.func.isRequired,\n };\n\n renderVersion() {\n const {version} = this.props;\n\n return (\n <div className={block({type: 'id', 'with-hover-button': true})} title={version}>\n <span className=\"elements-monospace elements-ellipsis\">{version}</span>\n \n <ClipboardButton\n text={version}\n view=\"flat-secondary\"\n size=\"s\"\n title={'Copy ' + version}\n />\n </div>\n );\n }\n\n renderErrorVersion() {\n const {handleShow, error, handleClose, visible} = this.props;\n\n return (\n <div className=\"elements-monospace elements-ellipsis\">\n <Icon awesome=\"exclamation-triangle\" /> Error  \n <Link theme=\"ghost\" onClick={handleShow}>\n View\n </Link>\n <SimpleModal visible={visible} onCancel={handleClose} onOutsideClick={handleClose}>\n <Error error={error} />\n </SimpleModal>\n </div>\n );\n }\n\n render() {\n const {error} = this.props;\n\n return error ? this.renderErrorVersion() : this.renderVersion();\n }\n}\n\nexport default withVisible(Version);\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport Button from '../../../../../components/Button/Button';\nimport Icon from '../../../../../components/Icon/Icon';\nimport ChartLink from '../../../../../components/ChartLink/ChartLink';\n\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {showNodeMaintenance} from '../../../../../store/actions/components/node-maintenance-modal';\n\nimport UIFactory from '../../../../../UIFactory';\nimport {RootState} from '../../../../../store/reducers';\n\nexport type NodeActionsProps = {node: {host: string}} & ConnectedProps<typeof connector>;\n\nclass NodeActions extends React.Component<NodeActionsProps> {\n handleEditClick = () => {\n const {node, showNodeMaintenance} = this.props;\n\n showNodeMaintenance({\n address: node.host,\n component: 'cluster_node',\n });\n };\n\n render() {\n const {node, cluster} = this.props;\n const {url, title} = UIFactory.getComponentsNodeDashboardUrl({cluster, host: node.host});\n\n return (\n <React.Fragment>\n <ClickableAttributesButton\n title={node.host}\n path={`//sys/cluster_nodes/${node.host}`}\n withTooltip\n />\n\n <ChartLink\n url={url}\n wrapContent={(node) => (\n <Button\n tooltipProps={{\n placement: 'bottom',\n content: title,\n }}\n target=\"_blank\"\n view=\"flat-secondary\"\n size=\"m\"\n withTooltip\n >\n {node}\n </Button>\n )}\n />\n <Button onClick={this.handleEditClick} view=\"flat-secondary\" size=\"m\" withTooltip>\n <Icon face=\"regular\" awesome=\"pencil\" />\n </Button>\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n return {\n cluster: getCluster(state),\n };\n};\n\nconst mapDispatchToProps = {\n showNodeMaintenance,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(NodeActions);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {COMPONENTS_NODES_TABLE_ID} from '../../../../../constants/components/nodes/nodes';\nimport ColumnHeader, {\n ColumnHeaderProps,\n HasSortColumn,\n} from '../../../../../components/ColumnHeader/ColumnHeader';\nimport {toggleColumnSortOrder} from '../../../../../store/actions/tables';\nimport {getTables} from '../../../../../store/selectors/tables';\nimport {NodesTableColumnNames} from '../../../../../pages/components/tabs/nodes/tables';\nimport {oldSortStateToOrderType} from '../../../../../utils/sort-helpers';\n\nexport function NodesColumnHeader(\n props: HasSortColumn<NodesTableColumnNames> & Pick<ColumnHeaderProps, 'align'>,\n) {\n const dispatch = useDispatch();\n const sortState = useSelector(getTables)[COMPONENTS_NODES_TABLE_ID];\n const order = oldSortStateToOrderType(sortState);\n\n const column = props.options?.find(({column}) => sortState.field === column);\n\n return (\n <ColumnHeader\n {...props}\n column={props.options ? column?.column ?? props.column : props.column}\n order={column ? order : undefined}\n onSort={(columnName) => {\n const colInfo = props.options?.find(({column}) => columnName === column);\n dispatch(\n toggleColumnSortOrder({\n columnName,\n withUndefined: colInfo?.withUndefined,\n allowUnordered: colInfo?.allowUnordered,\n tableId: COMPONENTS_NODES_TABLE_ID,\n }),\n );\n }}\n />\n );\n}\n","import React from 'react';\n\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport merge_ from 'lodash/merge';\nimport reduce_ from 'lodash/reduce';\nimport sortBy_ from 'lodash/sortBy';\n\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport {COMPONENTS_NODES_TABLE_ID} from '../../../../constants/components/nodes/nodes';\nimport {DESC_ASC_UNORDERED, compareArraysBySizeThenByItems} from '../../../../utils/sort-helpers';\n\nimport Version from '../../../../pages/components/tabs/nodes/Version';\nimport StatusBlock, {StatusBlockTheme} from '../../../../components/StatusBlock/StatusBlock';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport NodeActions from '../../../../pages/components/tabs/nodes/NodeActions/NodeActions';\nimport MemoryProgress from '../../../../pages/components/tabs/nodes/MemoryProgress/MemoryProgress';\nimport {Host} from '../../../../containers/Host/Host';\n\nimport hammer from '../../../../common/hammer';\nimport {TABLET_SLOTS, renderLabel} from '../../../../components/templates/components/nodes/nodes';\nimport type {Node, TabletSlotState} from '../../../../store/reducers/components/nodes/nodes/node';\nimport type {FIX_MY_TYPE} from '../../../../types';\nimport {NodeColumnBanned, NodeColumnState} from '../../../../pages/components/tabs/NodeColumns';\nimport {NodesColumnHeader} from '../../../../pages/components/tabs/nodes/Nodes/NodesColumnHeader';\nimport {ColumnInfo} from '../../../../components/ElementsTable/ElementsTableHeader';\nimport {progressText} from '../../../../utils/progress';\n\nimport './tables.scss';\n\nconst block = cn('components-nodes-templates');\n\nexport const PropertiesByColumn = {\n __default__: ['IOWeight'],\n actions: ['host'],\n alert_count: ['alertCount'],\n banned: ['banned'],\n chunks: ['chunks'],\n cpu: ['cpuProgress', 'cpuText'],\n cpu_limit: ['cpu'],\n cpu_usage: ['cpu'],\n data_center: ['dataCenter'],\n decommissioned: ['decommissioned'],\n elections: ['tabletSlots'],\n elections_chaos: ['chaosSlots'],\n follower_recovery: ['tabletSlots'],\n follower_recovery_chaos: ['chaosSlots'],\n following: ['tabletSlots'],\n following_chaos: ['chaosSlots'],\n full: ['full'],\n gpu: ['gpu'],\n gpu_usage: ['gpu'],\n gpu_limit: ['gpu'],\n host: ['cluster', 'host'],\n io_weight: ['IOWeight'],\n last_seen: ['lastSeenTime'],\n leader_recovery: ['tabletSlots'],\n leader_recovery_chaos: ['chaosSlots'],\n leading: ['tabletSlots'],\n leading_chaos: ['chaosSlots'],\n locations: ['locations', 'enabledLocations'],\n memory_total: ['memoryProgress', 'memoryTotalText'],\n memory: ['memoryData', 'memoryProgress', 'memoryText'],\n memory_limit: ['memoryTotal'],\n memory_usage: ['memoryTotal'],\n network: ['networkProgress', 'networkText'],\n network_usage: ['network'],\n network_limit: ['network'],\n none: ['tabletSlots'],\n none_chaos: ['chaosSlots'],\n physical_host: ['physicalHost'],\n flavors: ['flavors'],\n rack: ['rack'],\n removal_slots: ['removalSlots', 'removalSlotsProgress'],\n removal_slots_usage: ['removalSlots'],\n removal_slots_limit: ['removalSlots'],\n repair_slots: ['repairSlots', 'repairSlotsProgress'],\n repair_slots_usage: ['repairSlots'],\n repair_slots_limit: ['repairSlots'],\n replication_slots: ['replicationSlots', 'replicationSlotsProgress'],\n replication_slots_usage: ['replicationSlots'],\n replication_slots_limit: ['replicationSlots'],\n scheduler_jobs: ['disableJobs'],\n seal_slots: ['sealSlots', 'sealSlotsProgress'],\n seal_slots_usage: ['sealSlots'],\n seal_slots_limit: ['sealSlots'],\n sessions: ['sessions'],\n space_limit: ['spaceTotal'],\n space_usage: ['spaceUsed'],\n space: ['spaceProgress', 'spaceText'],\n state: ['state'],\n stopped: ['tabletSlots'],\n stopped_chaos: ['chaosSlots'],\n system_tags: ['systemTags'],\n tablet_cells: ['disableTabletCells'],\n tablet_memory_dynamic: ['tabletDynamicMemory'],\n tablet_memory_dynamic_usage: ['tabletDynamicMemory'],\n tablet_memory_dynamic_limit: ['tabletDynamicMemory'],\n tablet_memory_static: ['tabletStaticMemory'],\n tablet_memory_static_usage: ['tabletStaticMemory'],\n tablet_memory_static_limit: ['tabletStaticMemory'],\n tablet_memory: ['tabletStaticMemory', 'tabletDynamicMemory'],\n tablet_slots: ['tabletSlots'],\n user_slots: ['userSlots', 'userSlotsProgress'],\n user_slots_usage: ['userSlots'],\n user_slots_limit: ['userSlots'],\n user_tags: ['userTags'],\n version: ['version'],\n write_sessions: ['disableWriteSession'],\n} as const;\n\nexport type NodesTableColumnNames = keyof typeof PropertiesByColumn;\n\nexport type NodeWithProps<T extends keyof typeof PropertiesByColumn> = Pick<\n Node & {cluster: string},\n (typeof PropertiesByColumn)[T][number]\n>;\n\ntype ItemDef<P extends keyof typeof PropertiesByColumn> = {\n align?: 'left' | 'center' | 'right';\n get?: (node: NodeWithProps<P>) => void;\n sort?: ((node: NodeWithProps<P>) => void) | boolean;\n};\n\ntype Items = {\n [P in keyof typeof PropertiesByColumn]?: ItemDef<P> & {\n group?: boolean;\n items?: Record<string, ItemDef<P>>;\n set?: string[];\n };\n};\n\nconst ioWeight: NonNullable<Items['io_weight']> = {\n group: true,\n items: {\n default: {\n get(node) {\n return node.IOWeight.default;\n },\n sort: true,\n align: 'center',\n },\n cache: {\n get(node) {\n return node.IOWeight.cache;\n },\n sort: true,\n align: 'center',\n },\n ssd_blobs: {\n get(node) {\n return node.IOWeight.ssd_blobs;\n },\n sort: true,\n align: 'center',\n },\n ssd_journals: {\n get(node) {\n return node.IOWeight.ssd_journals;\n },\n sort: true,\n align: 'center',\n },\n },\n set: ['default', 'ssd_blobs', 'ssd_journals'],\n};\n\nconst nodesTableProps = {\n size: 's',\n virtual: true,\n virtualType: 'simple',\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: COMPONENTS_NODES_TABLE_ID,\n computeKey(node: NodeWithProps<'host'>) {\n return node.host;\n },\n columns: {\n items: {\n host: {\n get(node) {\n return node.host;\n },\n sort: true,\n align: 'left',\n },\n physical_host: {\n get(node) {\n return node.physicalHost;\n },\n sort: true,\n align: 'left',\n },\n flavors: {\n get(node) {\n return node.flavors;\n },\n sort: true,\n compareFn: compareArraysBySizeThenByItems,\n align: 'left',\n },\n state: {\n get(node) {\n return node.state;\n },\n sort: true,\n align: 'center',\n },\n data_center: {\n get(node) {\n return node.dataCenter;\n },\n sort: true,\n caption: 'DC',\n align: 'left',\n tooltipProps: {placement: 'bottom', content: 'Data Center'},\n },\n rack: {\n get(node) {\n return hammer.format['RackToVector'](node.rack);\n },\n sort: true,\n align: 'left',\n },\n user_tags: {\n get(node) {\n return node.userTags || -1;\n },\n sort(node) {\n return !node.userTags?.length ? undefined : node.userTags;\n },\n compareFn: compareArraysBySizeThenByItems,\n align: 'left',\n },\n system_tags: {\n get(node) {\n return node.systemTags || -1;\n },\n sort(node) {\n return node.systemTags || [];\n },\n compareFn: compareArraysBySizeThenByItems,\n align: 'left',\n },\n banned: {\n get(item) {\n return item.banned;\n },\n align: 'center',\n sort: true,\n caption: 'B',\n tooltipProps: {placement: 'bottom', content: 'Banned'},\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n decommissioned: {\n get(item) {\n return item.decommissioned;\n },\n align: 'center',\n sort: true,\n caption: 'D',\n tooltipProps: {\n placement: 'bottom',\n content: 'Decommissioned',\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n full: {\n get(item) {\n return item.full;\n },\n align: 'center',\n sort: true,\n caption: 'F',\n tooltipProps: {placement: 'bottom', content: 'Full'},\n },\n alert_count: {\n get(item) {\n return item.alertCount;\n },\n sort(item) {\n return item.alertCount;\n },\n align: 'center',\n caption: 'A',\n tooltipProps: {placement: 'bottom', content: 'Alerts'},\n },\n scheduler_jobs: {\n get(node) {\n return node.disableJobs;\n },\n sort: true,\n align: 'left',\n },\n write_sessions: {\n get(node) {\n return node.disableWriteSession;\n },\n sort: true,\n align: 'left',\n },\n tablet_cells: {\n get(node) {\n return node.disableTabletCells;\n },\n sort: true,\n align: 'left',\n },\n version: {\n get(node) {\n return node.version;\n },\n sort: true,\n align: 'left',\n },\n last_seen: {\n get(node) {\n return node.lastSeenTime;\n },\n sort: true,\n align: 'left',\n },\n space: {\n get(node) {\n return node.spaceProgress;\n },\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"space\"\n title=\"Space\"\n options={[\n {\n column: 'space',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'space_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'space_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n sortWithUndefined: true,\n align: 'center',\n },\n space_limit: {\n get(node) {\n return node.spaceTotal;\n },\n sort: true,\n sortWithUndefined: true,\n align: 'right',\n },\n space_usage: {\n get(node) {\n return node.spaceUsed;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n locations: {\n get(node) {\n return [\n node.locations && node.locations.length,\n node.locations && node.enabledLocations.length,\n ];\n },\n sort: true,\n align: 'center',\n },\n chunks: {\n get(node) {\n return node.chunks;\n },\n sort: true,\n sortWithUndefined: true,\n align: 'left',\n },\n sessions: {\n get(node) {\n return node.sessions;\n },\n sort: true,\n sortWithUndefined: true,\n align: 'left',\n },\n cpu: {\n get(node) {\n return node.cpuProgress;\n },\n sortWithUndefined: true,\n align: 'center',\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"cpu\"\n options={[\n {\n column: 'cpu',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'cpu_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'cpu_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n title=\"CPU\"\n />\n );\n },\n },\n cpu_limit: {\n get(node) {\n return node.cpu?.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n cpu_usage: {\n get(node) {\n return node.cpu?.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n gpu: {\n get(node) {\n return node.gpu?.progress;\n },\n sortWithUndefined: true,\n align: 'center',\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"gpu\"\n options={[\n {\n column: 'gpu',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'gpu_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'gpu_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n title=\"GPU\"\n />\n );\n },\n },\n gpu_limit: {\n get(node) {\n return node.gpu?.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n gpu_usage: {\n get(node) {\n return node.gpu?.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n memory: {\n get(node) {\n return node.memoryProgress;\n },\n sortWithUndefined: true,\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"memory\"\n title=\"Memory\"\n options={[\n {\n column: 'memory',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'memory_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'memory_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n memory_usage: {\n get(node) {\n return node.memoryTotal.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n memory_limit: {\n get(node) {\n return node.memoryTotal.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n memory_total: {\n get(node) {\n return node.memoryProgress;\n },\n sort: true,\n align: 'center',\n },\n network: {\n get(node) {\n return node.networkProgress;\n },\n sortWithUndefined: true,\n renderHeader: ({align}: ColumnInfo) => {\n return (\n <NodesColumnHeader\n align={align}\n column=\"network\"\n title=\"Network\"\n options={[\n {\n column: 'network',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'network_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'network_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n network_usage: {\n get(node) {\n return node.network.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n network_limit: {\n get(node) {\n return node.network.limit;\n },\n sortWithUndefined: true,\n hiddne: true,\n },\n repair_slots: {\n get(node) {\n return node.repairSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"repair_slots\"\n title=\"Repair slots\"\n options={[\n {\n column: 'repair_slots',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'repair_slots_usage',\n title: 'Usage',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'repair_slots_limit',\n title: 'Limit',\n withUndefined: true,\n allowUnordered: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n repair_slots_usage: {\n get(node) {\n return node.repairSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n repair_slots_limit: {\n get(node) {\n return node.repairSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n removal_slots: {\n get(node) {\n return node.removalSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"removal_slots\"\n title=\"Removal slots\"\n options={[\n {\n column: 'removal_slots',\n title: 'Progress',\n withUndefined: true,\n allowUnordered: true,\n },\n {\n column: 'removal_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'removal_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n removal_slots_usage: {\n get(node) {\n return node.removalSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n removal_slots_limit: {\n get(node) {\n return node.removalSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n replication_slots: {\n get(node) {\n return node.replicationSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"replication_slots\"\n title=\"Replication slots\"\n options={[\n {\n column: 'replication_slots',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'replication_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'replication_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n replication_slots_usage: {\n get(node) {\n return node.replicationSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n replication_slots_limit: {\n get(node) {\n return node.replicationSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n seal_slots: {\n get(node) {\n return node.sealSlotsProgress;\n },\n sortWithUndefined: true,\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"seal_slots\"\n title=\"Seal slots\"\n options={[\n {\n column: 'seal_slots',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'seal_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'seal_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n seal_slots_usage: {\n get(node) {\n return node.sealSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n seal_slots_limit: {\n get(node) {\n return node.sealSlots.limits;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n user_slots: {\n get(node) {\n return node.userSlotsProgress;\n },\n renderHeader({align}: ColumnInfo) {\n return (\n <NodesColumnHeader\n align={align}\n column=\"user_slots\"\n title=\"User slots\"\n options={[\n {\n column: 'user_slots',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'user_slots_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'user_slots_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n align: 'center',\n },\n user_slots_usage: {\n get(node) {\n return node.userSlots.usage;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n user_slots_limit: {\n get(node) {\n return node.userSlots.limits;\n },\n align: 'center',\n sortWithUndefined: true,\n hidden: true,\n },\n tablet_slots: {\n get(node) {\n if (node.tabletSlots && node.tabletSlots.raw && node.tabletSlots.raw.length) {\n return reduce_(\n node.tabletSlots.raw,\n (sum, slot) => (slot.state === 'none' ? sum : sum + 1),\n 0,\n );\n }\n\n return -1;\n },\n sort: true,\n align: 'left',\n },\n none: {\n get(node) {\n return node.tabletSlots?.byState.none;\n },\n sort(node) {\n return node.tabletSlots?.byState.none?.length;\n },\n // sort: true,\n align: 'center',\n ...makeCaptionProps('TS None', 'Tablet Slots None'),\n },\n none_chaos: {\n get(node) {\n return node.chaosSlots?.byState.none;\n },\n sort(node) {\n return node.chaosSlots?.byState.none?.length;\n },\n // sort: true,\n align: 'center',\n ...makeCaptionProps('CS None', 'Chaos Slots None'),\n },\n leading: {\n get(node) {\n return node.tabletSlots?.byState.leading;\n },\n sort(node) {\n return node.tabletSlots?.byState?.leading?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Leading', 'Tablet Slots Leading'),\n },\n leading_chaos: {\n get(node) {\n return node.chaosSlots?.byState.leading;\n },\n sort(node) {\n return node.chaosSlots?.byState?.leading?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Leading', 'Chaos Slots Leading'),\n },\n following: {\n get(node) {\n return node.tabletSlots?.byState.following;\n },\n sort(node) {\n return node.tabletSlots?.byState?.following?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Following', 'Tablet Slots Following'),\n },\n following_chaos: {\n get(node) {\n return node.chaosSlots?.byState.following;\n },\n sort(node) {\n return node.chaosSlots?.byState?.following?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Following', 'Chaos Slots Following'),\n },\n follower_recovery: {\n get(node) {\n return node.tabletSlots?.byState.follower_recovery;\n },\n sort(node) {\n return node.tabletSlots?.byState.follower_recovery?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS FR', 'Tablet Slots Follower Recovery'),\n },\n follower_recovery_chaos: {\n get(node) {\n return node.chaosSlots?.byState.follower_recovery;\n },\n sort(node) {\n return node.chaosSlots?.byState.follower_recovery?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS FR', 'Chaos Slots Follower Recovery'),\n },\n leader_recovery: {\n get(node) {\n return node.tabletSlots?.byState['leader_recovery'];\n },\n sort: true,\n align: 'center',\n ...makeCaptionProps('TS LR', 'Tablet Slots Leader Recovery'),\n },\n leader_recovery_chaos: {\n get(node) {\n return node.chaosSlots?.byState['leader_recovery'];\n },\n sort: true,\n align: 'center',\n ...makeCaptionProps('CS LR', 'Chaos Slots Leader Recovery'),\n },\n stopped: {\n get(node) {\n return node.tabletSlots?.byState.stopped;\n },\n sort(node) {\n return node.tabletSlots?.byState.stopped?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Stopped', 'Tablet Slots Stopped'),\n },\n stopped_chaos: {\n get(node) {\n return node.chaosSlots?.byState.stopped;\n },\n sort(node) {\n return node.chaosSlots?.byState.stopped?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Stopped', 'Chaos Slots Stopped'),\n },\n elections: {\n get(node) {\n return node.tabletSlots?.byState.elections;\n },\n sort(node) {\n return node.tabletSlots?.byState.elections?.length;\n },\n align: 'center',\n ...makeCaptionProps('TS Elections', 'Tablet Slots Elections'),\n },\n elections_chaos: {\n get(node) {\n return node.chaosSlots?.byState.elections;\n },\n sort(node) {\n return node.chaosSlots?.byState.elections?.length;\n },\n align: 'center',\n ...makeCaptionProps('CS Elections', 'Chaos Slots Elections'),\n },\n tablet_memory: {\n group: true,\n items: {\n static: {\n get(node) {\n return node.tabletStaticMemory.progress;\n },\n renderHeader: (column: ColumnInfo) => {\n return (\n <NodesColumnHeader\n column=\"tablet_memory_static\"\n align={column.align}\n title=\"Static memory\"\n options={[\n {\n column: 'tablet_memory_static',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_static_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_static_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n sortWithUndefined: true,\n align: 'center',\n },\n static_usage: {\n get(node) {\n return node.tabletStaticMemory.used;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n static_limit: {\n get(node) {\n return node.tabletStaticMemory.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n dynamic: {\n get(node) {\n return node.tabletDynamicMemory.progress;\n },\n renderHeader: (column: ColumnInfo) => {\n return (\n <NodesColumnHeader\n column=\"tablet_memory_dynamic\"\n align={column.align}\n title=\"Dynamic memory\"\n options={[\n {\n column: 'tablet_memory_dynamic',\n title: 'Progress',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_dynamic_usage',\n title: 'Usage',\n withUndefined: true,\n },\n {\n column: 'tablet_memory_dynamic_limit',\n title: 'Limit',\n withUndefined: true,\n },\n ]}\n />\n );\n },\n sortWithUndefined: true,\n align: 'center',\n },\n dynamic_usage: {\n get(node) {\n return node.tabletDynamicMemory.used;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n dynamic_limit: {\n get(node) {\n return node.tabletDynamicMemory.limit;\n },\n sortWithUndefined: true,\n hidden: true,\n },\n },\n set: ['static', 'dynamic'],\n },\n io_weight: ioWeight,\n actions: {\n get(node) {\n return node.host;\n },\n sort: false,\n caption: '',\n align: 'right',\n },\n } as Items,\n sets: {\n default: {\n items: [\n 'host',\n 'physical_host',\n 'user_tags',\n 'system_tags',\n 'state',\n 'data_center',\n 'rack',\n 'banned',\n 'decommissioned',\n 'full',\n 'alert_count',\n 'version',\n 'last_seen',\n 'actions',\n ],\n },\n storage: {\n items: ['host', 'space', 'sessions', 'chunks', 'io_weight', 'actions'],\n },\n cpu_and_memory: {\n items: ['host', 'cpu', 'memory', 'network', 'actions'],\n },\n resources: {\n items: [\n 'host',\n 'user_slots',\n 'seal_slots',\n 'repair_slots',\n 'removal_slots',\n 'replication_slots',\n 'actions',\n ],\n },\n tablets: {\n items: ['host', 'tablet_slots', 'tablet_memory', 'actions'],\n },\n tablet_slots: {\n items: [\n 'host',\n 'none',\n 'leading',\n 'following',\n 'follower_recovery',\n 'leader_recovery',\n 'stopped',\n 'elections',\n ],\n },\n chaos_slots: {\n items: [\n 'host',\n 'none_chaos',\n 'leading_chaos',\n 'following_chaos',\n 'follower_recovery_chaos',\n 'leader_recovery_chaos',\n 'stopped_chaos',\n 'elections_chaos',\n ],\n },\n custom: {\n items: [\n 'host',\n 'user_tags',\n 'state',\n 'banned',\n 'decommissioned',\n 'full',\n 'alert_count',\n 'last_seen',\n 'actions',\n ],\n },\n },\n },\n templates: {\n data: {\n onMemoryProgressMouseEnter() {},\n onMemoryProgressMouseLeave() {},\n },\n },\n};\n\nexport const defaultColumns = nodesTableProps.columns.sets.custom.items;\n\nfunction renderTags(tags?: Array<string | number>, themes?: StatusBlockTheme[], flexType?: 'flex') {\n return tags?.length ? (\n <TagsContainer flexType={flexType}>\n {map_(tags, (tag, index) => (\n <StatusBlock key={tag} theme={themes?.[index]} text={tag} />\n ))}\n </TagsContainer>\n ) : (\n hammer.format.NO_VALUE\n );\n}\n\nfunction TagsContainer({\n children,\n flexType = 'inline-flex',\n}: {\n children: React.ReactNode;\n flexType?: 'flex' | 'inline-flex';\n}) {\n return (\n <div className={block('tags-container', {inline: 'inline-flex' === flexType})}>\n {children}\n </div>\n );\n}\n\nconst IO_WEIGHT_PREFIX = 'io_weight_';\n\ntype Templates = {\n [P in keyof typeof PropertiesByColumn]?: (\n item: NodeWithProps<P>,\n columnName: string,\n ) => React.ReactNode;\n};\n\nexport const NODES_TABLE_TEMPLATES: Templates = {\n __default__(item, columnName) {\n if (typeof item.IOWeight === 'object' && columnName.startsWith(IO_WEIGHT_PREFIX)) {\n const mediumName = columnName.slice(IO_WEIGHT_PREFIX.length);\n\n return hammer.format['Number'](item.IOWeight[mediumName]);\n }\n },\n host(item) {\n return <Host address={item.host} />;\n },\n state(item) {\n return <NodeColumnState state={item.state} />;\n },\n banned(item) {\n return (\n <TagsContainer>\n <NodeColumnBanned banned={item.banned} />\n </TagsContainer>\n );\n },\n decommissioned(item) {\n return item.decommissioned ? renderTags(['D'], ['decommissioned']) : hammer.format.NO_VALUE;\n },\n flavors(item) {\n return renderTags(item.flavors);\n },\n full(item) {\n return item.full ? renderTags(['F'], ['full']) : hammer.format.NO_VALUE;\n },\n\n alert_count(item) {\n return item.alertCount! > 0\n ? renderTags([String(item.alertCount)], ['alerts'])\n : hammer.format.NO_VALUE;\n },\n\n physical_host(item, columnName) {\n return (\n <div\n className=\"elements-column_type_id elements-column_with-hover-button\"\n title={item.physicalHost}\n >\n <span className=\"elements-monospace elements-ellipsis\">\n {hammer.format['Address'](item.physicalHost)}\n </span>\n \n <ClipboardButton\n text={item.physicalHost}\n view=\"flat-secondary\"\n size=\"s\"\n title={'Copy ' + columnName}\n />\n </div>\n );\n },\n\n user_tags(item) {\n return renderTags(item.userTags, [], 'flex');\n },\n\n system_tags(item) {\n return renderTags(item.systemTags, [], 'flex');\n },\n\n scheduler_jobs(item) {\n return renderLabel(item.disableJobs);\n },\n write_sessions(item) {\n return renderLabel(item.disableWriteSession);\n },\n tablet_cells(item) {\n return renderLabel(item.disableTabletCells);\n },\n\n data_center(item) {\n return item.dataCenter?.toUpperCase() || hammer.format.NO_VALUE;\n },\n\n rack(item) {\n return <span className=\"elements-monospace\">{hammer.format['Address'](item.rack)}</span>;\n },\n\n version(item) {\n const {version} = item;\n\n return <Version version={version} />;\n },\n\n last_seen(item) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['DateTime'](item.lastSeenTime, {\n format: 'full',\n })}\n </span>\n );\n },\n\n actions(item) {\n return <NodeActions node={item} />;\n },\n\n space(item) {\n return <Progress value={item.spaceProgress || 0} text={item.spaceText} theme=\"success\" />;\n },\n\n space_limit(item) {\n return hammer.format['Bytes'](item.spaceTotal);\n },\n\n locations(item) {\n return item.locations\n ? progressText(item.enabledLocations.length, item.locations.length)\n : null;\n },\n\n sessions(item) {\n return hammer.format['Number'](item.sessions);\n },\n\n chunks(item) {\n return hammer.format['Number'](item.chunks);\n },\n\n io_weight(item) {\n return hammer.format['Number'](item.IOWeight);\n },\n\n cpu(item) {\n return <Progress value={item.cpuProgress || 0} text={item.cpuText} theme=\"success\" />;\n },\n\n gpu(item) {\n return (\n <Progress\n value={item.gpu?.progress || 0}\n text={item.gpu?.progressText}\n theme=\"success\"\n />\n );\n },\n\n memory(item) {\n return (\n <MemoryProgress\n memoryData={item.memoryData}\n memoryText={item.memoryText}\n memoryProgress={item.memoryProgress || 0}\n />\n );\n },\n\n memory_total(item) {\n return (\n <Progress\n value={item.memoryProgress || 0}\n text={item.memoryTotalText}\n theme=\"success\"\n />\n );\n },\n\n network(item) {\n return (\n <Progress value={item.networkProgress || 0} text={item.networkText} theme=\"success\" />\n );\n },\n\n repair_slots(item) {\n const text = progressText(item.repairSlots.usage, item.repairSlots.limits);\n\n return <Progress value={item.repairSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n removal_slots(item) {\n const text = progressText(item.removalSlots.usage, item.removalSlots.limits);\n\n return <Progress value={item.removalSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n replication_slots(item) {\n const text = progressText(item.replicationSlots.usage, item.replicationSlots.limits);\n\n return <Progress value={item.replicationSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n seal_slots(item) {\n const text = progressText(item.sealSlots.usage, item.sealSlots.limits);\n\n return <Progress value={item.sealSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n user_slots(item) {\n const text = progressText(item.userSlots.usage, item.userSlots.limits);\n\n return <Progress value={item.userSlotsProgress || 0} text={text} theme=\"success\" />;\n },\n\n tablet_slots(item) {\n if (item.tabletSlots) {\n const statuses = sortBy_(keys_(item.tabletSlots.byState));\n\n return (\n <TagsContainer>\n {map_(statuses, (state: TabletSlotState) => {\n const tabletSlots = item.tabletSlots.byState[state]!;\n const {text, theme} = TABLET_SLOTS[state];\n const label = `${text}: ${tabletSlots.length}`;\n\n return <StatusBlock theme={theme} text={label} key={state} />;\n })}\n </TagsContainer>\n );\n }\n\n return null;\n },\n\n none(item) {\n const data = item.tabletSlots?.byState.none;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n none_chaos(item) {\n const data = item.chaosSlots?.byState.none;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n leading(item) {\n const data = item.tabletSlots?.byState.leading;\n\n return data ? renderTags([data.length], ['success']) : hammer.format.NO_VALUE;\n },\n\n leading_chaos(item) {\n const data = item.chaosSlots?.byState.leading;\n\n return data ? renderTags([data.length], ['success']) : hammer.format.NO_VALUE;\n },\n\n following(item) {\n const data = item.tabletSlots?.byState.following;\n\n return data ? renderTags([data.length], ['info']) : hammer.format.NO_VALUE;\n },\n\n following_chaos(item) {\n const data = item.chaosSlots?.byState.following;\n\n return data ? renderTags([data.length], ['info']) : hammer.format.NO_VALUE;\n },\n\n follower_recovery(item) {\n const data = item.tabletSlots?.byState['follower_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n follower_recovery_chaos(item) {\n const data = item.chaosSlots?.byState['follower_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n leader_recovery(item) {\n const data = item.tabletSlots?.byState['leader_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n leader_recovery_chaos(item) {\n const data = item.chaosSlots?.byState['leader_recovery'];\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n stopped(item) {\n const data = item.tabletSlots?.byState.stopped;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n stopped_chaos(item) {\n const data = item.chaosSlots?.byState.stopped;\n\n return data ? renderTags([data.length]) : hammer.format.NO_VALUE;\n },\n\n elections(item) {\n const data = item.tabletSlots?.byState.elections;\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n elections_chaos(item) {\n const data = item.chaosSlots?.byState.elections;\n\n return data ? renderTags([data.length], ['warning']) : hammer.format.NO_VALUE;\n },\n\n tablet_memory_static(item) {\n const text = progressText(item.tabletStaticMemory.used, item.tabletStaticMemory.limit, {\n type: 'bytes',\n });\n\n return (\n <Progress value={item.tabletStaticMemory.progress || 0} text={text} theme=\"success\" />\n );\n },\n\n tablet_memory_dynamic(item) {\n const text = progressText(item.tabletDynamicMemory.used, item.tabletDynamicMemory.limit, {\n type: 'bytes',\n });\n\n return (\n <Progress value={item.tabletDynamicMemory.progress || 0} text={text} theme=\"success\" />\n );\n },\n};\n\nexport function getNodeTablesProps(mediumList: string[] = []) {\n if (!mediumList?.length) {\n return nodesTableProps;\n }\n const actions = nodesTableProps.columns.items.actions;\n const allMediums = reduce_(\n mediumList,\n (acc, key) => {\n acc[key] = {\n get(node: Node) {\n return node.IOWeight[key];\n },\n sort: true,\n align: 'center',\n };\n return acc;\n },\n {actions} as {actions: typeof actions} & Record<string, FIX_MY_TYPE>,\n );\n const res = merge_({}, nodesTableProps, {\n columns: {\n items: {\n io_weight: {\n items: {\n ...allMediums,\n },\n groupHeaderStyle: mediumList.length\n ? {width: 100 * mediumList.length}\n : undefined,\n },\n },\n },\n templates: NODES_TABLE_TEMPLATES,\n });\n res.columns!.items!.io_weight!.set = mediumList;\n return res;\n}\n\nfunction makeCaptionProps(columnName: string, title: string) {\n return {\n caption: columnName,\n tooltipProps: {\n placement: 'bottom',\n content: title,\n },\n };\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {Select} from '@gravity-ui/uikit';\n\nimport {NODE_TYPE_ITEMS} from '../../../constants/components/nodes/nodes';\nimport {getSystemNodesNodeTypesToLoad} from '../../../store/selectors/system/nodes';\nimport {setSysmetNodesNodeType} from '../../../store/actions/system/nodes-ts';\nimport {NODE_TYPE, NodeType} from '../../../../shared/constants/system';\nimport {getComponentsNodesNodeTypes} from '../../../store/selectors/components/nodes/nodes';\nimport {componentsNodesSetNodeTypes} from '../../../store/actions/components/nodes/nodes';\nimport {updateListWithAll} from '../../../utils';\n\ntype NodeTypeSelectorProps = {\n className?: string;\n value: Array<NodeType>;\n onUpdate: (value: NodeTypeSelectorProps['value']) => void;\n};\n\nexport function NodeTypeSelector(props: NodeTypeSelectorProps) {\n const {className, value, onUpdate} = props;\n return (\n <Select\n className={className}\n value={value}\n multiple\n options={NODE_TYPE_ITEMS}\n onUpdate={(newVal) => {\n const newValue = updateListWithAll(\n {value, newValue: newVal as NodeType[]},\n NODE_TYPE.ALL_NODES,\n );\n onUpdate(newValue);\n }}\n label={'Node type:'}\n />\n );\n}\n\nexport function SystemNodeTypeSelector() {\n const dispatch = useDispatch();\n const value = useSelector(getSystemNodesNodeTypesToLoad);\n return (\n <NodeTypeSelector\n value={value}\n onUpdate={(newValue) => {\n dispatch(setSysmetNodesNodeType(newValue));\n }}\n />\n );\n}\n\nexport function ComponentsNodeTypeSelector({className}: {className?: string}) {\n const dispatch = useDispatch();\n\n const value = useSelector(getComponentsNodesNodeTypes);\n return (\n <NodeTypeSelector\n className={className}\n value={value}\n onUpdate={(newValue) => dispatch(componentsNodesSetNodeTypes(newValue))}\n />\n );\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {NodeType} from '../../../../shared/constants/system';\nimport {setSettingSystemNodesNodeType} from '../settings/settings';\nimport {RootState} from '../../../store/reducers';\n\nexport function setSysmetNodesNodeType(\n value: Array<NodeType>,\n): ThunkAction<void, RootState, unknown, any> {\n return (dispatch) => {\n dispatch(setSettingSystemNodesNodeType(value));\n };\n}\n","import type {ThunkAction} from 'redux-thunk';\nimport forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../../store/reducers';\nimport {\n NODE_MAINTENANCE_PARTIAL,\n NODE_MAINTENANCE_RESET,\n} from '../../../constants/components/node-maintenance-modal';\nimport {\n NodeMaintenanceAction,\n NodeMaintenanceState,\n NodeResourceLimits,\n} from '../../../store/reducers/components/node-maintenance-modal';\nimport {\n isAllowedMaintenanceApiNodes,\n isAllowedMaintenanceApiProxies,\n} from '../../../store/selectors/components/node-maintenance-modal';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {YTApiId, ytApiV3Id, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {AddMaintenanceParams, BatchSubRequest} from '../../../../shared/yt-types';\nimport {updateComponentsNode} from './nodes/nodes';\nimport {getCurrentUserName} from '../../../store/selectors/global';\nimport {prepareSetCommandForBatch} from '../../../utils/cypress-attributes';\nimport {getProxies} from './proxies/proxies';\n\ntype NodeMaintenanceThunkAction<T = Promise<unknown>> = ThunkAction<\n T,\n RootState,\n unknown,\n NodeMaintenanceAction\n>;\n\nfunction makeNodePath(address: string, component: AddMaintenanceParams['component']) {\n switch (component) {\n case 'cluster_node':\n return `//sys/cluster_nodes/${address}`;\n case 'http_proxy':\n return `//sys/http_proxies/${address}`;\n case 'rpc_proxy':\n return `//sys/rpc_proxies/${address}`;\n default:\n throw new Error(`Unexpected component type: ${component}`);\n }\n}\n\nfunction makeObsoleteMaintenanceRequests(\n command: 'add_maintenance' | 'remove_maintenance',\n {\n address,\n type,\n comment: c,\n component,\n }: Pick<AddMaintenanceParams, 'address' | 'type' | 'comment' | 'component'>,\n): Array<BatchSubRequest> {\n const path = makeNodePath(address, component);\n const isAdd = command === 'add_maintenance';\n const comment = isAdd ? c : '';\n switch (type) {\n case 'ban': {\n const banned = command === 'add_maintenance';\n return [\n {command: 'set', parameters: {path: `${path}/@banned`}, input: banned},\n {command: 'set', parameters: {path: `${path}/@ban_message`}, input: comment},\n ];\n }\n case 'disable_scheduler_jobs':\n case 'disable_tablet_cells':\n case 'disable_write_sessions':\n return [{command: 'set', parameters: {path: `${path}/@${type}`}, input: isAdd}];\n case 'decommission':\n return [\n {command: 'set', parameters: {path: `${path}/@decommissioned`}, input: isAdd},\n {\n command: 'set',\n parameters: {path: `${path}/@decommission_message`},\n input: isAdd ? comment : '',\n },\n ];\n default:\n return [];\n }\n}\n\nexport function applyMaintenance(\n address: string,\n component: NodeMaintenanceState['component'],\n data: NodeMaintenanceState['maintenance'],\n resourceLimitsOverrides?: Partial<NodeResourceLimits>,\n role?: string,\n): NodeMaintenanceThunkAction {\n return (dispatch, getState) => {\n const requests: Array<BatchSubRequest> = [];\n\n const path = makeNodePath(address, component);\n\n if (role && (component === 'http_proxy' || component === 'rpc_proxy')) {\n requests.push(prepareSetCommandForBatch(`${path}/@role`, role));\n }\n\n forEach_(resourceLimitsOverrides, (value, key) => {\n requests.push(\n prepareSetCommandForBatch(\n `${path}/@resource_limits_overrides/${key}`,\n isNaN(value!)\n ? undefined\n : {$value: value, $type: key === 'cpu' ? 'double' : 'int64'},\n {\n input_format: {\n $value: 'json',\n $attributes: {annotate_with_types: true},\n },\n },\n ),\n );\n });\n\n forEach_(data, (item, t) => {\n const type = t as AddMaintenanceParams['type'];\n const command = item?.state ? 'add_maintenance' : 'remove_maintenance';\n const comment = item?.comment;\n\n if (!isMaintenanceApiAllowedForComponent(component, getState())) {\n requests.push(\n ...makeObsoleteMaintenanceRequests(command, {\n address,\n component,\n comment,\n type,\n }),\n );\n } else {\n const parameters = {\n component,\n address,\n type,\n comment,\n };\n requests.push(\n command === 'add_maintenance'\n ? {command, parameters}\n : {\n command,\n parameters: {...parameters, mine: true},\n },\n );\n }\n });\n\n const reloadNodeData = () => {\n switch (component) {\n case 'cluster_node':\n return dispatch(updateComponentsNode(address));\n case 'http_proxy':\n return dispatch(getProxies('http'));\n case 'rpc_proxy':\n return dispatch(getProxies('rpc'));\n }\n };\n\n return wrapApiPromiseByToaster(ytApiV4Id.executeBatch(YTApiId.addMaintenance, {requests}), {\n toasterName: 'edit_node_' + address,\n batchType: 'v4',\n skipSuccessToast: true,\n errorTitle: `Failed to modify ${address}`,\n })\n .then(reloadNodeData)\n .catch(reloadNodeData);\n };\n}\n\nexport function showNodeMaintenance(\n params: Pick<NodeMaintenanceState, 'address' | 'component'>,\n): NodeMaintenanceThunkAction {\n return async (dispatch) => {\n const data = await dispatch(loadNodeMaintenanceData(params));\n\n return dispatch({\n type: NODE_MAINTENANCE_PARTIAL,\n data: {...params, ...data},\n });\n };\n}\n\nexport type MaintenanceRequestInfo = {\n user: string;\n comment: string;\n timestamp: string;\n type: AddMaintenanceParams['type'];\n};\n\ntype MaintenanceDataResponse = {\n banned?: boolean;\n ban?: boolean;\n ban_message?: string;\n decommissioned?: boolean;\n decommission_message?: string;\n disable_scheduler_jobs?: boolean;\n disable_tablet_cells?: boolean;\n disable_write_sessions?: boolean;\n\n resource_limits?: NodeResourceLimits;\n resource_limits_overrides?: Partial<NodeResourceLimits>;\n\n maintenance_requests?: Record<string, MaintenanceRequestInfo>;\n\n role?: string;\n};\n\nexport function loadNodeMaintenanceData({\n address,\n component,\n}: Pick<NodeMaintenanceState, 'address' | 'component'>): NodeMaintenanceThunkAction<\n Promise<{\n maintenance: NodeMaintenanceState['maintenance'];\n resourceLimits?: NodeResourceLimits;\n resourceLimitsOverrides?: Partial<NodeResourceLimits>;\n }>\n> {\n return (_dispatch, getState) => {\n const state = getState();\n const user = getCurrentUserName(state);\n const path = makeNodePath(address, component) + '/@';\n\n const allowMaintenanceRequests = isMaintenanceApiAllowedForComponent(component, state);\n\n return wrapApiPromiseByToaster(\n ytApiV3Id.get(YTApiId.maintenanceRequests, {\n path,\n attributes: [\n 'resource_limits',\n 'resource_limits_overrides',\n ...(allowMaintenanceRequests\n ? ['maintenance_requests']\n : [\n 'ban_message',\n 'decommissioned',\n 'decommission_message',\n 'disable_scheduler_jobs',\n 'disable_tablet_cells',\n 'disable_write_sessions',\n ]),\n ...(component === 'http_proxy' || component === 'rpc_proxy'\n ? ['banned', 'role']\n : ['banned']),\n ],\n }),\n {\n toasterName: 'maintenance_attributes_request_' + path,\n skipSuccessToast: true,\n errorContent: `Cannot load node attributes for ${path}`,\n },\n ).then((data: MaintenanceDataResponse) => {\n const maintenance: NodeMaintenanceState['maintenance'] = {};\n if (allowMaintenanceRequests) {\n forEach_(data.maintenance_requests, (item) => {\n const dst =\n maintenance[item.type] ??\n (maintenance[item.type] = {comment: '', otherComments: '', state: ''});\n\n if (item.user === user) {\n dst.state = 'maintenance';\n if (dst.comment?.length) {\n dst.comment += '\\n';\n }\n dst.comment += item.comment;\n } else {\n dst.otherComments += `${item.timestamp} ${item.user}\\t${item.comment}`;\n }\n });\n } else {\n Object.assign(maintenance, {\n ban: {\n state: data.banned ? 'maintenance' : '',\n comment: data.ban_message,\n },\n decommission: {\n state: data.decommissioned ? 'maintenance' : '',\n comment: data.decommission_message,\n },\n disable_scheduler_jobs: {\n state: data.disable_scheduler_jobs ? 'maintenance' : '',\n },\n disable_tablet_cells: {state: data.disable_tablet_cells ? 'maintenance' : ''},\n disable_write_sessions: {\n state: data.disable_write_sessions ? 'maintenance' : '',\n },\n } as typeof maintenance);\n }\n return {\n maintenance,\n resourceLimits: data.resource_limits,\n resourceLimitsOverrides: data.resource_limits_overrides,\n role: data.role,\n };\n });\n };\n}\n\nexport function closeNodeMaintenanceModal(): NodeMaintenanceAction {\n return {type: NODE_MAINTENANCE_RESET};\n}\n\nfunction isMaintenanceApiAllowedForComponent(\n component: AddMaintenanceParams['component'],\n state: RootState,\n) {\n switch (component) {\n case 'cluster_node':\n return isAllowedMaintenanceApiNodes(state);\n case 'http_proxy':\n case 'rpc_proxy':\n return isAllowedMaintenanceApiProxies(state);\n default:\n return false;\n }\n}\n","// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport omit_ from 'lodash/omit';\nimport forEach_ from 'lodash/forEach';\nimport compact_ from 'lodash/compact';\nimport type {ThunkAction} from 'redux-thunk';\n\nimport ypath from '../../../../common/thor/ypath';\n\nimport {setSetting} from '../../../../store/actions/settings';\nimport {NAMESPACES, SettingName} from '../../../../../shared/constants/settings';\nimport {\n getRequiredAttributes,\n useRacksFromAttributes,\n useTagsFromAttributes,\n} from '../../../../store/selectors/components/nodes/nodes';\nimport {getTemplates} from '../../../../store/selectors/settings';\nimport type {RootState} from '../../../../store/reducers';\nimport {Node} from '../../../../store/reducers/components/nodes/nodes/node';\nimport type {\n NodesAction,\n NodesState,\n} from '../../../../store/reducers/components/nodes/nodes/nodes';\nimport type {NodesSetupState} from '../../../../store/reducers/components/nodes/setup/setup';\nimport {\n APPLY_SETUP,\n CHANGE_CONTENT_MODE,\n CHANGE_HOST_FILTER,\n CHANGE_NODE_TYPE,\n COMPONENTS_NODES_UPDATE_NODE,\n GET_NODES,\n GET_NODES_FILTER_OPTIONS,\n} from '../../../../constants/components/nodes/nodes';\nimport {USE_CACHE, USE_MAX_SIZE} from '../../../../../shared/constants/yt-api';\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport type {ActionD, FIX_MY_TYPE, PartialDeep} from '../../../../types';\nimport {prepareAttributes} from '../../../../utils/cypress-attributes';\nimport {splitBatchResults, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {NodeType} from '../../../../../shared/constants/system';\nimport {BatchSubRequest} from '../../../../../shared/yt-types';\n\nconst {COMPONENTS} = NAMESPACES;\nconst {TEMPLATES} = SettingName.COMPONENTS;\n\nexport type NodesThunkAction = ThunkAction<void, RootState, unknown, NodesAction>;\n\nexport function changeContentMode(\n contentMode: NodesState['contentMode'],\n): ActionD<typeof CHANGE_CONTENT_MODE, Pick<NodesState, 'contentMode'>> {\n return {\n type: CHANGE_CONTENT_MODE,\n data: {contentMode},\n };\n}\n\nconst updateNodeCanceler = new CancelHelper();\n\nexport function getNodes({\n attributes,\n nodeTypes,\n}: {\n attributes: ReturnType<typeof getRequiredAttributes>;\n nodeTypes: Array<NodeType>;\n}): NodesThunkAction {\n return (dispatch) => {\n dispatch({type: GET_NODES.REQUEST});\n\n const preparedAttrs = prepareAttributes(attributes);\n const requests: Array<BatchSubRequest> = nodeTypes.map((type) => {\n return {\n command: 'list',\n parameters: {\n path: `//sys/${type}`,\n attributes: preparedAttrs,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n };\n });\n\n return ytApiV3Id\n .executeBatch(YTApiId.componentsClusterNodes, {\n parameters: {requests},\n cancellation: updateNodeCanceler.removeAllAndSave,\n })\n .then((data) => {\n const {results, error} = splitBatchResults(data, 'Failed to get nodes');\n\n const outputs = results.map((output) => {\n return ypath.getValue(output) || [];\n });\n\n const nodes = [];\n\n const collectedItems = new Set<string>();\n\n for (const output of outputs) {\n for (const item of output) {\n const {$value: name} = item;\n if (!collectedItems.has(name)) {\n nodes.push(item);\n collectedItems.add(name);\n }\n }\n }\n\n dispatch({type: GET_NODES.SUCCESS, data: {nodes}});\n\n if (error) {\n throw error;\n }\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_NODES.CANCELLED});\n return;\n }\n dispatch({\n type: GET_NODES.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nexport function updateComponentsNode(host: string): NodesThunkAction {\n return (dispatch) => {\n return ytApiV3Id\n .get(YTApiId.componentsUpdateNodeData, {\n path: `//sys/cluster_nodes/${host}`,\n attributes: prepareAttributes(Node.ATTRIBUTES),\n })\n .then((node) => {\n dispatch({\n type: COMPONENTS_NODES_UPDATE_NODE,\n data: {node: {...node, $value: host}},\n });\n });\n };\n}\n\nexport function changeHostFilter(\n hostFilter: string,\n): ActionD<typeof CHANGE_HOST_FILTER, Pick<NodesState, 'hostFilter'>> {\n return {\n type: CHANGE_HOST_FILTER,\n data: {hostFilter: hostFilter.trim()},\n };\n}\n\nexport function componentsNodesSetNodeTypes(nodeTypes: Array<NodeType>): NodesThunkAction {\n return (dispatch) => {\n dispatch({\n type: CHANGE_NODE_TYPE,\n data: {nodeTypes},\n });\n };\n}\n\nexport function applyPreset(\n setup: PartialDeep<NodesSetupState>,\n): ActionD<typeof APPLY_SETUP, PartialDeep<NodesSetupState>> {\n return {\n type: APPLY_SETUP,\n data: setup,\n };\n}\n\nexport function savePreset(name: string, data: FIX_MY_TYPE): NodesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const prevTemplates = getTemplates(state) || {};\n const templates = {\n ...prevTemplates,\n [name]: data,\n };\n\n dispatch(setSetting(TEMPLATES, COMPONENTS, templates));\n };\n}\n\nexport function removePreset(name: string): NodesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const templates = omit_(getTemplates(state), name);\n\n dispatch(setSetting(TEMPLATES, COMPONENTS, templates));\n };\n}\n\nexport function handleColumnsChange(selectedColumns: string[]): NodesThunkAction {\n return async (dispatch) => {\n await dispatch(\n setSetting(\n SettingName.COMPONENTS.SELECTED_COLUMNS,\n NAMESPACES.COMPONENTS,\n selectedColumns,\n ),\n );\n };\n}\n\nexport function getComponentsNodesFilterOptions(): NodesThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n\n const attributes = compact_([\n !useTagsFromAttributes(state) && 'tags',\n !useRacksFromAttributes(state) && 'rack',\n ]);\n\n if (0 === attributes.length) {\n return;\n }\n\n dispatch({type: GET_NODES_FILTER_OPTIONS.REQUEST});\n\n wrapApiPromiseByToaster(\n ytApiV3Id.list(YTApiId.componentsClusterNodes, {\n path: '//sys/cluster_nodes',\n attributes,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n }),\n {\n toasterName: 'node filter options',\n errorTitle: `Failed to load node ${attributes.join(',')}`,\n skipSuccessToast: true,\n },\n )\n .then((nodes) => {\n const tags = new Set<string>();\n const racks = new Set<string>();\n forEach_(nodes, (item) => {\n const node = new Node(item);\n forEach_(node.tags, (tag) => {\n if (tag) {\n tags.add(tag);\n }\n });\n if (node.rack) {\n racks.add(node.rack);\n }\n });\n\n dispatch({\n type: GET_NODES_FILTER_OPTIONS.SUCCESS,\n data: {\n filterOptionsTags: [...tags].sort(),\n filterOptionsRacks: [...racks].sort(),\n },\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_NODES_FILTER_OPTIONS.FAILURE,\n data: {error},\n });\n });\n };\n}\n","import ypath from '../../../../../common/thor/ypath';\n\nexport default class Proxy {\n constructor(data) {\n // data comes in format like in /hosts/all, not like //sys/http_proxies\n this.name = data.name;\n this.host = data.name;\n this.state = data.dead ? 'offline' : 'online';\n this.effectiveState = this.banned ? 'banned' : this.state;\n\n this.banned = ypath.getBoolean(data, '/banned') || false;\n this.banMessage = ypath.getValue(data, '/ban_message') || '';\n this.role = ypath.getValue(data, '/role');\n this.version = ypath.getValue(data, '/version');\n this.physicalHost = ypath.getValue(data, '/annotations/physical_host');\n this.liveness = ypath.getValue(data, '/liveness');\n\n this.loadAverage = ypath.getValue(this.liveness, '/load_average');\n this.updatedAt = ypath.getValue(this.liveness, '/updated_at');\n this.networkLoad = ypath.getValue(this.liveness, '/network_coef');\n\n this.maintenanceRequests = ypath.getValue(data, '/maintenance_requests');\n }\n\n static ATTRIBUTES = [\n 'ban_message',\n 'banned',\n 'liveness',\n 'role',\n 'version',\n 'annotations',\n 'maintenance_requests',\n ];\n}\n","import map_ from 'lodash/map';\n\nimport axios from 'axios';\nimport ypath from '../../../../common/thor/ypath';\n\nimport Proxy from '../../../../store/reducers/components/proxies/proxies/proxy';\nimport {\n GET_PROXIES,\n PROXIES_CHANGE_FILTERS,\n PROXY_TYPE,\n} from '../../../../constants/components/proxies/proxies';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\n\nfunction getRpcProxies() {\n return (dispatch) => {\n return Promise.all([\n ytApiV3Id.list(YTApiId.componentsRpcProxies, {\n path: '//sys/rpc_proxies',\n attributes: Proxy.ATTRIBUTES,\n }),\n ytApiV3Id.get(YTApiId.componentGetRpcProxies, {path: '//sys/rpc_proxies'}),\n ])\n .then(([data, proxiesMap]) => {\n const proxies = map_(data, (proxyData) => {\n const name = ypath.getValue(proxyData);\n const role = ypath.getValue(proxyData, '/role') || 'default';\n const alive = Boolean(ypath.getValue(proxiesMap, `/${name}`).alive);\n const attributes = ypath.getAttributes(proxyData);\n const meta = {name, role, dead: !alive};\n\n return new Proxy({...meta, ...attributes});\n });\n\n dispatch({\n type: GET_PROXIES.SUCCESS,\n data: {proxies},\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_PROXIES.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nfunction getHttpProxies() {\n return (dispatch, getState) => {\n const cluster = getCluster(getState());\n return Promise.all([\n axios.get(`/api/yt-proxy/${cluster}/hosts-all`),\n ytApiV3Id.get(YTApiId.systemProxies, {\n path: '//sys/http_proxies',\n attributes: Proxy.ATTRIBUTES,\n }),\n ])\n .then(([{data}, cypressData]) => {\n const proxies = map_(data, (proxyData) => {\n const cypressAttributes = ypath.getAttributes(\n ypath.getValue(cypressData)[proxyData.name],\n );\n\n return new Proxy({...proxyData, ...cypressAttributes});\n });\n\n dispatch({\n type: GET_PROXIES.SUCCESS,\n data: {proxies},\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_PROXIES.FAILURE,\n data: {error},\n });\n });\n };\n}\n\n/**\n *\n * @param {'http' | 'rpc'} type\n * @returns\n */\nexport function getProxies(type) {\n return (dispatch) => {\n dispatch({type: GET_PROXIES.REQUEST});\n\n return dispatch(type === PROXY_TYPE.HTTP ? getHttpProxies() : getRpcProxies());\n };\n}\n\nexport function changeHostFilter(hostFilter) {\n return {\n type: PROXIES_CHANGE_FILTERS,\n data: {hostFilter},\n };\n}\n\nexport function changeStateFilter(stateFilter) {\n return {\n type: PROXIES_CHANGE_FILTERS,\n data: {stateFilter},\n };\n}\n\nexport function changeRoleFilter(roleFilter) {\n return {\n type: PROXIES_CHANGE_FILTERS,\n data: {roleFilter},\n };\n}\n\nexport function changeBannedFilter(bannedFilter) {\n return {type: PROXIES_CHANGE_FILTERS, data: {bannedFilter}};\n}\n\nexport function resetProxyState() {\n return (dispatch) => {\n dispatch({type: GET_PROXIES.CANCELLED});\n };\n}\n","import reduce_ from 'lodash/reduce';\nimport {createSelector} from 'reselect';\n\nimport {RootState} from '../../reducers';\nimport {getClusterUiConfig} from '../global';\nimport {isSupportedNodeMaintenanceApi} from '../thor/support';\nimport {NodeResourceLimits} from '../../../store/reducers/components/node-maintenance-modal';\n\nexport const getNodeMaintenanceModalState = (state: RootState) =>\n state.components.nodeMaintenanceModal;\n\nexport const getNodeMaintenanceModalInitialValues = createSelector(\n [getNodeMaintenanceModalState],\n ({maintenance, resourceLimitsOverrides, role}) => {\n return {\n ...maintenance,\n role: {role},\n limits: reduce_(\n resourceLimitsOverrides,\n (acc, value, k) => {\n const key = k as keyof typeof acc;\n acc[key] = {value};\n return acc;\n },\n {} as Partial<Record<keyof NodeResourceLimits, {value?: number}>>,\n ),\n };\n },\n);\n\nexport const isAllowedMaintenanceApiNodes = createSelector(\n [isSupportedNodeMaintenanceApi, getClusterUiConfig],\n (isSupported, uiConfig) => {\n return isSupported && Boolean(uiConfig.enable_maintenance_api_nodes);\n },\n);\n\nexport const isAllowedMaintenanceApiProxies = createSelector(\n [isSupportedNodeMaintenanceApi, getClusterUiConfig],\n (isSupported, uiConfig) => {\n return isSupported && Boolean(uiConfig.enable_maintenance_api_proxies);\n },\n);\n","import filter_ from 'lodash/filter';\nimport some_ from 'lodash/some';\nimport union_ from 'lodash/union';\n\nimport hammer from '../../../../../common/hammer';\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../../../common/hammer/predicate';\nimport {COMPONENTS_NODES_TABLE_ID} from '../../../../../constants/components/nodes/nodes';\nimport {RootState} from '../../../../../store/reducers';\nimport {AttributesByProperty} from '../../../../../store/reducers/components/nodes/nodes/node';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {getSelectedColumns} from '../../../../../store/selectors/settings';\nimport {getMediumListNoCache} from '../../../../../store/selectors/thor';\nimport type {ValueOf} from '../../../../../types';\nimport {createMediumsPredicates} from '../../../../../utils/components/nodes/setup';\nimport {\n PropertiesByColumn,\n defaultColumns,\n getNodeTablesProps,\n} from '../../../../../pages/components/tabs/nodes/tables';\nimport {\n getComponentNodesFilterPredicates,\n getComponentNodesFilterStatePredicate,\n getComponentNodesFiltersSetup,\n getComponentNodesIndexByRack,\n getComponentNodesIndexByTag,\n getNodes,\n getPropertiesRequiredForFilters,\n} from './predicates';\nimport {NODE_TYPE, NodeType} from '../../../../../../shared/constants/system';\n\nconst getContentMode = (state: RootState) => state.components.nodes.nodes.contentMode;\nconst getHostFilter = (state: RootState) => state.components.nodes.nodes.hostFilter.toLowerCase();\nconst getSortState = (state: RootState) => state.tables[COMPONENTS_NODES_TABLE_ID];\nconst getComponentsNodesNodeTypeRaw = (state: RootState) => state.components.nodes.nodes.nodeTypes;\n\nconst getCustomColumns = (state: RootState) => getSelectedColumns(state) || defaultColumns;\n\nconst getMediumsPredicates = createSelector(\n [getComponentNodesFiltersSetup, getMediumListNoCache],\n createMediumsPredicates,\n);\n\nconst getPropertiesRequiredForMediums = createSelector(\n [getMediumsPredicates],\n (mediumsPredicates) => (mediumsPredicates.length > 0 ? (['IOWeight'] as const) : []),\n);\n\nconst getFilteredByHost = createSelector([getNodes, getHostFilter], (nodes, hostFilter) => {\n const hostFilters = hostFilter.split(/\\s+/);\n return filter_(nodes, (node) => {\n return some_(hostFilters, (hostFilter) => node?.host?.toLowerCase().includes(hostFilter));\n });\n});\n\nconst getFilteredNodes = createSelector(\n [getFilteredByHost, getComponentNodesFilterPredicates, getMediumsPredicates],\n (nodes, predicates, mediumsPredicates) => {\n const predicatesArray = predicates.concat(mediumsPredicates);\n if (!predicatesArray.length) {\n return nodes;\n }\n\n const predicate = concatByAnd(...predicatesArray);\n return filter_(nodes, (node) => {\n return predicate(node);\n });\n },\n);\n\nexport const getVisibleNodes = createSelector(\n [getFilteredNodes, getSortState, getMediumListNoCache, getCluster],\n (nodes, sortState, mediumList, cluster) => {\n return hammer.utils.sort(\n nodes.map((n) => ({...n, cluster})),\n sortState,\n getNodeTablesProps(mediumList).columns.items,\n ) as typeof nodes;\n },\n);\n\nexport const getComponentNodesTableProps = createSelector(\n [getMediumListNoCache],\n getNodeTablesProps,\n);\n\nconst getVisibleColumns = createSelector(\n [getComponentNodesTableProps, getContentMode, getCustomColumns],\n (nodesTableProps, contentMode, customColumns) =>\n contentMode === 'custom' ? customColumns : nodesTableProps.columns.sets[contentMode].items,\n);\n\nconst getPropertiesRequiredForRender = createSelector(\n [getVisibleColumns],\n (visibleColumns /* : Array<keyof typeof PropertiesByColumn> */) => {\n const requiredProperties = union_(\n ...visibleColumns.map(\n (x) => (PropertiesByColumn as any)[x] as ValueOf<typeof PropertiesByColumn>,\n ),\n );\n\n return requiredProperties;\n },\n);\n\nexport const getRequiredAttributes = createSelector(\n [\n getPropertiesRequiredForRender,\n getPropertiesRequiredForFilters,\n getPropertiesRequiredForMediums,\n ],\n (propertiesRequiredForRender, propertiesRequiredForFilters, propertiesRequiredForMediums) => {\n const allRequiredProperties = [\n ...propertiesRequiredForRender,\n ...propertiesRequiredForFilters,\n ...propertiesRequiredForMediums,\n ];\n\n const requiredAttributes = union_(\n ...allRequiredProperties.map(\n (x) => (AttributesByProperty as any)[x] as ValueOf<typeof AttributesByProperty>,\n ),\n );\n\n return requiredAttributes;\n },\n);\n\nexport const useTagsFromAttributes = createSelector([getRequiredAttributes], (attributes) => {\n return attributes.indexOf('tags') >= 0;\n});\n\nexport const useRacksFromAttributes = createSelector([getRequiredAttributes], (attributes) => {\n return attributes.indexOf('rack') >= 0;\n});\n\nconst getFetchedTags = (state: RootState): string[] =>\n state.components.nodes.nodes.filterOptionsTags;\nconst getFetchedRacks = (state: RootState): string[] =>\n state.components.nodes.nodes.filterOptionsRacks;\n\nexport const getComponentNodesTags = createSelector(\n [useTagsFromAttributes, getFetchedTags, getComponentNodesIndexByTag],\n (useFromAttrs, fetchedTags, nodesByTag) => {\n if (!useFromAttrs) {\n return fetchedTags;\n }\n\n return [...nodesByTag.keys()].sort();\n },\n);\n\nexport const getComponentNodesRacks = createSelector(\n [useRacksFromAttributes, getFetchedRacks, getComponentNodesIndexByRack],\n (useFromAttrs, fetchedRacks, nodesByRack) => {\n if (!useFromAttrs) {\n return fetchedRacks;\n }\n\n return [...nodesByRack.keys()].sort();\n },\n);\n\nexport const getComponentsNodesNodeTypes = createSelector(\n [getComponentsNodesNodeTypeRaw],\n (types) => {\n const res: Array<NodeType> = [...types];\n if (res.length === 0) {\n return [NODE_TYPE.ALL_NODES];\n }\n return res;\n },\n);\n\nexport const COMPONENTS_AVAILABLE_STATES = [\n 'all',\n 'being_disposed',\n 'online',\n 'offline',\n 'mixed',\n 'registered',\n 'unregistered',\n 'unknown',\n];\n\nexport const getComponentNodesFilterSetupStateValue = createSelector(\n [getComponentNodesFilterStatePredicate],\n (predicate) => {\n if (!predicate) {\n return ['all'];\n }\n\n return COMPONENTS_AVAILABLE_STATES.map((state) => ({state}))\n .filter(predicate)\n .map(({state}) => state);\n },\n);\n","import cloneDeep_ from 'lodash/cloneDeep';\nimport every_ from 'lodash/every';\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport merge_ from 'lodash/merge';\nimport pickBy_ from 'lodash/pickBy';\nimport reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\nimport values_ from 'lodash/values';\nimport union_ from 'lodash/union';\n\nimport {createSelector} from 'reselect';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {UNAWARE} from '../../../../../constants';\nimport {\n FlagState,\n NodeRange,\n TagFilter,\n groupFilterInitialState,\n} from '../../../../../store/reducers/components/nodes/setup/setup';\nimport {MEDIUM_COLS_PREFIX} from '../../../../../constants/components/nodes/nodes';\nimport {getMediumListNoCache} from '../../../../../store/selectors/thor';\nimport type {ValueOf} from '../../../../../types';\nimport {Node} from '../../../../reducers/components/nodes/nodes/node';\nimport {isRangeFilterDefined} from '../../../../../utils/components/nodes/setup';\n\nimport {RootState} from '../../../../reducers';\n\nexport const getSetupFiltersRaw = (state: RootState) => state.components.nodes.setup;\n\nexport const getNodes = (state: RootState): Array<Node> => state.components.nodes.nodes.nodes;\n\nexport const getComponentNodesFilterStatePredicate = createSelector(\n [getSetupFiltersRaw],\n ({default: {state}}) => {\n if (!state.length || (state.length === 1 && state[0] === 'all')) {\n return undefined;\n }\n const excludes = reduce_(\n state,\n (acc, item) => {\n if (item[0] === '!') {\n acc.add(item.substring(1));\n }\n return acc;\n },\n new Set<string>(),\n );\n\n if (excludes.size) {\n if (excludes.size !== state.length) {\n new Toaster().add({\n name: 'component-nodes-excludes',\n theme: 'danger',\n autoHiding: false,\n title: 'Unexpected behavior',\n content:\n 'Components/Nodes: It is not allowed to have excludes and includes for \"state\" filter at the same time',\n });\n }\n\n excludes.add('all');\n\n return (node: {state: string}) => {\n return !excludes.has(node.state);\n };\n } else {\n const includes = new Set(state);\n return (node: {state: string}) => {\n return includes.has(node.state);\n };\n }\n },\n);\n\nexport const getComponentNodesFiltersSetup = createSelector(\n [getSetupFiltersRaw, getMediumListNoCache],\n (setup, mediumList) => {\n const mediumDefaults = reduce_(\n mediumList,\n (acc, medium) => {\n acc[MEDIUM_COLS_PREFIX + medium] = cloneDeep_(groupFilterInitialState);\n return acc;\n },\n {} as Record<string, NodeRange>,\n );\n return merge_({}, {storage: mediumDefaults}, setup);\n },\n);\n\nexport const getComponentNodesIndexByTag = createSelector([getNodes], (nodes) => {\n const res = reduce_(\n nodes,\n (acc, node) => {\n const {tags} = node;\n forEach_(tags, (tag) => {\n if (acc.has(tag)) {\n acc.get(tag)?.add(node);\n } else {\n acc.set(tag, new Set([node]));\n }\n });\n return acc;\n },\n new Map<string, Set<Node>>(),\n );\n return res;\n});\n\nexport const getComponentNodesIndexByRack = createSelector([getNodes], (nodes) => {\n return reduce_(\n nodes,\n (acc, node) => {\n const rack = node.rack ?? UNAWARE;\n if (!acc.has(rack)) {\n acc.set(rack, new Set([node]));\n } else {\n acc.get(rack)?.add(node);\n }\n return acc;\n },\n new Map<string, Set<Node>>(),\n );\n});\n\nconst PropertiesByPredicate = {\n physicalHost: ['physicalHost'],\n tags: ['tags'],\n state: ['state'],\n rack: ['rack'],\n banned: ['banned'],\n decommissioned: ['decommissioned'],\n full: ['full'],\n alertCount: ['alertCount'],\n disableJobs: ['disableJobs'],\n disableWriteSession: ['disableWriteSession'],\n disableTabletCells: ['disableTabletCells'],\n sessions: ['sessions'],\n chunks: ['chunks'],\n spaceUsed: ['spaceUsed'],\n spaceTotal: ['spaceTotal'],\n blobSession: ['memory'],\n blockCache: ['memory'],\n chunkBlockMeta: ['memory'],\n chunkMeta: ['memory'],\n footprint: ['memory'],\n query: ['memory'],\n systemJobs: ['memory'],\n versionedChunkMeta: ['memory'],\n tabletDynamicUsed: ['memory'],\n tabletDynamicTotal: ['memory'],\n tabletStaticUsed: ['memory'],\n tabletStaticTotal: ['memory'],\n userJobsUsed: ['memory'],\n userJobsTotal: ['memory'],\n userSlotsUsed: ['userSlots'],\n userSlotsTotal: ['userSlots'],\n sealSlotsUsed: ['sealSlots'],\n sealSlotsTotal: ['sealSlots'],\n repairSlotsUsed: ['repairSlots'],\n repairSlotsTotal: ['repairSlots'],\n removalSlotsUsed: ['removalSlots'],\n removalSlotsTotal: ['removalSlots'],\n replicationSlotsUsed: ['replicationSlots'],\n replicationSlotsTotal: ['replicationSlots'],\n all: ['tabletSlots'],\n none: ['tabletSlots'],\n leading: ['tabletSlots'],\n following: ['tabletSlots'],\n followerRecovery: ['tabletSlots'],\n leaderRecovery: ['tabletSlots'],\n stopped: ['tabletSlots'],\n elections: ['tabletSlots'],\n staticUsed: ['tabletStaticMemory'],\n staticTotal: ['tabletStaticMemory'],\n dynamicUsed: ['tabletDynamicMemory'],\n dynamicTotal: ['tabletDynamicMemory'],\n} as const;\n\ntype NodeWithProps<T extends keyof typeof PropertiesByPredicate> = Pick<\n Node,\n (typeof PropertiesByPredicate)[T][number]\n>;\n\ntype Predicates = {\n [P in keyof typeof PropertiesByPredicate]:\n | false\n | undefined\n | ((node: NodeWithProps<P>) => boolean);\n};\n\nconst getRackPredicate = createSelector(\n [getSetupFiltersRaw, getComponentNodesIndexByRack],\n (setupFilters, nodesByRack) => {\n const {rack} = setupFilters.default;\n if ('string' !== typeof rack && rack.selected?.[0] === UNAWARE) {\n return ({rack}: {rack?: string}) => rack === undefined;\n }\n return createNodeTagPredicate<'rack'>(setupFilters.default.rack, nodesByRack, (node) => [\n node.rack,\n ]);\n },\n);\n\nconst getFilterPredicatesObject = createSelector(\n [\n getSetupFiltersRaw,\n getComponentNodesIndexByTag,\n getRackPredicate,\n getComponentNodesFilterStatePredicate,\n ],\n (setupFilters, nodesByTags, rackPredicate, statePredicate) => {\n const predicates: Predicates = {\n // filter by default\n physicalHost:\n Boolean(setupFilters.default.physicalHost) &&\n ((node) => {\n return -1 !== node.physicalHost?.indexOf(setupFilters.default.physicalHost);\n }),\n tags: createNodeTagPredicate<'tags'>(\n setupFilters.default.tag,\n nodesByTags,\n (node) => node.tags,\n ),\n state: statePredicate,\n rack: rackPredicate,\n\n banned: createFlagPredicate('banned', setupFilters.default.banned),\n decommissioned: createFlagPredicate(\n 'decommissioned',\n setupFilters.default.decommissioned,\n ),\n full: createFlagPredicate('full', setupFilters.default.full),\n alertCount: createAlertsFlagPredicate(setupFilters.default.alertCount),\n\n disableJobs: createAttributeStatePredicate(\n 'disableJobs',\n setupFilters.default.schedulerJobs,\n ),\n disableWriteSession: createAttributeStatePredicate(\n 'disableWriteSession',\n setupFilters.default.writeSessions,\n ),\n disableTabletCells: createAttributeStatePredicate(\n 'disableTabletCells',\n setupFilters.default.tabletCells,\n ),\n\n // filter by storage\n sessions: createRangePredicate(\n setupFilters.storage.sessions,\n 'sessions',\n (node) => node,\n ),\n chunks: createRangePredicate(setupFilters.storage.chunks, 'chunks', (node) => node),\n spaceUsed: createRangePredicate(\n setupFilters.storage.spaceUsed,\n 'spaceUsed',\n (node) => node,\n ),\n spaceTotal: createRangePredicate(\n setupFilters.storage.spaceTotal,\n 'spaceTotal',\n (node) => node,\n ),\n\n // filter by cpu\n blobSession: createRangePredicate(\n setupFilters.cpu.blobSession,\n 'used',\n (node) => node.memory.blob_session,\n ),\n blockCache: createRangePredicate(\n setupFilters.cpu.blockCache,\n 'used',\n (node) => node.memory.block_cache,\n ),\n chunkBlockMeta: createRangePredicate(\n setupFilters.cpu.chunkBlockMeta,\n 'used',\n (node) => node.memory.chunk_block_meta,\n ),\n chunkMeta: createRangePredicate(\n setupFilters.cpu.chunkMeta,\n 'used',\n (node) => node.memory.chunk_meta,\n ),\n footprint: createRangePredicate(\n setupFilters.cpu.footprint,\n 'used',\n (node) => node.memory.footprint,\n ),\n query: createRangePredicate(\n setupFilters.cpu.query,\n 'used',\n (node) => node.memory.query,\n ),\n systemJobs: createRangePredicate(\n setupFilters.cpu.systemJobs,\n 'used',\n (node) => node.memory.system_jobs,\n ),\n versionedChunkMeta: createRangePredicate(\n setupFilters.cpu.versionedChunkMeta,\n 'used',\n (node) => node.memory.versioned_chunk_meta,\n ),\n\n tabletDynamicUsed: createRangePredicate(\n setupFilters.cpu.tabletDynamicUsed,\n 'used',\n (node) => node.memory.tablet_dynamic,\n ),\n tabletDynamicTotal: createRangePredicate(\n setupFilters.cpu.tabletDynamicTotal,\n 'limit',\n (node) => node.memory.tablet_dynamic,\n ),\n\n tabletStaticUsed: createRangePredicate(\n setupFilters.cpu.tabletStaticUsed,\n 'used',\n (node) => node.memory.tablet_static,\n ),\n tabletStaticTotal: createRangePredicate(\n setupFilters.cpu.tabletStaticTotal,\n 'limit',\n (node) => node.memory.tablet_static,\n ),\n\n userJobsUsed: createRangePredicate(\n setupFilters.cpu.userJobsUsed,\n 'used',\n (node) => node.memory.user_jobs,\n ),\n userJobsTotal: createRangePredicate(\n setupFilters.cpu.userJobsTotal,\n 'limit',\n (node) => node.memory.user_jobs,\n ),\n\n // filter by resources\n userSlotsUsed: createRangePredicate(\n setupFilters.resources.userSlotsUsed,\n 'usage',\n (node) => node.userSlots,\n ),\n userSlotsTotal: createRangePredicate(\n setupFilters.resources.userSlotsTotal,\n 'limits',\n (node) => node.userSlots,\n ),\n sealSlotsUsed: createRangePredicate(\n setupFilters.resources.sealSlotsUsed,\n 'usage',\n (node) => node.sealSlots,\n ),\n sealSlotsTotal: createRangePredicate(\n setupFilters.resources.sealSlotsTotal,\n 'limits',\n (node) => node.sealSlots,\n ),\n repairSlotsUsed: createRangePredicate(\n setupFilters.resources.repairSlotsUsed,\n 'usage',\n (node) => node.repairSlots,\n ),\n repairSlotsTotal: createRangePredicate(\n setupFilters.resources.repairSlotsTotal,\n 'limits',\n (node) => node.repairSlots,\n ),\n removalSlotsUsed: createRangePredicate(\n setupFilters.resources.removalSlotsUsed,\n 'usage',\n (node) => node.removalSlots,\n ),\n removalSlotsTotal: createRangePredicate(\n setupFilters.resources.removalSlotsTotal,\n 'limits',\n (node) => node.removalSlots,\n ),\n replicationSlotsUsed: createRangePredicate(\n setupFilters.resources.replicationSlotsUsed,\n 'usage',\n (node) => node.replicationSlots,\n ),\n replicationSlotsTotal: createRangePredicate(\n setupFilters.resources.replicationSlotsTotal,\n 'limits',\n (node) => node.replicationSlots,\n ),\n\n // filter by tablets\n all: createRangePredicate(\n setupFilters.tablets.all,\n 'all',\n (node) => node.tabletSlots,\n true,\n ),\n none: createRangePredicate(\n setupFilters.tablets.none,\n 'none',\n (node) => node.tabletSlots.byState,\n true,\n ),\n leading: createRangePredicate(\n setupFilters.tablets.leading,\n 'leading',\n (node) => node.tabletSlots.byState,\n true,\n ),\n following: createRangePredicate(\n setupFilters.tablets.following,\n 'following',\n (node) => node.tabletSlots.byState,\n true,\n ),\n followerRecovery: createRangePredicate(\n setupFilters.tablets.followerRecovery,\n 'follower_recovery',\n (node) => node.tabletSlots.byState,\n true,\n ),\n leaderRecovery: createRangePredicate(\n setupFilters.tablets.leaderRecovery,\n 'leader_recovery',\n (node) => node.tabletSlots.byState,\n true,\n ),\n stopped: createRangePredicate(\n setupFilters.tablets.stopped,\n 'stopped',\n (node) => node.tabletSlots.byState,\n true,\n ),\n elections: createRangePredicate(\n setupFilters.tablets.elections,\n 'elections',\n (node) => node.tabletSlots.byState,\n true,\n ),\n\n staticUsed: createRangePredicate(\n setupFilters.tablets.staticUsed,\n 'used',\n (node) => node.tabletStaticMemory,\n ),\n staticTotal: createRangePredicate(\n setupFilters.tablets.staticTotal,\n 'limit',\n (node) => node.tabletStaticMemory,\n ),\n dynamicUsed: createRangePredicate(\n setupFilters.tablets.dynamicUsed,\n 'used',\n (node) => node.tabletDynamicMemory,\n ),\n dynamicTotal: createRangePredicate(\n setupFilters.tablets.dynamicTotal,\n 'limit',\n (node) => node.tabletDynamicMemory,\n ),\n };\n return predicates;\n },\n);\n\nexport const getComponentNodesFiltersCount = createSelector(\n [getFilterPredicatesObject],\n (filters) => {\n return reduce_(\n filters,\n (acc, predicate) => {\n return predicate ? acc + 1 : acc;\n },\n 0,\n );\n },\n);\n\nexport const getComponentNodesFilterPredicates = createSelector(\n [getFilterPredicatesObject],\n (filterPredicatesObject) => {\n return filter_(filterPredicatesObject, (p) => p) as Array<(node: Node) => boolean>;\n },\n);\n\nexport const getPropertiesRequiredForFilters = createSelector(\n [getFilterPredicatesObject],\n (filterPredicatesObject) => {\n const picked = values_(\n pickBy_(\n PropertiesByPredicate,\n (_value, key) => filterPredicatesObject[key as keyof typeof PropertiesByPredicate],\n ),\n ) as any;\n\n return union_(...picked) as Array<ValueOf<typeof PropertiesByPredicate>[number]>;\n },\n);\n\nfunction createNodeTagPredicate<K extends keyof typeof PropertiesByPredicate>(\n tagFilter: string | TagFilter,\n nodesByTags: Map<string, Set<NodeWithProps<K>>>,\n getTags: (node: NodeWithProps<K>) => Array<string>,\n): undefined | ((node: NodeWithProps<K>) => boolean) {\n if (!tagFilter) {\n return undefined;\n }\n\n if (typeof tagFilter === 'string') {\n return (node) => {\n return some_(\n getTags(node),\n (item) => -1 !== item?.toLowerCase().indexOf(tagFilter.toLowerCase()),\n );\n };\n }\n\n const {mode, useRegexp, filter, selected} = tagFilter;\n\n const selectedItems = selected || [];\n\n switch (mode) {\n case 'union': {\n if (!selected?.length) {\n return undefined;\n }\n return (node) => {\n return some_(selectedItems, (tagName) => {\n return nodesByTags.get(tagName)?.has(node);\n });\n };\n }\n case 'intersection': {\n if (!selected?.length) {\n return undefined;\n }\n return (node) => {\n return every_(selectedItems, (tagName) => {\n return nodesByTags.get(tagName)?.has(node);\n });\n };\n }\n default: {\n if (!filter) {\n return undefined;\n }\n if (!useRegexp) {\n return createNodeTagPredicate(filter, new Map(), getTags);\n }\n try {\n const re = new RegExp(filter);\n return (node) => {\n return some_(getTags(node), (tag) => re.test(tag));\n };\n } catch (e) {\n return () => false;\n }\n }\n }\n}\n\nfunction createFlagPredicate<T extends keyof typeof PropertiesByPredicate>(\n key: (typeof PropertiesByPredicate)[T][number],\n flag: FlagState,\n) {\n if (!flag || flag === 'all') {\n return undefined;\n }\n\n return (node: NodeWithProps<T>) => {\n return flag === 'disabled' ? !node[key] : Boolean(node[key]);\n };\n}\n\nfunction createAttributeStatePredicate<T extends keyof typeof PropertiesByPredicate>(\n key: (typeof PropertiesByPredicate)[T][number],\n value: FlagState,\n) {\n if (value === 'all') {\n return undefined;\n }\n\n return (node: NodeWithProps<T>) => {\n return value === 'disabled' ? Boolean(node[key]) : !node[key];\n };\n}\n\nfunction createAlertsFlagPredicate(flag: FlagState) {\n if (!flag || flag === 'all') {\n return undefined;\n }\n\n return (node: Pick<Node, 'alertCount'>) => {\n if (flag === 'disabled') {\n return node.alertCount === 0;\n }\n\n return node.alertCount! > 0;\n };\n}\n\nfunction createRangePredicate<T extends keyof typeof PropertiesByPredicate, U>(\n range: NodeRange,\n key: keyof U,\n get: (node: NodeWithProps<T>) => U,\n asArray?: boolean,\n) {\n if (!isRangeFilterDefined(range)) {\n return undefined;\n }\n\n const {from, to} = range;\n\n return (node: NodeWithProps<T>) => {\n const value: any = get(node)[key];\n\n const nodeValue = asArray ? value.length : value;\n\n return (\n nodeValue >= (from.value === null ? -Infinity : from.value) &&\n nodeValue <= (to.value === null ? Infinity : to.value)\n );\n };\n}\n","import {createSelector} from 'reselect';\n\nimport {getSettingSystemNodesNodeType} from '../../../store/selectors/settings/settings-ts';\nimport {NODE_TYPE} from '../../../../shared/constants/system';\n\nexport const getSystemNodesNodeTypesToLoad = createSelector(\n [getSettingSystemNodesNodeType],\n (nodeTypes) => {\n const valueSet = new Set(nodeTypes);\n if (valueSet.has(NODE_TYPE.ALL_NODES)) {\n return [NODE_TYPE.ALL_NODES];\n }\n\n return [...valueSet.values()];\n },\n);\n","import {RootState} from '../../store/reducers';\nimport {initialState} from '../../store/reducers/tables';\n\nexport const getTables = (state: RootState) => state.tables || initialState;\n","import filter_ from 'lodash/filter';\nimport {createSelector} from 'reselect';\n\nimport hammer from '../../../common/hammer';\nimport {MediumType} from '../../../constants/index';\nexport {isSupportedSelector} from './support';\n\nexport const getMediumList = createSelector(\n (state) => state.global.mediumList,\n (data) => hammer.utils.sortInPredefinedOrder([MediumType.DEFAULT], [...data]),\n);\n\nexport const getMediumListNoCache = createSelector([getMediumList], (mediums) =>\n filter_(mediums, (item) => item !== 'cache'),\n);\n\nexport const getCurrentCluster = (state) => state.global.cluster;\n","import {createSelector} from 'reselect';\nimport map_ from 'lodash/map';\nimport isEmpty_ from 'lodash/isEmpty';\nimport every_ from 'lodash/every';\n\n// @ts-ignore\nimport hammer from '@ytsaurus/interface-helpers/lib/hammer';\n\nimport {RootState} from '../../../store/reducers';\n\nexport const _LOCAL_ARCADIA_VERSION = '(development)';\n\nfunction versionToArray(version: string, build?: string) {\n const VERSION_DELIMITER = '.';\n const VERSION_CHUNK_COUNT = 3;\n const VERSION_CHUNK_PLACEHOLDER = 0;\n\n const versionArray: Array<string | number> = map_(\n version.split(VERSION_DELIMITER),\n (subversion) => {\n return parseInt(subversion, 10);\n },\n );\n\n while (versionArray.length < VERSION_CHUNK_COUNT) {\n versionArray.push(VERSION_CHUNK_PLACEHOLDER);\n }\n\n if (build) {\n versionArray.push(build);\n }\n\n return versionArray;\n}\n\n/**\n * Returns true if versionA >= versionB and comparator === 'greater'\n * Returns true if versionA < versionB and comparator === 'smaller'\n * @param {String} comparator - 'greater', 'smaller'\n * @param {String} versionA\n * @param {String} versionB\n * @returns {boolean}\n */\nexport function _compareVersions(\n comparator: 'greater' | 'smaller',\n versionA: string,\n versionB: string,\n) {\n if (versionA === versionB) {\n return comparator === 'greater';\n }\n\n return comparator === 'greater'\n ? hammer.utils.compareVectors(versionToArray(versionA), versionToArray(versionB)) >= 0\n : hammer.utils.compareVectors(versionToArray(versionA), versionToArray(versionB)) < 0;\n}\n\n/**\n * Determines wheter a given version belongs to a versionInterval [a, b)\n * Left end included, right end excluded (intuitive limitations - features are supported starting from a specific build)\n * @param {String} version\n * @param {String|Object} versionInterval\n * @returns {boolean}\n */\nexport function _versionInInterval(\n version: string,\n versionInterval: MajorMinorPatch | MajorMinorPatchRange | typeof _LOCAL_ARCADIA_VERSION,\n) {\n let supported;\n\n if (typeof versionInterval === 'object') {\n supported = Object.keys(versionInterval).every((comparator) => {\n if (!(comparator === 'greater' || comparator === 'smaller')) {\n throw new Error(\n 'thor.support: feature description has unknown comparator \"' +\n comparator +\n '\",' +\n ' cannot check support.',\n );\n }\n const key = comparator as keyof typeof versionInterval;\n return _compareVersions(comparator, version, versionInterval[key]!);\n });\n } else {\n supported = _compareVersions('greater', version, versionInterval);\n }\n\n return supported;\n}\n\nfunction getVersionAndBuild(version?: string): [string, string | undefined] | undefined {\n const parsedVersion = version?.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\n let parsedBuild;\n\n if (parsedVersion) {\n const majorMinorPatch = parsedVersion[0];\n parsedBuild = version?.substring(parsedVersion.length);\n\n return [majorMinorPatch, parsedBuild];\n }\n return undefined;\n}\n\nconst getRawProxyVersion = (state: RootState) => state.global.version;\nconst getRawSchedulerVersion = (state: RootState) => state.global.schedulerVersion;\nconst getRawMasterVersion = (state: RootState) => state.global.masterVersion;\n\ntype MajorMinorPatch = `${number}.${number}.${number}`;\ntype MajorMinorPatchRange = {greater?: MajorMinorPatch; smaller?: MajorMinorPatch};\n\nexport type RawVersion = `${MajorMinorPatch}-${string}`;\n\nexport type Versions<T> = {proxy?: T | typeof _LOCAL_ARCADIA_VERSION; scheduler?: T; master?: T};\n\ntype FeatureVersions = Versions<MajorMinorPatch | Array<MajorMinorPatchRange>>;\ntype RawFeatureVersions = Versions<RawVersion>;\n\nconst FEATURES = {\n fieldsFilter: {\n scheduler: '22.1.9091155',\n } as FeatureVersions,\n effectiveExpiration: {\n master: '23.1.11146445',\n } as FeatureVersions,\n clusterNodeVersion: {\n proxy: '23.2.0',\n } as FeatureVersions,\n nodeMaintenanceApi: {\n proxy: '23.1.11106567',\n } as FeatureVersions,\n schedulingChildrenByPool: {\n scheduler: '23.1.11146742',\n } as FeatureVersions,\n};\n\nexport function _isFeatureSupported<T extends Record<string, FeatureVersions>>(\n rawVersions: RawFeatureVersions,\n features: T,\n) {\n return (featureName: keyof T) => {\n function failFeature(message: string) {\n console.warn(`thor.support \"${featureName as string}\" ${message}`);\n return false;\n }\n\n const featureVersions: FeatureVersions = features[featureName];\n\n if (!featureVersions) {\n return failFeature(`${featureName as string} is unknown, cannot check support.`);\n }\n\n if (isEmpty_(featureVersions)) {\n return failFeature('feature component version is unknown, cannot check support.');\n }\n\n return every_(featureVersions, (value, k) => {\n const key = k as keyof typeof rawVersions;\n const rawVersion = rawVersions[key];\n\n // yt-local in arcadia is meant to be of the freshest version\n if (rawVersion === _LOCAL_ARCADIA_VERSION) {\n return true;\n }\n\n if (!value) {\n return failFeature(`feature version of '${key}' is unknown, connot check support`);\n }\n\n const buildVersion = getVersionAndBuild(rawVersion);\n if (!buildVersion) {\n return failFeature(\n `version of '${key}' component is unknown, cannot check support.`,\n );\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => _versionInInterval(buildVersion[0], item));\n } else {\n return _versionInInterval(buildVersion[0], value);\n }\n });\n };\n}\n\nexport const isSupportedSelector = createSelector(\n [getRawProxyVersion, getRawSchedulerVersion, getRawMasterVersion],\n (proxy, scheduler, master) => _isFeatureSupported({proxy, scheduler, master}, FEATURES),\n);\n\nexport const isSupportedEffectiveExpiration = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('effectiveExpiration');\n },\n);\n\nexport const isSupportedClusterNodeForVersions = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('clusterNodeVersion');\n },\n);\n\nexport const isSupportedNodeMaintenanceApi = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('nodeMaintenanceApi');\n },\n);\n\nexport const isSupportedSchedulingChildrenByPool = createSelector(\n [isSupportedSelector],\n (isSupported) => {\n return isSupported('schedulingChildrenByPool');\n },\n);\n","import {COMPONENTS_NODES_NODE_TABLE_ID} from '../../../constants/components/nodes/nodes';\n\ninterface Node {\n cell_id: string;\n peer_id: string;\n state: string;\n}\n\nexport const nodeTableProps = {\n size: 's',\n virtual: false,\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: COMPONENTS_NODES_NODE_TABLE_ID,\n columns: {\n items: {\n cell_id: {\n get(node: Node) {\n return node.cell_id;\n },\n sort: true,\n align: 'left',\n caption: 'Cell ID',\n },\n peer_id: {\n sort: true,\n get(node: Node) {\n return node.peer_id;\n },\n align: 'right',\n caption: 'Peer ID',\n },\n state: {\n sort: true,\n get(node: Node) {\n return node.state;\n },\n align: 'right',\n },\n },\n sets: {\n default: {\n items: ['cell_id', 'peer_id', 'state'],\n },\n },\n mode: 'default',\n },\n templates: {\n key: 'components/nodes/node',\n },\n};\n\nexport type ComponentsNodesLinkParams = {\n cluster?: string;\n rackFilter?: string;\n rackSelected?: Array<string>;\n banned?: 'enabled';\n decommissioned?: 'enabled';\n alerts?: 'enabled';\n full?: 'enabled';\n state?: 'online' | 'offline' | string;\n nodeTypes?: Array<string>;\n};\n\nexport function makeComponentsNodesLink({\n cluster,\n state,\n rackFilter,\n rackSelected,\n banned,\n decommissioned,\n full,\n alerts,\n nodeTypes,\n}: ComponentsNodesLinkParams) {\n if (!cluster) {\n return '';\n }\n let search = '';\n if (rackFilter) {\n search += `rack=filter-${rackFilter}&`;\n } else if (rackSelected?.length) {\n search += `rack=mode-union,selected-${rackSelected.join('|')}&`;\n }\n if (banned) {\n search += `banned=${banned}&`;\n }\n if (state) {\n search += `state=${state}&`;\n }\n if (decommissioned) {\n search += `decommissioned=${decommissioned}&`;\n }\n if (alerts) {\n search += `alerts=${alerts}&`;\n }\n if (full) {\n search += `full=${full}&`;\n }\n if (nodeTypes?.length) {\n search += `nodeType=${nodeTypes?.join(',')}&`;\n }\n return `/${cluster}/components/nodes?${search}`;\n}\n","import {MEDIUM_COLS_PREFIX} from '../../../constants/components/nodes/nodes';\n\nimport forEach_ from 'lodash/forEach';\n\nimport type {Node} from '../../../store/reducers/components/nodes/nodes/node';\nimport type {\n NodeRange,\n NodesSetupState,\n} from '../../../store/reducers/components/nodes/setup/setup';\nimport type {FIX_MY_TYPE} from '../../../types';\n\nconst isCorrectRange = (\n node: Node['IOWeight'] = {},\n {from, to}: NodeRange,\n key: FIX_MY_TYPE,\n isArray = false,\n) => {\n if (!node[key]) {\n return from.value === null && to.value === null;\n }\n\n const nodeValue = isArray ? (node[key] as FIX_MY_TYPE).length : node[key];\n\n return (\n nodeValue >= (from.value === null ? -Infinity : from.value) &&\n nodeValue <= (to.value === null ? Infinity : to.value)\n );\n};\n\nexport function createMediumsPredicates(setupFilters: NodesSetupState, mediumList: FIX_MY_TYPE) {\n const {storage} = setupFilters;\n const predicates = [] as Array<(node: Pick<Node, 'IOWeight'>) => boolean>;\n forEach_(mediumList, (medium) => {\n const fromTo =\n storage[(MEDIUM_COLS_PREFIX + medium) as FIX_MY_TYPE as keyof typeof storage];\n if (isRangeFilterDefined(fromTo)) {\n predicates.push((node: Pick<Node, 'IOWeight'>) =>\n isCorrectRange(node.IOWeight, fromTo, medium),\n );\n }\n });\n return predicates;\n}\n\nexport function isRangeFilterDefined({from, to}: NodeRange) {\n return from.value !== null || to.value !== null;\n}\n"],"names":["ChartLink","props","className","url","title","theme","children","hideIcon","face","wrapContent","icon","_jsx","Icon","awesome","content","_jsxs","React","Link","target","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","collapsed","_createClass","key","value","_this$props","this","name","size","overview","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","margin","clickable","onClick","Component","CollapsibleSection","_React$useState","_React$useState2","_slicedToArray","setCollapsed","onChange","_objectSpread","defaultProps","renderText","text","settings","undefined","mix","elem","mods","textProps","asHTML","dangerouslySetInnerHTML","__html","unipika","decode","String","prepareTextProps","printColumnAsTimeDurationWithMs","item","columnName","column","getColumn","hammer","format","get","printColumnAsReadableField","printColumnAsTime","ColumnAsTime","_ref","printColumnAsError","error","_typeof","showErrorPopup","hideOopsMsg","NO_VALUE","asNumber","__default__","_templates","add","templateId","templates","Object","keys","reduce","newTemplates","wrapRenderMethods","cn","ROLE_THEME","default","control","data","STATE_THEME","online","offline","NodeColumnState","_STATE_THEME$state","state","FirstUppercase","Label","type","NodeColumnBanned","_ref2","banned","StatusBlock","NodeColumnRole","_ref3","role","Address","NodeColumnText","_ref4","ClipboardButton","view","ClickableId","_ref5","allowTooltip","_ref5$format","v","ClickableText","color","Tooltip","MemoryProgress","progress","memoryText","memoryData","Progress","stack","category","_category$rawData","_category$rawData2","rawDataUsed","rawData","used","rawDataLimit","limit","rawDataLimitIsNumber","style","backgroundColor","_this2","map_","renderItem","renderPopupContent","disableInline","renderProgress","withVisible","Version","version","handleShow","handleClose","visible","SimpleModal","onCancel","onOutsideClick","Error","renderErrorVersion","renderVersion","NodeActions","_React$Component","handleEditClick","node","showNodeMaintenance","address","host","component","_this$props2","cluster","_UIFactory$getCompone","UIFactory","getComponentsNodeDashboardUrl","ClickableAttributesButton","path","withTooltip","Button","tooltipProps","placement","mapDispatchToProps","connect","getCluster","NodesColumnHeader","_props$options","_column$column","dispatch","useDispatch","sortState","useSelector","getTables","COMPONENTS_NODES_TABLE_ID","order","oldSortStateToOrderType","options","find","field","ColumnHeader","onSort","_props$options2","colInfo","toggleColumnSortOrder","withUndefined","allowUnordered","tableId","PropertiesByColumn","actions","alert_count","chunks","cpu","cpu_limit","cpu_usage","data_center","decommissioned","elections","elections_chaos","follower_recovery","follower_recovery_chaos","following","following_chaos","full","gpu","gpu_usage","gpu_limit","io_weight","last_seen","leader_recovery","leader_recovery_chaos","leading","leading_chaos","locations","memory_total","memory","memory_limit","memory_usage","network","network_usage","network_limit","none","none_chaos","physical_host","flavors","rack","removal_slots","removal_slots_usage","removal_slots_limit","repair_slots","repair_slots_usage","repair_slots_limit","replication_slots","replication_slots_usage","replication_slots_limit","scheduler_jobs","seal_slots","seal_slots_usage","seal_slots_limit","sessions","space_limit","space_usage","space","stopped","stopped_chaos","system_tags","tablet_cells","tablet_memory_dynamic","tablet_memory_dynamic_usage","tablet_memory_dynamic_limit","tablet_memory_static","tablet_memory_static_usage","tablet_memory_static_limit","tablet_memory","tablet_slots","user_slots","user_slots_usage","user_slots_limit","user_tags","write_sessions","nodesTableProps","virtual","virtualType","cssHover","striped","computeKey","columns","items","sort","align","physicalHost","compareFn","compareArraysBySizeThenByItems","dataCenter","caption","userTags","_node$userTags","systemTags","allowedOrderTypes","DESC_ASC_UNORDERED","alertCount","disableJobs","disableWriteSession","disableTabletCells","lastSeenTime","spaceProgress","renderHeader","sortWithUndefined","spaceTotal","spaceUsed","hidden","enabledLocations","cpuProgress","_node$cpu","_node$cpu2","usage","_node$gpu","_node$gpu2","_node$gpu3","memoryProgress","memoryTotal","networkProgress","hiddne","repairSlotsProgress","_ref6","repairSlots","limits","removalSlotsProgress","_ref7","removalSlots","replicationSlotsProgress","_ref8","replicationSlots","sealSlotsProgress","_ref9","sealSlots","userSlotsProgress","_ref10","userSlots","tabletSlots","raw","reduce_","sum","slot","_node$tabletSlots","byState","_node$tabletSlots2","makeCaptionProps","_node$chaosSlots","chaosSlots","_node$chaosSlots2","_node$tabletSlots3","_node$tabletSlots4","_node$chaosSlots3","_node$chaosSlots4","_node$tabletSlots5","_node$tabletSlots6","_node$chaosSlots5","_node$chaosSlots6","_node$tabletSlots7","_node$tabletSlots8","_node$chaosSlots7","_node$chaosSlots8","_node$tabletSlots9","_node$chaosSlots9","_node$tabletSlots10","_node$tabletSlots11","_node$chaosSlots10","_node$chaosSlots11","_node$tabletSlots12","_node$tabletSlots13","_node$chaosSlots12","_node$chaosSlots13","group","static","tabletStaticMemory","static_usage","static_limit","dynamic","tabletDynamicMemory","dynamic_usage","dynamic_limit","set","IOWeight","cache","ssd_blobs","ssd_journals","sets","storage","cpu_and_memory","resources","tablets","chaos_slots","custom","onMemoryProgressMouseEnter","onMemoryProgressMouseLeave","defaultColumns","renderTags","tags","themes","flexType","TagsContainer","tag","index","_ref11","_ref11$flexType","inline","NODES_TABLE_TEMPLATES","startsWith","mediumName","slice","IO_WEIGHT_PREFIX","Host","renderLabel","_item$dataCenter","toUpperCase","spaceText","progressText","cpuText","_item$gpu","_item$gpu2","memoryTotalText","networkText","statuses","sortBy_","keys_","_TABLET_SLOTS$state","TABLET_SLOTS","label","_item$tabletSlots","_item$chaosSlots","_item$tabletSlots2","_item$chaosSlots2","_item$tabletSlots3","_item$chaosSlots3","_item$tabletSlots4","_item$chaosSlots4","_item$tabletSlots5","_item$chaosSlots5","_item$tabletSlots6","_item$chaosSlots6","_item$tabletSlots7","_item$chaosSlots7","getNodeTablesProps","mediumList","allMediums","acc","res","merge_","groupHeaderStyle","width","NodeTypeSelector","onUpdate","Select","multiple","NODE_TYPE_ITEMS","newVal","newValue","updateListWithAll","NODE_TYPE","ALL_NODES","SystemNodeTypeSelector","getSystemNodesNodeTypesToLoad","setSettingSystemNodesNodeType","setSysmetNodesNodeType","ComponentsNodeTypeSelector","getComponentsNodesNodeTypes","componentsNodesSetNodeTypes","makeNodePath","applyMaintenance","resourceLimitsOverrides","getState","requests","push","prepareSetCommandForBatch","forEach_","isNaN","$value","$type","input_format","$attributes","annotate_with_types","t","command","comment","isMaintenanceApiAllowedForComponent","parameters","mine","_toConsumableArray","c","isAdd","input","makeObsoleteMaintenanceRequests","reloadNodeData","updateComponentsNode","getProxies","wrapApiPromiseByToaster","ytApiV4Id","executeBatch","YTApiId","addMaintenance","toasterName","batchType","skipSuccessToast","errorTitle","then","params","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","loadNodeMaintenanceData","sent","abrupt","NODE_MAINTENANCE_PARTIAL","stop","_x","_dispatch","user","getCurrentUserName","allowMaintenanceRequests","ytApiV3Id","maintenanceRequests","attributes","errorContent","maintenance","maintenance_requests","_maintenance$item$typ","_dst$comment","dst","otherComments","timestamp","assign","ban","ban_message","decommission","decommission_message","disable_scheduler_jobs","disable_tablet_cells","disable_write_sessions","resourceLimits","resource_limits","resource_limits_overrides","closeNodeMaintenanceModal","NODE_MAINTENANCE_RESET","isAllowedMaintenanceApiNodes","isAllowedMaintenanceApiProxies","COMPONENTS","NAMESPACES","TEMPLATES","SettingName","changeContentMode","contentMode","CHANGE_CONTENT_MODE","updateNodeCanceler","CancelHelper","getNodes","nodeTypes","GET_NODES","REQUEST","preparedAttrs","prepareAttributes","map","USE_CACHE","USE_MAX_SIZE","componentsClusterNodes","cancellation","removeAllAndSave","_step","_splitBatchResults","splitBatchResults","results","outputs","output","ypath","getValue","nodes","collectedItems","Set","_iterator","_createForOfIteratorHelper","s","n","done","_step2","_iterator2","has","err","e","f","SUCCESS","code","yt","CANCELLED","FAILURE","componentsUpdateNodeData","Node","ATTRIBUTES","COMPONENTS_NODES_UPDATE_NODE","changeHostFilter","hostFilter","CHANGE_HOST_FILTER","trim","CHANGE_NODE_TYPE","applyPreset","setup","APPLY_SETUP","savePreset","prevTemplates","getTemplates","_defineProperty","setSetting","removePreset","omit_","handleColumnsChange","selectedColumns","SELECTED_COLUMNS","getComponentsNodesFilterOptions","compact_","useTagsFromAttributes","useRacksFromAttributes","GET_NODES_FILTER_OPTIONS","list","join","racks","filterOptionsTags","filterOptionsRacks","Proxy","dead","effectiveState","getBoolean","banMessage","liveness","loadAverage","updatedAt","networkLoad","GET_PROXIES","PROXY_TYPE","HTTP","Promise","all","axios","systemProxies","cypressData","proxies","proxyData","cypressAttributes","getAttributes","componentsRpcProxies","componentGetRpcProxies","proxiesMap","alive","Boolean","meta","PROXIES_CHANGE_FILTERS","changeStateFilter","stateFilter","changeRoleFilter","roleFilter","changeBannedFilter","bannedFilter","resetProxyState","getNodeMaintenanceModalState","components","nodeMaintenanceModal","getNodeMaintenanceModalInitialValues","createSelector","k","isSupportedNodeMaintenanceApi","getClusterUiConfig","isSupported","uiConfig","enable_maintenance_api_nodes","enable_maintenance_api_proxies","getMediumsPredicates","getComponentNodesFiltersSetup","getMediumListNoCache","createMediumsPredicates","getPropertiesRequiredForMediums","mediumsPredicates","getFilteredByHost","toLowerCase","hostFilters","split","filter_","some_","_node$host","includes","getFilteredNodes","getComponentNodesFilterPredicates","predicates","predicatesArray","predicate","concatByAnd","getVisibleNodes","tables","utils","getComponentNodesTableProps","getVisibleColumns","getSelectedColumns","customColumns","getPropertiesRequiredForRender","visibleColumns","union_","x","getRequiredAttributes","getPropertiesRequiredForFilters","propertiesRequiredForRender","propertiesRequiredForFilters","propertiesRequiredForMediums","allRequiredProperties","AttributesByProperty","indexOf","getComponentNodesTags","getComponentNodesIndexByTag","useFromAttrs","fetchedTags","nodesByTag","getComponentNodesRacks","getComponentNodesIndexByRack","fetchedRacks","nodesByRack","types","COMPONENTS_AVAILABLE_STATES","getComponentNodesFilterSetupStateValue","getComponentNodesFilterStatePredicate","filter","getSetupFiltersRaw","excludes","substring","Toaster","autoHiding","mediumDefaults","medium","MEDIUM_COLS_PREFIX","cloneDeep_","groupFilterInitialState","_acc$get","Map","_node$rack","_acc$get2","UNAWARE","PropertiesByPredicate","blobSession","blockCache","chunkBlockMeta","chunkMeta","footprint","query","systemJobs","versionedChunkMeta","tabletDynamicUsed","tabletDynamicTotal","tabletStaticUsed","tabletStaticTotal","userJobsUsed","userJobsTotal","userSlotsUsed","userSlotsTotal","sealSlotsUsed","sealSlotsTotal","repairSlotsUsed","repairSlotsTotal","removalSlotsUsed","removalSlotsTotal","replicationSlotsUsed","replicationSlotsTotal","followerRecovery","leaderRecovery","staticUsed","staticTotal","dynamicUsed","dynamicTotal","getRackPredicate","setupFilters","_rack$selected","selected","createNodeTagPredicate","getFilterPredicatesObject","nodesByTags","rackPredicate","statePredicate","_node$physicalHost","createFlagPredicate","createAlertsFlagPredicate","createAttributeStatePredicate","schedulerJobs","writeSessions","tabletCells","createRangePredicate","blob_session","block_cache","chunk_block_meta","chunk_meta","system_jobs","versioned_chunk_meta","tablet_dynamic","tablet_static","user_jobs","getComponentNodesFiltersCount","filters","filterPredicatesObject","p","picked","values_","pickBy_","_value","tagFilter","getTags","mode","useRegexp","selectedItems","tagName","_nodesByTags$get","every_","_nodesByTags$get2","re","RegExp","test","flag","range","asArray","isRangeFilterDefined","from","to","nodeValue","Infinity","getSettingSystemNodesNodeType","valueSet","values","initialState","getMediumList","global","sortInPredefinedOrder","MediumType","DEFAULT","mediums","getCurrentCluster","versionToArray","build","versionArray","subversion","parseInt","_compareVersions","comparator","versionA","versionB","compareVectors","_versionInInterval","versionInterval","every","FEATURES","fieldsFilter","scheduler","effectiveExpiration","master","clusterNodeVersion","proxy","nodeMaintenanceApi","schedulingChildrenByPool","isSupportedSelector","schedulerVersion","masterVersion","rawVersions","features","featureName","failFeature","message","console","warn","featureVersions","isEmpty_","rawVersion","buildVersion","parsedVersion","match","getVersionAndBuild","isArray","some","isSupportedEffectiveExpiration","isSupportedClusterNodeForVersions","isSupportedSchedulingChildrenByPool","nodeTableProps","COMPONENTS_NODES_NODE_TABLE_ID","cell_id","peer_id","makeComponentsNodesLink","rackFilter","rackSelected","alerts","search","isCorrectRange","fromTo"],"sourceRoot":""}
|