@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
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"js/system.1114aa96.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/containers/App/AppStoreProvider.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/System/SystemTopRowContent.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Resources/Resources.js","webpack://@ytsaurus/ui/./src/ui/pages/system/VisibleHostTypeRadioButton.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemCounters/SystemCounters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemStateOverview/SystemStateLabels.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemStateOverview/SystemStateOverview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/SwitchLeaderShortInfo/SwitchLeaderShortInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/SwitchLeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/NodeQuad/NodeQuad.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/read-only-icon.svg","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/warmup-icon.svg","webpack://@ytsaurus/ui/./src/ui/pages/system/helpers/makeShortSystemAddress.ts","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/ChangeMaintenanceButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/Instance.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/MasterGroup.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/SystemAlert.tsx","webpack://@ytsaurus/ui/./src/ui/components/StickyContainer/StickyContainer.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/Masters.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/store/actions/system/index.js","webpack://@ytsaurus/ui/./src/ui/store/actions/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/Scheduler/Scheduler.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/SchedulersAndAgents.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/prepareTags.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Chunks/Chunks.js","webpack://@ytsaurus/ui/./src/ui/utils/system/proxies.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/system/proxies.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Cube.js","webpack://@ytsaurus/ui/./src/ui/containers/GridWithMediaMinWidth/GridWithMediaMinWidth.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/StatsInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/RoleGroup.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/ProxiesImpl.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/HttpProxies/HttpProxies.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/RpcProxies/RpcProxies.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/system/rpc-proxies.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/system/nodes.ts","webpack://@ytsaurus/ui/./src/ui/pages/system/Nodes/Nodes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/System/SystemGeneralTab.tsx","webpack://@ytsaurus/ui/./src/ui/constants/system/tabs.ts","webpack://@ytsaurus/ui/./src/ui/pages/system/System/System.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/System/helpers/getSystemTabItems.ts","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/pencil.svg","webpack://@ytsaurus/ui/./node_modules/react-use/esm/useToggle.js"],"sourcesContent":["import React from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nexport interface AttributesButtonProps extends ButtonProps {}\n\nexport default function AttributesButton({\n view = 'flat-secondary',\n size = 'm',\n ...rest\n}: AttributesButtonProps) {\n return (\n <Button view={view} size={size} {...rest}>\n <Icon awesome=\"at\" />\n </Button>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React from 'react';\n\nimport {Provider} from 'react-redux';\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\nimport {getWindowStore} from '../../store/window-store';\n\nexport function AppStoreProvider({children}: {children: React.ReactNode}) {\n return (\n <Provider store={getWindowStore()}>\n <ErrorBoundary>{children}</ErrorBoundary>\n </Provider>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\nimport {Page} from '../../../constants';\nimport Button from '../../../components/Button/Button';\n\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {useSelector} from 'react-redux';\nimport {ClusterConfig} from '../../../../shared/yt-types';\nimport UIFactory from '../../../UIFactory';\n\nimport './SystemTopRowContent.scss';\n\nconst block = cn('system-top-row-content');\n\nfunction SystemTopRowContent() {\n return (\n <RowWithName className={block()} page={Page.SYSTEM}>\n <CreateClusterNotificationButton />\n </RowWithName>\n );\n}\n\nexport function CreateClusterNotificationButton() {\n const clusterConfig = useSelector(getCurrentClusterConfig);\n return <CreateNotificationButton clusterConfig={clusterConfig} />;\n}\n\nexport function CreateNotificationButton({clusterConfig}: {clusterConfig: ClusterConfig}) {\n const url = UIFactory.createNotificationUrl(clusterConfig);\n if (!url) {\n return null;\n }\n\n return (\n <div className={block('create-notification')}>\n <Button view=\"action\" title=\"Create notification\" href={url} target={'_blank'}>\n Create notification\n </Button>\n </div>\n );\n}\n\nexport default React.memo(SystemTopRowContent);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport block from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\n\nimport {Progress} from '@gravity-ui/uikit';\n\nimport Block from '../../../components/Block/Block';\nimport hammer from '../../../common/hammer';\nimport {getMediumList} from '../../../store/selectors/thor';\nimport {loadSystemResources} from '../../../store/actions/system/resources';\nimport {useThunkDispatch} from '../../../store/thunkDispatch';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport './Resources.scss';\n\nconst formatNumber = hammer.format.Number;\nconst formatBytes = hammer.format.Bytes;\n\nconst b = block('system');\n\nclass Resources extends Component {\n static propTypes = {\n // from connect\n resources: PropTypes.object.isRequired,\n nodeAttributes: PropTypes.object,\n mediumList: PropTypes.arrayOf(PropTypes.string),\n };\n\n prepareResources() {\n const {resources} = this.props;\n if (!resources) {\n return [];\n }\n const {resource_usage: usage, resource_limits: limits} = resources;\n return [\n {\n caption: 'CPU',\n usage: {\n text: formatNumber(usage?.cpu) + ' / ' + formatNumber(limits?.cpu),\n progress: limits?.cpu ? (usage.cpu / limits.cpu) * 100 : 0,\n },\n },\n {\n caption: 'Memory',\n usage: {\n text:\n formatBytes(usage?.user_memory) + ' / ' + formatBytes(limits?.user_memory),\n progress: limits?.user_memory\n ? (usage.user_memory / limits.user_memory) * 100\n : 0,\n },\n },\n {\n caption: 'GPU',\n usage: {\n text: formatNumber(usage?.gpu) + ' / ' + formatNumber(limits?.gpu),\n progress: limits?.gpu ? (usage.gpu / limits.gpu) * 100 : 0,\n },\n },\n ];\n }\n\n prepareDiskResources() {\n const {nodeAttributes, mediumList} = this.props;\n const diskResourcesPerMedium = [];\n if (nodeAttributes && mediumList) {\n const {\n available_space_per_medium: availableSpacePerMedium,\n used_space_per_medium: usedSpacePerMedium,\n } = nodeAttributes;\n\n forEach_(mediumList, (medium) => {\n const available = availableSpacePerMedium[medium];\n const used = usedSpacePerMedium[medium];\n\n if (available > 0 || used > 0) {\n const total = available + used;\n const caption = hammer.format['ReadableField'](medium);\n const progressText =\n hammer.format['Bytes'](used) + ' / ' + hammer.format['Bytes'](total);\n const progressValue = (used / total) * 100;\n\n diskResourcesPerMedium.push({\n caption: caption,\n show: true,\n usage: {\n text: progressText,\n progress: progressValue,\n },\n });\n }\n });\n }\n return diskResourcesPerMedium;\n }\n\n renderFullNodesMessage() {\n const {nodeAttributes} = this.props;\n if (!nodeAttributes) {\n return null;\n }\n\n const {full_node_count: fullNodeCount, online_node_count: onlineNodeCount} = nodeAttributes;\n const fullNodePercentage = (fullNodeCount / onlineNodeCount) * 100;\n\n if (!fullNodePercentage) {\n return null;\n }\n return (\n <Block\n type={fullNodePercentage >= 90 ? 'error' : 'alert'}\n message={`${fullNodePercentage.toFixed(2)} % (${fullNodeCount}) of nodes are full.`}\n />\n );\n }\n\n renderResources(entries) {\n return entries.map(({caption, usage}) => {\n return (\n <div key={caption} className={b('resource')}>\n <div className={b('resources-caption')}>{caption}</div>\n <div className={b('resources-progress')}>\n <Progress theme={'success'} text={usage.text} value={usage.progress} />\n </div>\n </div>\n );\n });\n }\n\n renderImpl() {\n const headingCN = b('resources-heading');\n const resources = this.prepareResources();\n const diskResources = this.prepareDiskResources();\n const showResources = resources.length > 0;\n const showDiskResources = diskResources.length > 0;\n const diskResourcesCN = b('resources-heading', b('resources-meters-disk'));\n\n return (\n <div className={b('resources')}>\n <div className={b('resources-message')}>{this.renderFullNodesMessage()}</div>\n <div className={b('resources-meters')}>\n {showResources && [\n <div key=\"resources\" className={headingCN}>\n Resources\n </div>,\n this.renderResources(resources),\n ]}\n {showDiskResources && [\n <div key=\"disk-resources\" className={diskResourcesCN}>\n Disk space\n </div>,\n this.renderResources(diskResources),\n ]}\n </div>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <ResourcesUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {resources, nodeAttributes} = state.system.resources;\n return {\n resources,\n nodeAttributes,\n mediumList: getMediumList(state),\n };\n}\n\nfunction ResourcesUpdater() {\n const dispatch = useThunkDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemResources()).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nexport default connect(mapStateToProps)(Resources);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport {setSetting} from '../../store/actions/settings';\nimport {NAMESPACES, SettingName} from '../../../shared/constants/settings';\nimport RadioButton from '../../components/RadioButton/RadioButton';\nimport {mastersRadioButtonItems} from '../../constants/system/masters';\nimport {getMastersHostType} from '../../store/selectors/settings';\n\nVisibleHostTypeRadioButton.propTypes = {\n hostType: PropTypes.string,\n setSetting: PropTypes.func,\n};\n\nfunction VisibleHostTypeRadioButton({hostType, setSetting, className}) {\n const onChange = React.useCallback(\n (evt) => {\n setSetting(SettingName.SYSTEM.MASTERS_HOST_TYPE, NAMESPACES.SYSTEM, evt.target.value);\n },\n [setSetting],\n );\n\n return (\n <RadioButton\n name=\"master-host-type\"\n onChange={onChange}\n value={hostType}\n items={mastersRadioButtonItems}\n size=\"s\"\n className={className}\n />\n );\n}\n\nconst mapStateToProps = (state) => {\n return {\n hostType: getMastersHostType(state),\n };\n};\n\nconst mapDispatchToProps = {\n setSetting,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(VisibleHostTypeRadioButton);\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport block from 'bem-cn-lite';\nimport qs from 'qs';\nimport map_ from 'lodash/map';\n\nimport Link from '../../../components/Link/Link';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\n\nimport {formatCounterName} from '../../../utils/index';\n\nimport './SystemCounters.scss';\n\nconst b = block('system');\n\nexport type SystemCountersProps<Flags extends string> = {\n cluster?: string;\n tab?: string;\n\n counters?: {\n states?: Partial<Record<string, number | undefined>>;\n flags?: Partial<Record<Flags, number | undefined>>;\n total?: number;\n };\n stateThemeMappings?: Partial<Record<string, SystemCounterTheme>>;\n renderLinks?: boolean;\n\n makeUrl?: (\n params: Partial<Omit<Record<Flags, 'enabled'>, 'state'>> | {state?: string},\n ) => string | undefined;\n};\n\nexport type SystemCounterTheme = 'warning' | 'danger' | undefined;\n\nclass SystemCounters<Flags extends string> extends React.Component<SystemCountersProps<Flags>> {\n static defaultProps = {\n stateThemeMappings: {},\n renderLinks: true,\n };\n\n prepareUrl(params: Record<string, string>) {\n const {makeUrl, cluster, tab} = this.props;\n const isEmptyParams = Object.keys(params).length === 0;\n\n if (makeUrl) {\n return makeUrl(params);\n }\n\n return `/${cluster}/components/${tab}` + (isEmptyParams ? '' : `?${qs.stringify(params)}`);\n }\n\n renderCounter({\n caption,\n params,\n value,\n theme,\n }: {\n caption: string;\n params: Record<string, string>;\n value?: number;\n theme?: SystemCounterTheme;\n }) {\n if (isNaN(value!)) {\n return null;\n }\n\n const {renderLinks} = this.props;\n\n const url = renderLinks ? this.prepareUrl(params) : undefined;\n\n const content = (\n <>\n {caption} \n <strong>{value}</strong>\n </>\n );\n\n return url ? (\n <Link theme=\"primary\" className={b('counter', {theme})} url={url}>\n {content}\n </Link>\n ) : (\n <span className={b('counter', {theme})}>{content}</span>\n );\n }\n\n renderCountersFlags() {\n const {counters, stateThemeMappings} = this.props;\n\n return map_(counters?.flags, (flag, key) => {\n if (!flag) {\n return null;\n }\n\n const flagName = key as Flags;\n\n return (\n <li key={flagName} className={'counter_flag'}>\n {this.renderCounter({\n caption: formatCounterName(flagName),\n params: {[flagName]: 'enabled'},\n theme: stateThemeMappings?.[flagName],\n value: flag,\n })}\n </li>\n );\n });\n }\n\n renderCountersStates() {\n const {counters, stateThemeMappings} = this.props;\n\n return map_(counters?.states, (state, stateName) => {\n return (\n <li key={stateName} className={'counter_state'}>\n {this.renderCounter({\n caption: formatCounterName(stateName),\n params: {state: stateName},\n theme: stateThemeMappings?.[stateName],\n value: state,\n })}\n </li>\n );\n });\n }\n\n renderCounterTotal() {\n const {counters} = this.props;\n\n return (\n <li key={'total'} className={'counter_total'}>\n {this.renderCounter({\n caption: formatCounterName('total'),\n params: {},\n value: counters?.total,\n })}\n </li>\n );\n }\n\n render() {\n const countersFlags = this.renderCountersFlags();\n const countersStates = this.renderCountersStates();\n const counterTotal = this.renderCounterTotal();\n\n return (\n <div className={b('heading-overview-counters')}>\n <ul className={block('elements-list')({type: 'unstyled'})}>\n {countersFlags}\n {countersStates}\n {counterTotal}\n </ul>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n return {\n cluster: getCluster(state),\n };\n};\n\nexport default connect(mapStateToProps)(SystemCounters);\n","import React, {FC} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport Label, {LabelTheme} from '../../../components/Label/Label';\n\nexport type Props = {\n labels: {text: string; theme: LabelTheme}[];\n};\n\nexport const SystemStateLabels: FC<Props> = ({labels}) => {\n if (!labels.length) return undefined;\n\n return (\n <Flex gap={1}>\n {labels.map(({text, theme}, index) => (\n <Label key={`${text}_${index}`} theme={theme} text={text} />\n ))}\n </Flex>\n );\n};\n","import block from 'bem-cn-lite';\nimport React from 'react';\n\nimport {Progress, ProgressProps} from '@gravity-ui/uikit';\nimport SystemCounters, {SystemCountersProps} from '../SystemCounters/SystemCounters';\n\nimport {computeEffectiveStateProgress} from '../../../utils';\n\nimport './SystemStateOverview.scss';\nimport {SystemStateLabels, Props as SystemStateLabelsProps} from './SystemStateLabels';\n\nconst b = block('system');\n\nexport type SystemStateOverviewProps<Flags extends string> = Partial<SystemStateLabelsProps> &\n SystemCountersProps<Flags> & {\n stateOverview?: ProgressProps;\n };\n\nexport default class SystemStateOverview<Flags extends string> extends React.Component<\n SystemStateOverviewProps<Flags>\n> {\n render() {\n const {stateOverview: _x, labels, ...rest} = this.props;\n if (!this.props.counters) {\n return null;\n }\n\n const {\n stateOverview = {\n value: 100,\n view: 'thin',\n stack: computeEffectiveStateProgress(this.props.counters),\n },\n } = this.props;\n\n return (\n <div className={b('heading-overview')}>\n {labels && <SystemStateLabels labels={labels} />}\n <SystemCounters {...rest} />\n <div className={b('heading-overview-states')}>\n <Progress {...stateOverview} size=\"s\" />\n </div>\n </div>\n );\n }\n}\n","import React, {useRef, useState} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\n// @ts-ignore\nimport format from '../../../common/hammer/format';\nimport {getStateForHost, loadMasters} from '../../../store/actions/system/masters';\nimport {useDispatch} from 'react-redux';\nimport moment from 'moment';\nimport './SwitchLeaderShortInfo.scss';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nconst block = cn('switch-leader-short-info');\n\ninterface Props {\n newLeaderPath: string;\n}\n\nexport function SwitchLeaderShortInfo(props: Props) {\n const startTime = useRef(moment.now());\n const [currentTime, setCurrentTime] = useState<any>(moment());\n const [finishTime, setFinishTime] = useState<any>();\n const dispatch = useDispatch();\n\n const updateCurrentTime = React.useCallback(() => {\n if (!finishTime) {\n setCurrentTime(moment());\n }\n }, [finishTime]);\n useUpdater(updateCurrentTime, {timeout: 1000, forceAutoRefresh: true});\n\n const updateFn = React.useCallback(async () => {\n if (finishTime) {\n return;\n }\n\n const hostState = await getStateForHost(props.newLeaderPath);\n\n if (hostState === 'leading') {\n setFinishTime(moment());\n dispatch(loadMasters());\n }\n }, [props.newLeaderPath, finishTime, dispatch]);\n useUpdater(updateFn, {timeout: 3000, forceAutoRefresh: true});\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n {\n key: 'Duration',\n value: format.TimeDuration(\n (finishTime || currentTime).diff(startTime.current),\n ),\n },\n {\n key: 'Status',\n value: (\n <SwitchLeaderShortInfoStatus\n state={finishTime ? 'complete' : 'in progress'}\n />\n ),\n },\n ]}\n />\n </div>\n );\n}\n\nfunction SwitchLeaderShortInfoStatus({state}: {state: string}) {\n return <span className={block('state', {state})}>{state}</span>;\n}\n","import React, {useState} from 'react';\nimport Icon from '../../../components/Icon/Icon';\nimport Button from '../../../components/Button/Button';\nimport {YTApiId, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {SwitchLeaderShortInfo} from '../../../pages/components/SwitchLeaderShortInfo/SwitchLeaderShortInfo';\nimport {AppStoreProvider} from '../../../containers/App/AppStoreProvider';\n\ntype SwitchLeaderDialogProps = {\n cancel: () => void;\n confirm: (newLeader: string) => Promise<void>;\n visible: boolean;\n cellId: string;\n hosts: Array<{getPath: () => string; state: 'leading'}>;\n};\n\ntype FormValues = {\n leading_primary_master: string[];\n};\n\nconst SwitchLeaderDialog = (props: SwitchLeaderDialogProps) => {\n const [error, setError] = useState(undefined);\n\n const selectLeadingHostOptions = props.hosts.map((host) => {\n const path = host.getPath();\n return {\n value: path,\n content: path.split('/').pop(),\n };\n });\n\n const leader = props.hosts.find(({state}) => state === 'leading');\n const leaderPath = leader?.getPath();\n\n return (\n <YTDFDialog<FormValues>\n visible={props.visible}\n headerProps={{\n title: `Switch leader for ${props.cellId}`,\n }}\n initialValues={{\n leading_primary_master: leaderPath ? [leaderPath] : [],\n }}\n fields={[\n {\n type: 'select',\n caption: ' Leading primary master',\n name: 'leading_primary_master',\n required: true,\n extras: {\n options: selectLeadingHostOptions,\n placeholder: 'New leading primary master',\n width: 'max',\n filterable: true,\n },\n },\n ...makeErrorFields([error]),\n ]}\n footerProps={{\n textApply: 'Switch leader',\n }}\n onAdd={(form) => {\n const {leading_primary_master} = form.getState().values;\n\n return props\n .confirm(leading_primary_master[0])\n .then(() => {\n setError(undefined);\n })\n .catch((e) => {\n setError(e);\n throw e;\n });\n }}\n onClose={props.cancel}\n pristineSubmittable={true}\n />\n );\n};\n\ntype SwitchLeaderButtonProps = {\n className: string;\n cellId: string;\n hosts: Array<{getPath: () => string; state: 'leading'}>;\n};\n\nexport const SwitchLeaderButton = ({cellId, hosts, className}: SwitchLeaderButtonProps) => {\n const [visible, setVisible] = useState(false);\n\n const handleClick = () => {\n setVisible(true);\n };\n\n const handleConfirm = async (newLeaderPath: string) => {\n const leaderAddress = newLeaderPath.split('/').pop();\n const switchLeader = () => {\n return ytApiV4Id.switchLeader(YTApiId.switchLeader, {\n cell_id: cellId,\n new_leader_address: leaderAddress,\n });\n };\n\n wrapApiPromiseByToaster(switchLeader(), {\n toasterName: 'switch-leader',\n successContent() {\n return (\n <AppStoreProvider>\n <SwitchLeaderShortInfo newLeaderPath={newLeaderPath} />\n </AppStoreProvider>\n );\n },\n successTitle: 'Leader switch initiated',\n autoHide: false,\n });\n\n setVisible(false);\n };\n\n const handleCancel = () => {\n setVisible(false);\n };\n\n return (\n <React.Fragment>\n <Button\n className={className}\n view=\"flat-secondary\"\n onClick={handleClick}\n withTooltip\n tooltipProps={{content: 'Switch leader'}}\n >\n <Icon awesome=\"crowndiamond\" />\n </Button>\n {visible && (\n <SwitchLeaderDialog\n visible\n cellId={cellId}\n hosts={hosts}\n confirm={handleConfirm}\n cancel={handleCancel}\n />\n )}\n </React.Fragment>\n );\n};\n","import block from 'bem-cn-lite';\nimport React from 'react';\n\nimport './NodeQuad.scss';\nconst b = block('node-quad');\n\nexport type NodeQuadTheme =\n | 'online'\n | 'banned'\n | 'offline'\n | 'following'\n | 'mixed'\n | 'registered'\n | 'unregistered'\n | 'nonvoting'\n | 'unknown'\n | 'other';\n\ninterface Props {\n theme?: NodeQuadTheme;\n children?: string;\n banned?: boolean;\n alerts?: boolean;\n decommissioned?: boolean;\n full?: boolean;\n}\n\nexport default function NodeQuad({\n theme = 'unknown',\n children = '',\n banned,\n alerts,\n decommissioned,\n full,\n}: Props) {\n const text = (alerts && 'A') || (decommissioned && 'D') || (full && 'F') || undefined;\n const bannedOrTheme = banned ? ('banned' as const) : theme;\n\n const effectiveTheme = children ? `${bannedOrTheme}-letter` : theme;\n return <div className={b({theme: effectiveTheme, full})}>{text}</div>;\n}\n","const SvgReadOnlyIcon = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"#666\" d=\"M8.705 5.562c-.032-.031-.078-.063-.125-.063a.2.2 0 0 0-.14.063L4.206 9.794l-.203 1.78c-.016.125.015.235.11.313.077.093.187.125.312.11l1.78-.204 4.232-4.232a.2.2 0 0 0 .063-.14c0-.048-.031-.094-.063-.126zm3.076-.406c.14.156.219.328.219.53 0 .22-.078.391-.219.532l-.718.718a.2.2 0 0 1-.14.063c-.063 0-.094-.016-.126-.063L9.064 5.203C9.017 5.17 9 5.14 9 5.078a.2.2 0 0 1 .063-.141l.718-.718A.72.72 0 0 1 10.313 4c.203 0 .375.078.531.219z\" /><path fill=\"#666\" d=\"m8 6 1.5-1.5 2 2L10 8z\" /><path fill=\"#F88\" d=\"M8 1.11c1.29 0 2.52.35 3.633.995a7.1 7.1 0 0 1 2.637 2.637 7.2 7.2 0 0 1 .996 3.633c0 1.318-.352 2.52-.996 3.633-.645 1.113-1.524 2.021-2.637 2.666A7.2 7.2 0 0 1 8 15.64a7.1 7.1 0 0 1-3.633-.967 7.3 7.3 0 0 1-2.666-2.666 7.1 7.1 0 0 1-.967-3.633c0-1.29.323-2.52.967-3.633.645-1.113 1.553-1.992 2.666-2.637C5.48 1.461 6.682 1.11 8 1.11m4.13 3.134A5.8 5.8 0 0 0 9.7 2.78a5.6 5.6 0 0 0-2.784-.175 5.7 5.7 0 0 0-2.52 1.171L12.6 11.98a5.7 5.7 0 0 0 1.172-2.52 5.6 5.6 0 0 0-.176-2.783 5.8 5.8 0 0 0-1.465-2.432m-8.26 8.262A5.56 5.56 0 0 0 6.27 14a5.74 5.74 0 0 0 2.813.146 5.54 5.54 0 0 0 2.52-1.171L3.4 4.77a5.53 5.53 0 0 0-1.171 2.52 5.74 5.74 0 0 0 .146 2.813 5.56 5.56 0 0 0 1.494 2.402\" /></svg>;\nexport default SvgReadOnlyIcon;","const SvgWarmupIcon = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\" {...props}><path fill=\"#F9A525\" stroke=\"#F9A525\" d=\"M11.415 7.367C12.437 6.45 13 5.61 13 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C9.548 7.55 9 8.39 9 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227ZM7.415 7.367C8.437 6.45 9 5.61 9 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C5.548 7.55 5 8.39 5 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227ZM3.415 7.367C4.437 6.45 5 5.61 5 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C1.548 7.55 1 8.39 1 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227Z\" /></svg>;\nexport default SvgWarmupIcon;","import {makeRegexpFromSettings} from '../../../../shared/utils';\nimport {uiSettings} from '../../../config/ui-settings';\n\nconst reShortNameSystemPage = makeRegexpFromSettings(uiSettings.reShortNameSystemPage);\n\nexport const makeShortSystemAddress = (address: string): string | undefined => {\n const res = reShortNameSystemPage?.exec(address);\n return res?.groups?.shortname;\n};\n","import React, {FC, useState} from 'react';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport PencilIcon from '@gravity-ui/icons/svgs/pencil.svg';\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {useToggle} from 'react-use';\n\ntype Props = {\n className?: string;\n path: string | null;\n title?: string;\n host?: string;\n container?: string;\n maintenance: boolean;\n maintenanceMessage: string;\n onMaintenanceChange: (data: {\n path: string;\n message: string;\n maintenance: boolean;\n }) => Promise<void>;\n};\n\ntype FormData = {host: string; container: string; maintenance: string; message: string};\n\nexport const ChangeMaintenanceButton: FC<Props> = ({\n className,\n path,\n title,\n host,\n container,\n maintenance,\n maintenanceMessage,\n onMaintenanceChange,\n}) => {\n const [error, setError] = useState<Error | undefined>(undefined);\n const [visible, toggleVisible] = useToggle(false);\n\n if (!path) return;\n\n const handleMaintenanceChange = async (form: FormApi<FormData>) => {\n const {values} = form.getState();\n try {\n await onMaintenanceChange({\n path,\n message: values.message,\n maintenance: values.maintenance === 'enabled',\n });\n } catch (e) {\n setError(e as Error);\n throw e as Error;\n }\n };\n\n const handleOnClose = () => {\n toggleVisible();\n setError(undefined);\n };\n\n return (\n <>\n <YTDFDialog<FormData>\n pristineSubmittable\n headerProps={{\n title,\n }}\n initialValues={{\n host,\n container,\n maintenance: maintenance ? 'enabled' : 'disabled',\n message: maintenanceMessage,\n }}\n fields={[\n {\n name: 'host',\n type: 'plain',\n caption: 'Host',\n },\n {\n name: 'container',\n type: 'plain',\n caption: 'Container',\n },\n {\n name: 'maintenance',\n type: 'radio',\n caption: 'Maintenance',\n extras: {\n options: [\n {value: 'enabled', label: 'Enabled'},\n {value: 'disabled', label: 'Disabled'},\n ],\n },\n },\n {\n name: 'message',\n type: 'textarea',\n caption: 'Maintenance message',\n extras: (values: FormData) => ({\n placeholder: 'Enter maintenance message',\n disabled: values.maintenance === 'disabled',\n }),\n },\n ...makeErrorFields([error]),\n ]}\n visible={visible}\n onAdd={handleMaintenanceChange}\n onClose={handleOnClose}\n />\n <Button view=\"flat-secondary\" className={className} onClick={toggleVisible}>\n <Icon data={PencilIcon} size={14} />\n </Button>\n </>\n );\n};\n","import React, {FC, useCallback} from 'react';\nimport hammer from '../../../common/hammer';\nimport NodeQuad, {NodeQuadTheme} from '../NodeQuad/NodeQuad';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport Icon from '../../../components/Icon/Icon';\nimport {useDispatch} from 'react-redux';\nimport ReadOnlyIcon from '../../../assets/img/svg/read-only-icon.svg';\nimport WarmUpIcon from '../../../assets/img/svg/warmup-icon.svg';\nimport {makeShortSystemAddress} from '../helpers/makeShortSystemAddress';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {ChangeMaintenanceButton} from './ChangeMaintenanceButton';\nimport block from 'bem-cn-lite';\nimport {MasterInstance} from '../../../store/selectors/system/masters';\nimport './MasterGroup.scss';\nimport {changeMasterMaintenance} from '../../../store/actions/system/masters';\nimport {CypressNode} from '../../../../shared/yt-types';\n\nconst b = block('master-group');\n\nconst instanceStateToTheme: Record<string, NodeQuadTheme> = {\n active: 'online',\n connected: 'online',\n leading: 'online',\n disconnected: 'banned',\n following: 'following',\n follower_recovery: 'banned',\n leader_recovery: 'banned',\n standby: 'banned',\n elections: 'offline',\n stopped: 'offline',\n unknown: 'offline',\n online: 'online',\n offline: 'offline',\n};\n\ntype Props = {\n instance: MasterInstance;\n hostType: string;\n allowVoting?: boolean;\n allowService?: boolean;\n};\n\nexport const Instance: FC<Props> = ({instance, hostType, allowVoting, allowService}) => {\n const dispatch = useDispatch();\n const {state, $address, $physicalAddress} = instance;\n const attributes = instance.$attributes as CypressNode<\n {read_only: boolean; voting: boolean; warming_up: boolean},\n unknown\n >['$attributes'];\n const address = hostType === 'host' ? $address : $physicalAddress;\n const maintenance = instance.getMaintenance();\n const maintenanceMessage = maintenance ? instance.getMaintenanceMessage() || 'Maintenance' : '';\n const {voting} = attributes ?? {};\n // do not use `!voting` cause `voting === undefined` is the same as `voting === true`\n const denyVoting = allowVoting && voting === false;\n const theme = denyVoting && state === 'following' ? 'nonvoting' : instanceStateToTheme[state!];\n const addressWithoutPort = hammer.format['Address'](address);\n\n const handleOnMaintenanceChange = useCallback(\n async (data: {path: string; maintenance: boolean; message: string}) => {\n await dispatch(changeMasterMaintenance(data));\n },\n [dispatch],\n );\n\n const shortName = makeShortSystemAddress(addressWithoutPort) || addressWithoutPort;\n\n return (\n <>\n <div className={b('availability')}>\n <NodeQuad theme={theme} />\n </div>\n <div className={b('role')}>\n <span>{hammer.format['ReadableField'](state ? state : 'unknown')}</span>\n </div>\n <div className={b('icon')}>\n {maintenanceMessage && (\n <Tooltip content={<span>{maintenanceMessage}</span>}>\n <Icon className={b('icon-maintenance')} awesome=\"digging\" face=\"solid\" />\n </Tooltip>\n )}\n {attributes?.read_only && (\n <span className={b('icon-glyph')} title=\"Read only\">\n <ReadOnlyIcon width={14} height={14} />\n </span>\n )}\n {attributes?.warming_up && (\n <span className={b('icon-glyph')} title=\"Warming up\">\n <WarmUpIcon width={14} height={14} />\n </span>\n )}\n </div>\n <div className={b('host')}>\n <Tooltip content={addressWithoutPort}>\n <div className={b('host-name')}>{shortName}</div>\n </Tooltip>\n <Flex gap={1}>\n <span className={b('host-btn')}>\n <ClipboardButton view=\"flat-secondary\" text={address} />\n </span>\n {allowService && (\n <ChangeMaintenanceButton\n className={b('host-btn')}\n path={instance.getPath()}\n title={`Edit ${addressWithoutPort}`}\n host={$physicalAddress}\n container={$address}\n maintenance={maintenance}\n maintenanceMessage={maintenanceMessage}\n onMaintenanceChange={handleOnMaintenanceChange}\n />\n )}\n {\n <Text className={b('nonvoting', {show: denyVoting})} color=\"secondary\">\n [nonvoting]\n </Text>\n }\n </Flex>\n </div>\n </>\n );\n};\n","import React, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\nimport hammer from '../../../common/hammer';\nimport {getMastersHostType} from '../../../store/selectors/settings';\nimport Icon from '../../../components/Icon/Icon';\nimport {SwitchLeaderButton} from './SwitchLeader';\nimport {Instance} from './Instance';\n\nimport map_ from 'lodash/map';\nimport './MasterGroup.scss';\n\nconst b = block('master-group');\n\nclass MasterGroup extends Component {\n static propTypes = {\n // from parent\n className: PropTypes.string,\n instances: PropTypes.arrayOf(\n PropTypes.shape({\n state: PropTypes.string,\n $address: PropTypes.string,\n $physicalAddress: PropTypes.string,\n }),\n ),\n cellTag: PropTypes.number,\n quorum: PropTypes.shape({\n status: PropTypes.string,\n leaderCommitedVersion: PropTypes.string,\n }),\n leader: PropTypes.shape({\n state: PropTypes.string,\n $address: PropTypes.string,\n }),\n // from connect\n hostType: PropTypes.oneOf(['host', 'physicalHost']),\n gridRowStart: PropTypes.bool,\n allowVoting: PropTypes.bool,\n allowService: PropTypes.bool,\n };\n\n renderQuorum() {\n const {quorum, cellTag, cellId, instances} = this.props;\n const status = quorum ? quorum.status : 'unknown';\n const quorumTitle = quorum && `Leader committed version: ${quorum.leaderCommitedVersion}`;\n const cellTitle = `Cell tag: ${cellTag}`;\n const icons = {\n quorum: 'check-circle',\n 'weak-quorum': 'exclamation-circle',\n 'no-quorum': 'exclamation-circle',\n unknown: 'question-circle',\n };\n const states = {\n quorum: 'present',\n 'weak-quorum': 'weak',\n 'no-quorum': 'missing',\n unknown: 'unknown',\n };\n\n return (\n <Fragment>\n {quorum && (\n <Fragment>\n <div\n className={b('quorum-status', {\n state: states[status],\n })}\n >\n <Icon face=\"solid\" awesome={icons[status]} />\n </div>\n <div className={b('quorum-label')}>\n {hammer.format['Readable'](status, {\n delimiter: '-',\n })}\n </div>\n\n <div className={b('icon')} title={quorumTitle}>\n <Icon className={b('icon-glyph')} face=\"\" awesome=\"code-branch\" />\n </div>\n </Fragment>\n )}\n\n <div className={b('host', {quorum: true})}>\n <div className={b('quorum-version')} title={quorumTitle}>\n <span>{quorum && quorum.leaderCommitedVersion}</span>\n </div>\n <div className={b('quorum-cell')} title={cellTitle}>\n {cellTag && <Icon className={b('icon-glyph')} face=\"solid\" awesome=\"tag\" />}\n {hammer.format['Hex'](cellTag)}\n {cellId && <SwitchLeaderButton cellId={cellId} hosts={instances} />}\n </div>\n </div>\n </Fragment>\n );\n }\n\n render() {\n const {className, instances, hostType, gridRowStart, allowVoting, allowService} =\n this.props;\n\n return (\n <div className={b('group', {'grid-row-start': gridRowStart}, className)}>\n {this.renderQuorum()}\n {map_(instances, (instance) => {\n return (\n <Instance\n instance={instance}\n key={instance.$address}\n hostType={hostType}\n allowVoting={allowVoting}\n allowService={allowService}\n />\n );\n })}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const hostType = getMastersHostType(state);\n return {hostType};\n};\n\nexport default connect(mapStateToProps)(MasterGroup);\n","import React, {FC} from 'react';\nimport {useSelector} from 'react-redux';\nimport {selectMasterAlerts} from '../../../store/selectors/system/masters';\nimport Alert from '../../../components/Alert/Alert';\n\nexport const SystemAlert: FC<{className?: string}> = ({className}) => {\n const alerts = useSelector(selectMasterAlerts);\n\n if (!alerts.length) return;\n\n return (\n <div className={className}>\n {alerts.map((alert, id) => (\n <Alert key={alert.message + id} error={alert} />\n ))}\n </div>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {HEADER_HEIGHT} from '../../constants';\n\nimport './StickyContainer.scss';\n\nconst block = cn('yt-sticky-container');\n\nexport function StickyContainer({\n topOffset = HEADER_HEIGHT,\n children,\n}: {\n topOffset?: number;\n children: (params: {sticky: boolean; topStickyClassName?: string}) => React.ReactNode;\n}) {\n const [sticky, setSticky] = React.useState(false);\n const [element, setElement] = React.useState<HTMLDivElement | null>(null);\n\n const observer = React.useMemo(() => {\n return new IntersectionObserver(\n (entries) => {\n if (entries[0].intersectionRatio === 0) {\n setSticky(true);\n } else if (entries[0].intersectionRatio === 1) {\n setSticky(false);\n }\n },\n {threshold: [0, 1], rootMargin: `${-topOffset ?? 0}px 0px 0px 0px`},\n );\n }, [topOffset]);\n\n React.useEffect(() => {\n if (element) {\n observer.observe(element);\n }\n return () => {\n if (element) {\n observer.unobserve(element);\n }\n };\n }, [element]);\n\n const onRef = React.useCallback((div: HTMLDivElement | null) => {\n setElement(div);\n }, []);\n\n return (\n <div className={block()}>\n <div className={block('top')} ref={onRef} />\n {children({\n sticky,\n topStickyClassName: sticky ? block('sticky', {top: true}) : undefined,\n })}\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport {connect, useDispatch} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport VisibleHostTypeRadioButton from '../../../pages/system/VisibleHostTypeRadioButton';\nimport {sortStateProgress} from '../../../utils';\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\nimport MasterGroup from './MasterGroup';\n\nimport {loadMasters} from '../../../store/actions/system/masters';\nimport {getSettingsSystemMastersCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemMastersCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport './Masters.scss';\nimport {SystemAlert} from './SystemAlert';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nconst b = block('system-master');\nconst headingCN = block('elements-heading')({size: 's'});\n\nfunction computeStateProgress(counters) {\n const total = counters.total;\n\n return sortStateProgress(\n map_(counters.states, (count, state) => {\n return {\n value: total && (count / total) * 100,\n title: 'State: ' + state,\n theme:\n {\n quorum: 'success',\n 'weak-quorum': 'warning',\n 'no-quorum': 'danger',\n }[state] || 'default',\n };\n }),\n );\n}\n\nclass Masters extends Component {\n static propTypes = {\n // from connect\n alerts: PropTypes.arrayOf(PropTypes.object),\n counters: PropTypes.shape({\n flags: PropTypes.object,\n states: PropTypes.object,\n }).isRequired,\n initialized: PropTypes.bool.isRequired,\n primary: PropTypes.shape(MasterGroup.propTypes).isRequired,\n secondary: PropTypes.arrayOf(PropTypes.shape(MasterGroup.propTypes)),\n providers: PropTypes.shape(MasterGroup.propTypes).isRequired,\n discovery: PropTypes.shape(MasterGroup.propTypes).isRequired,\n };\n\n onToggle = () => {\n const {setSettingsSystemMastersCollapsed, collapsed: prevCollapsed} = this.props;\n setSettingsSystemMastersCollapsed(!prevCollapsed);\n };\n\n mastersFitIntoSection() {\n const {secondary, providers, discovery, queueAgents} = this.props;\n\n let groupsCount = 1; // for primary masters;\n groupsCount += secondary?.length || 0;\n groupsCount += providers?.instances?.length ? 1 : 0;\n groupsCount += discovery?.instances?.length ? 1 : 0;\n groupsCount += queueAgents?.instances?.length ? 1 : 0;\n\n return groupsCount <= 3;\n }\n\n renderMastersGroups = (masters, gridRowStart, {allowVoting} = {allowVoting: false}) =>\n map_(masters, (master) => (\n <MasterGroup\n key={master.cellTag}\n {...master}\n gridRowStart={gridRowStart}\n allowVoting={allowVoting}\n allowService\n />\n ));\n\n renderMasterTypeSwitcher() {\n return <VisibleHostTypeRadioButton className={b('container-host-radio')} />;\n }\n\n renderAlerts() {\n return <SystemAlert className={b('alerts')} />;\n }\n\n renderContent() {\n const {primary, secondary, providers, discovery, queueAgents} = this.props;\n\n const fitIntoSection = this.mastersFitIntoSection();\n\n const secondaryGroups = this.renderMastersGroups(secondary, fitIntoSection, {\n allowVoting: true,\n });\n\n return fitIntoSection ? (\n <div className={b('all-masters')}>\n <div className={headingCN}>Primary Masters</div>\n <MasterGroup\n className={b('primary-master')}\n {...primary}\n allowVoting\n allowService\n />\n {Boolean(secondary?.length) && (\n <React.Fragment>\n <div className={headingCN}>Secondary Masters</div>\n {secondaryGroups}\n </React.Fragment>\n )}\n {Boolean(providers?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Timestamp providers</div>\n <MasterGroup\n {...providers}\n className={b('timestamp-providers')}\n gridRowStart\n allowVoting\n allowService\n />\n </React.Fragment>\n )}\n {Boolean(discovery?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Discovery servers</div>\n <MasterGroup\n {...discovery}\n className={b('discovery-servers')}\n gridRowStart\n />\n </React.Fragment>\n )}\n {Boolean(queueAgents?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Queue agents</div>\n <MasterGroup {...queueAgents} allowService />\n </React.Fragment>\n )}\n </div>\n ) : (\n <div>\n <div className={headingCN}>Primary Masters</div>\n <MasterGroup\n className={b('primary-master')}\n {...primary}\n allowVoting\n allowService\n />\n {Boolean(secondary?.length) && (\n <React.Fragment>\n <div className={headingCN}>Secondary Masters</div>\n <div className={b('secondary-masters')}>{secondaryGroups}</div>\n </React.Fragment>\n )}\n <div className={b('flex')}>\n {Boolean(providers?.instances?.length) &&\n this.renderSection('providers', 'Timestamp providers', providers, {\n allowVoting: true,\n allowService: true,\n })}\n {Boolean(discovery?.instances?.length) &&\n this.renderSection('discovery', 'Discovery servers', discovery)}\n {Boolean(queueAgents?.instances?.length) &&\n this.renderSection('queueAgents', 'Queue agents', queueAgents, {\n allowService: true,\n })}\n </div>\n </div>\n );\n }\n\n renderSection(\n name,\n heading,\n data,\n {allowVoting, allowService} = {allowVoting: false, allowService: false},\n ) {\n return (\n <div className={b(name)}>\n <div className={headingCN}>{heading}</div>\n <div className={b(`${name}-hosts`)}>\n <MasterGroup {...data} allowVoting={allowVoting} allowService={allowService} />\n </div>\n </div>\n );\n }\n\n renderOverview() {\n const {counters} = this.props;\n\n const stateOverview = counters && {\n value: 100,\n view: 'thin',\n stack: computeStateProgress(counters),\n };\n const stateThemeMappings = {\n unavailable: 'danger',\n recovery: 'warning',\n 'no-quorum': 'danger',\n 'weak-quorum': 'warning',\n };\n const counterGroups = [\n ['recovery', 'unavailable'],\n ['primary', 'secondary'],\n ['no-quorum', 'weak-quorum', 'quorum'],\n ];\n\n const labels = [];\n const alertsCount = this.props.alerts.length;\n if (alertsCount > 0) {\n labels.push({\n text: `${alertsCount} alert${alertsCount > 1 ? 's' : ''}`,\n theme: 'warning',\n });\n }\n\n return (\n <>\n {this.renderMasterTypeSwitcher()}\n <SystemStateOverview\n tab=\"masters\"\n labels={labels}\n counters={counters}\n stateThemeMappings={stateThemeMappings}\n stateOverview={stateOverview}\n counterGroup={counterGroups}\n />\n </>\n );\n }\n\n renderImpl() {\n const {initialized, collapsibleSize, collapsed} = this.props;\n\n if (!initialized) {\n return null;\n }\n\n const content = this.renderContent();\n const overview = this.renderOverview();\n\n return (\n <StickyContainer>\n {({topStickyClassName}) => (\n <CollapsibleSectionStateLess\n name={'Masters'}\n headingClassName={b('heading', topStickyClassName)}\n overview={overview}\n collapsed={collapsed}\n onToggle={this.onToggle}\n size={collapsibleSize}\n >\n <div className={b('content')}>\n {this.renderAlerts()}\n {content}\n </div>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <MastersUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {secondary, primary, providers, discovery, queueAgents, counters, initialized, alerts} =\n state.system.masters;\n return {\n initialized,\n secondary,\n primary,\n providers,\n discovery,\n queueAgents,\n counters,\n alerts,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n collapsed: getSettingsSystemMastersCollapsed(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemMastersCollapsed,\n};\n\nfunction MastersUpdater() {\n const dispatch = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadMasters()).then(({isRetryFutile} = {}) => {\n if (isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Masters);\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {VisibleHostType} from '../../../constants/system/masters';\nimport {getMastersHostType} from '../../../store/selectors/settings';\n\nexport const getSystemSchedulers = (state) => state.system.schedulersAndAgents.schedulers;\nexport const getSystemSchedulerAlerts = (state) => state.system.schedulersAndAgents.schedulerAlerts;\nexport const getSystemAgents = (state) => state.system.schedulersAndAgents.agents;\nexport const getSystemAgentAlerts = (state) => state.system.schedulersAndAgents.agentAlerts;\nexport const getSystemSchedulerAndAgentVisibleHostType = (state) =>\n state.system.schedulersAndAgents.hostType;\n\nexport const getSystemSchedulersWithState = createSelector(\n [getSystemSchedulers, getMastersHostType],\n (schedulers, hostType) => {\n const path = hostType === VisibleHostType.host ? '' : '/@annotations/physical_host';\n return map_(schedulers, (sheduler) => {\n const res = connectedSchedulersToState(path, sheduler);\n return {\n ...res,\n host: ypath.getValue(sheduler.host, ''),\n physicalHost: ypath.getValue(sheduler.host, '/@annotations/physical_host'),\n maintenanceMessage: !ypath.getValue(sheduler, '/host/@maintenance')\n ? undefined\n : ypath.getValue(sheduler, '/host/@maintenance_message') || 'Maintenance',\n };\n });\n },\n);\n\nexport const getSystemAgentsWithState = createSelector(\n [getSystemAgents, getMastersHostType],\n (agents, hostType) => {\n const path = hostType === VisibleHostType.host ? '' : '/@annotations/physical_host';\n return map_(agents, (agent) => {\n const res = connectedAgentsToState(path, agent);\n return {\n ...res,\n host: ypath.getValue(agent.host, ''),\n physicalHost: ypath.getValue(agent.host, '/@annotations/physical_host'),\n maintenanceMessage: !ypath.getValue(agent, '/host/@maintenance')\n ? undefined\n : ypath.getValue(agent, '/host/@maintenance_message') || 'Maintenance',\n };\n });\n },\n);\n\nexport const getSystemSchedulerAndAgentCounters = createSelector(\n [getSystemSchedulersWithState, getSystemAgentsWithState],\n (schedulersWithState, agentsWithState) => {\n return {\n schedulers: extractSchedulersCounters(schedulersWithState),\n agents: extractAgentsCounters(agentsWithState),\n };\n },\n);\n\nexport const getSystemSchedulerAndAgentAlerts = createSelector(\n [getSystemSchedulerAlerts, getSystemAgentAlerts],\n (schedulerAlerts, agentAlerts) => {\n return {\n schedulers: schedulerAlerts,\n agents: agentAlerts,\n };\n },\n);\n\nfunction connectedSchedulersToState(path, connectedHost) {\n const {connected, host} = connectedHost;\n const state = typeof connected !== 'undefined' ? (connected ? 'active' : 'standby') : 'offline';\n return {address: ypath.getValue(host, path), state};\n}\n\nfunction connectedAgentsToState(path, connectedHost) {\n const {connected, host} = connectedHost;\n const state =\n typeof connected !== 'undefined' ? (connected ? 'connected' : 'disconnected') : 'offline';\n return {address: ypath.getValue(host, path), state};\n}\n\nconst numberOf = (statefulHosts, state) => {\n return reduce_(\n statefulHosts,\n (acc, host) => {\n return host.state === state ? acc + 1 : acc;\n },\n 0,\n );\n};\n\nfunction extractSchedulersCounters(statefulHosts) {\n return {\n total: statefulHosts.length,\n active: numberOf(statefulHosts, 'active'),\n standby: numberOf(statefulHosts, 'standby'),\n offline: numberOf(statefulHosts, 'offline'),\n };\n}\n\nfunction extractAgentsCounters(statefulHosts) {\n return {\n total: statefulHosts.length,\n connected: numberOf(statefulHosts, 'connected'),\n disconnected: numberOf(statefulHosts, 'disconnected'),\n offline: numberOf(statefulHosts, 'offline'),\n };\n}\n","import {Toaster} from '@gravity-ui/uikit';\n\nimport {getAgents, getSchedulers} from '../../../store/actions/system/schedulers';\nimport {FETCH_SCHEDULERS} from '../../../constants/system/schedulers';\nimport {isRetryFutile} from '../../../utils/index';\nimport {showErrorPopup} from '../../../utils/utils';\n\nconst toaster = new Toaster();\n\nexport function loadSchedulersAndAgents() {\n return (dispatch) => {\n dispatch({type: FETCH_SCHEDULERS.REQUEST});\n\n return Promise.all([getSchedulers(), getAgents()])\n .then(([{schedulers, schedulerAlerts}, {agents, agentAlerts}]) => {\n dispatch({\n type: FETCH_SCHEDULERS.SUCCESS,\n data: {\n schedulers,\n schedulerAlerts,\n agents,\n agentAlerts,\n },\n });\n })\n .catch((error) => {\n dispatch({\n type: FETCH_SCHEDULERS.FAILURE,\n data: {\n message: 'Could not load scheduler and agents.',\n error,\n },\n });\n\n const data = error?.response?.data || error;\n const {code, message} = data;\n\n toaster.add({\n name: 'load/system/schedulersAndAgents',\n autoHiding: false,\n theme: 'danger',\n content: `[code ${code}] ${message}`,\n title: 'Could not load Schedulers and Agents',\n actions: [{label: ' view', onClick: () => showErrorPopup(error)}],\n });\n\n if (isRetryFutile(error.code)) {\n return {isRetryFutile: true};\n }\n });\n };\n}\n","import forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport sortBy_ from 'lodash/sortBy';\n\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getBatchError, splitBatchResults} from '../../../utils/utils';\nimport {USE_SUPRESS_SYNC} from '../../../../shared/constants';\nimport {loadSchedulersAndAgents} from './index';\nimport {changeMaintenance} from './masters';\nimport {getCurrentUserName} from '../../selectors/global';\n\nexport function getSchedulers() {\n return ytApiV3Id\n .list(YTApiId.systemSchedulers, {\n path: '//sys/scheduler/instances',\n attributes: ['annotations', 'maintenance', 'maintenance_message'],\n ...USE_SUPRESS_SYNC,\n })\n .then((hosts) => {\n const ordered = sortBy_(hosts, (host) => {\n return ypath.getValue(host, '');\n });\n return getSchedulersState(ordered);\n });\n}\n\nfunction getSchedulersState(hosts) {\n const requests = [\n {\n command: 'get',\n parameters: {\n path: '//sys/scheduler/@alerts',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n ];\n\n forEach_(hosts, (host) => {\n const name = ypath.getValue(host, '');\n requests.push({\n command: 'get',\n parameters: {\n path: '//sys/scheduler/instances/' + name + '/orchid/scheduler/service/connected',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n });\n });\n\n return ytApiV3Id.executeBatch(YTApiId.systemSchedulersState, {requests}).then((data) => {\n const {outputs} = splitBatchResults(data, 'Failed to get scheduler states');\n const alerts = outputs[0];\n const connectedHosts = map_(hosts, (host, index) => {\n return {\n host: host,\n connected: outputs[index + 1],\n };\n });\n return {schedulers: connectedHosts, schedulerAlerts: alerts};\n });\n}\n\nfunction getAgentsState(hosts) {\n const requests = [];\n forEach_(hosts, (host) => {\n const basePath = '//sys/controller_agents/instances/' + ypath.getValue(host, '');\n\n requests.push(\n {\n command: 'get',\n parameters: {\n path: basePath + '/orchid/controller_agent/service/connected',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n {\n command: 'get',\n parameters: {\n path: basePath + '/@alerts',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n );\n });\n\n return ytApiV3Id.executeBatch(YTApiId.systemCAStates, {requests}).then((data) => {\n const {outputs} = splitBatchResults(data, 'Failed to get CA states');\n const agents = map_(hosts, (host, index) => ({\n host,\n connected: outputs[2 * index],\n }));\n const agentAlerts = reduce_(\n outputs,\n (alerts, value, index) => {\n if (index % 2) {\n return alerts.concat(value);\n }\n return alerts;\n },\n [],\n );\n\n return {agents, agentAlerts};\n });\n}\n\nexport function getAgents() {\n return ytApiV3Id\n .list(YTApiId.systemCAInstances, {\n path: '//sys/controller_agents/instances',\n attributes: ['annotations', 'maintenance', 'maintenance_message'],\n ...USE_SUPRESS_SYNC,\n })\n .then((hosts) => {\n hosts = hosts || [];\n const res = sortBy_(hosts, (host) => {\n return ypath.getValue(host, '');\n });\n return getAgentsState(res);\n });\n}\n\nexport const changeSchedulerMaintenance =\n ({path, maintenance, message}) =>\n async (dispatch, getSate) => {\n const login = getCurrentUserName(getSate());\n const result = await changeMaintenance({\n path,\n login,\n maintenance,\n message,\n });\n\n const error = getBatchError(result, 'Failed to update master maintenance');\n if (error) {\n throw error;\n }\n\n dispatch(loadSchedulersAndAgents());\n };\n","import React, {useCallback} from 'react';\n\nimport hammer from '../../../../common/hammer';\nimport block from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport Icon from '../../../../components/Icon/Icon';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport NodeQuad from '../../NodeQuad/NodeQuad';\n\nimport '../Schedulers.scss';\nimport {ChangeMaintenanceButton} from '../../Masters/ChangeMaintenanceButton';\nimport {makeShortSystemAddress} from '../../helpers/makeShortSystemAddress';\nimport {useDispatch} from 'react-redux';\nimport {changeSchedulerMaintenance} from '../../../../store/actions/system/schedulers';\n\nconst b = block('system');\n\nexport type SchedulerProps = {\n host: string;\n address: string;\n physicalHost: string;\n state: 'active' | 'connected' | 'standby' | 'disconnected' | 'offline';\n maintenanceMessage?: React.ReactNode;\n type: 'schedulers' | 'agents';\n};\n\nexport default function Scheduler({\n host,\n physicalHost,\n address,\n state,\n maintenanceMessage,\n type,\n}: SchedulerProps) {\n const dispatch = useDispatch();\n const theme = (\n {\n active: 'online',\n connected: 'online',\n standby: 'banned',\n disconnected: 'banned',\n offline: 'offline',\n } as const\n )[state];\n\n const formatedAddress = hammer.format['Address'](address);\n const path = `//sys/${type === 'schedulers' ? 'scheduler' : 'controller_agents'}/instances/${host}`;\n\n const handleOnMaintenanceChange = useCallback(\n async (data: {path: string; message: string; maintenance: boolean}) => {\n await dispatch(changeSchedulerMaintenance(data));\n },\n [dispatch],\n );\n\n return (\n <div className={b('scheduler')}>\n <NodeQuad theme={theme} />\n <div className={b('scheduler-status')}>{hammer.format['ReadableField'](state)}</div>\n <div className={b('maintenance')}>\n {maintenanceMessage && (\n <Tooltip content={maintenanceMessage}>\n <Icon awesome=\"digging\" face=\"solid\" />\n </Tooltip>\n )}\n </div>\n <div title={formatedAddress} className={b('scheduler-host')}>\n <Tooltip content={formatedAddress}>\n <div className={b('scheduler-host-address')}>\n {makeShortSystemAddress(formatedAddress) || formatedAddress}\n </div>\n </Tooltip>\n <div className={b('scheduler-host-btn')}>\n {host && <ClipboardButton view=\"flat-secondary\" text={host} />}\n </div>\n <ChangeMaintenanceButton\n className={b('scheduler-host-btn')}\n path={path}\n title={`Edit ${address}`}\n host={physicalHost}\n container={host}\n maintenance={Boolean(maintenanceMessage)}\n maintenanceMessage={maintenanceMessage as string}\n onMaintenanceChange={handleOnMaintenanceChange}\n />\n </div>\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect, useDispatch} from 'react-redux';\n\nimport map_ from 'lodash/map';\n\nimport block from 'bem-cn-lite';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\nimport VisibleHostTypeRadioButton from '../../../pages/system/VisibleHostTypeRadioButton';\nimport {\n getSystemAgentsWithState,\n getSystemSchedulerAndAgentAlerts,\n getSystemSchedulerAndAgentCounters,\n getSystemSchedulersWithState,\n} from '../../../store/selectors/system/schedulers';\nimport Scheduler from './Scheduler/Scheduler';\nimport Alert from '../../../components/Alert/Alert';\n\nimport {loadSchedulersAndAgents} from '../../../store/actions/system';\n\nimport prepareTags from './prepareTags';\n\nimport './Schedulers.scss';\nimport {getSettingsSystemSchedulersCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemSchedulersCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\n\nconst b = block('system');\nconst headingCN = block('elements-heading')({size: 's'});\n\nconst connectedHost = PropTypes.shape({\n host: PropTypes.string,\n connected: PropTypes.bool,\n});\n\nclass SchedulersAndAgents extends Component {\n static propTypes = {\n // from connect\n schedulers: PropTypes.arrayOf(connectedHost),\n agents: PropTypes.arrayOf(connectedHost),\n counters: PropTypes.shape({\n schedulers: PropTypes.object,\n agents: PropTypes.object,\n }),\n alerts: PropTypes.shape({\n schedulers: PropTypes.arrayOf(PropTypes.object),\n agents: PropTypes.arrayOf(PropTypes.object),\n }),\n };\n\n static defaultProps = {\n schedulers: [],\n agents: [],\n alerts: {\n schedulers: [],\n agents: [],\n },\n };\n\n renderHosts(name, connectedHosts) {\n return map_(\n connectedHosts,\n ({host, physicalHost, address, state, maintenanceMessage}, index) => {\n return (\n <Scheduler\n key={host ?? index}\n host={host}\n physicalHost={physicalHost}\n address={address}\n state={state}\n maintenanceMessage={maintenanceMessage}\n type={name}\n />\n );\n },\n );\n }\n\n renderSection(name, heading) {\n const objects = this.props[name];\n const rows = Math.min(7, objects.length);\n const columns = Math.ceil(objects.length / rows);\n const style = {\n gridTemplateRows: `repeat(${rows}, 20px`,\n justifyContent: columns > 2 ? 'space-between' : 'start',\n };\n const containerStyle = {\n marginRight: name === 'schedulers' && columns === 1 ? '100px' : null,\n width: columns > 1 ? '100%' : 'auto',\n };\n\n return (\n <div className={b(name)} style={containerStyle}>\n <div className={headingCN}>{heading}</div>\n <div className={b(`${name}-hosts`)} style={style}>\n {this.renderHosts(name, objects)}\n </div>\n </div>\n );\n }\n\n renderOverview() {\n const {counters, alerts} = this.props;\n const tags = prepareTags(counters, alerts);\n\n return (\n <>\n <VisibleHostTypeRadioButton className={b('container-host-radio')} />\n <div className={b('heading-overview')}>\n {map_(tags, ({theme, label}) => (\n <span key={label} className={block('elements-label')({theme})}>\n {label}\n </span>\n ))}\n </div>\n </>\n );\n }\n\n onToggle = () => {\n const {collapsed, setSettingsSystemSchedulersCollapsed} = this.props;\n setSettingsSystemSchedulersCollapsed(!collapsed);\n };\n\n renderImpl() {\n const {schedulers, agents, alerts, collapsibleSize, collapsed} = this.props;\n\n if (!schedulers.length && !agents.length) {\n return null;\n }\n\n return (\n <StickyContainer>\n {({topStickyClassName}) => (\n <CollapsibleSectionStateLess\n name=\"Schedulers and controller agents\"\n headingClassName={topStickyClassName}\n overview={this.renderOverview()}\n collapsed={collapsed}\n onToggle={this.onToggle}\n size={collapsibleSize}\n >\n {map_(alerts.schedulers, (alert) => (\n <Alert key={alert.attributes.host} error={alert} />\n ))}\n {map_(alerts.agents, (alert, index) => (\n <Alert key={index} error={alert} />\n ))}\n\n <div className={b('schedulers-agents')}>\n {schedulers.length > 0 &&\n this.renderSection('schedulers', 'Schedulers')}\n {agents.length > 0 && this.renderSection('agents', 'Controller agents')}\n </div>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <SchedulersAndAgentsUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n schedulers: getSystemSchedulersWithState(state),\n agents: getSystemAgentsWithState(state),\n counters: getSystemSchedulerAndAgentCounters(state),\n alerts: getSystemSchedulerAndAgentAlerts(state),\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n collapsed: getSettingsSystemSchedulersCollapsed(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemSchedulersCollapsed,\n};\n\nfunction SchedulersAndAgentsUpdater() {\n const dispatch = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSchedulersAndAgents()).then(({isRetryFutile} = {}) => {\n if (isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SchedulersAndAgents);\n","import isEmpty_ from 'lodash/isEmpty';\n\nexport default (counters, alerts) => {\n const tags = [];\n\n if (!counters || !alerts) {\n return tags;\n }\n\n const {schedulers, agents} = counters;\n const [schedulersAlertsLength, agentsAlertsLength] = [\n alerts.schedulers?.length || 0,\n alerts.agents?.length || 0,\n ];\n\n if (isEmpty_(schedulers)) {\n tags.push({\n theme: 'default',\n label: 'Schedulers: unknown',\n });\n } else if (schedulers.offline > 0 && schedulers.active === 0) {\n tags.push({\n theme: 'danger',\n label: 'Schedulers: Down',\n });\n } else if (schedulers.offline === 0 && schedulers.active === 0) {\n tags.push({\n theme: 'danger',\n label: 'Schedulers: Standby',\n });\n } else if (schedulers.active > 0 && schedulers.offline > 0) {\n tags.push({\n theme: 'warning',\n label: `Schedulers: ${schedulers.offline} offline`,\n });\n } else {\n const withAlerts = {\n theme: 'warning',\n label: `Schedulers: OK (${schedulersAlertsLength} alerts)`,\n };\n const withoutAlerts = {\n theme: 'success',\n label: 'Schedulers: OK',\n };\n\n tags.push(schedulersAlertsLength > 0 ? withAlerts : withoutAlerts);\n }\n\n if (isEmpty_(agents)) {\n tags.push({\n theme: 'default',\n label: 'Controller agents: unknown',\n });\n } else if (agents.total === agents.connected) {\n const withAlerts = {\n theme: 'warning',\n label: `Controller agents: OK (${agentsAlertsLength} alerts)`,\n };\n const withoutAlerts = {\n theme: 'success',\n label: 'Controller agents: OK',\n };\n\n tags.push(agentsAlertsLength > 0 ? withAlerts : withoutAlerts);\n } else {\n let label = 'Controller agents:';\n if (agents.connected) {\n label += ` ${agents.connected} connected`;\n }\n if (agents.disconnected) {\n label += ` ${agents.disconnected} disconnected`;\n }\n if (agents.offline) {\n label += ` ${agents.offline} offline`;\n }\n\n tags.push({\n theme: agents.offline < 2 && agents.connected > 0 ? 'warning' : 'danger',\n label,\n });\n }\n\n return tags;\n};\n","import React, {Component} from 'react';\nimport {compose} from 'redux';\nimport {connect, useDispatch} from 'react-redux';\nimport hammer from '../../../common/hammer';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport withStickyFooter from '../../../components/ElementsTable/hocs/withStickyFooter';\nimport {sortStateType} from '../../../components/ElementsTable/ElementsTableHeader';\nimport withStickyHead from '../../../components/ElementsTable/hocs/withStickyHead';\nimport ElementsTableBase from '../../../components/ElementsTable/ElementsTable';\nimport SystemCounters from '../SystemCounters/SystemCounters';\nimport Label from '../../../components/Label/Label';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nimport {SYSTEM_CHUNKS_TABLE_ID} from '../../../constants/tables';\nimport {loadChunks} from '../../../store/actions/system/chunks';\nimport {getSettingsSystemChunksCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemChunksCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport './Chunks.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\nimport {HEADER_HEIGHT} from '../../../constants';\n\nconst b = block('system');\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nclass Chunks extends Component {\n static _formatChunkName(name) {\n return hammer.format['ReadableField'](\n name === 'chunks' ? 'total' : name.substring(0, name.length - '_chunks'.length),\n );\n }\n\n static _formatChunkCount(count) {\n return count === 0 ? '' : hammer.format['Number'](count);\n }\n\n static _prepareColumnSet(types) {\n let columnSet = map_(types, 'name');\n\n columnSet = filter_(columnSet, (item) => item !== 'chunks');\n columnSet.push('chunks');\n columnSet.unshift('cell_tag');\n\n return columnSet;\n }\n\n static propTypes = {\n // from connect\n replication: PropTypes.bool,\n sealer: PropTypes.bool,\n refresh: PropTypes.bool,\n requisitionUpdate: PropTypes.bool,\n cells: PropTypes.arrayOf(PropTypes.object),\n types: PropTypes.arrayOf(PropTypes.object),\n\n sortState: sortStateType,\n };\n\n onToggle = () => {\n const {collapsed, setSettingsSystemChunksCollapsed} = this.props;\n setSettingsSystemChunksCollapsed(!collapsed);\n };\n\n _prepareColumns(types) {\n const columns = {};\n\n forEach_(types, (type) => {\n columns[type.name] = {\n ...type,\n get: function (cellData) {\n return cellData[type.name];\n },\n caption: Chunks._formatChunkName(type.name),\n align: 'right',\n sort: true,\n };\n });\n\n columns.cell_tag = {\n get: function (cellData) {\n const cellTag = cellData.cell_tag;\n return cellTag === 'total' ? cellTag : Number(cellTag);\n },\n name: 'cell_tag',\n caption: hammer.format['ReadableField']('cell_tag'),\n align: 'left',\n sort: true,\n };\n\n return columns;\n }\n\n renderLabels() {\n const {replication, sealer, refresh, requisitionUpdate} = this.props;\n\n const labels = [\n {\n text: 'Replication',\n value: replication,\n },\n {\n text: 'Sealer',\n value: sealer,\n },\n {\n text: 'Refresh',\n value: refresh,\n },\n {\n text: 'Requisition Update',\n value: requisitionUpdate,\n },\n ];\n\n return map_(labels, (label) => {\n let theme, text;\n\n if (typeof label.value === 'boolean') {\n theme = label.value ? 'success' : 'danger';\n text = label.value ? `${label.text} enabled` : `${label.text} disabled`;\n } else {\n theme = 'default';\n text = `${label.text} unknown`;\n }\n\n return <Label key={label.text} theme={theme} text={text} />;\n });\n }\n\n renderImpl() {\n const {cells, types, sortState, collapsibleSize, collapsed} = this.props;\n const [rest, total] = partition_(cells, ({cell_tag}) => 'total' !== cell_tag);\n\n if (!cells || 0 === cells.length) {\n return null;\n }\n\n const columns = this._prepareColumns(types);\n const sortedCells = hammer.utils.sort(rest, sortState, columns);\n\n // TABLE\n const tableSettings = {\n size: 's',\n theme: 'embedded',\n striped: false,\n css: 'chunk-cells',\n computeKey: function (item) {\n return item.cell_tag;\n },\n tableId: SYSTEM_CHUNKS_TABLE_ID,\n columns: {\n items: columns,\n sets: {\n default: {\n items: Chunks._prepareColumnSet(types),\n },\n },\n },\n templates: {\n key: 'system/chunk-cells',\n data: {columns: columns},\n },\n header: false,\n };\n\n const table = Object.assign({}, tableSettings, {\n items: sortedCells,\n columns: Object.assign({}, tableSettings.columns, {\n items: columns,\n mode: 'default',\n }),\n });\n\n const totalRow = total[0];\n\n let countersBlock = null;\n if (totalRow) {\n /* eslint-disable camelcase */\n const {\n lost_vital_chunks,\n data_missing_chunks,\n parity_missing_chunks,\n chunks,\n quorum_missing_chunks,\n } = totalRow;\n\n const counters = {\n flags: {\n lvc: Chunks._formatChunkCount(lost_vital_chunks),\n dmc: Chunks._formatChunkCount(data_missing_chunks),\n pmc: Chunks._formatChunkCount(parity_missing_chunks),\n qmc: Chunks._formatChunkCount(quorum_missing_chunks),\n },\n total: hammer.format['Number'](chunks),\n };\n /* eslint-enable camelcase */\n const stateThemeMappings = {\n lvc: 'danger',\n dmc: 'warning',\n pmc: 'warning',\n qmc: 'danger',\n };\n countersBlock = (\n <SystemCounters\n counters={counters}\n renderLinks={false}\n stateThemeMappings={stateThemeMappings}\n />\n );\n }\n\n const overview = (\n <div className={b('heading-overview')}>\n {countersBlock}\n {this.renderLabels()}\n </div>\n );\n\n return (\n <StickyContainer>\n {({topStickyClassName}) => (\n <CollapsibleSectionStateLess\n name={'Chunks'}\n headingClassName={topStickyClassName}\n overview={overview}\n onToggle={this.onToggle}\n collapsed={collapsed}\n size={collapsibleSize}\n >\n <div className={b('chunks')}>\n <ElementsTable {...table} top={HEADER_HEIGHT + 64} footer={totalRow} />\n </div>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <ChunksUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {replication, sealer, refresh, requisitionUpdate, cells, types} = state.system.chunks;\n\n return {\n replication,\n sealer,\n refresh,\n requisitionUpdate,\n cells,\n types,\n sortState: state.tables[SYSTEM_CHUNKS_TABLE_ID],\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n collapsed: getSettingsSystemChunksCollapsed(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemChunksCollapsed,\n};\n\nfunction ChunksUpdater() {\n const dispatch = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowRetry = true;\n return () => {\n if (allowRetry) {\n dispatch(loadChunks()).then(({isRetryFutile} = {}) => {\n if (isRetryFutile) {\n allowRetry = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Chunks);\n","import each_ from 'lodash/each';\nimport reduce_ from 'lodash/reduce';\nimport sortBy_ from 'lodash/sortBy';\nimport values_ from 'lodash/values';\n\nimport type {\n HttpProxiesState,\n RoleGroupInfo,\n RoleGroupItemInfo,\n SystemNodeCounters,\n} from '../../store/reducers/system/proxies';\nimport type {NodeEffectiveState, NodeState} from '../../store/reducers/system/nodes';\n\nexport function extractRoleGroups(proxies: Array<RoleGroupItemInfo>): Array<RoleGroupInfo> {\n const roleGroups = reduce_(\n proxies,\n (roles, proxy) => {\n const roleName = proxy.role || 'default';\n let role = roles[roleName];\n if (!role) {\n role = roles[roleName] = {\n items: [],\n name: roleName,\n counters: {\n total: 0,\n states: {},\n effectiveStates: {},\n flags: {},\n },\n };\n }\n\n ++role.counters.total;\n role.items.push(proxy);\n incrementCounters(proxy, role.counters);\n return roles;\n },\n {} as Record<string, RoleGroupInfo>,\n );\n\n const roles = values_(roleGroups);\n\n return sortBy_(roles, 'name');\n}\n\nconst MAIN_STATES = new Set<NodeEffectiveState>(['online', 'offline']);\nexport function getNodeffectiveState(state: NodeState): NodeEffectiveState {\n return MAIN_STATES.has(state as any) ? (state as NodeEffectiveState) : 'other';\n}\n\nexport function incrementStateCounter<K extends string>(\n counters: Partial<Record<K, number>>,\n k?: K,\n) {\n if (!k) {\n return;\n }\n\n if (counters[k] === undefined) {\n counters[k] = 1;\n } else {\n ++counters[k]!;\n }\n}\n\nexport function extractProxyCounters(proxies: Array<RoleGroupItemInfo>) {\n const counters: HttpProxiesState['counters'] = {\n total: proxies.length,\n states: {},\n effectiveStates: {},\n flags: {},\n };\n\n each_(proxies, (proxy) => {\n incrementCounters(proxy, counters);\n });\n\n return counters;\n}\n\nfunction incrementCounters(proxy: RoleGroupItemInfo, counters: SystemNodeCounters) {\n incrementStateCounter(counters.states, proxy.state);\n\n if (proxy.banned) {\n incrementStateCounter(counters.flags, 'banned');\n } else {\n incrementStateCounter(counters.effectiveStates, proxy.effectiveState);\n }\n}\n","import axios from 'axios';\nimport map_ from 'lodash/map';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {isRetryFutile} from '../../../utils/index';\nimport {showErrorPopup} from '../../../utils/utils';\nimport {getCluster} from '../../../store/selectors/global';\nimport {extractProxyCounters, extractRoleGroups} from '../../../utils/system/proxies';\nimport type {HttpProxiesAction, RoleGroupItemInfo} from '../../../store/reducers/system/proxies';\nimport {ThunkAction} from 'redux-thunk';\nimport type {RootState} from '../../../store/reducers';\nimport {FETCH_PROXIES} from '../../../constants/system/nodes';\n\nconst toaster = new Toaster();\n\ntype ProxiesThunkAction<T = void> = ThunkAction<T, RootState, unknown, HttpProxiesAction>;\n\nfunction makeProxyInfo(data: any): RoleGroupItemInfo {\n const state = data.dead ? 'offline' : 'online';\n\n return {\n name: data.name,\n state,\n effectiveState: state,\n role: data.role,\n banned: data.banned,\n };\n}\n\nexport function loadSystemProxies(): ProxiesThunkAction<\n Promise<undefined | {isRetryFutile: boolean}>\n> {\n return (dispatch, getState) => {\n const cluster = getCluster(getState());\n\n return axios\n .request({\n url: `/api/yt-proxy/${cluster}/hosts-all`,\n method: 'GET',\n })\n .then(({data}) => {\n const proxies = map_(data, makeProxyInfo);\n dispatch({\n type: FETCH_PROXIES.SUCCESS,\n data: {\n roleGroups: extractRoleGroups(proxies),\n counters: extractProxyCounters(proxies),\n },\n });\n return undefined;\n })\n .catch((error) => {\n dispatch({\n type: FETCH_PROXIES.FAILURE,\n data: error,\n });\n\n const data = error?.response?.data || error;\n const {code, message} = data;\n\n toaster.add({\n name: 'load/system/proxies',\n autoHiding: false,\n theme: 'danger',\n content: `[code ${code}] ${message}`,\n title: 'Could not load Proxies',\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n\n return {isRetryFutile: isRetryFutile(error.code)};\n });\n };\n}\n","import * as React from 'react';\nconst Cube = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M13.5 5.475v4.946a1.5 1.5 0 0 1-.973 1.405l-4.777 1.79V7.53l5.75-2.054Zm-.654-1.36a1.5 1.5 0 0 0-.175-.103L9.499 2.427a1.5 1.5 0 0 0-1.197-.063l-4.829 1.81c-.08.03-.157.067-.23.11L7.05 6.185l5.797-2.07ZM2.5 5.59l3.75 1.875v5.984l-2.92-1.46a1.5 1.5 0 0 1-.83-1.342V5.589ZM1.266 4.343c-.172.38-.266.8-.266 1.236v5.067a3 3 0 0 0 1.658 2.683l3.172 1.586a3 3 0 0 0 2.395.126l4.828-1.811A3 3 0 0 0 15 10.421V5.354a3 3 0 0 0-1.658-2.683L10.17 1.085A3 3 0 0 0 7.775.959L2.947 2.77a2.997 2.997 0 0 0-1.48 1.203.75.75 0 0 0-.2.37Z\", clipRule: \"evenodd\" })));\nexport default Cube;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport guid from '../../common/hammer/guid';\nimport {getGlobalAsideHeaderWidth} from '../../store/selectors/global';\n\nconst block = cn('grid-with-media-min-width');\n\nexport type WithMediaMinWidthProps = {\n className?: string;\n itemClassName: string;\n itemMinWidth: number;\n itemMaxWidth?: number;\n gap?: number;\n children: React.ReactNode;\n maxWidth?: number;\n};\n\nexport function GridWithMediaMinWidth({\n className,\n itemClassName,\n maxWidth = 2400,\n itemMinWidth,\n itemMaxWidth = itemMinWidth * 1.5,\n gap = 0,\n children,\n}: WithMediaMinWidthProps) {\n const asideHeaderWidth = useSelector(getGlobalAsideHeaderWidth);\n\n const {inlineClassName, inlineStyle} = React.useMemo(() => {\n const id = block(guid());\n const pagePadding = 40 + asideHeaderWidth;\n let res = `.${id} {`;\n res += `\\n display: grid;`;\n res += `\\n gap: ${gap}px;`;\n res += `\\n}`;\n res += `\\n.${id} .${itemClassName} {min-width: ${itemMinWidth}px; max-width: ${itemMaxWidth}px;}`;\n let i = 1;\n function calcMinWidth(columnsCount: number) {\n return gap * (columnsCount - 1) + itemMinWidth * columnsCount + pagePadding;\n }\n while (++i) {\n const minWidth = calcMinWidth(i);\n const nextMinWidth = calcMinWidth(i + 1);\n const mediaMaxWidthCondition =\n minWidth >= maxWidth ? '' : `and (max-width: ${nextMinWidth}px)`;\n res += `\\n@media screen and (min-width: ${minWidth}px) ${mediaMaxWidthCondition} {`;\n res += `\\n .${id} {`;\n res += `\\n grid-template-columns: ${Array.from({length: i}, () => '1fr').join(' ')};`;\n res += `\\n max-width: ${gap * (i - 1) + itemMaxWidth * i}px;`;\n res += `\\n }`;\n res += `\\n}`;\n if (minWidth >= maxWidth) {\n break;\n }\n }\n return {inlineClassName: id, inlineStyle: res};\n }, [itemMinWidth, itemMaxWidth, maxWidth, gap, asideHeaderWidth]);\n\n return (\n <div className={block(null, [inlineClassName, className].filter(Boolean).join(' '))}>\n <style>{inlineStyle}</style>\n {children}\n </div>\n );\n}\n","import {Progress, Text} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport React from 'react';\n\nimport {addProgressStackSpacers} from '../../../utils/progress';\nimport Link from '../../../components/Link/Link';\n\nimport './StatsInfo.scss';\n\nconst block = cn('stats-info');\n\ntype Props = {\n status: 'ONLINE' | 'OFFLINE' | 'BANNED' | 'OTHER' | 'FULL';\n\n count: number;\n url?: string;\n\n alertsUrl?: string;\n alertCount?: number;\n\n decCount?: number;\n decUrl?: string;\n};\n\nconst COLORS_BY_STATUS = {\n ONLINE: ['var(--success-color)', 'var(--success-text)', 'var(--default-color)'],\n OFFLINE: ['var(--danger-color)', 'var(--danger-text)', 'var(--default-color)'],\n BANNED: ['var(--warning-color)', 'var(--warning-text)', 'var(--default-color)'],\n OTHER: ['var(--info-color)', 'var(--info-text)', 'var(--default-color)'],\n FULL: [],\n};\n\nfunction calculateStack(status: Props['status'], count: number, alerts = 0, dec = 0) {\n if (!count) {\n return [];\n }\n\n const alertsValue = (alerts / count) * 100;\n\n const decValue = (dec / count) * 100;\n\n const remaining = 100 - alertsValue - decValue;\n\n const colors = COLORS_BY_STATUS[status];\n\n return addProgressStackSpacers([\n {\n value: remaining,\n color: colors[0],\n },\n {\n value: alertsValue,\n color: colors[1],\n },\n {\n value: decValue,\n color: colors[2],\n },\n ]);\n}\n\nexport const StatsInfo = ({\n count,\n status,\n alertCount: alertNumber,\n decCount: decNumber,\n url,\n alertsUrl,\n decUrl,\n}: Props) => {\n const stack = calculateStack(status, count, alertNumber, decNumber);\n\n return (\n <div className={block()}>\n <div>\n <CountUrl count={count} url={url} variant=\"body-2\" />\n </div>\n <Text className={block('text')} variant=\"body-short\" color=\"secondary\">\n {status}\n </Text>\n <Progress className={block('progress')} stack={stack ?? []} size=\"xs\" />\n\n <TextCountUrl text=\"ALERT\" count={alertNumber} color=\"primary\" url={alertsUrl} />\n <TextCountUrl text=\"DEC\" count={decNumber} color=\"primary\" url={decUrl} />\n </div>\n );\n};\n\nfunction TextCountUrl({\n count,\n url,\n text,\n color,\n}: {\n count?: number;\n url?: string;\n text: string;\n color: 'warning' | 'primary';\n}) {\n return (\n <div className={block('info', {hidden: count === undefined})}>\n <Text\n color={count !== 0 ? color : 'hint'}\n className={block('subtext')}\n variant=\"body-short\"\n >\n {text}\n </Text>\n <CountUrl count={count} url={url} variant=\"body-short\" />\n </div>\n );\n}\n\nfunction CountUrl({\n count,\n url,\n variant,\n}: {\n count?: number;\n url?: string;\n variant: 'body-2' | 'body-short';\n}) {\n return (\n <Text variant={variant ?? 'body-short'} color=\"hint\">\n {url && count !== 0 ? (\n <Link theme=\"primary\" className={block('link')} url={url}>\n {count}\n </Link>\n ) : (\n count\n )}\n </Text>\n );\n}\n","import {Flex, Link, Text} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport React, {useEffect, useState} from 'react';\n\nimport {Cube} from '@gravity-ui/icons';\n\nimport format from '../../../common/hammer/format';\nimport {ExpandButton} from '../../../components/ExpandButton';\nimport {GridWithMediaMinWidth} from '../../../containers/GridWithMediaMinWidth/GridWithMediaMinWidth';\n\nimport type {RoleGroupInfo} from '../../../store/reducers/system/proxies';\nimport NodeQuad from '../NodeQuad/NodeQuad';\nimport {StatsInfo} from './StatsInfo';\n\nimport './RoleGroup.scss';\n\nconst block = cn('yt-role-group');\n\nexport type MakeUrlParams = {\n name?: string;\n state?: 'online' | 'offline' | 'banned' | 'others';\n flag?: 'decommissioned' | 'alerts' | 'full';\n};\n\nexport function RoleGroupsContainer({children}: {children: React.ReactNode}) {\n return (\n <GridWithMediaMinWidth\n className={block('groups-container')}\n gap={16}\n itemClassName={block()}\n itemMinWidth={590}\n itemMaxWidth={1100}\n >\n {children}\n </GridWithMediaMinWidth>\n );\n}\n\ntype Props = {\n data: RoleGroupInfo;\n makeUrl: (params?: MakeUrlParams) => string;\n showFlags?: boolean;\n hideOthers?: boolean;\n bannedAsState?: boolean;\n forceExpand?: boolean;\n};\n\nexport function RoleGroup({data, makeUrl, forceExpand}: Props) {\n const {name, counters, items} = data;\n const {online = 0, offline = 0, other = 0} = counters.effectiveStates;\n const {\n banned = 0,\n full = 0,\n alerts_online = 0,\n alerts_offline = 0,\n alerts_banned = 0,\n dec_offline = 0,\n dec_online = 0,\n dec_banned = 0,\n } = counters.flags;\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n if (forceExpand !== undefined) {\n setExpanded(forceExpand);\n }\n }, [forceExpand]);\n\n const onToggle = () => {\n setExpanded(!expanded);\n };\n\n const nameUrl = makeUrl({name});\n\n return (\n <div className={block()}>\n <Flex alignItems=\"center\">\n <div className={block('progress-text')}>\n <Flex justifyContent={'space-between'}>\n <Link\n view=\"primary\"\n href={nameUrl}\n className={block('name')}\n target=\"_blank\"\n >\n <Text variant=\"body-2\" className={block('name-name')}>\n {name}\n </Text>\n </Link>\n {data?.items?.length > 0 && (\n <ExpandButton\n className={block('expand-btn')}\n toggleExpanded={onToggle}\n expanded={expanded}\n />\n )}\n </Flex>\n <Flex direction={'column'} className={block('bottom-info')}>\n <Flex alignItems={'center'} gap={2}>\n <Cube className={block('cube-icon')} />\n <Link\n view=\"primary\"\n className={block('progress-number')}\n href={nameUrl}\n target=\"_blank\"\n >\n <Text variant=\"body-2\" style={{fontWeight: '600'}}>\n {format.Number(counters.total)}\n </Text>\n </Link>\n </Flex>\n <span>TOTAL IN RACK</span>\n </Flex>\n </div>\n <div className={block('divider')} />\n <Flex alignItems=\"center\" gap=\"9\" grow=\"2\" style={{height: '100%'}}>\n <StatsInfo\n status={'ONLINE'}\n count={online}\n url={makeUrl({name, state: 'online'})}\n alertCount={alerts_online}\n alertsUrl={makeUrl({name, state: 'online', flag: 'alerts'})}\n decCount={dec_online}\n decUrl={makeUrl({name, state: 'online', flag: 'decommissioned'})}\n />\n <StatsInfo\n status={'OFFLINE'}\n count={offline}\n url={makeUrl({name, state: 'offline'})}\n alertCount={alerts_offline}\n alertsUrl={makeUrl({name, state: 'offline', flag: 'alerts'})}\n decCount={dec_offline}\n decUrl={makeUrl({name, state: 'offline', flag: 'decommissioned'})}\n />\n <StatsInfo\n status={'BANNED'}\n count={banned}\n url={makeUrl({name, state: 'banned'})}\n alertCount={alerts_banned}\n alertsUrl={makeUrl({name, state: 'banned', flag: 'alerts'})}\n decCount={dec_banned}\n decUrl={makeUrl({name, state: 'banned', flag: 'decommissioned'})}\n />\n {other > 0 && (\n <StatsInfo\n count={other}\n status={'OTHER'}\n url={makeUrl({name, state: 'others'})}\n />\n )}\n {full > 0 && (\n <StatsInfo\n count={full}\n status={'FULL'}\n url={makeUrl({name, flag: 'full'})}\n />\n )}\n </Flex>\n </Flex>\n {expanded && (\n <div className={block('rack-nodes')}>\n {items.map(({effectiveState, alerts, decommissioned, name, banned, full}) => {\n return (\n <NodeQuad\n key={name}\n theme={effectiveState}\n alerts={alerts}\n banned={banned}\n decommissioned={decommissioned}\n full={full}\n />\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport map_ from 'lodash/map';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\n\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\nimport {ExpandButton} from '../../../components/ExpandButton';\nimport {RoleGroupInfo} from '../../../store/reducers/system/proxies';\nimport {MakeUrlParams, RoleGroup, RoleGroupsContainer} from '../ProxiesImpl/RoleGroup';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nexport function ProxiesImpl({\n name,\n roleGroups,\n collapsed,\n onToggleCollapsed,\n overview,\n makeUrl,\n}: {\n name: 'HTTP Proxies' | 'RPC Proxies';\n roleGroups: Array<RoleGroupInfo>;\n collapsed: boolean;\n onToggleCollapsed: () => void;\n overview: React.ReactNode;\n\n makeUrl: (params?: MakeUrlParams) => string;\n}) {\n const [expandRacks, setExpandRacks] = React.useState(false);\n\n return (\n <StickyContainer>\n {({topStickyClassName}) => (\n <CollapsibleSectionStateLess\n name={name}\n headingClassName={topStickyClassName}\n overview={\n <>\n {!collapsed && (\n <ExpandButton\n all\n showText\n expanded={expandRacks}\n toggleExpanded={() => setExpandRacks(!expandRacks)}\n />\n )}\n {overview}\n </>\n }\n onToggle={onToggleCollapsed}\n collapsed={collapsed}\n size={UI_COLLAPSIBLE_SIZE}\n togglerRightPadding=\"small\"\n >\n <RoleGroupsContainer>\n {map_(roleGroups, (data) => {\n return (\n <RoleGroup\n key={data.name}\n data={data}\n makeUrl={makeUrl}\n hideOthers\n bannedAsState\n forceExpand={expandRacks}\n />\n );\n })}\n </RoleGroupsContainer>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n}\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {loadSystemProxies} from '../../../store/actions/system/proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getSettingsSystemHttpProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemHttpProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport type {RootState} from '../../../store/reducers';\nimport {useThunkDispatch} from '../../../store/thunkDispatch';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport {MakeUrlParams} from '../ProxiesImpl/RoleGroup';\nimport {ProxiesImpl} from '../ProxiesImpl/ProxiesImpl';\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nclass Proxies extends Component<ReduxProps> {\n onToggle = () => {\n const {collapsed} = this.props;\n this.props.setSettingsSystemHttpProxiesCollapsed(!collapsed);\n };\n\n renderOverview() {\n const {counters} = this.props;\n\n return <SystemStateOverview tab=\"http_proxies\" counters={counters} />;\n }\n\n renderImpl() {\n const {roleGroups, counters, collapsed} = this.props;\n if (isEmpty_(roleGroups) && isEmpty_(counters)) {\n return null;\n }\n\n const overview = this.renderOverview();\n\n return (\n <ProxiesImpl\n name={'HTTP Proxies'}\n overview={overview}\n onToggleCollapsed={this.onToggle}\n roleGroups={roleGroups}\n collapsed={collapsed}\n makeUrl={this.makeRoleGroupUrl}\n />\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <ProxiesUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n\n makeRoleGroupUrl = ({name, state}: MakeUrlParams = {}) => {\n const {cluster} = this.props;\n const params = new URLSearchParams({role: name!});\n if (state === 'banned') {\n params.append('banned', 'true');\n } else if (state) {\n params.append('state', state);\n params.append('banned', 'false');\n }\n return `/${cluster}/components/http_proxies?${params}`;\n };\n}\n\nfunction mapStateToProps(state: RootState) {\n const {counters, roleGroups, loaded} = state.system.proxies;\n\n return {\n counters,\n roleGroups,\n loaded,\n collapsed: getSettingsSystemHttpProxiesCollapsed(state),\n cluster: getCluster(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemHttpProxiesCollapsed,\n};\n\nfunction ProxiesUpdater() {\n const dispatch = useThunkDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemProxies()).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\nexport default connector(Proxies);\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {setSettingsSystemRpcProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemRPCProxies} from '../../../store/actions/system/rpc-proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\nimport {getSettingsSystemRpcProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {useThunkDispatch} from '../../../store/thunkDispatch';\nimport {MakeUrlParams} from '../ProxiesImpl/RoleGroup';\nimport {ProxiesImpl} from '../ProxiesImpl/ProxiesImpl';\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nclass RpcProxies extends Component<ReduxProps> {\n onToggle = () => {\n const {collapsed, setSettingsSystemRpcProxiesCollapsed} = this.props;\n setSettingsSystemRpcProxiesCollapsed(!collapsed);\n };\n\n renderOverview() {\n const {counters} = this.props;\n\n return <SystemStateOverview tab=\"rpc_proxies\" counters={counters} />;\n }\n\n renderImpl() {\n const {roleGroups, counters, collapsed} = this.props;\n const overview = this.renderOverview();\n\n return (\n counters.total > 0 && (\n <ProxiesImpl\n name={'RPC Proxies'}\n overview={overview}\n onToggleCollapsed={this.onToggle}\n roleGroups={roleGroups}\n collapsed={collapsed}\n makeUrl={this.makeRoleGroupUrl}\n />\n )\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <RpcProxiesUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n\n makeRoleGroupUrl = ({name, state}: MakeUrlParams = {}) => {\n const {cluster} = this.props;\n const params = new URLSearchParams({role: name!});\n if (state === 'banned') {\n params.append('banned', 'true');\n } else if (state) {\n params.append('state', state);\n }\n return `/${cluster}/components/rpc_proxies?${params}`;\n };\n}\n\nfunction mapStateToProps(state: RootState) {\n const {roleGroups, counters} = state.system.rpcProxies;\n return {\n counters,\n roleGroups,\n collapsed: getSettingsSystemRpcProxiesCollapsed(state),\n cluster: getCluster(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemRpcProxiesCollapsed,\n};\n\nfunction RpcProxiesUpdater() {\n const dispatch = useThunkDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemRPCProxies()).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\nexport default connector(RpcProxies);\n","import {ThunkAction} from 'redux-thunk';\n\nimport reduce_ from 'lodash/reduce';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {USE_SUPRESS_SYNC} from '../../../../shared/constants';\nimport ypath from '../../../common/thor/ypath';\nimport {FETCH_RPC_PROXIES} from '../../../constants/system/nodes';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {RoleGroupItemInfo} from '../../../store/reducers/system/proxies';\nimport {RpcProxiesAction} from '../../../store/reducers/system/rpc-proxies';\nimport {isRetryFutile} from '../../../utils/index';\nimport {extractProxyCounters, extractRoleGroups} from '../../../utils/system/proxies';\nimport {showErrorPopup} from '../../../utils/utils';\n\ntype RPCProxiesThunkAction<T = void> = ThunkAction<\n Promise<T>,\n RootState,\n unknown,\n RpcProxiesAction\n>;\n\nfunction extractRpcProxy(data: object): Array<RoleGroupItemInfo> {\n return reduce_(\n data,\n (acc, value, key) => {\n const alive = ypath.getValue(value, '/alive');\n const state = alive ? 'online' : 'offline';\n const banned = ypath.getValue(value, '/@banned');\n\n acc.push({\n name: key,\n role: ypath.getValue(value, '/@role'), //value.$attributes?.role,\n state,\n effectiveState: state,\n banned,\n });\n return acc;\n },\n [] as Array<RoleGroupItemInfo>,\n );\n}\n\nexport function loadSystemRPCProxies(): RPCProxiesThunkAction<\n undefined | {isRetryFutile: boolean}\n> {\n return (dispatch) => {\n dispatch({\n type: FETCH_RPC_PROXIES.REQUEST,\n });\n\n return ytApiV3Id\n .get(YTApiId.systemRpcProxies, {\n path: '//sys/rpc_proxies',\n attributes: ['role', 'banned'],\n ...USE_SUPRESS_SYNC,\n })\n .then((data = []) => {\n const rpcProxies = extractRpcProxy(data);\n\n dispatch({\n type: FETCH_RPC_PROXIES.SUCCESS,\n data: {\n roleGroups: extractRoleGroups(rpcProxies),\n counters: extractProxyCounters(rpcProxies),\n },\n });\n return undefined;\n })\n .catch((error) => {\n dispatch({\n type: FETCH_RPC_PROXIES.FAILURE,\n data: error,\n });\n\n const data = error?.response?.data || error;\n const {code, message} = data;\n\n const toaster = new Toaster();\n toaster.add({\n name: 'load/system/rpc-proxies',\n autoHiding: false,\n theme: 'danger',\n content: `[code ${code}] ${message}`,\n title: 'Could not load RPC-Proxies',\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n\n return {isRetryFutile: isRetryFutile(error.code)};\n });\n };\n}\n","import each_ from 'lodash/each';\nimport filter_ from 'lodash/filter';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {USE_CACHE, USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\nimport hammer from '../../../common/hammer';\nimport ypath from '../../../common/thor/ypath';\nimport {SYSTEM_FETCH_NODES, UNAWARE} from '../../../constants';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {isRetryFutile} from '../../../utils/index';\nimport {getNodeffectiveState, incrementStateCounter} from '../../../utils/system/proxies';\nimport {showErrorPopup, splitBatchResults} from '../../../utils/utils';\n\nimport {ThunkAction} from 'redux-thunk';\nimport {NodeType} from '../../../../shared/constants/system';\nimport type {BatchSubRequest} from '../../../../shared/yt-types';\nimport type {RootState} from '../../../store/reducers';\nimport type {\n NodeEffectiveState,\n RackInfo,\n SystemNodeInfo,\n SystemNodesAction,\n SystemNodesState,\n} from '../../../store/reducers/system/nodes';\nimport type {\n HttpProxiesState,\n RoleGroupInfo,\n RoleGroupItemInfo,\n} from '../../../store/reducers/system/proxies';\n\ntype SystemNodesThunkAction<T = void> = ThunkAction<T, RootState, unknown, SystemNodesAction>;\n\nexport function loadSystemNodes(\n nodeTypes: Array<NodeType>,\n): SystemNodesThunkAction<Promise<undefined | {isRetryFutile?: boolean}>> {\n return (dispatch) => {\n dispatch({type: SYSTEM_FETCH_NODES.REQUEST});\n\n const requests: Array<BatchSubRequest> = [\n {\n command: 'list',\n parameters: {\n path: '//sys/racks',\n suppress_transaction_coordinator_sync: true,\n suppress_upstream_sync: true,\n ...USE_MAX_SIZE,\n },\n },\n ...nodeTypes.map((nodeType) => {\n return {\n command: 'list' as const,\n parameters: {\n path: `//sys/${nodeType}`,\n attributes: [\n 'state',\n 'banned',\n 'decommissioned',\n 'alert_count',\n 'full',\n 'rack',\n ],\n suppress_transaction_coordinator_sync: true,\n suppress_upstream_sync: true,\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n };\n }),\n ];\n\n return ytApiV3Id\n .executeBatch(YTApiId.systemNodes, {requests})\n .then((data) => {\n const {error, results} = splitBatchResults<string | Array<SystemNodeInfo>>(\n data,\n 'Failed to get system nodes',\n );\n if (error) {\n throw error;\n }\n\n const [rackNames, ...nodesByType] = results as [\n _first: Array<string>,\n ..._rest: Array<Array<SystemNodeInfo>>,\n ];\n\n const nodes = nodesByType.reduce((acc, items) => {\n return acc.concat(items);\n }, []);\n\n const racks = prepareRacks(rackNames, nodes);\n\n const overviewCounters = extractNodeCounters(racks);\n const {rackGroups, counters} = groupRacks(racks);\n\n dispatch({\n type: SYSTEM_FETCH_NODES.SUCCESS,\n data: {\n overviewCounters,\n counters,\n roleGroups: prepareRoleGroups(rackGroups),\n },\n });\n return undefined;\n })\n .catch((error) => {\n dispatch({\n type: SYSTEM_FETCH_NODES.FAILURE,\n data: error,\n });\n\n const data = error?.response?.data || error;\n const {code, message} = data;\n\n const toaster = new Toaster();\n\n toaster.add({\n name: 'load/system/nodes',\n autoHiding: false,\n theme: 'danger',\n content: `[code ${code}] ${message}`,\n title: 'Could not load Nodes',\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n\n return {isRetryFutile: isRetryFutile(error.code)};\n });\n };\n}\n\nfunction groupRacks(racks: Array<RackInfo>) {\n const groupedRacks: Record<string, Array<RackInfo>> = {},\n counters: SystemNodesState['counters'] = {};\n const dataCenterNames = reduce_(\n racks,\n (acc, rack) => {\n const groupName = rack.name.split('-')[0];\n return groupName ? acc.add(groupName) : acc;\n },\n new Set<string>(),\n );\n // regroup racks by datacenters they belong to\n dataCenterNames.forEach((dcName) => {\n const rackGroup = filter_(racks, (rack) => {\n return rack.name === dcName || rack.name.startsWith(`${dcName}-`);\n });\n const isGroupEmpty = rackGroup.every((rack) => rack.empty);\n if (!isGroupEmpty) {\n groupedRacks[dcName] = rackGroup;\n counters[dcName] = extractNodeCounters(rackGroup);\n }\n });\n return {rackGroups: groupedRacks, counters};\n}\n\ntype ExtendedCalculatedInfo = 'alerts_online' | 'alerts_offline';\n\nfunction increaseFlagCounter<\n K extends keyof RackInfo['nodes'][number]['$attributes'] | ExtendedCalculatedInfo,\n>(dst: Partial<Record<K, number>>, name: K, attrs: Record<K, boolean>) {\n if (dst[name] === undefined) {\n dst[name] = attrs[name] ? 1 : 0;\n } else {\n dst[name]! += attrs[name] ? 1 : 0;\n }\n}\n\nfunction extractNodeCounters(racks: Array<RackInfo>) {\n return reduce_(\n racks,\n (acc: HttpProxiesState['counters'], rack: RackInfo) => {\n acc.total += rack.nodes.length;\n\n each_(rack.nodes, (node) => {\n const attrs = node.$attributes;\n increaseFlagCounter(acc.flags, 'decommissioned', attrs);\n increaseFlagCounter(acc.flags, 'full', attrs);\n increaseFlagCounter(acc.flags, 'alerts', attrs);\n increaseFlagCounter(acc.flags, 'banned', attrs);\n\n incrementStateCounter(acc.states, attrs.state);\n if (!attrs.banned) {\n incrementStateCounter(acc.effectiveStates, attrs.effectiveState);\n }\n });\n\n return acc;\n },\n {\n total: 0,\n flags: {\n decommissioned: 0,\n banned: 0,\n full: 0,\n alerts: 0,\n },\n states: {}, // For right side counters\n effectiveStates: {}, // For state progress bar\n } as HttpProxiesState['counters'],\n );\n}\n\nfunction prepareNodes(nodes: Array<SystemNodeInfo>) {\n return nodes.sort((nodeA, nodeB) => {\n return nodeA.$value > nodeB.$value ? 1 : -1;\n });\n}\n\nfunction prepareRackNames(rackNames: Array<string>) {\n rackNames.sort((rackA, rackB) => {\n return hammer.utils.compareVectors(\n hammer.format['RackToVector'](rackA),\n hammer.format['RackToVector'](rackB),\n );\n });\n\n rackNames.unshift(UNAWARE);\n\n return rackNames;\n}\n\nfunction createRack(name: string): RackInfo {\n return {\n name,\n empty: true,\n nodes: [],\n };\n}\n\nfunction insertNodeToRack(racks: Record<string, RackInfo>, node: SystemNodeInfo) {\n const rackName = ypath.getValue(node, '/@rack');\n const state: NodeEffectiveState = ypath.getValue(node, '/@state');\n const banned: boolean = ypath.getBoolean(node, '/@banned');\n const decommissioned: boolean = ypath.getBoolean(node, '/@decommissioned');\n const full: boolean = ypath.getBoolean(node, '/@full');\n const alerts = Boolean(ypath.getValue(node, '/@alert_count'));\n\n const effectiveFlag =\n (decommissioned && 'decommissioned') ||\n (full && 'full') ||\n (alerts && 'alerts') ||\n undefined;\n\n const rack = racks[Object.hasOwnProperty.call(racks, rackName) ? rackName : UNAWARE];\n\n rack.empty = false;\n\n rack.nodes.push({\n $value: node.$value,\n $attributes: {\n ...node.$attributes,\n effectiveState: state,\n effectiveFlag: effectiveFlag,\n alerts,\n banned,\n },\n });\n}\n\nfunction prepareRacks(rackNames: Array<string>, nodes: Array<SystemNodeInfo>) {\n const racks = reduce_(\n prepareRackNames(rackNames),\n (acc, name) => {\n acc[name] = createRack(name);\n return acc;\n },\n {} as Record<string, RackInfo>,\n );\n\n each_(prepareNodes(nodes), (node) => insertNodeToRack(racks, node));\n\n return map_(racks);\n}\n\nfunction prepareRoleGroups(rackGroups: Record<string, Array<RackInfo>>) {\n const roleGroups = reduce_(\n rackGroups,\n (acc, item, key) => {\n const groups = rackInfo2roleGroup(item);\n const toAdd = groups.filter((g) => {\n return g.counters.total > 0;\n });\n if (toAdd.length) {\n acc[key] = toAdd;\n }\n return acc;\n },\n {} as Record<string, Array<RoleGroupInfo>>,\n );\n return roleGroups;\n}\n\nfunction rackInfo2roleGroup(data: Array<RackInfo>): Array<RoleGroupInfo> {\n return map_(data, (rack) => {\n const flags = {\n dec_online: 0,\n dec_banned: 0,\n dec_offline: 0,\n alerts_banned: 0,\n alerts_offline: 0,\n alerts_online: 0,\n };\n const res: RoleGroupInfo = {\n name: rack.name,\n items: [],\n counters: {\n total: rack.nodes.length,\n effectiveStates: {},\n states: {},\n flags,\n },\n };\n rack.nodes.forEach((node) => {\n const {state, effectiveState, banned, alerts, decommissioned} = node.$attributes;\n const info: RoleGroupItemInfo = {\n name: node.$value,\n state,\n role: rack.name,\n effectiveState: getNodeffectiveState(effectiveState),\n banned,\n alerts,\n decommissioned,\n full: node.$attributes?.full,\n };\n incrementStateCounter(res.counters.states, info.state);\n if (!banned) {\n incrementStateCounter(res.counters.effectiveStates, info.effectiveState);\n }\n\n increaseFlagCounter(res.counters.flags, 'decommissioned', node.$attributes);\n increaseFlagCounter(res.counters.flags, 'full', node.$attributes);\n increaseFlagCounter(res.counters.flags, 'alerts', node.$attributes);\n increaseFlagCounter(res.counters.flags, 'banned', node.$attributes);\n\n const isStateOnlineOffline = state === 'online' || state === 'offline';\n\n if (alerts) {\n if (banned) {\n ++flags['alerts_banned'];\n } else if (isStateOnlineOffline) {\n ++flags[`alerts_${state}`];\n }\n }\n\n if (decommissioned) {\n if (banned) {\n ++flags['dec_banned'];\n } else if (isStateOnlineOffline) {\n ++flags[`dec_${state}`];\n }\n }\n\n res.items.push(info);\n });\n\n return res;\n });\n}\n","import cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport React, {useState} from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\n\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\n\nimport format from '../../../common/hammer/format';\n\nimport {ExpandButton} from '../../../components/ExpandButton';\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport Link from '../../../components/Link/Link';\nimport {NoContent} from '../../../components/NoContent/NoContent';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {useMemoizedIfEqual, useUpdater} from '../../../hooks/use-updater';\nimport {setSettingsSystemNodesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemNodes} from '../../../store/actions/system/nodes';\nimport {RoleGroupInfo} from '../../../store/reducers/system/proxies';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport type {RootState} from '../../../store/reducers';\n\nimport {\n getSettingSystemNodesNodeType,\n getSettingsSystemNodesCollapsed,\n} from '../../../store/selectors/settings/settings-ts';\nimport {getSystemNodesNodeTypesToLoad} from '../../../store/selectors/system/nodes';\nimport {useThunkDispatch} from '../../../store/thunkDispatch';\nimport {\n ComponentsNodesLinkParams,\n makeComponentsNodesLink,\n} from '../../../utils/components/nodes/node';\n\nimport {MakeUrlParams, RoleGroup, RoleGroupsContainer} from '../ProxiesImpl/RoleGroup';\n\nimport {SystemNodeTypeSelector} from './NodeTypeSelector';\n\nimport './Nodes.scss';\n\nconst block = cn('system-nodes');\n\nconst STATE_THEME_MAPPING = {\n alerts: 'warning',\n full: 'danger',\n} as const;\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nfunction RackGroup({\n name: groupName,\n data: roleGroup,\n counters,\n makeComponentNodesUrl,\n makeRoleGroupUrl,\n}: {\n name: string;\n data: Array<RoleGroupInfo>;\n counters: NodesProps['counters'];\n makeComponentNodesUrl: typeof makeComponentsNodesLink;\n makeRoleGroupUrl: (params?: MakeUrlParams) => string;\n}) {\n const [expandAll, setExpandAll] = useState(false);\n\n const headingCN = cn('elements-heading')({\n size: 's',\n overview: 'yes',\n });\n\n return (\n <div key={groupName} className={block()}>\n <div className={block('group-summary', headingCN)}>\n <Link\n theme=\"primary\"\n url={makeComponentsNodesLink({\n rackFilter: groupName,\n })}\n >\n {groupName}\n </Link>\n <ExpandButton\n className={block('expand-btn')}\n expanded={expandAll}\n toggleExpanded={() => setExpandAll(!expandAll)}\n all\n showText\n />\n <SystemStateOverview\n counters={counters?.[groupName]}\n stateThemeMappings={STATE_THEME_MAPPING}\n tab=\"nodes\"\n makeUrl={(params) => {\n return makeComponentNodesUrl({\n rackFilter: groupName,\n ...params,\n });\n }}\n />\n </div>\n <RoleGroupsContainer>\n {map_(roleGroup, (group) => {\n return (\n <RoleGroup\n key={group.name}\n data={group}\n makeUrl={makeRoleGroupUrl}\n showFlags\n forceExpand={expandAll}\n />\n );\n })}\n </RoleGroupsContainer>\n </div>\n );\n}\n\ntype NodesProps = ReduxProps;\n\nconst Nodes = (props: NodesProps) => {\n const onToggle = () => {\n const {collapsed} = props;\n props.setSettingsSystemNodesCollapsed(!collapsed);\n };\n\n const {nodeType, cluster} = props;\n\n const makeRoleGroupUrl = (params?: MakeUrlParams) => {\n const {name, state: s, flag: f} = params ?? {};\n\n const stateAsOthers = s === 'others' ? '!online,!offline' : undefined;\n const state = s === 'online' || s === 'offline' ? s : stateAsOthers;\n\n const flags = s === 'banned' ? ['banned' as const] : [f, '!banned' as const];\n\n const p: ComponentsNodesLinkParams = {\n cluster,\n rackSelected: name ? [name] : undefined,\n nodeTypes: nodeType,\n state,\n };\n\n flags.forEach((flag) => {\n if (flag === '!banned') {\n Object.assign(p, {banned: 'disabled'});\n } else if (flag) {\n Object.assign(p, {[flag]: 'enabled'});\n }\n });\n\n return makeComponentsNodesLink(p);\n };\n\n const makeComponentNodesUrl: typeof makeComponentsNodesLink = (params) => {\n return makeComponentsNodesLink({cluster, nodeTypes: nodeType, ...params});\n };\n\n const renderOverview = () => {\n const {overviewCounters} = props;\n\n return (\n <React.Fragment>\n <div className={block('node-type')}>\n <SystemNodeTypeSelector />\n </div>\n <SystemStateOverview\n counters={overviewCounters}\n stateThemeMappings={STATE_THEME_MAPPING}\n tab=\"nodes\"\n />\n </React.Fragment>\n );\n };\n\n const renderContent = () => {\n const {roleGroups} = props;\n\n const rackNames = Object.keys(roleGroups ?? {});\n\n if (!roleGroups || !rackNames.length) {\n return (\n <NoContent\n warning={\n !nodeType.length\n ? undefined\n : `There are no ${nodeType.map(format.ReadableField).join(',')}`\n }\n hint={'Try to select another node type'}\n />\n );\n }\n\n const {counters} = props;\n\n return map_(roleGroups, (roleGroup, groupName) => {\n return (\n <RackGroup\n name={groupName}\n data={roleGroup}\n counters={counters}\n makeRoleGroupUrl={makeRoleGroupUrl}\n makeComponentNodesUrl={makeComponentNodesUrl}\n />\n );\n });\n };\n\n const renderImpl = () => {\n const {roleGroups, loaded, collapsed} = props;\n\n if (!loaded && !roleGroups) {\n return null;\n }\n\n return (\n <StickyContainer>\n {({topStickyClassName}) => (\n <CollapsibleSectionStateLess\n overview={renderOverview()}\n headingClassName={topStickyClassName}\n collapsed={collapsed}\n onToggle={onToggle}\n name={'Nodes'}\n size={UI_COLLAPSIBLE_SIZE}\n >\n {renderContent()}\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n };\n\n return (\n <React.Fragment>\n <NodesUpdater />\n {renderImpl()}\n </React.Fragment>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n const {roleGroups, counters, loaded, overviewCounters} = state.system.nodes;\n\n return {\n cluster: getCluster(state),\n loaded,\n counters,\n overviewCounters,\n collapsed: getSettingsSystemNodesCollapsed(state),\n nodeType: getSettingSystemNodesNodeType(state),\n roleGroups,\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemNodesCollapsed,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nfunction NodesUpdater() {\n const dispatch = useThunkDispatch();\n\n const nodeTypes = useSelector(getSystemNodesNodeTypesToLoad);\n const params = useMemoizedIfEqual(nodeTypes);\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemNodes(...params)).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch, params]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nexport default connector(Nodes);\n","import React, {FC} from 'react';\nimport Resources from '../Resources/Resources';\nimport Masters from '../Masters/Masters';\nimport SchedulersAndAgents from '../SchedulersAndAgents/SchedulersAndAgents';\nimport Chunks from '../Chunks/Chunks';\nimport Proxies from '../HttpProxies/HttpProxies';\nimport RpcProxies from '../RpcProxies/RpcProxies';\nimport Nodes from '../Nodes/Nodes';\n\nexport const SystemGeneralTab: FC = () => {\n return (\n <>\n <Resources />\n <Masters />\n <SchedulersAndAgents />\n <Chunks />\n <Proxies />\n <RpcProxies />\n <Nodes />\n </>\n );\n};\n","export const SystemTabs = {\n GENERAL: 'general',\n MONITORING: 'monitoring',\n};\n","import React, {FC, PropsWithChildren, useMemo} from 'react';\nimport './System.scss';\nimport {SystemGeneralTab} from './SystemGeneralTab';\nimport UIFactory from '../../../UIFactory';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {Redirect, Route, Switch} from 'react-router';\nimport {SystemTabs} from '../../../constants/system/tabs';\nimport {getSystemTabItems} from './helpers/getSystemTabItems';\nimport {getCluster} from '../../../store/selectors/global';\nimport {useSelector} from 'react-redux';\n\nconst Wrap: FC<PropsWithChildren> = ({children}) => {\n return (\n <div className=\"elements-page__content\">\n <div className={'elements-main-section system'}>{children}</div>\n </div>\n );\n};\n\ntype Props = {\n match: {\n path: string;\n url: string;\n };\n};\n\nexport const System: FC<Props> = ({match}) => {\n const cluster = useSelector(getCluster);\n const systemMonitoringTab = UIFactory.getSystemMonitoringTab();\n\n const items = useMemo(() => {\n return getSystemTabItems({url: match.url, tabSettings: systemMonitoringTab, cluster});\n }, [match.url, systemMonitoringTab, cluster]);\n\n if (!systemMonitoringTab) {\n return (\n <Wrap>\n <SystemGeneralTab />\n </Wrap>\n );\n }\n\n return (\n <Wrap>\n <Tabs items={items} active={SystemTabs.GENERAL} size={UI_TAB_SIZE} routed underline />\n <Switch>\n <Route path={`${match.path}/${SystemTabs.GENERAL}`} component={SystemGeneralTab} />\n {'component' in systemMonitoringTab && (\n <Route\n path={`${match.path}/${SystemTabs.MONITORING}`}\n component={systemMonitoringTab.component}\n />\n )}\n <Redirect to={`${match.path}/${SystemTabs.GENERAL}`} />\n </Switch>\n </Wrap>\n );\n};\n","import {TabItem} from '../../../../components/Tabs/Tabs';\nimport {SystemTabs} from '../../../../constants/system/tabs';\nimport {UIFactory} from '../../../../UIFactory';\nimport {formatByParams} from '../../../../utils/format';\n\ntype Props = (data: {\n url: string;\n tabSettings: ReturnType<UIFactory['getSystemMonitoringTab']>;\n cluster: string;\n}) => TabItem[];\n\nexport const getSystemTabItems: Props = ({url, tabSettings, cluster}) => {\n if (!tabSettings) return [];\n\n const result: TabItem[] = [\n {\n value: SystemTabs.GENERAL,\n text: 'General',\n url: `${url}/${SystemTabs.GENERAL}`,\n show: true,\n },\n ];\n\n if ('urlTemplate' in tabSettings) {\n result.push({\n value: 'link',\n text: tabSettings.title || 'Monitoring',\n show: true,\n url: formatByParams(tabSettings.urlTemplate, {ytCluster: cluster}),\n routed: false,\n external: true,\n });\n } else {\n result.push({\n value: SystemTabs.MONITORING,\n text: tabSettings.title || 'Monitoring',\n url: `${url}/${SystemTabs.MONITORING}`,\n show: true,\n });\n }\n\n return result;\n};\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;","const SvgPencil = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M11.423 1A3.577 3.577 0 0 1 15 4.577c0 .27-.108.53-.3.722l-.528.529-1.971 1.971-5.059 5.059a3 3 0 0 1-1.533.82l-2.638.528a1 1 0 0 1-1.177-1.177l.528-2.638a3 3 0 0 1 .82-1.533l5.059-5.059 2.5-2.5c.191-.191.451-.299.722-.299m-2.31 4.009-4.91 4.91a1.5 1.5 0 0 0-.41.766l-.38 1.903 1.902-.38a1.5 1.5 0 0 0 .767-.41l4.91-4.91a2.08 2.08 0 0 0-1.88-1.88Zm3.098.658a3.6 3.6 0 0 0-1.878-1.879l1.28-1.28c.995.09 1.788.884 1.878 1.88l-1.28 1.28Z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgPencil;","import { useReducer } from 'react';\nvar toggleReducer = function (state, nextValue) {\n return typeof nextValue === 'boolean' ? nextValue : !state;\n};\nvar useToggle = function (initialValue) {\n return useReducer(toggleReducer, initialValue);\n};\nexport default useToggle;\n"],"names":["AttributesButton","_ref","_ref$view","view","_ref$size","size","rest","_objectWithoutProperties","_excluded","_jsx","Button","_objectSpread","children","Icon","awesome","ElementsTableFooter","_Component","_inherits","_super","_createSuper","props","_this","_classCallCheck","call","state","_createClass","key","value","item","index","arguments","length","undefined","_this$props","this","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","block","ELEMENTS_TABLE","footer","className","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","Component","defaultProps","_WithStickyFooter","_React$Component","WithStickyFooter","apply","bWrapper","sticky","prepareTableClassName","_jsxs","React","renderStickyFooter","displayName","concat","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","connect","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","theme","padded","striped","HEADER_HEIGHT","xmlns","fill","viewBox","fillRule","d","clipRule","cn","ExpandButton","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","title","onClick","data","doubleShevronRightSvg","shevronRightSvg","ICON_BY_TYPE","_ICON_BY_TYPE","_defineProperty","SortIcon","_len","args","Array","_key","order","onChange","allowUnordered","withUndefined","nextSortOrderValue","_this$props2","label","hidden","icon","Tooltip","content","format","ReadableField","face","AppStoreProvider","Provider","store","getWindowStore","ErrorBoundary","SystemTopRowContent","RowWithName","page","Page","SYSTEM","CreateClusterNotificationButton","clusterConfig","useSelector","getCurrentClusterConfig","CreateNotificationButton","url","UIFactory","createNotificationUrl","href","target","formatNumber","hammer","Number","formatBytes","Bytes","b","Resources","resources","usage","resource_usage","limits","resource_limits","caption","text","cpu","progress","user_memory","gpu","nodeAttributes","mediumList","diskResourcesPerMedium","availableSpacePerMedium","available_space_per_medium","usedSpacePerMedium","used_space_per_medium","forEach_","medium","available","used","total","progressText","progressValue","push","show","fullNodeCount","full_node_count","fullNodePercentage","online_node_count","Block","type","message","toFixed","entries","map","Progress","headingCN","prepareResources","diskResources","prepareDiskResources","showResources","showDiskResources","diskResourcesCN","renderFullNodesMessage","renderResources","ResourcesUpdater","renderImpl","dispatch","useThunkDispatch","updateFn","allowUpdate","loadSystemResources","then","isRetryFutile","useUpdater","_state$system$resourc","system","getMediumList","setSetting","hostType","getMastersHostType","evt","SettingName","MASTERS_HOST_TYPE","NAMESPACES","RadioButton","name","mastersRadioButtonItems","SystemCounters","params","makeUrl","cluster","tab","isEmptyParams","Object","keys","qs","isNaN","renderLinks","prepareUrl","_Fragment","Link","counters","stateThemeMappings","map_","flags","flag","flagName","renderCounter","formatCounterName","_this2","_this$props3","states","stateName","countersFlags","renderCountersFlags","countersStates","renderCountersStates","counterTotal","renderCounterTotal","getCluster","SystemStateLabels","labels","Flex","gap","_ref2","Label","SystemStateOverview","stateOverview","_this$props$stateOver","stack","computeEffectiveStateProgress","SwitchLeaderShortInfo","startTime","useRef","moment","_useState","useState","_useState2","_slicedToArray","currentTime","setCurrentTime","_useState3","_useState4","finishTime","setFinishTime","useDispatch","updateCurrentTime","timeout","forceAutoRefresh","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","abrupt","getStateForHost","newLeaderPath","sent","loadMasters","stop","MetaTable","TimeDuration","diff","current","SwitchLeaderShortInfoStatus","SwitchLeaderDialog","error","setError","selectLeadingHostOptions","hosts","host","path","getPath","split","pop","leader","find","leaderPath","YTDFDialog","visible","headerProps","cellId","initialValues","leading_primary_master","fields","required","extras","options","placeholder","width","filterable","_toConsumableArray","makeErrorFields","footerProps","textApply","onAdd","form","getState","values","confirm","e","onClose","cancel","pristineSubmittable","SwitchLeaderButton","setVisible","handleConfirm","_ref3","leaderAddress","switchLeader","ytApiV4Id","YTApiId","cell_id","new_leader_address","wrapApiPromiseByToaster","toasterName","successContent","successTitle","autoHide","_x","withTooltip","tooltipProps","NodeQuad","_ref$theme","_ref$children","banned","alerts","decommissioned","full","effectiveTheme","stroke","reShortNameSystemPage","makeRegexpFromSettings","uiSettings","makeShortSystemAddress","address","_res$groups","res","exec","groups","shortname","ChangeMaintenanceButton","container","maintenance","maintenanceMessage","onMaintenanceChange","_useToggle","useToggle","_useToggle2","toggleVisible","handleMaintenanceChange","_form$getState","t0","disabled","PencilIcon","instanceStateToTheme","active","connected","leading","disconnected","following","follower_recovery","leader_recovery","standby","elections","stopped","unknown","online","offline","Instance","instance","allowVoting","allowService","$address","$physicalAddress","attributes","$attributes","getMaintenance","getMaintenanceMessage","voting","denyVoting","addressWithoutPort","handleOnMaintenanceChange","useCallback","changeMasterMaintenance","shortName","read_only","ReadOnlyIcon","height","warming_up","WarmUpIcon","ClipboardButton","Text","color","MasterGroup","quorum","cellTag","instances","status","quorumTitle","leaderCommitedVersion","cellTitle","Fragment","delimiter","gridRowStart","renderQuorum","SystemAlert","selectMasterAlerts","alert","id","Alert","StickyContainer","_ref$topOffset","topOffset","_React$useState","_React$useState2","setSticky","_React$useState3","_React$useState4","element","setElement","observer","_topOffset","IntersectionObserver","intersectionRatio","threshold","rootMargin","observe","unobserve","onRef","div","ref","topStickyClassName","computeStateProgress","sortStateProgress","count","Masters","onToggle","setSettingsSystemMastersCollapsed","collapsed","renderMastersGroups","masters","master","_providers$instances","_discovery$instances","_queueAgents$instance","secondary","providers","discovery","queueAgents","groupsCount","VisibleHostTypeRadioButton","_providers$instances2","_discovery$instances2","_queueAgents$instance2","_providers$instances3","_discovery$instances3","_queueAgents$instance3","primary","fitIntoSection","mastersFitIntoSection","secondaryGroups","Boolean","renderSection","heading","alertsCount","renderMasterTypeSwitcher","unavailable","recovery","counterGroup","_this$props4","initialized","collapsibleSize","renderContent","overview","renderOverview","CollapsibleSectionStateLess","headingClassName","renderAlerts","MastersUpdater","_state$system$masters","UI_COLLAPSIBLE_SIZE","getSettingsSystemMastersCollapsed","getSystemSchedulersWithState","createSelector","schedulersAndAgents","schedulers","VisibleHostType","sheduler","connectedHost","ypath","connectedSchedulersToState","physicalHost","getSystemAgentsWithState","agents","agent","connectedAgentsToState","getSystemSchedulerAndAgentCounters","schedulersWithState","agentsWithState","statefulHosts","numberOf","extractAgentsCounters","getSystemSchedulerAndAgentAlerts","schedulerAlerts","agentAlerts","reduce_","acc","toaster","Toaster","loadSchedulersAndAgents","FETCH_SCHEDULERS","REQUEST","Promise","ytApiV3Id","list","systemSchedulers","USE_SUPRESS_SYNC","requests","command","parameters","executeBatch","systemSchedulersState","outputs","splitBatchResults","getSchedulersState","sortBy_","systemCAInstances","basePath","systemCAStates","getAgentsState","_ref2$","_ref2$2","SUCCESS","_error$response","FAILURE","response","code","add","autoHiding","actions","showErrorPopup","changeSchedulerMaintenance","getSate","login","result","getCurrentUserName","changeMaintenance","getBatchError","_x2","Scheduler","formatedAddress","SchedulersAndAgents","setSettingsSystemSchedulersCollapsed","connectedHosts","objects","rows","Math","min","ceil","gridTemplateRows","justifyContent","containerStyle","marginRight","renderHosts","tags","_alerts$schedulers","_alerts$agents","schedulersAlertsLength","agentsAlertsLength","isEmpty_","withAlerts","prepareTags","SchedulersAndAgentsUpdater","getSettingsSystemSchedulersCollapsed","ElementsTable","withStickyHead","withStickyFooter","ElementsTableBase","Chunks","setSettingsSystemChunksCollapsed","types","get","cellData","_formatChunkName","align","sort","cell_tag","replication","sealer","refresh","requisitionUpdate","cells","_partition_","partition_","_partition_2","_prepareColumns","sortedCells","utils","tableSettings","tableId","SYSTEM_CHUNKS_TABLE_ID","sets","default","_prepareColumnSet","header","table","assign","mode","totalRow","countersBlock","lost_vital_chunks","data_missing_chunks","parity_missing_chunks","chunks","quorum_missing_chunks","lvc","_formatChunkCount","dmc","pmc","qmc","renderLabels","ChunksUpdater","substring","filter_","unshift","allowRetry","loadChunks","_state$system$chunks","getSettingsSystemChunksCollapsed","extractRoleGroups","proxies","roleGroups","roles","proxy","roleName","role","effectiveStates","incrementCounters","values_","MAIN_STATES","Set","getNodeffectiveState","has","incrementStateCounter","k","extractProxyCounters","each_","effectiveState","makeProxyInfo","dead","GridWithMediaMinWidth","itemClassName","_ref$maxWidth","maxWidth","itemMinWidth","_ref$itemMaxWidth","itemMaxWidth","_ref$gap","asideHeaderWidth","getGlobalAsideHeaderWidth","_React$useMemo","guid","pagePadding","i","calcMinWidth","columnsCount","minWidth","nextMinWidth","mediaMaxWidthCondition","from","join","inlineClassName","inlineStyle","filter","COLORS_BY_STATUS","ONLINE","OFFLINE","BANNED","OTHER","FULL","StatsInfo","alertNumber","alertCount","decNumber","decCount","alertsUrl","decUrl","alertsValue","decValue","remaining","colors","addProgressStackSpacers","calculateStack","CountUrl","variant","TextCountUrl","RoleGroupsContainer","RoleGroup","_data$items","forceExpand","_counters$effectiveSt","_counters$effectiveSt2","_counters$effectiveSt3","_counters$effectiveSt4","other","_counters$flags","_counters$flags$banne","_counters$flags$full","_counters$flags$alert","alerts_online","_counters$flags$alert2","alerts_offline","_counters$flags$alert3","alerts_banned","_counters$flags$dec_o","dec_offline","_counters$flags$dec_o2","dec_online","_counters$flags$dec_b","dec_banned","setExpanded","useEffect","nameUrl","alignItems","direction","Cube","fontWeight","grow","ProxiesImpl","onToggleCollapsed","expandRacks","setExpandRacks","togglerRightPadding","hideOthers","bannedAsState","Proxies","setSettingsSystemHttpProxiesCollapsed","makeRoleGroupUrl","URLSearchParams","append","ProxiesUpdater","axios","request","method","FETCH_PROXIES","_state$system$proxies","loaded","getSettingsSystemHttpProxiesCollapsed","RpcProxies","setSettingsSystemRpcProxiesCollapsed","RpcProxiesUpdater","FETCH_RPC_PROXIES","systemRpcProxies","rpcProxies","getValue","_state$system$rpcProx","getSettingsSystemRpcProxiesCollapsed","loadSystemNodes","nodeTypes","SYSTEM_FETCH_NODES","suppress_transaction_coordinator_sync","suppress_upstream_sync","USE_MAX_SIZE","nodeType","USE_CACHE","systemNodes","_splitBatchResults","results","_toArray","racks","rackNames","nodes","rackA","rackB","compareVectors","UNAWARE","prepareRackNames","empty","createRack","nodeA","nodeB","$value","prepareNodes","node","rackName","getBoolean","effectiveFlag","rack","hasOwnProperty","insertNodeToRack","prepareRacks","slice","reduce","overviewCounters","extractNodeCounters","_groupRacks","groupedRacks","groupName","forEach","dcName","rackGroup","startsWith","every","rackGroups","groupRacks","prepareRoleGroups","increaseFlagCounter","dst","attrs","_node$$attributes2","_node$$attributes","info","isStateOnlineOffline","toAdd","g","STATE_THEME_MAPPING","RackGroup","roleGroup","makeComponentNodesUrl","expandAll","setExpandAll","makeComponentsNodesLink","rackFilter","group","showFlags","setSettingsSystemNodesCollapsed","NodesUpdater","getSystemNodesNodeTypesToLoad","useMemoizedIfEqual","_state$system$nodes","getSettingsSystemNodesCollapsed","getSettingSystemNodesNodeType","s","f","p","rackSelected","NoContent","warning","hint","SystemNodeTypeSelector","SystemGeneralTab","Nodes","SystemTabs","Wrap","System","match","systemMonitoringTab","getSystemMonitoringTab","useMemo","tabSettings","formatByParams","urlTemplate","ytCluster","routed","external","getSystemTabItems","Tabs","UI_TAB_SIZE","underline","Switch","Route","component","Redirect","to","tabletCellBundleDashboardUrl","bundle","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","prefix","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","changelog_account","snapshot_account","sortTableBundles","bundles","column","columnsSortable","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes","reverse","toggleReducer","nextValue","initialValue","useReducer"],"sourceRoot":""}
|