@ytsaurus/ui 1.63.1 → 1.64.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 +11 -10
- package/dist/public/build/assets-manifest.json +35 -35
- package/dist/public/build/css/main.b2af1626.css +10 -0
- package/dist/public/build/css/main.b2af1626.css.map +1 -0
- package/dist/public/build/js/{4364.aa1ab5fb.chunk.js → 2081.56ca6548.chunk.js} +2 -2
- package/dist/public/build/js/2081.56ca6548.chunk.js.map +1 -0
- package/dist/public/build/js/4016.03291f63.chunk.js +3 -0
- package/dist/public/build/js/4016.03291f63.chunk.js.map +1 -0
- package/dist/public/build/js/6729.91ef11dc.chunk.js +2 -0
- package/dist/public/build/js/6729.91ef11dc.chunk.js.map +1 -0
- package/dist/public/build/js/{8460.2b27e2b7.chunk.js → 8460.a458b9c6.chunk.js} +2 -2
- package/dist/public/build/js/8460.a458b9c6.chunk.js.map +1 -0
- package/dist/public/build/js/{chyt.125f3e77.chunk.js → chyt.fa2fdae2.chunk.js} +2 -2
- package/dist/public/build/js/chyt.fa2fdae2.chunk.js.map +1 -0
- package/dist/public/build/js/{cluster-page-wrapper.c9e6c27c.chunk.js → cluster-page-wrapper.eddde18f.chunk.js} +2 -2
- package/dist/public/build/js/{cluster-page-wrapper.c9e6c27c.chunk.js.map → cluster-page-wrapper.eddde18f.chunk.js.map} +1 -1
- package/dist/public/build/js/main.693c4cb1.js +3 -0
- package/dist/public/build/js/main.693c4cb1.js.map +1 -0
- package/dist/public/build/js/{manage-tokens.e9106aad.chunk.js → manage-tokens.1c4ee171.chunk.js} +2 -2
- package/dist/public/build/js/manage-tokens.1c4ee171.chunk.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.91ee109f.chunk.js → navigation-flow.f7bcba21.chunk.js} +2 -2
- package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js.map +1 -0
- package/dist/public/build/js/navigation.c8c7b9cc.chunk.js +2 -0
- package/dist/public/build/js/navigation.c8c7b9cc.chunk.js.map +1 -0
- package/dist/public/build/js/{query-results.4c207fef.chunk.js → query-results.4e6d702e.chunk.js} +2 -2
- package/dist/public/build/js/query-results.4e6d702e.chunk.js.map +1 -0
- package/dist/public/build/js/{query-tracker.badbc586.chunk.js → query-tracker.dd388474.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.badbc586.chunk.js.map → query-tracker.dd388474.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.f98c3e55.js → runtime.7752c183.js} +2 -2
- package/dist/public/build/js/{runtime.f98c3e55.js.map → runtime.7752c183.js.map} +1 -1
- package/dist/public/build/js/system.57ed0f9d.chunk.js +2 -0
- package/dist/public/build/js/system.57ed0f9d.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +30 -30
- package/dist/server/configs/e2e/local.js +1 -0
- package/dist/shared/constants/settings-types.d.ts +6 -3
- package/dist/shared/ui-settings.d.ts +5 -0
- package/package.json +2 -2
- package/dist/public/build/css/main.070fd473.css +0 -10
- package/dist/public/build/css/main.070fd473.css.map +0 -1
- package/dist/public/build/js/4016.80b4ae08.chunk.js +0 -3
- package/dist/public/build/js/4016.80b4ae08.chunk.js.map +0 -1
- package/dist/public/build/js/4364.aa1ab5fb.chunk.js.map +0 -1
- package/dist/public/build/js/6729.54f0fda8.chunk.js +0 -2
- package/dist/public/build/js/6729.54f0fda8.chunk.js.map +0 -1
- package/dist/public/build/js/8460.2b27e2b7.chunk.js.map +0 -1
- package/dist/public/build/js/chyt.125f3e77.chunk.js.map +0 -1
- package/dist/public/build/js/main.61fc9935.js +0 -3
- package/dist/public/build/js/main.61fc9935.js.map +0 -1
- package/dist/public/build/js/manage-tokens.e9106aad.chunk.js.map +0 -1
- package/dist/public/build/js/navigation-flow.91ee109f.chunk.js.map +0 -1
- package/dist/public/build/js/navigation.22bd542f.chunk.js +0 -2
- package/dist/public/build/js/navigation.22bd542f.chunk.js.map +0 -1
- package/dist/public/build/js/query-results.4c207fef.chunk.js.map +0 -1
- package/dist/public/build/js/system.25e9136a.chunk.js +0 -2
- package/dist/public/build/js/system.25e9136a.chunk.js.map +0 -1
- /package/dist/public/build/js/{4016.80b4ae08.chunk.js.LICENSE.txt → 4016.03291f63.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.61fc9935.js.LICENSE.txt → main.693c4cb1.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"js/system.25e9136a.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/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, 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};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\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 >\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 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 {calcShortNameByRegExp} from '../../../containers/Host/Host';\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 {calcShortNameByRegExp(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 {calcShortNameByRegExp} from '../../../../containers/Host/Host';\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 {calcShortNameByRegExp(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","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","Instance","allowVoting","allowService","voting","denyVoting","instanceStateToTheme","addressWithoutPort","Fragment","Tooltip","face","read_only","ReadOnlyIcon","height","warming_up","WarmUpIcon","calcShortNameByRegExp","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","groups","_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":""}
|