@ytsaurus/ui 1.64.0 → 1.65.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/README.md +7 -0
- package/dist/public/build/assets-manifest.json +37 -37
- package/dist/public/build/css/{577.b41224cd.chunk.css → 577.f8556dcc.chunk.css} +2 -2
- package/dist/public/build/css/577.f8556dcc.chunk.css.map +1 -0
- package/dist/public/build/css/{cluster-menu.1242e46d.chunk.css → cluster-menu.d8cafef3.chunk.css} +2 -2
- package/dist/public/build/css/cluster-menu.d8cafef3.chunk.css.map +1 -0
- package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css +2 -0
- package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css.map +1 -0
- package/dist/public/build/css/main.fb5dcfa3.css +10 -0
- package/dist/public/build/css/{main.b2af1626.css.map → main.fb5dcfa3.css.map} +1 -1
- package/dist/public/build/js/2081.b642c3c2.chunk.js +2 -0
- package/dist/public/build/js/{2081.56ca6548.chunk.js.map → 2081.b642c3c2.chunk.js.map} +1 -1
- package/dist/public/build/js/4016.37d0a2f0.chunk.js +3 -0
- package/dist/public/build/js/4016.37d0a2f0.chunk.js.map +1 -0
- package/dist/public/build/js/{6729.91ef11dc.chunk.js → 6729.6403cc56.chunk.js} +2 -2
- package/dist/public/build/js/6729.6403cc56.chunk.js.map +1 -0
- package/dist/public/build/js/{7077.7dab612c.chunk.js → 7077.fb18710a.chunk.js} +2 -2
- package/dist/public/build/js/7077.fb18710a.chunk.js.map +1 -0
- package/dist/public/build/js/acl.19d28cd7.chunk.js +2 -0
- package/dist/public/build/js/acl.19d28cd7.chunk.js.map +1 -0
- package/dist/public/build/js/{cluster-page-wrapper.eddde18f.chunk.js → cluster-page-wrapper.697b0741.chunk.js} +2 -2
- package/dist/public/build/js/cluster-page-wrapper.697b0741.chunk.js.map +1 -0
- package/dist/public/build/js/job.bddddc9e.chunk.js +2 -0
- package/dist/public/build/js/job.bddddc9e.chunk.js.map +1 -0
- package/dist/public/build/js/main.5d8871a8.js +3 -0
- package/dist/public/build/js/main.5d8871a8.js.map +1 -0
- package/dist/public/build/js/navigation-flow.c43f2927.chunk.js +2 -0
- package/dist/public/build/js/navigation-flow.c43f2927.chunk.js.map +1 -0
- package/dist/public/build/js/navigation.e4272357.chunk.js +2 -0
- package/dist/public/build/js/navigation.e4272357.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.7752c183.js → runtime.8fed68b1.js} +2 -2
- package/dist/public/build/js/{runtime.7752c183.js.map → runtime.8fed68b1.js.map} +1 -1
- package/dist/public/build/js/system.92b7afc7.chunk.js +2 -0
- package/dist/public/build/js/system.92b7afc7.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +32 -32
- package/dist/public/favicon-dorn-yellow.png +0 -0
- package/dist/public/favicon-rubber.png +0 -0
- package/dist/server/configs/e2e/local.js +4 -0
- package/package.json +2 -2
- package/dist/public/build/css/577.b41224cd.chunk.css.map +0 -1
- package/dist/public/build/css/cluster-menu.1242e46d.chunk.css.map +0 -1
- package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css +0 -2
- package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css.map +0 -1
- package/dist/public/build/css/main.b2af1626.css +0 -10
- package/dist/public/build/js/2081.56ca6548.chunk.js +0 -2
- package/dist/public/build/js/4016.03291f63.chunk.js +0 -3
- package/dist/public/build/js/4016.03291f63.chunk.js.map +0 -1
- package/dist/public/build/js/6729.91ef11dc.chunk.js.map +0 -1
- package/dist/public/build/js/7077.7dab612c.chunk.js.map +0 -1
- package/dist/public/build/js/acl.cd1fe761.chunk.js +0 -2
- package/dist/public/build/js/acl.cd1fe761.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.eddde18f.chunk.js.map +0 -1
- package/dist/public/build/js/job.31c91355.chunk.js +0 -2
- package/dist/public/build/js/job.31c91355.chunk.js.map +0 -1
- package/dist/public/build/js/main.693c4cb1.js +0 -3
- package/dist/public/build/js/main.693c4cb1.js.map +0 -1
- package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js +0 -2
- package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js.map +0 -1
- package/dist/public/build/js/navigation.c8c7b9cc.chunk.js +0 -2
- package/dist/public/build/js/navigation.c8c7b9cc.chunk.js.map +0 -1
- package/dist/public/build/js/system.57ed0f9d.chunk.js +0 -2
- package/dist/public/build/js/system.57ed0f9d.chunk.js.map +0 -1
- /package/dist/public/build/js/{4016.03291f63.chunk.js.LICENSE.txt → 4016.37d0a2f0.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.693c4cb1.js.LICENSE.txt → main.5d8871a8.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"js/system.92b7afc7.chunk.js","mappings":"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","sources":["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/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/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/NodeQuad/NodeQuad.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/store/actions/system/index.js","webpack://@ytsaurus/ui/./src/ui/store/actions/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/ChangeMaintenanceButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/helpers/makeShortSystemAddress.ts","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/pages/system/Masters/Masters.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, {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';\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","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 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","import React, {useEffect, 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';\n\nconst block = cn('switch-leader-short-info');\n\ninterface Props {\n newLeaderAddress: 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 useEffect(() => {\n const intervalId = setInterval(() => {\n setCurrentTime(moment());\n\n if (finishTime) {\n clearInterval(intervalId);\n }\n }, 1 * 1000);\n\n return () => {\n clearInterval(intervalId);\n };\n }, []);\n\n useEffect(() => {\n let stillMounted = true;\n\n const waitForState = async () => {\n try {\n const hostState = await getStateForHost(props.newLeaderAddress);\n\n if (hostState === 'leading') {\n setFinishTime(moment());\n dispatch(loadMasters());\n }\n } catch {\n if (stillMounted) {\n waitForState();\n }\n }\n };\n\n waitForState();\n\n return () => {\n stillMounted = false;\n };\n }, [props.newLeaderAddress]);\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: string[];\n leadingHost: string;\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 return {\n value: host,\n content: host,\n };\n });\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: [props.leadingHost],\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: string[];\n leadingHost: string;\n};\n\nexport const SwitchLeaderButton = ({\n cellId,\n hosts,\n leadingHost,\n className,\n}: SwitchLeaderButtonProps) => {\n const [visible, setVisible] = useState(false);\n\n const handleClick = () => {\n setVisible(true);\n };\n\n const handleConfirm = async (newLeader: string) => {\n const switchLeader = () => {\n return ytApiV4Id.switchLeader(YTApiId.switchLeader, {\n cell_id: cellId,\n new_leader_address: newLeader,\n });\n };\n\n wrapApiPromiseByToaster(switchLeader(), {\n toasterName: 'switch-leader',\n successContent() {\n return (\n <AppStoreProvider>\n <SwitchLeaderShortInfo newLeaderAddress={newLeader} />\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 <SwitchLeaderDialog\n cellId={cellId}\n hosts={hosts}\n leadingHost={leadingHost}\n confirm={handleConfirm}\n cancel={handleCancel}\n visible={visible}\n />\n </React.Fragment>\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';\nimport {getSystemAgents, getSystemSchedulers} from '../../selectors/system/schedulers';\nimport {getMastersHostType} from '../../selectors/settings';\nimport {VisibleHostType} from '../../../constants/system/masters';\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 ({address, maintenance, message, type}) =>\n async (dispatch, getSate) => {\n const state = getSate();\n const isAgent = type === 'agents';\n const items = isAgent ? getSystemAgents(state) : getSystemSchedulers(state);\n const hostType = getMastersHostType(state);\n\n const master = items.find((i) => {\n const host = i.host.$value;\n const annotations = ypath.getValue(i.host, '/@annotations');\n const addressByType =\n hostType === VisibleHostType.host ? host : annotations.physical_host;\n return addressByType === address;\n });\n\n if (!master) throw new Error('Cant find master by address');\n\n const login = getCurrentUserName(getSate());\n const result = await changeMaintenance({\n path: `//sys/${isAgent ? 'controller_agents' : 'scheduler'}/instances/${master.host.$value}`, //controller_agents\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 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 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 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 {host: 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 {host: 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 React, {FC, useCallback, useState} from 'react';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport {changeMasterMaintenance} from '../../../store/actions/system/masters';\nimport {changeSchedulerMaintenance} from '../../../store/actions/system/schedulers';\nimport {useDispatch} from 'react-redux';\nimport PencilIcon from '@gravity-ui/icons/svgs/pencil.svg';\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport hammer from '../../../common/hammer';\nimport {useToggle} from 'react-use';\n\ntype Props = {\n className?: string;\n address: string;\n maintenance: boolean;\n maintenanceMessage: string;\n type: 'master' | 'scheduler' | 'agent';\n};\n\ntype FormData = {maintenance: string; message: string};\n\nexport const ChangeMaintenanceButton: FC<Props> = ({\n className,\n maintenance,\n maintenanceMessage,\n type,\n address,\n}) => {\n const [error, setError] = useState<Error | undefined>(undefined);\n const [visible, toggleVisible] = useToggle(false);\n const dispatch = useDispatch();\n\n const handleMaintenanceChange = useCallback(\n async (form: FormApi<FormData>) => {\n const {values} = form.getState();\n const action = type === 'master' ? changeMasterMaintenance : changeSchedulerMaintenance;\n try {\n await dispatch(\n action({\n address,\n message: values.message,\n maintenance: values.maintenance === 'enabled',\n type,\n }),\n );\n setError(undefined);\n } catch (e) {\n setError(e as Error);\n throw e as Error;\n }\n },\n [address, dispatch, type],\n );\n\n const handleOnClose = () => {\n toggleVisible();\n setError(undefined);\n };\n\n return (\n <>\n <YTDFDialog<FormData>\n pristineSubmittable\n headerProps={{\n title: `Edit ${hammer.format['Address'](address)}`,\n }}\n initialValues={{\n maintenance: maintenance ? 'enabled' : 'disabled',\n message: maintenanceMessage,\n }}\n fields={[\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 {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, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\nimport {Flex, Text} from '@gravity-ui/uikit';\n\nimport ReadOnlyIcon from '../../../assets/img/svg/read-only-icon.svg';\nimport WarmUpIcon from '../../../assets/img/svg/warmup-icon.svg';\nimport hammer from '../../../common/hammer';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getMastersHostType} from '../../../store/selectors/settings';\nimport ypath from '../../../common/thor/ypath';\nimport Icon from '../../../components/Icon/Icon';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport NodeQuad from '../NodeQuad/NodeQuad';\nimport {SwitchLeaderButton} from './SwitchLeader';\n\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\n\nimport './MasterGroup.scss';\nimport {ChangeMaintenanceButton} from './ChangeMaintenanceButton';\nimport {makeShortSystemAddress} from '../helpers/makeShortSystemAddress';\n\nconst b = block('master-group');\n\nclass Instance extends Component {\n static instanceStateToTheme = {\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\n static propTypes = {\n state: PropTypes.oneOf(keys_(Instance.instanceStateToTheme)),\n address: PropTypes.string.isRequired,\n attributes: PropTypes.shape({\n warming_up: PropTypes.bool,\n read_only: PropTypes.bool,\n voting: PropTypes.bool,\n }),\n maintenance: PropTypes.bool,\n maintenanceMessage: PropTypes.string,\n allowVoting: PropTypes.bool,\n allowService: PropTypes.bool,\n };\n\n render() {\n const {\n state,\n address,\n attributes,\n maintenance,\n maintenanceMessage,\n allowVoting,\n allowService,\n } = this.props;\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 =\n denyVoting && state === 'following'\n ? 'nonvoting'\n : Instance.instanceStateToTheme[state];\n const addressWithoutPort = hammer.format['Address'](address);\n\n /* eslint-disable camelcase */\n return (\n <Fragment>\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\n className={b('icon-maintenance')}\n awesome=\"digging\"\n face=\"solid\"\n />\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')}>\n {makeShortSystemAddress(addressWithoutPort) || addressWithoutPort}\n </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 address={address}\n maintenance={maintenance}\n maintenanceMessage={maintenanceMessage}\n type=\"master\"\n />\n )}\n {\n <Text className={b('nonvoting', {show: denyVoting})} color=\"secondary\">\n [nonvoting]\n </Text>\n }\n </Flex>\n </div>\n </Fragment>\n );\n /* eslint-enable camelcase */\n }\n}\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 let leadingHost = '';\n const hosts = instances.map(({$address, state}) => {\n if (state === 'leading') {\n leadingHost = $address;\n }\n\n return $address;\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 && (\n <SwitchLeaderButton\n cellId={cellId}\n hosts={hosts}\n leadingHost={leadingHost}\n />\n )}\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_(\n instances,\n ({state, $address, $physicalAddress, $attributes, $rowAddress}) => {\n const address = hostType === 'host' ? $address : $physicalAddress;\n const maintenance = ypath.getValue($rowAddress, '/attributes/maintenance');\n const maintenanceMessage = maintenance\n ? ypath.getValue($rowAddress, '/attributes/maintenance_message') ||\n 'Maintenance'\n : '';\n return (\n <Instance\n key={$address}\n address={address}\n state={state}\n attributes={$attributes}\n maintenanceMessage={maintenanceMessage}\n maintenance={maintenance}\n allowVoting={allowVoting}\n allowService={allowService}\n />\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, {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-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';\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}>\n Primary Masters\n {this.renderMasterTypeSwitcher()}\n </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}>\n Timestamp providers\n {this.renderMasterTypeSwitcher()}\n </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}>\n Discovery servers\n {this.renderMasterTypeSwitcher()}\n </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}>\n Queue agents\n {this.renderMasterTypeSwitcher()}\n </div>\n <MasterGroup {...queueAgents} allowService />\n </React.Fragment>\n )}\n </div>\n ) : (\n <div>\n <div className={headingCN}>\n Primary Masters\n {this.renderMasterTypeSwitcher()}\n </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 <SystemStateOverview\n tab=\"masters\"\n labels={labels}\n counters={counters}\n stateThemeMappings={stateThemeMappings}\n stateOverview={stateOverview}\n counterGroup={counterGroups}\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 <CollapsibleSectionStateLess\n name={'Masters'}\n overview={overview}\n collapsed={collapsed}\n onToggle={this.onToggle}\n size={collapsibleSize}\n >\n {this.renderAlerts()}\n {content}\n </CollapsibleSectionStateLess>\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 React 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';\n\nconst b = block('system');\n\nexport type SchedulerProps = {\n host?: string;\n state: 'active' | 'connected' | 'standby' | 'disconnected' | 'offline';\n maintenanceMessage?: React.ReactNode;\n type: 'scheduler' | 'agent';\n};\nexport default function Scheduler({host, state, maintenanceMessage, type}: SchedulerProps) {\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 address = hammer.format['Address'](host);\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={address} className={b('scheduler-host')}>\n <Tooltip content={address}>\n <div className={b('scheduler-host-address')}>\n {makeShortSystemAddress(address) || address}\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 address={host!}\n maintenance={Boolean(maintenanceMessage)}\n maintenanceMessage={maintenanceMessage as string}\n type={type}\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 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-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_(connectedHosts, ({host, state, maintenanceMessage}, index) => {\n return (\n <Scheduler\n key={host ?? index}\n host={host}\n state={state}\n maintenanceMessage={maintenanceMessage}\n type={name}\n />\n );\n });\n }\n\n renderSection(name, heading, showHostTypeButton) {\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}>\n {heading}\n {showHostTypeButton && (\n <VisibleHostTypeRadioButton className={b('container-host-radio')} />\n )}\n </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 <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 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 <CollapsibleSectionStateLess\n name=\"Schedulers and controller agents\"\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 && this.renderSection('schedulers', 'Schedulers', true)}\n {agents.length > 0 &&\n this.renderSection('agents', 'Controller agents', schedulers.length === 0)}\n </div>\n </CollapsibleSectionStateLess>\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';\n\nimport {SYSTEM_CHUNKS_TABLE_ID} from '../../../constants/tables';\nimport {loadChunks} from '../../../store/actions/system/chunks';\nimport {getSettingsSystemChunksCollapsed} from '../../../store/selectors/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';\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 <CollapsibleSectionStateLess\n name={'Chunks'}\n overview={overview}\n onToggle={this.onToggle}\n collapsed={collapsed}\n size={collapsibleSize}\n >\n <div className={b('chunks')}>\n <ElementsTable {...table} footer={totalRow} />\n </div>\n </CollapsibleSectionStateLess>\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';\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 <CollapsibleSectionStateLess\n name={name}\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}\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-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-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';\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-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 <CollapsibleSectionStateLess\n overview={renderOverview()}\n collapsed={collapsed}\n onToggle={onToggle}\n name={'Nodes'}\n size={UI_COLLAPSIBLE_SIZE}\n >\n {renderContent()}\n </CollapsibleSectionStateLess>\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":["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","_jsx","ElementsTableRow","bFooter","block","ELEMENTS_TABLE","footer","className","children","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","Component","defaultProps","_WithStickyFooter","_React$Component","WithStickyFooter","apply","bWrapper","sticky","prepareTableClassName","_objectSpread","_jsxs","React","renderStickyFooter","displayName","concat","getDisplayName","size","mapDispatchToProps","toggleColumnSortOrder","compose","connect","_ref","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","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","AppStoreProvider","Provider","store","getWindowStore","ErrorBoundary","SystemTopRowContent","RowWithName","page","Page","SYSTEM","CreateClusterNotificationButton","clusterConfig","useSelector","getCurrentClusterConfig","CreateNotificationButton","url","UIFactory","createNotificationUrl","href","target","formatNumber","hammer","format","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","onChange","evt","SettingName","MASTERS_HOST_TYPE","NAMESPACES","RadioButton","name","mastersRadioButtonItems","SystemCounters","params","makeUrl","cluster","tab","isEmptyParams","Object","keys","qs","isNaN","renderLinks","prepareUrl","content","_Fragment","Link","_this$props2","counters","stateThemeMappings","map_","flags","flag","flagName","renderCounter","formatCounterName","_defineProperty","_this2","_this$props3","states","stateName","countersFlags","renderCountersFlags","countersStates","renderCountersStates","counterTotal","renderCounterTotal","getCluster","SystemStateLabels","labels","Flex","gap","_ref2","Label","SystemStateOverview","stateOverview","rest","_objectWithoutProperties","_excluded","_this$props$stateOver","stack","computeEffectiveStateProgress","stroke","NodeQuad","_ref$theme","_ref$children","banned","alerts","decommissioned","full","effectiveTheme","SwitchLeaderShortInfo","startTime","useRef","moment","_useState","useState","_useState2","_slicedToArray","currentTime","setCurrentTime","_useState3","_useState4","finishTime","setFinishTime","useDispatch","useEffect","intervalId","setInterval","clearInterval","stillMounted","waitForState","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","next","getStateForHost","newLeaderAddress","sent","loadMasters","t0","stop","MetaTable","TimeDuration","diff","current","SwitchLeaderShortInfoStatus","SwitchLeaderDialog","error","setError","selectLeadingHostOptions","hosts","host","YTDFDialog","visible","headerProps","cellId","initialValues","leading_primary_master","leadingHost","fields","required","extras","options","placeholder","width","filterable","_toConsumableArray","makeErrorFields","footerProps","textApply","onAdd","form","getState","values","confirm","e","onClose","cancel","pristineSubmittable","SwitchLeaderButton","setVisible","handleConfirm","newLeader","switchLeader","ytApiV4Id","YTApiId","cell_id","new_leader_address","wrapApiPromiseByToaster","toasterName","successContent","successTitle","autoHide","_x","withTooltip","tooltipProps","awesome","toaster","Toaster","loadSchedulersAndAgents","FETCH_SCHEDULERS","REQUEST","Promise","ytApiV3Id","list","systemSchedulers","path","attributes","USE_SUPRESS_SYNC","requests","command","parameters","timeout","ypath","executeBatch","systemSchedulersState","outputs","splitBatchResults","schedulers","connected","schedulerAlerts","getSchedulersState","sortBy_","systemCAInstances","basePath","systemCAStates","agents","agentAlerts","reduce_","getAgentsState","_ref2$","_ref2$2","SUCCESS","_error$response","FAILURE","response","code","add","autoHiding","actions","label","showErrorPopup","getSystemSchedulers","schedulersAndAgents","getSystemAgents","getSystemSchedulersWithState","createSelector","VisibleHostType","sheduler","res","connectedHost","connectedSchedulersToState","maintenanceMessage","getSystemAgentsWithState","agent","connectedAgentsToState","getSystemSchedulerAndAgentCounters","schedulersWithState","agentsWithState","statefulHosts","active","numberOf","standby","offline","extractAgentsCounters","getSystemSchedulerAndAgentAlerts","acc","disconnected","changeSchedulerMaintenance","address","maintenance","getSate","isAgent","master","login","result","find","i","$value","annotations","physical_host","Error","getCurrentUserName","changeMaintenance","getBatchError","_x2","ChangeMaintenanceButton","_useToggle","useToggle","_useToggle2","toggleVisible","handleMaintenanceChange","useCallback","_form$getState","action","changeMasterMaintenance","disabled","PencilIcon","reShortNameSystemPage","makeRegexpFromSettings","uiSettings","makeShortSystemAddress","_res$groups","exec","groups","shortname","Instance","allowVoting","allowService","voting","denyVoting","instanceStateToTheme","addressWithoutPort","Fragment","Tooltip","face","read_only","ReadOnlyIcon","height","warming_up","WarmUpIcon","ClipboardButton","Text","color","leading","following","follower_recovery","leader_recovery","elections","stopped","unknown","online","MasterGroup","_Component2","_super2","quorum","cellTag","instances","status","quorumTitle","leaderCommitedVersion","cellTitle","$address","delimiter","gridRowStart","renderQuorum","_ref3","$physicalAddress","$attributes","$rowAddress","getValue","SystemAlert","selectMasterAlerts","alert","id","Alert","computeStateProgress","sortStateProgress","count","Masters","_len","args","Array","_key","onToggle","setSettingsSystemMastersCollapsed","collapsed","renderMastersGroups","masters","_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","renderMasterTypeSwitcher","Boolean","renderSection","heading","alertsCount","unavailable","recovery","counterGroup","_this$props4","initialized","collapsibleSize","renderContent","overview","renderOverview","CollapsibleSectionStateLess","renderAlerts","MastersUpdater","_state$system$masters","UI_COLLAPSIBLE_SIZE","getSettingsSystemMastersCollapsed","Scheduler","SchedulersAndAgents","setSettingsSystemSchedulersCollapsed","connectedHosts","showHostTypeButton","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","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","hidden","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","nameUrl","alignItems","direction","Cube","fontWeight","grow","ProxiesImpl","onToggleCollapsed","_React$useState","_React$useState2","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","_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","prepareNodes","node","rackName","getBoolean","effectiveFlag","rack","hasOwnProperty","insertNodeToRack","prepareRacks","slice","reduce","overviewCounters","extractNodeCounters","_groupRacks","groupedRacks","groupName","split","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","SystemNodeTypeSelector","NoContent","warning","ReadableField","hint","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","order","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","l","_ref3$nodes","r","multiSortWithUndefined","includes","reverse","toggleReducer","nextValue","initialValue","useReducer"],"sourceRoot":""}
|