@ytsaurus/ui 1.77.0 → 1.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +36 -38
- package/dist/public/build/css/5222.d0292d2c.chunk.css +2 -0
- package/dist/public/build/css/5222.d0292d2c.chunk.css.map +1 -0
- package/dist/public/build/css/{577.f8556dcc.chunk.css → 6988.f56a9328.chunk.css} +2 -2
- package/dist/public/build/css/6988.f56a9328.chunk.css.map +1 -0
- package/dist/public/build/css/job.8112dc53.chunk.css +2 -0
- package/dist/public/build/css/job.8112dc53.chunk.css.map +1 -0
- package/dist/public/build/js/3302.341c83df.chunk.js +3 -0
- package/dist/public/build/js/3302.341c83df.chunk.js.map +1 -0
- package/dist/public/build/js/836.3ae551de.chunk.js +2 -0
- package/dist/public/build/js/836.3ae551de.chunk.js.map +1 -0
- package/dist/public/build/js/8778.9a9f6bc7.chunk.js +2 -0
- package/dist/public/build/js/8778.9a9f6bc7.chunk.js.map +1 -0
- package/dist/public/build/js/{chyt.0ee6bfa2.chunk.js → chyt.42f38f01.chunk.js} +2 -2
- package/dist/public/build/js/{chyt.0ee6bfa2.chunk.js.map → chyt.42f38f01.chunk.js.map} +1 -1
- package/dist/public/build/js/cluster-page-wrapper.232f70cd.chunk.js +2 -0
- package/dist/public/build/js/{cluster-page-wrapper.bdc8607f.chunk.js.map → cluster-page-wrapper.232f70cd.chunk.js.map} +1 -1
- package/dist/public/build/js/{components.b39828bc.chunk.js → components.945a0106.chunk.js} +2 -2
- package/dist/public/build/js/components.945a0106.chunk.js.map +1 -0
- package/dist/public/build/js/{dashboard.5d885065.chunk.js → dashboard.3499dccc.chunk.js} +2 -2
- package/dist/public/build/js/{dashboard.5d885065.chunk.js.map → dashboard.3499dccc.chunk.js.map} +1 -1
- package/dist/public/build/js/job.1932fc11.chunk.js +2 -0
- package/dist/public/build/js/job.1932fc11.chunk.js.map +1 -0
- package/dist/public/build/js/main.c17637d5.js +3 -0
- package/dist/public/build/js/main.c17637d5.js.map +1 -0
- package/dist/public/build/js/navigation.b5865eeb.chunk.js +2 -0
- package/dist/public/build/js/navigation.b5865eeb.chunk.js.map +1 -0
- package/dist/public/build/js/{query-navigation.b1574290.chunk.js → query-navigation.853f0fb5.chunk.js} +2 -2
- package/dist/public/build/js/query-navigation.853f0fb5.chunk.js.map +1 -0
- package/dist/public/build/js/query-tracker.025d3aa0.chunk.js +2 -0
- package/dist/public/build/js/query-tracker.025d3aa0.chunk.js.map +1 -0
- package/dist/public/build/js/runtime.21bbf4bd.js +2 -0
- package/dist/public/build/js/runtime.21bbf4bd.js.map +1 -0
- package/dist/public/build/manifest.json +36 -38
- package/package.json +2 -2
- package/dist/public/build/css/1337.7e12eee1.chunk.css +0 -2
- package/dist/public/build/css/1337.7e12eee1.chunk.css.map +0 -1
- package/dist/public/build/css/577.f8556dcc.chunk.css.map +0 -1
- package/dist/public/build/css/job.9757ff68.chunk.css +0 -2
- package/dist/public/build/css/job.9757ff68.chunk.css.map +0 -1
- package/dist/public/build/js/2447.eb8fde89.chunk.js +0 -2
- package/dist/public/build/js/2447.eb8fde89.chunk.js.map +0 -1
- package/dist/public/build/js/3302.b8eb7c9c.chunk.js +0 -3
- package/dist/public/build/js/3302.b8eb7c9c.chunk.js.map +0 -1
- package/dist/public/build/js/6729.39d7cf60.chunk.js +0 -2
- package/dist/public/build/js/6729.39d7cf60.chunk.js.map +0 -1
- package/dist/public/build/js/8778.f3ea089f.chunk.js +0 -2
- package/dist/public/build/js/8778.f3ea089f.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js +0 -2
- package/dist/public/build/js/components.b39828bc.chunk.js.map +0 -1
- package/dist/public/build/js/job.ea2ba82d.chunk.js +0 -2
- package/dist/public/build/js/job.ea2ba82d.chunk.js.map +0 -1
- package/dist/public/build/js/main.6375dbc6.js +0 -3
- package/dist/public/build/js/main.6375dbc6.js.map +0 -1
- package/dist/public/build/js/navigation.529208de.chunk.js +0 -2
- package/dist/public/build/js/navigation.529208de.chunk.js.map +0 -1
- package/dist/public/build/js/query-navigation.b1574290.chunk.js.map +0 -1
- package/dist/public/build/js/query-tracker.515069f6.chunk.js +0 -2
- package/dist/public/build/js/query-tracker.515069f6.chunk.js.map +0 -1
- package/dist/public/build/js/runtime.09217c31.js +0 -2
- package/dist/public/build/js/runtime.09217c31.js.map +0 -1
- /package/dist/public/build/js/{3302.b8eb7c9c.chunk.js.LICENSE.txt → 3302.341c83df.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.6375dbc6.js.LICENSE.txt → main.c17637d5.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"js/job.1932fc11.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/components/ErrorMessage/ErrorMessage.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/Toolbar.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/get-min-width.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/prepare-statistic.ts.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/utils.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/StatisticTable.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/components/Text/Text.tsx","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/templates/utils.js","webpack://@ytsaurus/ui/./src/ui/containers/PathEditor/PathEditor.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/path-editor/path-editor.js","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/job/specification.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/job/detail.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Specification/Specification.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/job/statistics.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Statistics/Statistics.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/JobBreadcrumbs/JobBreadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/PivotKeys/PivotKeys.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/job/competitors.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Speculative/Speculative.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/StatisticsIO/StatisticsIO.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Details/Details.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/job/general.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/JobActions/JobActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/JobGeneral/JobGeneral.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/JobDetails/JobDetails.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/Job.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/StaleJobIcon.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/events/eventsTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Events/Events.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/thor/unipika.ts","webpack://@ytsaurus/ui/./src/ui/utils/navigation/path-editor.js","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg"],"sourcesContent":["import React from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nexport interface AttributesButtonProps extends ButtonProps {}\n\nexport default function AttributesButton({\n view = 'flat-secondary',\n size = 'm',\n ...rest\n}: AttributesButtonProps) {\n return (\n <Button view={view} size={size} {...rest}>\n <Icon awesome=\"at\" />\n </Button>\n );\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport Icon from '../Icon/Icon';\n\nimport './ErrorMessage.scss';\n\nconst b = block('error-message');\n\nfunction ErrorMessage({message, className}) {\n return (\n <div className={b(null, className)}>\n <Icon awesome=\"exclamation-circle\" />\n\n <span className={b('message-text')}>{message}</span>\n </div>\n );\n}\n\nErrorMessage.propTypes = {\n message: PropTypes.string.isRequired,\n className: PropTypes.string,\n};\n\nexport default ErrorMessage;\n","const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import React, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport Error from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\n\nconst toaster = new Toaster();\n\ninterface LoadDataHandlerProps {\n alwaysShowError?: boolean;\n loaded: boolean;\n error: boolean;\n errorData?: YTError;\n children: React.ReactNode;\n}\n\nexport default class LoadDataHandler extends Component<LoadDataHandlerProps> {\n componentDidUpdate() {\n const {error, loaded, errorData} = this.props;\n\n if (error && loaded) {\n toaster.add({\n theme: 'danger',\n name: 'network',\n autoHiding: 500000,\n title: 'Oops! something went wrong.',\n content: errorData ? (errorData as YTError).message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(errorData as YTError),\n },\n ],\n });\n }\n }\n\n render() {\n const {alwaysShowError = false, error, errorData, loaded, children} = this.props;\n\n const initialLoading = !loaded;\n\n if (error && (alwaysShowError || initialLoading)) {\n return <Error error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React, {useCallback} from 'react';\nimport {useDispatch} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Filter from '../Filter/Filter';\nimport HelpLink from '../HelpLink/HelpLink';\n\nimport {ExpandButton} from '../ExpandButton';\nimport {TreeState} from './types';\n\nconst toolbarBlock = cn('elements-toolbar');\n\nconst block = cn('yt-statistics-table');\n\nexport default function Toolbar(props: {\n helpUrl?: string;\n treeState: TreeState;\n onFilterChange: (value: string) => void;\n onTreeStateChange: (state: TreeState) => void;\n}) {\n const collapseTable = React.useCallback(\n () => props.onTreeStateChange('collapsed'),\n [props.onTreeStateChange],\n );\n const expandTable = React.useCallback(\n () => props.onTreeStateChange('expanded'),\n [props.onTreeStateChange],\n );\n\n const dispatch = useDispatch();\n\n const handleFilterChange = useCallback(\n (val: string) => dispatch(props.onFilterChange(val)),\n [dispatch],\n );\n\n const isExpanded = props.treeState === 'expanded' || props.treeState === 'mixed';\n\n return (\n <div className={toolbarBlock(null, block('toolbar'))}>\n <div className={toolbarBlock('container')}>\n <div className={toolbarBlock('component', block('filter'))}>\n <Filter size=\"m\" debounce={500} value={''} onChange={handleFilterChange} />\n </div>\n <div className={toolbarBlock('component', block('expand-collapse'))}>\n <span className={block('expand-metrics')}>\n <ExpandButton\n expanded={isExpanded}\n toggleExpanded={isExpanded ? collapseTable : expandTable}\n />\n </span>\n </div>\n {props.helpUrl && (\n <div className={toolbarBlock('component', block('help'))}>\n <HelpLink url={props.helpUrl} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import {LEVEL_OFFSET} from './StatisticTable';\n\nexport function createCanvasContext(font: string) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n ctx!.font = font;\n return ctx!;\n}\n\nexport function mesureRowWidth(ctx: CanvasRenderingContext2D, text = '') {\n const {width} = ctx.measureText(text);\n return Math.max(1, Math.ceil(width));\n}\n\nexport const getMinWidth = (items: any[], fontFamilies: {regular: string; monospace: string}) => {\n let res = 300;\n const ctx = createCanvasContext(\n `14px / 20.02px \"${fontFamilies.regular}\", \"Helvetica Neue\", Arial, Helvetica, sans-serif`,\n );\n\n for (const item of items) {\n const iconsWidth = item.isLeafNode ? 20 : 20 * 2;\n const width = mesureRowWidth(ctx, item.attributes.name);\n res = Math.max(res, width + iconsWidth + item.level * LEVEL_OFFSET);\n }\n return Math.round(res * 1.05);\n};\n","import forEach_ from 'lodash/forEach';\nimport values_ from 'lodash/values';\n\nimport hammer from '../../common/hammer';\nimport {\n MetricsEntry,\n MetricsEntryLeaf,\n MetricsList,\n Statistic,\n StatisticTree,\n StatisticTreeInner,\n} from './types';\n\nconst TREE_ROOT_NAME = '<Root>';\n\nfunction createMetricsEntry(prefix: string, name: string): MetricsEntry {\n return {\n name: name,\n prefix: prefix,\n path: prefix + '/' + name,\n };\n}\n\nfunction createMetricsEntryLeaf(\n prefix: string,\n name: string,\n statistics: Statistic,\n): MetricsEntryLeaf {\n const entry: Partial<MetricsEntryLeaf> = createMetricsEntry(prefix, name);\n entry.value = statistics;\n\n return entry as MetricsEntryLeaf;\n}\n\nfunction prepareMetricsList(\n statistics: object,\n list?: MetricsList,\n prefix: string = TREE_ROOT_NAME,\n): MetricsList {\n let preparedList: MetricsList = list || {children: {}, leaves: {}};\n\n forEach_(statistics, (statistic: object | Statistic, name: string) => {\n if (typeof values_(statistic)[0] === 'object') {\n const metricsChild: MetricsEntry = createMetricsEntry(prefix, name);\n\n preparedList.children[metricsChild.path] = metricsChild;\n\n preparedList = prepareMetricsList(statistic, preparedList, metricsChild.path);\n } else {\n const metricsLeaf: MetricsEntryLeaf = createMetricsEntryLeaf(\n prefix,\n name,\n statistic as Statistic,\n );\n\n preparedList.leaves[metricsLeaf.path] = metricsLeaf;\n }\n });\n\n return preparedList;\n}\n\nexport function prepareMetricsTree(statistics: StatisticTree): StatisticTreeInner {\n const metricsList: MetricsList = prepareMetricsList(statistics);\n\n let metricsTree = hammer.treeList.prepareTree(\n metricsList.children,\n (entry: MetricsEntry) => entry.prefix,\n );\n\n metricsTree = hammer.treeList.attachTreeLeaves(\n metricsTree,\n metricsList.leaves,\n (leafEntry: MetricsEntryLeaf) => leafEntry.prefix,\n );\n\n return metricsTree[TREE_ROOT_NAME];\n}\n\nexport function filterStatisticTree(tree?: StatisticTreeInner, currentFilter = '') {\n if (!tree) {\n return [];\n }\n\n const filteredTree = hammer.treeList.filterTree(\n tree,\n (entry: MetricsEntry) => entry.name.indexOf(currentFilter) !== -1,\n true,\n );\n\n const sortedTree = hammer.treeList.sortTree(\n filteredTree,\n {field: 'name', asc: true},\n {\n name: {\n get: function (entry: MetricsEntry) {\n return entry.name;\n },\n },\n },\n );\n\n return hammer.treeList.flattenTree(sortedTree);\n}\n\nexport const prepareStatisticTs = (statistic: StatisticTree) => {\n return prepareMetricsTree(statistic);\n};\n","import format from '../../common/hammer/format';\n\nconst UNIT_TO_FORMATTER: Record<string, undefined | ((v?: number, settings?: object) => string)> = {\n ['ms']: (v, settings) =>\n format.TimeDuration(Math.round(v!), {format: 'milliseconds', ...settings}),\n ['bytes']: (v, settings) => formatBytes(v, settings),\n ['bytes * sec']: (v, settings) => formatBytes(v, settings, ' * sec'),\n ['ms * bytes']: (v, settings) => formatBytes(v, settings, ' * ms'),\n ['Mb*sec']: (v, settings) => formatBytes(v! * 1024 * 1024, settings, ' * sec'),\n};\n\nfunction formatBytes(v?: number, settings?: object, suffix = '') {\n return isNaN(v!) ? format.NO_VALUE : format.Bytes(Math.round(v!), settings) + suffix;\n}\n\nexport function formatByUnit(v?: number, unit?: string, settings?: object) {\n const formatFn = UNIT_TO_FORMATTER[unit!] ?? format.Number;\n return formatFn?.(v, settings);\n}\n","import * as React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../Icon/Icon';\nimport format from '../../common/hammer/format';\nimport ErrorBoundary from '../ErrorBoundary/ErrorBoundary';\nimport ElementsTableRow from '../ElementsTable/ElementsTable';\nimport {ExpandButton} from '../ExpandButton';\nimport {getFontFamilies} from '../../store/selectors/global/fonts';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport MetaTable from '../../components/MetaTable/MetaTable';\nimport {Secondary} from '../../components/Text/Text';\n\nimport Toolbar from './Toolbar';\nimport {getMinWidth} from './get-min-width';\nimport {filterStatisticTree, prepareStatisticTs} from './prepare-statistic.ts';\nimport {Statistic, StatisticTree, TreeState} from './types';\n\nimport {formatByUnit} from './utils';\nimport './StatisticTable.scss';\n\nconst block = cn('yt-statistics-table');\n\nexport const LEVEL_OFFSET = 40;\n\nexport type StatisticInfo = {\n description?: string;\n unit?: string;\n};\n\ninterface TreeItem {\n name: string;\n level: number;\n attributes: {\n name: string;\n path: string;\n prefix: string;\n value?: Statistic;\n };\n isLeafNode?: boolean;\n}\n\ninterface AvgProps {\n item: TreeItem;\n unit?: string;\n}\n\nfunction Avg({item, unit}: AvgProps) {\n const statistic: Statistic = item.attributes.value as Statistic;\n\n if (statistic && statistic.count && statistic.sum) {\n const result: number = statistic.sum / statistic.count;\n\n if (result < 1) {\n return formatByUnit(result, unit, {significantDigits: 6});\n } else {\n return formatByUnit(result, unit);\n }\n }\n\n return format.NO_VALUE;\n}\n\ninterface StatisticProps {\n item: TreeItem;\n aggregation: 'avg' | 'min' | 'max' | 'sum' | 'count' | 'last';\n unit?: string;\n}\n\nfunction StatisticTableStaticCell({item, aggregation, unit}: StatisticProps) {\n if (item.isLeafNode && Boolean(item.attributes.value)) {\n if (aggregation === 'avg') {\n return <Avg item={item} unit={unit} />;\n } else if (aggregation === 'count') {\n return format['Number'](item.attributes?.value?.[aggregation]);\n } else {\n return formatByUnit(item.attributes?.value?.[aggregation], unit);\n }\n }\n\n return format.NO_VALUE;\n}\n\ninterface ItemState {\n empty: boolean;\n collapsed: boolean;\n visible: boolean;\n}\n\ninterface MetricProps {\n item: TreeItem;\n itemState: ItemState;\n toggleItemState: Function;\n renderValue: (item: TreeItem) => React.ReactChild;\n minWidth?: number;\n info?: StatisticInfo;\n}\n\nexport function StatisticName({title, info}: {title: React.ReactNode; info?: StatisticInfo}) {\n const emptyInfo = !info?.description && !info?.unit;\n\n return (\n <Tooltip\n content={\n emptyInfo ? null : (\n <MetaTable\n items={[\n {\n key: 'Description',\n value: info.description,\n visible: Boolean(info.description),\n className: block('description'),\n },\n {\n key: 'Unit',\n value: info.unit,\n visible: Boolean(info.unit),\n },\n ]}\n />\n )\n }\n >\n {title}{' '}\n {!emptyInfo && (\n <Secondary>\n <Icon awesome={'question-circle'} />\n </Secondary>\n )}\n </Tooltip>\n );\n}\n\nexport function ExpandedCell({\n item,\n itemState,\n toggleItemState,\n minWidth = undefined,\n renderValue,\n info,\n}: MetricProps) {\n const offsetStyle = React.useMemo(() => {\n return {minWidth, paddingLeft: (item?.level || 0) * LEVEL_OFFSET};\n }, [item.level, minWidth]);\n\n const toggleItemAndTreeState = React.useCallback(() => {\n if (!itemState.empty) {\n toggleItemState();\n }\n }, [itemState, toggleItemState]);\n\n if (item.isLeafNode) {\n return (\n <span className={block('metric')} style={offsetStyle}>\n <Icon awesome=\"chart-line\" className={block('metric-icon')} />\n\n <StatisticName title={renderValue(item)} info={info} />\n </span>\n );\n } else {\n return (\n <span className={block('group')} style={offsetStyle} onClick={toggleItemAndTreeState}>\n <ExpandButton\n expanded={!(itemState.collapsed || itemState.empty)}\n toggleExpanded={() => {}}\n />\n <Icon\n awesome={itemState.collapsed || itemState.empty ? 'folder' : 'folder-open'}\n className={block('group-icon')}\n />\n <span>{renderValue(item)}</span>\n </span>\n );\n }\n}\n\ntype StatisticTableTemplate<Item extends Partial<TreeItem>> = {\n [name: string]: (\n item: Item,\n colName: string,\n toggleItemState: Function,\n itemState: ItemState,\n ) => React.ReactChild | null;\n};\n\ntype ColumnName = 'avg' | 'min' | 'max' | 'sum' | 'count' | 'last';\ntype VisibleColumns = Array<ColumnName>;\n\nconst prepareTableProps = ({visibleColumns}: {visibleColumns: VisibleColumns}) => {\n const columns = visibleColumns.reduce(\n (ret, col) => {\n ret[col] = {\n sort: false,\n align: 'right',\n };\n\n return ret;\n },\n {\n name: {\n sort: false,\n align: 'left',\n },\n } as Record<ColumnName | 'name', {sort: boolean; align: 'left' | 'right'}>,\n );\n\n return {\n theme: 'light',\n size: 's',\n striped: false,\n computeKey(item: TreeItem) {\n return item.name;\n },\n tree: true,\n columns: {\n sets: {\n default: {\n items: Object.keys(columns),\n },\n },\n items: columns,\n mode: 'default',\n },\n };\n};\n\nconst useJobStatisticTable = ({\n statistic,\n fontFamilies,\n}: {\n statistic: StatisticTree;\n fontFamilies: {regular: string; monospace: string};\n}) => {\n const [filter, setFilter] = React.useState('');\n const [treeState, setTreeState] = React.useState<TreeState>('expanded');\n\n const tree = React.useMemo(() => prepareStatisticTs(statistic), [statistic]);\n const items = React.useMemo(() => filterStatisticTree(tree, filter), [tree, filter]);\n const minWidth = React.useMemo(() => getMinWidth(items, fontFamilies), [fontFamilies, items]);\n const onFilterChange = (value: string) => setFilter(value);\n\n return {\n minWidth,\n items,\n treeState,\n setTreeState,\n onFilterChange,\n };\n};\n\nexport function StatisticTable({\n className,\n helpUrl,\n virtual,\n visibleColumns,\n fixedHeader,\n statistic,\n getStatisticInfo,\n}: {\n className?: string;\n helpUrl?: string;\n virtual?: boolean;\n fixedHeader?: boolean;\n statistic: StatisticTree;\n visibleColumns: Array<'avg' | 'min' | 'max' | 'sum' | 'count' | 'last'>;\n getStatisticInfo?: (name: string) => StatisticInfo | undefined;\n}) {\n const fontFamilies = useSelector(getFontFamilies);\n const {items, minWidth, treeState, setTreeState, onFilterChange} = useJobStatisticTable({\n statistic,\n fontFamilies,\n });\n\n const templates = React.useMemo(\n () =>\n ({\n name(item, _, toggleItemState, itemState) {\n const info = getStatisticInfo?.(item.name) ?? {};\n return (\n <ExpandedCell\n item={item}\n minWidth={minWidth}\n toggleItemState={toggleItemState}\n itemState={itemState}\n renderValue={(item) => item?.attributes?.name}\n info={info}\n />\n );\n },\n __default__(item, columnName: ColumnName) {\n if (item.isLeafNode) {\n const {unit} = getStatisticInfo?.(item.name) ?? {};\n return (\n <StatisticTableStaticCell\n item={item}\n aggregation={columnName}\n unit={unit}\n />\n );\n }\n\n return null;\n },\n }) as StatisticTableTemplate<TreeItem>,\n [minWidth, getStatisticInfo],\n );\n const tableProps = React.useMemo(() => {\n return prepareTableProps({\n visibleColumns,\n });\n }, [...visibleColumns]);\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n <Toolbar\n helpUrl={helpUrl}\n onFilterChange={onFilterChange}\n onTreeStateChange={setTreeState}\n treeState={treeState}\n />\n <div className={block('table-container')}>\n <ElementsTableRow\n {...tableProps}\n virtual={virtual}\n treeState={treeState}\n templates={templates}\n items={items}\n css={block()}\n headerClassName={block('header', {fixed: fixedHeader})}\n />\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport hammer from '../../common/hammer';\nimport Icon, {IconName} from '../Icon/Icon';\n\nimport './StatusLabel.scss';\n\nfunction getViewState(label?: StatusLabelProps['label']): ViewState {\n const states: Record<Exclude<typeof label, undefined>, ViewState> = {\n // preparing states\n materializing: 'preparing',\n initializing: 'preparing',\n preparing: 'preparing',\n pending: 'preparing',\n starting: 'preparing',\n\n // running states\n running: 'running',\n completing: 'running',\n failing: 'running',\n aborting: 'running',\n reviving: 'running',\n suspended: 'suspended',\n\n // final states\n failed: 'failed',\n completed: 'completed',\n aborted: 'aborted',\n\n // NavigationFlowState\n Unknown: 'unknown',\n Stopped: 'suspended',\n Paused: 'suspended',\n Working: 'running',\n Draining: 'running',\n Pausing: 'running',\n Completed: 'completed',\n };\n\n return states[label!] ?? 'unknown';\n}\n\n// see https://github.com/ytsaurus/ytsaurus/blob/4ff6c0d/yt/yt/flow/lib/client/public.h#L20-L28\nexport type NavigationFlowState =\n | 'Unknown'\n | 'Stopped'\n | 'Paused'\n | 'Working'\n | 'Draining'\n | 'Pausing'\n | 'Completed';\n\nexport type StatusLabelState =\n | 'aborted'\n | 'aborting'\n | 'completed'\n | 'completing'\n | 'failed'\n | 'failing'\n | 'initializing'\n | 'materializing'\n | 'pending'\n | 'preparing'\n | 'reviving'\n | 'running'\n | 'starting'\n | 'suspended'\n | 'running';\n\ntype ViewState =\n | 'preparing'\n | 'running'\n | 'failed'\n | 'aborted'\n | 'completed'\n | 'suspended'\n | 'unknown';\n\nfunction getIcon(state: ViewState) {\n const iconsByViewState: Record<ViewState, IconName> = {\n preparing: 'clock',\n running: 'play-circle',\n suspended: 'pause-circle',\n failed: 'times-circle',\n completed: 'check-circle',\n aborted: 'times-circle',\n unknown: 'question-circle',\n };\n return iconsByViewState[state];\n}\n\nconst b = block('status-label');\n\nexport type StatusLabelProps = {\n className?: string;\n label?: StatusLabelState | NavigationFlowState;\n renderPlaque?: boolean;\n};\n\nexport default function StatusLabel({className, label, renderPlaque}: StatusLabelProps) {\n const mappedState = getViewState(label);\n const icon = getIcon(mappedState);\n const mods = {state: mappedState};\n\n return !label ? (\n <span />\n ) : (\n <span className={b(null, renderPlaque ? b('plaque', mods, className) : b(mods, className))}>\n <Icon awesome={icon} />\n <span>{hammer.format['ReadableField'](label)}</span>\n </span>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './Text.scss';\nimport unipika from '../../common/thor/unipika';\nimport {UNIPIKA_ESCAPED_SETTINGS} from '../../utils';\n\nconst block = cn('yt-text');\n\ninterface Props {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Secondary({children, disabled}: Props & {disabled?: boolean}) {\n return <span className={block('secondary', {disabled})}>{children}</span>;\n}\n\nexport function Bold({children}: Props) {\n return <span className={block('bold')}>{children}</span>;\n}\n\nexport function SecondaryBold({children}: Props) {\n return (\n <Secondary>\n <Bold>{children}</Bold>\n </Secondary>\n );\n}\n\nexport function Warning({children, className}: Props) {\n return <span className={block('warning', className)}>{children}</span>;\n}\n\nexport function WarningLight({children, className}: Props) {\n return <span className={block('warning-light', className)}>{children}</span>;\n}\n\nexport function NoWrap({children}: Props) {\n return <span className={block('no-wrap')}>{children}</span>;\n}\n\nexport function Escaped({text, onClick}: {text: string; onClick?: (e: React.MouseEvent) => void}) {\n const textNode = unipika.prettyprint(text, {\n ...UNIPIKA_ESCAPED_SETTINGS,\n asHTML: true,\n });\n return (\n <span\n onClick={onClick}\n className={block('escaped')}\n dangerouslySetInnerHTML={{__html: textNode}}\n />\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Text} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './WarningIcon.scss';\n\nconst b = cn('yt-warning-icon');\n\ninterface Props {\n className?: string;\n hoverContent?: React.ReactNode;\n color?: 'warning' | 'danger';\n children?: React.ReactNode;\n}\n\nexport default function WarningIcon(props: Props) {\n const {className, hoverContent, children, color} = props;\n return (\n <span className={b(null, className)}>\n <Tooltip className={b('tooltip')} content={hoverContent}>\n <Icon className={b('icon', {color})} awesome=\"exclamation-triangle\" />\n {children && (\n <Text variant=\"inherit\" color={color}>\n {children}\n </Text>\n )}\n </Tooltip>\n </span>\n );\n}\n","import React from 'react';\nimport unipika from '../../common/thor/unipika';\nimport block from 'bem-cn-lite';\n\nimport Link from '../../components/Link/Link';\n\nimport hammer from '../../common/hammer';\nimport {showErrorPopup} from '../../utils/utils';\n\nimport './utils.scss';\n\nfunction wrapRenderMethods(templates) {\n return Object.keys(templates).reduce((newTemplates, key) => {\n newTemplates[key] = templates[key];\n\n return newTemplates;\n }, {});\n}\n\n/**\n * Template must be a scoped function, because they are bound to elements-table component instance\n * @param {ViewModel} item\n * @param {String} columnName\n */\nfunction defaultTemplate(item, columnName) {\n return String(hammer.format['ValueOrDefault'](item[columnName]));\n}\n\nfunction prepareTextProps(text, asHTML) {\n const props = {};\n\n if (asHTML) {\n // Need to render html strings\n props.dangerouslySetInnerHTML = {__html: text};\n } else {\n props.children = unipika.decode(String(text));\n }\n\n return props;\n}\n\nexport function renderText(text, settings = {}) {\n let className = block('elements-text');\n\n if (settings.mix) {\n className = className(\n false,\n block(settings.mix.block)(settings.mix.elem, {\n ...settings.mix.mods,\n }),\n );\n } else {\n className = className();\n }\n\n const textProps = prepareTextProps(text, settings.asHTML);\n\n const title = settings.title || text;\n\n return <span {...textProps} title={title} className={className} />;\n}\n\nexport function printColumnAsBytes(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Bytes'](column.get(item));\n}\n\nexport function printColumnAsNumber(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Number'](column.get(item));\n}\n\nexport function printColumnAsTimeDurationWithMs(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['TimeDuration'](column.get(item), {\n format: 'milliseconds',\n });\n}\n\nexport function printColumnAsReadableField(item, columnName) {\n const column = this.getColumn(columnName);\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['ReadableField'](column.get(item))}\n </span>\n );\n}\n\nexport function printColumnAsTime(item, columnName) {\n const value = this?.getColumn ? this.getColumn(columnName).get(item) : item[columnName];\n return <ColumnAsTime value={value} />;\n}\n\nexport function ColumnAsTime({value}) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['DateTime'](value, {format: 'full'})}\n </span>\n );\n}\n\nexport function printColumnAsError(error) {\n const showError = () => {\n showErrorPopup(error, {hideOopsMsg: true});\n };\n return typeof error === 'object' ? (\n <Link theme=\"ghost\" onClick={showError}>\n View\n </Link>\n ) : (\n hammer.format.NO_VALUE\n );\n}\n\n// Using prepared table data\nexport function asBytes(item, columnName) {\n return hammer.format['Bytes'](item[columnName]);\n}\n\nexport function asNumber(item, columnName) {\n return hammer.format['Number'](item[columnName]);\n}\n\nexport default {\n __default__: defaultTemplate,\n _templates: {},\n add: function (templateId, templates) {\n this._templates[templateId] = wrapRenderMethods(templates);\n },\n get: function (templateId) {\n return this._templates[templateId] || {};\n },\n};\n","import React, {Component, FocusEvent, Key, KeyboardEvent, MouseEvent} from 'react';\nimport {connect} from 'react-redux';\nimport ReactList from 'react-list';\nimport block from 'bem-cn-lite';\nimport key from 'hotkeys-js';\n\nimport debounce_ from 'lodash/debounce';\nimport find_ from 'lodash/find';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport {Popup, TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport ErrorMessage from '../../components/ErrorMessage/ErrorMessage';\n\nimport {\n filterByCurrentPath,\n getCompletedPath,\n getIconNameForType,\n getNextSelectedIndex,\n getPrevSelectedIndex,\n} from '../../utils/navigation/path-editor';\nimport {\n loadSuggestionsList,\n removeActiveRequests,\n} from '../../store/actions/navigation/path-editor/path-editor';\nimport {RootState} from '../../store/reducers';\nimport {KeyCode} from '../../constants/index';\n\nimport './PathEditor.scss';\n\ninterface Suggestion {\n parentPath: string;\n childPath: string;\n path: string;\n targetPathBroken?: boolean;\n type?: string;\n dynamic?: unknown;\n}\n\ntype SuggestionFilter = (suggestions: Suggestion[]) => Suggestion[];\n\nexport interface EventPayload {\n path: string;\n}\n\nexport interface PathEditorProps {\n suggestions: Suggestion[];\n suggestionsError?: boolean;\n errorMessage?: string;\n loadSuggestionsList: (path: string, customFilter?: SuggestionFilter) => void;\n removeActiveRequests: () => void;\n // from parent component\n className?: string;\n placeholder?: string;\n defaultPath?: string;\n disabled?: boolean;\n autoFocus?: boolean;\n hasClear?: boolean;\n showErrors?: boolean;\n customFilter?: SuggestionFilter;\n onChange?: (newPath: string) => void;\n onFocus?: (e: FocusEvent<HTMLInputElement>, payload: EventPayload) => void;\n onBlur?: (path: string) => void;\n onApply?: (newPath: string) => void;\n onCancel?: () => void;\n}\n\ninterface PathEditorState {\n path: string;\n actualSuggestions: Suggestion[];\n inputFocus: boolean;\n inputChange: boolean;\n selectedIndex: number;\n}\n\nconst debounceTime = 300;\nconst b = block('path-editor');\n\nexport class PathEditor extends Component<PathEditorProps, PathEditorState> {\n static defaultProps: Partial<PathEditorProps> = {\n errorMessage: 'Oops, something went wrong',\n placeholder: 'Enter the path...',\n suggestionsError: false,\n autoFocus: false,\n showErrors: true,\n defaultPath: undefined,\n disabled: false,\n hasClear: false,\n };\n\n static getDerivedStateFromProps(props: PathEditorProps, state: PathEditorState) {\n const res = {};\n if (state.inputFocus && state.inputChange) {\n Object.assign(res, {\n actualSuggestions: props.suggestions.length\n ? filterByCurrentPath(state.path, props.suggestions)\n : [],\n });\n }\n\n if (state.path === undefined && props.defaultPath !== undefined) {\n Object.assign(res, {\n path: props.defaultPath,\n });\n }\n\n return isEmpty_(res) ? null : res;\n }\n\n state: PathEditorState;\n\n private suggestionsList = React.createRef<HTMLDivElement>();\n private input = React.createRef<HTMLInputElement>();\n private prevScope = '';\n\n constructor(props: PathEditorProps) {\n super(props);\n\n this.debounceLoading = debounce_(this.debounceLoading, debounceTime);\n\n this.state = {\n path: props.defaultPath ?? '',\n actualSuggestions: [],\n inputFocus: false,\n inputChange: false,\n selectedIndex: -1,\n };\n }\n\n componentDidMount() {\n const {loadSuggestionsList, customFilter, autoFocus} = this.props;\n const {path} = this.state;\n\n this.prevScope = key.getScope();\n if (path) {\n loadSuggestionsList(path, customFilter);\n }\n if (autoFocus) {\n this._setFocus();\n }\n }\n\n componentDidUpdate(prevProps: PathEditorProps) {\n if (prevProps.disabled && !this.props.disabled && this.input.current) {\n this._setFocus();\n }\n }\n\n componentWillUnmount() {\n this.props.removeActiveRequests();\n }\n\n _setFocus() {\n this.input.current?.focus();\n }\n\n get inputWidth() {\n // Is there a way to avoid using private _control property?\n return this.input.current && this.input.current.offsetWidth - 2;\n }\n\n /**\n * @deprecated Please replace usages of it to direct call.\\\n * For example: use `onFocus?.(event, payload)` instead `callCallback(onFocus, [event, payload])`.\\\n * Also, pass event as first agument of callback.\n */\n callCallback<T extends unknown[] = unknown[]>(\n cb: undefined | ((...args: T) => unknown),\n ...params: T\n ) {\n if (typeof cb === 'function') {\n return cb(...params);\n }\n\n return undefined;\n }\n\n debounceLoading(path: string) {\n const {loadSuggestionsList, customFilter, onChange} = this.props;\n\n loadSuggestionsList(path, customFilter);\n this.callCallback(onChange, path);\n }\n\n hideSuggestions = () => {\n this.setState({inputFocus: false, selectedIndex: -1});\n };\n\n selectPrevSuggestion() {\n const {selectedIndex, actualSuggestions} = this.state;\n\n const prevIndex = getPrevSelectedIndex(actualSuggestions, selectedIndex);\n this.setState({selectedIndex: prevIndex});\n }\n\n selectNextSuggestion() {\n const {selectedIndex, actualSuggestions} = this.state;\n\n const nextIndex = getNextSelectedIndex(actualSuggestions, selectedIndex);\n this.setState({selectedIndex: nextIndex});\n }\n\n handleInputChange = (path: string) => {\n this.setState({path, selectedIndex: -1, inputChange: true});\n this.debounceLoading(path);\n };\n\n handleInputFocus = (e: FocusEvent<HTMLInputElement>) => {\n const {onFocus} = this.props;\n const {path} = this.state;\n\n key.setScope('path-editor');\n this.setState({inputFocus: true});\n onFocus?.(e, {path});\n };\n\n handleInputBlur = () => {\n const {onBlur} = this.props;\n const {path} = this.state;\n\n key.setScope(this.prevScope);\n this.hideSuggestions();\n this.callCallback(onBlur, path);\n };\n\n handleEnterClick(event: KeyboardEvent<HTMLInputElement>) {\n event.preventDefault();\n\n const {selectedIndex, actualSuggestions} = this.state;\n const {onApply} = this.props;\n const inputPath = event.currentTarget.value;\n\n if (selectedIndex === -1) {\n this.setState({path: inputPath, selectedIndex: -1});\n this.callCallback(onApply, inputPath);\n } else {\n const suggestion = find_(actualSuggestions, (_, index) => index === selectedIndex);\n const completedPath = getCompletedPath(suggestion);\n\n this.handleInputChange(completedPath);\n }\n }\n\n handleEscClick() {\n const {onCancel} = this.props;\n\n this.input.current?.blur();\n this.callCallback(onCancel);\n }\n\n handleTabClick(event: KeyboardEvent<HTMLInputElement>) {\n event.preventDefault();\n const {actualSuggestions} = this.state;\n\n if (actualSuggestions.length === 1) {\n const completedPath = getCompletedPath(actualSuggestions[0]);\n\n this.handleInputChange(completedPath);\n } else if (actualSuggestions.length > 1) {\n this.selectNextSuggestion();\n }\n }\n\n handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n const key = event.keyCode;\n\n switch (key) {\n case KeyCode.ARROW_DOWN:\n this.selectNextSuggestion();\n break;\n case KeyCode.ARROW_UP:\n this.selectPrevSuggestion();\n break;\n case KeyCode.ENTER:\n this.handleEnterClick(event);\n break;\n case KeyCode.ESCAPE:\n this.handleEscClick();\n break;\n case KeyCode.TAB:\n this.handleTabClick(event);\n break;\n }\n };\n\n renderInput() {\n const {placeholder, autoFocus, hasClear, disabled} = this.props;\n const {path} = this.state;\n\n return (\n <TextInput\n onKeyDown={this.handleKeyDown}\n onUpdate={this.handleInputChange}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n placeholder={placeholder}\n hasClear={hasClear}\n autoFocus={autoFocus}\n disabled={disabled}\n controlRef={this.input}\n value={path}\n />\n );\n }\n\n renderItem = (index: number, key: Key) => {\n const {selectedIndex, actualSuggestions} = this.state;\n\n const item = actualSuggestions[index];\n const {type, dynamic} = item;\n const iconType = type === 'table' && dynamic ? 'table_dynamic' : type;\n const completedPath = getCompletedPath(item);\n const isSelected = index === selectedIndex ? 'yes' : 'no';\n const iconName = getIconNameForType(iconType, item.targetPathBroken);\n\n const mouseDownHandler = (event: MouseEvent<HTMLDivElement>) => {\n this.handleInputChange(completedPath);\n event.preventDefault();\n };\n\n return (\n <div\n key={key}\n onMouseDown={mouseDownHandler}\n className={b('item', {selected: isSelected})}\n >\n <Icon awesome={iconName} />\n\n <span className={b('item-path')}>{item.path}</span>\n </div>\n );\n };\n\n renderSuggestions() {\n const {actualSuggestions} = this.state;\n\n return actualSuggestions.length ? (\n <ReactList\n itemRenderer={this.renderItem}\n length={actualSuggestions.length}\n type=\"simple\"\n />\n ) : null;\n }\n\n renderError() {\n const {errorMessage} = this.props;\n\n if (!errorMessage) {\n return;\n }\n\n return <ErrorMessage className={b('item', {error: true})} message={errorMessage} />;\n }\n\n renderPopup() {\n const {suggestionsError, showErrors} = this.props;\n const {actualSuggestions, inputFocus} = this.state;\n\n const width = this.inputWidth || 0;\n const isVisible = Boolean(\n (actualSuggestions.length || (suggestionsError && showErrors)) && inputFocus,\n );\n const content =\n suggestionsError && showErrors ? this.renderError() : this.renderSuggestions();\n\n return (\n <Popup\n className={b('popup')}\n placement={['bottom-start', 'top-start']}\n onClose={this.hideSuggestions}\n anchorRef={this.input}\n open={isVisible}\n offset={[0, 0]}\n >\n <div className={b('items')} style={{width}} ref={this.suggestionsList}>\n {content}\n </div>\n </Popup>\n );\n }\n\n render() {\n return (\n <div className={b(null, this.props.className)}>\n {this.renderInput()}\n {this.renderPopup()}\n </div>\n );\n }\n}\n\nconst mapStateToProps = ({navigation}: RootState) => ({\n suggestions: navigation.pathEditor.suggestions,\n suggestionsError: navigation.pathEditor.suggestionsError,\n errorMessage: navigation.pathEditor.errorMessage,\n});\n\nexport default connect(mapStateToProps, {\n loadSuggestionsList,\n removeActiveRequests,\n})(PathEditor);\n","import {FETCH_SUGGESTIONS} from '../../../../constants/navigation/path-editor';\nimport {\n loadSuggestions,\n pathEditorRequests,\n preparePath,\n} from '../../../../utils/navigation/path-editor';\n\nexport function loadSuggestionsList(path, customFilter) {\n return (dispatch, getState) => {\n const {suggestionsPath, suggestionsLoaded} = getState().navigation.pathEditor;\n let currentParentPath;\n\n try {\n currentParentPath = preparePath(path);\n } catch (error) {\n return dispatch({\n type: FETCH_SUGGESTIONS.FAILURE,\n data: {message: error.message},\n });\n }\n\n if (suggestionsPath === currentParentPath && suggestionsLoaded) {\n return;\n }\n dispatch({type: FETCH_SUGGESTIONS.REQUEST});\n\n return loadSuggestions(path, customFilter)\n .then((suggestions) => {\n dispatch({\n type: FETCH_SUGGESTIONS.SUCCESS,\n data: {suggestions, path, currentParentPath},\n });\n })\n .catch((error) => {\n dispatch({\n type: FETCH_SUGGESTIONS.FAILURE,\n data: {message: error.message},\n });\n });\n };\n}\n\nexport function removeActiveRequests() {\n return (dispatch) => {\n pathEditorRequests.removeAllRequests();\n dispatch({type: FETCH_SUGGESTIONS.CANCELLED});\n };\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\nimport {useRouteMatch} from 'react-router';\n\nimport hammer from '../../common/hammer';\n\nconst b = block('elements-message');\n\ninterface MatchParams {\n tab: string;\n}\n\nexport default function Placeholder() {\n const match = useRouteMatch<MatchParams>();\n const {tab} = match.params;\n\n return (\n <div className={b({theme: 'warning'})}>\n <p className={b('paragraph')}>\n {tab\n ? `Viewer for tab \"${hammer.format['ReadableField'](tab)}\" is not implemented.`\n : 'Viewer for this tab is not implemented.'}\n </p>\n </div>\n );\n}\n","// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {Action} from 'redux';\nimport {YTError} from '../../../types';\nimport ypath from '../../../common/thor/ypath';\nimport * as JOB from '../../../constants/job';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../../store/reducers';\nimport {JobSpecification} from '../../../types/operations/job';\n\ninterface JobSpecRequest {\n type: number;\n version: number;\n scheduler_job_spec_ext: JobSpecification;\n}\n\ninterface LoadJobSpecificationRequestAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_REQUEST;\n}\n\ninterface LoadJobSpecificationSuccessAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_SUCCESS;\n data: {\n specification: JobSpecification;\n };\n}\n\ninterface LoadJobSpecificationFailureAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_FAILURE;\n data: {\n error: YTError;\n };\n}\n\ntype LoadJobSpecificationAction =\n | LoadJobSpecificationRequestAction\n | LoadJobSpecificationSuccessAction\n | LoadJobSpecificationFailureAction;\n\ninterface AbortAndResetAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_CANCELLED;\n}\n\ninterface ChangeOmitNodeDirectoryAction {\n type: typeof JOB.CHANGE_OMIT_NODE_DIRECTORY;\n}\n\ninterface ChangeOmitInputTableSpecsAction {\n type: typeof JOB.CHANGE_OMIT_INPUT_TABLES_SPECS;\n}\n\ninterface ChangeOmitOutputTableSpecsAction {\n type: typeof JOB.CHANGE_OMIT_OUTPUT_TABLES_SPECS;\n}\n\ntype CheckboxAction =\n | ChangeOmitNodeDirectoryAction\n | ChangeOmitInputTableSpecsAction\n | ChangeOmitOutputTableSpecsAction;\n\nexport type SpecificationActionType =\n | LoadJobSpecificationAction\n | AbortAndResetAction\n | CheckboxAction;\n\nconst requests = new CancelHelper();\n\nexport function loadJobSpecification(\n jobID: string,\n): ThunkAction<Promise<void>, RootState, unknown, Action<string>> {\n return (dispatch, getState) => {\n const {omitNodeDirectory, omitInputTableSpecs, omitOutputTableSpecs} =\n getState().job.specification;\n\n dispatch({type: JOB.LOAD_JOB_SPECIFICATION_REQUEST});\n\n return yt.v4\n .getJobSpec({\n parameters: {\n job_id: jobID,\n omit_node_directory: omitNodeDirectory,\n omit_input_table_specs: omitInputTableSpecs,\n omit_output_table_specs: omitOutputTableSpecs,\n },\n cancellation: requests.saveCancelToken,\n })\n .then((req: JobSpecRequest) => {\n // @ts-ignore\n const [scheduler_job_spec_ext, job_spec_ext]: JobSpecification = ypath.getValues(\n req,\n ['/scheduler_job_spec_ext', '/job_spec_ext'],\n );\n\n dispatch({\n type: JOB.LOAD_JOB_SPECIFICATION_SUCCESS,\n data: {specification: job_spec_ext ?? scheduler_job_spec_ext},\n });\n })\n .catch((error: YTError) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: JOB.LOAD_JOB_SPECIFICATION_CANCELLED});\n } else {\n dispatch({\n type: JOB.LOAD_JOB_SPECIFICATION_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function abortAndReset(): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.LOAD_JOB_SPECIFICATION_CANCELLED});\n };\n}\n\nexport function changeOmitNodeDirectory(\n jobID: string,\n): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.CHANGE_OMIT_NODE_DIRECTORY});\n dispatch(loadJobSpecification(jobID));\n };\n}\n\nexport function changeOmitInputTableSpecs(\n jobID: string,\n): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.CHANGE_OMIT_INPUT_TABLES_SPECS});\n dispatch(loadJobSpecification(jobID));\n };\n}\n\nexport function changeOmitOutputTableSpecs(\n jobID: string,\n): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.CHANGE_OMIT_OUTPUT_TABLES_SPECS});\n dispatch(loadJobSpecification(jobID));\n };\n}\n","import {createSelector} from 'reselect';\nimport ypath from '../../../common/thor/ypath';\n\nimport flatten_ from 'lodash/flatten';\nimport mapValues_ from 'lodash/mapValues';\nimport map_ from 'lodash/map';\nimport sumBy_ from 'lodash/sumBy';\nimport values_ from 'lodash/values';\n\nimport {PLEASE_PROCEED_TEXT} from '../../../utils/actions';\nimport {\n JobPipes,\n JobSpecification,\n PipesIO,\n PreparedJob,\n StatisticsIO,\n} from '../../../types/operations/job';\nimport {Action as JobAction} from '../../../pages/job/JobActions/JobActions';\n\ninterface State {\n job: {\n general: {\n job: PreparedJob;\n };\n specification: {\n specification: JobSpecification;\n };\n };\n}\n\nconst prepareStatisticsIO = (obj: PipesIO, type: string, index?: number): StatisticsIO => {\n return {\n table: index !== undefined ? `${type}:${index}` : type,\n ...mapValues_(obj, (value) => value.sum),\n };\n};\n\nexport const getJob = (state: State) => state.job.general.job;\nconst getJobSpecification = (state: State) => state.job.specification.specification;\n\nconst getPipesIO = createSelector(getJob, (job: PreparedJob): JobPipes => {\n return ypath.getValue(job, '/statistics/user_job/pipes') || {};\n});\n\nexport const getTotalTimeIO = createSelector(getPipesIO, ({input, output}: JobPipes) => {\n return {\n read: input?.['idle_time'].sum,\n write: sumBy_(values_(output), (statistics) => statistics['busy_time'].sum),\n };\n});\n\nexport const getJobStatisticsIO = createSelector(\n getPipesIO,\n ({input, output: {total, ...output}}: JobPipes) => {\n const res = {\n input: [prepareStatisticsIO(input, 'input', 0)],\n output: values_(output).map((outputStatistics: PipesIO, index) =>\n prepareStatisticsIO(outputStatistics, 'output', index),\n ),\n };\n if (total) {\n const last = prepareStatisticsIO(total, 'Total');\n last.isTotal = true;\n res.output.push(last);\n }\n return res;\n },\n);\n\nconst getUserCpuTimeSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/cpu/user/sum'),\n);\nconst getWaitCpuTimeSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/cpu/wait/sum'),\n);\n\nconst getGpuUtilizationSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/gpu/cumulative_utilization_gpu/sum'),\n);\nconst getGpuPowerSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/gpu/cumulative_power/sum'),\n);\nconst getGpuMemorySum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/gpu/cumulative_memory/sum'),\n);\n\nconst getTimeExec = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/time/exec/sum'),\n);\n\nexport const getAverageUserCpuTime = createSelector(\n [getUserCpuTimeSum, getTimeExec],\n (userCpuTimeSum, timeExec) => userCpuTimeSum / timeExec,\n);\nexport const getAverageWaitCpuTime = createSelector(\n [getWaitCpuTimeSum, getTimeExec],\n (waitCpuTimeSum, timeExec) => waitCpuTimeSum / timeExec,\n);\n\nexport const getGpuDevices = createSelector(getJob, (job: PreparedJob) =>\n ypath.getNumberDeprecated(job, '/exec_attributes/gpu_devices/length'),\n);\nexport const getAverageGpuUtilization = createSelector(\n [getGpuUtilizationSum, getTimeExec],\n (gpuUtilizationSum, timeExec) => gpuUtilizationSum / timeExec,\n);\nexport const getAverageGpuPower = createSelector(\n [getGpuPowerSum, getTimeExec],\n (gpuPowerSum, timeExec) => gpuPowerSum / timeExec,\n);\nexport const getAverageGpuMemory = createSelector(\n [getGpuMemorySum, getTimeExec],\n (gpuMemorySum, timeExec) => gpuMemorySum / timeExec,\n);\n\nexport const getJobPivotKeysData = createSelector([getJobSpecification], (specification) => {\n const inputTableSpecs = ypath.getValue(specification, '/input_table_specs');\n\n return flatten_(\n map_(inputTableSpecs, (tableSpec) => {\n const chunkSpecs = ypath.getValue(tableSpec, '/chunk_specs');\n\n return map_(chunkSpecs, (chunkSpec) => {\n const id = ypath.getValue(chunkSpec, '/chunk_id');\n\n const fromKey = map_(ypath.getValue(chunkSpec, '/lower_limit/key'), (key) =>\n ypath.getValue(key),\n );\n const fromIndex = [ypath.getValue(chunkSpec, '/lower_limit/row_index')];\n const from = !fromKey || fromKey.length === 0 ? fromIndex : fromKey;\n\n const toKey = map_(ypath.getValue(chunkSpec, '/upper_limit/key'), (key) =>\n ypath.getValue(key),\n );\n const toIndex = [ypath.getValue(chunkSpec, '/upper_limit/row_index')];\n const to = !toKey || toKey.length === 0 ? toIndex : toKey;\n\n return {id, from, to};\n });\n }),\n );\n});\n\nexport const getJobActions = createSelector(getJob, (job: PreparedJob) => {\n const actions: JobAction[] = [];\n const state = job.state;\n\n if (state !== 'completed' && state !== 'failed' && state !== 'aborted') {\n actions.push({\n modalKey: 'abort',\n name: 'abort',\n successMessage: 'Job was successfully aborted. Please wait',\n icon: 'redo',\n message: 'Job will be immediately aborted. Are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n });\n\n actions.push({\n modalKey: 'interrupt',\n name: 'interrupt',\n successMessage: 'Job was successfully aborted. Please wait',\n icon: 'hand-paper',\n message: 'Job will be immediately interrupted. Are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n optionMessage: 'Interruption timeout',\n optionValue: 10000,\n optionType: 'input',\n options: [\n {\n data: {\n parameters: {interrupt_timeout: 10000},\n },\n value: 'timeout',\n text: 'timeout',\n },\n ],\n });\n }\n\n if (state === 'running') {\n actions.push({\n modalKey: 'abandon',\n name: 'abandon',\n successMessage: 'Job was successfully aborted. Please wait',\n icon: 'trash-bin',\n message:\n 'Job will be aborted, but considered as completed, output data of job will be lost. Do you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n });\n }\n\n return actions;\n});\n","import React, {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Yson from '../../../../components/Yson/Yson';\nimport {Checkbox, Flex, Loader} from '@gravity-ui/uikit';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\n\nimport {RootState} from '../../../../store/reducers';\nimport {\n abortAndReset,\n changeOmitInputTableSpecs,\n changeOmitNodeDirectory,\n changeOmitOutputTableSpecs,\n loadJobSpecification,\n} from '../../../../store/actions/job/specification';\n\nimport './Specification.scss';\nimport {getJobSpecificationYsonSettings} from '../../../../store/selectors/thor/unipika';\nimport {YsonDownloadButton} from '../../../../components/DownloadAttributesButton';\nimport {getJob} from '../../../../store/selectors/job/detail';\n\ninterface SpecificationProps {\n className?: string;\n jobID: string;\n}\n\nconst block = cn('job-specification');\n\nfunction Toolbar({jobID}: SpecificationProps) {\n const dispatch = useDispatch();\n\n const {omitNodeDirectory, omitInputTableSpecs, omitOutputTableSpecs} = useSelector(\n (state: RootState) => state.job.specification,\n );\n\n const handleNodeDirectoryChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(changeOmitNodeDirectory(jobID));\n blurByEvent(e);\n },\n [dispatch, jobID],\n );\n\n const handleInputTableSpecsChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(changeOmitInputTableSpecs(jobID));\n blurByEvent(e);\n },\n [dispatch, jobID],\n );\n\n const handleOutputTableSpecsChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(changeOmitOutputTableSpecs(jobID));\n blurByEvent(e);\n },\n [dispatch, jobID],\n );\n\n return (\n <div className={block('toolbar')}>\n <Checkbox\n className={block('checkbox')}\n size=\"l\"\n content=\"Omit node directory\"\n checked={omitNodeDirectory}\n onChange={handleNodeDirectoryChange}\n />\n\n <Checkbox\n className={block('checkbox')}\n size=\"l\"\n content=\"Omit input table specs\"\n checked={omitInputTableSpecs}\n onChange={handleInputTableSpecsChange}\n />\n\n <Checkbox\n className={block('checkbox')}\n size=\"l\"\n content=\"Omit output table specs\"\n checked={omitOutputTableSpecs}\n onChange={handleOutputTableSpecsChange}\n />\n </div>\n );\n}\n\nfunction blurByEvent(e: React.ChangeEvent<HTMLInputElement>) {\n (e.target as HTMLInputElement).blur();\n}\n\nexport default function Specification({className, jobID}: SpecificationProps) {\n const dispatch = useDispatch();\n\n const {loading, loaded, error, errorData, specification} = useSelector(\n (state: RootState) => state.job.specification,\n );\n const {id} = useSelector(getJob);\n\n useEffect(() => {\n dispatch(loadJobSpecification(jobID));\n\n return () => {\n dispatch(abortAndReset());\n };\n }, [dispatch, jobID]);\n\n const initialLoading = loading && !loaded;\n const settings = useSelector(getJobSpecificationYsonSettings);\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n <div className={block('content', {loading: initialLoading})}>\n {initialLoading ? (\n <Loader />\n ) : (\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <Yson\n folding={true}\n settings={settings}\n value={specification}\n extraTools={\n <Flex alignItems=\"center\" gap={2}>\n <YsonDownloadButton\n value={specification}\n settings={settings}\n name={`specification_job_${id}`}\n />\n <Toolbar jobID={jobID} />\n </Flex>\n }\n />\n </LoadDataHandler>\n )}\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import {RootState} from '../../reducers';\n\nexport const getRawStatistic = (state: RootState) => state.job.general.job.statistics;\n","import * as React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {getRawStatistic} from '../../../../store/selectors/job/statistics';\nimport {getOperationStatisticsDescription} from '../../../../store/selectors/global/supported-features';\nimport {StatisticTable, StatisticTree} from '../../../../components/StatisticTable';\nimport {isDocsAllowed} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\n\nimport './Statistics.scss';\n\nconst block = cn('yt-job-statistics');\n\nexport default function Statistics() {\n const statistic = useSelector(getRawStatistic);\n const {getStatisticInfo} = useSelector(getOperationStatisticsDescription);\n return (\n <StatisticTable\n className={block()}\n helpUrl={isDocsAllowed() ? UIFactory.docsUrls['problems:jobstatistics'] : undefined}\n statistic={statistic as unknown as StatisticTree}\n visibleColumns={['min', 'max', 'last', 'sum', 'count']}\n getStatisticInfo={getStatisticInfo}\n />\n );\n}\n","import React, {useCallback, useState} from 'react';\nimport {useHistory, useRouteMatch} from 'react-router';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {TextInput} from '@gravity-ui/uikit';\nimport Button from '../../../components/Button/Button';\nimport Icon from '../../../components/Icon/Icon';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport {KeyCode, Page} from '../../../constants/index';\nimport {RouteInfo} from '../../../pages/job/Job';\n\nimport './JobBreadcrumbs.scss';\n\nconst block = cn('job-breadcrumbs');\n\ninterface JobBreadcrumbsProps {\n id?: string;\n className?: string;\n}\n\nexport default function JobBreadcrumbs({id, className}: JobBreadcrumbsProps) {\n const match = useRouteMatch<RouteInfo>();\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const [editMode, changeEditMode] = useState(false);\n const [jobID, changeJobID] = useState(match.params.jobID);\n\n const {operationID} = match.params;\n const path = `${operationID}/${jobID}`;\n\n const handleEditClick = useCallback(() => changeEditMode(true), []);\n const handleInputChange = useCallback((val: string) => changeJobID(val), []);\n const handleInputBlur = useCallback(() => changeEditMode(false), []);\n const handleInputKeyDown = useCallback(\n (evt: React.KeyboardEvent) => {\n if (evt.keyCode === KeyCode.ENTER) {\n changeEditMode(false);\n history.push(`/${cluster}/${Page.JOB}/${path}`);\n }\n },\n [path, history, cluster],\n );\n\n const other = {\n onBlur: handleInputBlur,\n };\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n {editMode ? (\n <div className={block('input')}>\n <TextInput\n {...other}\n autoFocus\n size=\"m\"\n value={jobID}\n onUpdate={handleInputChange}\n onKeyDown={handleInputKeyDown}\n />\n </div>\n ) : (\n <div className={block('id')}>\n <span className=\"elements-ellipsis\">{id}</span>\n \n <ClipboardButton view=\"flat-secondary\" text={id} size=\"m\" />\n \n <Button view=\"flat-secondary\" size=\"m\" onClick={handleEditClick}>\n <Icon awesome=\"pencil\" />\n </Button>\n </div>\n )}\n </div>\n </ErrorBoundary>\n );\n}\n","import React, {useEffect, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport ElementsTableRaw from '../../../../components/ElementsTable/ElementsTable';\n\nimport {abortAndReset, loadJobSpecification} from '../../../../store/actions/job/specification';\nimport {getJobPivotKeysData} from '../../../../store/selectors/job/detail';\nimport {RootState} from '../../../../store/reducers';\nimport unipika from '../../../../common/thor/unipika';\n\nconst block = cn('job-pivot-keys');\nconst ElementsTable: any = ElementsTableRaw;\n\ninterface PivotKey {\n id: string;\n from: string[];\n to: string[];\n}\n\nconst getTableColumns = () => {\n return {\n items: {\n id: {\n name: 'id',\n caption: 'Chunk ID',\n align: 'left',\n },\n from: {\n name: 'from',\n align: 'left',\n },\n to: {\n name: 'to',\n align: 'left',\n },\n },\n sets: {\n default: {\n items: ['id', 'from', 'to'],\n },\n },\n mode: 'default',\n };\n};\n\nconst getTableTemplates = () => {\n const renderKey = (item: PivotKey, key: 'from' | 'to') => {\n // @ts-ignore\n const text = unipika.prettyprint(item[key], {\n break: false,\n indent: 0,\n asHTML: false,\n });\n const title = text.split(',').join(',\\n');\n\n return (\n <div className=\"unipika\">\n [\n <span title={title} className=\"uint64 elements-ellipsis\">\n {text.slice(1, -1)}\n </span>\n ]\n </div>\n );\n };\n\n return {\n from(item: PivotKey) {\n return renderKey(item, 'from');\n },\n to(item: PivotKey) {\n return renderKey(item, 'to');\n },\n };\n};\n\nexport default function PivotKeys() {\n const dispatch = useDispatch();\n\n const {job} = useSelector((state: RootState) => state.job.general);\n const {loading, loaded, error, errorData} = useSelector(\n (state: RootState) => state.job.specification,\n );\n const pivotKeysItems = useSelector(getJobPivotKeysData);\n\n useEffect(() => {\n dispatch(loadJobSpecification(job.id as string));\n\n return () => {\n dispatch(abortAndReset());\n };\n }, [dispatch, job.id]);\n\n const columns = useMemo(getTableColumns, []);\n const templates = useMemo(getTableTemplates, []);\n\n return (\n <div className={block({loading})}>\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n virtual={false}\n striped={false}\n columns={columns}\n isLoading={loading}\n templates={templates}\n items={pivotKeysItems}\n />\n </LoadDataHandler>\n </div>\n );\n}\n","import {Toaster} from '@gravity-ui/uikit';\nimport {ThunkAction} from 'redux-thunk';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {CompetitiveJobs, RawJob} from '../../../types/operations/job';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport * as JOB from '../../../constants/job';\nimport {YTError} from '../../../types';\nimport {Action} from 'redux';\n\nconst requests = new CancelHelper();\nconst toaster = new Toaster();\n\ninterface LoadJobCompetitionRequestAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_REQUEST;\n}\n\ninterface LoadJobCompetitionSuccessAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_SUCCESS;\n data: {\n competitors: RawJob[];\n };\n}\n\ninterface LoadJobCompetitionFailureAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_FAILURE;\n data: {\n error?: YTError;\n };\n}\n\nexport type LoadCompetitorsAction =\n | LoadJobCompetitionRequestAction\n | LoadJobCompetitionSuccessAction\n | LoadJobCompetitionFailureAction;\n\nexport function loadCompetitors(\n operationID: string,\n jobCompetitionID: string,\n): ThunkAction<Promise<void>, RootState, unknown, Action<string>> {\n return (dispatch) => {\n dispatch({type: JOB.LOAD_JOB_COMPETITORS_REQUEST});\n\n return yt.v3\n .listJobs({\n parameters: {\n operation_id: operationID,\n job_competition_id: jobCompetitionID,\n },\n cancellation: requests.saveCancelToken,\n })\n .then((competitors: CompetitiveJobs) => {\n dispatch({\n type: JOB.LOAD_JOB_COMPETITORS_SUCCESS,\n data: {competitors: competitors.jobs},\n });\n })\n .catch((error: YTError) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: JOB.LOAD_JOB_COMPETITORS_CANCELLED});\n } else {\n toaster.add({\n theme: 'danger',\n name: 'job competitors',\n autoHiding: 10000,\n content: error?.message || 'Oops, something went wrong',\n title: \"Failed to load job's competitors\",\n });\n\n dispatch({\n type: JOB.LOAD_JOB_COMPETITORS_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\ninterface AbortAndResetAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_CANCELLED;\n}\n\nexport function abortAndReset(): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.LOAD_JOB_COMPETITORS_CANCELLED});\n };\n}\n\nexport type CompetitorsActionType = LoadCompetitorsAction | AbortAndResetAction;\n","/* eslint-disable camelcase */\nimport React, {useCallback, useEffect, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ElementsTableRaw from '../../../../components/ElementsTable/ElementsTable';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport Statuslabel from '../../../../components/StatusLabel/StatusLabel';\nimport Link from '../../../../components/Link/Link';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {PreparedJob, RawJob} from '../../../../types/operations/job';\nimport hammer from '../../../../common/hammer';\nimport {RootState} from '../../../../store/reducers';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {loadCompetitors} from '../../../../store/actions/job/competitors';\nimport {OPERATION_JOBS_TABLE_ID} from '../../../../constants/operations/jobs';\n\nimport './Speculative.scss';\n\nconst block = cn('job-competitors');\nconst ElementsTable: any = ElementsTableRaw;\n\ninterface IdAddressProps {\n job: RawJob;\n operationId: string;\n}\n\nfunction IdAddress({job, operationId}: IdAddressProps) {\n const cluster = useSelector(getCluster);\n\n // @ts-ignore\n const [id, address, jobCompetitionId] = ypath.getValues(job, [\n '/id',\n '/address',\n '/job_competition_id',\n ]);\n const host = hammer.format['Address'](address);\n const isSpeculativeJob = jobCompetitionId && jobCompetitionId !== id;\n\n return (\n <div>\n <span className={block('id', 'elements-monospace elements-ellipsis')}>\n <ClipboardButton text={id} theme=\"flat-secondary\" size=\"s\" title=\"Copy job id\" />\n <Link routed url={`/${cluster}/job/${operationId}/${id}`} theme={'primary'}>\n {id}\n </Link>\n </span>\n <br />\n <span className={block('host', 'elements-monospace elements-ellipsis')}>\n <ClipboardButton text={host} view=\"flat-secondary\" size=\"s\" title=\"Copy host\" />\n {host}\n </span>\n {isSpeculativeJob && (\n <React.Fragment>\n <br />\n <span\n className={block(\n 'speculative-job-label',\n 'elements-monospace elements-ellipsis',\n )}\n >\n Speculative job\n </span>\n </React.Fragment>\n )}\n </div>\n );\n}\n\nconst getTableColumns = () => {\n return {\n items: {\n id_address: {\n name: 'id_address',\n align: 'left',\n caption: 'Id / Address',\n sort: false,\n },\n state: {\n name: 'type',\n align: 'right',\n sort: true,\n },\n type: {\n name: 'type',\n align: 'right',\n sort: true,\n },\n },\n sets: {\n default: {\n items: ['id_address', 'type', 'state'],\n },\n },\n mode: 'default',\n };\n};\n\ninterface SpeculativeJobsTemplates {\n id_address: (el: RawJob) => JSX.Element;\n state: (el: RawJob) => JSX.Element;\n}\n\nconst getTableTemplates = (operationId: string): SpeculativeJobsTemplates => {\n return {\n id_address(item: RawJob) {\n return <IdAddress job={item} operationId={operationId} />;\n },\n state(item: RawJob) {\n return <Statuslabel label={item.state} />;\n },\n };\n};\n\nexport default function Competitors() {\n const dispatch = useDispatch();\n const computeKey = useCallback((item: PreparedJob) => item.id, []);\n const {job} = useSelector((state: RootState) => state.job.general);\n const {loading, loaded, error, errorData, competitors} = useSelector(\n (state: RootState) => state.job.competitors,\n );\n\n const {jobCompetitionId, operationId} = job;\n if (!jobCompetitionId || !operationId) {\n throw new Error('Unexpected behavior: jobCompetitionId or operationId is not defined');\n }\n\n const columns = useMemo(getTableColumns, []);\n const templates = useMemo(() => getTableTemplates(operationId), [operationId]);\n\n useEffect(() => {\n dispatch(loadCompetitors(operationId, jobCompetitionId));\n }, [dispatch, operationId, jobCompetitionId]);\n\n return (\n <ErrorBoundary>\n <div className={block({loading})}>\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n virtual={false}\n striped={false}\n columns={columns}\n isLoading={loading}\n items={competitors}\n templates={templates}\n computeKey={computeKey}\n tableId={OPERATION_JOBS_TABLE_ID}\n />\n </LoadDataHandler>\n </div>\n </ErrorBoundary>\n );\n}\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {createSelector} from 'reselect';\nimport cn from 'bem-cn-lite';\n\nimport compact_ from 'lodash/compact';\nimport isFinite_ from 'lodash/isFinite';\n\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport ElementsTableRaw from '../../../../components/ElementsTable/ElementsTable';\n\nimport hammer from '../../../../common/hammer';\nimport {StatisticsIO as IStatisticsIO} from '../../../../types/operations/job';\nimport {\n getAverageGpuMemory,\n getAverageGpuPower,\n getAverageGpuUtilization,\n getAverageUserCpuTime,\n getAverageWaitCpuTime,\n getGpuDevices,\n getJobStatisticsIO,\n getTotalTimeIO,\n} from '../../../../store/selectors/job/detail';\n\nimport './StatisticsIO.scss';\n\nconst block = cn('job-statistics-io');\nconst headingBlock = cn('elements-heading');\nconst ElementsTable: any = ElementsTableRaw;\n\nconst getTableColumns = () => {\n return {\n items: {\n table: {\n caption: 'Table',\n align: 'left',\n },\n busy_time: {\n caption: 'Busy time',\n align: 'right',\n },\n bytes: {\n caption: 'Bytes',\n align: 'right',\n },\n idle_time: {\n caption: 'Idle time',\n align: 'right',\n },\n },\n sets: {\n default: {\n items: ['table', 'busy_time', 'bytes', 'idle_time'],\n },\n },\n mode: 'default',\n };\n};\n\nconst getTableTemplates = () => {\n const prepareStatistic = (item: Record<string, any>, key: string): string => {\n return hammer.format[key === 'bytes' ? 'Bytes' : 'TimeDuration'](item[key]);\n };\n\n return {\n busy_time(item: IStatisticsIO) {\n return prepareStatistic(item, 'busy_time');\n },\n bytes(item: IStatisticsIO) {\n return prepareStatistic(item, 'bytes');\n },\n idle_time(item: IStatisticsIO) {\n return prepareStatistic(item, 'idle_time');\n },\n };\n};\n\nconst selectItems = createSelector(\n [\n getTotalTimeIO,\n getAverageUserCpuTime,\n getAverageWaitCpuTime,\n getGpuDevices,\n getAverageGpuUtilization,\n getAverageGpuPower,\n getAverageGpuMemory,\n ],\n (\n {read, write},\n averageUserCpuTime,\n averageWaitCpuTime,\n gpuDevices,\n averageGpuUtilization,\n averageGpuPower,\n averageGpuMemory,\n ) =>\n compact_([\n {key: 'total time waiting to read data', value: hammer.format['TimeDuration'](read)},\n {key: 'total time waiting to write data', value: hammer.format['TimeDuration'](write)},\n isFinite_(averageUserCpuTime) && {\n key: 'average user cpu time per second',\n value: hammer.format['Number'](averageUserCpuTime, {digits: 3}),\n },\n isFinite_(averageWaitCpuTime) && {\n key: 'average wait cpu time per second',\n value: hammer.format['Number'](averageWaitCpuTime, {digits: 3}),\n },\n {key: 'gpu devices', value: hammer.format['Number'](gpuDevices)},\n isFinite_(averageGpuUtilization) && {\n key: 'average gpu utilization',\n value: hammer.format['Percent'](averageGpuUtilization * 100),\n },\n isFinite_(averageGpuPower) && {\n key: 'average gpu power',\n value: hammer.format['Number'](averageGpuPower, {digits: 3}),\n },\n isFinite_(averageGpuMemory) && {\n key: 'average gpu memory usage',\n value: hammer.format['Bytes'](averageGpuMemory),\n },\n ]),\n);\n\nexport default function StatisticsIO() {\n const {input, output} = useSelector(getJobStatisticsIO);\n const items = useSelector(selectItems);\n\n const columns = useMemo(getTableColumns, []);\n const templates = useMemo(() => getTableTemplates(), []);\n\n return (\n <div className={block()}>\n <MetaTable className={block('meta')} items={items} />\n\n <div className={headingBlock({size: 'm'}, block('heading'))}>Input</div>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n items={input}\n virtual={false}\n striped={false}\n columns={columns}\n templates={templates}\n />\n\n {output.length > 0 && (\n <React.Fragment>\n <div className={headingBlock({size: 'm'}, block('heading'))}>Output</div>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n items={output}\n virtual={false}\n striped={false}\n columns={columns}\n templates={templates}\n rowClassName={({isTotal}: {isTotal?: boolean}) => {\n return isTotal ? block('row-total') : undefined;\n }}\n />\n </React.Fragment>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport includes_ from 'lodash/includes';\n\nimport Error from '../../../../components/Error/Error';\nimport PivotKeys from '../PivotKeys/PivotKeys';\nimport Speculative from '../Speculative/Speculative';\nimport StatisticsIO from '../StatisticsIO/StatisticsIO';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport Events from '../../../../pages/operations/OperationDetail/tabs/details/Events/Events';\nimport CollapsibleSection from '../../../../components/CollapsibleSection/CollapsibleSection';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {RootState} from '../../../../store/reducers';\nimport {useSelector} from 'react-redux';\nimport {JobError, JobEvents, JobStatistic} from '../../../../types/operations/job';\n\nimport './Details.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\n\nconst block = cn('job-details');\n\nfunction renderEvents(events: JobEvents, collapsibleSize: 'm' | 'ss') {\n return events ? (\n <CollapsibleSection name=\"Events\" className={block('events')} size={collapsibleSize}>\n <Events events={events} type=\"phase\" />\n </CollapsibleSection>\n ) : null;\n}\n\nfunction renderError(error: JobError) {\n return error ? (\n <div className={block('result')}>\n <Error error={error} />\n </div>\n ) : null;\n}\n\nfunction renderCompetitors(hasCompetitors: boolean, collapsibleSize: 'm' | 'ss') {\n return hasCompetitors ? (\n <CollapsibleSection\n collapsed\n name=\"Competitive jobs\"\n className={block('speculative-jobs')}\n size={collapsibleSize}\n >\n <Speculative />\n </CollapsibleSection>\n ) : null;\n}\n\nfunction renderStatistics(statistics: JobStatistic, collapsibleSize: 'm' | 'ss') {\n // @ts-ignore\n const hasPipes = ypath.getValue(statistics, '/user_job/pipes');\n\n return hasPipes ? (\n <CollapsibleSection\n name=\"Statistics\"\n className={block('statistics')}\n size={collapsibleSize}\n >\n <StatisticsIO />\n </CollapsibleSection>\n ) : null;\n}\n\nfunction renderPivotKeys(type: string | undefined, collapsibleSize: 'm' | 'ss') {\n const correctTypes = ['reduce', 'join_reduce', 'sorted_merge'];\n\n return includes_(correctTypes, type) ? (\n <CollapsibleSection\n collapsed\n name=\"Pivot keys\"\n className={block('pivot-keys')}\n size={collapsibleSize}\n >\n <PivotKeys />\n </CollapsibleSection>\n ) : null;\n}\n\nexport default function Details() {\n const {details, job} = useSelector((state: RootState) => state.job.general);\n const {events} = details;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n {events?.length! > 0 && (\n <div className={block('section')}>\n {renderEvents(details.events, UI_COLLAPSIBLE_SIZE)}\n </div>\n )}\n\n <div className={block('section')}>\n {renderError(job.error)}\n {renderStatistics(job.statistics as JobStatistic, UI_COLLAPSIBLE_SIZE)}\n {renderPivotKeys(job.type, UI_COLLAPSIBLE_SIZE)}\n {renderCompetitors(Boolean(job.hasCompetitors), UI_COLLAPSIBLE_SIZE)}\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import * as JOB from '../../../constants/job';\nimport CancelHelper from '../../../utils/cancel-helper';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {RawJob} from '../../../types/operations/job';\nimport {RootState} from '../../../store/reducers';\nimport {ThunkAction} from 'redux-thunk';\nimport {YTError} from '../../../types';\nimport {Action} from 'redux';\n\nconst requests = new CancelHelper();\n\ninterface LoadJobDataRequestAction {\n type: typeof JOB.LOAD_JOB_DATA_REQUEST;\n}\n\ninterface LoadJobDataSuccessAction {\n type: typeof JOB.LOAD_JOB_DATA_SUCCESS;\n data: {\n job: RawJob;\n clusterConfig: {id: string; proxy: string; externalProxy?: string};\n };\n}\n\ninterface LoadJobDataFailureAction {\n type: typeof JOB.LOAD_JOB_DATA_FAILURE;\n data: {\n error: YTError;\n };\n}\n\ntype LoadJobDataAction =\n | LoadJobDataRequestAction\n | LoadJobDataSuccessAction\n | LoadJobDataFailureAction;\n\nexport function loadJobData(\n operationID: string,\n jobID: string,\n): ThunkAction<Promise<void>, RootState, unknown, GeneralActionType> {\n return (dispatch, getState) => {\n dispatch({type: JOB.LOAD_JOB_DATA_REQUEST});\n\n const clusterConfig = getCurrentClusterConfig(getState());\n\n return yt.v3\n .getJob({\n parameters: {\n operation_id: operationID,\n job_id: jobID,\n },\n cancellation: requests.saveCancelToken,\n })\n .then((job: RawJob) => {\n dispatch({\n type: JOB.LOAD_JOB_DATA_SUCCESS,\n data: {job, clusterConfig},\n });\n })\n .catch((error: YTError) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: JOB.LOAD_JOB_DATA_CANCELLED});\n } else {\n dispatch({\n type: JOB.LOAD_JOB_DATA_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\ninterface AbortAndResetAction {\n type: typeof JOB.LOAD_JOB_DATA_CANCELLED;\n}\n\nexport function abortAndReset(): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.LOAD_JOB_DATA_CANCELLED});\n };\n}\n\nexport type GeneralActionType = LoadJobDataAction | AbortAndResetAction;\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport copy from 'copy-to-clipboard';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {ButtonProps, Dialog, DropdownMenu, Toaster} from '@gravity-ui/uikit';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport PathEditor from '../../../containers/PathEditor/PathEditor';\nimport Button from '../../../components/Button/Button';\nimport Link from '../../../components/Link/Link';\nimport Icon, {IconName} from '../../../components/Icon/Icon';\n\nimport {getJob, getJobActions} from '../../../store/selectors/job/detail';\nimport {loadJobData} from '../../../store/actions/job/general';\nimport {promptAction} from '../../../store/actions/actions';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\nimport {PreparedJob} from '../../../types/operations/job';\nimport {showErrorPopup} from '../../../utils/utils';\nimport hammer from '../../../common/hammer';\nimport {YTError} from '../../../types';\n\nimport './JobActions.scss';\n\ntype ActionName = 'interrupt' | 'abort' | 'abandon';\n\ninterface OptionAction {\n value: string;\n text: string;\n data: Record<string, any>;\n}\n\nexport interface Action {\n icon: IconName;\n modalKey: string;\n name: ActionName;\n successMessage: string;\n confirmationText?: string;\n theme?: ButtonProps['view'];\n message?: string | JSX.Element;\n\n optionMessage?: string;\n optionValue?: string | number;\n optionType?: string;\n options?: OptionAction[];\n}\n\ninterface IntermediateAction extends Action {\n message: string | JSX.Element;\n handler: ({currentOption}: Record<string, any>) => void;\n}\n\nconst toaster = new Toaster();\nconst block = cn('job-actions');\nconst codeBlock = cn('elements-code');\n\nconst getAdditionalActions = (\n job: PreparedJob,\n openJobShellModal: () => void,\n openDumpContextModal: () => void,\n) => {\n const infoActions = [\n {\n action: () => {\n window.open(job.prepareCommandURL('get_job_input'));\n },\n text: 'get_job_input',\n },\n {\n action: () => {\n window.open(job.prepareCommandURL('get_job_stderr'));\n },\n text: 'get_job_stderr',\n },\n ];\n\n if (job.state === 'failed') {\n infoActions.push({\n action: () => {\n window.open(job.prepareCommandURL('get_job_fail_context'));\n },\n text: 'get_job_fail_context',\n });\n } else {\n infoActions.push({\n action: openDumpContextModal,\n text: 'dump_job_context',\n });\n }\n\n const jobShallAction = [\n {\n action: openJobShellModal,\n text: 'job shell',\n },\n ];\n\n return [infoActions, jobShallAction];\n};\n\ninterface PerformAction {\n currentOption?: number;\n name: ActionName;\n id: string;\n}\n\ninterface YTParameters {\n job_id: string;\n interrupt_timeout?: number;\n path?: string;\n}\n\nconst getActionAction = (name: ActionName) => {\n const mapper = {\n interrupt: yt.v4.abortJob,\n abort: yt.v4.abortJob,\n abandon: yt.v4.abandonJob,\n };\n\n return mapper[name];\n};\n\nconst performAction = ({currentOption, name, id}: PerformAction) => {\n const actionAction = getActionAction(name);\n let parameters: YTParameters = {job_id: id};\n if (currentOption) {\n parameters = {\n ...parameters,\n interrupt_timeout: currentOption,\n };\n }\n\n return actionAction(parameters);\n};\n\nconst dumpJobContext = (id: string, path: string, cluster: string) => {\n const parameters: YTParameters = {job_id: id, path};\n\n return yt.v3\n .dumpJobContext(parameters)\n .then(() => {\n toaster.add({\n theme: 'success',\n autoHiding: false,\n name: 'dump job context',\n title: 'Job context has been dumped.',\n content: <Link url={`/${cluster}/navigation?path=${path}`}>{path}</Link>,\n });\n })\n .catch((err: YTError) => {\n toaster.add({\n theme: 'danger',\n autoHiding: false,\n name: 'dump job context',\n title: 'Could not dump job context.',\n content: err?.message || 'Oops, something went wrong',\n actions: [{label: ' view', onClick: () => showErrorPopup(err)}],\n });\n });\n};\n\nfunction ActionBlock(action: Action) {\n const dispatch = useDispatch();\n\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the job?\n </span>\n );\n const {job} = useSelector((state: RootState) => state.job.general);\n const {id, operationId} = job as PreparedJob;\n\n const update = useCallback(() => {\n const reset = () => dispatch(loadJobData(operationId, id));\n setTimeout(reset, 5000);\n }, [dispatch, operationId, id]);\n const intermediateAction = useCallback(\n (data: IntermediateAction) => dispatch(promptAction(data)),\n [dispatch],\n );\n const handler = useCallback(\n ({currentOption}: Record<string, number>) => {\n const data = {...action, currentOption, id};\n return performAction(data).then(update);\n },\n [id, action, update],\n );\n const onClick = useCallback(\n () => dispatch(intermediateAction({...action, message, handler})),\n [dispatch, intermediateAction, action, message, handler],\n );\n\n return (\n <Button\n size=\"m\"\n key={action.name}\n onClick={onClick}\n view={action.theme || 'outlined'}\n className={block('action')}\n title={hammer.format['ReadableField'](action.name)}\n >\n <Icon awesome={action.icon} />\n \n {hammer.format['ReadableField'](action.name)}\n </Button>\n );\n}\n\nexport default function JobActions({className}: {className?: string}) {\n const job = useSelector(getJob);\n const {loaded} = useSelector((state: RootState) => state.job.general);\n const cluster = useSelector(getCluster);\n const jobId = (job as PreparedJob).id;\n\n const jobShellCommand = `yt run-job-shell ${jobId}`;\n const [jobShellVisible, setJobShellVisible] = useState(false);\n const openJobShellModal = useCallback(() => setJobShellVisible(true), [setJobShellVisible]);\n const closeJobShellModal = useCallback(() => setJobShellVisible(false), [setJobShellVisible]);\n const onCopyClick = useCallback(() => {\n copy(jobShellCommand);\n closeJobShellModal();\n }, [jobShellCommand, closeJobShellModal]);\n\n const defaultPath = '//home';\n const [dumpContextPath, setDumpContextPath] = useState(defaultPath);\n const [dumpContextVisible, setDumpContextVisible] = useState(false);\n const onPathEditorChange = useCallback(\n (path: string) => setDumpContextPath(path),\n [setDumpContextPath],\n );\n const openDumpContextModal = useCallback(\n () => setDumpContextVisible(true),\n [setDumpContextVisible],\n );\n const closeDumpContextModal = useCallback(\n () => setDumpContextVisible(false),\n [setDumpContextVisible],\n );\n const onDumpContextConfirm = useCallback(() => {\n dumpJobContext(jobId, dumpContextPath, cluster);\n closeDumpContextModal();\n }, [jobId, dumpContextPath, cluster, closeDumpContextModal]);\n\n const actions = useSelector(getJobActions);\n const additionalActions = useMemo(\n () => getAdditionalActions(job, openJobShellModal, openDumpContextModal),\n [job, openJobShellModal, openDumpContextModal],\n );\n\n if (!loaded) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n {map_(actions, (action: Action, index) => (\n <ActionBlock key={index} {...action} />\n ))}\n <DropdownMenu items={additionalActions} />\n\n <Dialog size=\"m\" open={jobShellVisible} onClose={closeJobShellModal}>\n <Dialog.Header caption=\"Job shell\" />\n <Dialog.Body>\n <div className={block('code')}>\n <div className={codeBlock({theme: 'default'})}>{jobShellCommand}</div>\n </div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonCancel={closeJobShellModal}\n onClickButtonApply={onCopyClick}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Copy\"\n showError={false}\n preset=\"success\"\n listenKeyEnter\n />\n </Dialog>\n\n <Dialog size=\"m\" open={dumpContextVisible} onClose={closeDumpContextModal}>\n <Dialog.Header caption=\"Dump job context\" />\n <Dialog.Body>\n <div className={block('dump-context')}>\n <PathEditor\n hasClear\n defaultPath={defaultPath}\n onChange={onPathEditorChange}\n />\n </div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonCancel={closeDumpContextModal}\n onClickButtonApply={onDumpContextConfirm}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Confirm\"\n showError={false}\n preset=\"success\"\n listenKeyEnter\n />\n </Dialog>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useSelector} from 'react-redux';\nimport {Redirect, Route, Switch, useRouteMatch} from 'react-router';\n\nimport {Link} from '@gravity-ui/uikit';\n\nimport Specification from '../../../pages/job/tabs/Specification/Specification';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport MetaTable, {Template} from '../../../components/MetaTable/MetaTable';\nimport Statistics from '../../../pages/job/tabs/Statistics/Statistics';\nimport JobBreadcrumbs from '../JobBreadcrumbs/JobBreadcrumbs';\nimport Statuslabel from '../../../components/StatusLabel/StatusLabel';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport Details from '../../../pages/job/tabs/Details/Details';\nimport JobActions from '../JobActions/JobActions';\nimport Label from '../../../components/Label/Label';\nimport Yson from '../../../components/Yson/Yson';\nimport Tabs from '../../../components/Tabs/Tabs';\n\nimport {getJobGeneralYsonSettings} from '../../../store/selectors/thor/unipika';\nimport {DEFAULT_TAB, Tab} from '../../../constants/job';\nimport {RootState} from '../../../store/reducers';\nimport {Page} from '../../../constants/index';\nimport {makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\nimport hammer from '../../../common/hammer';\nimport {RouteInfo} from '../Job';\n\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport {getJob} from '../../../store/selectors/job/detail';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\nimport {StaleJobIcon} from '../../../pages/operations/OperationDetail/tabs/Jobs/StaleJobIcon';\n\nimport './JobGeneral.scss';\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {YsonDownloadButton} from '../../../components/DownloadAttributesButton';\n\nconst block = cn('job-general');\n\nexport default function JobGeneral() {\n const cluster = useSelector(getCluster);\n const match = useRouteMatch<RouteInfo>();\n const settings = useSelector(getJobGeneralYsonSettings);\n const job = useSelector(getJob);\n const {loaded} = useSelector((state: RootState) => state.job.general);\n\n const {url: traceUrl, title: traceTitle} = useJobProfilingUrl({\n operationId: job?.operationId,\n jobId: job?.id,\n has_trace: job?.archive_features?.has_trace,\n pool_tree: job?.pool_tree,\n cluster,\n });\n\n if (!loaded) {\n return null;\n }\n\n const {url, params} = match;\n const {operationID, jobID} = params;\n const {\n operationId,\n attributes,\n finishTime,\n startTime,\n duration,\n address,\n state,\n type,\n id,\n jobCompetitionId,\n monitoring_descriptor,\n pool_tree,\n is_stale,\n } = job;\n const operationUrl = `/${cluster}/${Page.OPERATIONS}/${operationID}/jobs?jobId=${jobID}`;\n const path = `/${cluster}/${Page.JOB}/${operationID}/${jobID}`;\n const tabsProps = makeTabProps(path, Tab);\n\n const isSpeculativeJob = jobCompetitionId && jobCompetitionId !== id;\n\n const jobShellCommand = `yt --proxy ${cluster} run-job-shell ${id}`;\n\n return (\n <ErrorBoundary>\n <div className={block(null, 'elements-section')}>\n <div className={block('header')}>\n <span className={block('heading')}>\n {hammer.format['ReadableField'](type)} job\n </span>\n\n <Statuslabel label={state} renderPlaque />\n\n <JobActions className={block('actions')} />\n </div>\n\n {isSpeculativeJob && (\n <Label\n className={block('speculative-label')}\n text=\"Speculative job\"\n theme=\"warning\"\n type=\"text\"\n />\n )}\n\n <MetaTable\n className={block('meta')}\n items={[\n [\n {\n key: 'operation id',\n value: (\n <Template.Link\n url={operationUrl}\n text={operationId}\n withClipboard\n />\n ),\n },\n {\n key: 'job id',\n value: (\n <JobBreadcrumbs id={id} className={block('meta-breadcrumbs')} />\n ),\n },\n {\n key: 'host',\n value: (\n <span className={block('meta-host')}>\n <Template.Id id={address?.split(':')[0]} />\n <ChartLink\n url={UIFactory.makeUrlForNodeIO(cluster, address)}\n />\n </span>\n ),\n },\n {\n key: 'type',\n value: <Template.Value value={type} />,\n },\n {\n key: 'Monitoring descriptor',\n value: (\n <span className={block('meta-host')}>\n <Template.Id id={monitoring_descriptor} />\n <ChartLink\n url={UIFactory.makeUrlForMonitoringDescriptor(\n cluster,\n {\n from: startTime,\n to: finishTime,\n },\n monitoring_descriptor,\n )}\n />\n </span>\n ),\n visible: Boolean(monitoring_descriptor),\n },\n {\n key: 'Pool tree',\n value: pool_tree,\n visible: Boolean(pool_tree),\n },\n ],\n [\n {\n key: 'started',\n value: <Template.Time time={startTime} valueFormat=\"DateTime\" />,\n },\n {\n key: 'finished',\n value: <Template.Time time={finishTime} valueFormat=\"DateTime\" />,\n },\n {\n key: 'duration',\n value: <Template.Time time={duration} valueFormat=\"TimeDuration\" />,\n },\n {\n key: 'Stale',\n value: (\n <>\n {Boolean('is_stale').toString() + ' '}\n <StaleJobIcon />\n </>\n ),\n visible: is_stale,\n },\n ],\n [\n {\n key: 'job_input',\n value: (\n <ClickableText\n onClick={() =>\n window.open(job.prepareCommandURL('get_job_input'))\n }\n >\n get_job_input\n </ClickableText>\n ),\n },\n {\n key: 'job_error',\n value: (\n <ClickableText\n onClick={() =>\n window.open(job.prepareCommandURL('get_job_stderr'))\n }\n >\n get_job_stderr\n </ClickableText>\n ),\n },\n ...(job?.state !== 'failed'\n ? []\n : [\n {\n key: 'fail_context',\n value: (\n <ClickableText\n onClick={() =>\n window.open(\n job.prepareCommandURL(\n 'get_job_fail_context',\n ),\n )\n }\n >\n get_job_fail_context\n </ClickableText>\n ),\n },\n ]),\n ...(job?.finishTime\n ? []\n : [\n {\n key: 'Job ssh',\n value: (\n <span className={block('meta-ssh')}>\n <span\n className={block('meta-ssh-cmd')}\n title={jobShellCommand}\n >\n {jobShellCommand}\n </span>\n <ClipboardButton\n view={'flat-secondary'}\n text={jobShellCommand}\n size={'s'}\n />\n </span>\n ),\n },\n ]),\n {\n key: 'Job trace',\n value: (\n <Link target=\"_blank\" href={traceUrl!}>\n {traceTitle}\n </Link>\n ),\n visible: Boolean(traceUrl),\n },\n ],\n ]}\n />\n\n <div className={block('tabs')}>\n <Tabs {...tabsProps} active={DEFAULT_TAB} routed size={UI_TAB_SIZE} />\n </div>\n\n <Switch>\n <Route path={`${path}/${Tab.ATTRIBUTES}`}>\n <Yson\n className={block('attributes')}\n value={attributes}\n settings={settings}\n folding\n extraTools={\n <YsonDownloadButton\n value={attributes}\n settings={settings}\n name={`attributes_job_${id}`}\n />\n }\n />\n </Route>\n <Route path={`${path}/${Tab.DETAILS}`}>\n <Details />\n </Route>\n <Route path={`${path}/${Tab.STATISTICS}`}>\n <Statistics />\n </Route>\n <Route path={`${path}/${Tab.SPECIFICATION}`}>\n <Specification className={block('specification')} jobID={jobID} />\n </Route>\n <Route path={`${path}/:tab`}>\n <Placeholder />\n </Route>\n <Redirect from={url} to={`${path}/${DEFAULT_TAB}`} />\n </Switch>\n </div>\n </ErrorBoundary>\n );\n}\n\nfunction useJobProfilingUrl({\n operationId,\n jobId,\n pool_tree,\n has_trace,\n cluster,\n}: {\n operationId?: string;\n jobId?: string;\n cluster: string;\n has_trace?: boolean;\n pool_tree?: string;\n}) {\n const {job_trace_url_template: {url_template, title = 'Open trace', enforce_for_trees} = {}} =\n useSelector(getClusterUiConfig);\n return React.useMemo(() => {\n const allowTrace = has_trace || 0 <= enforce_for_trees?.indexOf(pool_tree!)!;\n\n if (!allowTrace || !cluster || !operationId || !jobId || !url_template) {\n return {};\n }\n return {\n url: formatByParams(url_template, {\n operationId,\n jobId,\n cluster,\n }),\n title,\n };\n }, [cluster, operationId, jobId, url_template, title, enforce_for_trees, pool_tree, has_trace]);\n}\n","import {useDispatch, useSelector} from 'react-redux';\nimport {useRouteMatch} from 'react-router';\nimport React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../components/LoadDataHandler/LoadDataHandler';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport JobGeneral from '../../../pages/job/JobGeneral/JobGeneral';\nimport {Loader} from '@gravity-ui/uikit';\n\nimport {abortAndReset, loadJobData} from '../../../store/actions/job/general';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {RootState} from '../../../store/reducers';\nimport {RouteInfo} from '../../../pages/job/Job';\n\nimport './JobDetails.scss';\n\nconst block = cn('job-detail');\n\nexport default function JobDetails() {\n const match = useRouteMatch<RouteInfo>();\n const dispatch = useDispatch();\n\n const {operationID, jobID} = match.params;\n const {loading, loaded, error, errorData} = useSelector(\n (state: RootState) => state.job.general,\n );\n const initialLoading = loading && !loaded;\n\n const {updateFn, destructFn} = React.useMemo(() => {\n return {\n updateFn: () => dispatch(loadJobData(operationID, jobID)),\n destructFn: () => dispatch(abortAndReset()),\n };\n }, [dispatch, operationID, jobID]);\n\n useUpdater(updateFn, {destructFn});\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <div className={block('content', {loading: initialLoading})}>\n {initialLoading ? (\n <Loader />\n ) : (\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <JobGeneral />\n </LoadDataHandler>\n )}\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport {Route, Switch, useRouteMatch} from 'react-router';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\nimport JobDetails from '../../pages/job/JobDetails/JobDetails';\n\nexport interface RouteInfo {\n operationID: string;\n jobID: string;\n}\n\nexport default function Job() {\n const match = useRouteMatch<RouteInfo>();\n\n return (\n <div className=\"elements-main-section\">\n <ErrorBoundary>\n <Switch>\n <Route path={`${match.path}/:operationID/:jobID`}>\n <JobDetails />\n </Route>\n </Switch>\n </ErrorBoundary>\n </div>\n );\n}\n","import React from 'react';\n\nimport WarningIcon from '../../../../../components/WarningIcon/WarningIcon';\n\nexport function StaleJobIcon({className}: {className?: string}) {\n return (\n <WarningIcon\n className={className}\n hoverContent={'The job is stale, the information may be obsolete'}\n />\n );\n}\n","import {prepareTableColumns} from '../../../../../utils/index';\nimport hammer from '../../../../../common/hammer';\n\nexport const columns = {\n state: {\n align: 'left',\n get(event) {\n return event.state;\n },\n },\n phase: {\n align: 'left',\n caption: 'State : Phase',\n get(event) {\n if (event.state === 'total') {\n return 'Total';\n }\n\n const formatter = hammer.format['Readable'];\n const state = formatter(event.state);\n const phase = formatter(event.phase || hammer.format.NO_VALUE);\n\n return `${state} : ${phase}`;\n },\n },\n progress: {\n align: 'center',\n caption: '',\n get(event) {\n const progressValue = event.progress && event.progress.duration;\n\n return {\n value: progressValue,\n theme:\n {\n initializing: 'grass',\n preparing: 'mint',\n pending: 'aqua',\n materializing: 'bluejeans',\n running: 'lavander',\n completing: 'grapefruit',\n reviving: 'bittersweet',\n reviving_jobs: 'sunflower',\n failed: 'grapefruit',\n }[event.state] || 'mediumgray',\n };\n },\n },\n duration: {\n align: 'right',\n get(event) {\n return event.duration;\n },\n },\n start_time: {\n align: 'left',\n get(event) {\n return event.time;\n },\n },\n actions: {\n align: 'center',\n caption: '',\n },\n};\n\nconst DEFAULT_MODE = 'default';\nconst WITH_ACTIONS_MODE = 'withActions';\n\nconst getEventsGeneralProps = (type) => ({\n theme: 'light',\n striped: false,\n virtual: true,\n header: false,\n size: 'm',\n computeKey(item) {\n return item.state + '/' + item.time;\n },\n columns: {\n items: prepareTableColumns(columns),\n sets: {\n [DEFAULT_MODE]: {\n items: [type, 'progress', 'duration', 'start_time'],\n },\n [WITH_ACTIONS_MODE]: {\n items: [type, 'progress', 'duration', 'start_time', 'actions'],\n },\n },\n mode: DEFAULT_MODE,\n },\n});\n\nexport function getEventsTableProps(showActions, type) {\n const eventsTableProps = getEventsGeneralProps(type);\n let res = eventsTableProps;\n if (showActions) {\n res = {...eventsTableProps};\n res.columns = {\n ...res.columns,\n mode: WITH_ACTIONS_MODE,\n };\n }\n return res;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {compose} from 'redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\n\nimport ElementsTableBase from '../../../../../../components/ElementsTable/ElementsTable';\nimport withStickyFooter from '../../../../../../components/ElementsTable/hocs/withStickyFooter';\nimport withStickyHead from '../../../../../../components/ElementsTable/hocs/withStickyHead';\nimport {Progress} from '@gravity-ui/uikit';\nimport {Template} from '../../../../../../components/MetaTable/templates/Template';\nimport {Event} from '../../../../../../utils/operations/tabs/details/events/events';\n\nimport hammer from '../../../../../../common/hammer';\nimport {\n columns,\n getEventsTableProps,\n} from '../../../../../../utils/operations/tabs/details/events/eventsTablesProps';\n\nimport './Events.scss';\n\nexport const eventsProps = PropTypes.array;\nconst block = cn('events');\n\nconst odBlock = cn('operation-detail');\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction getValue(event, columnName) {\n return columns[columnName]?.get(event);\n}\n\nexport default class Events extends React.Component {\n static propTypes = {\n events: eventsProps,\n type: PropTypes.string,\n };\n\n static defaultProps = {\n type: 'state',\n };\n\n get templates() {\n return {\n start_time(event, columnName) {\n const value = getValue(event, columnName);\n return value ? (\n <Template.Time\n time={value}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n ) : null;\n },\n finish_time(event, columnName) {\n const value = getValue(event, columnName);\n return value ? (\n <Template.Time\n time={value}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n ) : null;\n },\n duration(item, columnName) {\n if (Event.isFinalState(item)) {\n return hammer.format.NO_VALUE;\n }\n const value = getValue(item, columnName);\n return (\n <Template.Time\n time={value}\n settings={{format: 'milliseconds'}}\n valueFormat={'TimeDuration'}\n />\n );\n },\n progress(item, columnName) {\n if (Event.isNotFinalState(item) && item.state !== 'total') {\n const progress = item.progress.duration;\n const {theme, value} = getValue(item, columnName);\n\n return (\n <div className={odBlock('events-progress', {theme})}>\n <span\n className={odBlock(\n 'events-progress-percentage',\n 'elements-secondary-text',\n )}\n >\n {hammer.format['Percent'](progress)}\n </span>\n <Progress value={value} size=\"s\" />\n </div>\n );\n }\n },\n state(event, columnName) {\n const value = getValue(event, columnName);\n return <Template.Readable value={value} />;\n },\n phase(event, columnName) {\n const value = getValue(event, columnName);\n return <Template.Readable value={value} />;\n },\n actions: (event) => {\n const {attributes} = event || {};\n if (isEmpty_(attributes)) {\n return null;\n }\n return (\n <ClickableAttributesButton\n title={'Event attributes'}\n attributes={event.attributes}\n />\n );\n },\n };\n }\n\n render() {\n const {events, type} = this.props;\n const eventsItems = events.slice();\n const totalRow = eventsItems.pop();\n const {showAttributesColumn} = totalRow;\n\n return (\n <div className={block()}>\n <ElementsTable\n {...getEventsTableProps(showAttributesColumn, type)}\n items={eventsItems}\n css={block()}\n footer={totalRow}\n templates={this.templates}\n />\n </div>\n );\n }\n}\n","import {createSelector} from 'reselect';\nimport clone_ from 'lodash/clone';\n\nimport {\n getFormat,\n getShowDecoded,\n shouldCompact,\n shouldEscapeWhitespace,\n useBinaryAsHex,\n} from '../../../store/selectors/settings';\nimport {getUnipikaSettingsFromConfig} from '../../../common/thor/unipika-settings';\n\nexport interface YsonSettings {\n format: string;\n showDecoded: boolean;\n compact: boolean;\n escapeWhitespace: boolean;\n binaryAsHex: boolean;\n asHTML: boolean;\n}\n\n/**\n * !!! Do not use this selector directly, result should be copied by another selector !!!\n * unipika.format && unipika.foramtRaw mix different properties into settings-object.\n * So, to minimize side-effects each UI-component should use his-own copy of settings-object.\n */\nconst getYsonSettings = createSelector(\n [getFormat, getShowDecoded, shouldCompact, shouldEscapeWhitespace, useBinaryAsHex],\n (\n format: string,\n showDecoded: boolean,\n compact: boolean,\n escapeWhitespace: boolean,\n binaryAsHex: boolean,\n ): YsonSettings => {\n return {\n format,\n showDecoded,\n compact,\n escapeWhitespace,\n binaryAsHex,\n asHTML: true,\n ...getUnipikaSettingsFromConfig(),\n };\n },\n);\n\nexport const getJobGeneralYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getJobSpecificationYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getTableYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getOperationAttributesYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getOperationExperimentsYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getNavigationMountConfigYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getEditJsonYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getNodeUnrecognizedOptionsYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getPreviewCellYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getFlowSpecYsonSettings = createSelector([getYsonSettings], clone_);\n","import filter_ from 'lodash/filter';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\n\nimport unipika from '../../common/thor/unipika';\nimport ypath from '../../common/thor/ypath';\n\nimport CancelHelper from '../cancel-helper';\nimport {YTApiId, ytApiV3Id} from '../../rum/rum-wrap-api';\n\nexport const pathEditorRequests = new CancelHelper();\n\nfunction prepareSuggestions(initialPath, parentPath, children) {\n let suggestions = map_(children, (child) => {\n const prepared = {};\n\n prepared.parentPath = parentPath;\n prepared.childPath = '/' + unipika.decode(ypath.getValue(child));\n prepared.path = prepared.parentPath + prepared.childPath;\n prepared.type = ypath.getValue(child, '/@type');\n prepared.dynamic = ypath.getValue(child, '/@dynamic');\n prepared.targetPathBroken = ypath.getValue(child, '/@broken');\n\n return prepared;\n });\n\n suggestions = sortBy_(suggestions, 'childPath');\n\n return suggestions;\n}\n\nexport function preparePath(currentPath) {\n return ypath.YPath.create(currentPath, 'absolute').toSubpath(-2).stringify();\n}\n\nexport function loadSuggestions(path, customFilter) {\n const parentPath = preparePath(path);\n\n return ytApiV3Id\n .list(YTApiId.pathEditorLoadSuggestions, {\n parameters: {path: parentPath, attributes: ['type', 'dynamic']},\n cancellation: pathEditorRequests.saveCancelToken,\n })\n .then(ypath.getValue)\n .then((nodes) => prepareSuggestions(path, parentPath, nodes))\n .then((suggestions) => (customFilter ? customFilter(suggestions) : suggestions));\n}\n\nexport function filterByCurrentPath(currentPath, suggestions) {\n const path = currentPath.toLowerCase();\n\n return filter_(suggestions, (child) => {\n const hasPartOfPath = child.path.startsWith(path);\n const isShowCurrentChild = child.path !== path || child.type === 'map_node';\n\n return hasPartOfPath && isShowCurrentChild;\n });\n}\n\nexport function getNextSelectedIndex(suggestion, selectedIndex) {\n if (selectedIndex === -1 || selectedIndex === suggestion.length - 1) {\n return 0;\n }\n\n return selectedIndex + 1;\n}\n\nexport function getPrevSelectedIndex(suggestions, selectedIndex) {\n if (selectedIndex === -1 || selectedIndex === 0) {\n return suggestions.length - 1;\n }\n\n return selectedIndex - 1;\n}\n\nexport function getCompletedPath(suggestion) {\n return suggestion.type === 'map_node' ? suggestion.path + '/' : suggestion.path;\n}\n\nexport function getIconNameForType(type, targetPathBroken) {\n const icons = {\n document: 'file-alt',\n string_node: 'file-alt',\n int64_node: 'file-alt',\n uint64_node: 'file-alt',\n double_node: 'file-alt',\n boolean_node: 'file-alt',\n map_node: 'folder',\n scheduler_pool_tree_map: 'folder-tree',\n scheduler_pool: 'tasks',\n tablet_cell: 'th',\n journal: 'book',\n table: 'th',\n table_dynamic: 'dyn-th',\n replicated_table: 'th',\n chaos_replicated_table: 'chaos-replicated-table',\n replication_log_table: 'replication-log-table',\n file: 'file',\n topmost_transaction_map: 'folder',\n transaction_map: 'folder',\n transaction: 'code-branch',\n nested_transaction: 'code-branch',\n link: ypath.getBoolean(targetPathBroken) ? 'unlink' : 'link',\n rootstock: 'link',\n portal_entrance: 'link',\n cell_node: 'circle',\n cell_node_map: 'far circle',\n sys_node: 'cog',\n access_control_object_namespace_map: 'acl-namespace-map',\n access_control_object_namespace: 'acl-namespace',\n access_control_object: 'acl-object',\n };\n\n const icon = type ? icons[type] || 'not-suported' : 'eye-slash';\n\n return icon;\n}\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;"],"names":["AttributesButton","_ref","_ref$view","view","_ref$size","size","rest","_objectWithoutProperties","_excluded","_jsx","Button","_objectSpread","children","Icon","awesome","connect","openAttributesModal","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","onClick","pathProps","ChartLink","props","className","url","theme","hideIcon","face","wrapContent","icon","_jsxs","React","Link","target","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","collapsed","_createClass","key","value","_this$props","this","name","overview","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","margin","clickable","Component","CollapsibleSection","_React$useState","_React$useState2","_slicedToArray","setCollapsed","onChange","defaultProps","ElementsTableFooter","state","item","index","undefined","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","footer","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","_WithStickyFooter","_React$Component","WithStickyFooter","bWrapper","sticky","prepareTableClassName","renderStickyFooter","displayName","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","padded","striped","HEADER_HEIGHT","message","xmlns","fill","viewBox","fillRule","d","clipRule","cn","ExpandButton","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","data","doubleShevronRightSvg","shevronRightSvg","toaster","Toaster","LoadDataHandler","error","loaded","errorData","add","autoHiding","hammer","format","NO_VALUE","actions","label","showErrorPopup","_this$props2","_this$props2$alwaysSh","alwaysShowError","Error","ICON_BY_TYPE","_ICON_BY_TYPE","_defineProperty","SortIcon","order","allowUnordered","withUndefined","nextSortOrderValue","hidden","Tooltip","ReadableField","toolbarBlock","Toolbar","collapseTable","onTreeStateChange","expandTable","dispatch","useDispatch","handleFilterChange","useCallback","val","onFilterChange","isExpanded","treeState","Filter","debounce","helpUrl","HelpLink","mesureRowWidth","ctx","text","width","measureText","Math","max","ceil","TREE_ROOT_NAME","createMetricsEntry","prefix","prepareMetricsList","statistics","list","preparedList","leaves","forEach_","statistic","_typeof","values_","metricsChild","metricsLeaf","entry","createMetricsEntryLeaf","prepareStatisticTs","metricsList","metricsTree","treeList","prepareTree","attachTreeLeaves","leafEntry","UNIT_TO_FORMATTER","_UNIT_TO_FORMATTER","v","settings","TimeDuration","round","formatBytes","suffix","isNaN","Bytes","formatByUnit","unit","_UNIT_TO_FORMATTER2","formatFn","Number","LEVEL_OFFSET","Avg","count","sum","result","significantDigits","StatisticTableStaticCell","_ref2","_item$attributes","_item$attributes2","aggregation","isLeafNode","Boolean","StatisticName","_ref3","info","emptyInfo","description","MetaTable","visible","Secondary","ExpandedCell","_ref4","itemState","toggleItemState","_ref4$minWidth","minWidth","renderValue","offsetStyle","paddingLeft","level","toggleItemAndTreeState","empty","prepareTableProps","_ref5","visibleColumns","reduce","ret","col","sort","align","tree","sets","default","Object","keys","mode","useJobStatisticTable","_ref6","fontFamilies","filter","setFilter","_React$useState3","_React$useState4","setTreeState","currentFilter","filteredTree","filterTree","indexOf","sortedTree","sortTree","field","asc","get","flattenTree","filterStatisticTree","_step","res","font","document","createElement","getContext","createCanvasContext","regular","_iterator","_createForOfIteratorHelper","s","n","done","iconsWidth","err","e","f","getMinWidth","StatisticTable","_ref7","virtual","fixedHeader","getStatisticInfo","useSelector","getFontFamilies","_useJobStatisticTable","_","_getStatisticInfo","_item$attributes3","__default__","columnName","_getStatisticInfo2","tableProps","_toConsumableArray","headerClassName","fixed","StatusLabel","renderPlaque","mappedState","_states","materializing","initializing","preparing","pending","starting","running","completing","failing","aborting","reviving","suspended","failed","completed","aborted","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","unknown","mods","disabled","Bold","SecondaryBold","Warning","WarningLight","NoWrap","Escaped","textNode","unipika","prettyprint","UNIPIKA_ESCAPED_SETTINGS","asHTML","dangerouslySetInnerHTML","__html","WarningIcon","hoverContent","color","Text","variant","renderText","mix","elem","textProps","decode","String","prepareTextProps","printColumnAsTimeDurationWithMs","column","getColumn","printColumnAsReadableField","printColumnAsTime","ColumnAsTime","printColumnAsError","hideOopsMsg","asNumber","_templates","templateId","newTemplates","wrapRenderMethods","PathEditor","_props$defaultPath","suggestionsList","input","prevScope","hideSuggestions","setState","inputFocus","handleInputChange","inputChange","debounceLoading","handleInputFocus","onFocus","setScope","handleInputBlur","onBlur","callCallback","handleKeyDown","event","keyCode","KeyCode","ARROW_DOWN","selectNextSuggestion","ARROW_UP","selectPrevSuggestion","ENTER","handleEnterClick","ESCAPE","handleEscClick","TAB","handleTabClick","renderItem","actualSuggestions","type","dynamic","iconType","completedPath","getCompletedPath","isSelected","iconName","getIconNameForType","targetPathBroken","onMouseDown","preventDefault","debounce_","defaultPath","loadSuggestionsList","customFilter","autoFocus","getScope","_setFocus","prevProps","current","removeActiveRequests","_this$input$current","focus","offsetWidth","cb","params","_this$state2","prevIndex","getPrevSelectedIndex","_this$state3","nextIndex","getNextSelectedIndex","_this$state4","onApply","inputPath","currentTarget","suggestion","find_","_this$input$current2","onCancel","blur","_this$props3","placeholder","hasClear","TextInput","onKeyDown","onUpdate","controlRef","ReactList","itemRenderer","errorMessage","ErrorMessage","_this$props4","suggestionsError","showErrors","_this$state5","inputWidth","isVisible","renderError","renderSuggestions","Popup","onClose","anchorRef","open","offset","ref","renderInput","renderPopup","assign","suggestions","filterByCurrentPath","isEmpty_","navigation","pathEditor","getState","currentParentPath","_getState$navigation$","suggestionsPath","suggestionsLoaded","preparePath","FETCH_SUGGESTIONS","FAILURE","REQUEST","loadSuggestions","then","SUCCESS","pathEditorRequests","removeAllRequests","CANCELLED","Placeholder","tab","useRouteMatch","requests","CancelHelper","loadJobSpecification","jobID","_getState$job$specifi","job","specification","omitNodeDirectory","omitInputTableSpecs","omitOutputTableSpecs","JOB","yt","getJobSpec","parameters","job_id","omit_node_directory","omit_input_table_specs","omit_output_table_specs","cancellation","saveCancelToken","req","_ypath$getValues","ypath","getValues","_ypath$getValues2","scheduler_job_spec_ext","job_spec_ext","code","abortAndReset","prepareStatisticsIO","obj","table","mapValues_","getJob","general","getPipesIO","createSelector","getValue","getTotalTimeIO","output","read","write","sumBy_","getJobStatisticsIO","_ref2$output","total","map","outputStatistics","last","isTotal","push","getUserCpuTimeSum","getNumberDeprecated","getWaitCpuTimeSum","getGpuUtilizationSum","getGpuPowerSum","getGpuMemorySum","getTimeExec","getAverageUserCpuTime","userCpuTimeSum","timeExec","getAverageWaitCpuTime","waitCpuTimeSum","getGpuDevices","getAverageGpuUtilization","gpuUtilizationSum","getAverageGpuPower","gpuPowerSum","getAverageGpuMemory","gpuMemorySum","getJobPivotKeysData","inputTableSpecs","flatten_","map_","tableSpec","chunkSpecs","chunkSpec","id","fromKey","fromIndex","from","toKey","toIndex","to","getJobActions","modalKey","successMessage","confirmationText","PLEASE_PROCEED_TEXT","optionMessage","optionValue","optionType","options","interrupt_timeout","_useSelector","handleNodeDirectoryChange","changeOmitNodeDirectory","blurByEvent","handleInputTableSpecsChange","changeOmitInputTableSpecs","handleOutputTableSpecsChange","changeOmitOutputTableSpecs","Checkbox","checked","Specification","_useSelector2","loading","useEffect","initialLoading","getJobSpecificationYsonSettings","Loader","Yson","folding","extraTools","Flex","alignItems","gap","YsonDownloadButton","getRawStatistic","Statistics","getOperationStatisticsDescription","isDocsAllowed","UIFactory","docsUrls","JobBreadcrumbs","match","cluster","getCluster","history","useHistory","_useState","useState","_useState2","editMode","changeEditMode","_useState3","_useState4","changeJobID","operationID","handleEditClick","handleInputKeyDown","evt","Page","other","ClipboardButton","ElementsTable","ElementsTableRaw","getTableColumns","caption","getTableTemplates","renderKey","break","indent","split","join","slice","PivotKeys","pivotKeysItems","useMemo","isLoading","IdAddress","operationId","address","jobCompetitionId","host","isSpeculativeJob","routed","id_address","Statuslabel","Competitors","competitors","jobCompetitionID","listJobs","operation_id","job_competition_id","jobs","tableId","OPERATION_JOBS_TABLE_ID","headingBlock","busy_time","bytes","idle_time","prepareStatistic","selectItems","averageUserCpuTime","averageWaitCpuTime","gpuDevices","averageGpuUtilization","averageGpuPower","averageGpuMemory","compact_","isFinite_","digits","StatisticsIO","rowClassName","renderEvents","events","collapsibleSize","Events","renderCompetitors","hasCompetitors","Speculative","renderPivotKeys","includes_","Details","details","UI_COLLAPSIBLE_SIZE","loadJobData","clusterConfig","getCurrentClusterConfig","codeBlock","getAdditionalActions","openJobShellModal","openDumpContextModal","infoActions","action","window","prepareCommandURL","performAction","currentOption","actionAction","interrupt","abortJob","abort","abandon","abandonJob","getActionAction","dumpJobContext","ActionBlock","update","setTimeout","intermediateAction","promptAction","handler","JobActions","jobId","jobShellCommand","jobShellVisible","setJobShellVisible","closeJobShellModal","onCopyClick","copy","dumpContextPath","setDumpContextPath","_useState5","_useState6","dumpContextVisible","setDumpContextVisible","onPathEditorChange","closeDumpContextModal","onDumpContextConfirm","additionalActions","DropdownMenu","Dialog","Header","Body","Footer","onClickButtonCancel","onClickButtonApply","textButtonCancel","textButtonApply","showError","preset","listenKeyEnter","JobGeneral","_job$archive_features","getJobGeneralYsonSettings","_useJobProfilingUrl","pool_tree","has_trace","_useSelector2$job_tra","getClusterUiConfig","job_trace_url_template","_useSelector2$job_tra2","url_template","_useSelector2$job_tra3","enforce_for_trees","formatByParams","useJobProfilingUrl","archive_features","traceUrl","traceTitle","finishTime","startTime","duration","monitoring_descriptor","is_stale","operationUrl","OPERATIONS","tabsProps","makeTabProps","Tab","Label","Template","withClipboard","Id","makeUrlForNodeIO","Value","makeUrlForMonitoringDescriptor","Time","time","valueFormat","_Fragment","toString","StaleJobIcon","ClickableText","href","Tabs","active","DEFAULT_TAB","UI_TAB_SIZE","Switch","Route","ATTRIBUTES","DETAILS","STATISTICS","SPECIFICATION","Redirect","JobDetails","_match$params","_React$useMemo","updateFn","destructFn","useUpdater","Job","phase","formatter","progress","reviving_jobs","start_time","DEFAULT_MODE","WITH_ACTIONS_MODE","getEventsTableProps","showActions","eventsTableProps","_sets","header","prepareTableColumns","getEventsGeneralProps","PropTypes","odBlock","withStickyHead","withStickyFooter","ElementsTableBase","_columns$columnName","finish_time","Event","isFinalState","isNotFinalState","_getValue","Progress","Readable","ClickableAttributesButton","eventsItems","totalRow","pop","showAttributesColumn","getYsonSettings","getFormat","getShowDecoded","shouldCompact","shouldEscapeWhitespace","useBinaryAsHex","showDecoded","compact","escapeWhitespace","binaryAsHex","getUnipikaSettingsFromConfig","clone_","getTableYsonSettings","getOperationAttributesYsonSettings","getOperationExperimentsYsonSettings","getNavigationMountConfigYsonSettings","getEditJsonYsonSettings","getNodeUnrecognizedOptionsYsonSettings","getPreviewCellYsonSettings","getFlowSpecYsonSettings","currentPath","YPath","create","toSubpath","stringify","parentPath","ytApiV3Id","YTApiId","pathEditorLoadSuggestions","nodes","initialPath","child","prepared","childPath","sortBy_","prepareSuggestions","toLowerCase","filter_","hasPartOfPath","startsWith","isShowCurrentChild","icons","string_node","int64_node","uint64_node","double_node","boolean_node","map_node","scheduler_pool_tree_map","scheduler_pool","tablet_cell","journal","table_dynamic","replicated_table","chaos_replicated_table","replication_log_table","file","topmost_transaction_map","transaction_map","transaction","nested_transaction","link","getBoolean","rootstock","portal_entrance","cell_node","cell_node_map","sys_node","access_control_object_namespace_map","access_control_object_namespace","access_control_object","tabletCellBundleDashboardUrl","bundle","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","changelog_account","snapshot_account","sortTableBundles","bundles","columnsSortable","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","l","_ref3$nodes","r","has","multiSortWithUndefined","includes","reverse"],"sourceRoot":""}
|