@ytsaurus/ui 3.6.0 → 3.6.1

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 (54) hide show
  1. package/dist/public/build/assets-manifest.json +37 -37
  2. package/dist/public/build/css/{main.89a1698b.css → main.eac511a5.css} +2 -2
  3. package/dist/public/build/css/main.eac511a5.css.map +1 -0
  4. package/dist/public/build/js/{1394.45bb669a.chunk.js → 1394.9f9c9f9a.chunk.js} +2 -2
  5. package/dist/public/build/js/{1394.45bb669a.chunk.js.map → 1394.9f9c9f9a.chunk.js.map} +1 -1
  6. package/dist/public/build/js/4804.2d9406dc.chunk.js +3 -0
  7. package/dist/public/build/js/4804.2d9406dc.chunk.js.map +1 -0
  8. package/dist/public/build/js/{accounts-monitoring-prometheus.262cacd8.chunk.js → accounts-monitoring-prometheus.38e8206a.chunk.js} +2 -2
  9. package/dist/public/build/js/accounts-monitoring-prometheus.38e8206a.chunk.js.map +1 -0
  10. package/dist/public/build/js/acl.00a69fe0.chunk.js +2 -0
  11. package/dist/public/build/js/acl.00a69fe0.chunk.js.map +1 -0
  12. package/dist/public/build/js/{bundle-monitoring-prometheus.d49a9a1a.chunk.js → bundle-monitoring-prometheus.dc8084bb.chunk.js} +2 -2
  13. package/dist/public/build/js/bundle-monitoring-prometheus.dc8084bb.chunk.js.map +1 -0
  14. package/dist/public/build/js/components.c4fc1d81.chunk.js +2 -0
  15. package/dist/public/build/js/components.c4fc1d81.chunk.js.map +1 -0
  16. package/dist/public/build/js/main.a04f2740.js +3 -0
  17. package/dist/public/build/js/{main.3e360b19.js.map → main.a04f2740.js.map} +1 -1
  18. package/dist/public/build/js/navigation.cd66d63f.chunk.js +2 -0
  19. package/dist/public/build/js/{navigation.8d91701a.chunk.js.map → navigation.cd66d63f.chunk.js.map} +1 -1
  20. package/dist/public/build/js/{prometheus-dashboard.3c9f3a99.chunk.js → prometheus-dashboard.d3814a09.chunk.js} +2 -2
  21. package/dist/public/build/js/prometheus-dashboard.d3814a09.chunk.js.map +1 -0
  22. package/dist/public/build/js/query-navigation.f7f5a1b5.chunk.js +2 -0
  23. package/dist/public/build/js/{query-navigation.f52623cc.chunk.js.map → query-navigation.f7f5a1b5.chunk.js.map} +1 -1
  24. package/dist/public/build/js/{runtime.2344fc6d.js → runtime.3af0a91e.js} +2 -2
  25. package/dist/public/build/js/{runtime.2344fc6d.js.map → runtime.3af0a91e.js.map} +1 -1
  26. package/dist/public/build/js/scheduling.4f518a8a.chunk.js +2 -0
  27. package/dist/public/build/js/scheduling.4f518a8a.chunk.js.map +1 -0
  28. package/dist/public/build/js/{system-monitoring-prometheus.b6ce8ed8.chunk.js → system-monitoring-prometheus.4004494c.chunk.js} +2 -2
  29. package/dist/public/build/js/system-monitoring-prometheus.4004494c.chunk.js.map +1 -0
  30. package/dist/public/build/js/{system.08fe4f55.chunk.js → system.2e84d486.chunk.js} +2 -2
  31. package/dist/public/build/js/{system.08fe4f55.chunk.js.map → system.2e84d486.chunk.js.map} +1 -1
  32. package/dist/public/build/js/yt-monaco-editor.4ad443b3.chunk.js +2 -0
  33. package/dist/public/build/js/{yt-monaco-editor.ba9a69f6.chunk.js.map → yt-monaco-editor.4ad443b3.chunk.js.map} +1 -1
  34. package/dist/public/build/manifest.json +32 -32
  35. package/package.json +2 -2
  36. package/dist/public/build/css/main.89a1698b.css.map +0 -1
  37. package/dist/public/build/js/4804.05d44971.chunk.js +0 -3
  38. package/dist/public/build/js/4804.05d44971.chunk.js.map +0 -1
  39. package/dist/public/build/js/accounts-monitoring-prometheus.262cacd8.chunk.js.map +0 -1
  40. package/dist/public/build/js/acl.91a762f3.chunk.js +0 -2
  41. package/dist/public/build/js/acl.91a762f3.chunk.js.map +0 -1
  42. package/dist/public/build/js/bundle-monitoring-prometheus.d49a9a1a.chunk.js.map +0 -1
  43. package/dist/public/build/js/components.aa32cd54.chunk.js +0 -2
  44. package/dist/public/build/js/components.aa32cd54.chunk.js.map +0 -1
  45. package/dist/public/build/js/main.3e360b19.js +0 -3
  46. package/dist/public/build/js/navigation.8d91701a.chunk.js +0 -2
  47. package/dist/public/build/js/prometheus-dashboard.3c9f3a99.chunk.js.map +0 -1
  48. package/dist/public/build/js/query-navigation.f52623cc.chunk.js +0 -2
  49. package/dist/public/build/js/scheduling.6f68a262.chunk.js +0 -2
  50. package/dist/public/build/js/scheduling.6f68a262.chunk.js.map +0 -1
  51. package/dist/public/build/js/system-monitoring-prometheus.b6ce8ed8.chunk.js.map +0 -1
  52. package/dist/public/build/js/yt-monaco-editor.ba9a69f6.chunk.js +0 -2
  53. /package/dist/public/build/js/{4804.05d44971.chunk.js.LICENSE.txt → 4804.2d9406dc.chunk.js.LICENSE.txt} +0 -0
  54. /package/dist/public/build/js/{main.3e360b19.js.LICENSE.txt → main.a04f2740.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"js/system.08fe4f55.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/pencil.svg","webpack://@ytsaurus/ui/./src/ui/pages/system/System/SystemTopRowContent.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Resources/Resources.js","webpack://@ytsaurus/ui/./src/ui/pages/system/VisibleHostTypeRadioButton.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemCounters/SystemCounters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemStateOverview/SystemStateLabels.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemStateOverview/SystemStateOverview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/SwitchLeaderShortInfo/SwitchLeaderShortInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/SwitchLeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/NodeQuad/NodeQuad.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/read-only-icon.svg","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/warmup-icon.svg","webpack://@ytsaurus/ui/./src/ui/pages/system/helpers/makeShortSystemAddress.ts","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/ChangeMaintenanceButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/Instance.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/CellTag.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/MasterGroup.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/SystemAlert.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/Masters.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/store/actions/system/index.js","webpack://@ytsaurus/ui/./src/ui/store/actions/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/Scheduler/Scheduler.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/SchedulersAndAgents.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/prepareTags.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Chunks/Chunks.js","webpack://@ytsaurus/ui/./src/ui/utils/system/proxies.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/system/proxies.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Cube.js","webpack://@ytsaurus/ui/./src/ui/containers/GridWithMediaMinWidth/GridWithMediaMinWidth.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/StatsInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/RoleGroup.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/ProxiesImpl.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/HttpProxies/HttpProxies.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/RpcProxies/RpcProxies.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/system/rpc-proxies.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/system/nodes.ts","webpack://@ytsaurus/ui/./src/ui/pages/system/Nodes/Nodes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/CypressProxies/CypressProxies.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/system/cypress-proxies.ts","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/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/constants/system/masters.js","webpack://@ytsaurus/ui/./node_modules/react-use/esm/useToggle.js","webpack://@ytsaurus/ui/./src/ui/containers/App/AppStoreProvider.tsx"],"sourcesContent":["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 size?: ButtonProps['size'];\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n size,\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 size={size}\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","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.88m3.098.658a3.6 3.6 0 0 0-1.878-1.879l1.28-1.28c.995.09 1.788.884 1.878 1.88z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgPencil;","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 '../../../store/redux-hooks';\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","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;","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","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 {YTErrorBlock} from '../../../components/Block/Block';\nimport hammer from '../../../common/hammer';\nimport {getMediumList} from '../../../store/selectors/thor';\nimport {loadSystemResources} from '../../../store/actions/system/resources';\nimport {useDispatch} from '../../../store/redux-hooks';\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 <YTErrorBlock\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 = useDispatch();\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","import React, {useRef, useState} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\n// @ts-ignore\nimport format from '../../../common/hammer/format';\nimport {getStateForHost, loadMasters} from '../../../store/actions/system/masters';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport moment from 'moment';\nimport './SwitchLeaderShortInfo.scss';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nconst block = cn('switch-leader-short-info');\n\ninterface Props {\n newLeaderPath: string;\n}\n\nexport function SwitchLeaderShortInfo(props: Props) {\n const startTime = useRef(moment.now());\n const [currentTime, setCurrentTime] = useState<any>(moment());\n const [finishTime, setFinishTime] = useState<any>();\n const dispatch = useDispatch();\n\n const updateCurrentTime = React.useCallback(() => {\n if (!finishTime) {\n setCurrentTime(moment());\n }\n }, [finishTime]);\n useUpdater(updateCurrentTime, {timeout: 1000, forceAutoRefresh: true});\n\n const updateFn = React.useCallback(async () => {\n if (finishTime) {\n return;\n }\n\n const hostState = await getStateForHost(props.newLeaderPath);\n\n if (hostState === 'leading') {\n setFinishTime(moment());\n dispatch(loadMasters());\n }\n }, [props.newLeaderPath, finishTime, dispatch]);\n useUpdater(updateFn, {timeout: 3000, forceAutoRefresh: true});\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n {\n key: 'Duration',\n value: format.TimeDuration(\n (finishTime || currentTime).diff(startTime.current),\n ),\n },\n {\n key: 'Status',\n value: (\n <SwitchLeaderShortInfoStatus\n state={finishTime ? 'complete' : 'in progress'}\n />\n ),\n },\n ]}\n />\n </div>\n );\n}\n\nfunction SwitchLeaderShortInfoStatus({state}: {state: string}) {\n return <span className={block('state', {state})}>{state}</span>;\n}\n","import React, {useState} from 'react';\nimport Icon from '../../../components/Icon/Icon';\nimport Button from '../../../components/Button/Button';\nimport {YTApiId, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {SwitchLeaderShortInfo} from '../../../pages/components/SwitchLeaderShortInfo/SwitchLeaderShortInfo';\nimport {AppStoreProvider} from '../../../containers/App/AppStoreProvider';\n\ntype SwitchLeaderDialogProps = {\n cancel: () => void;\n confirm: (newLeader: string) => Promise<void>;\n visible: boolean;\n cellId: string;\n hosts: Array<{getPath: () => string; state: 'leading'}>;\n};\n\ntype FormValues = {\n leading_primary_master: string[];\n};\n\nconst SwitchLeaderDialog = (props: SwitchLeaderDialogProps) => {\n const [error, setError] = useState(undefined);\n\n const selectLeadingHostOptions = props.hosts.map((host) => {\n const path = host.getPath();\n return {\n value: path,\n content: path.split('/').pop(),\n };\n });\n\n const leader = props.hosts.find(({state}) => state === 'leading');\n const leaderPath = leader?.getPath();\n\n return (\n <YTDFDialog<FormValues>\n visible={props.visible}\n headerProps={{\n title: `Switch leader for ${props.cellId}`,\n }}\n initialValues={{\n leading_primary_master: leaderPath ? [leaderPath] : [],\n }}\n fields={[\n {\n type: 'select',\n caption: ' Leading primary master',\n name: 'leading_primary_master',\n required: true,\n extras: {\n options: selectLeadingHostOptions,\n placeholder: 'New leading primary master',\n width: 'max',\n filterable: true,\n },\n },\n ...makeErrorFields([error]),\n ]}\n footerProps={{\n textApply: 'Switch leader',\n }}\n onAdd={(form) => {\n const {leading_primary_master} = form.getState().values;\n\n return props\n .confirm(leading_primary_master[0])\n .then(() => {\n setError(undefined);\n })\n .catch((e) => {\n setError(e);\n throw e;\n });\n }}\n onClose={props.cancel}\n pristineSubmittable={true}\n />\n );\n};\n\ntype SwitchLeaderButtonProps = {\n className: string;\n cellId: string;\n hosts: Array<{getPath: () => string; state: 'leading'}>;\n};\n\nexport const SwitchLeaderButton = ({cellId, hosts, className}: SwitchLeaderButtonProps) => {\n const [visible, setVisible] = useState(false);\n\n const handleClick = () => {\n setVisible(true);\n };\n\n const handleConfirm = async (newLeaderPath: string) => {\n const leaderAddress = newLeaderPath.split('/').pop();\n const switchLeader = () => {\n return ytApiV4Id.switchLeader(YTApiId.switchLeader, {\n cell_id: cellId,\n new_leader_address: leaderAddress!,\n });\n };\n\n wrapApiPromiseByToaster(switchLeader(), {\n toasterName: 'switch-leader',\n successContent() {\n return (\n <AppStoreProvider>\n <SwitchLeaderShortInfo newLeaderPath={newLeaderPath} />\n </AppStoreProvider>\n );\n },\n successTitle: 'Leader switch initiated',\n autoHide: false,\n });\n\n setVisible(false);\n };\n\n const handleCancel = () => {\n setVisible(false);\n };\n\n return (\n <React.Fragment>\n <Button\n className={className}\n view=\"flat-secondary\"\n onClick={handleClick}\n withTooltip\n tooltipProps={{content: 'Switch leader'}}\n >\n <Icon awesome=\"crowndiamond\" />\n </Button>\n {visible && (\n <SwitchLeaderDialog\n visible\n cellId={cellId}\n hosts={hosts}\n confirm={handleConfirm}\n cancel={handleCancel}\n />\n )}\n </React.Fragment>\n );\n};\n","import block from 'bem-cn-lite';\nimport React from 'react';\n\nimport './NodeQuad.scss';\nconst b = block('node-quad');\n\nexport type NodeQuadTheme =\n | 'online'\n | 'banned'\n | 'offline'\n | 'following'\n | 'mixed'\n | 'registered'\n | 'unregistered'\n | 'nonvoting'\n | 'unknown'\n | 'other';\n\ninterface Props {\n theme?: NodeQuadTheme;\n children?: string;\n banned?: boolean;\n alerts?: boolean;\n decommissioned?: boolean;\n full?: boolean;\n}\n\nexport default function NodeQuad({\n theme = 'unknown',\n children = '',\n banned,\n alerts,\n decommissioned,\n full,\n}: Props) {\n const text = (alerts && 'A') || (decommissioned && 'D') || (full && 'F') || undefined;\n const bannedOrTheme = banned ? ('banned' as const) : theme;\n\n const effectiveTheme = children ? `${bannedOrTheme}-letter` : theme;\n return <div className={b({theme: effectiveTheme, full})}>{text}</div>;\n}\n","const SvgReadOnlyIcon = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"#666\" d=\"M8.705 5.562c-.032-.031-.078-.063-.125-.063a.2.2 0 0 0-.14.063L4.206 9.794l-.203 1.78c-.016.125.015.235.11.313.077.093.187.125.312.11l1.78-.204 4.232-4.232a.2.2 0 0 0 .063-.14c0-.048-.031-.094-.063-.126zm3.076-.406c.14.156.219.328.219.53 0 .22-.078.391-.219.532l-.718.718a.2.2 0 0 1-.14.063c-.063 0-.094-.016-.126-.063L9.064 5.203C9.017 5.17 9 5.14 9 5.078a.2.2 0 0 1 .063-.141l.718-.718A.72.72 0 0 1 10.313 4c.203 0 .375.078.531.219z\" /><path fill=\"#666\" d=\"m8 6 1.5-1.5 2 2L10 8z\" /><path fill=\"#F88\" d=\"M8 1.11c1.29 0 2.52.35 3.633.995a7.1 7.1 0 0 1 2.637 2.637 7.2 7.2 0 0 1 .996 3.633c0 1.318-.352 2.52-.996 3.633-.645 1.113-1.524 2.021-2.637 2.666A7.2 7.2 0 0 1 8 15.64a7.1 7.1 0 0 1-3.633-.967 7.3 7.3 0 0 1-2.666-2.666 7.1 7.1 0 0 1-.967-3.633c0-1.29.323-2.52.967-3.633.645-1.113 1.553-1.992 2.666-2.637C5.48 1.461 6.682 1.11 8 1.11m4.13 3.134A5.8 5.8 0 0 0 9.7 2.78a5.6 5.6 0 0 0-2.784-.175 5.7 5.7 0 0 0-2.52 1.171L12.6 11.98a5.7 5.7 0 0 0 1.172-2.52 5.6 5.6 0 0 0-.176-2.783 5.8 5.8 0 0 0-1.465-2.432m-8.26 8.262A5.56 5.56 0 0 0 6.27 14a5.74 5.74 0 0 0 2.813.146 5.54 5.54 0 0 0 2.52-1.171L3.4 4.77a5.53 5.53 0 0 0-1.171 2.52 5.74 5.74 0 0 0 .146 2.813 5.56 5.56 0 0 0 1.494 2.402\" /></svg>;\nexport default SvgReadOnlyIcon;","const SvgWarmupIcon = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\" {...props}><path fill=\"#F9A525\" stroke=\"#F9A525\" d=\"M11.415 7.367C12.437 6.45 13 5.61 13 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C9.548 7.55 9 8.39 9 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227ZM7.415 7.367C8.437 6.45 9 5.61 9 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C5.548 7.55 5 8.39 5 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227ZM3.415 7.367C4.437 6.45 5 5.61 5 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C1.548 7.55 1 8.39 1 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227Z\" /></svg>;\nexport default SvgWarmupIcon;","import {makeRegexpFromSettings} from '../../../../shared/utils';\nimport {uiSettings} from '../../../config/ui-settings';\n\nconst reShortNameSystemPage = makeRegexpFromSettings(uiSettings.reShortNameSystemPage);\n\nexport const makeShortSystemAddress = (address: string): string | undefined => {\n const res = reShortNameSystemPage?.exec(address);\n return res?.groups?.shortname;\n};\n","import React, {FC, useState} from 'react';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport PencilIcon from '@gravity-ui/icons/svgs/pencil.svg';\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {useToggle} from 'react-use';\n\ntype Props = {\n className?: string;\n path: string | null;\n title?: string;\n host?: string;\n container?: string;\n maintenance: boolean;\n maintenanceMessage: string;\n onMaintenanceChange: (data: {\n path: string;\n message: string;\n maintenance: boolean;\n }) => Promise<void>;\n};\n\ntype FormData = {host: string; container: string; maintenance: string; message: string};\n\nexport const ChangeMaintenanceButton: FC<Props> = ({\n className,\n path,\n title,\n host,\n container,\n maintenance,\n maintenanceMessage,\n onMaintenanceChange,\n}) => {\n const [error, setError] = useState<Error | undefined>(undefined);\n const [visible, toggleVisible] = useToggle(false);\n\n if (!path) return;\n\n const handleMaintenanceChange = async (form: FormApi<FormData>) => {\n const {values} = form.getState();\n try {\n await onMaintenanceChange({\n path,\n message: values.message,\n maintenance: values.maintenance === 'enabled',\n });\n } catch (e) {\n setError(e as Error);\n throw e as Error;\n }\n };\n\n const handleOnClose = () => {\n toggleVisible();\n setError(undefined);\n };\n\n return (\n <>\n <YTDFDialog<FormData>\n pristineSubmittable\n headerProps={{\n title,\n }}\n initialValues={{\n host,\n container,\n maintenance: maintenance ? 'enabled' : 'disabled',\n message: maintenanceMessage,\n }}\n fields={[\n {\n name: 'host',\n type: 'plain',\n caption: 'Host',\n },\n {\n name: 'container',\n type: 'plain',\n caption: 'Container',\n },\n {\n name: 'maintenance',\n type: 'radio',\n caption: 'Maintenance',\n extras: {\n options: [\n {value: 'enabled', label: 'Enabled'},\n {value: 'disabled', label: 'Disabled'},\n ],\n },\n },\n {\n name: 'message',\n type: 'textarea',\n caption: 'Maintenance message',\n extras: (values: FormData) => ({\n placeholder: 'Enter maintenance message',\n disabled: values.maintenance === 'disabled',\n }),\n },\n ...makeErrorFields([error]),\n ]}\n visible={visible}\n onAdd={handleMaintenanceChange}\n onClose={handleOnClose}\n />\n <Button view=\"flat-secondary\" className={className} onClick={toggleVisible}>\n <Icon data={PencilIcon} size={14} />\n </Button>\n </>\n );\n};\n","import React, {FC, useCallback} from 'react';\nimport hammer from '../../../common/hammer';\nimport NodeQuad, {NodeQuadTheme} from '../NodeQuad/NodeQuad';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport Icon from '../../../components/Icon/Icon';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport ReadOnlyIcon from '../../../assets/img/svg/read-only-icon.svg';\nimport WarmUpIcon from '../../../assets/img/svg/warmup-icon.svg';\nimport {makeShortSystemAddress} from '../helpers/makeShortSystemAddress';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {ChangeMaintenanceButton} from './ChangeMaintenanceButton';\nimport block from 'bem-cn-lite';\nimport {MasterInstance} from '../../../store/selectors/system/masters';\nimport './MasterGroup.scss';\nimport {changeMasterMaintenance} from '../../../store/actions/system/masters';\nimport {CypressNode} from '../../../../shared/yt-types';\n\nconst b = block('master-group');\n\nconst instanceStateToTheme: Record<string, NodeQuadTheme> = {\n active: 'online',\n connected: 'online',\n leading: 'online',\n disconnected: 'banned',\n following: 'following',\n follower_recovery: 'banned',\n leader_recovery: 'banned',\n standby: 'banned',\n elections: 'offline',\n stopped: 'offline',\n unknown: 'offline',\n online: 'online',\n offline: 'offline',\n};\n\ntype Props = {\n instance: MasterInstance;\n hostType: string;\n allowVoting?: boolean;\n allowService?: boolean;\n};\n\nexport const Instance: FC<Props> = ({instance, hostType, allowVoting, allowService}) => {\n const dispatch = useDispatch();\n const {state, $address, $physicalAddress} = instance;\n const attributes = instance.$attributes as CypressNode<\n {read_only: boolean; voting: boolean; warming_up: boolean},\n unknown\n >['$attributes'];\n const address = hostType === 'host' ? $address : $physicalAddress;\n const maintenance = instance.getMaintenance();\n const maintenanceMessage = maintenance ? instance.getMaintenanceMessage() || 'Maintenance' : '';\n const {voting} = attributes ?? {};\n // do not use `!voting` cause `voting === undefined` is the same as `voting === true`\n const denyVoting = allowVoting && voting === false;\n const theme = denyVoting && state === 'following' ? 'nonvoting' : instanceStateToTheme[state!];\n const addressWithoutPort = hammer.format['Address'](address);\n\n const handleOnMaintenanceChange = useCallback(\n async (data: {path: string; maintenance: boolean; message: string}) => {\n await dispatch(changeMasterMaintenance(data));\n },\n [dispatch],\n );\n\n const shortName = makeShortSystemAddress(addressWithoutPort) || addressWithoutPort;\n\n return (\n <>\n <div className={b('availability')}>\n <NodeQuad theme={theme} />\n </div>\n <div className={b('role')}>\n <span>{hammer.format['ReadableField'](state ? state : 'unknown')}</span>\n </div>\n <div className={b('icon')}>\n {maintenanceMessage && (\n <Tooltip content={<span>{maintenanceMessage}</span>}>\n <Icon className={b('icon-maintenance')} awesome=\"digging\" face=\"solid\" />\n </Tooltip>\n )}\n {attributes?.read_only && (\n <span className={b('icon-glyph')} title=\"Read only\">\n <ReadOnlyIcon width={14} height={14} />\n </span>\n )}\n {attributes?.warming_up && (\n <span className={b('icon-glyph')} title=\"Warming up\">\n <WarmUpIcon width={14} height={14} />\n </span>\n )}\n </div>\n <div className={b('host')}>\n <Tooltip content={addressWithoutPort}>\n <div className={b('host-name')}>{shortName}</div>\n </Tooltip>\n <Flex gap={1} alignItems=\"center\">\n <span className={b('host-btn')}>\n <ClipboardButton view=\"flat-secondary\" text={address} />\n </span>\n <ChangeMaintenanceButton\n className={b('host-btn', {hidden: !allowService})}\n path={instance.getPath()}\n title={`Edit ${addressWithoutPort}`}\n host={$physicalAddress}\n container={$address}\n maintenance={maintenance}\n maintenanceMessage={maintenanceMessage}\n onMaintenanceChange={handleOnMaintenanceChange}\n />\n <Text className={b('nonvoting', {hidden: !denyVoting})} color=\"secondary\">\n [nonvoting]\n </Text>\n </Flex>\n </div>\n </>\n );\n};\n","import React from 'react';\n\nimport format from '../../../common/hammer/format';\n\nimport Icon from '../../../components/Icon/Icon';\nimport {Secondary} from '../../../components/Text/Text';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\n\nexport function CellTag({cellTag, className}: {cellTag: number; className: string}) {\n const hexCellTag = format.Hex(cellTag);\n\n return (\n <Tooltip\n className={className}\n placement={['top', 'bottom']}\n content={\n <MetaTable\n items={[\n {\n key: 'Hexadecimal cell tag',\n value: (\n <>\n {hexCellTag}{' '}\n <ClipboardButton view=\"clear\" size=\"xs\" text={hexCellTag}>\n {hexCellTag}\n </ClipboardButton>\n </>\n ),\n },\n {\n key: 'Decimal cell tag',\n value: (\n <>\n {cellTag}{' '}\n <ClipboardButton view=\"clear\" theme=\"\" size=\"xs\" text={cellTag}>\n {cellTag}\n </ClipboardButton>\n </>\n ),\n },\n ]}\n />\n }\n >\n {cellTag && <Icon color=\"secondary\" face=\"solid\" awesome=\"tag\" />}\n {hexCellTag}\n <Secondary> / </Secondary>\n {cellTag}\n </Tooltip>\n );\n}\n","import React, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport {Flex} from '@gravity-ui/uikit';\n\nimport format from '../../../common/hammer/format';\nimport {getMastersHostType} from '../../../store/selectors/settings';\nimport Icon from '../../../components/Icon/Icon';\n\nimport {SwitchLeaderButton} from './SwitchLeader';\nimport {Instance} from './Instance';\n\nimport map_ from 'lodash/map';\nimport './MasterGroup.scss';\nimport {CellTag} from './CellTag';\n\nconst b = block('master-group');\n\nclass MasterGroup extends Component {\n static propTypes = {\n // from parent\n className: PropTypes.string,\n instances: PropTypes.arrayOf(\n PropTypes.shape({\n state: PropTypes.string,\n $address: PropTypes.string,\n $physicalAddress: PropTypes.string,\n }),\n ),\n cellTag: PropTypes.number,\n quorum: PropTypes.shape({\n status: PropTypes.string,\n leaderCommitedVersion: PropTypes.string,\n }),\n leader: PropTypes.shape({\n state: PropTypes.string,\n $address: PropTypes.string,\n }),\n // from connect\n hostType: PropTypes.oneOf(['host', 'physicalHost']),\n gridRowStart: PropTypes.bool,\n allowVoting: PropTypes.bool,\n allowService: PropTypes.bool,\n };\n\n renderQuorum() {\n const {quorum, cellTag, cellId, instances} = this.props;\n const status = quorum ? quorum.status : 'unknown';\n const quorumTitle = quorum && `Leader committed version: ${quorum.leaderCommitedVersion}`;\n const icons = {\n quorum: 'check-circle',\n 'weak-quorum': 'exclamation-circle',\n 'no-quorum': 'exclamation-circle',\n unknown: 'question-circle',\n };\n const states = {\n quorum: 'present',\n 'weak-quorum': 'weak',\n 'no-quorum': 'missing',\n unknown: 'unknown',\n };\n\n return (\n <Fragment>\n {quorum && (\n <Fragment>\n <div\n className={b('quorum-status', {\n state: states[status],\n })}\n >\n <Icon face=\"solid\" awesome={icons[status]} />\n </div>\n <div className={b('quorum-label')}>\n {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 {Boolean(quorum?.leaderCommitedVersion) || cellTag !== undefined ? (\n <div className={b('host', {quorum: true})}>\n <div className={b('quorum-version')} title={quorumTitle}>\n <span>{quorum && quorum.leaderCommitedVersion}</span>\n </div>\n <Flex alignItems=\"center\">\n <CellTag className={b('quorum-cell')} cellTag={cellTag} />\n <SwitchLeaderButton cellId={cellId} hosts={instances} />\n </Flex>\n </div>\n ) : null}\n </Fragment>\n );\n }\n\n render() {\n const {className, instances, hostType, gridRowStart, allowVoting, allowService} =\n this.props;\n\n return (\n <div className={b('group', {'grid-row-start': gridRowStart}, className)}>\n {this.renderQuorum()}\n {map_(instances, (instance) => {\n return (\n <Instance\n instance={instance}\n key={instance.$address}\n hostType={hostType}\n allowVoting={allowVoting}\n allowService={allowService}\n />\n );\n })}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const hostType = getMastersHostType(state);\n return {hostType};\n};\n\nexport default connect(mapStateToProps)(MasterGroup);\n","import React, {FC} from 'react';\nimport {useSelector} from '../../../store/redux-hooks';\nimport {selectMasterAlerts} from '../../../store/selectors/system/masters';\nimport {YTAlertBlock} 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 <YTAlertBlock key={alert.message + id} error={alert} />\n ))}\n </div>\n );\n};\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport VisibleHostTypeRadioButton from '../../../pages/system/VisibleHostTypeRadioButton';\nimport {sortStateProgress} from '../../../utils';\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\nimport MasterGroup from './MasterGroup';\n\nimport {loadMasters} from '../../../store/actions/system/masters';\nimport {getSettingsSystemMastersCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemMastersCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport './Masters.scss';\nimport {SystemAlert} from './SystemAlert';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nconst b = block('system-master');\nconst headingCN = block('elements-heading')({size: 's'});\n\nfunction computeStateProgress(counters) {\n const total = counters.total;\n\n return sortStateProgress(\n map_(counters.states, (count, state) => {\n return {\n value: total && (count / total) * 100,\n title: 'State: ' + state,\n theme:\n {\n quorum: 'success',\n 'weak-quorum': 'warning',\n 'no-quorum': 'danger',\n }[state] || 'default',\n };\n }),\n );\n}\n\nclass Masters extends Component {\n static propTypes = {\n // from connect\n alerts: PropTypes.arrayOf(PropTypes.object),\n counters: PropTypes.shape({\n flags: PropTypes.object,\n states: PropTypes.object,\n }).isRequired,\n initialized: PropTypes.bool.isRequired,\n primary: PropTypes.shape(MasterGroup.propTypes).isRequired,\n secondary: PropTypes.arrayOf(PropTypes.shape(MasterGroup.propTypes)),\n providers: PropTypes.shape(MasterGroup.propTypes).isRequired,\n discovery: PropTypes.shape(MasterGroup.propTypes).isRequired,\n };\n\n onToggle = () => {\n const {setSettingsSystemMastersCollapsed, collapsed: prevCollapsed} = this.props;\n setSettingsSystemMastersCollapsed(!prevCollapsed);\n };\n\n mastersFitIntoSection() {\n const {secondary, providers, discovery, queueAgents} = this.props;\n\n let groupsCount = 1; // for primary masters;\n groupsCount += secondary?.length || 0;\n groupsCount += providers?.instances?.length ? 1 : 0;\n groupsCount += discovery?.instances?.length ? 1 : 0;\n groupsCount += queueAgents?.instances?.length ? 1 : 0;\n\n return groupsCount <= 3;\n }\n\n renderMastersGroups = (masters, gridRowStart, {allowVoting} = {allowVoting: false}) =>\n map_(masters, (master) => (\n <MasterGroup\n key={master.cellTag}\n {...master}\n gridRowStart={gridRowStart}\n allowVoting={allowVoting}\n allowService\n />\n ));\n\n renderMasterTypeSwitcher() {\n return <VisibleHostTypeRadioButton className={b('container-host-radio')} />;\n }\n\n renderAlerts() {\n return <SystemAlert className={b('alerts')} />;\n }\n\n renderContent() {\n const {primary, secondary, providers, discovery, queueAgents} = this.props;\n\n const fitIntoSection = this.mastersFitIntoSection();\n\n const secondaryGroups = this.renderMastersGroups(secondary, fitIntoSection, {\n allowVoting: true,\n });\n\n return fitIntoSection ? (\n <div className={b('all-masters')}>\n <div className={headingCN}>Primary Masters</div>\n <MasterGroup\n className={b('primary-master')}\n {...primary}\n allowVoting\n allowService\n />\n {Boolean(secondary?.length) && (\n <React.Fragment>\n <div className={headingCN}>Secondary Masters</div>\n {secondaryGroups}\n </React.Fragment>\n )}\n {Boolean(providers?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Timestamp providers</div>\n <MasterGroup\n {...providers}\n className={b('timestamp-providers')}\n gridRowStart\n allowVoting\n allowService\n />\n </React.Fragment>\n )}\n {Boolean(discovery?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Discovery servers</div>\n <MasterGroup\n {...discovery}\n className={b('discovery-servers')}\n gridRowStart\n />\n </React.Fragment>\n )}\n {Boolean(queueAgents?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Queue agents</div>\n <MasterGroup {...queueAgents} allowService />\n </React.Fragment>\n )}\n </div>\n ) : (\n <div>\n <div className={headingCN}>Primary Masters</div>\n <MasterGroup\n className={b('primary-master')}\n {...primary}\n allowVoting\n allowService\n />\n {Boolean(secondary?.length) && (\n <React.Fragment>\n <div className={headingCN}>Secondary Masters</div>\n <div className={b('secondary-masters')}>{secondaryGroups}</div>\n </React.Fragment>\n )}\n <div className={b('flex')}>\n {Boolean(providers?.instances?.length) &&\n this.renderSection('providers', 'Timestamp providers', providers, {\n allowVoting: true,\n allowService: true,\n })}\n {Boolean(discovery?.instances?.length) &&\n this.renderSection('discovery', 'Discovery servers', discovery)}\n {Boolean(queueAgents?.instances?.length) &&\n this.renderSection('queueAgents', 'Queue agents', queueAgents, {\n allowService: true,\n })}\n </div>\n </div>\n );\n }\n\n renderSection(\n name,\n heading,\n data,\n {allowVoting, allowService} = {allowVoting: false, allowService: false},\n ) {\n return (\n <div className={b(name)}>\n <div className={headingCN}>{heading}</div>\n <div className={b(`${name}-hosts`)}>\n <MasterGroup {...data} allowVoting={allowVoting} allowService={allowService} />\n </div>\n </div>\n );\n }\n\n renderOverview() {\n const {counters} = this.props;\n\n const stateOverview = counters && {\n value: 100,\n view: 'thin',\n stack: computeStateProgress(counters),\n };\n const stateThemeMappings = {\n unavailable: 'danger',\n recovery: 'warning',\n 'no-quorum': 'danger',\n 'weak-quorum': 'warning',\n };\n const counterGroups = [\n ['recovery', 'unavailable'],\n ['primary', 'secondary'],\n ['no-quorum', 'weak-quorum', 'quorum'],\n ];\n\n const labels = [];\n const alertsCount = this.props.alerts.length;\n if (alertsCount > 0) {\n labels.push({\n text: `${alertsCount} alert${alertsCount > 1 ? 's' : ''}`,\n theme: 'warning',\n });\n }\n\n return (\n <>\n {this.renderMasterTypeSwitcher()}\n <SystemStateOverview\n tab=\"masters\"\n labels={labels}\n counters={counters}\n stateThemeMappings={stateThemeMappings}\n stateOverview={stateOverview}\n counterGroup={counterGroups}\n />\n </>\n );\n }\n\n renderImpl() {\n const {initialized, collapsibleSize, collapsed} = this.props;\n\n if (!initialized) {\n return null;\n }\n\n const content = this.renderContent();\n const overview = this.renderOverview();\n\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name={'Masters'}\n className={b({open: !collapsed})}\n headingClassName={b('heading', stickyTopClassName)}\n overview={overview}\n collapsed={collapsed}\n onToggle={this.onToggle}\n size={collapsibleSize}\n >\n <div className={b('content')}>\n {this.renderAlerts()}\n {content}\n </div>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <MastersUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {secondary, primary, providers, discovery, queueAgents, counters, initialized, alerts} =\n state.system.masters;\n return {\n initialized,\n secondary,\n primary,\n providers,\n discovery,\n queueAgents,\n counters,\n alerts,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n collapsed: getSettingsSystemMastersCollapsed(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemMastersCollapsed,\n};\n\nfunction MastersUpdater() {\n const dispatch = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadMasters()).then(({isRetryFutile} = {}) => {\n if (isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Masters);\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {VisibleHostType} from '../../../constants/system/masters';\nimport {getMastersHostType} from '../../../store/selectors/settings';\n\nexport const getSystemSchedulers = (state) => state.system.schedulersAndAgents.schedulers;\nexport const getSystemSchedulerAlerts = (state) => state.system.schedulersAndAgents.schedulerAlerts;\nexport const getSystemAgents = (state) => state.system.schedulersAndAgents.agents;\nexport const getSystemAgentAlerts = (state) => state.system.schedulersAndAgents.agentAlerts;\nexport const getSystemSchedulerAndAgentVisibleHostType = (state) =>\n state.system.schedulersAndAgents.hostType;\n\nexport const getSystemSchedulersWithState = createSelector(\n [getSystemSchedulers, getMastersHostType],\n (schedulers, hostType) => {\n const path = hostType === VisibleHostType.host ? '' : '/@annotations/physical_host';\n return map_(schedulers, (sheduler) => {\n const res = connectedSchedulersToState(path, sheduler);\n return {\n ...res,\n host: ypath.getValue(sheduler.host, ''),\n physicalHost: ypath.getValue(sheduler.host, '/@annotations/physical_host'),\n maintenanceMessage: !ypath.getValue(sheduler, '/host/@maintenance')\n ? undefined\n : ypath.getValue(sheduler, '/host/@maintenance_message') || 'Maintenance',\n };\n });\n },\n);\n\nexport const getSystemAgentsWithState = createSelector(\n [getSystemAgents, getMastersHostType],\n (agents, hostType) => {\n const path = hostType === VisibleHostType.host ? '' : '/@annotations/physical_host';\n return map_(agents, (agent) => {\n const res = connectedAgentsToState(path, agent);\n return {\n ...res,\n host: ypath.getValue(agent.host, ''),\n physicalHost: ypath.getValue(agent.host, '/@annotations/physical_host'),\n maintenanceMessage: !ypath.getValue(agent, '/host/@maintenance')\n ? undefined\n : ypath.getValue(agent, '/host/@maintenance_message') || 'Maintenance',\n };\n });\n },\n);\n\nexport const getSystemSchedulerAndAgentCounters = createSelector(\n [getSystemSchedulersWithState, getSystemAgentsWithState],\n (schedulersWithState, agentsWithState) => {\n return {\n schedulers: extractSchedulersCounters(schedulersWithState),\n agents: extractAgentsCounters(agentsWithState),\n };\n },\n);\n\nexport const getSystemSchedulerAndAgentAlerts = createSelector(\n [getSystemSchedulerAlerts, getSystemAgentAlerts],\n (schedulerAlerts, agentAlerts) => {\n return {\n schedulers: schedulerAlerts,\n agents: agentAlerts,\n };\n },\n);\n\nfunction connectedSchedulersToState(path, connectedHost) {\n const {connected, host} = connectedHost;\n const state = typeof connected !== 'undefined' ? (connected ? 'active' : 'standby') : 'offline';\n return {address: ypath.getValue(host, path), state};\n}\n\nfunction connectedAgentsToState(path, connectedHost) {\n const {connected, host} = connectedHost;\n const state =\n typeof connected !== 'undefined' ? (connected ? 'connected' : 'disconnected') : 'offline';\n return {address: ypath.getValue(host, path), state};\n}\n\nconst numberOf = (statefulHosts, state) => {\n return reduce_(\n statefulHosts,\n (acc, host) => {\n return host.state === state ? acc + 1 : acc;\n },\n 0,\n );\n};\n\nfunction extractSchedulersCounters(statefulHosts) {\n return {\n total: statefulHosts.length,\n active: numberOf(statefulHosts, 'active'),\n standby: numberOf(statefulHosts, 'standby'),\n offline: numberOf(statefulHosts, 'offline'),\n };\n}\n\nfunction extractAgentsCounters(statefulHosts) {\n return {\n total: statefulHosts.length,\n connected: numberOf(statefulHosts, 'connected'),\n disconnected: numberOf(statefulHosts, 'disconnected'),\n offline: numberOf(statefulHosts, 'offline'),\n };\n}\n","import {getAgents, getSchedulers} from '../../../store/actions/system/schedulers';\nimport {FETCH_SCHEDULERS} from '../../../constants/system/schedulers';\nimport {isRetryFutile} from '../../../utils/index';\nimport {showErrorPopup} from '../../../utils/utils';\nimport {toaster} from '../../../utils/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 {getBatchError, splitBatchResults} from '../../../../shared/utils/error';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {USE_SUPRESS_SYNC} from '../../../../shared/constants';\nimport {loadSchedulersAndAgents} from './index';\nimport {changeMaintenance} from './masters';\nimport {getCurrentUserName} from '../../selectors/global';\n\nexport function getSchedulers() {\n return ytApiV3Id\n .list(YTApiId.systemSchedulers, {\n path: '//sys/scheduler/instances',\n attributes: ['annotations', 'maintenance', 'maintenance_message'],\n ...USE_SUPRESS_SYNC,\n })\n .then((hosts) => {\n const ordered = sortBy_(hosts, (host) => {\n return ypath.getValue(host, '');\n });\n return getSchedulersState(ordered);\n });\n}\n\nfunction getSchedulersState(hosts) {\n const requests = [\n {\n command: 'get',\n parameters: {\n path: '//sys/scheduler/@alerts',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n ];\n\n forEach_(hosts, (host) => {\n const name = ypath.getValue(host, '');\n requests.push({\n command: 'get',\n parameters: {\n path: '//sys/scheduler/instances/' + name + '/orchid/scheduler/service/connected',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n });\n });\n\n return ytApiV3Id.executeBatch(YTApiId.systemSchedulersState, {requests}).then((data) => {\n const {outputs} = splitBatchResults(data, 'Failed to get scheduler states');\n const alerts = outputs[0];\n const connectedHosts = map_(hosts, (host, index) => {\n return {\n host: host,\n connected: outputs[index + 1],\n };\n });\n return {schedulers: connectedHosts, schedulerAlerts: alerts};\n });\n}\n\nfunction getAgentsState(hosts) {\n const requests = [];\n forEach_(hosts, (host) => {\n const basePath = '//sys/controller_agents/instances/' + ypath.getValue(host, '');\n\n requests.push(\n {\n command: 'get',\n parameters: {\n path: basePath + '/orchid/controller_agent/service/connected',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n {\n command: 'get',\n parameters: {\n path: basePath + '/@alerts',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n );\n });\n\n return ytApiV3Id.executeBatch(YTApiId.systemCAStates, {requests}).then((data) => {\n const {outputs} = splitBatchResults(data, 'Failed to get CA states');\n const agents = map_(hosts, (host, index) => ({\n host,\n connected: outputs[2 * index],\n }));\n const agentAlerts = reduce_(\n outputs,\n (alerts, value, index) => {\n if (index % 2) {\n return alerts.concat(value);\n }\n return alerts;\n },\n [],\n );\n\n return {agents, agentAlerts};\n });\n}\n\nexport function getAgents() {\n return ytApiV3Id\n .list(YTApiId.systemCAInstances, {\n path: '//sys/controller_agents/instances',\n attributes: ['annotations', 'maintenance', 'maintenance_message'],\n ...USE_SUPRESS_SYNC,\n })\n .then((hosts) => {\n hosts = hosts || [];\n const res = sortBy_(hosts, (host) => {\n return ypath.getValue(host, '');\n });\n return getAgentsState(res);\n });\n}\n\nexport const changeSchedulerMaintenance =\n ({path, maintenance, message}) =>\n async (dispatch, getSate) => {\n const login = getCurrentUserName(getSate());\n const result = await changeMaintenance({\n path,\n login,\n maintenance,\n message,\n });\n\n const error = getBatchError(result, 'Failed to update master maintenance');\n if (error) {\n throw error;\n }\n\n dispatch(loadSchedulersAndAgents());\n };\n","import React, {useCallback} from 'react';\n\nimport hammer from '../../../../common/hammer';\nimport block from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport Icon from '../../../../components/Icon/Icon';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport NodeQuad from '../../NodeQuad/NodeQuad';\n\nimport '../Schedulers.scss';\nimport {ChangeMaintenanceButton} from '../../Masters/ChangeMaintenanceButton';\nimport {makeShortSystemAddress} from '../../helpers/makeShortSystemAddress';\nimport {useDispatch} from '../../../../store/redux-hooks';\nimport {changeSchedulerMaintenance} from '../../../../store/actions/system/schedulers';\n\nconst b = block('system');\n\nexport type SchedulerProps = {\n host: string;\n address: string;\n physicalHost: string;\n state: 'active' | 'connected' | 'standby' | 'disconnected' | 'offline';\n maintenanceMessage?: React.ReactNode;\n type: 'schedulers' | 'agents';\n};\n\nexport default function Scheduler({\n host,\n physicalHost,\n address,\n state,\n maintenanceMessage,\n type,\n}: SchedulerProps) {\n const dispatch = useDispatch();\n const theme = (\n {\n active: 'online',\n connected: 'online',\n standby: 'banned',\n disconnected: 'banned',\n offline: 'offline',\n } as const\n )[state];\n\n const formatedAddress = hammer.format['Address'](address);\n const path = `//sys/${type === 'schedulers' ? 'scheduler' : 'controller_agents'}/instances/${host}`;\n\n const handleOnMaintenanceChange = useCallback(\n async (data: {path: string; message: string; maintenance: boolean}) => {\n await dispatch(changeSchedulerMaintenance(data));\n },\n [dispatch],\n );\n\n return (\n <div className={b('scheduler')}>\n <NodeQuad theme={theme} />\n <div className={b('scheduler-status')}>{hammer.format['ReadableField'](state)}</div>\n <div className={b('maintenance')}>\n {maintenanceMessage && (\n <Tooltip content={maintenanceMessage}>\n <Icon awesome=\"digging\" face=\"solid\" />\n </Tooltip>\n )}\n </div>\n <div title={formatedAddress} className={b('scheduler-host')}>\n <Tooltip content={formatedAddress} ellipsis>\n <div className={b('scheduler-host-address')}>\n {makeShortSystemAddress(formatedAddress) || formatedAddress}\n </div>\n </Tooltip>\n <div className={b('scheduler-host-btn')}>\n {host && <ClipboardButton view=\"flat-secondary\" text={host} />}\n </div>\n <ChangeMaintenanceButton\n className={b('scheduler-host-btn')}\n path={path}\n title={`Edit ${address}`}\n host={physicalHost}\n container={host}\n maintenance={Boolean(maintenanceMessage)}\n maintenanceMessage={maintenanceMessage as string}\n onMaintenanceChange={handleOnMaintenanceChange}\n />\n </div>\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {useDispatch} from '../../../store/redux-hooks';\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 {YTAlertBlock} from '../../../components/Alert/Alert';\n\nimport {loadSchedulersAndAgents} from '../../../store/actions/system';\n\nimport prepareTags from './prepareTags';\n\nimport './Schedulers.scss';\nimport {getSettingsSystemSchedulersCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemSchedulersCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\n\nconst b = block('system');\nconst headingCN = block('elements-heading')({size: 's'});\n\nconst connectedHost = PropTypes.shape({\n host: PropTypes.string,\n connected: PropTypes.bool,\n});\n\nclass SchedulersAndAgents extends Component {\n static propTypes = {\n // from connect\n schedulers: PropTypes.arrayOf(connectedHost),\n agents: PropTypes.arrayOf(connectedHost),\n counters: PropTypes.shape({\n schedulers: PropTypes.object,\n agents: PropTypes.object,\n }),\n alerts: PropTypes.shape({\n schedulers: PropTypes.arrayOf(PropTypes.object),\n agents: PropTypes.arrayOf(PropTypes.object),\n }),\n };\n\n static defaultProps = {\n schedulers: [],\n agents: [],\n alerts: {\n schedulers: [],\n agents: [],\n },\n };\n\n renderHosts(name, connectedHosts) {\n return map_(\n connectedHosts,\n ({host, physicalHost, address, state, maintenanceMessage}, index) => {\n return (\n <Scheduler\n key={host ?? index}\n host={host}\n physicalHost={physicalHost}\n address={address}\n state={state}\n maintenanceMessage={maintenanceMessage}\n type={name}\n />\n );\n },\n );\n }\n\n renderSection(name, heading) {\n const objects = this.props[name];\n const rows = Math.min(7, objects.length);\n const columns = Math.ceil(objects.length / rows);\n const style = {\n gridTemplateRows: `repeat(${rows}, 20px`,\n justifyContent: columns > 2 ? 'space-between' : 'start',\n };\n const containerStyle = {\n marginRight: name === 'schedulers' && columns === 1 ? '100px' : null,\n width: columns > 1 ? '100%' : 'auto',\n };\n\n return (\n <div className={b(name)} style={containerStyle}>\n <div className={headingCN}>{heading}</div>\n <div className={b(`${name}-hosts`)} style={style}>\n {this.renderHosts(name, objects)}\n </div>\n </div>\n );\n }\n\n renderOverview() {\n const {counters, alerts} = this.props;\n const tags = prepareTags(counters, alerts);\n\n return (\n <>\n <VisibleHostTypeRadioButton className={b('container-host-radio')} />\n <div className={b('heading-overview')}>\n {map_(tags, ({theme, label}) => (\n <span key={label} className={block('elements-label')({theme})}>\n {label}\n </span>\n ))}\n </div>\n </>\n );\n }\n\n onToggle = () => {\n const {collapsed, setSettingsSystemSchedulersCollapsed} = this.props;\n setSettingsSystemSchedulersCollapsed(!collapsed);\n };\n\n renderImpl() {\n const {schedulers, agents, alerts, collapsibleSize, collapsed} = this.props;\n\n if (!schedulers.length && !agents.length) {\n return null;\n }\n\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name=\"Schedulers and controller agents\"\n headingClassName={stickyTopClassName}\n overview={this.renderOverview()}\n collapsed={collapsed}\n onToggle={this.onToggle}\n size={collapsibleSize}\n >\n {map_(alerts.schedulers, (alert) => (\n <YTAlertBlock key={alert.attributes.host} error={alert} />\n ))}\n {map_(alerts.agents, (alert, index) => (\n <YTAlertBlock 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} from 'react-redux';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport hammer from '../../../common/hammer';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport withStickyFooter from '../../../components/ElementsTable/hocs/withStickyFooter';\nimport {sortStateType} from '../../../components/ElementsTable/ElementsTableHeader';\nimport withStickyHead from '../../../components/ElementsTable/hocs/withStickyHead';\nimport ElementsTableBase from '../../../components/ElementsTable/ElementsTable';\nimport SystemCounters from '../SystemCounters/SystemCounters';\nimport Label from '../../../components/Label/Label';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nimport {SYSTEM_CHUNKS_TABLE_ID} from '../../../constants/tables';\nimport {loadChunks} from '../../../store/actions/system/chunks';\nimport {getSettingsSystemChunksCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemChunksCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport './Chunks.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\nimport {HEADER_HEIGHT} from '../../../constants';\n\nconst b = block('system');\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nclass Chunks extends Component {\n static _formatChunkName(name) {\n return hammer.format['ReadableField'](\n name === 'chunks' ? 'total' : name.substring(0, name.length - '_chunks'.length),\n );\n }\n\n static _formatChunkCount(count) {\n return count === 0 ? '' : hammer.format['Number'](count);\n }\n\n static _prepareColumnSet(types) {\n let columnSet = map_(types, 'name');\n\n columnSet = filter_(columnSet, (item) => item !== 'chunks');\n columnSet.push('chunks');\n columnSet.unshift('cell_tag');\n\n return columnSet;\n }\n\n static propTypes = {\n // from connect\n replication: PropTypes.bool,\n sealer: PropTypes.bool,\n refresh: PropTypes.bool,\n requisitionUpdate: PropTypes.bool,\n cells: PropTypes.arrayOf(PropTypes.object),\n types: PropTypes.arrayOf(PropTypes.object),\n\n sortState: sortStateType,\n };\n\n onToggle = () => {\n const {collapsed, setSettingsSystemChunksCollapsed} = this.props;\n setSettingsSystemChunksCollapsed(!collapsed);\n };\n\n _prepareColumns(types) {\n const columns = {};\n\n forEach_(types, (type) => {\n columns[type.name] = {\n ...type,\n get: function (cellData) {\n return cellData[type.name];\n },\n caption: Chunks._formatChunkName(type.name),\n align: 'right',\n sort: true,\n };\n });\n\n columns.cell_tag = {\n get: function (cellData) {\n const cellTag = cellData.cell_tag;\n return cellTag === 'total' ? cellTag : Number(cellTag);\n },\n name: 'cell_tag',\n caption: hammer.format['ReadableField']('cell_tag'),\n align: 'left',\n sort: true,\n };\n\n return columns;\n }\n\n renderLabels() {\n const {replication, sealer, refresh, requisitionUpdate} = this.props;\n\n const labels = [\n {\n text: 'Replication',\n value: replication,\n },\n {\n text: 'Sealer',\n value: sealer,\n },\n {\n text: 'Refresh',\n value: refresh,\n },\n {\n text: 'Requisition Update',\n value: requisitionUpdate,\n },\n ];\n\n return map_(labels, (label) => {\n let theme, text;\n\n if (typeof label.value === 'boolean') {\n theme = label.value ? 'success' : 'danger';\n text = label.value ? `${label.text} enabled` : `${label.text} disabled`;\n } else {\n theme = 'default';\n text = `${label.text} unknown`;\n }\n\n return <Label key={label.text} theme={theme} text={text} />;\n });\n }\n\n renderImpl() {\n const {cells, types, sortState, collapsibleSize, collapsed} = this.props;\n const [rest, total] = partition_(cells, ({cell_tag}) => 'total' !== cell_tag);\n\n if (!cells || 0 === cells.length) {\n return null;\n }\n\n const columns = this._prepareColumns(types);\n const sortedCells = hammer.utils.sort(rest, sortState, columns);\n\n // TABLE\n const tableSettings = {\n size: 's',\n theme: 'embedded',\n striped: false,\n css: 'chunk-cells',\n computeKey: function (item) {\n return item.cell_tag;\n },\n tableId: SYSTEM_CHUNKS_TABLE_ID,\n columns: {\n items: columns,\n sets: {\n default: {\n items: Chunks._prepareColumnSet(types),\n },\n },\n },\n templates: {\n key: 'system/chunk-cells',\n data: {columns: columns},\n },\n header: false,\n };\n\n const table = Object.assign({}, tableSettings, {\n items: sortedCells,\n columns: Object.assign({}, tableSettings.columns, {\n items: columns,\n mode: 'default',\n }),\n });\n\n const totalRow = total[0];\n\n let countersBlock = null;\n if (totalRow) {\n /* eslint-disable camelcase */\n const {\n lost_vital_chunks,\n data_missing_chunks,\n parity_missing_chunks,\n chunks,\n quorum_missing_chunks,\n } = totalRow;\n\n const counters = {\n flags: {\n lvc: Chunks._formatChunkCount(lost_vital_chunks),\n dmc: Chunks._formatChunkCount(data_missing_chunks),\n pmc: Chunks._formatChunkCount(parity_missing_chunks),\n qmc: Chunks._formatChunkCount(quorum_missing_chunks),\n },\n total: hammer.format['Number'](chunks),\n };\n /* eslint-enable camelcase */\n const stateThemeMappings = {\n lvc: 'danger',\n dmc: 'warning',\n pmc: 'warning',\n qmc: 'danger',\n };\n countersBlock = (\n <SystemCounters\n counters={counters}\n renderLinks={false}\n stateThemeMappings={stateThemeMappings}\n />\n );\n }\n\n const overview = (\n <div className={b('heading-overview')}>\n {countersBlock}\n {this.renderLabels()}\n </div>\n );\n\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name={'Chunks'}\n headingClassName={stickyTopClassName}\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 {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';\nimport {toaster} from '../../../utils/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.53zm-.654-1.36a2 2 0 0 0-.175-.103L9.499 2.427a1.5 1.5 0 0 0-1.197-.063l-4.829 1.81q-.12.045-.23.11L7.05 6.185zM2.5 5.59l3.75 1.875v5.984l-2.92-1.46a1.5 1.5 0 0 1-.83-1.342zM1.267 4.343c-.173.38-.267.8-.267 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.77a3 3 0 0 0-1.48 1.203.75.75 0 0 0-.2.37\", clipRule: \"evenodd\" })));\nexport default Cube;\n","import React from 'react';\nimport {useSelector} from '../../store/redux-hooks';\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' | 'Cypress 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 {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name={name}\n headingClassName={stickyTopClassName}\n overview={\n <>\n {!collapsed && (\n <ExpandButton\n all\n showText\n expanded={expandRacks}\n toggleExpanded={() => setExpandRacks(!expandRacks)}\n />\n )}\n {overview}\n </>\n }\n onToggle={onToggleCollapsed}\n collapsed={collapsed}\n size={UI_COLLAPSIBLE_SIZE}\n togglerRightPadding=\"small\"\n >\n <RoleGroupsContainer>\n {map_(roleGroups, (data) => {\n return (\n <RoleGroup\n key={data.name}\n data={data}\n makeUrl={makeUrl}\n hideOthers\n bannedAsState\n forceExpand={expandRacks}\n />\n );\n })}\n </RoleGroupsContainer>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n}\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {loadSystemProxies} from '../../../store/actions/system/proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getSettingsSystemHttpProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemHttpProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport type {RootState} from '../../../store/reducers';\nimport {useDispatch} from '../../../store/redux-hooks';\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 = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemProxies()).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\nexport default connector(Proxies);\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {setSettingsSystemRpcProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemRPCProxies} from '../../../store/actions/system/rpc-proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\nimport {getSettingsSystemRpcProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {useDispatch} from '../../../store/redux-hooks';\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 = useDispatch();\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 {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';\nimport {toaster} from '../../../utils/toaster';\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 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 {USE_CACHE, USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\nimport {splitBatchResults} from '../../../../shared/utils/error';\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} 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';\nimport {toaster} from '../../../utils/toaster';\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 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} from 'react-redux';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\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';\nimport {setSettingsSystemNodesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemNodes} from '../../../store/actions/system/nodes';\nimport {RoleGroupInfo} from '../../../store/reducers/system/proxies';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport type {RootState} from '../../../store/reducers';\n\nimport {\n getSettingSystemNodesNodeType,\n getSettingsSystemNodesCollapsed,\n} from '../../../store/selectors/settings/settings-ts';\nimport {getSystemNodesNodeTypesToLoad} from '../../../store/selectors/system/nodes';\nimport {\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 let flags: Array<typeof f | 'banned' | '!banned'> = [f];\n if (s === 'banned') {\n flags = ['banned'];\n } else if (s) {\n flags = [f, '!banned'];\n }\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 {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n overview={renderOverview()}\n headingClassName={stickyTopClassName}\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 = useDispatch();\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 from 'react';\nimport {useSelector} from 'react-redux';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {setSettingsSystemCypressProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemCypressProxies} from '../../../store/actions/system/cypress-proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getSettingsSystemCypressProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport {MakeUrlParams} from '../ProxiesImpl/RoleGroup';\nimport {ProxiesImpl} from '../ProxiesImpl/ProxiesImpl';\nimport {\n getCypressProxiesCounters,\n getCypressProxiesRoleGroups,\n} from '../../../store/reducers/system/cypress-proxies';\nimport {SystemNodeCounters} from '../../../store/reducers/system/proxies';\n\nfunction CypressProxiesOverview({counters}: {counters: SystemNodeCounters}) {\n return <SystemStateOverview tab=\"cypress_proxies\" counters={counters} />;\n}\n\nfunction CypressProxies() {\n const cluster = useSelector(getCluster);\n const collapsed = useSelector(getSettingsSystemCypressProxiesCollapsed);\n const roleGroups = useSelector(getCypressProxiesRoleGroups);\n const counters = useSelector(getCypressProxiesCounters);\n const dispatch = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemCypressProxies()).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n const onToggle = () => {\n dispatch(setSettingsSystemCypressProxiesCollapsed(!collapsed));\n };\n\n return (\n <React.Fragment>\n {counters.total > 0 && (\n <ProxiesImpl\n name={'Cypress Proxies'}\n overview={<CypressProxiesOverview counters={counters} />}\n onToggleCollapsed={onToggle}\n roleGroups={roleGroups}\n collapsed={collapsed}\n makeUrl={(params) => makeRoleGroupUrl(params, cluster)}\n />\n )}\n </React.Fragment>\n );\n}\n\nfunction makeRoleGroupUrl({state}: MakeUrlParams = {}, cluster: string) {\n const params = new URLSearchParams();\n if (state) {\n params.append('state', state);\n }\n return `/${cluster}/components/cypress_proxies?${params}`;\n}\n\nexport default CypressProxies;\n","import {ThunkAction, UnknownAction} from '@reduxjs/toolkit';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {USE_SUPRESS_SYNC} from '../../../../shared/constants';\nimport {getBatchError} from '../../../../shared/utils/error';\nimport ypath from '../../../common/thor/ypath';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {\n fetchCypressProxiesFailure,\n fetchCypressProxiesRequest,\n fetchCypressProxiesSuccess,\n} from '../../../store/reducers/system/cypress-proxies';\nimport {RoleGroupItemInfo} from '../../../store/reducers/system/proxies';\nimport {isRetryFutile} from '../../../utils/index';\nimport {extractProxyCounters, extractRoleGroups} from '../../../utils/system/proxies';\nimport {showErrorPopup} from '../../../utils/utils';\n\ntype CypressProxiesThunkAction<T = void> = ThunkAction<\n Promise<T>,\n RootState,\n unknown,\n UnknownAction\n>;\n\nfunction extractCypressProxy(data: object): Array<RoleGroupItemInfo> {\n const cypressProxies = ypath.getValue(data);\n const result = [];\n for (const proxy in cypressProxies) {\n if (cypressProxies[proxy]) {\n const proxyData = ypath.getAttributes(cypressProxies[proxy]);\n const state = ypath.getValue(proxyData, '/state');\n const effectiveState = !state || state === 'unknown' ? 'other' : state;\n const banned = ypath.getValue(proxyData, '/@banned');\n result.push({\n name: proxy,\n state,\n effectiveState,\n banned,\n });\n }\n }\n return result;\n}\n\nexport function loadSystemCypressProxies(): CypressProxiesThunkAction<\n undefined | {isRetryFutile: boolean}\n> {\n return (dispatch) => {\n dispatch(fetchCypressProxiesRequest());\n\n return ytApiV3Id\n .executeBatch(YTApiId.systemCypressProxies, {\n requests: [\n {\n command: 'get',\n parameters: {\n path: '//sys/cypress_proxies',\n attributes: ['banned', 'state'],\n ...USE_SUPRESS_SYNC,\n },\n },\n ],\n })\n .then((result) => {\n const error = getBatchError(result, 'Failed to load CypressProxies');\n if (error) {\n throw error;\n }\n\n const data = result?.[0]?.output;\n const cypressProxies = extractCypressProxy(data);\n\n dispatch(\n fetchCypressProxiesSuccess({\n roleGroups: extractRoleGroups(cypressProxies),\n counters: extractProxyCounters(cypressProxies),\n }),\n );\n return undefined;\n })\n .catch((error) => {\n dispatch(fetchCypressProxiesFailure(error));\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/cypress-proxies',\n autoHiding: false,\n theme: 'danger',\n content: `[code ${code}] ${message}`,\n title: 'Could not load Cypress-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 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';\nimport CypressProxies from '../CypressProxies/CypressProxies';\n\nexport const SystemGeneralTab: FC = () => {\n return (\n <>\n <Resources />\n <Masters />\n <SchedulersAndAgents />\n <Chunks />\n <Proxies />\n <RpcProxies />\n <CypressProxies />\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 '../../../store/redux-hooks';\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 {formatByParams} from '../../../../../shared/utils/format';\nimport {TabItem} from '../../../../components/Tabs/Tabs';\nimport {SystemTabs} from '../../../../constants/system/tabs';\nimport {UIFactory} from '../../../../UIFactory';\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 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","export const VisibleHostType = {\n host: 'host',\n physicalHost: 'physicalHost',\n};\n\nexport const mastersRadioButtonItems = [\n {value: VisibleHostType.host, text: 'Container'},\n {value: VisibleHostType.physicalHost, text: 'Host'},\n];\n","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","import React from 'react';\n\nimport {ThemeProvider} from '@gravity-ui/uikit';\n\nimport {Provider} from 'react-redux';\nimport {useSelector} from '../../store/redux-hooks';\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\nimport {getWindowStore} from '../../store/window-store';\nimport {getTheme} from '../../store/selectors/global';\n\nexport function AppStoreProvider({children}: {children: React.ReactNode}) {\n return (\n <Provider store={getWindowStore()}>\n <AppThemeProvider>\n <ErrorBoundary>{children}</ErrorBoundary>\n </AppThemeProvider>\n </Provider>\n );\n}\n\nexport function AppThemeProvider({children}: {children: React.ReactNode}) {\n const theme = useSelector(getTheme);\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n"],"names":["props","_jsx","_objectSpread","xmlns","fill","viewBox","children","fillRule","d","clipRule","block","cn","ExpandButton","_ref","className","expanded","inline","toggleExpanded","all","showText","size","qa","titleExpanded","titleCollapsed","_jsxs","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","SystemTopRowContent","RowWithName","page","Page","SYSTEM","CreateClusterNotificationButton","clusterConfig","useSelector","getCurrentClusterConfig","CreateNotificationButton","url","UIFactory","createNotificationUrl","href","target","React","mapDispatchToProps","toggleColumnSortOrder","compose","connect","sortState","tables","Component","_WithStickyHead","_React$Component","WithStickyHead","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","top","this","bWrapper","sticky","style","prepareTableClassName","ElementsTableHeader","renderStickyHead","displayName","concat","getDisplayName","defaultProps","templates","theme","padded","striped","HEADER_HEIGHT","formatNumber","hammer","format","Number","formatBytes","Bytes","b","Resources","_Component","resources","usage","resource_usage","limits","resource_limits","caption","text","cpu","progress","user_memory","gpu","_this$props","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","YTErrorBlock","type","message","toFixed","entries","map","Progress","headingCN","prepareResources","diskResources","prepareDiskResources","showResources","length","showDiskResources","diskResourcesCN","renderFullNodesMessage","renderResources","ResourcesUpdater","renderImpl","dispatch","useDispatch","updateFn","allowUpdate","loadSystemResources","then","isRetryFutile","useUpdater","state","_state$system$resourc","system","getMediumList","setSetting","hostType","getMastersHostType","onChange","evt","SettingName","MASTERS_HOST_TYPE","NAMESPACES","RadioButton","name","items","mastersRadioButtonItems","SystemCounters","params","makeUrl","cluster","tab","isEmptyParams","Object","keys","qs","isNaN","renderLinks","prepareUrl","undefined","content","_Fragment","Link","_this","_this$props2","counters","stateThemeMappings","map_","flags","flag","flagName","renderCounter","formatCounterName","_defineProperty","_this2","_this$props3","states","stateName","countersFlags","renderCountersFlags","countersStates","renderCountersStates","counterTotal","renderCounterTotal","getCluster","SystemStateLabels","labels","Flex","gap","_ref2","index","Label","SystemStateOverview","stateOverview","rest","_objectWithoutProperties","_excluded","_this$props$stateOver","stack","computeEffectiveStateProgress","SwitchLeaderShortInfo","startTime","useRef","moment","_useState","useState","_useState2","_slicedToArray","currentTime","setCurrentTime","_useState3","_useState4","finishTime","setFinishTime","updateCurrentTime","timeout","forceAutoRefresh","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","abrupt","getStateForHost","newLeaderPath","sent","loadMasters","stop","MetaTable","TimeDuration","diff","current","SwitchLeaderShortInfoStatus","SwitchLeaderDialog","error","setError","selectLeadingHostOptions","hosts","host","path","getPath","split","pop","leader","find","leaderPath","YTDFDialog","visible","headerProps","cellId","initialValues","leading_primary_master","fields","required","extras","options","placeholder","width","filterable","_toConsumableArray","makeErrorFields","footerProps","textApply","onAdd","form","getState","values","confirm","e","onClose","cancel","pristineSubmittable","SwitchLeaderButton","setVisible","handleConfirm","_ref3","leaderAddress","switchLeader","ytApiV4Id","YTApiId","cell_id","new_leader_address","wrapApiPromiseByToaster","toasterName","successContent","AppStoreProvider","successTitle","autoHide","_x","apply","withTooltip","tooltipProps","awesome","NodeQuad","_ref$theme","_ref$children","banned","alerts","decommissioned","full","effectiveTheme","stroke","reShortNameSystemPage","makeRegexpFromSettings","uiSettings","makeShortSystemAddress","address","_res$groups","res","exec","groups","shortname","ChangeMaintenanceButton","container","maintenance","maintenanceMessage","onMaintenanceChange","_useToggle","useToggle","_useToggle2","toggleVisible","handleMaintenanceChange","_form$getState","t0","label","disabled","PencilIcon","instanceStateToTheme","active","connected","leading","disconnected","following","follower_recovery","leader_recovery","standby","elections","stopped","unknown","online","offline","Instance","instance","allowVoting","allowService","$address","$physicalAddress","attributes","$attributes","getMaintenance","getMaintenanceMessage","voting","denyVoting","addressWithoutPort","handleOnMaintenanceChange","useCallback","changeMasterMaintenance","shortName","Tooltip","face","read_only","ReadOnlyIcon","height","warming_up","WarmUpIcon","alignItems","ClipboardButton","hidden","Text","color","CellTag","cellTag","hexCellTag","Hex","placement","Secondary","MasterGroup","quorum","instances","status","quorumTitle","leaderCommitedVersion","Fragment","Readable","delimiter","Boolean","gridRowStart","renderQuorum","SystemAlert","selectMasterAlerts","alert","id","YTAlertBlock","computeStateProgress","sortStateProgress","count","Masters","_len","args","Array","_key","onToggle","setSettingsSystemMastersCollapsed","collapsed","renderMastersGroups","masters","master","_providers$instances","_discovery$instances","_queueAgents$instance","secondary","providers","discovery","queueAgents","groupsCount","VisibleHostTypeRadioButton","_providers$instances2","_discovery$instances2","_queueAgents$instance2","_providers$instances3","_discovery$instances3","_queueAgents$instance3","primary","fitIntoSection","mastersFitIntoSection","secondaryGroups","renderSection","heading","alertsCount","renderMasterTypeSwitcher","unavailable","recovery","counterGroup","_this$props4","initialized","collapsibleSize","renderContent","overview","renderOverview","StickyContainer","stickyTopClassName","CollapsibleSectionStateLess","open","headingClassName","renderAlerts","MastersUpdater","_state$system$masters","UI_COLLAPSIBLE_SIZE","getSettingsSystemMastersCollapsed","getSystemSchedulersWithState","createSelector","schedulersAndAgents","schedulers","VisibleHostType","sheduler","connectedHost","ypath","connectedSchedulersToState","physicalHost","getSystemAgentsWithState","agents","agent","connectedAgentsToState","getSystemSchedulerAndAgentCounters","schedulersWithState","agentsWithState","statefulHosts","numberOf","extractAgentsCounters","getSystemSchedulerAndAgentAlerts","schedulerAlerts","agentAlerts","reduce_","acc","loadSchedulersAndAgents","FETCH_SCHEDULERS","REQUEST","Promise","ytApiV3Id","list","systemSchedulers","USE_SUPRESS_SYNC","requests","command","parameters","executeBatch","systemSchedulersState","outputs","splitBatchResults","getSchedulersState","sortBy_","systemCAInstances","basePath","systemCAStates","getAgentsState","_ref2$","_ref2$2","SUCCESS","_error$response","FAILURE","response","code","toaster","add","autoHiding","actions","showErrorPopup","changeSchedulerMaintenance","getSate","login","result","getCurrentUserName","changeMaintenance","getBatchError","_x2","Scheduler","formatedAddress","ellipsis","SchedulersAndAgents","setSettingsSystemSchedulersCollapsed","connectedHosts","objects","rows","Math","min","columns","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","css","computeKey","item","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","footer","ChunksUpdater","substring","columnSet","filter_","unshift","allowRetry","loadChunks","_state$system$chunks","getSettingsSystemChunksCollapsed","extractRoleGroups","proxies","roleGroups","roles","proxy","roleName","role","effectiveStates","incrementCounters","values_","MAIN_STATES","Set","getNodeffectiveState","has","incrementStateCounter","k","extractProxyCounters","each_","effectiveState","makeProxyInfo","dead","GridWithMediaMinWidth","itemClassName","_ref$maxWidth","maxWidth","itemMinWidth","_ref$itemMaxWidth","itemMaxWidth","_ref$gap","asideHeaderWidth","getGlobalAsideHeaderWidth","_React$useMemo","guid","pagePadding","i","calcMinWidth","columnsCount","minWidth","nextMinWidth","mediaMaxWidthCondition","from","join","inlineClassName","inlineStyle","filter","COLORS_BY_STATUS","ONLINE","OFFLINE","BANNED","OTHER","FULL","StatsInfo","alertNumber","alertCount","decNumber","decCount","alertsUrl","decUrl","alertsValue","decValue","remaining","colors","addProgressStackSpacers","calculateStack","CountUrl","variant","TextCountUrl","RoleGroupsContainer","RoleGroup","_data$items","forceExpand","_counters$effectiveSt","_counters$effectiveSt2","_counters$effectiveSt3","_counters$effectiveSt4","other","_counters$flags","_counters$flags$banne","_counters$flags$full","_counters$flags$alert","alerts_online","_counters$flags$alert2","alerts_offline","_counters$flags$alert3","alerts_banned","_counters$flags$dec_o","dec_offline","_counters$flags$dec_o2","dec_online","_counters$flags$dec_b","dec_banned","setExpanded","useEffect","nameUrl","direction","Cube","fontWeight","grow","ProxiesImpl","onToggleCollapsed","_React$useState","_React$useState2","expandRacks","setExpandRacks","togglerRightPadding","hideOthers","bannedAsState","Proxies","setSettingsSystemHttpProxiesCollapsed","makeRoleGroupUrl","URLSearchParams","append","ProxiesUpdater","axios","request","method","FETCH_PROXIES","_state$system$proxies","loaded","getSettingsSystemHttpProxiesCollapsed","RpcProxies","setSettingsSystemRpcProxiesCollapsed","RpcProxiesUpdater","FETCH_RPC_PROXIES","systemRpcProxies","rpcProxies","getValue","_state$system$rpcProx","getSettingsSystemRpcProxiesCollapsed","loadSystemNodes","nodeTypes","SYSTEM_FETCH_NODES","suppress_transaction_coordinator_sync","suppress_upstream_sync","USE_MAX_SIZE","nodeType","USE_CACHE","systemNodes","_splitBatchResults","results","_toArray","racks","rackNames","nodes","rackA","rackB","compareVectors","UNAWARE","prepareRackNames","empty","createRack","nodeA","nodeB","$value","prepareNodes","node","rackName","getBoolean","effectiveFlag","rack","hasOwnProperty","call","insertNodeToRack","prepareRacks","slice","reduce","overviewCounters","extractNodeCounters","_groupRacks","groupedRacks","groupName","forEach","dcName","rackGroup","startsWith","every","rackGroups","groupRacks","prepareRoleGroups","increaseFlagCounter","dst","attrs","_node$$attributes2","_node$$attributes","info","isStateOnlineOffline","toAdd","g","STATE_THEME_MAPPING","RackGroup","roleGroup","makeComponentNodesUrl","expandAll","setExpandAll","makeComponentsNodesLink","rackFilter","group","showFlags","setSettingsSystemNodesCollapsed","NodesUpdater","getSystemNodesNodeTypesToLoad","useMemoizedIfEqual","_state$system$nodes","getSettingsSystemNodesCollapsed","getSettingSystemNodesNodeType","s","f","p","rackSelected","NoContent","warning","ReadableField","hint","SystemNodeTypeSelector","CypressProxiesOverview","getSettingsSystemCypressProxiesCollapsed","getCypressProxiesRoleGroups","getCypressProxiesCounters","fetchCypressProxiesRequest","systemCypressProxies","_result$","cypressProxies","proxyData","getAttributes","extractCypressProxy","output","fetchCypressProxiesSuccess","fetchCypressProxiesFailure","Toaster","setSettingsSystemCypressProxiesCollapsed","SystemGeneralTab","CypressProxies","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","ElementsTableFooter","itemHeight","itemMods","selectedIndex","cssHover","_this$state","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","renderRow","_prepareColumnsData","prepareColumnsData","set","_WithStickyFooter","WithStickyFooter","renderStickyFooter","toggleReducer","nextValue","initialValue","useReducer","Provider","store","getWindowStore","AppThemeProvider","ErrorBoundary","getTheme","ThemeProvider"],"sourceRoot":""}
1
+ {"version":3,"file":"js/system.2e84d486.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/pencil.svg","webpack://@ytsaurus/ui/./src/ui/pages/system/System/SystemTopRowContent.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Resources/Resources.js","webpack://@ytsaurus/ui/./src/ui/pages/system/VisibleHostTypeRadioButton.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemCounters/SystemCounters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemStateOverview/SystemStateLabels.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SystemStateOverview/SystemStateOverview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/components/SwitchLeaderShortInfo/SwitchLeaderShortInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/SwitchLeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/NodeQuad/NodeQuad.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/read-only-icon.svg","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/warmup-icon.svg","webpack://@ytsaurus/ui/./src/ui/pages/system/helpers/makeShortSystemAddress.ts","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/ChangeMaintenanceButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/Instance.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/CellTag.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/MasterGroup.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/SystemAlert.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/Masters/Masters.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/store/actions/system/index.js","webpack://@ytsaurus/ui/./src/ui/store/actions/system/schedulers.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/Scheduler/Scheduler.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/SchedulersAndAgents.js","webpack://@ytsaurus/ui/./src/ui/pages/system/SchedulersAndAgents/prepareTags.js","webpack://@ytsaurus/ui/./src/ui/pages/system/Chunks/Chunks.js","webpack://@ytsaurus/ui/./src/ui/utils/system/proxies.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/system/proxies.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Cube.js","webpack://@ytsaurus/ui/./src/ui/containers/GridWithMediaMinWidth/GridWithMediaMinWidth.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/StatsInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/RoleGroup.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/ProxiesImpl/ProxiesImpl.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/HttpProxies/HttpProxies.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/RpcProxies/RpcProxies.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/system/rpc-proxies.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/system/nodes.ts","webpack://@ytsaurus/ui/./src/ui/pages/system/Nodes/Nodes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/system/CypressProxies/CypressProxies.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/system/cypress-proxies.ts","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/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/constants/system/masters.js","webpack://@ytsaurus/ui/./node_modules/react-use/esm/useToggle.js","webpack://@ytsaurus/ui/./src/ui/containers/App/AppStoreProvider.tsx"],"sourcesContent":["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 size?: ButtonProps['size'];\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n size,\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 size={size}\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","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.88m3.098.658a3.6 3.6 0 0 0-1.878-1.879l1.28-1.28c.995.09 1.788.884 1.878 1.88z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgPencil;","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 '../../../store/redux-hooks';\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","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;","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","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 {YTErrorBlock} from '../../../components/Block/Block';\nimport hammer from '../../../common/hammer';\nimport {getMediumList} from '../../../store/selectors/thor';\nimport {loadSystemResources} from '../../../store/actions/system/resources';\nimport {useDispatch} from '../../../store/redux-hooks';\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 <YTErrorBlock\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 = useDispatch();\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","import React, {useRef, useState} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable from '../../../components/MetaTable/MetaTable';\n// @ts-ignore\nimport format from '../../../common/hammer/format';\nimport {getStateForHost, loadMasters} from '../../../store/actions/system/masters';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport moment from 'moment';\nimport './SwitchLeaderShortInfo.scss';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nconst block = cn('switch-leader-short-info');\n\ninterface Props {\n newLeaderPath: string;\n}\n\nexport function SwitchLeaderShortInfo(props: Props) {\n const startTime = useRef(moment.now());\n const [currentTime, setCurrentTime] = useState<any>(moment());\n const [finishTime, setFinishTime] = useState<any>();\n const dispatch = useDispatch();\n\n const updateCurrentTime = React.useCallback(() => {\n if (!finishTime) {\n setCurrentTime(moment());\n }\n }, [finishTime]);\n useUpdater(updateCurrentTime, {timeout: 1000, forceAutoRefresh: true});\n\n const updateFn = React.useCallback(async () => {\n if (finishTime) {\n return;\n }\n\n const hostState = await getStateForHost(props.newLeaderPath);\n\n if (hostState === 'leading') {\n setFinishTime(moment());\n dispatch(loadMasters());\n }\n }, [props.newLeaderPath, finishTime, dispatch]);\n useUpdater(updateFn, {timeout: 3000, forceAutoRefresh: true});\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n {\n key: 'Duration',\n value: format.TimeDuration(\n (finishTime || currentTime).diff(startTime.current),\n ),\n },\n {\n key: 'Status',\n value: (\n <SwitchLeaderShortInfoStatus\n state={finishTime ? 'complete' : 'in progress'}\n />\n ),\n },\n ]}\n />\n </div>\n );\n}\n\nfunction SwitchLeaderShortInfoStatus({state}: {state: string}) {\n return <span className={block('state', {state})}>{state}</span>;\n}\n","import React, {useState} from 'react';\nimport Icon from '../../../components/Icon/Icon';\nimport Button from '../../../components/Button/Button';\nimport {YTApiId, ytApiV4Id} from '../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {SwitchLeaderShortInfo} from '../../../pages/components/SwitchLeaderShortInfo/SwitchLeaderShortInfo';\nimport {AppStoreProvider} from '../../../containers/App/AppStoreProvider';\n\ntype SwitchLeaderDialogProps = {\n cancel: () => void;\n confirm: (newLeader: string) => Promise<void>;\n visible: boolean;\n cellId: string;\n hosts: Array<{getPath: () => string; state: 'leading'}>;\n};\n\ntype FormValues = {\n leading_primary_master: string[];\n};\n\nconst SwitchLeaderDialog = (props: SwitchLeaderDialogProps) => {\n const [error, setError] = useState(undefined);\n\n const selectLeadingHostOptions = props.hosts.map((host) => {\n const path = host.getPath();\n return {\n value: path,\n content: path.split('/').pop(),\n };\n });\n\n const leader = props.hosts.find(({state}) => state === 'leading');\n const leaderPath = leader?.getPath();\n\n return (\n <YTDFDialog<FormValues>\n visible={props.visible}\n headerProps={{\n title: `Switch leader for ${props.cellId}`,\n }}\n initialValues={{\n leading_primary_master: leaderPath ? [leaderPath] : [],\n }}\n fields={[\n {\n type: 'select',\n caption: ' Leading primary master',\n name: 'leading_primary_master',\n required: true,\n extras: {\n options: selectLeadingHostOptions,\n placeholder: 'New leading primary master',\n width: 'max',\n filterable: true,\n },\n },\n ...makeErrorFields([error]),\n ]}\n footerProps={{\n textApply: 'Switch leader',\n }}\n onAdd={(form) => {\n const {leading_primary_master} = form.getState().values;\n\n return props\n .confirm(leading_primary_master[0])\n .then(() => {\n setError(undefined);\n })\n .catch((e) => {\n setError(e);\n throw e;\n });\n }}\n onClose={props.cancel}\n pristineSubmittable={true}\n />\n );\n};\n\ntype SwitchLeaderButtonProps = {\n className: string;\n cellId: string;\n hosts: Array<{getPath: () => string; state: 'leading'}>;\n};\n\nexport const SwitchLeaderButton = ({cellId, hosts, className}: SwitchLeaderButtonProps) => {\n const [visible, setVisible] = useState(false);\n\n const handleClick = () => {\n setVisible(true);\n };\n\n const handleConfirm = async (newLeaderPath: string) => {\n const leaderAddress = newLeaderPath.split('/').pop();\n const switchLeader = () => {\n return ytApiV4Id.switchLeader(YTApiId.switchLeader, {\n cell_id: cellId,\n new_leader_address: leaderAddress!,\n });\n };\n\n wrapApiPromiseByToaster(switchLeader(), {\n toasterName: 'switch-leader',\n successContent() {\n return (\n <AppStoreProvider>\n <SwitchLeaderShortInfo newLeaderPath={newLeaderPath} />\n </AppStoreProvider>\n );\n },\n successTitle: 'Leader switch initiated',\n autoHide: false,\n });\n\n setVisible(false);\n };\n\n const handleCancel = () => {\n setVisible(false);\n };\n\n return (\n <React.Fragment>\n <Button\n className={className}\n view=\"flat-secondary\"\n onClick={handleClick}\n withTooltip\n tooltipProps={{content: 'Switch leader'}}\n >\n <Icon awesome=\"crowndiamond\" />\n </Button>\n {visible && (\n <SwitchLeaderDialog\n visible\n cellId={cellId}\n hosts={hosts}\n confirm={handleConfirm}\n cancel={handleCancel}\n />\n )}\n </React.Fragment>\n );\n};\n","import block from 'bem-cn-lite';\nimport React from 'react';\n\nimport './NodeQuad.scss';\nconst b = block('node-quad');\n\nexport type NodeQuadTheme =\n | 'online'\n | 'banned'\n | 'offline'\n | 'following'\n | 'mixed'\n | 'registered'\n | 'unregistered'\n | 'nonvoting'\n | 'unknown'\n | 'other';\n\ninterface Props {\n theme?: NodeQuadTheme;\n children?: string;\n banned?: boolean;\n alerts?: boolean;\n decommissioned?: boolean;\n full?: boolean;\n}\n\nexport default function NodeQuad({\n theme = 'unknown',\n children = '',\n banned,\n alerts,\n decommissioned,\n full,\n}: Props) {\n const text = (alerts && 'A') || (decommissioned && 'D') || (full && 'F') || undefined;\n const bannedOrTheme = banned ? ('banned' as const) : theme;\n\n const effectiveTheme = children ? `${bannedOrTheme}-letter` : theme;\n return <div className={b({theme: effectiveTheme, full})}>{text}</div>;\n}\n","const SvgReadOnlyIcon = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"#666\" d=\"M8.705 5.562c-.032-.031-.078-.063-.125-.063a.2.2 0 0 0-.14.063L4.206 9.794l-.203 1.78c-.016.125.015.235.11.313.077.093.187.125.312.11l1.78-.204 4.232-4.232a.2.2 0 0 0 .063-.14c0-.048-.031-.094-.063-.126zm3.076-.406c.14.156.219.328.219.53 0 .22-.078.391-.219.532l-.718.718a.2.2 0 0 1-.14.063c-.063 0-.094-.016-.126-.063L9.064 5.203C9.017 5.17 9 5.14 9 5.078a.2.2 0 0 1 .063-.141l.718-.718A.72.72 0 0 1 10.313 4c.203 0 .375.078.531.219z\" /><path fill=\"#666\" d=\"m8 6 1.5-1.5 2 2L10 8z\" /><path fill=\"#F88\" d=\"M8 1.11c1.29 0 2.52.35 3.633.995a7.1 7.1 0 0 1 2.637 2.637 7.2 7.2 0 0 1 .996 3.633c0 1.318-.352 2.52-.996 3.633-.645 1.113-1.524 2.021-2.637 2.666A7.2 7.2 0 0 1 8 15.64a7.1 7.1 0 0 1-3.633-.967 7.3 7.3 0 0 1-2.666-2.666 7.1 7.1 0 0 1-.967-3.633c0-1.29.323-2.52.967-3.633.645-1.113 1.553-1.992 2.666-2.637C5.48 1.461 6.682 1.11 8 1.11m4.13 3.134A5.8 5.8 0 0 0 9.7 2.78a5.6 5.6 0 0 0-2.784-.175 5.7 5.7 0 0 0-2.52 1.171L12.6 11.98a5.7 5.7 0 0 0 1.172-2.52 5.6 5.6 0 0 0-.176-2.783 5.8 5.8 0 0 0-1.465-2.432m-8.26 8.262A5.56 5.56 0 0 0 6.27 14a5.74 5.74 0 0 0 2.813.146 5.54 5.54 0 0 0 2.52-1.171L3.4 4.77a5.53 5.53 0 0 0-1.171 2.52 5.74 5.74 0 0 0 .146 2.813 5.56 5.56 0 0 0 1.494 2.402\" /></svg>;\nexport default SvgReadOnlyIcon;","const SvgWarmupIcon = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 14 14\" {...props}><path fill=\"#F9A525\" stroke=\"#F9A525\" d=\"M11.415 7.367C12.437 6.45 13 5.61 13 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C9.548 7.55 9 8.39 9 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227ZM7.415 7.367C8.437 6.45 9 5.61 9 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C5.548 7.55 5 8.39 5 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227ZM3.415 7.367C4.437 6.45 5 5.61 5 4.419c0-1.265-.75-2.378-2.161-3.19a.507.507 0 0 0-.684.189c-.166.273-.054.626.217.795.873.545 1.428 1.323 1.428 2.193 0 .943-.46 1.52-1.215 2.227C1.548 7.55 1 8.39 1 9.581c0 1.265.75 2.378 2.161 3.19.24.138.541.048.684-.189.166-.273.054-.626-.217-.795-.873-.545-1.428-1.323-1.428-2.193 0-.956.46-1.52 1.215-2.227Z\" /></svg>;\nexport default SvgWarmupIcon;","import {makeRegexpFromSettings} from '../../../../shared/utils';\nimport {uiSettings} from '../../../config/ui-settings';\n\nconst reShortNameSystemPage = makeRegexpFromSettings(uiSettings.reShortNameSystemPage);\n\nexport const makeShortSystemAddress = (address: string): string | undefined => {\n const res = reShortNameSystemPage?.exec(address);\n return res?.groups?.shortname;\n};\n","import React, {FC, useState} from 'react';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport PencilIcon from '@gravity-ui/icons/svgs/pencil.svg';\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../components/Dialog';\nimport {useToggle} from 'react-use';\n\ntype Props = {\n className?: string;\n path: string | null;\n title?: string;\n host?: string;\n container?: string;\n maintenance: boolean;\n maintenanceMessage: string;\n onMaintenanceChange: (data: {\n path: string;\n message: string;\n maintenance: boolean;\n }) => Promise<void>;\n};\n\ntype FormData = {host: string; container: string; maintenance: string; message: string};\n\nexport const ChangeMaintenanceButton: FC<Props> = ({\n className,\n path,\n title,\n host,\n container,\n maintenance,\n maintenanceMessage,\n onMaintenanceChange,\n}) => {\n const [error, setError] = useState<Error | undefined>(undefined);\n const [visible, toggleVisible] = useToggle(false);\n\n if (!path) return;\n\n const handleMaintenanceChange = async (form: FormApi<FormData>) => {\n const {values} = form.getState();\n try {\n await onMaintenanceChange({\n path,\n message: values.message,\n maintenance: values.maintenance === 'enabled',\n });\n } catch (e) {\n setError(e as Error);\n throw e as Error;\n }\n };\n\n const handleOnClose = () => {\n toggleVisible();\n setError(undefined);\n };\n\n return (\n <>\n <YTDFDialog<FormData>\n pristineSubmittable\n headerProps={{\n title,\n }}\n initialValues={{\n host,\n container,\n maintenance: maintenance ? 'enabled' : 'disabled',\n message: maintenanceMessage,\n }}\n fields={[\n {\n name: 'host',\n type: 'plain',\n caption: 'Host',\n },\n {\n name: 'container',\n type: 'plain',\n caption: 'Container',\n },\n {\n name: 'maintenance',\n type: 'radio',\n caption: 'Maintenance',\n extras: {\n options: [\n {value: 'enabled', label: 'Enabled'},\n {value: 'disabled', label: 'Disabled'},\n ],\n },\n },\n {\n name: 'message',\n type: 'textarea',\n caption: 'Maintenance message',\n extras: (values: FormData) => ({\n placeholder: 'Enter maintenance message',\n disabled: values.maintenance === 'disabled',\n }),\n },\n ...makeErrorFields([error]),\n ]}\n visible={visible}\n onAdd={handleMaintenanceChange}\n onClose={handleOnClose}\n />\n <Button view=\"flat-secondary\" className={className} onClick={toggleVisible}>\n <Icon data={PencilIcon} size={14} />\n </Button>\n </>\n );\n};\n","import React, {FC, useCallback} from 'react';\nimport hammer from '../../../common/hammer';\nimport NodeQuad, {NodeQuadTheme} from '../NodeQuad/NodeQuad';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport Icon from '../../../components/Icon/Icon';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport ReadOnlyIcon from '../../../assets/img/svg/read-only-icon.svg';\nimport WarmUpIcon from '../../../assets/img/svg/warmup-icon.svg';\nimport {makeShortSystemAddress} from '../helpers/makeShortSystemAddress';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {ChangeMaintenanceButton} from './ChangeMaintenanceButton';\nimport block from 'bem-cn-lite';\nimport {MasterInstance} from '../../../store/selectors/system/masters';\nimport './MasterGroup.scss';\nimport {changeMasterMaintenance} from '../../../store/actions/system/masters';\nimport {CypressNode} from '../../../../shared/yt-types';\n\nconst b = block('master-group');\n\nconst instanceStateToTheme: Record<string, NodeQuadTheme> = {\n active: 'online',\n connected: 'online',\n leading: 'online',\n disconnected: 'banned',\n following: 'following',\n follower_recovery: 'banned',\n leader_recovery: 'banned',\n standby: 'banned',\n elections: 'offline',\n stopped: 'offline',\n unknown: 'offline',\n online: 'online',\n offline: 'offline',\n};\n\ntype Props = {\n instance: MasterInstance;\n hostType: string;\n allowVoting?: boolean;\n allowService?: boolean;\n};\n\nexport const Instance: FC<Props> = ({instance, hostType, allowVoting, allowService}) => {\n const dispatch = useDispatch();\n const {state, $address, $physicalAddress} = instance;\n const attributes = instance.$attributes as CypressNode<\n {read_only: boolean; voting: boolean; warming_up: boolean},\n unknown\n >['$attributes'];\n const address = hostType === 'host' ? $address : $physicalAddress;\n const maintenance = instance.getMaintenance();\n const maintenanceMessage = maintenance ? instance.getMaintenanceMessage() || 'Maintenance' : '';\n const {voting} = attributes ?? {};\n // do not use `!voting` cause `voting === undefined` is the same as `voting === true`\n const denyVoting = allowVoting && voting === false;\n const theme = denyVoting && state === 'following' ? 'nonvoting' : instanceStateToTheme[state!];\n const addressWithoutPort = hammer.format['Address'](address);\n\n const handleOnMaintenanceChange = useCallback(\n async (data: {path: string; maintenance: boolean; message: string}) => {\n await dispatch(changeMasterMaintenance(data));\n },\n [dispatch],\n );\n\n const shortName = makeShortSystemAddress(addressWithoutPort) || addressWithoutPort;\n\n return (\n <>\n <div className={b('availability')}>\n <NodeQuad theme={theme} />\n </div>\n <div className={b('role')}>\n <span>{hammer.format['ReadableField'](state ? state : 'unknown')}</span>\n </div>\n <div className={b('icon')}>\n {maintenanceMessage && (\n <Tooltip content={<span>{maintenanceMessage}</span>}>\n <Icon className={b('icon-maintenance')} awesome=\"digging\" face=\"solid\" />\n </Tooltip>\n )}\n {attributes?.read_only && (\n <span className={b('icon-glyph')} title=\"Read only\">\n <ReadOnlyIcon width={14} height={14} />\n </span>\n )}\n {attributes?.warming_up && (\n <span className={b('icon-glyph')} title=\"Warming up\">\n <WarmUpIcon width={14} height={14} />\n </span>\n )}\n </div>\n <div className={b('host')}>\n <Tooltip content={addressWithoutPort}>\n <div className={b('host-name')}>{shortName}</div>\n </Tooltip>\n <Flex gap={1} alignItems=\"center\">\n <span className={b('host-btn')}>\n <ClipboardButton view=\"flat-secondary\" text={address} />\n </span>\n <ChangeMaintenanceButton\n className={b('host-btn', {hidden: !allowService})}\n path={instance.getPath()}\n title={`Edit ${addressWithoutPort}`}\n host={$physicalAddress}\n container={$address}\n maintenance={maintenance}\n maintenanceMessage={maintenanceMessage}\n onMaintenanceChange={handleOnMaintenanceChange}\n />\n <Text className={b('nonvoting', {hidden: !denyVoting})} color=\"secondary\">\n [nonvoting]\n </Text>\n </Flex>\n </div>\n </>\n );\n};\n","import React from 'react';\n\nimport format from '../../../common/hammer/format';\n\nimport Icon from '../../../components/Icon/Icon';\nimport {Secondary} from '../../../components/Text/Text';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\n\nexport function CellTag({cellTag, className}: {cellTag: number; className: string}) {\n const hexCellTag = format.Hex(cellTag);\n\n return (\n <Tooltip\n className={className}\n placement={['top', 'bottom']}\n content={\n <MetaTable\n items={[\n {\n key: 'Hexadecimal cell tag',\n value: (\n <>\n {hexCellTag}{' '}\n <ClipboardButton view=\"clear\" size=\"xs\" text={hexCellTag}>\n {hexCellTag}\n </ClipboardButton>\n </>\n ),\n },\n {\n key: 'Decimal cell tag',\n value: (\n <>\n {cellTag}{' '}\n <ClipboardButton view=\"clear\" theme=\"\" size=\"xs\" text={cellTag}>\n {cellTag}\n </ClipboardButton>\n </>\n ),\n },\n ]}\n />\n }\n >\n {cellTag && <Icon color=\"secondary\" face=\"solid\" awesome=\"tag\" />}\n {hexCellTag}\n <Secondary> / </Secondary>\n {cellTag}\n </Tooltip>\n );\n}\n","import React, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport {Flex} from '@gravity-ui/uikit';\n\nimport format from '../../../common/hammer/format';\nimport {getMastersHostType} from '../../../store/selectors/settings';\nimport Icon from '../../../components/Icon/Icon';\n\nimport {SwitchLeaderButton} from './SwitchLeader';\nimport {Instance} from './Instance';\n\nimport map_ from 'lodash/map';\nimport './MasterGroup.scss';\nimport {CellTag} from './CellTag';\n\nconst b = block('master-group');\n\nclass MasterGroup extends Component {\n static propTypes = {\n // from parent\n className: PropTypes.string,\n instances: PropTypes.arrayOf(\n PropTypes.shape({\n state: PropTypes.string,\n $address: PropTypes.string,\n $physicalAddress: PropTypes.string,\n }),\n ),\n cellTag: PropTypes.number,\n quorum: PropTypes.shape({\n status: PropTypes.string,\n leaderCommitedVersion: PropTypes.string,\n }),\n leader: PropTypes.shape({\n state: PropTypes.string,\n $address: PropTypes.string,\n }),\n // from connect\n hostType: PropTypes.oneOf(['host', 'physicalHost']),\n gridRowStart: PropTypes.bool,\n allowVoting: PropTypes.bool,\n allowService: PropTypes.bool,\n };\n\n renderQuorum() {\n const {quorum, cellTag, cellId, instances} = this.props;\n const status = quorum ? quorum.status : 'unknown';\n const quorumTitle = quorum && `Leader committed version: ${quorum.leaderCommitedVersion}`;\n const icons = {\n quorum: 'check-circle',\n 'weak-quorum': 'exclamation-circle',\n 'no-quorum': 'exclamation-circle',\n unknown: 'question-circle',\n };\n const states = {\n quorum: 'present',\n 'weak-quorum': 'weak',\n 'no-quorum': 'missing',\n unknown: 'unknown',\n };\n\n return (\n <Fragment>\n {quorum && (\n <Fragment>\n <div\n className={b('quorum-status', {\n state: states[status],\n })}\n >\n <Icon face=\"solid\" awesome={icons[status]} />\n </div>\n <div className={b('quorum-label')}>\n {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 {Boolean(quorum?.leaderCommitedVersion) || cellTag !== undefined ? (\n <div className={b('host', {quorum: true})}>\n <div className={b('quorum-version')} title={quorumTitle}>\n <span>{quorum && quorum.leaderCommitedVersion}</span>\n </div>\n <Flex alignItems=\"center\">\n <CellTag className={b('quorum-cell')} cellTag={cellTag} />\n <SwitchLeaderButton cellId={cellId} hosts={instances} />\n </Flex>\n </div>\n ) : null}\n </Fragment>\n );\n }\n\n render() {\n const {className, instances, hostType, gridRowStart, allowVoting, allowService} =\n this.props;\n\n return (\n <div className={b('group', {'grid-row-start': gridRowStart}, className)}>\n {this.renderQuorum()}\n {map_(instances, (instance) => {\n return (\n <Instance\n instance={instance}\n key={instance.$address}\n hostType={hostType}\n allowVoting={allowVoting}\n allowService={allowService}\n />\n );\n })}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const hostType = getMastersHostType(state);\n return {hostType};\n};\n\nexport default connect(mapStateToProps)(MasterGroup);\n","import React, {FC} from 'react';\nimport {useSelector} from '../../../store/redux-hooks';\nimport {selectMasterAlerts} from '../../../store/selectors/system/masters';\nimport {YTAlertBlock} 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 <YTAlertBlock key={alert.message + id} error={alert} />\n ))}\n </div>\n );\n};\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport VisibleHostTypeRadioButton from '../../../pages/system/VisibleHostTypeRadioButton';\nimport {sortStateProgress} from '../../../utils';\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\nimport MasterGroup from './MasterGroup';\n\nimport {loadMasters} from '../../../store/actions/system/masters';\nimport {getSettingsSystemMastersCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemMastersCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport './Masters.scss';\nimport {SystemAlert} from './SystemAlert';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nconst b = block('system-master');\nconst headingCN = block('elements-heading')({size: 's'});\n\nfunction computeStateProgress(counters) {\n const total = counters.total;\n\n return sortStateProgress(\n map_(counters.states, (count, state) => {\n return {\n value: total && (count / total) * 100,\n title: 'State: ' + state,\n theme:\n {\n quorum: 'success',\n 'weak-quorum': 'warning',\n 'no-quorum': 'danger',\n }[state] || 'default',\n };\n }),\n );\n}\n\nclass Masters extends Component {\n static propTypes = {\n // from connect\n alerts: PropTypes.arrayOf(PropTypes.object),\n counters: PropTypes.shape({\n flags: PropTypes.object,\n states: PropTypes.object,\n }).isRequired,\n initialized: PropTypes.bool.isRequired,\n primary: PropTypes.shape(MasterGroup.propTypes).isRequired,\n secondary: PropTypes.arrayOf(PropTypes.shape(MasterGroup.propTypes)),\n providers: PropTypes.shape(MasterGroup.propTypes).isRequired,\n discovery: PropTypes.shape(MasterGroup.propTypes).isRequired,\n };\n\n onToggle = () => {\n const {setSettingsSystemMastersCollapsed, collapsed: prevCollapsed} = this.props;\n setSettingsSystemMastersCollapsed(!prevCollapsed);\n };\n\n mastersFitIntoSection() {\n const {secondary, providers, discovery, queueAgents} = this.props;\n\n let groupsCount = 1; // for primary masters;\n groupsCount += secondary?.length || 0;\n groupsCount += providers?.instances?.length ? 1 : 0;\n groupsCount += discovery?.instances?.length ? 1 : 0;\n groupsCount += queueAgents?.instances?.length ? 1 : 0;\n\n return groupsCount <= 3;\n }\n\n renderMastersGroups = (masters, gridRowStart, {allowVoting} = {allowVoting: false}) =>\n map_(masters, (master) => (\n <MasterGroup\n key={master.cellTag}\n {...master}\n gridRowStart={gridRowStart}\n allowVoting={allowVoting}\n allowService\n />\n ));\n\n renderMasterTypeSwitcher() {\n return <VisibleHostTypeRadioButton className={b('container-host-radio')} />;\n }\n\n renderAlerts() {\n return <SystemAlert className={b('alerts')} />;\n }\n\n renderContent() {\n const {primary, secondary, providers, discovery, queueAgents} = this.props;\n\n const fitIntoSection = this.mastersFitIntoSection();\n\n const secondaryGroups = this.renderMastersGroups(secondary, fitIntoSection, {\n allowVoting: true,\n });\n\n return fitIntoSection ? (\n <div className={b('all-masters')}>\n <div className={headingCN}>Primary Masters</div>\n <MasterGroup\n className={b('primary-master')}\n {...primary}\n allowVoting\n allowService\n />\n {Boolean(secondary?.length) && (\n <React.Fragment>\n <div className={headingCN}>Secondary Masters</div>\n {secondaryGroups}\n </React.Fragment>\n )}\n {Boolean(providers?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Timestamp providers</div>\n <MasterGroup\n {...providers}\n className={b('timestamp-providers')}\n gridRowStart\n allowVoting\n allowService\n />\n </React.Fragment>\n )}\n {Boolean(discovery?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Discovery servers</div>\n <MasterGroup\n {...discovery}\n className={b('discovery-servers')}\n gridRowStart\n />\n </React.Fragment>\n )}\n {Boolean(queueAgents?.instances?.length) && (\n <React.Fragment>\n <div className={headingCN}>Queue agents</div>\n <MasterGroup {...queueAgents} allowService />\n </React.Fragment>\n )}\n </div>\n ) : (\n <div>\n <div className={headingCN}>Primary Masters</div>\n <MasterGroup\n className={b('primary-master')}\n {...primary}\n allowVoting\n allowService\n />\n {Boolean(secondary?.length) && (\n <React.Fragment>\n <div className={headingCN}>Secondary Masters</div>\n <div className={b('secondary-masters')}>{secondaryGroups}</div>\n </React.Fragment>\n )}\n <div className={b('flex')}>\n {Boolean(providers?.instances?.length) &&\n this.renderSection('providers', 'Timestamp providers', providers, {\n allowVoting: true,\n allowService: true,\n })}\n {Boolean(discovery?.instances?.length) &&\n this.renderSection('discovery', 'Discovery servers', discovery)}\n {Boolean(queueAgents?.instances?.length) &&\n this.renderSection('queueAgents', 'Queue agents', queueAgents, {\n allowService: true,\n })}\n </div>\n </div>\n );\n }\n\n renderSection(\n name,\n heading,\n data,\n {allowVoting, allowService} = {allowVoting: false, allowService: false},\n ) {\n return (\n <div className={b(name)}>\n <div className={headingCN}>{heading}</div>\n <div className={b(`${name}-hosts`)}>\n <MasterGroup {...data} allowVoting={allowVoting} allowService={allowService} />\n </div>\n </div>\n );\n }\n\n renderOverview() {\n const {counters} = this.props;\n\n const stateOverview = counters && {\n value: 100,\n view: 'thin',\n stack: computeStateProgress(counters),\n };\n const stateThemeMappings = {\n unavailable: 'danger',\n recovery: 'warning',\n 'no-quorum': 'danger',\n 'weak-quorum': 'warning',\n };\n const counterGroups = [\n ['recovery', 'unavailable'],\n ['primary', 'secondary'],\n ['no-quorum', 'weak-quorum', 'quorum'],\n ];\n\n const labels = [];\n const alertsCount = this.props.alerts.length;\n if (alertsCount > 0) {\n labels.push({\n text: `${alertsCount} alert${alertsCount > 1 ? 's' : ''}`,\n theme: 'warning',\n });\n }\n\n return (\n <>\n {this.renderMasterTypeSwitcher()}\n <SystemStateOverview\n tab=\"masters\"\n labels={labels}\n counters={counters}\n stateThemeMappings={stateThemeMappings}\n stateOverview={stateOverview}\n counterGroup={counterGroups}\n />\n </>\n );\n }\n\n renderImpl() {\n const {initialized, collapsibleSize, collapsed} = this.props;\n\n if (!initialized) {\n return null;\n }\n\n const content = this.renderContent();\n const overview = this.renderOverview();\n\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name={'Masters'}\n className={b({open: !collapsed})}\n headingClassName={b('heading', stickyTopClassName)}\n overview={overview}\n collapsed={collapsed}\n onToggle={this.onToggle}\n size={collapsibleSize}\n >\n <div className={b('content')}>\n {this.renderAlerts()}\n {content}\n </div>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <MastersUpdater />\n {this.renderImpl()}\n </React.Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {secondary, primary, providers, discovery, queueAgents, counters, initialized, alerts} =\n state.system.masters;\n return {\n initialized,\n secondary,\n primary,\n providers,\n discovery,\n queueAgents,\n counters,\n alerts,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n collapsed: getSettingsSystemMastersCollapsed(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSettingsSystemMastersCollapsed,\n};\n\nfunction MastersUpdater() {\n const dispatch = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadMasters()).then(({isRetryFutile} = {}) => {\n if (isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Masters);\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {VisibleHostType} from '../../../constants/system/masters';\nimport {getMastersHostType} from '../../../store/selectors/settings';\n\nexport const getSystemSchedulers = (state) => state.system.schedulersAndAgents.schedulers;\nexport const getSystemSchedulerAlerts = (state) => state.system.schedulersAndAgents.schedulerAlerts;\nexport const getSystemAgents = (state) => state.system.schedulersAndAgents.agents;\nexport const getSystemAgentAlerts = (state) => state.system.schedulersAndAgents.agentAlerts;\nexport const getSystemSchedulerAndAgentVisibleHostType = (state) =>\n state.system.schedulersAndAgents.hostType;\n\nexport const getSystemSchedulersWithState = createSelector(\n [getSystemSchedulers, getMastersHostType],\n (schedulers, hostType) => {\n const path = hostType === VisibleHostType.host ? '' : '/@annotations/physical_host';\n return map_(schedulers, (sheduler) => {\n const res = connectedSchedulersToState(path, sheduler);\n return {\n ...res,\n host: ypath.getValue(sheduler.host, ''),\n physicalHost: ypath.getValue(sheduler.host, '/@annotations/physical_host'),\n maintenanceMessage: !ypath.getValue(sheduler, '/host/@maintenance')\n ? undefined\n : ypath.getValue(sheduler, '/host/@maintenance_message') || 'Maintenance',\n };\n });\n },\n);\n\nexport const getSystemAgentsWithState = createSelector(\n [getSystemAgents, getMastersHostType],\n (agents, hostType) => {\n const path = hostType === VisibleHostType.host ? '' : '/@annotations/physical_host';\n return map_(agents, (agent) => {\n const res = connectedAgentsToState(path, agent);\n return {\n ...res,\n host: ypath.getValue(agent.host, ''),\n physicalHost: ypath.getValue(agent.host, '/@annotations/physical_host'),\n maintenanceMessage: !ypath.getValue(agent, '/host/@maintenance')\n ? undefined\n : ypath.getValue(agent, '/host/@maintenance_message') || 'Maintenance',\n };\n });\n },\n);\n\nexport const getSystemSchedulerAndAgentCounters = createSelector(\n [getSystemSchedulersWithState, getSystemAgentsWithState],\n (schedulersWithState, agentsWithState) => {\n return {\n schedulers: extractSchedulersCounters(schedulersWithState),\n agents: extractAgentsCounters(agentsWithState),\n };\n },\n);\n\nexport const getSystemSchedulerAndAgentAlerts = createSelector(\n [getSystemSchedulerAlerts, getSystemAgentAlerts],\n (schedulerAlerts, agentAlerts) => {\n return {\n schedulers: schedulerAlerts,\n agents: agentAlerts,\n };\n },\n);\n\nfunction connectedSchedulersToState(path, connectedHost) {\n const {connected, host} = connectedHost;\n const state = typeof connected !== 'undefined' ? (connected ? 'active' : 'standby') : 'offline';\n return {address: ypath.getValue(host, path), state};\n}\n\nfunction connectedAgentsToState(path, connectedHost) {\n const {connected, host} = connectedHost;\n const state =\n typeof connected !== 'undefined' ? (connected ? 'connected' : 'disconnected') : 'offline';\n return {address: ypath.getValue(host, path), state};\n}\n\nconst numberOf = (statefulHosts, state) => {\n return reduce_(\n statefulHosts,\n (acc, host) => {\n return host.state === state ? acc + 1 : acc;\n },\n 0,\n );\n};\n\nfunction extractSchedulersCounters(statefulHosts) {\n return {\n total: statefulHosts.length,\n active: numberOf(statefulHosts, 'active'),\n standby: numberOf(statefulHosts, 'standby'),\n offline: numberOf(statefulHosts, 'offline'),\n };\n}\n\nfunction extractAgentsCounters(statefulHosts) {\n return {\n total: statefulHosts.length,\n connected: numberOf(statefulHosts, 'connected'),\n disconnected: numberOf(statefulHosts, 'disconnected'),\n offline: numberOf(statefulHosts, 'offline'),\n };\n}\n","import {getAgents, getSchedulers} from '../../../store/actions/system/schedulers';\nimport {FETCH_SCHEDULERS} from '../../../constants/system/schedulers';\nimport {isRetryFutile} from '../../../utils/index';\nimport {showErrorPopup} from '../../../utils/utils';\nimport {toaster} from '../../../utils/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 {getBatchError, splitBatchResults} from '../../../../shared/utils/error';\n\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {USE_SUPRESS_SYNC} from '../../../../shared/constants';\nimport {loadSchedulersAndAgents} from './index';\nimport {changeMaintenance} from './masters';\nimport {getCurrentUserName} from '../../selectors/global';\n\nexport function getSchedulers() {\n return ytApiV3Id\n .list(YTApiId.systemSchedulers, {\n path: '//sys/scheduler/instances',\n attributes: ['annotations', 'maintenance', 'maintenance_message'],\n ...USE_SUPRESS_SYNC,\n })\n .then((hosts) => {\n const ordered = sortBy_(hosts, (host) => {\n return ypath.getValue(host, '');\n });\n return getSchedulersState(ordered);\n });\n}\n\nfunction getSchedulersState(hosts) {\n const requests = [\n {\n command: 'get',\n parameters: {\n path: '//sys/scheduler/@alerts',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n ];\n\n forEach_(hosts, (host) => {\n const name = ypath.getValue(host, '');\n requests.push({\n command: 'get',\n parameters: {\n path: '//sys/scheduler/instances/' + name + '/orchid/scheduler/service/connected',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n });\n });\n\n return ytApiV3Id.executeBatch(YTApiId.systemSchedulersState, {requests}).then((data) => {\n const {outputs} = splitBatchResults(data, 'Failed to get scheduler states');\n const alerts = outputs[0];\n const connectedHosts = map_(hosts, (host, index) => {\n return {\n host: host,\n connected: outputs[index + 1],\n };\n });\n return {schedulers: connectedHosts, schedulerAlerts: alerts};\n });\n}\n\nfunction getAgentsState(hosts) {\n const requests = [];\n forEach_(hosts, (host) => {\n const basePath = '//sys/controller_agents/instances/' + ypath.getValue(host, '');\n\n requests.push(\n {\n command: 'get',\n parameters: {\n path: basePath + '/orchid/controller_agent/service/connected',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n {\n command: 'get',\n parameters: {\n path: basePath + '/@alerts',\n timeout: 10 * 1000,\n ...USE_SUPRESS_SYNC,\n },\n },\n );\n });\n\n return ytApiV3Id.executeBatch(YTApiId.systemCAStates, {requests}).then((data) => {\n const {outputs} = splitBatchResults(data, 'Failed to get CA states');\n const agents = map_(hosts, (host, index) => ({\n host,\n connected: outputs[2 * index],\n }));\n const agentAlerts = reduce_(\n outputs,\n (alerts, value, index) => {\n if (index % 2) {\n return alerts.concat(value);\n }\n return alerts;\n },\n [],\n );\n\n return {agents, agentAlerts};\n });\n}\n\nexport function getAgents() {\n return ytApiV3Id\n .list(YTApiId.systemCAInstances, {\n path: '//sys/controller_agents/instances',\n attributes: ['annotations', 'maintenance', 'maintenance_message'],\n ...USE_SUPRESS_SYNC,\n })\n .then((hosts) => {\n hosts = hosts || [];\n const res = sortBy_(hosts, (host) => {\n return ypath.getValue(host, '');\n });\n return getAgentsState(res);\n });\n}\n\nexport const changeSchedulerMaintenance =\n ({path, maintenance, message}) =>\n async (dispatch, getSate) => {\n const login = getCurrentUserName(getSate());\n const result = await changeMaintenance({\n path,\n login,\n maintenance,\n message,\n });\n\n const error = getBatchError(result, 'Failed to update master maintenance');\n if (error) {\n throw error;\n }\n\n dispatch(loadSchedulersAndAgents());\n };\n","import React, {useCallback} from 'react';\n\nimport hammer from '../../../../common/hammer';\nimport block from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport Icon from '../../../../components/Icon/Icon';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport NodeQuad from '../../NodeQuad/NodeQuad';\n\nimport '../Schedulers.scss';\nimport {ChangeMaintenanceButton} from '../../Masters/ChangeMaintenanceButton';\nimport {makeShortSystemAddress} from '../../helpers/makeShortSystemAddress';\nimport {useDispatch} from '../../../../store/redux-hooks';\nimport {changeSchedulerMaintenance} from '../../../../store/actions/system/schedulers';\n\nconst b = block('system');\n\nexport type SchedulerProps = {\n host: string;\n address: string;\n physicalHost: string;\n state: 'active' | 'connected' | 'standby' | 'disconnected' | 'offline';\n maintenanceMessage?: React.ReactNode;\n type: 'schedulers' | 'agents';\n};\n\nexport default function Scheduler({\n host,\n physicalHost,\n address,\n state,\n maintenanceMessage,\n type,\n}: SchedulerProps) {\n const dispatch = useDispatch();\n\n const theme = (\n {\n active: 'online',\n connected: 'online',\n standby: 'banned',\n disconnected: 'banned',\n offline: 'offline',\n } as const\n )[state];\n\n const formatedAddress = hammer.format['Address'](address);\n const path = `//sys/${type === 'schedulers' ? 'scheduler' : 'controller_agents'}/instances/${host}`;\n\n const handleOnMaintenanceChange = useCallback(\n async (data: {path: string; message: string; maintenance: boolean}) => {\n await dispatch(changeSchedulerMaintenance(data));\n },\n [dispatch],\n );\n\n return (\n <div className={b('scheduler')}>\n <NodeQuad theme={theme} />\n\n <div className={b('scheduler-status')}>{hammer.format['ReadableField'](state)}</div>\n\n <div className={b('maintenance')}>\n {maintenanceMessage && (\n <Tooltip content={maintenanceMessage}>\n <Icon awesome=\"digging\" face=\"solid\" />\n </Tooltip>\n )}\n </div>\n\n <div title={formatedAddress} className={b('scheduler-host')}>\n <Tooltip content={formatedAddress} ellipsis>\n <div className={b('scheduler-host-address')}>\n {makeShortSystemAddress(formatedAddress) || formatedAddress}\n </div>\n </Tooltip>\n\n <div className={b('scheduler-host-btn')}>\n {address && <ClipboardButton view=\"flat-secondary\" text={address} />}\n </div>\n\n <ChangeMaintenanceButton\n className={b('scheduler-host-btn')}\n path={path}\n title={`Edit ${address}`}\n host={physicalHost}\n container={host}\n maintenance={Boolean(maintenanceMessage)}\n maintenanceMessage={maintenanceMessage as string}\n onMaintenanceChange={handleOnMaintenanceChange}\n />\n </div>\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {useDispatch} from '../../../store/redux-hooks';\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 {YTAlertBlock} from '../../../components/Alert/Alert';\n\nimport {loadSchedulersAndAgents} from '../../../store/actions/system';\n\nimport prepareTags from './prepareTags';\n\nimport './Schedulers.scss';\nimport {getSettingsSystemSchedulersCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemSchedulersCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\n\nconst b = block('system');\nconst headingCN = block('elements-heading')({size: 's'});\n\nconst connectedHost = PropTypes.shape({\n host: PropTypes.string,\n connected: PropTypes.bool,\n});\n\nclass SchedulersAndAgents extends Component {\n static propTypes = {\n // from connect\n schedulers: PropTypes.arrayOf(connectedHost),\n agents: PropTypes.arrayOf(connectedHost),\n counters: PropTypes.shape({\n schedulers: PropTypes.object,\n agents: PropTypes.object,\n }),\n alerts: PropTypes.shape({\n schedulers: PropTypes.arrayOf(PropTypes.object),\n agents: PropTypes.arrayOf(PropTypes.object),\n }),\n };\n\n static defaultProps = {\n schedulers: [],\n agents: [],\n alerts: {\n schedulers: [],\n agents: [],\n },\n };\n\n renderHosts(name, connectedHosts) {\n return map_(\n connectedHosts,\n ({host, physicalHost, address, state, maintenanceMessage}, index) => {\n return (\n <Scheduler\n key={host ?? index}\n host={host}\n physicalHost={physicalHost}\n address={address}\n state={state}\n maintenanceMessage={maintenanceMessage}\n type={name}\n />\n );\n },\n );\n }\n\n renderSection(name, heading) {\n const objects = this.props[name];\n const rows = Math.min(7, objects.length);\n const columns = Math.ceil(objects.length / rows);\n const style = {\n gridTemplateRows: `repeat(${rows}, 20px`,\n justifyContent: columns > 2 ? 'space-between' : 'start',\n };\n const containerStyle = {\n marginRight: name === 'schedulers' && columns === 1 ? '100px' : null,\n width: columns > 1 ? '100%' : 'auto',\n };\n\n return (\n <div className={b(name)} style={containerStyle}>\n <div className={headingCN}>{heading}</div>\n <div className={b(`${name}-hosts`)} style={style}>\n {this.renderHosts(name, objects)}\n </div>\n </div>\n );\n }\n\n renderOverview() {\n const {counters, alerts} = this.props;\n const tags = prepareTags(counters, alerts);\n\n return (\n <>\n <VisibleHostTypeRadioButton className={b('container-host-radio')} />\n <div className={b('heading-overview')}>\n {map_(tags, ({theme, label}) => (\n <span key={label} className={block('elements-label')({theme})}>\n {label}\n </span>\n ))}\n </div>\n </>\n );\n }\n\n onToggle = () => {\n const {collapsed, setSettingsSystemSchedulersCollapsed} = this.props;\n setSettingsSystemSchedulersCollapsed(!collapsed);\n };\n\n renderImpl() {\n const {schedulers, agents, alerts, collapsibleSize, collapsed} = this.props;\n\n if (!schedulers.length && !agents.length) {\n return null;\n }\n\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name=\"Schedulers and controller agents\"\n headingClassName={stickyTopClassName}\n overview={this.renderOverview()}\n collapsed={collapsed}\n onToggle={this.onToggle}\n size={collapsibleSize}\n >\n {map_(alerts.schedulers, (alert) => (\n <YTAlertBlock key={alert.attributes.host} error={alert} />\n ))}\n {map_(alerts.agents, (alert, index) => (\n <YTAlertBlock 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} from 'react-redux';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport hammer from '../../../common/hammer';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\n\nimport {CollapsibleSectionStateLess} from '../../../components/CollapsibleSection/CollapsibleSection';\nimport withStickyFooter from '../../../components/ElementsTable/hocs/withStickyFooter';\nimport {sortStateType} from '../../../components/ElementsTable/ElementsTableHeader';\nimport withStickyHead from '../../../components/ElementsTable/hocs/withStickyHead';\nimport ElementsTableBase from '../../../components/ElementsTable/ElementsTable';\nimport SystemCounters from '../SystemCounters/SystemCounters';\nimport Label from '../../../components/Label/Label';\nimport {StickyContainer} from '../../../components/StickyContainer/StickyContainer';\n\nimport {SYSTEM_CHUNKS_TABLE_ID} from '../../../constants/tables';\nimport {loadChunks} from '../../../store/actions/system/chunks';\nimport {getSettingsSystemChunksCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemChunksCollapsed} from '../../../store/actions/settings/settings';\nimport {useUpdater} from '../../../hooks/use-updater';\n\nimport './Chunks.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\nimport {HEADER_HEIGHT} from '../../../constants';\n\nconst b = block('system');\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nclass Chunks extends Component {\n static _formatChunkName(name) {\n return hammer.format['ReadableField'](\n name === 'chunks' ? 'total' : name.substring(0, name.length - '_chunks'.length),\n );\n }\n\n static _formatChunkCount(count) {\n return count === 0 ? '' : hammer.format['Number'](count);\n }\n\n static _prepareColumnSet(types) {\n let columnSet = map_(types, 'name');\n\n columnSet = filter_(columnSet, (item) => item !== 'chunks');\n columnSet.push('chunks');\n columnSet.unshift('cell_tag');\n\n return columnSet;\n }\n\n static propTypes = {\n // from connect\n replication: PropTypes.bool,\n sealer: PropTypes.bool,\n refresh: PropTypes.bool,\n requisitionUpdate: PropTypes.bool,\n cells: PropTypes.arrayOf(PropTypes.object),\n types: PropTypes.arrayOf(PropTypes.object),\n\n sortState: sortStateType,\n };\n\n onToggle = () => {\n const {collapsed, setSettingsSystemChunksCollapsed} = this.props;\n setSettingsSystemChunksCollapsed(!collapsed);\n };\n\n _prepareColumns(types) {\n const columns = {};\n\n forEach_(types, (type) => {\n columns[type.name] = {\n ...type,\n get: function (cellData) {\n return cellData[type.name];\n },\n caption: Chunks._formatChunkName(type.name),\n align: 'right',\n sort: true,\n };\n });\n\n columns.cell_tag = {\n get: function (cellData) {\n const cellTag = cellData.cell_tag;\n return cellTag === 'total' ? cellTag : Number(cellTag);\n },\n name: 'cell_tag',\n caption: hammer.format['ReadableField']('cell_tag'),\n align: 'left',\n sort: true,\n };\n\n return columns;\n }\n\n renderLabels() {\n const {replication, sealer, refresh, requisitionUpdate} = this.props;\n\n const labels = [\n {\n text: 'Replication',\n value: replication,\n },\n {\n text: 'Sealer',\n value: sealer,\n },\n {\n text: 'Refresh',\n value: refresh,\n },\n {\n text: 'Requisition Update',\n value: requisitionUpdate,\n },\n ];\n\n return map_(labels, (label) => {\n let theme, text;\n\n if (typeof label.value === 'boolean') {\n theme = label.value ? 'success' : 'danger';\n text = label.value ? `${label.text} enabled` : `${label.text} disabled`;\n } else {\n theme = 'default';\n text = `${label.text} unknown`;\n }\n\n return <Label key={label.text} theme={theme} text={text} />;\n });\n }\n\n renderImpl() {\n const {cells, types, sortState, collapsibleSize, collapsed} = this.props;\n const [rest, total] = partition_(cells, ({cell_tag}) => 'total' !== cell_tag);\n\n if (!cells || 0 === cells.length) {\n return null;\n }\n\n const columns = this._prepareColumns(types);\n const sortedCells = hammer.utils.sort(rest, sortState, columns);\n\n // TABLE\n const tableSettings = {\n size: 's',\n theme: 'embedded',\n striped: false,\n css: 'chunk-cells',\n computeKey: function (item) {\n return item.cell_tag;\n },\n tableId: SYSTEM_CHUNKS_TABLE_ID,\n columns: {\n items: columns,\n sets: {\n default: {\n items: Chunks._prepareColumnSet(types),\n },\n },\n },\n templates: {\n key: 'system/chunk-cells',\n data: {columns: columns},\n },\n header: false,\n };\n\n const table = Object.assign({}, tableSettings, {\n items: sortedCells,\n columns: Object.assign({}, tableSettings.columns, {\n items: columns,\n mode: 'default',\n }),\n });\n\n const totalRow = total[0];\n\n let countersBlock = null;\n if (totalRow) {\n /* eslint-disable camelcase */\n const {\n lost_vital_chunks,\n data_missing_chunks,\n parity_missing_chunks,\n chunks,\n quorum_missing_chunks,\n } = totalRow;\n\n const counters = {\n flags: {\n lvc: Chunks._formatChunkCount(lost_vital_chunks),\n dmc: Chunks._formatChunkCount(data_missing_chunks),\n pmc: Chunks._formatChunkCount(parity_missing_chunks),\n qmc: Chunks._formatChunkCount(quorum_missing_chunks),\n },\n total: hammer.format['Number'](chunks),\n };\n /* eslint-enable camelcase */\n const stateThemeMappings = {\n lvc: 'danger',\n dmc: 'warning',\n pmc: 'warning',\n qmc: 'danger',\n };\n countersBlock = (\n <SystemCounters\n counters={counters}\n renderLinks={false}\n stateThemeMappings={stateThemeMappings}\n />\n );\n }\n\n const overview = (\n <div className={b('heading-overview')}>\n {countersBlock}\n {this.renderLabels()}\n </div>\n );\n\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name={'Chunks'}\n headingClassName={stickyTopClassName}\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 {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';\nimport {toaster} from '../../../utils/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.53zm-.654-1.36a2 2 0 0 0-.175-.103L9.499 2.427a1.5 1.5 0 0 0-1.197-.063l-4.829 1.81q-.12.045-.23.11L7.05 6.185zM2.5 5.59l3.75 1.875v5.984l-2.92-1.46a1.5 1.5 0 0 1-.83-1.342zM1.267 4.343c-.173.38-.267.8-.267 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.77a3 3 0 0 0-1.48 1.203.75.75 0 0 0-.2.37\", clipRule: \"evenodd\" })));\nexport default Cube;\n","import React from 'react';\nimport {useSelector} from '../../store/redux-hooks';\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' | 'Cypress 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 {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n name={name}\n headingClassName={stickyTopClassName}\n overview={\n <>\n {!collapsed && (\n <ExpandButton\n all\n showText\n expanded={expandRacks}\n toggleExpanded={() => setExpandRacks(!expandRacks)}\n />\n )}\n {overview}\n </>\n }\n onToggle={onToggleCollapsed}\n collapsed={collapsed}\n size={UI_COLLAPSIBLE_SIZE}\n togglerRightPadding=\"small\"\n >\n <RoleGroupsContainer>\n {map_(roleGroups, (data) => {\n return (\n <RoleGroup\n key={data.name}\n data={data}\n makeUrl={makeUrl}\n hideOthers\n bannedAsState\n forceExpand={expandRacks}\n />\n );\n })}\n </RoleGroupsContainer>\n </CollapsibleSectionStateLess>\n )}\n </StickyContainer>\n );\n}\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {loadSystemProxies} from '../../../store/actions/system/proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getSettingsSystemHttpProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsSystemHttpProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport type {RootState} from '../../../store/reducers';\nimport {useDispatch} from '../../../store/redux-hooks';\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 = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemProxies()).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n return null;\n}\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\nexport default connector(Proxies);\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {setSettingsSystemRpcProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemRPCProxies} from '../../../store/actions/system/rpc-proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\nimport {getSettingsSystemRpcProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {useDispatch} from '../../../store/redux-hooks';\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 = useDispatch();\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 {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';\nimport {toaster} from '../../../utils/toaster';\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 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 {USE_CACHE, USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\nimport {splitBatchResults} from '../../../../shared/utils/error';\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} 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';\nimport {toaster} from '../../../utils/toaster';\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 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} from 'react-redux';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\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';\nimport {setSettingsSystemNodesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemNodes} from '../../../store/actions/system/nodes';\nimport {RoleGroupInfo} from '../../../store/reducers/system/proxies';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport type {RootState} from '../../../store/reducers';\n\nimport {\n getSettingSystemNodesNodeType,\n getSettingsSystemNodesCollapsed,\n} from '../../../store/selectors/settings/settings-ts';\nimport {getSystemNodesNodeTypesToLoad} from '../../../store/selectors/system/nodes';\nimport {\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 let flags: Array<typeof f | 'banned' | '!banned'> = [f];\n if (s === 'banned') {\n flags = ['banned'];\n } else if (s) {\n flags = [f, '!banned'];\n }\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 {({stickyTopClassName}) => (\n <CollapsibleSectionStateLess\n overview={renderOverview()}\n headingClassName={stickyTopClassName}\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 = useDispatch();\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 from 'react';\nimport {useSelector} from 'react-redux';\n\nimport SystemStateOverview from '../SystemStateOverview/SystemStateOverview';\n\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {setSettingsSystemCypressProxiesCollapsed} from '../../../store/actions/settings/settings';\nimport {loadSystemCypressProxies} from '../../../store/actions/system/cypress-proxies';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getSettingsSystemCypressProxiesCollapsed} from '../../../store/selectors/settings/settings-ts';\nimport {useDispatch} from '../../../store/redux-hooks';\nimport {MakeUrlParams} from '../ProxiesImpl/RoleGroup';\nimport {ProxiesImpl} from '../ProxiesImpl/ProxiesImpl';\nimport {\n getCypressProxiesCounters,\n getCypressProxiesRoleGroups,\n} from '../../../store/reducers/system/cypress-proxies';\nimport {SystemNodeCounters} from '../../../store/reducers/system/proxies';\n\nfunction CypressProxiesOverview({counters}: {counters: SystemNodeCounters}) {\n return <SystemStateOverview tab=\"cypress_proxies\" counters={counters} />;\n}\n\nfunction CypressProxies() {\n const cluster = useSelector(getCluster);\n const collapsed = useSelector(getSettingsSystemCypressProxiesCollapsed);\n const roleGroups = useSelector(getCypressProxiesRoleGroups);\n const counters = useSelector(getCypressProxiesCounters);\n const dispatch = useDispatch();\n\n const updateFn = React.useMemo(() => {\n let allowUpdate = true;\n return () => {\n if (allowUpdate) {\n dispatch(loadSystemCypressProxies()).then((data) => {\n if (data?.isRetryFutile) {\n allowUpdate = false;\n }\n });\n }\n };\n }, [dispatch]);\n\n useUpdater(updateFn);\n\n const onToggle = () => {\n dispatch(setSettingsSystemCypressProxiesCollapsed(!collapsed));\n };\n\n return (\n <React.Fragment>\n {counters.total > 0 && (\n <ProxiesImpl\n name={'Cypress Proxies'}\n overview={<CypressProxiesOverview counters={counters} />}\n onToggleCollapsed={onToggle}\n roleGroups={roleGroups}\n collapsed={collapsed}\n makeUrl={(params) => makeRoleGroupUrl(params, cluster)}\n />\n )}\n </React.Fragment>\n );\n}\n\nfunction makeRoleGroupUrl({state}: MakeUrlParams = {}, cluster: string) {\n const params = new URLSearchParams();\n if (state) {\n params.append('state', state);\n }\n return `/${cluster}/components/cypress_proxies?${params}`;\n}\n\nexport default CypressProxies;\n","import {ThunkAction, UnknownAction} from '@reduxjs/toolkit';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {USE_SUPRESS_SYNC} from '../../../../shared/constants';\nimport {getBatchError} from '../../../../shared/utils/error';\nimport ypath from '../../../common/thor/ypath';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {\n fetchCypressProxiesFailure,\n fetchCypressProxiesRequest,\n fetchCypressProxiesSuccess,\n} from '../../../store/reducers/system/cypress-proxies';\nimport {RoleGroupItemInfo} from '../../../store/reducers/system/proxies';\nimport {isRetryFutile} from '../../../utils/index';\nimport {extractProxyCounters, extractRoleGroups} from '../../../utils/system/proxies';\nimport {showErrorPopup} from '../../../utils/utils';\n\ntype CypressProxiesThunkAction<T = void> = ThunkAction<\n Promise<T>,\n RootState,\n unknown,\n UnknownAction\n>;\n\nfunction extractCypressProxy(data: object): Array<RoleGroupItemInfo> {\n const cypressProxies = ypath.getValue(data);\n const result = [];\n for (const proxy in cypressProxies) {\n if (cypressProxies[proxy]) {\n const proxyData = ypath.getAttributes(cypressProxies[proxy]);\n const state = ypath.getValue(proxyData, '/state');\n const effectiveState = !state || state === 'unknown' ? 'other' : state;\n const banned = ypath.getValue(proxyData, '/@banned');\n result.push({\n name: proxy,\n state,\n effectiveState,\n banned,\n });\n }\n }\n return result;\n}\n\nexport function loadSystemCypressProxies(): CypressProxiesThunkAction<\n undefined | {isRetryFutile: boolean}\n> {\n return (dispatch) => {\n dispatch(fetchCypressProxiesRequest());\n\n return ytApiV3Id\n .executeBatch(YTApiId.systemCypressProxies, {\n requests: [\n {\n command: 'get',\n parameters: {\n path: '//sys/cypress_proxies',\n attributes: ['banned', 'state'],\n ...USE_SUPRESS_SYNC,\n },\n },\n ],\n })\n .then((result) => {\n const error = getBatchError(result, 'Failed to load CypressProxies');\n if (error) {\n throw error;\n }\n\n const data = result?.[0]?.output;\n const cypressProxies = extractCypressProxy(data);\n\n dispatch(\n fetchCypressProxiesSuccess({\n roleGroups: extractRoleGroups(cypressProxies),\n counters: extractProxyCounters(cypressProxies),\n }),\n );\n return undefined;\n })\n .catch((error) => {\n dispatch(fetchCypressProxiesFailure(error));\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/cypress-proxies',\n autoHiding: false,\n theme: 'danger',\n content: `[code ${code}] ${message}`,\n title: 'Could not load Cypress-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 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';\nimport CypressProxies from '../CypressProxies/CypressProxies';\n\nexport const SystemGeneralTab: FC = () => {\n return (\n <>\n <Resources />\n <Masters />\n <SchedulersAndAgents />\n <Chunks />\n <Proxies />\n <RpcProxies />\n <CypressProxies />\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 '../../../store/redux-hooks';\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 {formatByParams} from '../../../../../shared/utils/format';\nimport {TabItem} from '../../../../components/Tabs/Tabs';\nimport {SystemTabs} from '../../../../constants/system/tabs';\nimport {UIFactory} from '../../../../UIFactory';\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 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","export const VisibleHostType = {\n host: 'host',\n physicalHost: 'physicalHost',\n};\n\nexport const mastersRadioButtonItems = [\n {value: VisibleHostType.host, text: 'Container'},\n {value: VisibleHostType.physicalHost, text: 'Host'},\n];\n","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","import React from 'react';\n\nimport {ThemeProvider} from '@gravity-ui/uikit';\n\nimport {Provider} from 'react-redux';\nimport {useSelector} from '../../store/redux-hooks';\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\nimport {getWindowStore} from '../../store/window-store';\nimport {getTheme} from '../../store/selectors/global';\n\nexport function AppStoreProvider({children}: {children: React.ReactNode}) {\n return (\n <Provider store={getWindowStore()}>\n <AppThemeProvider>\n <ErrorBoundary>{children}</ErrorBoundary>\n </AppThemeProvider>\n </Provider>\n );\n}\n\nexport function AppThemeProvider({children}: {children: React.ReactNode}) {\n const theme = useSelector(getTheme);\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n}\n"],"names":["props","_jsx","_objectSpread","xmlns","fill","viewBox","children","fillRule","d","clipRule","block","cn","ExpandButton","_ref","className","expanded","inline","toggleExpanded","all","showText","size","qa","titleExpanded","titleCollapsed","_jsxs","Button","view","title","onClick","Icon","data","doubleShevronRightSvg","shevronRightSvg","SystemTopRowContent","RowWithName","page","Page","SYSTEM","CreateClusterNotificationButton","clusterConfig","useSelector","getCurrentClusterConfig","CreateNotificationButton","url","UIFactory","createNotificationUrl","href","target","React","mapDispatchToProps","toggleColumnSortOrder","compose","connect","sortState","tables","Component","_WithStickyHead","_React$Component","WithStickyHead","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","top","this","bWrapper","sticky","style","prepareTableClassName","ElementsTableHeader","renderStickyHead","displayName","concat","getDisplayName","defaultProps","templates","theme","padded","striped","HEADER_HEIGHT","formatNumber","hammer","format","Number","formatBytes","Bytes","b","Resources","_Component","resources","usage","resource_usage","limits","resource_limits","caption","text","cpu","progress","user_memory","gpu","_this$props","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","YTErrorBlock","type","message","toFixed","entries","map","Progress","headingCN","prepareResources","diskResources","prepareDiskResources","showResources","length","showDiskResources","diskResourcesCN","renderFullNodesMessage","renderResources","ResourcesUpdater","renderImpl","dispatch","useDispatch","updateFn","allowUpdate","loadSystemResources","then","isRetryFutile","useUpdater","state","_state$system$resourc","system","getMediumList","setSetting","hostType","getMastersHostType","onChange","evt","SettingName","MASTERS_HOST_TYPE","NAMESPACES","RadioButton","name","items","mastersRadioButtonItems","SystemCounters","params","makeUrl","cluster","tab","isEmptyParams","Object","keys","qs","isNaN","renderLinks","prepareUrl","undefined","content","_Fragment","Link","_this","_this$props2","counters","stateThemeMappings","map_","flags","flag","flagName","renderCounter","formatCounterName","_defineProperty","_this2","_this$props3","states","stateName","countersFlags","renderCountersFlags","countersStates","renderCountersStates","counterTotal","renderCounterTotal","getCluster","SystemStateLabels","labels","Flex","gap","_ref2","index","Label","SystemStateOverview","stateOverview","rest","_objectWithoutProperties","_excluded","_this$props$stateOver","stack","computeEffectiveStateProgress","SwitchLeaderShortInfo","startTime","useRef","moment","_useState","useState","_useState2","_slicedToArray","currentTime","setCurrentTime","_useState3","_useState4","finishTime","setFinishTime","updateCurrentTime","timeout","forceAutoRefresh","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","abrupt","getStateForHost","newLeaderPath","sent","loadMasters","stop","MetaTable","TimeDuration","diff","current","SwitchLeaderShortInfoStatus","SwitchLeaderDialog","error","setError","selectLeadingHostOptions","hosts","host","path","getPath","split","pop","leader","find","leaderPath","YTDFDialog","visible","headerProps","cellId","initialValues","leading_primary_master","fields","required","extras","options","placeholder","width","filterable","_toConsumableArray","makeErrorFields","footerProps","textApply","onAdd","form","getState","values","confirm","e","onClose","cancel","pristineSubmittable","SwitchLeaderButton","setVisible","handleConfirm","_ref3","leaderAddress","switchLeader","ytApiV4Id","YTApiId","cell_id","new_leader_address","wrapApiPromiseByToaster","toasterName","successContent","AppStoreProvider","successTitle","autoHide","_x","apply","withTooltip","tooltipProps","awesome","NodeQuad","_ref$theme","_ref$children","banned","alerts","decommissioned","full","effectiveTheme","stroke","reShortNameSystemPage","makeRegexpFromSettings","uiSettings","makeShortSystemAddress","address","_res$groups","res","exec","groups","shortname","ChangeMaintenanceButton","container","maintenance","maintenanceMessage","onMaintenanceChange","_useToggle","useToggle","_useToggle2","toggleVisible","handleMaintenanceChange","_form$getState","t0","label","disabled","PencilIcon","instanceStateToTheme","active","connected","leading","disconnected","following","follower_recovery","leader_recovery","standby","elections","stopped","unknown","online","offline","Instance","instance","allowVoting","allowService","$address","$physicalAddress","attributes","$attributes","getMaintenance","getMaintenanceMessage","voting","denyVoting","addressWithoutPort","handleOnMaintenanceChange","useCallback","changeMasterMaintenance","shortName","Tooltip","face","read_only","ReadOnlyIcon","height","warming_up","WarmUpIcon","alignItems","ClipboardButton","hidden","Text","color","CellTag","cellTag","hexCellTag","Hex","placement","Secondary","MasterGroup","quorum","instances","status","quorumTitle","leaderCommitedVersion","Fragment","Readable","delimiter","Boolean","gridRowStart","renderQuorum","SystemAlert","selectMasterAlerts","alert","id","YTAlertBlock","computeStateProgress","sortStateProgress","count","Masters","_len","args","Array","_key","onToggle","setSettingsSystemMastersCollapsed","collapsed","renderMastersGroups","masters","master","_providers$instances","_discovery$instances","_queueAgents$instance","secondary","providers","discovery","queueAgents","groupsCount","VisibleHostTypeRadioButton","_providers$instances2","_discovery$instances2","_queueAgents$instance2","_providers$instances3","_discovery$instances3","_queueAgents$instance3","primary","fitIntoSection","mastersFitIntoSection","secondaryGroups","renderSection","heading","alertsCount","renderMasterTypeSwitcher","unavailable","recovery","counterGroup","_this$props4","initialized","collapsibleSize","renderContent","overview","renderOverview","StickyContainer","stickyTopClassName","CollapsibleSectionStateLess","open","headingClassName","renderAlerts","MastersUpdater","_state$system$masters","UI_COLLAPSIBLE_SIZE","getSettingsSystemMastersCollapsed","getSystemSchedulersWithState","createSelector","schedulersAndAgents","schedulers","VisibleHostType","sheduler","connectedHost","ypath","connectedSchedulersToState","physicalHost","getSystemAgentsWithState","agents","agent","connectedAgentsToState","getSystemSchedulerAndAgentCounters","schedulersWithState","agentsWithState","statefulHosts","numberOf","extractAgentsCounters","getSystemSchedulerAndAgentAlerts","schedulerAlerts","agentAlerts","reduce_","acc","loadSchedulersAndAgents","FETCH_SCHEDULERS","REQUEST","Promise","ytApiV3Id","list","systemSchedulers","USE_SUPRESS_SYNC","requests","command","parameters","executeBatch","systemSchedulersState","outputs","splitBatchResults","getSchedulersState","sortBy_","systemCAInstances","basePath","systemCAStates","getAgentsState","_ref2$","_ref2$2","SUCCESS","_error$response","FAILURE","response","code","toaster","add","autoHiding","actions","showErrorPopup","changeSchedulerMaintenance","getSate","login","result","getCurrentUserName","changeMaintenance","getBatchError","_x2","Scheduler","formatedAddress","ellipsis","SchedulersAndAgents","setSettingsSystemSchedulersCollapsed","connectedHosts","objects","rows","Math","min","columns","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","css","computeKey","item","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","footer","ChunksUpdater","substring","columnSet","filter_","unshift","allowRetry","loadChunks","_state$system$chunks","getSettingsSystemChunksCollapsed","extractRoleGroups","proxies","roleGroups","roles","proxy","roleName","role","effectiveStates","incrementCounters","values_","MAIN_STATES","Set","getNodeffectiveState","has","incrementStateCounter","k","extractProxyCounters","each_","effectiveState","makeProxyInfo","dead","GridWithMediaMinWidth","itemClassName","_ref$maxWidth","maxWidth","itemMinWidth","_ref$itemMaxWidth","itemMaxWidth","_ref$gap","asideHeaderWidth","getGlobalAsideHeaderWidth","_React$useMemo","guid","pagePadding","i","calcMinWidth","columnsCount","minWidth","nextMinWidth","mediaMaxWidthCondition","from","join","inlineClassName","inlineStyle","filter","COLORS_BY_STATUS","ONLINE","OFFLINE","BANNED","OTHER","FULL","StatsInfo","alertNumber","alertCount","decNumber","decCount","alertsUrl","decUrl","alertsValue","decValue","remaining","colors","addProgressStackSpacers","calculateStack","CountUrl","variant","TextCountUrl","RoleGroupsContainer","RoleGroup","_data$items","forceExpand","_counters$effectiveSt","_counters$effectiveSt2","_counters$effectiveSt3","_counters$effectiveSt4","other","_counters$flags","_counters$flags$banne","_counters$flags$full","_counters$flags$alert","alerts_online","_counters$flags$alert2","alerts_offline","_counters$flags$alert3","alerts_banned","_counters$flags$dec_o","dec_offline","_counters$flags$dec_o2","dec_online","_counters$flags$dec_b","dec_banned","setExpanded","useEffect","nameUrl","direction","Cube","fontWeight","grow","ProxiesImpl","onToggleCollapsed","_React$useState","_React$useState2","expandRacks","setExpandRacks","togglerRightPadding","hideOthers","bannedAsState","Proxies","setSettingsSystemHttpProxiesCollapsed","makeRoleGroupUrl","URLSearchParams","append","ProxiesUpdater","axios","request","method","FETCH_PROXIES","_state$system$proxies","loaded","getSettingsSystemHttpProxiesCollapsed","RpcProxies","setSettingsSystemRpcProxiesCollapsed","RpcProxiesUpdater","FETCH_RPC_PROXIES","systemRpcProxies","rpcProxies","getValue","_state$system$rpcProx","getSettingsSystemRpcProxiesCollapsed","loadSystemNodes","nodeTypes","SYSTEM_FETCH_NODES","suppress_transaction_coordinator_sync","suppress_upstream_sync","USE_MAX_SIZE","nodeType","USE_CACHE","systemNodes","_splitBatchResults","results","_toArray","racks","rackNames","nodes","rackA","rackB","compareVectors","UNAWARE","prepareRackNames","empty","createRack","nodeA","nodeB","$value","prepareNodes","node","rackName","getBoolean","effectiveFlag","rack","hasOwnProperty","call","insertNodeToRack","prepareRacks","slice","reduce","overviewCounters","extractNodeCounters","_groupRacks","groupedRacks","groupName","forEach","dcName","rackGroup","startsWith","every","rackGroups","groupRacks","prepareRoleGroups","increaseFlagCounter","dst","attrs","_node$$attributes2","_node$$attributes","info","isStateOnlineOffline","toAdd","g","STATE_THEME_MAPPING","RackGroup","roleGroup","makeComponentNodesUrl","expandAll","setExpandAll","makeComponentsNodesLink","rackFilter","group","showFlags","setSettingsSystemNodesCollapsed","NodesUpdater","getSystemNodesNodeTypesToLoad","useMemoizedIfEqual","_state$system$nodes","getSettingsSystemNodesCollapsed","getSettingSystemNodesNodeType","s","f","p","rackSelected","NoContent","warning","ReadableField","hint","SystemNodeTypeSelector","CypressProxiesOverview","getSettingsSystemCypressProxiesCollapsed","getCypressProxiesRoleGroups","getCypressProxiesCounters","fetchCypressProxiesRequest","systemCypressProxies","_result$","cypressProxies","proxyData","getAttributes","extractCypressProxy","output","fetchCypressProxiesSuccess","fetchCypressProxiesFailure","Toaster","setSettingsSystemCypressProxiesCollapsed","SystemGeneralTab","CypressProxies","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","ElementsTableFooter","itemHeight","itemMods","selectedIndex","cssHover","_this$state","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","renderRow","_prepareColumnsData","prepareColumnsData","set","_WithStickyFooter","WithStickyFooter","renderStickyFooter","toggleReducer","nextValue","initialValue","useReducer","Provider","store","getWindowStore","AppThemeProvider","ErrorBoundary","getTheme","ThemeProvider"],"sourceRoot":""}