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