@ytsaurus/ui 1.64.0 → 1.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +7 -0
  2. package/dist/public/build/assets-manifest.json +37 -37
  3. package/dist/public/build/css/{577.b41224cd.chunk.css → 577.f8556dcc.chunk.css} +2 -2
  4. package/dist/public/build/css/577.f8556dcc.chunk.css.map +1 -0
  5. package/dist/public/build/css/{cluster-menu.1242e46d.chunk.css → cluster-menu.d8cafef3.chunk.css} +2 -2
  6. package/dist/public/build/css/cluster-menu.d8cafef3.chunk.css.map +1 -0
  7. package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css +2 -0
  8. package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css.map +1 -0
  9. package/dist/public/build/css/main.fb5dcfa3.css +10 -0
  10. package/dist/public/build/css/{main.b2af1626.css.map → main.fb5dcfa3.css.map} +1 -1
  11. package/dist/public/build/js/2081.b642c3c2.chunk.js +2 -0
  12. package/dist/public/build/js/{2081.56ca6548.chunk.js.map → 2081.b642c3c2.chunk.js.map} +1 -1
  13. package/dist/public/build/js/4016.37d0a2f0.chunk.js +3 -0
  14. package/dist/public/build/js/4016.37d0a2f0.chunk.js.map +1 -0
  15. package/dist/public/build/js/{6729.91ef11dc.chunk.js → 6729.6403cc56.chunk.js} +2 -2
  16. package/dist/public/build/js/6729.6403cc56.chunk.js.map +1 -0
  17. package/dist/public/build/js/{7077.7dab612c.chunk.js → 7077.fb18710a.chunk.js} +2 -2
  18. package/dist/public/build/js/7077.fb18710a.chunk.js.map +1 -0
  19. package/dist/public/build/js/acl.19d28cd7.chunk.js +2 -0
  20. package/dist/public/build/js/acl.19d28cd7.chunk.js.map +1 -0
  21. package/dist/public/build/js/{cluster-page-wrapper.eddde18f.chunk.js → cluster-page-wrapper.697b0741.chunk.js} +2 -2
  22. package/dist/public/build/js/cluster-page-wrapper.697b0741.chunk.js.map +1 -0
  23. package/dist/public/build/js/job.bddddc9e.chunk.js +2 -0
  24. package/dist/public/build/js/job.bddddc9e.chunk.js.map +1 -0
  25. package/dist/public/build/js/main.5d8871a8.js +3 -0
  26. package/dist/public/build/js/main.5d8871a8.js.map +1 -0
  27. package/dist/public/build/js/navigation-flow.c43f2927.chunk.js +2 -0
  28. package/dist/public/build/js/navigation-flow.c43f2927.chunk.js.map +1 -0
  29. package/dist/public/build/js/navigation.e4272357.chunk.js +2 -0
  30. package/dist/public/build/js/navigation.e4272357.chunk.js.map +1 -0
  31. package/dist/public/build/js/{runtime.7752c183.js → runtime.8fed68b1.js} +2 -2
  32. package/dist/public/build/js/{runtime.7752c183.js.map → runtime.8fed68b1.js.map} +1 -1
  33. package/dist/public/build/js/system.92b7afc7.chunk.js +2 -0
  34. package/dist/public/build/js/system.92b7afc7.chunk.js.map +1 -0
  35. package/dist/public/build/manifest.json +32 -32
  36. package/dist/public/favicon-dorn-yellow.png +0 -0
  37. package/dist/public/favicon-rubber.png +0 -0
  38. package/dist/server/configs/e2e/local.js +4 -0
  39. package/package.json +2 -2
  40. package/dist/public/build/css/577.b41224cd.chunk.css.map +0 -1
  41. package/dist/public/build/css/cluster-menu.1242e46d.chunk.css.map +0 -1
  42. package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css +0 -2
  43. package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css.map +0 -1
  44. package/dist/public/build/css/main.b2af1626.css +0 -10
  45. package/dist/public/build/js/2081.56ca6548.chunk.js +0 -2
  46. package/dist/public/build/js/4016.03291f63.chunk.js +0 -3
  47. package/dist/public/build/js/4016.03291f63.chunk.js.map +0 -1
  48. package/dist/public/build/js/6729.91ef11dc.chunk.js.map +0 -1
  49. package/dist/public/build/js/7077.7dab612c.chunk.js.map +0 -1
  50. package/dist/public/build/js/acl.cd1fe761.chunk.js +0 -2
  51. package/dist/public/build/js/acl.cd1fe761.chunk.js.map +0 -1
  52. package/dist/public/build/js/cluster-page-wrapper.eddde18f.chunk.js.map +0 -1
  53. package/dist/public/build/js/job.31c91355.chunk.js +0 -2
  54. package/dist/public/build/js/job.31c91355.chunk.js.map +0 -1
  55. package/dist/public/build/js/main.693c4cb1.js +0 -3
  56. package/dist/public/build/js/main.693c4cb1.js.map +0 -1
  57. package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js +0 -2
  58. package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js.map +0 -1
  59. package/dist/public/build/js/navigation.c8c7b9cc.chunk.js +0 -2
  60. package/dist/public/build/js/navigation.c8c7b9cc.chunk.js.map +0 -1
  61. package/dist/public/build/js/system.57ed0f9d.chunk.js +0 -2
  62. package/dist/public/build/js/system.57ed0f9d.chunk.js.map +0 -1
  63. /package/dist/public/build/js/{4016.03291f63.chunk.js.LICENSE.txt → 4016.37d0a2f0.chunk.js.LICENSE.txt} +0 -0
  64. /package/dist/public/build/js/{main.693c4cb1.js.LICENSE.txt → main.5d8871a8.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/6729.6403cc56.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/ExpandIcon/ExpandIcon.js","webpack://@ytsaurus/ui/./src/ui/components/Pagination/Pagination.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/react.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ErrorBoundary/ErrorBoundary.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/getErrorMessage.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/Loader/Loader.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ChartKit.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/yagr/index.js","webpack://@ytsaurus/ui/./src/ui/components/YagrChartKit/YagrChartKit.tsx","webpack://@ytsaurus/ui/./src/ui/components/common/Datepicker/index.tsx","webpack://@ytsaurus/ui/./src/ui/containers/WaitForFont/WaitForFont.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/global-pool-trees.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/runtime.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/data-flow.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/specification/specification.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/alerts.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/selectors.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/operation.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-monitor.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/detail.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/error.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/utils.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/index.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Runtime/Runtime.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/PoolsWeightsEditModal/PoolsWeightsEditModal.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationProgress/OperationProgress.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListTable/OperationsListTable.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsTextFilter.js","webpack://@ytsaurus/ui/./src/ui/components/TimePicker/TimePicker.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsArchiveFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationSelectFilter/OperationSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListPaginator.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/operations-list.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsFilterPresets.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationSuggestFilter/OperationSuggestFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListSuggestFilters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListToolbar.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsList.js","webpack://@ytsaurus/ui/./src/ui/components/YTHistogram/YTHistogram.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/partition-sizes/PartitionSizes/PartitionSizes.tsx","webpack://@ytsaurus/ui/./src/ui/components/AlertEvents/AlertEvents.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Description.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/resources/resourcesTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DataFlow/DataFlow.js","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleTable/CollapsibleTable.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/specification/specificationTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Specification/Specification.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DetailedJobsCounter/DetailedJobsCounter.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/tasks.js","webpack://@ytsaurus/ui/./src/ui/common/hammer/field-tree.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/statistics-v2.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Tasks/Tasks.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Details/Details.js","webpack://@ytsaurus/ui/./src/ui/components/StarTrackLink/StarTrackLink.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/ExperimentAssignments/ExperimentAssignments.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/specification/Specification.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/job-sizes/JobSizes/JobSizes.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/statistics/statisticsTableProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/statistics/OperationStatisticName.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/statistics/Statistics.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/statistics.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/JobTemplate.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/OperationJobsTable.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/utils.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsPaginator.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsSuggestFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsFilterBy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsAttributesFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/OperationJobsToolbar.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsErrors/OperationJobsErrors.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/Jobs.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs-monitor.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsMonitor/JobsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/attributes/OperationAttributes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/OperationDetail.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/Operations/Operations.js","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/global/fonts.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/global/supported-features.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/chartkit-error/chartkit-error.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/mergeSettingStrategy.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/settings.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/eventEmitter.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/common.js","webpack://@ytsaurus/ui/./node_modules/fontfaceobserver/fontfaceobserver.standalone.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../../components/Icon/Icon';\n\nimport './ExpandIcon.scss';\n\nconst block = cn('expand-icon');\n\nExpandIcon.propTypes = {\n className: PropTypes.string,\n\n expanded: PropTypes.bool,\n visible: PropTypes.bool,\n onClick: PropTypes.func,\n\n data: PropTypes.any,\n};\n\nexport default function ExpandIcon({className, data, expanded, visible, onClick}) {\n const icon = expanded ? 'angle-up' : 'angle-down';\n const onClickCb = React.useCallback(() => {\n if (onClick) {\n onClick(data);\n }\n }, [data, onClick]);\n\n return (\n <span\n className={block(\n {visible: Boolean(visible), clickable: onClick !== undefined},\n className,\n )}\n onClick={onClickCb}\n >\n <Icon awesome={icon} />\n </span>\n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Pagination.scss';\nimport Button from '../Button/Button';\n\nconst paginationControlComponent = PropTypes.shape({\n handler: PropTypes.func,\n target: PropTypes.func,\n disabled: PropTypes.bool,\n hotkey: PropTypes.string,\n hotkeyScope: PropTypes.string,\n hotkeyHandler: PropTypes.func,\n}).isRequired;\n\nconst supportedSizes = ['s', 'm', 'l'];\nconst block = cn('elements-pagination');\n\nexport default class Pagination extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(supportedSizes),\n first: paginationControlComponent,\n previous: paginationControlComponent,\n next: paginationControlComponent,\n last: paginationControlComponent,\n tooltip: PropTypes.string,\n showInput: PropTypes.bool,\n inputValue: PropTypes.string,\n onChange: PropTypes.func,\n };\n static defaultProps = {\n size: 'm',\n showInput: false,\n };\n\n renderComponent(name, control) {\n const handler = control.handler;\n\n const disabled = typeof control.disabled === 'boolean' ? control.disabled : false;\n\n const {size, tooltip} = this.props;\n const hotkeySettings = [\n {\n keys: control.hotkey,\n scope: control.hotkeyScope,\n handler: control.hotkeyHandler,\n },\n ];\n\n return (\n <span title={tooltip}>\n <Button\n size={size}\n onClick={handler}\n disabled={disabled}\n className={block('control', {name})}\n title={\n {\n first: 'First page',\n previous: 'Previous page',\n next: 'Next page',\n last: 'Last page',\n }[name]\n }\n pin={\n {\n first: 'round-brick',\n previous: 'clear-brick',\n next: 'brick-clear',\n last: 'brick-round',\n }[name]\n }\n >\n <Icon\n awesome={\n {\n first: 'angle-double-left',\n previous: 'angle-left',\n next: 'angle-right',\n last: 'angle-double-right',\n }[name]\n }\n />\n </Button>\n {typeof control.hotkeyHandler !== 'undefined' && (\n <Hotkey settings={hotkeySettings} />\n )}\n </span>\n );\n }\n renderInput() {\n const {showInput, inputValue, onChange, size} = this.props;\n\n return showInput ? (\n <TextInput\n qa=\"yt-pagination_input\"\n size={size}\n type=\"text\"\n value={inputValue}\n onUpdate={onChange}\n pin={'clear-clear'}\n />\n ) : null;\n }\n render() {\n const {first, previous, next, last, className} = this.props;\n\n return (\n <div className={block(null, className)}>\n {this.renderComponent('first', first)}\n {this.renderComponent('previous', previous)}\n {this.renderInput()}\n {this.renderComponent('next', next)}\n {this.renderComponent('last', last)}\n </div>\n );\n }\n}\n","import React from 'react';\n// For some reason React.memo drops the generic prop type and creates a regular union type\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-542793243\nexport const typedMemo = React.memo;\n","import React from 'react';\nimport { CHARTKIT_ERROR_CODE } from '../../libs';\nimport { getErrorMessage } from '../../utils/getErrorMessage';\nexport class ErrorBoundary extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n error: undefined,\n };\n this.resetError = () => {\n if (this.state.error) {\n this.setState({ error: undefined });\n }\n };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch() {\n var _a, _b;\n const { error } = this.state;\n if (error) {\n (_b = (_a = this.props).onError) === null || _b === void 0 ? void 0 : _b.call(_a, { error });\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.data !== this.props.data) {\n const { error } = this.state;\n if (error && 'code' in error && error.code === CHARTKIT_ERROR_CODE.NO_DATA) {\n this.resetError();\n }\n }\n }\n render() {\n const { error } = this.state;\n if (error) {\n const message = getErrorMessage(error);\n if (this.props.renderError) {\n return this.props.renderError({\n error,\n message,\n resetError: this.resetError,\n });\n }\n return React.createElement(\"div\", null, message);\n }\n return this.props.children;\n }\n}\n","import { i18n } from '../i18n';\nexport function getErrorMessage(error) {\n const code = 'code' in error && error.code;\n return (error.message || code || i18n('error', 'label_unknown-error')).toString();\n}\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { Loader as BaseLoader } from '@gravity-ui/uikit';\nimport { block } from '../../utils/cn';\nimport './Loader.css';\nconst b = block('loader');\nexport const Loader = (_a) => {\n var { renderPluginLoader } = _a, props = __rest(_a, [\"renderPluginLoader\"]);\n const pluginLoader = renderPluginLoader === null || renderPluginLoader === void 0 ? void 0 : renderPluginLoader();\n // React.Suspense complains about possible undefined in \"fallback\" property\n if (typeof pluginLoader !== 'undefined') {\n return pluginLoader;\n }\n return (React.createElement(\"div\", { className: b() },\n React.createElement(BaseLoader, Object.assign({}, props))));\n};\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { i18n } from '../i18n';\nimport { CHARTKIT_ERROR_CODE, ChartKitError, settings } from '../libs';\nimport { getRandomCKId, typedMemo } from '../utils';\nimport { cn } from '../utils/cn';\nimport { ErrorBoundary } from './ErrorBoundary/ErrorBoundary';\nimport { Loader } from './Loader/Loader';\nimport './ChartKit.css';\nconst b = cn('chartkit');\nconst ChartKitComponent = (props) => {\n const widgetRef = React.useRef();\n const { instanceRef, id: propsId, type, isMobile, renderPluginLoader } = props, restProps = __rest(props, [\"instanceRef\", \"id\", \"type\", \"isMobile\", \"renderPluginLoader\"]);\n const ckId = React.useMemo(() => getRandomCKId(), []);\n const id = propsId || ckId;\n const lang = settings.get('lang');\n const plugins = settings.get('plugins');\n const plugin = plugins.find((iteratedPlugin) => iteratedPlugin.type === type);\n if (!plugin) {\n throw new ChartKitError({\n code: CHARTKIT_ERROR_CODE.UNKNOWN_PLUGIN,\n message: i18n('error', 'label_unknown-plugin', { type }),\n });\n }\n const ChartComponent = plugin.renderer;\n React.useImperativeHandle(instanceRef, () => ({\n reflow(details) {\n var _a;\n if ((_a = widgetRef.current) === null || _a === void 0 ? void 0 : _a.reflow) {\n widgetRef.current.reflow(details);\n }\n },\n }), []);\n return (React.createElement(React.Suspense, { fallback: React.createElement(Loader, { renderPluginLoader: renderPluginLoader }) },\n React.createElement(\"div\", { className: b({ mobile: isMobile }, 'chartkit-theme_common') },\n React.createElement(ChartComponent, Object.assign({ ref: widgetRef, id: id, lang: lang }, restProps)))));\n};\nconst ChartKitComponentWithErrorBoundary = React.forwardRef(function ChartKitComponentWithErrorBoundary(props, ref) {\n return (React.createElement(ErrorBoundary, { onError: props.onError, data: props.data, renderError: props.renderError },\n React.createElement(ChartKitComponent, Object.assign({ instanceRef: ref }, props))));\n}) /* https://stackoverflow.com/a/58473012 */;\nexport const ChartKit = typedMemo(ChartKitComponentWithErrorBoundary);\n","import { ChartKit } from './components/ChartKit';\nimport { settings } from './libs';\nexport * from './types/widget-data';\nexport * from './libs/chartkit-error/chartkit-error';\nexport { settings };\nexport default ChartKit;\n","import React from 'react';\nexport * from './types';\nexport const YagrPlugin = {\n type: 'yagr',\n renderer: React.lazy(() => import('./renderer/YagrWidget')),\n};\n","import ChartKit, {settings} from '@gravity-ui/chartkit';\nimport {YagrPlugin} from '@gravity-ui/chartkit/yagr';\nexport type {RawSerieData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';\n\nimport '@gravity-ui/yagr/dist/index.css';\n\nsettings.set({plugins: [YagrPlugin]});\n\nconst COLORS = ['rgb(77, 162, 241)', 'rgb(255, 61, 100)'];\n\nexport function getSerieColor(serieIndex: number) {\n return COLORS[serieIndex % COLORS.length];\n}\n\nexport default ChartKit;\n","import React, {FC} from 'react';\nimport {Datepicker, DatepickerProps, datepickerDefaultProps} from './Datepicker';\n\nexport * from './Datepicker';\n\nexport const DatePickerWrapper: FC<DatepickerProps> = (props) => <Datepicker {...props} />;\nDatePickerWrapper.defaultProps = datepickerDefaultProps;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getFontFamilies} from '../../store/selectors/global/fonts';\nimport {waitForFontFamily} from '../../store/actions/global/fonts';\n\nexport function WaitForFont({children}: {children: React.ReactNode}) {\n const {regular, monospace} = useSelector(getFontFamilies);\n const [ready, setReady] = React.useState(false);\n React.useEffect(() => {\n Promise.all([waitForFontFamily(regular), waitForFontFamily(monospace)]).then(() =>\n setReady(true),\n );\n }, [regular, monospace]);\n\n return ready ? children : null;\n}\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport {loadPoolTreesIfNotLoaded} from '../store/actions/global';\nimport {loadDefaultPoolTree} from '../utils/poolTrees';\n\nfunction usePoolTreesLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadPoolTreesIfNotLoaded());\n }, [dispatch]);\n}\n\nexport function PoolTreesLoader() {\n usePoolTreesLoaded();\n return null;\n}\n\nexport function usePoolTreeOrLoadDefault(poolTree?: string) {\n const [defaultPoolTree, setDefaultPoolTree] = React.useState<string | undefined>(poolTree);\n\n React.useEffect(() => {\n loadDefaultPoolTree().then((value) => {\n setDefaultPoolTree(value);\n });\n }, []);\n\n return defaultPoolTree;\n}\n\nexport function WaitForDefaultPoolTree({\n children,\n}: {\n children: ({defaultPoolTree}: {defaultPoolTree: string}) => React.ReactNode;\n}) {\n const defaultPoolTree = usePoolTreeOrLoadDefault();\n\n return defaultPoolTree ? children({defaultPoolTree}) : null;\n}\n","import map_ from 'lodash/map';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\n\nexport function formatShare(value) {\n return hammer.format['SmallNumber'](value, {significantDigits: 4});\n}\n\nexport function prepareRuntime(operation) {\n const progress = ypath.getValue(operation, '/@progress');\n\n if (progress && operation.isRunning()) {\n let trees = ypath.getValue(progress, '/scheduling_info_per_pool_tree');\n\n trees =\n trees &&\n map_(trees, (treeFairShareInfo, treeName) => ({\n progress: treeFairShareInfo,\n name: treeName,\n }));\n\n return trees;\n }\n}\n","import forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\nimport sortBy_ from 'lodash/sortBy';\n\nimport ypath from '../../../../common/thor/ypath';\n\nfunction prepareGraphData(operation) {\n if (hasProgressTasks(operation)) {\n return prepareGraphDataByTasks(operation);\n }\n\n const dataFlowGraph = ypath.getValue(operation, '/@progress/data_flow_graph');\n const jobTypeOrder = ypath.getValue(dataFlowGraph, '/topological_ordering');\n const statistics = ypath.getValue(dataFlowGraph, '/edges');\n\n const data = [];\n\n if (dataFlowGraph) {\n forEach_(jobTypeOrder, (fromJobType) => {\n forEach_(statistics[fromJobType], (value, toJobType) => {\n data.push({\n from: fromJobType,\n to: toJobType,\n value: value.statistics,\n });\n });\n });\n }\n\n return data;\n}\n\nfunction prepareGraphDataByTasks(operation) {\n const dataFlow = ypath.getValue(operation, '/@progress/data_flow');\n const tasks = ypath.getValue(operation, '/@progress/tasks');\n\n const res = reduce_(\n dataFlow,\n (acc, item) => {\n const {\n source_name: from,\n target_name: to,\n job_data_statistics,\n teleport_data_statistics,\n } = item;\n acc.push({\n from,\n to,\n info: item,\n value: keys_(job_data_statistics).reduce((acc, key) => {\n const jobStat = ypath.getValue(job_data_statistics[key]);\n const teleportStat = ypath.getValue(teleport_data_statistics[key]);\n acc[key] = jobStat + teleportStat;\n return acc;\n }, {}),\n job_data_statistics: isEmptyStatistics(job_data_statistics)\n ? null\n : job_data_statistics,\n teleport_data_statistics: isEmptyStatistics(teleport_data_statistics)\n ? null\n : teleport_data_statistics,\n });\n return acc;\n },\n [],\n );\n\n const tasksIndexMap = reduce_(\n tasks,\n (acc, {task_name}, index) => {\n acc[task_name] = index;\n return acc;\n },\n {},\n );\n\n return sortBy_(res, ({from}) => {\n if (from === 'input') {\n return -1;\n }\n return tasksIndexMap[from];\n });\n}\n\nfunction isEmptyStatistics(stats) {\n return !some_(stats, (value) => {\n return Boolean(ypath.getValue(value));\n });\n}\n\nexport function prepareCompletedUsage(operation) {\n const progress = ypath.getValue(operation, '/@progress');\n\n if (progress) {\n let statistics = [];\n\n const estimatedInputStatistics = ypath.getValue(\n operation,\n '/@progress/estimated_input_statistics',\n );\n\n if (estimatedInputStatistics) {\n statistics.push({\n name: 'Estimated input',\n value: estimatedInputStatistics,\n });\n }\n\n statistics = statistics.concat(prepareGraphData(operation));\n\n return statistics;\n }\n}\n\nexport function prepareIntermediateUsage(operation, intermediate) {\n return map_(intermediate, (resources, account) => ({\n ...resources,\n account,\n }));\n}\n\nexport function hasProgressTasks(operation) {\n return ypath.getValue(operation, '/@progress/tasks');\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\n\nimport ypath from '../../../../../common/thor/ypath';\nimport UIFactory from '../../../../../UIFactory';\nimport type {\n DetailedOperationSelector,\n OperationPreviewType,\n} from '../../../../../pages/operations/selectors';\nimport {genNavigationUrl} from '../../../../../utils/navigation/navigation';\n\nconst TASKS_PREFIX = 'tasks/';\n\nfunction prepareFile(file: unknown) {\n return {\n path: ypath.getValue(file),\n originalPath: ypath.getValue(file, '/@original_path'),\n name: ypath.getValue(file, '/@file_name'),\n executable: ypath.getBoolean(file, '/@executable'),\n };\n}\n\nfunction prepareMeta(meta: Record<string, unknown>) {\n const prepared = map_(meta, (value, name) => ({name, value}));\n\n return sortBy_(prepared, 'name');\n}\n\nfunction prepareStartedBy(operation: DetailedOperationSelector) {\n const startedBy = ypath.getValue(operation, '/@spec/started_by');\n const command = ypath.getValue(startedBy, '/command') || [];\n\n const fields = filter_(prepareMeta(startedBy), (option) => option.name !== 'command');\n\n if (fields.length || command.length) {\n return {\n fields: fields,\n command: command,\n };\n }\n\n return undefined;\n}\n\nfunction prepareRemote(operation: DetailedOperationSelector) {\n if (operation.type === 'remote_copy') {\n return {\n cluster: ypath.getValue(operation, '/@spec/cluster_name'),\n network: ypath.getValue(operation, '/@spec/network_name'),\n };\n }\n return undefined;\n}\n\nfunction prepareTransferTask(operation: DetailedOperationSelector) {\n const task = ypath.getValue(operation, '/@spec/transfer_manager');\n\n if (task) {\n return {\n id: task.task_id,\n url: UIFactory.makeUrlForTransferTask(operation),\n };\n }\n return undefined;\n}\n\nfunction prepareTransaction(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n table: unknown,\n userTransactionAlive: boolean,\n) {\n const tableTransaction = ypath.get(table, '/@transaction_id');\n\n if (tableTransaction) {\n return tableTransaction;\n } else if (operation.state === 'running') {\n return ypath.get(\n operation,\n `/@${type === 'stderr' ? 'debug_output' : type}_transaction_id`,\n );\n } else if (userTransactionAlive) {\n return ypath.get(operation, '/@user_transaction_id');\n }\n return undefined;\n}\n\nfunction prepareLivePreview(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n index?: number | string,\n): {path?: string; supported: boolean; transaction?: string} {\n if (operation.isRunning()) {\n const {path, virtualPath} = operation.getLivePreviewPath(type, index);\n\n if (virtualPath) {\n return {path: virtualPath, supported: true};\n } else if (path) {\n const transaction = ypath.getValue(operation, '/@async_scheduler_transaction_id');\n return {path, transaction, supported: true};\n }\n }\n\n return {supported: false};\n}\n\ntype RangeType = {upper_limit?: number; lower_limit?: number};\n\nfunction normalizeTableRanges(table: unknown) {\n let ranges: Array<RangeType> = ypath.getValue(table, '/@ranges');\n\n if (typeof ranges === 'undefined') {\n // Fallback attempt to get ranges from attributes\n // Exact range is only supported in updated ypath\n const upperLimit = ypath.getValue(table, '/@upper_limit');\n const lowerLimit = ypath.getValue(table, '/@lower_limit');\n\n let range: RangeType | undefined;\n\n if (typeof upperLimit !== 'undefined') {\n range = range || {};\n range['upper_limit'] = upperLimit;\n }\n\n if (typeof lowerLimit !== 'undefined') {\n range = range || {};\n range['lower_limit'] = lowerLimit;\n }\n\n if (range) {\n ranges = [range];\n }\n\n if (range) {\n ranges = [range];\n }\n }\n\n return ranges;\n}\n\nfunction prepareTableFilters(table: unknown) {\n const ranges = normalizeTableRanges(table);\n const columns = ypath.getValue(table, '/@columns');\n let filters: {ranges?: typeof ranges; columns?: typeof columns} | undefined;\n\n if (ranges) {\n filters = filters || {};\n filters.ranges = ranges;\n }\n\n if (columns) {\n filters = filters || {};\n filters.columns = columns;\n }\n\n return filters;\n}\n\nfunction prepareTable(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n table: unknown,\n typedTable: unknown,\n userTransactionAlive: boolean,\n index?: number | string,\n) {\n const path: string = ypath.getValue(table);\n const cluster: string | undefined = ypath.getValue(table, '/@cluster');\n const originalPath = ypath.getValue(table, '/@original_path');\n const transaction = prepareTransaction(operation, type, table, userTransactionAlive);\n\n return {\n path,\n ...(cluster ? {cluster} : {}),\n originalPath,\n transaction,\n livePreview: prepareLivePreview(operation, type, index),\n append: ypath.getBoolean(table, '/@append'),\n teleport: ypath.getBoolean(table, '/@teleport'),\n primary: ypath.getBoolean(table, '/@primary'),\n foreign: ypath.getBoolean(table, '/@foreign'),\n filters: prepareTableFilters(table),\n typedFilters: prepareTableFilters(typedTable),\n };\n}\n\nfunction groupTables<T extends {path: string; transaction?: string; cluster?: string}>(\n tables: Array<T>,\n) {\n const group: Array<{\n path: string;\n name?: string;\n isFolder?: boolean;\n transaction?: string;\n cluster?: string;\n }> = [];\n let currentGroup: string;\n\n forEach_(tables, (table) => {\n try {\n const {cluster} = table;\n const path = ypath.YPath.create(table.path, 'absolute');\n const name = path.getKey();\n const folder = path.toSubpath(-2).stringify();\n const groupKey: string = cluster ? `${cluster}:${folder}` : folder;\n\n if (currentGroup !== groupKey) {\n currentGroup = groupKey;\n group.push({\n path: folder,\n transaction: table.transaction,\n isFolder: true,\n ...(cluster ? {cluster} : {}),\n });\n }\n\n group.push(Object.assign(table, {name: name}));\n } catch (err) {\n console.error('groupTables error', err);\n }\n });\n\n return group;\n}\n\nfunction prepareRemoteInput<T extends {path: string; transaction?: string}>(\n input: Array<T>,\n cluster: string,\n) {\n if (cluster) {\n return map_(input, (item) => ({\n ...item,\n remote: true,\n url: genNavigationUrl({cluster, ...item}),\n }));\n }\n\n return input;\n}\n\nexport function remoteInputUrl(cluster: string, path: string, transaction?: string) {\n return '/' + cluster + '/navigation?path=' + path + (transaction ? '&t=' + transaction : '');\n}\n\nfunction prepareInput(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'input';\n let tables;\n\n switch (operation.type) {\n case 'remote_copy':\n case 'merge':\n case 'map':\n case 'reduce':\n case 'map_reduce':\n case 'sort':\n case 'join_reduce': {\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n tables = ypath.get(operation, '/@spec/input_table_paths');\n tables = map_(tables, (table, index) =>\n prepareTable(operation, TYPE, table, typedTables[index], userTransactionAlive),\n );\n break;\n }\n case 'erase': {\n const typedTable = ypath.get(operation.$typedAttributes, '/spec/input_table_path');\n\n tables = ypath.get(operation, '/@spec/table_path');\n tables = tables && [\n prepareTable(operation, TYPE, tables, typedTable, userTransactionAlive),\n ];\n break;\n }\n }\n\n return groupTables(tables);\n}\n\nfunction prepareStderr(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'stderr';\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n let tables = ypath.get(operation, '/@spec/stderr_table_path');\n tables = tables && [prepareTable(operation, TYPE, tables, typedTables, userTransactionAlive)];\n\n return groupTables(tables);\n}\n\nfunction prepareCoredumps(operation: DetailedOperationSelector) {\n const coreTable = ypath.get(operation.$typedAttributes, '/spec/core_table_path');\n\n const tables = coreTable ? [prepareTable(operation, 'core', coreTable, [], false)] : [];\n return groupTables(tables);\n}\n\nfunction prepareOutput(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'output';\n let tables;\n\n switch (operation.type) {\n case 'map':\n case 'reduce':\n case 'map_reduce':\n case 'join_reduce': {\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n tables = ypath.get(operation, '/@spec/output_table_paths');\n tables = map_(tables, (table, index) =>\n prepareTable(\n operation,\n TYPE,\n table,\n typedTables[index],\n userTransactionAlive,\n index,\n ),\n );\n break;\n }\n case 'merge': // These operations do not have output livePreview\n case 'sort':\n case 'remote_copy': {\n const typedTable = ypath.get(operation.$typedAttributes, '/spec/input_table_path');\n\n tables = ypath.get(operation, '/@spec/output_table_path');\n tables = tables && [\n prepareTable(operation, TYPE, tables, typedTable, userTransactionAlive),\n ];\n break;\n }\n }\n\n return groupTables(tables);\n}\n\nfunction prepareIntermediate(operation: DetailedOperationSelector) {\n let livePreview;\n\n switch (operation.type) {\n case 'map_reduce':\n case 'sort':\n livePreview = prepareLivePreview(operation, 'intermediate');\n break;\n }\n\n if (livePreview && livePreview.supported) {\n return livePreview;\n }\n\n return undefined;\n}\n\nfunction prepareScriptCaption(type: string) {\n return type.indexOf(TASKS_PREFIX) === 0 ? type.substring(TASKS_PREFIX.length) + '_task' : type;\n}\n\nfunction prepareScript(operation: DetailedOperationSelector, type: string) {\n try {\n const script = ypath.getValue(operation, '/@spec/' + type);\n\n let environment = ypath.getValue(script, '/environment');\n environment = prepareMeta(environment);\n\n const command = ypath.getValue(script, '/command');\n const className = ypath.getValue(script, '/class_name');\n const jobCount = ypath.getValue(script, '/job_count');\n const files = map_(ypath.getValue(script, '/file_paths'), prepareFile);\n\n if (command || className || jobCount || files?.length || environment?.length) {\n return {\n type: type,\n caption: prepareScriptCaption(type),\n command,\n className,\n jobCount,\n files,\n environment,\n };\n }\n } catch (err) {\n console.error('prepareScript error:', err);\n }\n\n return undefined;\n}\n\nfunction prepareTasks(operation: DetailedOperationSelector) {\n const tasks = ypath.getValue(operation, '/@spec/tasks');\n\n if (tasks) {\n return map_(keys_(tasks), (taskName) => prepareScript(operation, TASKS_PREFIX + taskName));\n }\n\n return undefined;\n}\n\nexport function prepareSpecification(\n operation: DetailedOperationSelector,\n userTransactionAlive: boolean,\n) {\n const remote = prepareRemote(operation);\n\n const specification = {\n startedBy: prepareStartedBy(operation),\n\n // Remote copy\n remote,\n transferTask: prepareTransferTask(operation),\n // Merge\n mode: ypath.getValue(operation, '/@spec/mode'),\n\n // Input/Intermediate/Output/Stderr\n input: prepareRemoteInput(prepareInput(operation, userTransactionAlive), remote?.cluster),\n output: prepareOutput(operation, userTransactionAlive),\n stderr: prepareStderr(operation, userTransactionAlive),\n intermediate: prepareIntermediate(operation),\n coredumps: prepareCoredumps(operation),\n\n // Scripts\n mapper: prepareScript(operation, 'mapper'),\n reducer: prepareScript(operation, 'reducer'),\n reduceCombiner: prepareScript(operation, 'reduce_combiner'),\n\n tasks: prepareTasks(operation),\n };\n\n return specification;\n}\n\nexport function prepareVisibleItems<T extends {isFolder?: boolean}>(items: Array<T>) {\n return filter_(items, (item) => !item.isFolder);\n}\n\nexport function filterVisibleItems<T extends {isFolder?: boolean}>(\n items: Array<T>,\n itemsCount: number,\n) {\n const result = [];\n let count = 0;\n\n for (const item of items) {\n if (!item.isFolder) {\n count++;\n }\n if (count === itemsCount + 1) {\n break;\n }\n\n result.push(item);\n }\n\n return result;\n}\n","import {docsUrl} from '../../../../config';\n\nimport map_ from 'lodash/map';\n\nimport UIFactory from '../../../../UIFactory';\n\nexport function prepareFaqUrl(type: string) {\n return docsUrl(UIFactory.docsUrls['faq:alert_type'] + type.replace(/_/g, ''));\n}\n\nexport function prepareAlerts(alerts?: Record<string, unknown>) {\n if (alerts) {\n return map_(alerts, (error, type) => ({\n error: error,\n helpURL: prepareFaqUrl(type),\n }));\n }\n\n return undefined;\n}\n","import map_ from 'lodash/map';\n\nimport moment from 'moment';\n\nimport ypath from '../../common/thor/ypath';\nimport hammer from '../../common/hammer';\nimport {createSelector} from 'reselect';\nimport {remoteInputUrl} from '../../utils/operations/tabs/details/specification/specification';\nimport {FIX_MY_TYPE} from '../../types';\nimport {RootState} from '../../store/reducers';\n\ninterface OperationPool {\n tree: string;\n pool: string;\n isEphemeral: boolean;\n slotIndex?: number;\n weight?: number;\n}\n\nexport class OperationSelector implements Record<string, any> {\n static PREPARING_STATES = ['materializing', 'initializing', 'preparing', 'pending'] as const;\n\n static RUNNING_STATES = ['running', 'completing', 'failing', 'aborting', 'reviving'] as const;\n\n static INTERMEDIATE_STATES = [\n ...OperationSelector.RUNNING_STATES,\n ...OperationSelector.PREPARING_STATES,\n ];\n\n id: string;\n $value: string;\n $attributes: any;\n state: (typeof OperationSelector.INTERMEDIATE_STATES)[0] | 'completed' | 'failed' | 'aborted';\n pools: Array<OperationPool> = [];\n\n constructor(data: any) {\n const {id, ...attributes} = data;\n this.$value = id;\n this.id = id;\n this.$attributes = attributes;\n\n this.state = ypath.getValue(attributes, '/state');\n }\n\n isRunning() {\n return OperationSelector.RUNNING_STATES.indexOf(this.state as any) !== -1;\n }\n\n isPreparing() {\n return OperationSelector.PREPARING_STATES.indexOf(this.state as any) !== -1;\n }\n\n inIntermediateState() {\n return OperationSelector.INTERMEDIATE_STATES.indexOf(this.state as any) !== -1;\n }\n\n successfullyCompleted() {\n return this.state === 'completed';\n }\n\n computePools(attributes: any, orchidAttributes?: any) {\n const trees = ypath.getValue(\n attributes,\n '/runtime_parameters/scheduling_options_per_pool_tree',\n );\n const poolsIndexes = ypath.getValue(attributes, '/slot_index_per_pool_tree') || {};\n\n this.pools = map_(trees, (schedulingInfo, name) => {\n const tree = name;\n const pool = schedulingInfo.pool;\n const isEphemeral = orchidAttributes?.[tree]?.[pool]?.isEphemeral || false;\n\n return {\n tree,\n pool,\n isEphemeral,\n slotIndex: poolsIndexes[name],\n weight: schedulingInfo.weight || 1,\n };\n });\n }\n}\n\nexport type OperationPreviewType = 'input' | 'output' | 'stderr' | 'intermediate' | 'core';\n\nexport class ListOperationSelector extends OperationSelector {\n weight?: number;\n title?: string;\n type?: string;\n user?: string;\n suspended?: boolean;\n\n input?: IOProperties;\n output?: IOProperties;\n\n startTime?: string;\n finishTime?: string;\n duration?: number;\n\n jobs?: any;\n\n completedJobs?: number;\n runningJobs?: number;\n failedJobs?: number;\n totalJobs?: number;\n completedJobsProgress?: number;\n runningJobsProgress?: number;\n jobsProgress?: number;\n\n constructor(data: any) {\n super(data);\n\n const attributes = this.$attributes;\n\n const briefSpec = ypath.getValue(attributes, '/brief_spec');\n\n this.title = ypath.getValue(briefSpec, '/title');\n this.type = ypath.getValue(attributes, '/type');\n this.user = ypath.getValue(attributes, '/authenticated_user');\n this.suspended = ypath.getValue(attributes, '/suspended');\n\n const cluster =\n this.type === 'remote_copy' ? ypath.get(this, '/@brief_spec/cluster_name') : undefined;\n\n this.input = this.computeIOProperties(briefSpec, 'input', cluster);\n this.output = this.computeIOProperties(briefSpec, 'output');\n\n this.computePools(attributes);\n if (this.pools.length === 1) {\n this.weight = this.pools[0].weight;\n }\n\n this.startTime = ypath.getValue(attributes, '/start_time');\n this.finishTime = ypath.getValue(attributes, '/finish_time');\n this.duration = (moment(this.finishTime) as any) - (moment(this.startTime) as any);\n\n const progress = ypath.getValue(attributes, '/brief_progress');\n const jobs = (this.jobs = ypath.getValue(progress, '/jobs'));\n\n if (typeof jobs !== 'undefined') {\n this.completedJobs =\n typeof jobs.completed === 'object' ? jobs.completed.total : jobs.completed;\n this.runningJobs = jobs.running;\n this.failedJobs = jobs.failed;\n this.totalJobs = jobs.total;\n this.completedJobsProgress = (this.completedJobs! / this.totalJobs!) * 100;\n this.runningJobsProgress = (this.runningJobs! / this.totalJobs!) * 100;\n this.jobsProgress = this.completedJobsProgress + this.runningJobsProgress;\n }\n }\n\n computeIOProperties(spec: any, type: string, cluster?: string) {\n const io = ypath.get(spec, '/' + type + '_table_paths');\n\n const res = {\n count: ypath.getValue(io, '/@count'),\n table: ypath.getValue(io, '/0'),\n url: undefined as undefined | string,\n remote: undefined as undefined | boolean,\n };\n\n if (cluster) {\n res.url = remoteInputUrl(cluster, res.table);\n res.remote = true;\n }\n\n return res;\n }\n}\n\nexport interface IOProperties {\n count: number;\n table: string;\n url?: string;\n remote?: boolean;\n}\n\nexport class DetailedOperationSelector extends OperationSelector {\n $typedAttributes: unknown;\n $orchidAttributes: unknown;\n\n alias?: string;\n\n type?: string;\n user?: string;\n suspended?: boolean;\n\n startTime?: string;\n finishTime?: string;\n duration?: number;\n\n jobs?: any;\n\n completedJobs?: number;\n runningJobs?: number;\n failedJobs?: number;\n totalJobs?: number;\n completedJobsProgress?: number;\n runningJobsProgress?: number;\n jobsProgress?: number;\n\n totalFailedJobs?: number;\n failedJobsProgress?: number;\n\n description?: string;\n title?: string;\n\n typedSpec?: any;\n typedProvidedSpec?: any;\n typedFullSpec?: any;\n typedUnrecognizedSpec?: any;\n\n live_preview: unknown;\n\n constructor(data: any, typedData: unknown, orchidData: unknown) {\n super(data);\n\n this.$typedAttributes = typedData;\n this.$orchidAttributes = orchidData;\n\n const attributes = this.$attributes;\n const typedAttributes = this.$typedAttributes;\n const orchidAttributes = this.$orchidAttributes;\n\n const spec = ypath.getValue(attributes, '/spec');\n const fullSpec = ypath.getValue(attributes, '/full_spec');\n\n this.alias = ypath.getValue(spec, '/alias');\n\n this.typedSpec = ypath.getValue(typedAttributes, '/spec');\n this.typedProvidedSpec = ypath.getValue(typedAttributes, '/provided_spec');\n this.typedFullSpec = ypath.getValue(typedAttributes, '/full_spec');\n this.typedUnrecognizedSpec = ypath.getValue(typedAttributes, '/unrecognized_spec');\n\n this.title = ypath.getValue(spec, '/title');\n\n const runtimeAnnotations = ypath.getValue(attributes, '/runtime_parameters/annotations');\n this.description = ypath.getValue(runtimeAnnotations, '/description');\n // TODO: get rid of the following string when all cluster are updated to 20.1 version\n this.description = this.description || ypath.getValue(spec, '/description');\n\n this.type =\n ypath.getValue(attributes, '/operation_type') || ypath.getValue(attributes, '/type');\n this.user = ypath.getValue(attributes, '/authenticated_user');\n this.suspended = ypath.getValue(attributes, '/suspended');\n\n this.startTime = ypath.getValue(attributes, '/start_time');\n this.finishTime = ypath.getValue(attributes, '/finish_time');\n\n this.duration = (moment(this.finishTime) as any) - (moment(this.startTime) as any);\n\n this.computePools(attributes, orchidAttributes);\n\n const progress = ypath.getValue(attributes, '/progress');\n const jobs = (this.jobs = ypath.getValue(progress, '/jobs'));\n\n if (typeof jobs !== 'undefined') {\n this.completedJobs =\n typeof jobs.completed === 'object' ? jobs.completed.total : jobs.completed;\n this.runningJobs = jobs.running;\n this.totalJobs = jobs.total;\n this.completedJobsProgress = (this.completedJobs! / this.totalJobs!) * 100;\n this.runningJobsProgress = (this.runningJobs! / this.totalJobs!) * 100;\n this.jobsProgress = this.completedJobsProgress + this.runningJobsProgress;\n\n this.failedJobs = jobs.failed;\n if (fullSpec) {\n this.totalFailedJobs = ypath.getValue(fullSpec, '/max_failed_job_count');\n }\n this.failedJobsProgress = this.totalFailedJobs\n ? (this.failedJobs! / this.totalFailedJobs) * 100\n : 0;\n }\n\n this.live_preview = ypath.getValue(progress, '/live_preview');\n }\n\n getLivePreviewPath(\n type: OperationPreviewType,\n index?: number | string,\n ): {path?: string; virtualPath?: string} {\n const hasVirtualPath = ypath.getBoolean(\n this.live_preview,\n `/virtual_table_format/${type}_supported`,\n ) as boolean;\n\n const hasPath = hasVirtualPath\n ? false\n : (ypath.getBoolean(this.live_preview, `/${type}_supported`) as boolean);\n\n const suffix = hasVirtualPath ? '/controller_orchid/live_previews' : '';\n const basePath = `//sys/operations/${hammer.utils.extractFirstByte(this.id)}/${\n this.id\n }${suffix}`;\n\n switch (type) {\n case 'output':\n return makeLivePreview(`${basePath}/output_${index || 0}`, hasVirtualPath, hasPath);\n case 'stderr':\n return makeLivePreview(`${basePath}/stderr`, hasVirtualPath, hasPath);\n case 'intermediate':\n return makeLivePreview(`${basePath}/intermediate`, hasVirtualPath, hasPath);\n case 'core':\n return hasVirtualPath\n ? makeLivePreview(`${basePath}/core`, hasVirtualPath, false)\n : {};\n }\n\n return {};\n }\n}\n\nfunction makeLivePreview(path: string, hasVirtualPath: boolean, hasPath: boolean) {\n return hasVirtualPath ? {virtualPath: path} : {path: hasPath ? path : undefined};\n}\n\nexport function getCounters(name: string, states: FIX_MY_TYPE, rawCounters: FIX_MY_TYPE) {\n const counters: FIX_MY_TYPE = ypath.getValue(rawCounters, `/${name}_counts`);\n\n return hammer.filter.countCategoriesNG({\n items: map_(counters, (count, value) => ({count, value})),\n categories: hammer.filter.flattenCategoriesNG(states, 'name'),\n custom: (item: {value: string; count: number}, counters: Record<string, number>) => {\n counters[item.value] += item.count;\n counters['all'] += item.count;\n },\n });\n}\n\nexport function getActualValue<T>(value: T | undefined, defaultValue?: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport function getFilterValue(name: string) {\n return (state: RootState) => {\n const {value, defaultValue} = state.operations.jobs.filters[name];\n\n return getActualValue(value, defaultValue);\n };\n}\n\nexport function getFilteredAttributes(attributeNames: Array<string>) {\n return (state: RootState) => {\n return attributeNames.filter((name) => getFilterValue(name)(state));\n };\n}\n\nexport const getShowCompetitiveJobs = createSelector(\n [getFilterValue('filterBy'), getFilterValue('jobId')],\n (filterBy, jobId) => {\n return filterBy === 'id' && Boolean(jobId);\n },\n);\n","export function isOperationId(value) {\n const idSection = '[0-9a-fA-F]{1,8}';\n const idRegexp = new RegExp(`^${idSection}-${idSection}-${idSection}-${idSection}$`);\n return idRegexp.test(value);\n}\n\nexport function isGotoEnabled(value) {\n const aliasRegexp = new RegExp('^\\\\*[0-9a-zA-Z_-]+$');\n return isOperationId(value) || aliasRegexp.test(value);\n}\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport {RootState} from '../../../store/reducers';\nimport ypath from '../../../common/thor/ypath';\nimport {AlertInfo} from '../../../components/AlertEvents/AlertEvents';\nimport {calculateLoadingStatus} from '../../../utils/utils';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {prepareFaqUrl} from '../../../utils/operations/tabs/details/alerts';\n\nconst getOperationErasedTreesRaw = (state: RootState) => {\n return ypath.getValue(state.operations.detail, '/operation/@runtime_parameters/erased_trees');\n};\n\nexport const getOperationErasedTrees = createSelector(\n [getOperationErasedTreesRaw],\n (rawTrees: Array<unknown>) => {\n return reduce_(\n rawTrees,\n (acc, item) => {\n const poolTree = ypath.getValue(item);\n acc[poolTree] = true;\n return acc;\n },\n {} as {[poolTree: string]: boolean},\n );\n },\n);\n\ninterface OperationTask {\n task_name: string;\n}\n\nconst getOperationAlertEventsImpl = (state: RootState) =>\n state.operations.detail.details.alert_events;\n\nexport const getOperationAlertEvents = createSelector([getOperationAlertEventsImpl], (items) => {\n const appeared: Record<string, AlertInfo> = {};\n return reduce_(\n items,\n (acc, item) => {\n const type = ypath.getValue(item.alert_type);\n const code = ypath.getNumberDeprecated(item, '/error/code', NaN);\n if (!code && appeared[type]) {\n const last = appeared[type];\n last.to = ypath.getValue(item.time);\n delete appeared[type];\n } else if (code) {\n acc.push({\n from: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n appeared[type] = acc[acc.length - 1];\n } else {\n acc.push({\n to: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n }\n return acc;\n },\n [] as Array<AlertInfo>,\n );\n});\n\nexport const getOperation = (state: RootState) => state.operations.detail.operation;\nexport const getOperationId = (state: RootState) =>\n ypath.getValue(state.operations.detail.operation);\nexport const getOperationTasks = createSelector(\n [getOperation],\n (operation): Array<OperationTask> | undefined => {\n return ypath.getValue(operation, '/@progress/tasks');\n },\n);\nexport const getOperationTasksNames = createSelector(\n [getOperationTasks],\n (tasks?: Array<{task_name: string}>) => {\n return map_(tasks, 'task_name').sort();\n },\n);\n\nexport const getOperationDetailsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const getOperationTypedAttributes = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).$typedAttributes;\n\nexport const getOperationMonitorChartStates = (state: RootState) =>\n state.operations.detail.monitorChartStates;\n\nexport const getOperationPools = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).pools;\n\nexport const getOperationPoolNames = createSelector([getOperationPools], (pools): Array<string> => {\n return map_(pools, 'pool');\n});\n\nexport const getOperationsMonitorChartStatesFinishedCount = createSelector(\n [getOperationMonitorChartStates],\n (states) => {\n return reduce_(\n states,\n (acc, value) => {\n return value ? acc + 1 : acc;\n },\n 0,\n );\n },\n);\n\nexport const getOperationJobsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport interface OperationExperimentItem {\n experiment: string;\n group: string;\n ticket: string;\n dimension: string;\n effect: unknown;\n}\n\nexport const getOperationExperimentAssignments = createSelector(\n [getOperation],\n (operation): Array<OperationExperimentItem> => {\n return ypath.getValue(operation, '/@experiment_assignments');\n },\n);\n\nconst getOperationMonitoredJobCount = createSelector([getOperation], (operation) => {\n const res = ypath.getNumberDeprecated(\n operation,\n '/@brief_progress/registered_monitoring_descriptor_count',\n );\n return res;\n});\n\nexport const getOperationJobsMonitorTabSettings = createSelector(\n [getOperationMonitoredJobCount],\n (jobsCount) => {\n const maxJobCount = 200;\n return {visible: jobsCount > 0 && jobsCount <= maxJobCount, maxJobCount};\n },\n);\n","import {JOBS_MONITOR} from '../../../constants/operations/detail';\nimport {ThunkAction} from 'redux-thunk';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {JobsMonitorAction} from '../../../store/reducers/operations/jobs/jobs-monitor';\nimport {getOperationJobsMonitorTabSettings} from '../../../store/selectors/operations/operation';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\n\ntype JobsMonitorThunkAction = ThunkAction<unknown, RootState, unknown, JobsMonitorAction>;\n\nconst cancelHerlper = new CancelHelper();\n\nexport function getJobsMonitoringDescriptors(operation_id: string): JobsMonitorThunkAction {\n return (dispatch, getState) => {\n const {visible, maxJobCount} = getOperationJobsMonitorTabSettings(getState());\n if (!visible) {\n return undefined;\n }\n\n dispatch({type: JOBS_MONITOR.REQUEST});\n\n return ytApiV3Id\n .listJobs(YTApiId.listJobs100, {\n parameters: {operation_id, limit: maxJobCount, with_monitoring_descriptor: true},\n cancellation: cancelHerlper.removeAllAndSave,\n })\n .then(({jobs}) => {\n dispatch({type: JOBS_MONITOR.SUCCESS, data: {jobs, operation_id}});\n })\n .catch((error) => {\n if (isCancelled(error)) {\n dispatch({type: JOBS_MONITOR.CANCELLED});\n return;\n }\n\n dispatch({type: JOBS_MONITOR.FAILURE, data: {error}});\n });\n };\n}\n","import mapValues_ from 'lodash/mapValues';\nimport ypath from '../../../common/thor/ypath';\n\nimport {\n prepareCompletedUsage,\n prepareIntermediateUsage,\n} from '../../../utils/operations/tabs/details/data-flow';\nimport {prepareSpecification} from '../../../utils/operations/tabs/details/specification/specification';\nimport {prepareOperationEvents} from '../../../utils/operations/tabs/details/events/events';\nimport {prepareRuntime} from '../../../utils/operations/tabs/details/runtime';\nimport {prepareAlerts} from '../../../utils/operations/tabs/details/alerts';\nimport {prepareError} from '../../../utils/operations/tabs/details/error';\n\nimport {GET_OPERATION, LOAD_RESOURCE_USAGE} from '../../../constants/operations/detail';\nimport {DetailedOperationSelector} from '../../../pages/operations/selectors';\nimport {checkUserTransaction, prepareActions} from '../../../utils/operations/detail';\nimport {prepareAttributes} from '../../../utils';\nimport {showErrorPopup} from '../../../utils/utils';\nimport {isOperationId} from '../../../utils/operations/list';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\nimport {Toaster} from '@gravity-ui/uikit';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {YTErrors} from '../../../rum/constants';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getJobsMonitoringDescriptors} from '../../../store/actions/operations/jobs-monitor';\n\nimport type {RootState} from './../../../store/reducers';\nimport type {ThunkAction} from 'redux-thunk';\nimport type {OperationDetailActionType} from '../../reducers/operations/detail';\n\nconst toaster = new Toaster();\nconst operationDetailsRequests = new CancelHelper();\n\nfunction getIsEphemeral([operationAttributes, userTransactionAlive]: Awaited<\n ReturnType<typeof checkUserTransaction>\n>) {\n const treesInfo = ypath.get(\n operationAttributes,\n '/runtime_parameters/scheduling_options_per_pool_tree',\n );\n const trees = Object.keys(treesInfo);\n const poolPaths = Object.values(\n mapValues_(\n treesInfo,\n (infoPerTree, tree) =>\n `${tree}/pools/${ypath.getValue(infoPerTree, '/pool')}/is_ephemeral`,\n ),\n );\n const requests = poolPaths.map((path) => {\n return {\n command: 'get' as const,\n parameters: {\n path: '//sys/scheduler/orchid/scheduler/pool_trees/' + path,\n },\n };\n });\n const orchidAttributes = ytApiV3Id\n .executeBatch(YTApiId.operationIsEphemeral, {requests})\n .then((data) =>\n data.map(({error, output}) =>\n error\n ? ypath.getNumberDeprecated(error.code) === YTErrors.NODE_DOES_NOT_EXIST\n : output,\n ),\n )\n .then((res) =>\n res.reduce(\n (acc, poolInfo, index) => {\n const tree = trees[index];\n const pool = ypath.getValue(treesInfo[tree], '/pool');\n const isEphemeral = ypath.getBoolean(poolInfo);\n\n acc[tree] = {\n [pool]: {isEphemeral},\n };\n\n return acc;\n },\n {} as Record<string, {isEphemeral: boolean}>,\n ),\n );\n\n return Promise.all([operationAttributes, userTransactionAlive, orchidAttributes]);\n}\n\nfunction loadIntermediateResourceUsage(\n operation: unknown,\n callback: () => void,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return async (dispatch) => {\n const outputTransaction = ypath.get(operation, '/@output_transaction_id');\n\n if (outputTransaction && outputTransaction !== '0-0-0-0') {\n dispatch({type: LOAD_RESOURCE_USAGE.REQUEST});\n\n return ytApiV3Id\n .get(YTApiId.operationIntermediateResourceUsage, {\n path: '#' + outputTransaction + '/@resource_usage',\n })\n .then((resources) => {\n callback();\n\n const intermediateResources = prepareIntermediateUsage(operation, resources);\n\n dispatch({\n type: LOAD_RESOURCE_USAGE.SUCCESS,\n data: {resources, intermediateResources},\n });\n })\n .catch(() => {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.FAILURE});\n });\n } else {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.CANCELLED});\n }\n };\n}\n\nexport function getOperation(\n id: string,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return (dispatch, getState) => {\n const isAlias = !isOperationId(id);\n\n const params = Object.assign(\n {include_scheduler: true, output_format: TYPED_OUTPUT_FORMAT},\n isAlias ? {operation_alias: id} : {operation_id: id},\n );\n\n dispatch({type: GET_OPERATION.REQUEST, data: {isAlias, id}});\n\n return ytApiV3\n .getOperation(params, operationDetailsRequests)\n .then(checkUserTransaction)\n .then(getIsEphemeral)\n .then(([operationAttributes, userTransactionAlive, orchidAttributes]) => {\n const preparedAttributes = prepareAttributes(operationAttributes);\n const operation = new DetailedOperationSelector(\n preparedAttributes,\n operationAttributes,\n orchidAttributes,\n );\n\n const dispatchOperationSuccess = () => {\n const actions = prepareActions(operation);\n\n const specification = prepareSpecification(operation, userTransactionAlive);\n const alerts = prepareAlerts(ypath.getValue(operation, '/@alerts'));\n const alert_events = ypath.getValue(operation, '/@alert_events');\n const error = prepareError(operation);\n const runtime = prepareRuntime(operation);\n const events = prepareOperationEvents(operation);\n const resources = prepareCompletedUsage(operation);\n\n const details = {\n specification,\n alerts,\n alert_events,\n error,\n runtime,\n events,\n resources,\n };\n\n dispatch({\n type: GET_OPERATION.SUCCESS,\n data: {operation, actions, details},\n });\n\n dispatch(getJobsMonitoringDescriptors(id));\n };\n\n if (operation.inIntermediateState()) {\n dispatch(loadIntermediateResourceUsage(operation, dispatchOperationSuccess));\n } else {\n dispatchOperationSuccess();\n }\n })\n .catch((error) => {\n const {operations} = getState();\n const isFirstLoading = !operations.detail.loaded;\n\n if (error.code !== YTErrors.CANCELLED) {\n if (!isFirstLoading) {\n toaster.add({\n name: 'get operation',\n autoHiding: false,\n theme: 'danger',\n title: 'Failed to load operation',\n content: error.message,\n actions: [{label: ' view', onClick: () => showErrorPopup(error)}],\n });\n }\n\n dispatch({\n type: GET_OPERATION.FAILURE,\n data: {\n message: `Error occured when loading operation \"${id}\"`,\n details: error,\n },\n });\n }\n });\n };\n}\n","import ypath from '../../../../common/thor/ypath';\n\nexport function prepareError(operation) {\n if (operation.state === 'aborted' || operation.state === 'failed') {\n return ypath.getValue(operation, '/@result');\n }\n}\n","import {createSelector} from 'reselect';\nimport {\n getAllPoolNames,\n getAllPoolTreeNames,\n getAllUserNames,\n getCluster,\n getClusterConfigByName,\n getCurrentUserName,\n} from '../../../store/selectors/global';\n\nimport concat_ from 'lodash/concat';\nimport filter_ from 'lodash/filter';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport some_ from 'lodash/some';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {RootState} from '../../reducers';\nimport {OperationsListFilterValue} from '../../reducers/operations/list/list';\n\nexport const getOperationsListFilters = (state: RootState) => state.operations.list.filters;\nexport const getOperationsPoolFilterData = (state: RootState) =>\n getOperationsListFilters(state)['pool'];\nexport const getOperationsUserFilterData = (state: RootState) =>\n getOperationsListFilters(state)['user'];\nexport const getOperationsPoolTreeRawCounters = (state: RootState) =>\n state.operations.list.filters.poolTree.counters?.pool_tree_counts || {};\nexport const getOperationsPoolRawCounters = (state: RootState) =>\n getOperationsPoolFilterData(state).counters?.pool_counts || {};\nexport const getOperationsUserRawCounter = (state: RootState) =>\n getOperationsUserFilterData(state).counters?.user_counts || {};\n\nexport const getOperationsPoolTreeCountersItems = createSelector(\n [getOperationsPoolTreeRawCounters],\n convertCountersToItems,\n);\n\nexport const getOperationsPoolTreeItemsWithoutCounter = createSelector(\n [getAllPoolTreeNames, getOperationsPoolTreeRawCounters],\n (f, s) => {\n return calculateItemsWithoutCounter(f, s);\n },\n);\n\nexport const getOperationsPoolTreeSuggestions = createSelector(\n [getOperationsPoolTreeCountersItems, getOperationsPoolTreeItemsWithoutCounter],\n concat_,\n);\n\nexport const getOperationsPoolCountersItems = createSelector(\n [getOperationsPoolRawCounters],\n convertCountersToItems,\n);\n\nexport const getOperationsPoolItemsWithoutCounter = createSelector(\n [getAllPoolNames, getOperationsPoolRawCounters],\n calculateItemsWithoutCounter,\n);\n\nexport const getOperationsPoolSuggestions = createSelector(\n [getOperationsPoolCountersItems, getOperationsPoolItemsWithoutCounter],\n concat_,\n);\n\nexport const getOperationsUserCountersItems = createSelector(\n [getOperationsUserRawCounter],\n convertCountersToItems,\n);\n\nexport const getOperationsUserItemsWithoutCounter = createSelector(\n [getAllUserNames, getOperationsUserRawCounter],\n calculateItemsWithoutCounter,\n);\n\nexport const getOperationsUserSuggestions = createSelector(\n [getOperationsUserCountersItems, getOperationsUserItemsWithoutCounter],\n concat_,\n);\n\nfunction convertCountersToItems(counters: Record<string, number>) {\n return sortBy_(\n map_(counters, (count, pool) => ({\n value: pool,\n text: pool,\n counter: count,\n })),\n 'text',\n );\n}\n\nfunction calculateItemsWithoutCounter(\n allNames: Array<string>,\n countersMap: Record<string, number>,\n) {\n return sortBy_(\n map_(\n filter_(allNames, (name) => countersMap[name] === undefined),\n (name) => ({value: name, text: name}),\n ),\n 'text',\n );\n}\n\nexport const ATTRIBUTE_ITEMS = [\n {\n value: 'withStderr',\n text: 'With stderr',\n },\n {\n value: 'withFailContext',\n text: 'With fail context',\n },\n {\n value: 'withSpec',\n text: 'With full input',\n },\n {\n value: 'withCompetitors',\n text: 'With competitive jobs',\n },\n {\n value: 'withMonitoringDescriptor',\n text: 'With monitoring descriptor',\n },\n];\nexport const ATTRIBUTE_ITEM_NAMES = map_(ATTRIBUTE_ITEMS, ({value}) => value);\n\nexport const getOperationsListFilterParameters = createSelector(\n [getOperationsListFilters],\n (filters) => {\n const {text, user, subject, permissions, pool, poolTree, state, type, failedJobs} = filters;\n\n const actualSubject = getValueIfNotDefault(subject);\n const actualPermissions = getValueIfNotDefault(permissions) as string;\n const access =\n actualSubject || actualPermissions?.length > 0\n ? {subject: actualSubject, permissions: actualPermissions || []}\n : undefined;\n\n const res = {\n filter: getValueIfNotDefault(text),\n user: getValueIfNotDefault(user),\n pool: getValueIfNotDefault(pool),\n pool_tree: getValueIfNotDefault(poolTree),\n type: getValueIfNotDefault(type),\n with_failed_jobs: getValueIfNotDefault(failedJobs),\n access,\n };\n return {\n state: getValueIfNotDefault(state),\n ...res,\n };\n },\n);\n\nexport function getOperationsListTimeRange(state: RootState) {\n const {from, to} = state.operations.list.timeRange;\n\n return {\n to_time: to,\n from_time: from,\n };\n}\n\nexport const getOperationsListFiltersParameters_FOR_YTFRONT_2838 = createSelector(\n [getOperationsListFilterParameters, getCurrentUserName, getOperationsListTimeRange, getCluster],\n (filters, login, {from_time, to_time}, cluster) => {\n const clusterConfig = getClusterConfigByName(cluster);\n\n if (clusterConfig.operationPageSettings?.disableOptimizationForYTFRONT2838) {\n return filters;\n }\n\n const {state, ...rest} = filters;\n if (Boolean(from_time || to_time) && !some_(rest, Boolean)) {\n rest.user = login;\n }\n return {\n state,\n ...rest,\n };\n },\n);\n\nexport const getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838 = createSelector(\n [getOperationsListFilterParameters, getOperationsListFiltersParameters_FOR_YTFRONT_2838],\n (filters, fixedFilters) => {\n if (isEqual_(filters, fixedFilters)) {\n return undefined;\n }\n return fixedFilters.user;\n },\n);\n\nexport function getValueIfNotDefault(filter: OperationsListFilterValue) {\n return filter.value === filter.defaultValue ? undefined : filter.value;\n}\n","import moment from 'moment';\n\nimport {EXTRA_JOBS_COUNT, OPERATION_JOBS_TABLE_ID} from '../../../constants/operations/jobs';\nimport {OPERATIONS_DATA_MODE} from '../../../constants/operations';\nimport {\n getOperationsListFiltersParameters_FOR_YTFRONT_2838,\n getOperationsListTimeRange,\n getValueIfNotDefault,\n} from '../../../store/selectors/operations';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\n// Operations\n\nexport function getDefaultToTime(currentTime, dataMode) {\n return dataMode === OPERATIONS_DATA_MODE.ARCHIVE\n ? moment(currentTime).toISOString()\n : undefined;\n}\n\nexport function getDefaultFromTime(currentTime, dataMode) {\n return dataMode === OPERATIONS_DATA_MODE.ARCHIVE\n ? moment(currentTime).subtract(6, 'hours').toISOString()\n : undefined;\n}\n\nfunction getFilterParameters(state) {\n return getOperationsListFiltersParameters_FOR_YTFRONT_2838(state);\n}\n\nfunction getCursorParams({operations}) {\n const {from, direction} = operations.list.cursor;\n\n return {\n cursor_time: from, // ISO string\n cursor_direction: direction,\n };\n}\n\nexport function getListRequestParameters(state) {\n return {\n ...getFilterParameters(state),\n ...getOperationsListTimeRange(state),\n ...getCursorParams(state),\n include_archive: state.operations.list.dataMode === OPERATIONS_DATA_MODE.ARCHIVE,\n // TODO: make limit configurable by using settings, 20 | 50 | 100\n limit: 20,\n ...USE_CACHE,\n };\n}\n\n// Operation Jobs\n\nfunction getJobFilterParameters(filters, sortState) {\n const filterBy = filters.filterBy.value || filters.filterBy.defaultValue;\n return {\n state: getValueIfNotDefault(filters.state),\n type: getValueIfNotDefault(filters.type),\n address: filterBy === 'address' ? getValueIfNotDefault(filters.address) : undefined,\n with_stderr: getValueIfNotDefault(filters.withStderr),\n with_monitoring_descriptor: getValueIfNotDefault(filters.withMonitoringDescriptor),\n with_fail_context: getValueIfNotDefault(filters.withFailContext),\n with_spec: getValueIfNotDefault(filters.withSpec),\n with_competitors: getValueIfNotDefault(filters.withCompetitors),\n sort_field: sortState.field || 'none',\n sort_order: sortState.asc ? 'ascending' : 'descending',\n task_name: getValueIfNotDefault(filters.taskName),\n };\n}\n\nfunction preparePaginationQuery({offset, limit}) {\n return {\n offset: Math.max(0, offset),\n limit: limit + EXTRA_JOBS_COUNT,\n };\n}\n\nexport function getJobRequestParameters({operations}) {\n const {operation} = operations.detail;\n const {filters} = operations.jobs;\n return {\n operation_id: operation.$value,\n job_id: filters.jobId.value,\n };\n}\nexport function getCompetitiveJobsRequestParameters({operations, tables}) {\n const {operation} = operations.detail;\n const {job} = operations.jobs;\n const sortState = tables[OPERATION_JOBS_TABLE_ID];\n return {\n operation_id: operation.$value,\n job_competition_id: job.jobCompetitionId,\n sort_field: sortState.field || 'none',\n sort_order: sortState.asc ? 'ascending' : 'descending',\n };\n}\n\nexport function getJobsRequestParameters({operations, tables}) {\n const {operation} = operations.detail;\n const {filters, pagination} = operations.jobs;\n const sortState = tables[OPERATION_JOBS_TABLE_ID];\n\n return {\n operation_id: operation.$value,\n data_source: filters.dataSource.value,\n // following options have no use unless dataSource is 'manual' which we don't support yet\n /*\n include_archive: true,\n include_cypress: true,\n include_runtime: true\n */\n // prepareSortQuery(),\n ...getJobFilterParameters(filters, sortState),\n ...preparePaginationQuery(pagination),\n };\n}\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport moment from 'moment';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../common/thor/ypath';\nimport hammer from '../../../common/hammer';\nimport {\n APPLY_FILTER_PRESET,\n DEFAULT_PRESET_SETTING,\n OPERATIONS_CURSOR_DIRECTION,\n OPERATIONS_DATA_MODE,\n OPERATIONS_PAGE,\n RESET_TIME_RANGE,\n SET_OPERATIONS_DATA_MODE,\n TOGGLE_SAVE_FILTER_PRESET_DIALOG,\n UPDATE_CURSOR,\n UPDATE_FILTER,\n UPDATE_FILTER_COUNTERS,\n UPDATE_OPERATIONS_CANCELLED,\n UPDATE_OPERATIONS_FAILURE,\n UPDATE_OPERATIONS_REQUEST,\n UPDATE_OPERATIONS_SUCCESS,\n UPDATE_SAVE_FILTER_PRESET_DIALOG,\n} from '../../../constants/operations';\nimport {ListOperationSelector} from '../../../pages/operations/selectors';\nimport {removeSetting, setSetting} from '../../../store/actions/settings';\nimport {\n getDefaultFromTime,\n getDefaultToTime,\n getListRequestParameters,\n} from '../../../store/actions/operations/utils';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\nimport {RumWrapper, YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {getCluster} from '../../../store/selectors/global';\n\nconst cancellableRequests = new CancelHelper();\n\n// selectors\nfunction updateCursor({\n timestamp,\n direction,\n firstPageReached,\n lastPageReached,\n resetLoadingStatus = true,\n}) {\n return {\n type: UPDATE_CURSOR,\n data: {\n timestamp,\n direction,\n firstPageReached,\n lastPageReached,\n resetLoadingStatus,\n },\n };\n}\n\nexport function updatePager(incomplete) {\n return (dispatch, getState) => {\n const direction = getState().operations.list.cursor.direction;\n\n if (direction === OPERATIONS_CURSOR_DIRECTION.PAST) {\n dispatch(\n updateCursor({\n lastPageReached: !incomplete,\n resetLoadingStatus: false,\n }),\n );\n } else if (direction === OPERATIONS_CURSOR_DIRECTION.FUTURE) {\n dispatch(\n updateCursor({\n firstPageReached: !incomplete,\n resetLoadingStatus: false,\n }),\n );\n }\n };\n}\n\nexport function updateOperationsList() {\n return (dispatch, getState) => {\n const state = getState();\n const cluster = getCluster(state);\n const parameters = getListRequestParameters(state);\n\n return dispatch(updateOperationsByParams(cluster, parameters));\n };\n}\n\nexport function updateOperationsByParams(cluster, parameters) {\n return (dispatch) => {\n dispatch({\n type: UPDATE_OPERATIONS_REQUEST,\n });\n\n const rumId = new RumWrapper(cluster, RumMeasureTypes.OPERATIONS_LIST);\n return rumId\n .fetch(\n YTApiId.listOperations,\n ytApiV3Id.listOperations(YTApiId.listOperations, {\n parameters,\n cancellation: cancellableRequests.removeAllAndSave,\n }),\n )\n .then((response) => {\n const {operations, incomplete, ...counters} = response;\n\n dispatch(updatePager(incomplete));\n dispatch({\n type: UPDATE_OPERATIONS_SUCCESS,\n data: rumId.wrap('parse', () => {\n return map_(operations, (data) => new ListOperationSelector(data));\n }),\n });\n dispatch({\n type: UPDATE_FILTER_COUNTERS,\n data: counters,\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: UPDATE_OPERATIONS_CANCELLED,\n });\n } else {\n dispatch({\n type: UPDATE_OPERATIONS_FAILURE,\n data: {\n message: 'Could not load operations.',\n details: error,\n },\n });\n }\n });\n };\n}\n\nfunction resetCursor() {\n return updateCursor({\n timestamp: null,\n direction: OPERATIONS_CURSOR_DIRECTION.PAST,\n firstPageReached: true,\n lastPageReached: false,\n });\n}\n\nexport function updateFilter(name, value) {\n return (dispatch) => {\n dispatch({\n type: UPDATE_FILTER,\n data: {name, value},\n });\n dispatch(resetCursor());\n };\n}\n\nfunction resetTimeRange() {\n return (dispatch, getState) => {\n const dataMode = getState().operations.list.dataMode;\n const currentTime = moment();\n\n dispatch({\n type: RESET_TIME_RANGE,\n data: {\n from: getDefaultFromTime(currentTime, dataMode),\n to: getDefaultToTime(currentTime, dataMode),\n },\n });\n };\n}\n\nexport function showArchiveOperations(from, to) {\n return (dispatch) => {\n dispatch({\n type: SET_OPERATIONS_DATA_MODE,\n data: {dataMode: OPERATIONS_DATA_MODE.ARCHIVE, from, to},\n });\n dispatch(resetCursor());\n };\n}\n\nexport function showCurrentOperations() {\n return (dispatch) => {\n dispatch({\n type: SET_OPERATIONS_DATA_MODE,\n data: {dataMode: OPERATIONS_DATA_MODE.CURRENT},\n });\n dispatch(resetCursor());\n };\n}\n\nexport function gotoOperationsPage(where) {\n return (dispatch, getState) => {\n const {dataMode, timeRange, cursor, operations} = getState().operations.list;\n\n switch (where) {\n case OPERATIONS_PAGE.FIRST:\n dispatch(resetCursor());\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n break;\n\n case OPERATIONS_PAGE.LAST:\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n // WARNING fromTime is changed in reset timeRange\n dispatch(\n updateCursor({\n timestamp: timeRange.from,\n direction: OPERATIONS_CURSOR_DIRECTION.FUTURE,\n firstPageReached: false,\n lastPageReached: true,\n }),\n );\n break;\n\n case OPERATIONS_PAGE.NEXT:\n if (!cursor.lastPageReached) {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n\n dispatch(\n updateCursor({\n timestamp: ypath.getValue(\n operations[operations.length - 1],\n '/@start_time',\n ),\n direction: OPERATIONS_CURSOR_DIRECTION.PAST,\n firstPageReached: false,\n }),\n );\n }\n break;\n\n case OPERATIONS_PAGE.PREV:\n if (!cursor.firstPageReached) {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n\n dispatch(\n updateCursor({\n timestamp: ypath.getValue(operations[0], '/@start_time'),\n direction: OPERATIONS_CURSOR_DIRECTION.FUTURE,\n lastPageReached: false,\n }),\n );\n }\n break;\n }\n };\n}\n\nexport function applyFilterPreset(preset, reload = true) {\n return (dispatch) => {\n dispatch({\n type: APPLY_FILTER_PRESET,\n data: {preset},\n });\n\n if (reload) {\n dispatch(resetCursor());\n }\n };\n}\n\nexport function removeFilterPreset(presetId) {\n return (dispatch) => {\n dispatch(removeSetting(presetId, NAMESPACES.OPERATION_PRESETS));\n };\n}\n\nexport function toggleSaveFilterPresetDialog() {\n return {\n type: TOGGLE_SAVE_FILTER_PRESET_DIALOG,\n };\n}\n\nexport function updateSaveFilterPresetDialog({name, value}) {\n return {\n type: UPDATE_SAVE_FILTER_PRESET_DIALOG,\n data: {fieldName: name, fieldValue: value},\n };\n}\n\nfunction selectActualFilters(state) {\n const currentFilters = state.operations.list.filters;\n return reduce_(\n currentFilters,\n (filters, {value}, key) => {\n return {...filters, [key]: value};\n },\n {},\n );\n}\n\nexport function saveFilterPreset(name, isDefault) {\n return (dispatch, getState) => {\n let promise = Promise.resolve();\n const presetId = hammer.guid();\n\n if (isDefault) {\n promise = dispatch(setSetting(DEFAULT_PRESET_SETTING, NAMESPACES.OPERATION, presetId));\n }\n return promise.then(() => {\n dispatch(\n setSetting(presetId, NAMESPACES.OPERATION_PRESETS, {\n name,\n filters: selectActualFilters(getState()),\n }),\n );\n });\n };\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport reduce_ from 'lodash/reduce';\n\nimport {getOperation} from '../../../store/actions/operations/detail';\nimport {updateOperationsList} from '../../../store/actions/operations/list';\nimport {\n HIDE_EDIT_WEIGHT_POOL_MODAL,\n SET_PULLS_AND_WEIGHTS,\n SHOW_EDIT_WEIGHT_POOL_MODAL,\n} from '../../../constants/operations';\nimport {Page} from '../../../constants';\n\nexport * from '../../../store/actions/operations/list';\n\nexport function showEditPoolsWeightsModal(operation, editable = true) {\n return {\n type: SHOW_EDIT_WEIGHT_POOL_MODAL,\n data: {operation, editable},\n };\n}\n\nexport function hideEditPoolsWeightsModal() {\n return {\n type: HIDE_EDIT_WEIGHT_POOL_MODAL,\n };\n}\n\nexport function setPoolsAndWeights(operation, pools, weights) {\n const pathItems = window.location.pathname.split('/');\n const inOperationsList = pathItems.length === 3 && pathItems[2] === Page.OPERATIONS;\n const operationId = operation.$value;\n\n const poolTrees = reduce_(\n operation.pools,\n (acc, item) => {\n const {tree} = item;\n acc[tree] = item;\n return acc;\n },\n {},\n );\n\n return (dispatch) => {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.REQUEST,\n });\n\n const params = reduce_(\n pools,\n (res, pool, tree) => {\n const old = poolTrees[tree];\n if (weights[tree] && old.weight !== Number(weights[tree])) {\n res[tree] = Object.assign({}, {weight: Number(weights[tree])});\n }\n if (old.pool !== pools[tree]) {\n res[tree] = Object.assign(res[tree] || {}, {\n pool: pools[tree],\n });\n }\n return res;\n },\n {},\n );\n\n return yt.v3\n .updateOperationParameters({\n operation_id: operationId,\n _parameters: {\n scheduling_options_per_pool_tree: params,\n },\n })\n .then(() => {\n if (inOperationsList) {\n dispatch(updateOperationsList());\n } else {\n dispatch(getOperation(operationId));\n }\n\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.SUCCESS,\n });\n dispatch({\n type: HIDE_EDIT_WEIGHT_POOL_MODAL,\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.CANCELLED,\n });\n } else {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport MetaTable, {\n Template,\n TemplateWeight,\n} from '../../../../../../components/MetaTable/MetaTable';\n\nimport {formatShare} from '../../../../../../utils/operations/tabs/details/runtime';\nimport {showEditPoolsWeightsModal} from '../../../../../../store/actions/operations';\nimport hammer from '../../../../../../common/hammer';\nimport {OperationPool} from '../../../../../../components/OperationPool/OperationPool';\n\nconst headingBlock = cn('elements-heading');\nconst runtimeBlock = cn('runtime');\n\nexport const runtimeProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n }),\n);\n\nfunction StarvingStatus({progress}) {\n const {starvation_status} = progress || {};\n const res = starvation_status ? hammer.format.Readable(starvation_status) : undefined;\n return res || null; // returns null to prevent react warning\n}\n\nexport const operationProps = PropTypes.shape({\n $value: PropTypes.string,\n $attributes: PropTypes.object,\n type: PropTypes.string,\n user: PropTypes.string,\n pool: PropTypes.string,\n state: PropTypes.string,\n title: PropTypes.string,\n suspended: PropTypes.bool,\n duration: PropTypes.number,\n startTime: PropTypes.string,\n finishTime: PropTypes.string,\n description: PropTypes.object,\n pools: PropTypes.arrayOf(\n PropTypes.shape({\n tree: PropTypes.string.isRequired,\n pool: PropTypes.string.isRequired,\n }),\n ),\n});\n\nclass Runtime extends Component {\n static propTypes = {\n // from parent component\n runtime: runtimeProps.isRequired,\n operation: operationProps.isRequired,\n cluster: PropTypes.string.isRequired,\n // from connect\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n };\n\n handlePoolEditClick = () => {\n const {showEditPoolsWeightsModal, operation} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderTree({progress, name}) {\n const {cluster, operation, showEditPoolsWeightsModal} = this.props;\n const {state} = operation;\n\n const pool = {\n pool: progress.pool,\n tree: name,\n weight: progress.weight,\n };\n\n return (\n <div className={runtimeBlock('tree')} key={name}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](name)}\n </div>\n\n <MetaTable\n items={[\n [\n {\n key: 'pool',\n value: (\n <OperationPool\n onEdit={this.handlePoolEditClick}\n cluster={cluster}\n state={state}\n pool={pool}\n compact\n />\n ),\n },\n {\n key: 'weight',\n value: (\n <TemplateWeight\n operation={operation}\n pool={pool}\n onEdit={() => showEditPoolsWeightsModal(operation)}\n />\n ),\n },\n {\n key: 'min_share',\n value:\n formatShare(progress.min_share_ratio) +\n ' / ' +\n formatShare(progress.adjusted_min_share_ratio),\n },\n {\n key: 'fair_share_ratio',\n value: formatShare(progress.fair_share_ratio),\n },\n {\n key: 'usage_ratio',\n value: formatShare(progress.usage_ratio),\n },\n {\n key: 'demand_ratio',\n value: formatShare(progress.demand_ratio),\n },\n ],\n [\n {\n key: 'Starvation status',\n value: <StarvingStatus progress={progress} />,\n },\n {\n key: 'partitions',\n value:\n progress.partitions?.completed +\n ' / ' +\n progress.partitions?.total,\n visible: Boolean(progress.partitions),\n },\n {\n key: 'scheduling_status',\n value: hammer.format.Readable(progress.scheduling_status),\n },\n {\n key: 'dominant_resource',\n value: hammer.format.Readable(progress.dominant_resource),\n },\n {\n key: 'preemptable_job_count',\n value: (\n <Template.FormattedValue\n value={progress.preemptable_job_count}\n format=\"Number\"\n />\n ),\n },\n {\n key: 'memory_size_per_jobs',\n value: (\n <Template.FormattedValue\n // eslint-disable-next-line camelcase\n value={\n progress.resource_demand?.memory /\n progress.resource_demand?.user_slots\n }\n format=\"Bytes\"\n />\n ),\n visible: Boolean(progress.resource_demand),\n },\n ],\n ]}\n />\n </div>\n );\n }\n\n render() {\n const {runtime} = this.props;\n\n return (\n <div className={runtimeBlock()}>{map_(runtime, (tree) => this.renderTree(tree))}</div>\n );\n }\n}\n\nexport default connect(null, {showEditPoolsWeightsModal})(Runtime);\n","import React, {Fragment, useEffect, useState} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport every_ from 'lodash/every';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {operationProps} from '../../../pages/operations/OperationDetail/tabs/details/Runtime/Runtime';\nimport Error from '../../../components/Error/Error';\nimport Modal from '../../../components/Modal/Modal';\nimport Link from '../../../components/Link/Link';\nimport Yson from '../../../components/Yson/Yson';\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport {hideEditPoolsWeightsModal, setPoolsAndWeights} from '../../../store/actions/operations';\nimport {Page} from '../../../constants/index';\n\nimport './PoolsWeightsEditModal.scss';\nimport {getCluster} from '../../../store/selectors/global';\n\nPoolsWeightsEditModal.propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n visible: PropTypes.bool.isRequired,\n editable: PropTypes.bool.isRequired,\n cluster: PropTypes.string.isRequired,\n operation: operationProps,\n\n hideEditPoolsWeightsModal: PropTypes.func.isRequired,\n setPoolsAndWeights: PropTypes.func.isRequired,\n};\n\nconst block = cn('operation-pools-weights');\nconst preparePoolsState = (pools) => {\n return reduce_(\n pools,\n (res, {pool, tree}) => {\n res[tree] = pool;\n return res;\n },\n {},\n );\n};\n\nconst prepareWeightsState = (pools) => {\n return reduce_(\n pools,\n (res, {weight, tree}) => {\n res[tree] = String(weight);\n return res;\n },\n {},\n );\n};\n\nconst renderPoolsAndWeights = ({\n cluster,\n operation,\n editable,\n pools,\n weights,\n setPools,\n setWeights,\n}) => {\n return map_(operation.pools, ({tree}) => {\n const pool = pools[tree];\n const title = `${pool} [${tree}]`;\n const url = `/${cluster}/${Page.SCHEDULING}?tree=${tree}&pool=${pool}&tab=monitor`;\n\n return (\n <Fragment key={tree}>\n <div className={block('pool', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={pool}\n onUpdate={(pool) => {\n setPools({...pools, [tree]: pool});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">\n <Link url={url} title={title}>\n <span className={block('pool-link')}>{pool}</span>\n </Link>\n </span>\n )}\n </div>\n\n <div className={block('tree', 'elements-form_field')}>{tree}</div>\n\n <div className={block('weight', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={weights[tree]}\n onUpdate={(weight) => {\n setWeights({...weights, [tree]: weight});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">{weights[tree]}</span>\n )}\n </div>\n </Fragment>\n );\n });\n};\n\nfunction PoolsWeightsEditModal(props) {\n const {operation, setPoolsAndWeights} = props;\n const [pools, setPools] = useState(preparePoolsState(operation.pools));\n const [weights, setWeights] = useState(prepareWeightsState(operation.pools));\n\n useEffect(() => {\n setPools(preparePoolsState(operation.pools));\n setWeights(prepareWeightsState(operation.pools));\n }, [operation.$value]);\n\n const isConfirmDisabled = () => {\n const state = {operation};\n const isStateCorrect = state !== 'completed' && state !== 'failed' && state !== 'aborted';\n\n const isWeightCorrect = every_(keys_(weights), (tree) => {\n const value = Number(weights[tree]);\n return !isNaN(value) && value > 0;\n });\n\n const isPoolCorrect = every_(keys_(pools), (tree) => {\n const value = pools[tree];\n return Boolean(value);\n });\n\n return !isStateCorrect || !isWeightCorrect || !isPoolCorrect;\n };\n\n const handleConfirm = () => {\n setPoolsAndWeights(operation, pools, weights);\n };\n\n const {loading, error, errorData, visible, editable, hideEditPoolsWeightsModal} = props;\n const title = (\n <div className={block('title')}>{editable ? 'Edit' : 'View'} pools and weights</div>\n );\n\n return (\n <Modal\n size=\"l\"\n title={title}\n loading={loading}\n visible={visible}\n footer={editable}\n confirmText=\"Apply\"\n onConfirm={handleConfirm}\n onCancel={hideEditPoolsWeightsModal}\n isConfirmDisabled={isConfirmDisabled}\n content={\n <Fragment>\n <div className={block('name')}>\n <Yson value={operation.title || operation.$value} inline />\n </div>\n <div className={block()}>\n <div className={block('header')}>Pool</div>\n <div className={block('header')}>Tree</div>\n <div className={block('header')}>Weight</div>\n {renderPoolsAndWeights({\n ...props,\n pools,\n weights,\n setPools,\n setWeights,\n })}\n </div>\n {error && <Error className={block('error')} error={errorData} />}\n </Fragment>\n }\n />\n );\n}\n\nfunction mapStateToProps(state) {\n const {operations} = state;\n const {loading, loaded, error, errorData, visible, editable, operation} =\n operations.page.editWeightModal;\n\n return {\n loading,\n loaded,\n error,\n errorData,\n visible,\n editable,\n operation,\n cluster: getCluster(state),\n };\n}\n\nconst mapDispatchToProps = {\n hideEditPoolsWeightsModal,\n setPoolsAndWeights,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PoolsWeightsEditModal);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\nimport Link from '../../../components/Link/Link';\n\nimport hammer from '../../../common/hammer';\nimport StatusLabel from '../../../components/StatusLabel/StatusLabel';\n\nimport './OperationProgress.scss';\nimport {getCluster} from '../../../store/selectors/global';\n\nconst block = cn('operation-progress');\n\nclass OperationProgress extends Component {\n static propTypes = {\n // from parent\n operation: PropTypes.object.isRequired,\n type: PropTypes.oneOf(['running', 'failed']),\n cluster: PropTypes.string.isRequired,\n showState: PropTypes.bool,\n\n onLinkClick: PropTypes.func,\n };\n\n static defaultProps = {\n type: 'running',\n };\n\n renderCounter(state, count, total) {\n const {cluster, onLinkClick} = this.props;\n\n const className = 'operation-progress__counter';\n const stateClassName = 'operation-progress__counter-state';\n const valueClassName = 'operation-progress__counter-value';\n\n const {\n operation: {$value},\n } = this.props;\n const url = `/${cluster}/operations/${$value}/jobs?state=${state}`;\n\n const jobsByStateTitle = `View ${state} jobs`;\n\n return (\n <div className={className}>\n <span className={stateClassName}>\n <Link\n theme=\"ghost\"\n title={jobsByStateTitle}\n url={url}\n routed\n onClick={\n !onLinkClick\n ? undefined\n : () => {\n onLinkClick(state);\n }\n }\n >\n {hammer.format['ReadableField'](state)}\n </Link>\n </span>\n <span className={valueClassName}>\n {hammer.format['Number'](count)}\n &nbsp; / &nbsp;\n {hammer.format['Number'](total)}\n </span>\n </div>\n );\n }\n\n renderFailedJobCounters() {\n const {operation} = this.props;\n const {failedJobs, totalFailedJobs} = operation;\n\n const className = 'operation-progress__counters';\n\n return (\n typeof totalFailedJobs !== 'undefined' && (\n <div className={className}>\n {this.renderCounter('failed', failedJobs, totalFailedJobs)}\n </div>\n )\n );\n }\n\n renderJobCounters() {\n const {operation} = this.props;\n const {state, totalJobs, failedJobs, completedJobs, runningJobs} = operation;\n\n const className = 'operation-progress__counters';\n\n return operation.isPreparing()\n ? null\n : typeof totalJobs !== 'undefined' && (\n <div className={className}>\n {operation.inIntermediateState() &&\n this.renderCounter('running', runningJobs, totalJobs)}\n {state === 'failed' && this.renderCounter('failed', failedJobs, totalJobs)}\n {this.renderCounter('completed', completedJobs, totalJobs)}\n </div>\n );\n }\n\n renderState() {\n const {\n showState,\n operation: {suspended, state},\n } = this.props;\n\n return !showState ? null : (\n <div className={block('state')}>\n <StatusLabel label={suspended ? 'suspended' : state} />\n </div>\n );\n }\n\n renderFailedProgressBar() {\n const {operation} = this.props;\n const {failedJobsProgress} = operation;\n\n const className = 'operation-progress__bar';\n\n return (\n <div className={className}>\n {this.renderState()}\n <Progress size=\"s\" value={failedJobsProgress || 0} theme=\"danger\" />\n </div>\n );\n }\n\n renderProgressBar() {\n const {operation} = this.props;\n const {state, jobsProgress, completedJobsProgress, runningJobsProgress} = operation;\n\n const RESOLVED_PROGRESS = 100;\n const PENDING_PROGRESS = 0;\n\n let progressBar;\n\n switch (state) {\n case 'running':\n progressBar = operation.inIntermediateState() && (\n <Progress\n size=\"s\"\n value={jobsProgress || 0}\n stack={[\n {\n value: completedJobsProgress || 0,\n theme: 'success',\n },\n {value: runningJobsProgress || 0, theme: 'info'},\n ]}\n />\n );\n break;\n case 'completed':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"success\" />;\n break;\n case 'failed':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"danger\" />;\n break;\n case 'aborted':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"default\" />;\n break;\n default:\n progressBar = <Progress size=\"s\" value={PENDING_PROGRESS || 0} />;\n break;\n }\n\n const className = 'operation-progress__bar';\n\n return (\n <div className={className}>\n {this.renderState()}\n {progressBar}\n </div>\n );\n }\n render() {\n const className = 'operation-progress';\n const {type} = this.props;\n return (\n <div className={className}>\n {type === 'running' ? this.renderProgressBar() : this.renderFailedProgressBar()}\n {type === 'running' ? this.renderJobCounters() : this.renderFailedJobCounters()}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n cluster: getCluster(state),\n };\n};\n\nexport default connect(mapStateToProps)(OperationProgress);\n","import React, {Component} from 'react';\nimport {withRouter} from 'react-router';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport trimEnd_ from 'lodash/trimEnd';\n\nimport unipika from '../../../../common/thor/unipika';\nimport OperationProgress from '../../../../pages/operations/OperationProgress/OperationProgress';\nimport {TemplatePools, TemplateWeight} from '../../../../components/MetaTable/MetaTable';\nimport templates, {renderText} from '../../../../components/templates/utils';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport {SubjectCard} from '../../../../components/SubjectLink/SubjectLink';\nimport Button from '../../../../components/Button/Button';\nimport Link from '../../../../components/Link/Link';\nimport Icon from '../../../../components/Icon/Icon';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport {\n showEditPoolsWeightsModal,\n updateOperationsList,\n} from '../../../../store/actions/operations';\nimport {performAction, prepareActions} from '../../../../utils/operations/detail';\nimport {promptAction} from '../../../../store/actions/actions';\nimport '../../../../components/templates/meta';\nimport OperationIOLink from '../../OperationIOLink/OperationIOLink';\n\nimport './OperationsListTable.scss';\n\nconst BLOCK_NAME = 'operations-list';\nconst block = cn(BLOCK_NAME);\n\nfunction renderIO(io) {\n const className = block('item-io');\n\n return (\n <span className={className}>\n {renderText(io.count, {\n mix: {block: BLOCK_NAME, elem: 'item-io-count'},\n })}\n {\n <OperationIOLink\n path={io.table}\n {...io}\n theme={'ghost'}\n className={block('item-io-table')}\n />\n }\n </span>\n );\n}\n\nfunction getTitle(item) {\n return typeof item.title !== 'undefined' ? item.title : item.$value;\n}\n\nfunction renderTitle(item, url) {\n const title = getTitle(item);\n return (\n <Link\n routed\n className=\"elements-ellipsis\"\n url={`${trimEnd_(url, '/')}/${item.$value}`}\n theme=\"primary\"\n >\n <span>{unipika.decode(title)}</span>\n </Link>\n );\n}\n\nfunction renderCopyTitle(item) {\n return (\n <ClipboardButton\n text={item.$value}\n view=\"flat-secondary\"\n size=\"s\"\n title={'Copy operation id'}\n className={block('item-title-copy')}\n />\n );\n}\n\nfunction UserPoolItem({awesomeIcon, children, title}) {\n return (\n <div className={block('user-pool-item')}>\n <div className={block('user-pool-item-icon')}>\n <Tooltip content={title} to={'left'} allowUnmounted>\n <Icon face={'solid'} awesome={awesomeIcon} />\n </Tooltip>\n </div>\n <div className={block('user-pool-item-name')}>{children}</div>\n </div>\n );\n}\n\nconst metaItem = templates.get('elements/meta').item;\n\nclass OperationsListTable extends Component {\n static propTypes = {\n // from connect\n operations: PropTypes.arrayOf(PropTypes.object).isRequired,\n initialLoading: PropTypes.bool.isRequired,\n cluster: PropTypes.string.isRequired,\n\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n promptAction: PropTypes.func.isRequired,\n updateOperationsList: PropTypes.func.isRequired,\n // from react-router\n match: PropTypes.shape({\n url: PropTypes.string.isRequired,\n }),\n };\n\n static renderType(item) {\n return (\n <span className={block('item-type')}>{hammer.format['ReadableField'](item.type)}</span>\n );\n }\n\n static renderStartTime(item) {\n return (\n <div className={block('item-start-time')}>\n <div className={block('item-start-time-human')}>\n {hammer.format['DateTime'](item.startTime, {\n format: 'human',\n })}\n </div>\n <div className={block('item-start-time-default')}>\n {hammer.format['DateTime'](item.startTime)}\n </div>\n <div className={block('item-duration')} title=\"Duration\">\n {hammer.format['TimeDuration'](item.duration)}\n </div>\n </div>\n );\n }\n\n static renderProgress(item) {\n return <OperationProgress operation={item} showState />;\n }\n\n renderTitle = (item) => {\n const {url} = this.props.match;\n\n return (\n <div>\n <div className={block('item-title')}>\n {renderCopyTitle(item)}\n {renderTitle(item, url)}\n </div>\n <div className={block('item-io')}>\n {item.input.count > 0 &&\n metaItem({\n key: 'in',\n valueTemplate: renderIO,\n value: item.input,\n })}\n {item.output.count > 0 &&\n metaItem({\n key: 'out',\n valueTemplate: renderIO,\n value: item.output,\n })}\n </div>\n </div>\n );\n };\n\n renderMultiplePools(item) {\n const {showEditPoolsWeightsModal} = this.props;\n\n return (\n <span className={block('multiply-pools')}>\n {item.pools.length}\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title=\"Show pools and weights\"\n className={block('view-button')}\n onClick={() => showEditPoolsWeightsModal(item, false)}\n >\n <Icon awesome=\"eye\" />\n &nbsp;View\n </Button>\n\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title=\"Edit pools and weights\"\n className={block('edit-button')}\n onClick={() => showEditPoolsWeightsModal(item)}\n >\n <Icon awesome=\"pencil\" />\n </Button>\n </span>\n );\n }\n\n renderUserPool = (item) => {\n const {showEditPoolsWeightsModal, cluster} = this.props;\n const {pools, user, state} = item;\n const multiplePools = pools?.length > 1 || false;\n\n return (\n <React.Fragment>\n <UserPoolItem awesomeIcon={'user'} title={'User'}>\n <SubjectCard name={user} />\n </UserPoolItem>\n <UserPoolItem awesomeIcon={'poll-people'} title={'Pool'}>\n {multiplePools ? (\n this.renderMultiplePools(item)\n ) : (\n <TemplatePools\n onEdit={() => showEditPoolsWeightsModal(item)}\n cluster={cluster}\n pools={pools}\n state={state}\n compact\n allowDetachEditBtn\n />\n )}\n </UserPoolItem>\n {!multiplePools && (\n <UserPoolItem awesomeIcon={'weight-hanging'} title={'Weight'}>\n <TemplateWeight\n onEdit={() => showEditPoolsWeightsModal(item)}\n operation={item}\n pool={pools[0]}\n />\n </UserPoolItem>\n )}\n </React.Fragment>\n );\n };\n\n renderActions = (operation) => {\n const {promptAction} = this.props;\n\n const actions = prepareActions(operation);\n\n return (\n <div className={block('actions')}>\n {actions.map((action) => {\n const {icon, name, $value} = action;\n const text = hammer.format['Readable'](name);\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the operation{' '}\n {$value}?\n </span>\n );\n const handler = ({currentOption}) =>\n performAction({\n ...action,\n operation,\n currentOption,\n }).then(() => {\n this.props.updateOperationsList();\n });\n\n return (\n <Button\n withTooltip\n size=\"m\"\n key={name}\n view=\"flat-secondary\"\n tooltipProps={{\n placement: 'bottom',\n content: text,\n }}\n onClick={() => promptAction({...action, message, handler})}\n >\n <Icon awesome={icon} />\n </Button>\n );\n })}\n </div>\n );\n };\n\n settings = {\n css: 'operations-list',\n theme: 'light',\n striped: false,\n virtualType: 'simple',\n getItemLink: (item) => `${this.props.match.url}/${item.$value}`,\n computeKey: (item) => item.$value,\n columns: {\n sets: {\n default: {\n items: ['title', 'type', 'user_pool', 'start_time', 'progress', 'actions'],\n },\n },\n mode: 'default',\n items: {\n title: {\n name: 'title',\n sort: false,\n align: 'left',\n },\n type: {\n name: 'type',\n sort: false,\n align: 'left',\n },\n user: {\n name: 'user',\n sort: false,\n align: 'left',\n },\n pool: {\n name: 'pool',\n sort: false,\n align: 'left',\n },\n user_pool: {\n name: 'user_pool',\n sort: false,\n caption: 'User / Pool',\n align: 'left',\n },\n start_time: {\n name: 'start_time',\n sort: false,\n align: 'left',\n },\n progress: {\n name: 'progress',\n sort: false,\n align: 'left',\n caption: 'State / Progress',\n },\n actions: {\n name: 'actions',\n caption: '',\n sort: false,\n align: 'right',\n },\n },\n },\n templates: {\n title: this.renderTitle,\n user_pool: this.renderUserPool,\n type: OperationsListTable.renderType,\n start_time: OperationsListTable.renderStartTime,\n progress: OperationsListTable.renderProgress,\n actions: this.renderActions,\n },\n };\n\n render() {\n const {operations, initialLoading} = this.props;\n\n return (\n <ElementsTable\n emptyDataDescription=\"Please, change your filtering settings to see search results\"\n isLoading={initialLoading}\n items={operations}\n {...this.settings}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations, global}) {\n const {isLoading, hasLoaded} = operations.list;\n const initialLoading = isLoading && !hasLoaded;\n\n return {\n initialLoading,\n cluster: global.cluster,\n operations: operations.list.operations,\n };\n}\n\nconst mapDispatchToProps = {\n showEditPoolsWeightsModal,\n promptAction,\n updateOperationsList,\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsListTable));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {connect} from 'react-redux';\nimport {Redirect, withRouter} from 'react-router';\n\nimport Filter from '../../../../components/Filter/Filter';\n\nimport {isGotoEnabled} from '../../../../utils/operations/list';\nimport {updateFilter} from '../../../../store/actions/operations';\nimport Button from '../../../../components/Button/Button';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\n\nclass OperationsTextFilter extends Component {\n static propTypes = {\n // from connect\n updateFilter: PropTypes.func.isRequired,\n activePreset: PropTypes.string.isRequired,\n filter: PropTypes.shape({\n type: PropTypes.string.isRequired,\n defaultValue: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n // from react-router\n match: PropTypes.object,\n };\n\n state = {\n transition: false,\n value: '',\n };\n\n get value() {\n const {value: stateValue} = this.state;\n const {value: propsValue} = this.props.filter;\n\n if (stateValue) {\n return stateValue;\n }\n\n return propsValue;\n }\n\n gotoDetails = (value = this.props.filter.value) => {\n if (isGotoEnabled(value)) {\n this.setState({transition: true, value});\n }\n };\n\n handleKeyDown = (evt) => {\n if (evt.key === 'Enter') {\n this.gotoDetails(evt.target.value);\n }\n };\n\n render() {\n const {\n match,\n updateFilter,\n activePreset,\n filter: {value},\n } = this.props;\n const {transition} = this.state;\n\n return transition ? (\n <Redirect to={`${match.url}/${this.value}`} />\n ) : (\n <div className={block('toolbar-text-filter', tbBlock('component'))}>\n <Filter\n key={activePreset}\n placeholder=\"Filter operations...\"\n size=\"m\"\n value={this.value}\n onChange={(newValue) => updateFilter('text', newValue)}\n debounce={500}\n onKeyDown={this.handleKeyDown}\n pin=\"round-brick\"\n />\n <Button\n view=\"action\"\n pin=\"brick-round\"\n onClick={() => this.gotoDetails(value)}\n disabled={!isGotoEnabled(this.value)}\n >\n Go to operation\n </Button>\n </div>\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n return {\n filter: operations.list.filters.text,\n activePreset: operations.list.activePreset,\n };\n}\n\nconst mapDispatchToProps = {updateFilter};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsTextFilter));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport moment from 'moment';\n\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\n\nimport './TimePicker.scss';\n\nconst bForm = cn('elements-form');\nconst block = cn('timepicker');\nconst DISPLAY_FORMAT = 'HH:mm';\nconst invalidTitle = `Time should be specified as HH:MM.\nEstimated start time should be less than estimated finish time.`;\n\nexport const MomentObjectType = PropTypes.shape({\n _isAMomentObject: PropTypes.oneOf([true]),\n});\n\nexport default class TimePicker extends Component {\n static propTypes = {\n date: PropTypes.oneOfType([PropTypes.string, MomentObjectType]).isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n minDate: PropTypes.oneOfType([PropTypes.string, MomentObjectType]),\n };\n\n static defaultProps = {\n minDate: null,\n disabled: false,\n };\n\n state = {\n time: '',\n date: '',\n };\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.date !== prevState.date) {\n return {\n time: moment(nextProps.date).format(DISPLAY_FORMAT),\n date: nextProps.date,\n };\n }\n\n return null;\n }\n\n _checkInputTimeValidity(textTime) {\n return (\n new RegExp('[0-9]{2}:[0-9]{2}').test(textTime) &&\n moment(textTime, DISPLAY_FORMAT).isValid()\n );\n }\n\n _checkDateValidity(textDate) {\n const {minDate} = this.props;\n const newDate = moment(textDate).unix();\n\n return minDate ? newDate > moment(minDate).unix() : true;\n }\n\n _prepareOutputDate(textTime) {\n const {date} = this.state;\n const currentDate = moment(date);\n const newDate = moment(textTime, DISPLAY_FORMAT);\n\n newDate.year(currentDate.year());\n newDate.month(currentDate.month());\n newDate.date(currentDate.date());\n\n return newDate.toISOString();\n }\n\n handleTimeChange = (newTime) => {\n const {onChange} = this.props;\n const isValidFormat = this._checkInputTimeValidity(newTime);\n\n this.setState({time: newTime});\n\n if (isValidFormat) {\n const newDate = this._prepareOutputDate(newTime);\n\n onChange(newDate);\n }\n };\n\n renderIcon(icon) {\n return <Icon awesome={icon} />;\n }\n\n render() {\n const {time} = this.state;\n const {disabled} = this.props;\n const newDate = this._prepareOutputDate(time);\n\n const isValidFormat = this._checkInputTimeValidity(time);\n const isValidDate = this._checkDateValidity(newDate);\n const isValid = isValidFormat && isValidDate;\n\n const title = isValid ? '' : invalidTitle;\n\n return (\n <div className={bForm('field', {theme: isValid ? 'valid' : 'invalid'}, block())}>\n <TextInput\n theme=\"normal\"\n size=\"s\"\n value={time}\n disabled={disabled}\n onUpdate={this.handleTimeChange}\n iconRight={this.renderIcon('clock')}\n controlAttrs={{\n maxLength: 5,\n title,\n }}\n className={block('control')}\n placeholder={'HH:mm'}\n />\n </div>\n );\n }\n}\n","import React, {useCallback, useState} from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {RootState} from '../../../../store/reducers';\nimport {showArchiveOperations, showCurrentOperations} from '../../../../store/actions/operations';\nimport {OPERATIONS_DATA_MODE} from '../../../../constants/operations';\n\nimport mapValues_ from 'lodash/mapValues';\nimport values_ from 'lodash/values';\n\nimport moment from 'moment';\n\nimport {Button} from '@gravity-ui/uikit';\nimport Icon from '../../../../components/Icon/Icon';\nimport Modal from '../../../../components/Modal/Modal';\nimport TimePicker from '../../../../components/TimePicker/TimePicker';\nimport CustomRadioButton from '../../../../components/RadioButton/RadioButton';\nimport {SelectButton} from '../../../../components/Button/Button';\nimport {Datepicker} from '../../../../components/common/Datepicker';\n\nimport './OperationsArchiveFilter.scss';\nimport {ValueOf} from '../../../../../@types/types';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\nconst formBlock = cn('elements-form');\n\nconst datePickerProps = {\n range: false,\n controlSize: 's',\n format: 'dd-MM-yyyy',\n outputFormat: 'datetime',\n className: 'operations-datepicker-control',\n popupClassName: 'operations-datepicker-popup',\n} as const;\n\nconst radioButtonTypes = {\n custom: {\n text: 'custom',\n value: 'custom',\n },\n twoHours: {\n text: 'last 2 hours',\n value: 'twoHours',\n hours: 2,\n },\n day: {\n text: 'last day',\n value: 'day',\n hours: 24,\n },\n week: {\n text: 'last week',\n value: 'week',\n hours: 168,\n },\n} as const;\n\ninterface State {\n modalVisible: boolean;\n activeTypeValue: ValueOf<typeof radioButtonTypes>['value'];\n from?: string;\n to?: string;\n}\n\nexport default function OperationsArchiveFilter() {\n const {\n dataMode,\n timeRange: {from, to},\n } = useSelector((store: RootState) => store.operations.list);\n\n const dispatch = useDispatch();\n\n const [state, setState] = useState<State>({\n modalVisible: false,\n activeTypeValue: radioButtonTypes.custom.value,\n from: from || moment().subtract(6, 'hours').toISOString(),\n to: to || moment().toISOString(),\n });\n\n const showModal = useCallback(() => {\n setState({\n ...state,\n modalVisible: true,\n });\n }, [state]);\n\n const hideModal = useCallback(() => {\n setState({...state, modalVisible: false});\n }, [state]);\n\n const resetTimeRange = useCallback(() => {\n hideModal();\n dispatch(showCurrentOperations());\n }, [dispatch, hideModal]);\n\n const applyTimeRange = useCallback(() => {\n hideModal();\n if (state.activeTypeValue === 'custom') {\n dispatch(showArchiveOperations(state.from, state.to));\n } else {\n dispatch(\n showArchiveOperations(\n moment()\n .subtract(radioButtonTypes[state.activeTypeValue].hours, 'hours')\n .toISOString(),\n moment().toISOString(),\n ),\n );\n }\n }, [dispatch, hideModal, state]);\n\n const prepareText = useCallback(() => {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n return 'Current operations';\n } else {\n const format = 'DD-MM-YYYY HH:mm';\n const fromPart = moment(from).format(format);\n const toPart = moment(to).format(format);\n return fromPart + ' — ' + toPart;\n }\n }, [dataMode, from, to]);\n\n const updateDate = useCallback(\n (date: Pick<State, 'from' | 'to'>) => {\n const dateWithHours = mapValues_(date, (field, key) => {\n if (field) {\n const {hours, minutes} = moment(state[key as 'from' | 'to']).toObject();\n return moment(field).add({hours, minutes}).toISOString();\n }\n return field;\n });\n setState({...state, ...dateWithHours});\n },\n [state],\n );\n\n const updateTime = useCallback(\n (date: {from?: string; to?: string}) => setState({...state, ...date}),\n [state],\n );\n\n const handleActiveTypeChange = useCallback(\n (ev: React.ChangeEvent<HTMLInputElement>) => {\n const activeTypeValue = ev.target.value as ValueOf<typeof radioButtonTypes>['value'];\n setState({\n ...state,\n activeTypeValue,\n ...(activeTypeValue !== 'custom' && {\n from: moment()\n .subtract(radioButtonTypes[activeTypeValue].hours, 'hours')\n .toISOString(),\n to: moment().toISOString(),\n }),\n });\n },\n [state],\n );\n\n const text = prepareText();\n const checked = dataMode === OPERATIONS_DATA_MODE.ARCHIVE;\n const disabled = state.activeTypeValue !== radioButtonTypes.custom.value;\n\n return (\n <div className={block('archive-range', tbBlock('component'))}>\n <Modal\n title=\"Choose range\"\n size=\"s\"\n confirmText=\"Apply\"\n cancelText=\"Show current\"\n cl={formBlock('time-modal')}\n visible={state.modalVisible}\n content={\n <div className={formBlock(null, 'operations-archive-filter')}>\n <div className={formBlock('button-group')}>\n <CustomRadioButton\n name=\"time-range\"\n items={values_(radioButtonTypes)}\n value={state.activeTypeValue}\n onChange={handleActiveTypeChange}\n />\n </div>\n <div>\n <div className={formBlock('label')}>From</div>\n <div className={formBlock('field-group')}>\n <span className={formBlock('field')}>\n <Datepicker\n {...datePickerProps}\n disabled={disabled}\n from={state.from}\n onUpdate={({from: newFrom}) =>\n newFrom && updateDate({from: newFrom})\n }\n />\n </span>\n <span className={formBlock('field')}>\n {state.from && (\n <TimePicker\n disabled={disabled}\n date={state.from}\n onChange={(newDate: string) =>\n updateTime({from: newDate})\n }\n />\n )}\n </span>\n </div>\n <div className={formBlock('label')}>To</div>\n <div className={formBlock('field-group')}>\n <span className={formBlock('field')}>\n <Datepicker\n {...datePickerProps}\n disabled={disabled}\n to={state.to}\n onUpdate={({from: newTo}) =>\n newTo && updateDate({to: newTo})\n }\n />\n </span>\n <span className={formBlock('field')}>\n {state.to && (\n <TimePicker\n disabled={disabled}\n date={state.to}\n onChange={(newDate: string) =>\n updateTime({to: newDate})\n }\n />\n )}\n </span>\n </div>\n </div>\n </div>\n }\n renderCustomCancel={(className: string | undefined) => (\n <Button title=\"Show current\" className={className} onClick={resetTimeRange}>\n Show current\n </Button>\n )}\n onCancel={hideModal}\n onConfirm={applyTimeRange}\n />\n <SelectButton type=\"submit\" selected={checked} title={text} onClick={showModal}>\n {text}\n <Icon awesome=\"calendar-alt\" />\n </SelectButton>\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport map_ from 'lodash/map';\n\nimport hammer from '../../../common/hammer';\nimport Select from '../../../components/Select/Select';\nimport {itemsProps} from '../../../components/Suggest/Suggest';\n\nexport default class OperationSelectFilter extends Component {\n static propTypes = {\n // from props\n name: PropTypes.string.isRequired,\n withCounters: PropTypes.bool,\n type: PropTypes.string,\n // from connect\n updateFilter: PropTypes.func.isRequired,\n states: itemsProps,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n counters: PropTypes.object,\n };\n\n static defaultProps = {\n withCounters: true,\n type: 'radio',\n };\n\n get items() {\n const {value, states, counters, withCounters} = this.props;\n\n let found = false;\n const res = map_(states, (state) => {\n const stateName = typeof state === 'string' ? state : state.name;\n const count = counters && (counters[stateName] || 0);\n\n if (stateName === value) {\n found = true;\n }\n\n return {\n value: stateName,\n text: state.caption || hammer.format['ReadableField'](stateName),\n count: withCounters ? count : undefined,\n };\n });\n\n if ('string' === typeof value && !found) {\n res.push({\n value,\n text: hammer.format.ReadableField(value),\n });\n }\n\n return res;\n }\n\n onRadioChange = (val) => this.props.updateFilter(this.props.name, val);\n onCheckChange = (val) => this.props.updateFilter(this.props.name, val);\n\n render() {\n const {name, value, type, placeholder, ...props} = this.props;\n const {multiple} = this.props;\n\n const placeHolder = 'function' === typeof placeholder ? placeholder(value) : placeholder;\n\n const onChange = type === 'radio' ? this.onRadioChange : this.onCheckChange;\n\n return (\n <Select\n {...props}\n placeholder={placeHolder}\n value={Array.isArray(value) ? value : [value]}\n type={type}\n items={this.items}\n onUpdate={(vals) => onChange(multiple ? vals : vals[0])}\n label={hammer.format['FirstUppercase'](name) + ':'}\n hideFilter={true}\n />\n );\n }\n}\n","import {connect} from 'react-redux';\n\nimport OperationSelectFilter from '../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\nimport {updateFilter} from '../../../../store/actions/operations/list';\nimport {getActualValue, getCounters} from '../../../../pages/operations/selectors';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.list.filters;\n const {name, states} = ownProps;\n const {defaultValue, value, counters: rawCounters} = filters[name];\n\n const counters = getCounters(name, states, rawCounters);\n\n return {\n value: getActualValue(value, defaultValue),\n defaultValue,\n counters,\n };\n}\n\nexport default connect(mapStateToProps, {updateFilter})(OperationSelectFilter);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Pagination from '../../../../components/Pagination/Pagination';\nimport {gotoOperationsPage} from '../../../../store/actions/operations';\nimport {OPERATIONS_PAGE} from '../../../../constants/operations';\n\nclass OperationsListPaginator extends Component {\n static propTypes = {\n // from connect\n gotoOperationsPage: PropTypes.func.isRequired,\n firstPageReached: PropTypes.bool.isRequired,\n lastPageReached: PropTypes.bool.isRequired,\n };\n\n gotoFirstPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.FIRST);\n };\n gotoLastPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.LAST);\n };\n gotoNextPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.NEXT);\n };\n gotoPrevPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.PREV);\n };\n\n render() {\n const {firstPageReached, lastPageReached} = this.props;\n\n return (\n <Pagination\n size=\"s\"\n first={{\n handler: this.gotoFirstPage,\n disabled: firstPageReached,\n }}\n previous={{\n handler: this.gotoPrevPage,\n hotkeyHandler: this.gotoPrevPage,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n }}\n next={{\n handler: this.gotoNextPage,\n hotkeyHandler: this.gotoNextPage,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n }}\n last={{\n handler: this.gotoLastPage,\n disabled: lastPageReached,\n }}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {firstPageReached, lastPageReached} = operations.list.cursor;\n return {firstPageReached, lastPageReached};\n}\n\nconst mapDispatchToProps = {\n gotoOperationsPage,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OperationsListPaginator);\n","import {createSelector} from 'reselect';\nimport filter_ from 'lodash/filter';\nimport reduce_ from 'lodash/reduce';\nimport every_ from 'lodash/every';\nimport isEqual_ from 'lodash/isEqual';\n\nimport {RootState} from '../../../store/reducers';\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../utils/utils';\nimport {getSettingsDataRaw} from '../settings-ts';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\nimport {NS_SEPARATOR} from '../../../../shared/utils/settings';\nimport {\n OPERATIONS_LIST_DEFAULT_FILTERS,\n OPERATIONS_LIST_RUNNING_PRESET,\n} from '../../../constants/operations/list';\nimport {getCurrentUserName} from '../global';\nimport {getOperationsListFilters} from '.';\n\nexport const getOperationsListIsFinalState = createSelector(\n [\n (state: RootState) => state.operations.list.isLoading,\n (state: RootState) => state.operations.list.hasLoaded,\n (state: RootState) => state.operations.list.hasError,\n ],\n (loading, loaded, error) => {\n const status = calculateLoadingStatus(loading, loaded, error);\n return isFinalLoadingStatus(status);\n },\n);\n\ninterface PresetItem {\n name: string;\n filters: Record<string, any>;\n}\n\n/**\n * \n * \n \n\n \n\n * \n * @param login \n * @returns \n */\n\nfunction createPreconfiguredPresets(login: string) {\n return {\n [OPERATIONS_LIST_RUNNING_PRESET]: {\n name: 'My/Running',\n preconfigured: true,\n filters: {\n ...OPERATIONS_LIST_DEFAULT_FILTERS,\n user: login,\n state: 'running',\n },\n },\n ['failed']: {\n name: 'My/Failed',\n preconfigured: true,\n filters: {\n ...OPERATIONS_LIST_DEFAULT_FILTERS,\n user: login,\n state: 'failed',\n },\n },\n };\n}\n\nexport const getOperationsListFilterPresets = createSelector(\n [getSettingsDataRaw, getCurrentUserName],\n (data, login) => {\n const collectionKeys = filter_(Object.keys(data), (path) =>\n path.startsWith(NAMESPACES.OPERATION_PRESETS.value),\n );\n return {\n ...createPreconfiguredPresets(login),\n ...reduce_(\n collectionKeys,\n (collection, path) => {\n const settingName = path.slice(\n (NAMESPACES.OPERATION_PRESETS.value + NS_SEPARATOR).length,\n );\n collection[settingName] = {...(data as Record<string, PresetItem>)[path]};\n return collection;\n },\n {} as Record<string, PresetItem>,\n ),\n };\n },\n);\n\nexport const getOperationsListActivePresets = createSelector(\n [getOperationsListFilters, getOperationsListFilterPresets],\n (selectedFilters, presets) => {\n return reduce_(\n presets,\n (acc, {filters}, presetId) => {\n const active = every_(filters, (value, k) => {\n const key: keyof typeof selectedFilters = k as any;\n return isEqual_(selectedFilters[key]?.value, value);\n });\n if (active) {\n acc.add(presetId);\n }\n return acc;\n },\n new Set<string>(),\n );\n },\n);\n","import React, {Component} from 'react';\nimport {withRouter} from 'react-router';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, Checkbox, TextInput} from '@gravity-ui/uikit';\n\nimport {NAMESPACES} from '../../../../../shared/constants/settings';\nimport {\n applyFilterPreset,\n removeFilterPreset,\n saveFilterPreset,\n toggleSaveFilterPresetDialog,\n} from '../../../../store/actions/operations';\nimport {DEFAULT_PRESET_SETTING} from '../../../../constants/operations';\nimport {OPERATIONS_LIST_RUNNING_PRESET} from '../../../../constants/operations/list';\n\nimport {makeGetSetting} from '../../../../store/selectors/settings';\nimport {\n getOperationsListActivePresets,\n getOperationsListFilterPresets,\n} from '../../../../store/selectors/operations/operations-list';\nimport Modal from '../../../../components/Modal/Modal';\nimport Icon from '../../../../components/Icon/Icon';\n\nimport './OperationsFilterPresets.scss';\n\nconst ELEMENT = 'toolbar-presets';\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\n\nclass OperationsFilterPresets extends Component {\n static propTypes = {\n // from connect\n applyFilterPreset: PropTypes.func.isRequired,\n removeFilterPreset: PropTypes.func.isRequired,\n saveFilterPreset: PropTypes.func.isRequired,\n toggleSaveFilterPresetDialog: PropTypes.func.isRequired,\n presets: PropTypes.objectOf(\n PropTypes.shape({\n failedJobs: PropTypes.bool,\n pool: PropTypes.string,\n state: PropTypes.string,\n text: PropTypes.string,\n type: PropTypes.string,\n user: PropTypes.string,\n }),\n ).isRequired,\n defaultPreset: PropTypes.string,\n dialog: PropTypes.shape({\n isSaving: PropTypes.bool.isRequired,\n name: PropTypes.string.isRequired,\n isDefault: PropTypes.bool.isRequired,\n }).isRequired,\n // from react-router\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n };\n\n state = {\n presetName: '',\n isPresetDefault: false,\n };\n\n componentDidMount() {\n const {applyFilterPreset, defaultPreset, presets, location} = this.props;\n\n if (location.search.length <= 1) {\n applyFilterPreset(presets[defaultPreset], false);\n }\n }\n\n onConfirm = () => {\n const {saveFilterPreset, toggleSaveFilterPresetDialog} = this.props;\n const {presetName, isPresetDefault} = this.state;\n saveFilterPreset(presetName, isPresetDefault).then(() => {\n this.setState({\n presetName: '',\n isPresetDefault: false,\n });\n toggleSaveFilterPresetDialog();\n });\n };\n\n makeRemoveHandler = (presetId) => {\n return (event) => {\n event.stopPropagation();\n this.props.removeFilterPreset(presetId);\n };\n };\n\n isPresetNameEmpty = () => !this.state.presetName;\n\n renderSavePresetDialog() {\n const {dialog, toggleSaveFilterPresetDialog} = this.props;\n const {presetName, isPresetDefault} = this.state;\n\n const block = cn('elements-form');\n const INPUT_ID = 'save-preset-filter';\n\n return (\n <Modal\n title=\"Save filter\"\n confirmText=\"Save\"\n visible={dialog.isSaving}\n onCancel={toggleSaveFilterPresetDialog}\n onConfirm={this.onConfirm}\n isConfirmDisabled={this.isPresetNameEmpty}\n content={\n <React.Fragment>\n <div className={block('field')}>\n <label\n htmlFor={INPUT_ID}\n className={block('label')}\n title=\"Filter name\"\n >\n Filter name\n </label>\n <TextInput\n id={INPUT_ID}\n value={presetName}\n onUpdate={(presetName) => this.setState({presetName})}\n autoFocus\n />\n </div>\n <div className={block('field')}>\n <Checkbox\n checked={isPresetDefault}\n onChange={(isPresetDefault) => this.setState({isPresetDefault})}\n >\n Default filter\n </Checkbox>\n </div>\n </React.Fragment>\n }\n />\n );\n }\n\n render() {\n const {defaultPreset, presets, applyFilterPreset, activePresets} = this.props;\n\n return (\n <div className={block(ELEMENT, tbBlock('container'))}>\n {this.renderSavePresetDialog()}\n {map_(presets, (preset, presetId) => {\n const active = activePresets.has(presetId);\n return (\n <div className={block(ELEMENT, tbBlock('component'))} key={presetId}>\n <Button\n className={block('preset', {active})}\n onClick={() => applyFilterPreset(preset)}\n role=\"button\"\n selected={active}\n >\n <span className={block('preset-content')}>\n <span className={block('preset-name')}>\n {defaultPreset === presetId && <Icon awesome=\"star-alt\" />}\n &ensp;\n {preset.name}\n </span>\n {!preset.preconfigured && (\n <span\n className={block('preset-remove')}\n onClick={this.makeRemoveHandler(presetId)}\n >\n <Icon face=\"solid\" awesome=\"times\" />\n </span>\n )}\n </span>\n </Button>\n </div>\n );\n })}\n </div>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {operations} = state;\n\n const getSetting = makeGetSetting(state);\n let defaultPreset = getSetting(DEFAULT_PRESET_SETTING, NAMESPACES.OPERATION);\n const presets = getOperationsListFilterPresets(state);\n\n if (!presets[defaultPreset]) {\n defaultPreset = OPERATIONS_LIST_RUNNING_PRESET;\n }\n\n return {\n presets,\n activePresets: getOperationsListActivePresets(state),\n defaultPreset,\n dialog: operations.list.savePresetDialog,\n };\n}\n\nconst mapDispatchToProps = {\n applyFilterPreset,\n removeFilterPreset,\n saveFilterPreset,\n toggleSaveFilterPresetDialog,\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsFilterPresets));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport filter_ from 'lodash/filter';\n\nimport Suggest, {itemsProps} from '../../../components/Suggest/Suggest';\n\nexport default class OperationSuggestFilter extends Component {\n static propTypes = {\n // from props\n name: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n statesProvider: PropTypes.func,\n // from connect\n updateFilter: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n defaultValue: PropTypes.string.isRequired,\n states: itemsProps,\n pin: PropTypes.string,\n };\n\n static simpleSuggestLoader(items, text) {\n text = text.toLowerCase();\n\n items = filter_(items, (item) => {\n const itemText = typeof item === 'string' ? item : item.value;\n\n return text ? itemText.toLowerCase().indexOf(text) !== -1 : true;\n });\n\n return items;\n }\n\n render() {\n const {states, name, placeholder, updateFilter, value, defaultValue, pin} = this.props;\n\n return (\n <Suggest\n key={value}\n apply={(newValue) => updateFilter(name, newValue || defaultValue)}\n filter={OperationSuggestFilter.simpleSuggestLoader}\n text={value !== defaultValue ? value : ''}\n items={states}\n placeholder={placeholder}\n zIndexGroupLevel={1}\n clear={() => updateFilter(name, defaultValue)}\n pin={pin}\n />\n );\n }\n}\n","import React from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\n\nimport OperationSuggestFilter from '../../../../pages/operations/OperationSuggestFilter/OperationSuggestFilter';\nimport {updateFilter} from '../../../../store/actions/operations/list';\nimport {getActualValue} from '../../../../pages/operations/selectors';\nimport {\n getOperationsListFilters,\n getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838,\n getOperationsPoolSuggestions,\n getOperationsPoolTreeSuggestions,\n getOperationsUserSuggestions,\n} from '../../../../store/selectors/operations';\nimport {RootState} from '../../../../store/reducers';\nimport {OperationsListFilterName} from '../../../../store/reducers/operations/list/list';\nimport UIFactory from '../../../../UIFactory';\n\nconst mapStateToPropsByFilterName = (state: RootState, name: OperationsListFilterName) => {\n const filters = getOperationsListFilters(state);\n const {defaultValue, value} = filters[name];\n\n return {\n name,\n value: getActualValue(value, defaultValue),\n defaultValue,\n };\n};\n\nconst mapPoolTreeStateToProps = (state: RootState) => {\n return {\n ...mapStateToPropsByFilterName(state, 'poolTree'),\n states: getOperationsPoolTreeSuggestions(state),\n placeholder: 'Pool tree...',\n };\n};\n\nexport const OperationsListPoolTreeSuggestFilter = connect(mapPoolTreeStateToProps, {updateFilter})(\n OperationSuggestFilter,\n);\n\nconst mapPoolStateToProps = (state: RootState) => {\n return {\n ...mapStateToPropsByFilterName(state, 'pool'),\n states: getOperationsPoolSuggestions(state),\n placeholder: 'Filter pool...',\n };\n};\nexport const OperationsListPoolSuggestFilter = connect(mapPoolStateToProps, {\n updateFilter,\n})(OperationSuggestFilter);\n\nconst mapUserStateToProps = (state: RootState) => {\n const fixedStartedByFilter = getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838(state);\n\n return {\n ...mapStateToPropsByFilterName(state, 'user'),\n states: getOperationsUserSuggestions(state),\n placeholder: fixedStartedByFilter || 'Started by...',\n };\n};\nexport const OperationsListUserSuggestFilter = connect(mapUserStateToProps, {\n updateFilter,\n})(OperationSuggestFilter);\n\nfunction OperationsAccessibleForFilterImpl() {\n const dispatch = useDispatch();\n const {\n subject: {value, defaultValue},\n } = useSelector(getOperationsListFilters);\n\n const actualValue = getActualValue(value, defaultValue);\n\n return (\n <div>\n {UIFactory.renderUserSuggest({\n value: typeof actualValue === 'string' && actualValue ? [actualValue] : [],\n onUpdate: ([first] = []) => {\n dispatch(updateFilter('subject', first));\n },\n width: 'max',\n pin: 'round-clear',\n })}\n </div>\n );\n}\n\nexport const OperationsAccessibleForFilter = React.memo(OperationsAccessibleForFilterImpl);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {getAllUserNames} from '../../../../store/selectors/global';\nimport OperationsTextFilter from './OperationsTextFilter';\nimport OperationsArchiveFilter from './OperationsArchiveFilter';\nimport OperationsSelectFilter from './OperationsSelectFilter';\n\nimport OperationsListPaginator from './OperationsListPaginator';\nimport OperationsFilterPresets from './OperationsFilterPresets';\nimport {\n toggleSaveFilterPresetDialog,\n updateFilter,\n} from '../../../../store/actions/operations/list';\n\nimport {\n OperationsAccessibleForFilter,\n OperationsListPoolSuggestFilter,\n OperationsListPoolTreeSuggestFilter,\n OperationsListUserSuggestFilter,\n} from '../../../../pages/operations/OperationsList/OperationsListToolbar/OperationsListSuggestFilters';\nimport {getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838} from '../../../../store/selectors/operations';\nimport Button, {SelectButton} from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport {PoolTreesLoader} from '../../../../hooks/global-pool-trees';\n\nimport './OperationsListToolbar.scss';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\nconst tbComp = tbBlock('component');\n\nclass OperationsListToolbar extends React.PureComponent {\n static propTypes = {\n // from connect\n updateFilter: PropTypes.func.isRequired,\n toggleSaveFilterPresetDialog: PropTypes.func.isRequired,\n failedJobsFilter: PropTypes.shape({\n type: PropTypes.string.isRequired,\n defaultValue: PropTypes.bool.isRequired,\n value: PropTypes.bool,\n }).isRequired,\n subjects: PropTypes.arrayOf(PropTypes.string).isRequired,\n // from props\n inDashboard: PropTypes.bool,\n };\n\n preparePermissionsPlaceholder(permissions) {\n if (permissions.length === 0) {\n return 'Select...';\n }\n\n const labels = map_(permissions, (permission) => permission[0].toUpperCase());\n\n return labels.join(', ');\n }\n\n renderTopSection() {\n return (\n <div className={tbBlock('container')}>\n <OperationsTextFilter />\n\n <div className={block('toolbar-pool-filter', tbComp)}>\n <PoolTreesLoader />\n <OperationsListPoolTreeSuggestFilter pin=\"round-clear\" />\n <OperationsListPoolSuggestFilter pin=\"brick-round\" />\n </div>\n\n <OperationsArchiveFilter />\n\n <div className={block('toolbar-pagination', tbComp)}>\n <OperationsListPaginator />\n </div>\n </div>\n );\n }\n\n renderBottomSection() {\n const {failedJobsFilter, updateFilter, toggleSaveFilterPresetDialog} = this.props;\n\n return (\n <div className={tbBlock('container')}>\n <div className={block('toolbar-user-filter', tbComp)}>\n <OperationsListUserSuggestFilter />\n </div>\n\n <div className={block('toolbar-access-filters', tbComp)}>\n <OperationsAccessibleForFilter pin=\"round-clear\" />\n <OperationsSelectFilter\n type=\"check\"\n name=\"permissions\"\n withCounters={false}\n placeholder={this.preparePermissionsPlaceholder}\n states={[\n {\n name: 'read',\n show: true,\n },\n {\n name: 'manage',\n show: true,\n },\n ]}\n width={170}\n multiple\n pin=\"brick-round\"\n />\n </div>\n\n <div className={block('toolbar-state-filter', tbComp)}>\n <OperationsSelectFilter\n name=\"state\"\n states={[\n {\n name: 'all',\n caption: 'All states',\n show: true,\n },\n {\n name: 'pending',\n show: true,\n },\n {\n name: 'running',\n show: true,\n },\n {\n name: 'completed',\n show: true,\n },\n {\n name: 'failed',\n show: true,\n },\n {\n name: 'aborted',\n show: true,\n },\n ]}\n width={200}\n />\n </div>\n\n <div className={block('toolbar-type-filter', tbComp)}>\n <OperationsSelectFilter\n name=\"type\"\n states={[\n {\n name: 'all',\n caption: 'All types',\n show: true,\n },\n {\n name: 'map',\n show: true,\n },\n {\n name: 'reduce',\n show: true,\n },\n {\n name: 'map_reduce',\n show: true,\n },\n {\n name: 'join_reduce',\n show: true,\n },\n {\n name: 'merge',\n show: true,\n },\n {\n name: 'sort',\n show: true,\n },\n {\n name: 'erase',\n show: true,\n },\n {\n name: 'remote_copy',\n show: true,\n },\n {\n name: 'vanilla',\n show: true,\n },\n ]}\n width={200}\n />\n </div>\n\n <div className={block('failed-jobs', tbComp)}>\n <SelectButton\n selected={failedJobsFilter.value}\n onClick={() => updateFilter('failedJobs', !failedJobsFilter.value)}\n >\n Only ops with failed jobs:{' '}\n <span className={block('only-jobs-with-failed-counter')}>\n {failedJobsFilter.counter}\n </span>\n </SelectButton>\n </div>\n\n <div className={block('toolbar-save-preset', tbComp)}>\n <Button\n title=\"Save filter\"\n onClick={toggleSaveFilterPresetDialog}\n className={block('save-preset')}\n >\n <Icon awesome={'save'} face={'regular'} />\n &nbsp; Save filter\n </Button>\n </div>\n </div>\n );\n }\n\n renderWarning_uiissue_2838() {\n return (\n <div className={block('ytfront-2838')}>\n At the moment there is the unresolved performance issue with getting unfiltered list\n of operations from archive,\n <br />\n as a temporary solution UI adds current username to &quot;Started by&quot; filter if\n there are no any other filters specified.\n </div>\n );\n }\n\n render() {\n const {fixedStartedByFilter} = this.props;\n\n return (\n <div className={block('toolbar', tbBlock())}>\n {this.renderTopSection()}\n {this.renderBottomSection()}\n {fixedStartedByFilter && this.renderWarning_uiissue_2838()}\n <OperationsFilterPresets />\n </div>\n );\n }\n}\n\nfunction OperationsListToolbarHooked() {\n const subjects = useSelector(getAllUserNames);\n const {failedJobs} = useSelector((state) => state.operations.list.filters) || {};\n const fixedStartedByFilter = useSelector(\n getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838,\n );\n\n const dispatch = useDispatch();\n const handleUpdateFilter = React.useCallback(\n (...args) => {\n dispatch(updateFilter(...args));\n },\n [dispatch],\n );\n\n const handleToggleSaveFilterPresetDialog = React.useCallback(\n (...args) => {\n dispatch(toggleSaveFilterPresetDialog(...args));\n },\n [dispatch],\n );\n\n return (\n <OperationsListToolbar\n {...{\n subjects,\n failedJobsFilter: failedJobs,\n fixedStartedByFilter,\n }}\n updateFilter={handleUpdateFilter}\n toggleSaveFilterPresetDialog={handleToggleSaveFilterPresetDialog}\n />\n );\n}\n\nexport default React.memo(OperationsListToolbarHooked);\n","import React, {Component} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport moment from 'moment';\n\nimport Error from '../../../components/Error/Error';\n\nimport OperationsListTable from './OperationsListTable/OperationsListTable';\nimport OperationsListToolbar from './OperationsListToolbar/OperationsListToolbar';\nimport {updateOperationsByParams} from '../../../store/actions/operations/list';\nimport {useMemoizedIfEqual, useUpdater} from '../../../hooks/use-updater';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../rum/RumUiContext';\nimport {getOperationsListIsFinalState} from '../../../store/selectors/operations/operations-list';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getListRequestParameters} from '../../../store/actions/operations/utils';\n\nconst block = cn('operations-list');\n\nfunction OperationListUpdater({timeRange}) {\n const dispatch = useDispatch();\n\n const cluster = useSelector(getCluster);\n const parameters = useSelector(getListRequestParameters);\n\n const params = useMemoizedIfEqual(cluster, parameters);\n\n const updateFn = React.useCallback(() => {\n dispatch(updateOperationsByParams(...params));\n }, [dispatch, params]);\n\n useUpdater(updateFn, {onlyOnce: isBigTimeRange(timeRange)});\n\n return null;\n}\n\nfunction isBigTimeRange(timeRange) {\n const {from, to} = timeRange;\n if (typeof from === 'string' && typeof to === 'string') {\n const dateFrom = moment(from);\n const dateTo = moment(to);\n const diff = dateTo.diff(dateFrom);\n\n return moment.duration(diff).asDays() >= 1;\n }\n\n return false;\n}\n\nclass OperationsList extends Component {\n static propTypes = {\n // from connect\n isLoading: PropTypes.bool.isRequired,\n hasLoaded: PropTypes.bool.isRequired,\n hasError: PropTypes.bool.isRequired,\n error: PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.object,\n }),\n timeRange: PropTypes.shape({\n from: PropTypes.string,\n to: PropTypes.string,\n }).isRequired,\n // from props\n inDashboard: PropTypes.bool,\n };\n\n static defaultProps = {\n inDashboard: false,\n };\n\n isTimeRangeChanged(prevTimeRange) {\n const {timeRange} = this.props;\n\n return timeRange.from !== prevTimeRange.from || timeRange.to !== prevTimeRange.to;\n }\n\n renderError() {\n const {\n error: {message, details},\n } = this.props;\n return <Error message={message} error={details} />;\n }\n\n firstTimeError() {\n const {hasLoaded, hasError} = this.props;\n return hasError && !hasLoaded;\n }\n\n render() {\n const {hasError, inDashboard, timeRange} = this.props;\n\n return (\n <div className={block()}>\n <OperationListUpdater timeRange={timeRange} />\n {inDashboard && (\n <div className={cn('elements-heading')({size: 'l'})}>Operations</div>\n )}\n <OperationsListToolbar />\n {hasError && this.renderError()}\n {!this.firstTimeError() && <OperationsListTable />}\n </div>\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {isLoading, hasLoaded, hasError, error, timeRange} = operations.list;\n\n return {\n timeRange,\n isLoading,\n hasLoaded,\n hasError,\n error,\n };\n}\n\nconst OperationsListConnected = connect(mapStateToProps)(OperationsList);\n\nfunction OperationsListWithRum() {\n const isFinalStatus = useSelector(getOperationsListIsFinalState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATIONS_LIST,\n startDeps: [isFinalStatus],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATIONS_LIST,\n stopDeps: [isFinalStatus],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OperationsListConnected />;\n}\n\nexport default React.memo(OperationsListWithRum);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport YagrChartKit, {\n RawSerieData,\n YagrWidgetData,\n getSerieColor,\n} from '../YagrChartKit/YagrChartKit';\nimport './YTHistogram.scss';\n\nimport format from '../../common/hammer/format';\n\nconst block = cn('yt-histogram');\n\nexport interface YTHistorgramData {\n min: number;\n max: number;\n count: Array<number>;\n}\n\nexport interface AxisInfo {\n label?: string;\n}\n\nexport interface YTHistogramProps {\n className?: string;\n xLabel?: string;\n yLabel?: string;\n yLogarithmic?: boolean;\n yMin?: number;\n xFormat?: (v?: number | string | null) => string;\n yFormat?: (v?: number | string | null) => string;\n renderTooltip?: (value: string | undefined, xl: string, xr: string) => string;\n data: YTHistorgramData;\n}\n\nfunction YTHistogram({\n className,\n data,\n xLabel,\n yLabel,\n yLogarithmic,\n yMin,\n xFormat = format.Number,\n yFormat = format.Number,\n renderTooltip = renderDefaultTooltip,\n}: YTHistogramProps) {\n const yagrData = React.useMemo(() => {\n const {timeline, serieData, step} = genYagrData(data);\n const graphs: Array<RawSerieData> = [\n {\n type: 'column' as const,\n data: yLogarithmic ? serieData.map((v) => (v === 0 ? NaN : v)) : (serieData as any),\n color: getSerieColor(0),\n formatter: yFormat,\n ...{\n renderOptions: {\n size: [1],\n gap: 1,\n },\n },\n },\n ];\n\n const res: YagrWidgetData = {\n data: {\n timeline,\n graphs,\n },\n libraryConfig: {\n axes: {\n x: {\n label: xLabel,\n values: (_d: unknown, x: Array<any>) => x.map(xFormat),\n },\n y: {\n label: yLabel,\n },\n },\n scales: {\n y: {\n min: yMin,\n type: yLogarithmic ? 'logarithmic' : 'linear',\n },\n },\n tooltip: {\n render: (tooltipData) => {\n const {\n x,\n scales: [\n {\n rows: [row],\n },\n ],\n } = tooltipData;\n\n const {originalValue} = row;\n\n return (\n renderTooltip(\n yFormat(isNaN(originalValue!) ? 0 : originalValue),\n xFormat(x - step / 2),\n xFormat(x + step / 2),\n ) ?? '-'\n );\n },\n },\n },\n };\n return res;\n }, [data, xLabel, yLabel, xFormat, yFormat, renderTooltip, yMin, yLogarithmic]);\n\n return (\n <div className={block(null, className)}>\n <YagrChartKit type={'yagr'} data={yagrData} />\n </div>\n );\n}\n\nexport default React.memo(YTHistogram);\n\nfunction genYagrData({min, max, count}: YTHistorgramData) {\n const step = min === max ? 1 : (max - min) / Math.max(count.length, 1);\n\n const serieData = [undefined, ...count];\n const timeline = [min - step / 2];\n if (count.length > 1) {\n for (let i = 0; i < count.length; ++i) {\n timeline.push(min + i * step + step / 2);\n }\n } else {\n timeline.push(min);\n }\n timeline.push(max + step / 2);\n serieData.push(undefined);\n\n return {timeline, serieData, step: min === max ? 0 : step};\n}\n\nconst renderDefaultTooltip: Required<YTHistogramProps>['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> for range from <b>${x0}</b> to <b>${x1}</b>`;\n};\n\nexport function calculateFormatSettings(\n data: YTHistorgramData | undefined,\n fmtFn: (v: number, opts?: {digits?: number}) => number,\n) {\n const {min, max} = data ?? {};\n if (min === max || min === undefined || max === undefined) {\n return undefined;\n }\n const v2 = min + (max - min) / 10;\n if (fmtFn(min) !== fmtFn(v2)) {\n return undefined;\n }\n for (let i = 0; i < 5; ++i) {\n const opts = {digits: i + 2};\n const s1 = fmtFn(min, opts);\n const s2 = fmtFn(v2, opts);\n if (s1 !== s2) {\n return {digits: i + 3};\n }\n }\n return undefined;\n}\n","import React from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ypath from '../../../../../../common/thor/ypath';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {operationProps} from '../../../../../../pages/operations/OperationDetail/tabs/details/Runtime/Runtime';\nimport {getTheme} from '../../../../../../store/selectors/global';\n\nimport {getOperationDetailsLoadingStatus} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport YTHistogram, {\n YTHistogramProps,\n YTHistorgramData,\n calculateFormatSettings,\n} from '../../../../../../components/YTHistogram/YTHistogram';\nimport {RootState} from '../../../../../../store/reducers';\n\nimport './PartitionSizes.scss';\n\nconst block = cn('operation-detail-partition-sizes');\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\ninterface State {\n formatSettings?: {digits: number};\n data?: YTHistorgramData;\n}\n\nclass PartitionSizes extends React.Component<ReduxProps, State> {\n static propTypes = {\n operation: operationProps.isRequired,\n chartKitTheme: PropTypes.string.isRequired,\n };\n\n static getDerivedStateFromProps(props: ReduxProps) {\n const progress = ypath.getValue(props.operation, '/@progress');\n const data = progress && ypath.getValue(progress, '/partition_size_histogram');\n\n return {\n formatSettings: calculateFormatSettings(data, format.Bytes),\n data,\n };\n }\n\n state: State = {};\n\n render() {\n const {data} = this.state;\n if (!data) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <YTHistogram\n className={block('charts')}\n data={data}\n yLabel={'partition count'}\n xLabel={'partition data weight'}\n xFormat={this.formatX}\n yMin={0.5}\n yLogarithmic\n renderTooltip={this.renderTooltip}\n />\n </div>\n </ErrorBoundary>\n );\n }\n\n formatX = (v?: number | string | null) => {\n const {formatSettings} = this.state;\n return format.Bytes(v, formatSettings) as string;\n };\n\n renderTooltip: YTHistogramProps['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> jobs have estimated input job size from ${x0} to ${x1}`;\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n const chartKitTheme = getTheme(state);\n\n return {operation, chartKitTheme};\n};\n\nconst connector = connect(mapStateToProps);\n\nconst PartitionSizesConnected = connector(PartitionSizes);\n\nexport default function PartitionSizesWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PartitionSizesConnected />;\n}\n","import React from 'react';\nimport {Column} from '@gravity-ui/react-data-table';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport DataTableYT from '../../components/DataTableYT/DataTableYT';\nimport {Template} from '../../components/MetaTable/templates/Template';\n\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\nimport Icon from '../../components/Icon/Icon';\nimport Link from '../../components/Link/Link';\nimport {showErrorPopup} from '../../utils/utils';\nimport {compareWithUndefined} from '../../utils/sort-helpers';\n\nimport './AlertEvents.scss';\n\nconst block = cn('alert-events');\n\ninterface Props {\n className?: string;\n items: Array<AlertInfo>;\n}\n\nexport interface AlertInfo {\n from?: string;\n to?: string;\n type: string;\n error: unknown;\n url?: string;\n}\n\nconst columns: Array<Column<AlertInfo>> = [\n {\n name: 'Type',\n render({row}) {\n return (\n <span>\n {format.Readable(row.type)}\n {Boolean(row.url) && (\n <Link url={row.url} theme={'secondary'}>\n &nbsp;\n <Icon awesome={'question-circle'} />\n </Link>\n )}\n </span>\n );\n },\n },\n {\n name: 'Period',\n render({row}) {\n const {from, to} = row;\n return (\n <React.Fragment>\n <Template.Time\n time={from}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n {' - '}\n {!to ? (\n '...'\n ) : (\n <Template.Time\n time={to}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n )}\n </React.Fragment>\n );\n },\n },\n {\n name: '',\n render({row}) {\n return (\n <ClickableText\n onClick={() => {\n showErrorPopup(row.error as any, {\n type: 'alert',\n hideOopsMsg: true,\n helpURL: row.url,\n });\n }}\n >\n Details\n </ClickableText>\n );\n },\n },\n];\n\nconst VISIBLE_COUNT = 5;\n\nfunction AlertEvents({className, items}: Props) {\n const [allVisible, setAllVisible] = React.useState(false);\n const all = React.useMemo(() => {\n return items.sort((l, r) => {\n return (\n compareWithUndefined(l.to, r.to, -1, -1) ||\n compareWithUndefined(l.from, r.from, -1, 1)\n );\n });\n }, [items]);\n\n const data = React.useMemo(() => {\n return allVisible ? all : all.slice(0, VISIBLE_COUNT);\n }, [allVisible, all]);\n\n const toggleShowAll = React.useCallback(() => {\n setAllVisible(!allVisible);\n }, [allVisible, setAllVisible]);\n\n return (\n <div className={className}>\n <DataTableYT\n className={block()}\n columns={columns}\n data={data}\n settings={{displayIndices: false, sortable: false}}\n useThemeYT\n disableRightGap\n rowClassName={(row) => {\n return block('row', {current: !row.to});\n }}\n />\n {all.length > VISIBLE_COUNT ? (\n <ClickableText onClick={toggleShowAll}>\n {allVisible ? 'Less' : 'More'}\n </ClickableText>\n ) : null}\n </div>\n );\n}\n\nexport default React.memo(AlertEvents);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport unipika from '../../../../../common/thor/unipika';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\n\nimport CollapsableText from '../../../../../components/CollapsableText/CollapsableText';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport Yson from '../../../../../components/Yson/Yson';\n\nexport default class Description extends Component {\n static propTypes = {\n description: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n };\n\n get settings() {\n return {...unipika.prepareSettings(), escapeWhitespace: false};\n }\n\n // TODO support getting correct type in UNIPIKA (e.g. account for tagged type)\n renderAsMap(value) {\n const {\n utils: {\n yson: {attributes, type},\n },\n } = unipika;\n const isWithoutTags = !Object.hasOwnProperty.call(attributes(value), '_type_tag');\n const isMap = type(value) === 'object';\n\n return isMap && isWithoutTags;\n }\n\n renderAsYSON(value) {\n return <Yson settings={this.settings} value={value} />;\n }\n\n renderMetaTable(description) {\n const value = ypath.getValue(description);\n const keys = keys_(value).sort();\n const items = map_(keys, (key) => ({\n key,\n value: <CollapsableText settings={this.settings} value={value[key]} />,\n }));\n\n return <MetaTable items={items} />;\n }\n\n render() {\n const {description} = this.props;\n\n return this.renderAsMap(description)\n ? this.renderMetaTable(description)\n : this.renderAsYSON(description);\n }\n}\n","import {prepareTableColumns} from '../../../../../utils/index';\n\nconst METRICS = [\n 'row_count',\n 'compressed_data_size',\n 'uncompressed_data_size',\n 'data_weight',\n 'chunk_count',\n];\n\nconst props = {\n theme: 'light',\n size: 'm',\n striped: false,\n virtual: false,\n};\n\nexport const completedTableProps = {\n ...props,\n columns: {\n sets: {\n default: {\n items: ['name', ...METRICS],\n },\n withActions: {\n items: ['name', ...METRICS, 'actions'],\n },\n },\n items: prepareTableColumns({\n name: {\n sort: false,\n align: 'left',\n },\n row_count: {\n sort: false,\n align: 'right',\n },\n compressed_data_size: {\n sort: false,\n align: 'right',\n caption: 'Compressed',\n },\n uncompressed_data_size: {\n sort: false,\n align: 'right',\n caption: 'Uncompressed',\n },\n data_weight: {\n sort: false,\n align: 'right',\n },\n chunk_count: {\n sort: false,\n align: 'right',\n caption: 'Slices',\n },\n actions: {\n sort: false,\n caption: '',\n },\n }),\n mode: 'default',\n },\n};\n\nexport const intermediateTableProps = {\n ...props,\n columns: {\n sets: {\n default: {\n items: ['account', 'node_count', 'disk_space', 'chunk_count'],\n },\n },\n items: prepareTableColumns({\n account: {\n sort: false,\n align: 'left',\n },\n disk_space: {\n sort: false,\n align: 'right',\n },\n chunk_count: {\n sort: false,\n align: 'right',\n caption: 'Slices',\n },\n node_count: {\n sort: false,\n align: 'right',\n },\n }),\n mode: 'default',\n },\n templates: {\n key: 'operations/detail/resources/intermediate',\n },\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../../../../../common/hammer';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\n\nimport {\n completedTableProps,\n intermediateTableProps,\n} from '../../../../../../utils/operations/tabs/details/resources/resourcesTablesProps';\nimport {operationProps} from '../Runtime/Runtime';\n\nimport {hasProgressTasks} from '../../../../../../utils/operations/tabs/details/data-flow';\n\nimport './DataFlow.scss';\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ExpandIcon from '../../../../../../components/ExpandIcon/ExpandIcon';\nconst block = cn('resources');\n\nexport const resourcesProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.object,\n from: PropTypes.string,\n to: PropTypes.string,\n }),\n);\nexport const intermediateResourcesProps = PropTypes.array;\n\nfunction resourceAsBytes(item, columnName) {\n return hammer.format['Bytes'](item.value[columnName]);\n}\n\nfunction resourceAsNumber(item, columnName) {\n return hammer.format['Number'](item.value[columnName]);\n}\n\nfunction expandKey(from, to) {\n return `${from}->${to}`;\n}\n\nfunction prepareState(allowExpand, resources, expandedTasks) {\n return {\n allowExpand,\n resources: !allowExpand\n ? resources\n : reduce_(\n resources,\n (acc, item) => {\n const {from, to} = item;\n const expanded = expandedTasks[expandKey(from, to)];\n acc.push(item);\n if (expanded) {\n const {job_data_statistics, teleport_data_statistics} = item;\n if (job_data_statistics) {\n acc.push({\n inner: 'processed by jobs',\n value: job_data_statistics,\n });\n }\n if (teleport_data_statistics) {\n acc.push({\n inner: 'teleported',\n value: teleport_data_statistics,\n });\n }\n }\n return acc;\n },\n [],\n ),\n };\n}\n\nclass DataFlow extends React.Component {\n static getDerivedStateFromProps(props, state) {\n if (props === state.prevProps) {\n return null;\n }\n\n const {operation, resources} = props;\n const allowExpand = hasProgressTasks(operation);\n return {\n allowExpand,\n ...prepareState(allowExpand, resources, state.expandedTasks),\n };\n }\n\n state = {\n prevProps: undefined,\n expandedTasks: {},\n\n resources: [],\n allowExpand: false,\n };\n\n toggleExpand(key) {\n const expandedTasks = {...this.state.expandedTasks};\n if (expandedTasks[key]) {\n delete expandedTasks[key];\n } else {\n expandedTasks[key] = true;\n }\n\n const {allowExpand} = this.state;\n const {resources} = this.props;\n this.setState({\n expandedTasks,\n ...prepareState(allowExpand, resources, expandedTasks),\n });\n }\n\n getResourceTemplates() {\n const {expandedTasks, allowExpand} = this.state;\n const self = this;\n return {\n name(item) {\n const {name, from, to, inner} = item;\n if (name) {\n return name;\n }\n if (inner) {\n return <span className={block('inner')}>{inner}</span>;\n }\n const fromTo = (\n <span>\n {from} -&gt; {to}\n </span>\n );\n if (!allowExpand) {\n return fromTo;\n } else {\n const expKey = expandKey(from, to);\n const expanded = expandedTasks[expKey];\n const onClick = () => {\n self.toggleExpand(expKey);\n };\n return (\n <React.Fragment>\n <ExpandIcon expanded={expanded} onClick={onClick} visible />\n <span onClick={onClick} className={block('name')}>\n {fromTo}\n </span>\n </React.Fragment>\n );\n }\n },\n chunk_count(item, columnName) {\n return resourceAsNumber.call(this, item, columnName);\n },\n row_count: resourceAsNumber,\n data_weight: resourceAsBytes,\n compressed_data_size: resourceAsBytes,\n uncompressed_data_size: resourceAsBytes,\n actions({info, from, to}) {\n if (!info) {\n return null;\n }\n return (\n <ClickableAttributesButton\n title={`Data flow: ${from} -> ${to}`}\n attributes={info}\n />\n );\n },\n };\n }\n\n rowClassName = (data) => {\n if (data.name) {\n return block('named-row');\n }\n return data.inner ? block('inner-row') : null;\n };\n\n render() {\n const {operation, intermediateResources} = this.props;\n const {resources, allowExpand} = this.state;\n return (\n <div className={block()}>\n <div className={block('table', 'elements-section')}>\n <ElementsTable\n {...completedTableProps}\n columnsMode={allowExpand ? 'withActions' : undefined}\n css={block()}\n items={resources}\n templates={this.getResourceTemplates()}\n rowClassName={this.rowClassName}\n />\n </div>\n\n {operation.isRunning() && intermediateResources && (\n <div className={block('table', 'elements-section')}>\n <div className=\"elements-heading elements-heading_size_s\">Uncommitted</div>\n\n <ElementsTable\n {...intermediateTableProps}\n css={block()}\n items={intermediateResources}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nDataFlow.propTypes = {\n operation: operationProps.isRequired,\n resources: resourcesProps.isRequired,\n intermediateResources: intermediateResourcesProps,\n};\n\nexport default DataFlow;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ElementsTable from '../../components/ElementsTable/ElementsTable';\nimport withCollapsible from '../../hocs/withCollapsible';\n\nimport hammer from '../../common/hammer';\n\nimport './CollapsibleTable.scss';\n\nconst headingBlock = cn('elements-heading');\nconst block = cn('collapsible-table');\n\nclass CollapsibleTable extends Component {\n static propTypes = {\n allItemsCount: PropTypes.number.isRequired,\n renderToggler: PropTypes.func.isRequired,\n heading: PropTypes.string.isRequired,\n className: PropTypes.string,\n };\n\n renderHeading() {\n const {heading, allItemsCount} = this.props;\n\n return (\n <div className={headingBlock({size: 's'})}>\n <span className={block('heading')}>{hammer.format['ReadableField'](heading)}</span>\n <span className={block('size')}>{allItemsCount}</span>\n </div>\n );\n }\n\n render() {\n const {className, renderToggler, ...rest} = this.props;\n\n return (\n <div className={block(null, className)}>\n {this.renderHeading()}\n <ElementsTable {...rest} />\n {renderToggler()}\n </div>\n );\n }\n}\n\nexport default withCollapsible(CollapsibleTable);\n","const tableProps = {\n theme: 'light',\n size: 's',\n striped: false,\n virtual: false,\n templates: {\n key: 'operations/detail/specification/io',\n data: {},\n },\n columns: {\n sets: {\n input: {\n items: ['name', 'filters', 'tags'],\n },\n output: {\n items: ['name', 'live_preview', 'tags'],\n },\n stderr: {\n items: ['name', 'live_preview', 'tags'],\n },\n },\n items: {\n name: {\n sort: false,\n align: 'left',\n name: 'name',\n },\n live_preview: {\n sort: false,\n align: 'left',\n name: 'live_preview',\n },\n filters: {\n sort: false,\n align: 'left',\n name: 'filters',\n },\n tags: {\n sort: false,\n align: 'left',\n name: 'tags',\n },\n },\n },\n};\n\nexport const inputTableProps = {\n ...tableProps,\n columns: {\n ...tableProps.columns,\n mode: 'input',\n },\n};\n\nexport const outputTableProps = {\n ...tableProps,\n columns: {\n ...tableProps.columns,\n mode: 'output',\n },\n};\n\nexport const stderrTableProps = {\n ...tableProps,\n columns: {\n ...tableProps.columns,\n mode: 'stderr',\n },\n};\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable, {\n TemplateCommand,\n TemplateEnvironment,\n TemplateFiles,\n TemplateLivePreivew,\n TemplateTransferTask,\n} from '../../../../../../components/MetaTable/MetaTable';\nimport CollapsibleTable from '../../../../../../components/CollapsibleTable/CollapsibleTable';\n\nimport {\n inputTableProps,\n outputTableProps,\n stderrTableProps,\n} from '../../../../../../utils/operations/tabs/details/specification/specificationTablesProps';\nimport {\n filterVisibleItems,\n prepareVisibleItems,\n} from '../../../../../../utils/operations/tabs/details/specification/specification';\nimport hammer from '../../../../../../common/hammer';\n\nimport './Specification.scss';\n\nconst headingBlock = cn('elements-heading');\nconst specificationBlock = cn('specification');\n\nconst scriptProps = PropTypes.shape({\n type: PropTypes.string.isRequired,\n caption: PropTypes.string,\n command: PropTypes.string,\n className: PropTypes.string,\n jobCount: PropTypes.number,\n files: PropTypes.arrayOf(\n PropTypes.shape({\n path: PropTypes.string,\n name: PropTypes.string,\n executable: PropTypes.bool,\n }),\n ),\n environment: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n});\nexport const specificationProps = PropTypes.shape({\n transferTask: PropTypes.shape({\n id: PropTypes.string.isRequired,\n url: PropTypes.string,\n }),\n mode: PropTypes.string,\n remote: PropTypes.shape({\n cluster: PropTypes.string.isRequired,\n network: PropTypes.string,\n }),\n startedBy: PropTypes.shape({\n command: PropTypes.arrayOf(PropTypes.string).isRequired,\n fields: PropTypes.arrayOf(PropTypes.object).isRequired,\n }),\n intermediate: PropTypes.shape({\n supported: PropTypes.bool.isRequired,\n path: PropTypes.string,\n transaction: PropTypes.string,\n }),\n mapper: scriptProps,\n reducer: scriptProps,\n reduceCombiner: scriptProps,\n tasks: PropTypes.arrayOf(scriptProps),\n});\n\nexport default class Specification extends Component {\n static propTypes = {\n specification: specificationProps.isRequired,\n cluster: PropTypes.string.isRequired,\n };\n\n renderTransferTask({id, url, mode}) {\n return (\n <MetaTable\n className={specificationBlock('meta')}\n items={[\n {\n key: 'mode',\n value: mode,\n visible: Boolean(mode),\n },\n {\n key: 'transfer task',\n value: <TemplateTransferTask id={id} url={url} />,\n visible: Boolean(id || url),\n },\n ]}\n />\n );\n }\n\n renderRemote({cluster, network}) {\n return (\n <div className={specificationBlock('remote')}>\n <div className={headingBlock({size: 's'})}>Remote</div>\n\n <MetaTable\n items={[\n {key: 'cluster', value: cluster},\n {key: 'network', value: network},\n ]}\n />\n </div>\n );\n }\n\n renderStartedBy({fields = [], command}) {\n const items = fields.map((field) => ({\n key: field.name,\n value: field.value,\n }));\n\n items.push({\n key: 'command',\n value: <TemplateCommand value={command} lineCount={5} />,\n });\n\n return (\n <div className={specificationBlock('started-by')}>\n <div className={headingBlock({size: 's'})}>Started by</div>\n\n <MetaTable items={items} />\n </div>\n );\n }\n\n renderScript({type, caption, className, jobCount, environment, files, command}) {\n const {cluster} = this.props;\n\n return (\n <div className={specificationBlock('mapper')} key={`${type}/${caption}/${className}`}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](caption || type)}\n </div>\n\n <MetaTable\n items={[\n {\n key: 'class name',\n value: className,\n visible: Boolean(className),\n },\n {\n key: 'job count',\n value: jobCount,\n visible: Boolean(jobCount),\n },\n {\n key: 'environment',\n value: <TemplateEnvironment environments={environment} />,\n visible: environment.length > 0,\n },\n {\n key: 'files',\n value: <TemplateFiles files={files} cluster={cluster} />,\n visible: files.length > 0,\n },\n {\n key: 'command',\n value: <TemplateCommand value={command} lineCount={5} />,\n visible: Boolean(command),\n },\n ]}\n />\n </div>\n );\n }\n\n renderIO(type, items, tableProps) {\n return (\n <CollapsibleTable\n {...tableProps}\n prepareVisibleItems={prepareVisibleItems}\n filterVisibleItems={filterVisibleItems}\n className={specificationBlock(type)}\n css={specificationBlock('io')}\n heading={type}\n items={items}\n />\n );\n }\n\n renderIntermediate(intermediate, title) {\n const {cluster} = this.props;\n\n return (\n <div className={specificationBlock('intermediate')}>\n <div className={headingBlock({size: 's'})}>{title}</div>\n\n <TemplateLivePreivew {...intermediate} cluster={cluster} />\n </div>\n );\n }\n\n renderTasks(tasks = []) {\n return tasks.map((task) => task && this.renderScript(task));\n }\n\n render() {\n const {\n mode,\n transferTask,\n remote,\n startedBy,\n mapper,\n reducer,\n reduceCombiner,\n input,\n intermediate,\n output,\n stderr,\n tasks,\n coredumps,\n } = this.props.specification;\n\n return (\n <div className={specificationBlock()}>\n {(transferTask || mode) && this.renderTransferTask({...transferTask, mode})}\n\n {remote && this.renderRemote(remote)}\n {startedBy && this.renderStartedBy(startedBy)}\n\n {input?.length > 0 && this.renderIO('input', input, inputTableProps)}\n {intermediate && this.renderIntermediate(intermediate, 'Intermediate')}\n {output?.length > 0 && this.renderIO('output', output, outputTableProps)}\n {stderr?.length > 0 && this.renderIO('stderr', stderr, stderrTableProps)}\n {coredumps?.length > 0 && this.renderIO('core', coredumps, stderrTableProps)}\n\n {mapper && this.renderScript(mapper)}\n {reducer && this.renderScript(reducer)}\n {reduceCombiner && this.renderScript(reduceCombiner)}\n\n {tasks && this.renderTasks(tasks)}\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport Modal from '../../../../../../components/Modal/Modal';\nimport Link from '../../../../../../components/Link/Link';\nimport Icon from '../../../../../../components/Icon/Icon';\n\nimport withVisible from '../../../../../../hocs/withVisible';\nimport hammer from '../../../../../../common/hammer';\n\nimport {docsUrl} from '../../../../../../config';\n\nimport './DetailedJobsCounter.scss';\nimport UIFactory from '../../../../../../UIFactory';\n\nconst block = cn('operation-jobs-detailed');\n\nclass DetailedJobsCounter extends Component {\n renderSection(name, items) {\n return (\n <div className=\"elements-section\">\n <div className=\"elements-heading elements-heading_size_s\">{name}</div>\n\n <MetaTable items={items} />\n </div>\n );\n }\n\n renderHelpLink(helpUrl) {\n return docsUrl(\n <div className=\"elements-section\">\n <Link url={helpUrl}>\n <Icon awesome=\"book\" /> Help\n </Link>\n </div>,\n );\n }\n\n renderAborted(item) {\n const scheduledCounters = item.scheduled.counters;\n const scheduledTotal = {key: 'total', value: item.scheduled.total};\n const scheduledItems = [scheduledTotal, ...scheduledCounters];\n\n const nonScheduledCounters = item.nonScheduled.counters;\n const nonScheduledTotal = {\n key: 'total',\n value: item.nonScheduled.total,\n };\n const nonScheduledItems = [nonScheduledTotal, ...nonScheduledCounters];\n\n const helpUrl = UIFactory.docsUrls['operations:overview#aborted_jobs'];\n\n return (\n <div className=\"pretty-scroll\">\n {this.renderSection('Scheduled', scheduledItems)}\n\n {this.renderSection('Non scheduled', nonScheduledItems)}\n\n {this.renderHelpLink(helpUrl)}\n </div>\n );\n }\n\n renderCompleted(item) {\n const nonInterruptedItems = [{key: 'total', value: item.nonInterrupted.total}];\n\n const interruptedCounters = item.interrupted.counters;\n const interruptedTotal = {\n key: 'total',\n value: item.interrupted.total,\n };\n const nonScheduledItems = [interruptedTotal, ...interruptedCounters];\n\n const helpUrl = UIFactory.docsUrls['operations:overview#completed_jobs'];\n\n return (\n <div className=\"pretty-scroll\">\n {this.renderSection('Non interrupted', nonInterruptedItems)}\n\n {this.renderSection('Interrupted', nonScheduledItems)}\n\n {this.renderHelpLink(helpUrl)}\n </div>\n );\n }\n\n renderModalContent(type) {\n const {item} = this.props;\n\n return type === 'aborted'\n ? this.renderAborted(item.abortedStats)\n : this.renderCompleted(item.completedStats);\n }\n\n renderCount(type, primary, secondary) {\n return type === 'aborted' ? (\n <span>\n {hammer.format['Number'](primary)}\n &nbsp; ({hammer.format['Number'](secondary)})\n </span>\n ) : (\n <span>{hammer.format['Number'](primary + secondary)}</span>\n );\n }\n\n render() {\n const {primaryValue, secondaryValue, handleClose, handleShow, visible, type, item} =\n this.props;\n\n const title = `${hammer.format['ReadableField'](type)} statistics: ${item.caption}`;\n const modalContent = this.renderModalContent(type);\n\n return (\n <div className={block()}>\n <Link theme=\"ghost\" size=\"xs\" onClick={handleShow}>\n View\n </Link>\n\n {this.renderCount(type, primaryValue, secondaryValue)}\n\n <Modal\n onOutsideClick={handleClose}\n onCancel={handleClose}\n content={modalContent}\n visible={visible}\n footer={false}\n title={title}\n />\n </div>\n );\n }\n}\n\nDetailedJobsCounter.propTypes = {\n primaryValue: PropTypes.number.isRequired,\n secondaryValue: PropTypes.number.isRequired,\n visible: PropTypes.bool.isRequired,\n handleShow: PropTypes.func.isRequired,\n handleClose: PropTypes.func.isRequired,\n type: PropTypes.oneOf(['aborted', 'completed']),\n item: PropTypes.shape({\n caption: PropTypes.string.isRequired,\n }),\n};\n\nexport default withVisible(DetailedJobsCounter);\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\nimport {hasProgressTasks} from './data-flow';\nimport {prepareTableColumns} from '../../../../utils/index';\n\nfunction sortCounters(reasonA, reasonB) {\n return hammer.utils.compareVectors(\n [reasonA.key === 'other' ? 1 : -1, reasonA.key],\n [reasonB.key === 'other' ? 1 : -1, reasonB.key],\n 'asc',\n );\n}\n\nfunction prepareCategoryCounters(counters, category) {\n if (typeof counters[category] === 'object') {\n const prepared = reduce_(\n counters[category],\n (statistics, count, key) => {\n statistics.counters.push({\n value: count,\n key: key,\n });\n statistics.total += count;\n\n return statistics;\n },\n {\n counters: [],\n total: 0,\n },\n );\n\n prepared.counters.sort(sortCounters);\n\n return prepared;\n } else {\n return {\n total: counters[category],\n };\n }\n}\n\nfunction prepareCompletedStatistics(counters) {\n const completed = counters.completed;\n\n return {\n interrupted: prepareCategoryCounters(completed, 'interrupted'),\n nonInterrupted: prepareCategoryCounters(completed, 'non-interrupted'), // XXX API NAMING BUG\n total: completed['total'],\n };\n}\n\nfunction prepareAbortedStatistics(counters) {\n const aborted = counters.aborted;\n\n return {\n scheduled: prepareCategoryCounters(aborted, 'scheduled'),\n nonScheduled: prepareCategoryCounters(aborted, 'non_scheduled'),\n total: aborted['total'],\n };\n}\n\nfunction prepareJobTypeOrder(jobTypeOrder) {\n const SOURCE = 'source';\n const SINK = 'sink';\n\n // REMOVE source, sink\n jobTypeOrder = filter_(jobTypeOrder, (jobType) => {\n const type = String(jobType).toLowerCase();\n return type !== SOURCE && type !== SINK;\n });\n // ADD total\n jobTypeOrder.push('total');\n\n return jobTypeOrder;\n}\n\nexport function prepareDataFromGraph(operation) {\n if (hasProgressTasks(operation)) {\n return prepareDataFromGraphByTasks(operation);\n }\n\n const dataFlowGraph = ypath.getValue(operation, '/@progress/data_flow_graph');\n let jobTypeOrder = ypath.getValue(dataFlowGraph, '/topological_ordering');\n const countersByType = ypath.getValue(dataFlowGraph, '/vertices');\n let data = [];\n\n if (dataFlowGraph) {\n jobTypeOrder = prepareJobTypeOrder(jobTypeOrder);\n\n // In case of inconsistent graph data\n jobTypeOrder = filter_(jobTypeOrder, (jobType) => {\n return typeof countersByType[jobType] !== 'undefined';\n });\n\n data = map_(jobTypeOrder, (taskType) => {\n return {\n type: taskType,\n jobType: taskType === 'total' ? taskType : countersByType[taskType].job_type,\n counters: countersByType[taskType].job_counter,\n };\n });\n\n data = map_(data, (jobTypeInfo) => {\n const type = jobTypeInfo.type;\n const counters = jobTypeInfo.counters;\n return {\n type: type,\n caption: type,\n jobType: jobTypeInfo.jobType,\n ...prepareCounters(counters),\n };\n });\n }\n\n return data;\n}\n\nfunction prepareDataFromGraphByTasks(operation) {\n const tasks = ypath.getValue(operation, '/@progress/tasks');\n\n const res = map_(tasks, (task) => {\n const {task_name, job_type, job_counter} = task;\n return {\n type: task_name,\n caption: task_name,\n jobType: job_type,\n ...prepareCounters(job_counter),\n info: task,\n };\n });\n\n const totalCounters = ypath.getValue(operation, '/@progress/total_job_counter');\n res.push({\n type: 'total',\n caption: 'total',\n jobType: 'total',\n ...prepareCounters(totalCounters),\n info: totalCounters,\n isTotal: true,\n });\n\n return res;\n}\n\nfunction prepareCounters(counters) {\n return {\n counters,\n abortedStats: prepareAbortedStatistics(counters),\n completedStats: prepareCompletedStatistics(counters),\n };\n}\n\nfunction prepareColumns() {\n const states = ['total', 'pending', 'running', 'completed', 'failed', 'aborted', 'lost'];\n\n const columns = {\n job_type: {\n sort: false,\n align: 'left',\n caption: 'Task',\n },\n };\n\n forEach_(states, (state) => {\n columns[state] = {\n sort: false,\n align: 'right',\n };\n });\n\n columns.actions = {\n name: 'actions',\n sort: 'false',\n caption: '',\n };\n\n return {\n items: prepareTableColumns(columns),\n sets: {\n default: {\n items: ['job_type'].concat(states),\n },\n withActions: {\n items: map_(columns, (_x, name) => name),\n },\n },\n mode: 'default',\n };\n}\n\nexport const tasksTablesProps = {\n theme: 'light',\n striped: false,\n virtual: false,\n size: 'm',\n columns: prepareColumns(),\n computeKey(item) {\n return item.type;\n },\n};\n","import {ValueOf} from '../../../@types/types';\n\nexport interface FieldTree<T = unknown> extends Record<string, FieldTree<T> | T> {}\n\nexport type FieldTreePredicate<T, R> = (path: Array<string>, tree?: FieldTree<T>, item?: T) => R;\n\nexport function fieldTreeForEach<T>(\n vertex: ValueOf<FieldTree<T>>,\n isT: (v: typeof vertex) => v is T,\n visitorCb: FieldTreePredicate<T, void>,\n path: Array<string> = [],\n) {\n if (isT(vertex)) {\n visitorCb(path, undefined, vertex);\n } else {\n if (!vertex) {\n return;\n }\n if (path.length) {\n visitorCb(path, vertex, undefined);\n }\n Object.keys(vertex ?? {}).forEach((k) => {\n path.push(k);\n fieldTreeForEach(vertex[k], isT, visitorCb, path);\n path.pop();\n });\n }\n}\n\nexport function filterFieldTree<T>(\n vertex: FieldTree<T>,\n isT: (v: FieldTree<T> | T) => v is T,\n predicate: FieldTreePredicate<T, boolean | undefined>,\n filterT?: (item: T) => T | undefined,\n path: Array<string> = [],\n): FieldTree<T> | undefined {\n let empty = true;\n const res: typeof vertex = {};\n Object.keys(vertex).forEach((k) => {\n path.push(k);\n const item = vertex[k];\n if (isT(item)) {\n if (predicate(path, undefined, item)) {\n const tmp = filterT ? filterT(item) : item;\n if (tmp !== undefined) {\n res[k] = tmp;\n empty = false;\n }\n }\n } else if (predicate(path, item, undefined)) {\n const tmp = filterFieldTree(item, isT, predicate, filterT, path);\n if (tmp !== undefined) {\n res[k] = tmp;\n empty = false;\n }\n }\n\n path.pop();\n });\n return empty ? undefined : res;\n}\n\nexport function fieldTreeSome<T>(\n vertex: FieldTree<T>,\n isT: (v: FieldTree<T> | T) => v is T,\n predicate: FieldTreePredicate<T, boolean | undefined>,\n path: Array<string> = [],\n): boolean {\n return Object.keys(vertex).some((k) => {\n path.push(k);\n const item = vertex[k];\n if (isT(item)) {\n if (predicate(path, undefined, item)) {\n return true;\n }\n } else if (predicate(path, item, undefined)) {\n return true;\n } else if (fieldTreeSome(item, isT, predicate, path)) {\n return true;\n }\n\n path.pop();\n return false;\n });\n}\n","import {createSelector} from 'reselect';\nimport compact_ from 'lodash/compact';\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport get_ from 'lodash/get';\nimport isEmpty_ from 'lodash/isEmpty';\nimport min_ from 'lodash/min';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport reduce_ from 'lodash/reduce';\nimport sum_ from 'lodash/sum';\n\nimport {\n FieldTree,\n fieldTreeForEach,\n fieldTreeSome,\n filterFieldTree,\n} from '../../../common/hammer/field-tree';\nimport format from '../../../common/hammer/format';\n\nimport ypath from '../../../common/thor/ypath';\nimport {STATISTICS_FILTER_ALL_VALUE} from '../../../constants/operations/statistics';\nimport {RootState} from '../../../store/reducers';\nimport {ValueOf} from '../../../../@types/types';\nimport {prepareDataFromGraph} from '../../../utils/operations/tabs/details/tasks';\n\nconst getJobTypeFilter = (state: RootState) => state.operations.statistics.jobTypeFilter;\nconst getPoolTreeFilter = (state: RootState) => state.operations.statistics.poolTreeFilter;\nconst getFilterText = (state: RootState) => state.operations.statistics.filterText;\n\nconst getOperationDetailsOperation = (state: RootState) => state.operations.detail.operation;\n\nexport const getOperationStatisticsV2 = createSelector(\n [getOperationDetailsOperation],\n (operation) => {\n return ypath.getValue(operation, '/@progress/job_statistics_v2') as\n | StatisticTreeRoot\n | undefined;\n },\n);\n\ninterface StatisticItem {\n summary: StatisticItemSummary;\n tags: StatisticItemTags;\n}\n\nexport interface StatisticItemSummary {\n min: number;\n max: number;\n sum: number;\n count: number;\n}\n\ninterface StatisticItemTags {\n job_state: JobState;\n job_type: string;\n pool_tree: string;\n}\n\nexport type JobState = 'completed' | 'running' | 'aborted' | 'failed' | 'lost';\n\ntype StatisticTree = FieldTree<Array<StatisticItem>>;\n\ntype StatisticTreeRoot = StatisticTree & {\n time?: StatisticTree & {total?: Array<StatisticItem>};\n data?: {\n input?: {\n data_weight?: Array<StatisticItem>;\n row_count?: Array<StatisticItem>;\n };\n };\n};\n\nexport function isStatisticItem(v?: ValueOf<StatisticTree>): v is Array<StatisticItem> {\n return Array.isArray(v);\n}\n\nexport const getOperationStatisticsAvailableValues = createSelector(\n [getOperationStatisticsV2],\n (stats) => {\n const total = stats?.time?.total ?? [];\n const tmp = reduce_(\n total,\n (acc, item) => {\n forEach_(item.tags, (v, k) => {\n const key = k as keyof typeof acc;\n if (v) {\n if (!acc[key]) {\n acc[key] = new Set();\n }\n acc[key].add(v);\n }\n });\n return acc;\n },\n {} as Record<keyof Partial<Omit<StatisticItemTags, 'job_state'>>, Set<string>>,\n );\n return reduce_(\n tmp,\n (acc, v, k) => {\n const key = k as keyof typeof acc;\n acc[key] = new Array(...v.values());\n return acc;\n },\n {} as Record<keyof typeof tmp, Array<string>>,\n );\n },\n);\n\nexport const getOperationStatisticsActiveFilterValues = createSelector(\n [getJobTypeFilter, getPoolTreeFilter, getFilterText, getOperationStatisticsAvailableValues],\n (jobTypeFilter, poolTreeFilter, filterText, {job_type, pool_tree}) => {\n return {\n activeJobType:\n -1 === job_type.indexOf(jobTypeFilter)\n ? STATISTICS_FILTER_ALL_VALUE\n : jobTypeFilter,\n activePoolTree:\n -1 === pool_tree.indexOf(poolTreeFilter)\n ? STATISTICS_FILTER_ALL_VALUE\n : poolTreeFilter,\n filterText,\n };\n },\n);\n\nexport const getOperationStatiscsHasData = (state: RootState) => {\n return !isEmpty_(getOperationStatisticsV2(state));\n};\n\nexport const getOperationStatisticsFilteredTree = createSelector(\n [getOperationStatisticsActiveFilterValues, getOperationStatisticsV2],\n ({activeJobType, activePoolTree, filterText}, tree) => {\n if (!activeJobType && !activePoolTree && !filterText) {\n return tree;\n }\n\n const checkByName = !filterText.length\n ? () => true\n : (path: Array<string>) => {\n const pathText = path.join('/');\n return -1 !== pathText.indexOf(filterText);\n };\n\n return filterFieldTree(\n tree ?? {},\n isStatisticItem,\n (path, tree) => {\n if (checkByName(path)) {\n return true;\n }\n return tree && fieldTreeSome(tree, isStatisticItem, checkByName, path.slice());\n },\n (items) => {\n return filter_(items, ({tags: {job_type, pool_tree}}) => {\n if (activeJobType && job_type !== activeJobType) {\n return false;\n }\n if (activePoolTree && pool_tree !== activePoolTree) {\n return false;\n }\n return true;\n });\n },\n );\n },\n);\n\nexport const getOperationStatisticsFiltered = createSelector(\n [getOperationStatisticsFilteredTree],\n (tree) => {\n const res: Array<{\n name: string;\n title: string;\n level: number;\n data?: Partial<Record<JobState, StatisticItemSummary>>;\n isLeafNode?: boolean;\n }> = [];\n fieldTreeForEach(tree ?? {}, isStatisticItem, (path, _tree, item) => {\n const isLeafNode = Boolean(item);\n res.push({\n title: path[path.length - 1],\n level: path.length - 1,\n data: item ? itemToRow(item) : undefined,\n isLeafNode,\n name: path.join('/'),\n });\n });\n return res;\n },\n);\n\nfunction itemToRow(items: Array<StatisticItem>) {\n const res: Partial<Record<JobState, StatisticItemSummary>> = {};\n forEach_(items, ({summary, tags: {job_state}}) => {\n res[job_state] = mergeSummary(summary, res[job_state]);\n });\n return res;\n}\n\nfunction mergeSummary(summary: StatisticItemSummary, current?: StatisticItemSummary) {\n if (!current) {\n return summary;\n }\n\n const c = sum_([summary.count, current.count])!;\n const s = sum_([summary.sum, current?.sum]);\n return {\n min: min_([summary.min, current.min])!,\n max: max_([summary.max, current.max])!,\n count: c,\n sum: s,\n };\n}\n\nexport const getTotalJobWallTime = createSelector(getOperationStatisticsV2, (tree) => {\n const item = tree?.time?.total;\n return excludeRunningAndCalcSum(item);\n});\n\nfunction excludeRunningAndCalcSum(item?: Array<StatisticItem>) {\n const {running: _tmp, ...rest} = itemToRow(item ?? []);\n const valuesToSum = compact_(map_(rest, 'sum'));\n return !valuesToSum.length ? format.NO_VALUE : sum_(valuesToSum);\n}\n\nconst CPU_TIME_SPENT_PART_NAMES = [\n 'job_proxy.cpu.user',\n 'job_proxy.cpu.system',\n 'user_job.cpu.user',\n 'user_job.cpu.system',\n];\n\nexport const getTotalCpuTimeSpent = createSelector([getOperationStatisticsV2], (tree) => {\n const items = reduce_(\n CPU_TIME_SPENT_PART_NAMES,\n (acc, path) => {\n const item = get_(tree, path);\n if (isStatisticItem(item)) {\n const value = excludeRunningAndCalcSum(item);\n if (value !== undefined) {\n acc.push(value);\n }\n }\n return acc;\n },\n [] as Array<number>,\n );\n return items.length ? sum_(items) : format.NO_VALUE;\n});\n\nexport const getOperationDetailTasksData = createSelector(\n [getOperationDetailsOperation, getOperationStatisticsV2],\n (operation, stats) => {\n const items = prepareDataFromGraph(operation);\n\n const {running: _r, ...timeStatistics} = itemToRow(stats?.time?.total ?? []);\n\n const abortedJobsTime = timeStatistics.aborted?.sum;\n const completedJobsTime = timeStatistics.completed?.sum;\n\n const abortedJobsTimeRatio = prepareAbortedJobsTimeRatio(\n abortedJobsTime,\n completedJobsTime,\n );\n\n const averageReadDataRate = prepareAverageReadDataRate(stats || {}, completedJobsTime);\n const averageReadRowRate = prepareAverageReadRowRate(stats || {}, completedJobsTime);\n\n if (\n !timeStatistics &&\n !abortedJobsTime &&\n !completedJobsTime &&\n !abortedJobsTimeRatio &&\n !averageReadDataRate &&\n !averageReadDataRate &&\n items.length === 0\n ) {\n return {items: []};\n }\n\n return {\n items,\n abortedJobsTime,\n completedJobsTime,\n abortedJobsTimeRatio,\n averageReadDataRate,\n averageReadRowRate,\n };\n },\n);\n\nfunction prepareAbortedJobsTimeRatio(abortedJobsTime?: number, completedJobsTime?: number) {\n let abortedJobsShare;\n\n if (typeof completedJobsTime !== 'undefined' && typeof abortedJobsTime !== 'undefined') {\n if (abortedJobsTime > 0 && completedJobsTime > 0) {\n abortedJobsShare = (abortedJobsTime / completedJobsTime) * 100;\n } else if (abortedJobsTime > 0) {\n abortedJobsShare = 100;\n } else if (completedJobsTime > 0) {\n abortedJobsShare = 0;\n }\n }\n\n return abortedJobsShare;\n}\n\nfunction prepareAverageReadDataRate(stats: StatisticTreeRoot, completedJobsTime = NaN) {\n const completedInputSize = itemToRow(stats?.data?.input?.data_weight || []).completed?.sum ?? 0;\n\n return completedInputSize > 0 ? completedInputSize / (completedJobsTime / 1000) : undefined;\n}\n\nfunction prepareAverageReadRowRate(stats: StatisticTreeRoot, completedJobsTime = NaN) {\n const completedInputRows = itemToRow(stats?.data?.input?.row_count || []).completed?.sum ?? 0;\n\n return completedJobsTime > 0 ? completedInputRows / (completedJobsTime / 1000) : undefined;\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\nimport MetaTable, {Template} from '../../../../../../components/MetaTable/MetaTable';\n\nimport hammer from '../../../../../../common/hammer';\nimport ypath from '../../../../../../common/thor/ypath';\n\nimport './Tasks.scss';\nimport DetailedJobsCounter from '../DetailedJobsCounter/DetailedJobsCounter';\nimport {tasksTablesProps} from '../../../../../../utils/operations/tabs/details/tasks';\nimport {hasProgressTasks} from '../../../../../../utils/operations/tabs/details/data-flow';\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ExpandIcon from '../../../../../../components/ExpandIcon/ExpandIcon';\nimport {RootState} from '../../../../../../store/reducers';\nimport {getOperationDetailTasksData} from '../../../../../../store/selectors/operations/statistics-v2';\n\nconst block = cn('jobs');\n\nfunction prepareVisibleItems(items: Array<Item> = [], expandedState: Record<string, boolean>) {\n const visibleItems: typeof items = [];\n forEach_(items, (item) => {\n visibleItems.push(item);\n const {caption} = item;\n if (expandedState[caption!]) {\n visibleItems.push({taskInfo: item.info});\n }\n });\n return {\n items,\n visibleItems,\n };\n}\n\ninterface Item {\n type?: string;\n caption?: string;\n jobType?: string;\n info?: ItemTaskInfo;\n taskInfo?: Item['info'];\n counters?: Record<string, unknown>;\n abortedStats?: AbortedStats;\n completedStats?: CompletedStats;\n isTotal?: boolean;\n}\n\ninterface AbortedStats {\n scheduled: {total: number};\n nonScheduled: {total: number};\n}\n\ninterface CompletedStats {\n interrupted: {total: number};\n nonInterrupted: {total: number};\n}\n\ninterface OwnProps {\n className?: string;\n collapsibleSize?: 'ss';\n}\n\ntype Props = OwnProps & ConnectedProps<typeof connector>;\n\ninterface State {\n allowActions: boolean;\n expandedState: Record<string, boolean>;\n visibleItems: Array<Item>;\n items: Array<Item>;\n operation: unknown;\n}\n\nclass Tasks extends React.Component<Props, State> {\n static getDerivedStateFromProps(props: Props, state: State) {\n const {\n operation,\n jobs: {items},\n } = props;\n const {operation: prevOperation, items: prevItems, expandedState} = state;\n const res = {};\n if (operation !== prevOperation) {\n Object.assign(res, {\n operation,\n allowActions: hasProgressTasks(operation),\n });\n }\n\n if (items !== prevItems) {\n Object.assign(res, {\n ...prepareVisibleItems(items, expandedState),\n });\n }\n\n return isEmpty_(res) ? null : res;\n }\n\n state: State = {\n allowActions: false,\n expandedState: {},\n\n visibleItems: [],\n\n items: [],\n operation: undefined,\n };\n\n private templates: Record<\n string | '__default__',\n (item: Item, column: string) => React.ReactNode\n >;\n\n constructor(props: Props) {\n super(props);\n\n const self = this;\n this.templates = {\n __default__(item, column) {\n if (!item.counters) {\n return null;\n }\n return <span>{hammer.format['Number'](item.counters[column])}</span>;\n },\n aborted(item) {\n if (!item?.abortedStats) {\n return null;\n }\n const {scheduled, nonScheduled} = item.abortedStats;\n\n return (\n <DetailedJobsCounter\n title={`Aborted statistics: ${item.caption}`}\n secondaryValue={nonScheduled.total}\n primaryValue={scheduled.total}\n type=\"aborted\"\n item={item}\n />\n );\n },\n completed(item) {\n if (!item?.completedStats) {\n return null;\n }\n const {nonInterrupted, interrupted} = item.completedStats;\n\n return (\n <DetailedJobsCounter\n title={`Completed statistics: ${item.caption}`}\n secondaryValue={interrupted.total}\n primaryValue={nonInterrupted.total}\n type=\"completed\"\n item={item}\n />\n );\n },\n job_type(item) {\n const {caption, jobType, taskInfo, isTotal} = item;\n if (taskInfo) {\n return <TaskInfo {...taskInfo} />;\n }\n\n const {expandedState, allowActions} = self.state;\n const expandable = !isTotal && allowActions && caption;\n\n const expanded = expandedState[caption!];\n const onClick = !expandable ? undefined : () => self.toggleExpand(caption);\n\n return (\n <div className={block('job-type')}>\n <div>\n {Boolean(caption) && (\n <ExpandIcon\n visible={Boolean(onClick)}\n expanded={Boolean(expanded)}\n onClick={onClick}\n />\n )}\n </div>\n <div\n onClick={onClick}\n className={block('name', {\n clickable: Boolean(expandable),\n })}\n >\n <span title={`Task ${caption}`}>{caption}</span>\n {!isTotal && (\n <React.Fragment>\n <br />\n {typeof item.jobType !== 'undefined' && (\n <span\n className={'elements-secondary-text'}\n title={`Job type ${jobType}`}\n >\n {jobType}\n </span>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n );\n },\n actions({info, caption}) {\n if (!info) {\n return null;\n }\n return <ClickableAttributesButton title={`Tasks: ${caption}`} attributes={info} />;\n },\n };\n }\n\n // eslint-disable-next-line react/sort-comp\n toggleExpand(name: string) {\n const expandedState = {...this.state.expandedState};\n if (expandedState[name]) {\n delete expandedState[name];\n } else {\n expandedState[name] = true;\n }\n\n this.setState({\n expandedState,\n ...prepareVisibleItems(this.state.items, expandedState),\n });\n }\n\n rowClassName(item: Item) {\n if (item.taskInfo) {\n return block('row-task-info');\n }\n return item.isTotal ? block('row-total') : undefined;\n }\n\n colSpan(item: Item, _rowIndex: number, colIndex: number) {\n if (item.taskInfo && colIndex === 0) {\n return 8;\n }\n return undefined;\n }\n\n render() {\n const {className, jobs, collapsibleSize} = this.props;\n return !jobs?.items?.length ? null : (\n <CollapsibleSection\n name=\"Tasks\"\n className={className}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n {this.renderContent()}\n </CollapsibleSection>\n );\n }\n\n renderContent() {\n const {\n abortedJobsTimeRatio,\n abortedJobsTime,\n completedJobsTime,\n averageReadDataRate,\n averageReadRowRate,\n items,\n } = this.props.jobs;\n const rowRateFormat = (value: number) =>\n hammer.format['NumberPerSecond'](value, {measure: 'rows'});\n const {allowActions, visibleItems} = this.state;\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n [\n {\n key: 'aborted_jobs_time_ratio',\n value: (\n <Template.FormattedValue\n value={abortedJobsTimeRatio}\n format=\"Percent\"\n />\n ),\n },\n {\n key: 'aborted_jobs_time',\n value: (\n <Template.FormattedValue\n value={abortedJobsTime}\n format=\"TimeDuration\"\n />\n ),\n },\n {\n key: 'completed_jobs_time',\n value: (\n <Template.FormattedValue\n value={completedJobsTime}\n format=\"TimeDuration\"\n />\n ),\n },\n ],\n [\n {\n key: 'average_read_data_rate',\n value: (\n <Template.FormattedValue\n value={averageReadDataRate}\n format=\"BytesPerSecond\"\n />\n ),\n },\n {\n key: 'average_read_row_rate',\n value: (\n <Template.FormattedValue\n value={averageReadRowRate}\n format={rowRateFormat}\n />\n ),\n },\n ],\n ]}\n />\n\n <div className={block('table-container')}>\n {items.length > 0 && (\n <ElementsTable\n {...tasksTablesProps}\n columnsMode={allowActions ? 'withActions' : undefined}\n items={visibleItems}\n css={block()}\n templates={this.templates}\n rowClassName={this.rowClassName}\n colSpan={this.colSpan}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\ninterface ItemTaskInfo {\n job_type: string;\n has_user_job: boolean;\n input_finished: boolean;\n completed: boolean;\n user_job_memory_reserve_factor: number;\n start_time: string;\n completion_time: string;\n ready_time: string;\n exhaust_time: string;\n}\n\nfunction TaskInfo(props: ItemTaskInfo) {\n const {\n job_type,\n has_user_job,\n input_finished,\n completed,\n user_job_memory_reserve_factor,\n start_time,\n completion_time,\n ready_time,\n exhaust_time,\n } = props;\n\n const readyTime = ypath.getValue(ready_time);\n const exhaustTime = ypath.getValue(exhaust_time);\n\n const timeSum = readyTime + exhaustTime;\n\n return (\n <MetaTable\n className={block('info-meta')}\n items={[\n [\n {\n key: 'job_type',\n value: <Template.Value value={ypath.getValue(job_type)} />,\n },\n {\n key: 'has_user_job',\n value: <Template.Readable value={String(ypath.getValue(has_user_job))} />,\n },\n {\n key: 'input_finished',\n value: <Template.Readable value={String(ypath.getValue(input_finished))} />,\n },\n {\n key: 'completed',\n value: <Template.Readable value={String(ypath.getValue(completed))} />,\n },\n {\n key: 'user_job_memory_reserve_factor',\n value: (\n <Template.Number\n value={ypath.getValue(user_job_memory_reserve_factor)}\n />\n ),\n },\n {\n key: 'start_time',\n value: <Template.Time time={ypath.getValue(start_time)} />,\n },\n {\n key: 'completion_time',\n value: <Template.Time time={ypath.getValue(completion_time)} />,\n },\n ],\n [\n {\n key: 'ready_time',\n value: (\n <Template.Time\n time={readyTime}\n valueFormat={'TimeDuration'}\n settings={{format: 'milliseconds'}}\n />\n ),\n },\n {\n key: 'exhaust_time',\n value: (\n <Template.Time\n time={exhaustTime}\n valueFormat={'TimeDuration'}\n settings={{format: 'milliseconds'}}\n />\n ),\n },\n {\n key: 'tail_time_fraction',\n value:\n timeSum === 0 ? (\n 'n/a'\n ) : (\n <Template.FormattedValue\n value={(exhaustTime / timeSum) * 100}\n format={'Percent'}\n settings={{digits: 1}}\n />\n ),\n },\n ],\n ]}\n />\n );\n}\n\nconst connector = connect((state: RootState) => {\n const taskData = getOperationDetailTasksData(state);\n return {jobs: taskData, operation: state.operations.detail.operation};\n});\n\nexport default connector(Tasks);\n","import React, {Component} from 'react';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport AlertEvents from '../../../../../../components/AlertEvents/AlertEvents';\nimport OperationDescription from '../../../../../../pages/operations/OperationDetail/tabs/details/Description';\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\nimport Button from '../../../../../../components/Button/Button';\nimport Error from '../../../../../../components/Error/Error';\nimport Icon from '../../../../../../components/Icon/Icon';\n\nimport DataFlow, {intermediateResourcesProps, resourcesProps} from '../DataFlow/DataFlow';\nimport Specification, {specificationProps} from '../Specification/Specification';\nimport Runtime, {operationProps, runtimeProps} from '../Runtime/Runtime';\nimport Events, {eventsProps} from '../Events/Events';\nimport Tasks from '../Tasks/Tasks';\n\nimport {showEditPoolsWeightsModal} from '../../../../../../store/actions/operations';\n\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {\n getOperationAlertEvents,\n getOperationDetailsLoadingStatus,\n} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\n\nimport './Details.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../../constants/global';\n\nexport {operationProps} from '../Runtime/Runtime';\n\nconst block = cn('operation-details');\n\nclass Details extends Component {\n static propTypes = {\n error: PropTypes.object,\n specification: specificationProps.isRequired,\n operation: operationProps.isRequired,\n cluster: PropTypes.string.isRequired,\n result: PropTypes.shape({\n error: PropTypes.object.isRequired,\n }),\n runtime: runtimeProps,\n events: eventsProps,\n resources: resourcesProps,\n intermediateResources: intermediateResourcesProps,\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n };\n\n handleEditClick = () => {\n const {operation, showEditPoolsWeightsModal} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderDescription() {\n const {description, collapsibleSize} = this.props.operation;\n\n return (\n description && (\n <CollapsibleSection\n name=\"Description\"\n className={block('description')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <OperationDescription description={description} />\n </CollapsibleSection>\n )\n );\n }\n\n renderSpecification() {\n const {specification, cluster, collapsibleSize} = this.props;\n\n return (\n <CollapsibleSection\n name=\"Specification\"\n className={block('specification')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Specification specification={specification} cluster={cluster} />\n </CollapsibleSection>\n );\n }\n\n renderAlerts() {\n const {alertEvents, collapsibleSize} = this.props;\n return !alertEvents?.length ? null : (\n <CollapsibleSection name=\"Alerts\" size={collapsibleSize} marginDirection=\"bottom\">\n <AlertEvents items={alertEvents} />\n </CollapsibleSection>\n );\n }\n\n renderError() {\n const {error} = this.props;\n\n return (\n error && (\n <div className={block('result')}>\n <Error {...error} />\n </div>\n )\n );\n }\n\n renderRuntimeOverview() {\n return (\n <Button\n size=\"s\"\n onClick={this.handleEditClick}\n title=\"Edit pools and weights\"\n className={block('edit-button')}\n >\n <Icon awesome=\"pencil\" />\n &nbsp;Edit\n </Button>\n );\n }\n\n renderRuntime() {\n const {runtime, operation, cluster, collapsibleSize} = this.props;\n\n return (\n runtime?.length > 0 && (\n <CollapsibleSection\n name=\"Runtime\"\n className={block('runtime')}\n overview={this.renderRuntimeOverview()}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Runtime runtime={runtime} operation={operation} cluster={cluster} />\n </CollapsibleSection>\n )\n );\n }\n\n renderJobs() {\n const {collapsibleSize} = this.props;\n return <Tasks className={block('jobs')} size={collapsibleSize} />;\n }\n\n renderResources() {\n const {resources, intermediateResources, operation, collapsibleSize} = this.props;\n\n return (\n resources && (\n <CollapsibleSection\n name=\"Data flow\"\n className={block('resources')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <DataFlow\n operation={operation}\n resources={resources}\n intermediateResources={intermediateResources}\n />\n </CollapsibleSection>\n )\n );\n }\n\n renderEvents() {\n const {events, collapsibleSize} = this.props;\n\n return (\n events && (\n <CollapsibleSection\n name=\"Events\"\n className={block('events')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Events events={events} />\n </CollapsibleSection>\n )\n );\n }\n\n render() {\n return (\n <div className={block()}>\n <div className={block('section')}>\n {this.renderDescription()}\n {this.renderSpecification()}\n </div>\n\n <div className={block('section')}>\n {this.renderAlerts()}\n {this.renderError()}\n {this.renderRuntime()}\n {this.renderJobs()}\n {this.renderResources()}\n {this.renderEvents()}\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {operations, global} = state;\n\n const {cluster} = global;\n const {operation} = operations.detail;\n\n return {\n cluster,\n operation,\n ...operations.detail.details,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n alertEvents: getOperationAlertEvents(state),\n };\n};\n\nconst mapDispatchToProps = {\n showEditPoolsWeightsModal,\n};\n\nconst DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\n\nexport default function DetailsWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_DETAILS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_DETAILS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <DetailsConnected />;\n}\n","import React from 'react';\nimport Link from '../Link/Link';\nimport {uiSettings} from '../../config/ui-settings';\n\nfunction StarTrackLink(props: {id: string; emptyContent?: React.ReactNode}) {\n const {id, emptyContent = null, ...rest} = props;\n\n const {trackerBaseUrl} = uiSettings;\n const url = `${trackerBaseUrl}/${id}`;\n return !id ? (\n <>{emptyContent}</>\n ) : (\n <Link {...rest} url={trackerBaseUrl ? url : undefined}>\n {id}\n </Link>\n );\n}\n\nexport default React.memo(StarTrackLink);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useSelector} from 'react-redux';\n\nimport map_ from 'lodash/map';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {CollapsibleSectionStateLess} from '../../../../components/CollapsibleSection/CollapsibleSection';\nimport {\n OperationExperimentItem,\n getOperationExperimentAssignments,\n} from '../../../../store/selectors/operations/operation';\nimport {ClickableText} from '../../../../components/ClickableText/ClickableText';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport StarTrackLink from '../../../../components/StarTrackLink/StarTrackLink';\nimport Yson from '../../../../components/Yson/Yson';\nimport {getOperationExperimentsYsonSettings} from '../../../../store/selectors/thor/unipika';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\n\nconst block = cn('experiment-assignments');\n\nexport default React.memo(ExperimentAssignments);\n\nconst ExperimentsItem = React.memo(ExperimentAssignmentsItem);\n\nfunction ExperimentAssignments({className}: {className: string}) {\n const items = useSelector(getOperationExperimentAssignments);\n const [collapsed, setCollapsed] = React.useState(true);\n\n const onToggleCollapse = React.useCallback(() => {\n setCollapsed(!collapsed);\n }, [collapsed, setCollapsed]);\n\n return !items?.length ? null : (\n <CollapsibleSectionStateLess\n className={block(null, className)}\n name=\"Experiments\"\n onToggle={onToggleCollapse}\n collapsed={collapsed}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n {map_(items, (item, index) => (\n <ExperimentsItem key={index} data={item} />\n ))}\n </CollapsibleSectionStateLess>\n );\n}\n\ninterface ItemProps {\n data: OperationExperimentItem;\n}\n\nfunction ExperimentAssignmentsItem(props: ItemProps) {\n const {data} = props;\n const [effectVisible, setEffectVisibility] = React.useState(false);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {fraction: _fr, ...effect} = ypath.getValue(data, '/effect');\n\n const settings = useSelector(getOperationExperimentsYsonSettings);\n\n const toggleEffectVisibility = React.useCallback(() => {\n setEffectVisibility(!effectVisible);\n window.dispatchEvent(new Event('resize'));\n }, [effectVisible, setEffectVisibility]);\n\n return (\n <div>\n <MetaTable\n items={[\n [\n {\n key: 'Experiment',\n value: ypath.getValue(data, '/experiment'),\n },\n {\n key: 'Group',\n value: ypath.getValue(data, '/group'),\n },\n ],\n [\n {\n key: 'Ticket',\n value: <StarTrackLink id={ypath.getValue(data, '/ticket')} />,\n },\n {\n key: 'Dimension',\n value: ypath.getValue(data, '/dimension'),\n },\n ],\n [\n {\n key: 'Effect',\n value: (\n <ClickableText onClick={toggleEffectVisibility}>\n {effectVisible ? 'Hide' : 'Show'}\n </ClickableText>\n ),\n },\n ],\n ]}\n />\n {effectVisible && <Yson value={effect} settings={settings} folding virtualized />}\n </div>\n );\n}\n","import React from 'react';\nimport {connect, useSelector} from 'react-redux';\nimport unipika from '../../../../../common/thor/unipika';\n\nimport keys_ from 'lodash/keys';\nimport throttle_ from 'lodash/throttle';\n\nimport cn from 'bem-cn-lite';\n\nimport {CollapsibleSectionStateLess} from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport Yson from '../../../../../components/Yson/Yson';\n\nimport {operationProps} from '../../../../../pages/operations/OperationDetail/tabs/details/Details/Details';\n\nimport {getOperationDetailsLoadingStatus} from '../../../../../store/selectors/operations/operation';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nimport './Specification.scss';\nimport ExperimentAssignments from '../../ExperimentAssignments/ExperimentAssignments';\nimport {docsUrl} from '../../../../../config';\nimport UIFactory from '../../../../../UIFactory';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../constants/global';\n\nconst block = cn('operation-specification');\n\nconst onResize = throttle_(\n () => {\n window.dispatchEvent(new Event('resize'));\n },\n 100,\n {leading: false},\n);\n\nfunction Specification({operation}) {\n const helpUrl = UIFactory.docsUrls['operations:operations_options'];\n\n const providedSpec = operation.typedProvidedSpec || operation.typedSpec;\n\n const unrecognizedSpec = operation.typedUnrecognizedSpec || {};\n const fullSpec = operation.typedFullSpec;\n\n const hasUnrecognized = keys_(unrecognizedSpec).length > 0;\n\n const [collapsed, setCollapsed] = React.useState({\n provided: hasUnrecognized,\n unrecognized: false,\n resulting: true,\n });\n\n const onToggleProvided = React.useCallback((provided) => {\n setCollapsed({unrecognized: true, resulting: true, provided});\n onResize();\n });\n\n const onToggleUnrecognized = React.useCallback((unrecognized) => {\n setCollapsed({unrecognized, provided: true, resulting: true});\n onResize();\n });\n\n const onToggleResulting = React.useCallback((resulting) => {\n setCollapsed({unrecognized: true, resulting, provided: true});\n onResize();\n });\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n {docsUrl(\n <div className={block('help', 'elements-section')}>\n <HelpLink url={helpUrl} />\n </div>,\n )}\n\n <CollapsibleSectionStateLess\n name=\"Provided specification\"\n onToggle={onToggleProvided}\n collapsed={collapsed.provided}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={providedSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n />\n </CollapsibleSectionStateLess>\n\n <ExperimentAssignments />\n\n {hasUnrecognized && (\n <CollapsibleSectionStateLess\n name=\"Unrecognized specification\"\n onToggle={onToggleUnrecognized}\n collapsed={collapsed.unrecognized}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={unrecognizedSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n />\n </CollapsibleSectionStateLess>\n )}\n\n {fullSpec && (\n <CollapsibleSectionStateLess\n name=\"Resulting specification\"\n onToggle={onToggleResulting}\n collapsed={collapsed.resulting}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={fullSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n />\n </CollapsibleSectionStateLess>\n )}\n </div>\n </ErrorBoundary>\n );\n}\n\nSpecification.propTypes = {\n // from connect\n operation: operationProps.isRequired,\n};\n\nconst mapStateToProps = ({operations}) => ({\n operation: operations.detail.operation,\n});\n\nconst SpecificationConnected = connect(mapStateToProps)(Specification);\n\nexport default function SpecificationWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_SPECIFICATION,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_SPECIFICATION,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <SpecificationConnected />;\n}\n","import React from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ypath from '../../../../../../common/thor/ypath';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {operationProps} from '../../details/Runtime/Runtime';\nimport {getTheme} from '../../../../../../store/selectors/global';\n\nimport WithStickyToolbar from '../../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {hasTaskHistograms} from '../../../../../../utils/operations/jobs';\nimport {getOperationDetailsLoadingStatus} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport {RootState} from '../../../../../../store/reducers';\nimport YTHistogram, {\n YTHistogramProps,\n YTHistorgramData,\n calculateFormatSettings,\n} from '../../../../../../components/YTHistogram/YTHistogram';\n\nimport './JobSizes.scss';\n\nconst block = cn('operation-detail-job-sizes');\n\ntype Props = ConnectedProps<typeof connector> & {\n className?: string;\n};\n\ninterface State {\n formatSettings?: {digits: number};\n data?: YTHistorgramData;\n showEstimated: boolean;\n}\n\nclass JobSizes extends React.Component<Props, State> {\n static propTypes = {\n operation: operationProps.isRequired,\n chartKitTheme: PropTypes.string.isRequired,\n };\n\n static getDerivedStateFromProps(props: Props) {\n const progress = ypath.getValue(props.operation, '/@progress');\n const data = progress && ypath.getValue(progress, '/partition_size_histogram');\n\n return {\n formatSettings: calculateFormatSettings(data, format.Bytes),\n data,\n };\n }\n\n state: State = {\n showEstimated: false,\n };\n\n render() {\n const {className} = this.props;\n return (\n <WithStickyToolbar\n className={className}\n content={this.renderContent()}\n toolbar={\n <Toolbar\n itemsToWrap={[\n {\n name: 'showEstimated',\n node: (\n <Checkbox\n size=\"l\"\n onUpdate={this.toggleEstimated}\n checked={this.state.showEstimated}\n >\n Show estimated\n </Checkbox>\n ),\n },\n ]}\n />\n }\n />\n );\n }\n\n prepareJobSizes() {\n const {operation} = this.props;\n const progress = ypath.getValue(operation, '/@progress');\n\n return progress\n ? {\n estimatedJobSizeHistogram: ypath.getValue(\n progress,\n '/estimated_input_data_size_histogram',\n ),\n jobSizeHistogram: ypath.getValue(progress, '/input_data_size_histogram'),\n }\n : {};\n }\n\n renderChart(data: YTHistorgramData, title: string) {\n if (!data) {\n return null;\n }\n\n return (\n <div className={block('chart-section')}>\n <div className=\"elements-heading elements-heading_size_m\">{title}</div>\n <YTHistogram\n className={block('charts')}\n data={data}\n yLabel={'job count'}\n xLabel={'job input data weight'}\n xFormat={this.formatX}\n yMin={0.5}\n yLogarithmic\n renderTooltip={this.renderTooltip}\n />\n </div>\n );\n }\n\n formatX = (v?: number | string | null) => {\n const {formatSettings} = this.state;\n return format.Bytes(v, formatSettings) as string;\n };\n\n renderTooltip: YTHistogramProps['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> jobs have estimated input job size from <b>${x0}</b> to <b>${x1}</b>`;\n };\n\n renderPerTaskCharts(tasks: any) {\n const {showEstimated} = this.state;\n return map_(\n tasks,\n ({task_name, estimated_input_data_weight_histogram, input_data_weight_histogram}) => {\n return (\n <div className={block('task-cell', {'per-task': true})} key={task_name}>\n {this.renderChart(\n input_data_weight_histogram,\n `Task \"${task_name}\" actual data weight`,\n )}\n {showEstimated &&\n this.renderChart(\n estimated_input_data_weight_histogram,\n `Task \"${task_name}\" estimated data weight`,\n )}\n </div>\n );\n },\n );\n }\n\n renderCommon() {\n const {showEstimated} = this.state;\n const {jobSizeHistogram, estimatedJobSizeHistogram} = this.prepareJobSizes();\n return (\n <div className={block('task-cell')}>\n {this.renderChart(jobSizeHistogram, 'Input')}\n {showEstimated && this.renderChart(estimatedJobSizeHistogram, 'Estimated input')}\n </div>\n );\n }\n\n renderContent() {\n const {operation} = this.props;\n const tasks = ypath.getValue(this.props.operation, '/@progress/tasks');\n return (\n <ErrorBoundary>\n <div className={block()}>\n {hasTaskHistograms(operation)\n ? this.renderPerTaskCharts(tasks)\n : this.renderCommon()}\n </div>\n </ErrorBoundary>\n );\n }\n\n toggleEstimated = () => {\n const {showEstimated} = this.state;\n this.setState({showEstimated: !showEstimated});\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n const chartKitTheme = getTheme(state);\n\n return {operation, chartKitTheme};\n};\n\nconst connector = connect(mapStateToProps);\n\nconst JobSizesConnected = connector(JobSizes);\n\nexport default function JobSizesWithRum(props: {className?: string}) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_JOB_SIZES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_JOB_SIZES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <JobSizesConnected {...props} />;\n}\n","const completedHintText =\n 'Completed jobs — those which have finished successfully (i.e. consumed entire input and exited with zero exit code). Please note that due to hardware failures some jobs may be run more than once.';\nconst abortedHintText =\n 'Aborted jobs — those with soft failure (i.e. resource overdraft or preemption). Please note that some of aborted jobs may be excluded from statistics.';\nconst failedHintText =\n 'Failed jobs — those with hard failure (i.e. exited with non-zero exit code). Please note that some of failed jobs may be excluded from statistics.';\nconst lostHintText =\n 'Lost jobs — those which have finished successfully but whose results were lost (typically due to hardware failures).';\n\nexport const STATISTIC_STATE = {\n completed: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: completedHintText},\n },\n aborted: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: abortedHintText},\n },\n failed: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: failedHintText},\n },\n lost: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: lostHintText},\n },\n};\n\nexport const statisticsTableProps = {\n theme: 'light',\n size: 's',\n striped: false,\n computeKey(item) {\n return `<Root>/${item.name}`;\n },\n tree: true,\n columns: {\n sets: {\n default: {\n items: ['metric'].concat(Object.keys(STATISTIC_STATE)),\n },\n },\n items: {...STATISTIC_STATE, metric: {sort: false, align: 'left'}},\n mode: 'default',\n },\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport find_ from 'lodash/find';\nimport cn from 'bem-cn-lite';\n\nimport {getOperationStatisticsDescription} from '../../../../../store/selectors/global/supported-features';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport Icon from '../../../../../components/Icon/Icon';\nimport {Secondary} from '../../../../../components/Text/Text';\nimport format from '../../../../../common/hammer/format';\n\nimport './OperationStatisticName.scss';\n\nconst block = cn('operation-statistc-name');\n\nfunction useStatisticInfo(name: string) {\n const {byName, byRegexp} = useSelector(getOperationStatisticsDescription);\n\n const info = React.useMemo(() => {\n const key = name.startsWith('<Root>/') ? name.substring('<Root>/'.length) : name;\n const res = key.endsWith('/$$') ? byName[key.substring(0, key.length - 3)] : byName[key];\n if (res) {\n return res;\n }\n\n return find_(byRegexp, ({regexp}) => {\n return regexp.test(key);\n });\n }, [name, byName, byRegexp]);\n\n return info;\n}\n\nfunction OperationStatisticNameImpl({name, title}: {name: string; title: string}) {\n const info = useStatisticInfo(name);\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\nconst UNIT_TO_FORMATTER: Record<string, (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\nfunction OperationStatisticValueImpl({\n name,\n settings,\n value,\n}: {\n value?: number;\n name: string;\n settings?: {significantDigits: number};\n}) {\n const info = useStatisticInfo(name);\n const formatFn = UNIT_TO_FORMATTER[info?.unit || ''];\n\n const asNumber = format.Number(value, settings);\n\n return formatFn ? <Tooltip content={asNumber}>{formatFn(value, settings)}</Tooltip> : asNumber;\n}\n\nexport const OperationStatisticValue = React.memo(OperationStatisticValueImpl);\nexport const OperationStatisticName = React.memo(OperationStatisticNameImpl);\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport Button from '../../../../../components/Button/Button';\nimport Filter from '../../../../../components/Filter/Filter';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n AGGREGATOR_RADIO_ITEMS,\n DEBOUNCE_DELAY,\n TREE_STATE,\n} from '../../../../../constants/operations/statistics';\nimport {\n changeAggregation,\n changeFilterText,\n changeJobType,\n changePoolTreeFilter,\n setTreeState,\n} from '../../../../../store/actions/operations/statistics';\nimport {statisticsTableProps} from '../../../../../utils/operations/tabs/statistics/statisticsTableProps';\nimport {makeRadioButtonProps} from '../../../../../utils';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getOperationDetailsLoadingStatus} from '../../../../../store/selectors/operations/operation';\nimport {\n getOperationStatisticsActiveFilterValues,\n getOperationStatisticsAvailableValues,\n getOperationStatisticsFiltered,\n} from '../../../../../store/selectors/operations/statistics-v2';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {docsUrl} from '../../../../../config';\nimport UIFactory from '../../../../../UIFactory';\nimport {WaitForFont} from '../../../../../containers/WaitForFont/WaitForFont';\n\nimport {OperationStatisticName, OperationStatisticValue} from './OperationStatisticName';\nimport './Statistics.scss';\n\nconst statisticsBlock = cn('operation-statistics');\nconst toolbarBlock = cn('elements-toolbar');\n\ntype ItemType = ReturnType<typeof getOperationStatisticsFiltered>[0];\n\ninterface ItemState {\n collapsed?: boolean;\n empty?: boolean;\n}\n\ntype Props = {className?: string} & ConnectedProps<typeof connector>;\n\nexport class Statistics extends Component<Props> {\n componentWillUnmount() {\n this.expandTable();\n }\n\n // eslint-disable-next-line react/sort-comp\n get template() {\n const {setTreeState, activeAggregation} = this.props;\n\n return {\n metric(\n item: ItemType,\n _columnName: 'metric',\n toggleItemState: (...args: Array<unknown>) => void,\n itemState: ItemState,\n ) {\n const OFFSET = 40;\n const offsetStyle = {paddingLeft: item.level * OFFSET};\n\n if (item.isLeafNode) {\n return (\n <span className={statisticsBlock('metric')} style={offsetStyle}>\n <Icon className={statisticsBlock('metric-icon')} awesome=\"chart-line\" />\n <OperationStatisticName name={item.name} title={item.title} />\n </span>\n );\n } else {\n const togglerIconName =\n itemState.collapsed || itemState.empty ? 'angle-down' : 'angle-up';\n const itemIconName =\n itemState.collapsed || itemState.empty ? 'folder' : 'folder-open';\n\n const toggleItemAndTreeState = (...rest: Array<unknown>) => {\n if (!itemState.empty) {\n toggleItemState(...rest);\n setTreeState('mixed');\n }\n };\n\n return (\n <span\n className={statisticsBlock('group')}\n style={offsetStyle}\n onClick={toggleItemAndTreeState}\n >\n <Icon\n className={statisticsBlock('group-icon-toggler')}\n awesome={togglerIconName}\n />\n <Icon\n className={statisticsBlock('group-icon')}\n awesome={itemIconName}\n />\n <span>{item.title}</span>\n </span>\n );\n }\n },\n __default__(item: ItemType, columnName: keyof Required<typeof item>['data']) {\n if (item.isLeafNode) {\n const metric = item.data?.[columnName];\n\n let value;\n let settings;\n\n if (activeAggregation === 'avg') {\n value = metric && metric.count && metric.sum / metric.count;\n\n if (value! < 1) {\n settings = {\n significantDigits: 6,\n };\n }\n } else {\n value = metric && metric[activeAggregation];\n }\n\n if (activeAggregation === 'count') {\n return format['Number'](value, settings);\n }\n\n return (\n <OperationStatisticValue\n value={value!}\n settings={settings}\n name={item.name}\n />\n );\n }\n return null;\n },\n };\n }\n\n collapseTable = () => this.props.setTreeState(TREE_STATE.COLLAPSED);\n expandTable = () => this.props.setTreeState(TREE_STATE.EXPANDED);\n\n renderToolbar() {\n const {filterText, activeAggregation, jobTypes, poolTrees, activeJobType, activePoolTree} =\n this.props;\n\n return (\n <div className={toolbarBlock(null, statisticsBlock('toolbar'))}>\n <div className={toolbarBlock('container')}>\n <div className={toolbarBlock('component', statisticsBlock('filter'))}>\n <Filter\n size=\"m\"\n value={filterText}\n debounce={DEBOUNCE_DELAY}\n onChange={this.props.changeFilterText}\n />\n </div>\n\n {poolTrees.length > 1 && (\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activePoolTree ?? ''}\n onUpdate={this.props.changePoolTreeFilter}\n items={makeRadioButtonProps(poolTrees, '')}\n name=\"operation-statistics-pool-tree\"\n />\n </div>\n )}\n\n {jobTypes.length > 1 && (\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activeJobType ?? ''}\n onUpdate={this.props.changeJobType}\n items={makeRadioButtonProps(jobTypes, '')}\n name=\"operation-statistics-job-type\"\n />\n </div>\n )}\n\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activeAggregation}\n onChange={this.props.changeAggregation}\n items={AGGREGATOR_RADIO_ITEMS}\n name=\"operation-statistics-aggregator\"\n />\n </div>\n\n <div className={toolbarBlock('component', statisticsBlock('expand-collapse'))}>\n <span className={statisticsBlock('expand-metrics')}>\n <Button size=\"m\" title=\"Expand All\" onClick={this.expandTable}>\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n </span>\n\n <span className={statisticsBlock('collapse-metrics')}>\n <Button size=\"m\" title=\"Collapse All\" onClick={this.collapseTable}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </span>\n </div>\n {docsUrl(\n <div className={toolbarBlock('component', statisticsBlock('help'))}>\n <HelpLink url={UIFactory.docsUrls['problems:jobstatistics']} />\n </div>,\n )}\n </div>\n </div>\n );\n }\n\n render() {\n const {className, treeState, items} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={statisticsBlock(null, className)}>\n {this.renderToolbar()}\n <WaitForFont>\n <ElementsTable\n {...statisticsTableProps}\n templates={this.template}\n css={statisticsBlock()}\n treeState={treeState}\n items={items}\n />\n </WaitForFont>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {treeState, activeAggregation} = state.operations.statistics;\n\n const {job_type: jobTypes, pool_tree: poolTrees} = getOperationStatisticsAvailableValues(state);\n\n return {\n items: getOperationStatisticsFiltered(state),\n treeState,\n activeAggregation,\n jobTypes,\n poolTrees,\n ...getOperationStatisticsActiveFilterValues(state),\n };\n};\n\nconst mapDispatchToProps = {\n setTreeState,\n changeFilterText,\n changeAggregation,\n changeJobType,\n changePoolTreeFilter,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst StatisticsConnected = connector(Statistics);\n\nexport default function SpecificationWithRum(props: {className: string}) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_STATISTICS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_STATISTICS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <StatisticsConnected {...props} />;\n}\n","import {\n CHANGE_AGGREGATION,\n CHANGE_FILTER_TEXT,\n OPERATION_STATISTICS_PARTIAL,\n SET_TREE_STATE,\n} from '../../../constants/operations/statistics';\nimport {getOperation} from '../../../store/selectors/operations/operation';\nimport {getSettingOperationStatisticsActiveJobTypes} from '../../../store/selectors/settings-ts';\nimport {setSettingsStatisticsActiveJobTypes} from '../../../store/actions/settings/settings';\n\nexport function setTreeState(treeState) {\n return {\n type: SET_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changeFilterText(filterText) {\n return {\n type: CHANGE_FILTER_TEXT,\n data: {filterText},\n };\n}\n\nexport function changeAggregation({target}) {\n return {\n type: CHANGE_AGGREGATION,\n data: {activeAggregation: target.value},\n };\n}\n\nexport function changeJobType(jobType) {\n return (dispatch, getState) => {\n dispatch({\n type: OPERATION_STATISTICS_PARTIAL,\n data: {jobTypeFilter: jobType},\n });\n\n const state = getState();\n const operationType = getOperation(state).type;\n const settingsJobTypes = getSettingOperationStatisticsActiveJobTypes(state);\n\n if (settingsJobTypes && settingsJobTypes[operationType] !== jobType) {\n dispatch(\n setSettingsStatisticsActiveJobTypes({\n ...settingsJobTypes,\n [operationType]: jobType,\n }),\n );\n }\n };\n}\n\nexport function changePoolTreeFilter(poolTreeFilter) {\n return (dispatch) => {\n dispatch({type: OPERATION_STATISTICS_PARTIAL, data: {poolTreeFilter}});\n };\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../common/thor/ypath';\nimport {\n GET_COMPETITIVE_JOBS,\n GET_JOB,\n GET_JOBS,\n HIDE_INPUT_PATHS,\n OPERATION_JOBS_TABLE_ID,\n RESET_COMPETITIVE_JOBS,\n SHOW_INPUT_PATHS,\n UPDATE_FILTER,\n UPDATE_FILTER_COUNTERS,\n UPDATE_OFFSET,\n} from '../../../constants/operations/jobs';\nimport {changeColumnSortOrder} from '../../../store/actions/tables';\nimport {\n getCompetitiveJobsRequestParameters,\n getJobRequestParameters,\n getJobsRequestParameters,\n} from '../../../store/actions/operations/utils';\nimport {OPERATIONS_PAGE} from '../../../constants/operations/list';\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\nimport {USE_CACHE, USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\n\nimport {getShowCompetitiveJobs} from '../../../pages/operations/selectors';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\n\nconst requests = new CancelHelper();\n\nconst getOperation = (state) => state.operations.detail.operation;\n\nexport function getJob() {\n return (dispatch, getState) => {\n const state = getState();\n const clusterConfig = getCurrentClusterConfig(state);\n\n requests.removeAllRequests();\n return ytApiV3\n .getJob({\n parameters: getJobRequestParameters(state),\n cancellation: requests.saveCancelToken,\n })\n .then((job) => {\n dispatch({\n type: GET_JOB.SUCCESS,\n data: {\n job,\n clusterConfig,\n operationId: getOperation(state).$value,\n },\n });\n dispatch(getCompetitiveJobs());\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_JOB.CANCELLED});\n } else {\n dispatch({\n type: GET_JOB.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function getCompetitiveJobs() {\n return (dispatch, getState) => {\n const state = getState();\n const clusterConfig = getCurrentClusterConfig(state);\n\n requests.removeAllRequests();\n return ytApiV3\n .listJobs({\n parameters: getCompetitiveJobsRequestParameters(state),\n cancellation: requests.saveCancelToken,\n })\n .then(({jobs}) => {\n dispatch({\n type: GET_COMPETITIVE_JOBS.SUCCESS,\n data: {\n jobs,\n clusterConfig,\n operationId: getOperation(state).$value,\n },\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_COMPETITIVE_JOBS.CANCELLED});\n } else {\n dispatch({\n type: GET_COMPETITIVE_JOBS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nconst getJobsCanceler = new CancelHelper();\n\nexport function getJobs() {\n return (dispatch, getState) => {\n const state = getState();\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\n\n if (showCompetitiveJobs) {\n return dispatch(getJob());\n }\n\n dispatch({\n type: GET_JOBS.REQUEST,\n });\n\n const requests = [\n {\n command: 'list_jobs',\n parameters: getJobsRequestParameters(state),\n },\n {\n command: 'list',\n parameters: {\n path: '//sys/cluster_nodes',\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\n },\n ];\n\n const clusterConfig = getCurrentClusterConfig(state);\n\n return ytApiV3Id\n .executeBatch(YTApiId.operationGetJobs, {\n parameters: {requests},\n cancellation: getJobsCanceler.removeAllAndSave,\n })\n .then(([jobs, addresses]) => {\n if (jobs.error) {\n return Promise.reject(jobs.error);\n }\n\n const {jobs: items, errors, state_counts, type_counts} = jobs.output;\n\n dispatch({\n type: GET_JOBS.SUCCESS,\n data: {\n jobs: items,\n jobsErrors: errors,\n addresses: ypath.getValue(addresses.output),\n operationId: getOperation(state).$value,\n clusterConfig,\n },\n });\n\n dispatch({\n type: UPDATE_FILTER_COUNTERS,\n data: {\n stateCounters: state_counts,\n typeCounters: type_counts,\n },\n });\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: GET_JOBS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function setFilter(name, value) {\n return {\n type: UPDATE_FILTER,\n data: {name, value},\n };\n}\n\nexport function resetCompetitiveJobs() {\n return {\n type: RESET_COMPETITIVE_JOBS,\n };\n}\n\nexport function updateFilteredAttributes(attributeNames, filtered) {\n return (dispatch) => {\n attributeNames.forEach((name) => {\n const isFiltered = filtered.indexOf(name) !== -1;\n dispatch(setFilter(name, isFiltered));\n });\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function updateFilter(name, value) {\n return (dispatch) => {\n const isStateFilter = name === 'state';\n const useFinishTime = value === 'completed' || value === 'failed' || value === 'aborted';\n const useStartTime = value === 'all' || value === 'running';\n\n if (isStateFilter && useFinishTime) {\n dispatch(\n changeColumnSortOrder({\n tableId: OPERATION_JOBS_TABLE_ID,\n columnName: 'finish_time',\n asc: false,\n }),\n );\n } else if (isStateFilter && useStartTime) {\n dispatch(\n changeColumnSortOrder({\n tableId: OPERATION_JOBS_TABLE_ID,\n columnName: 'start_time',\n asc: true,\n }),\n );\n }\n\n if (name === 'jobId' && !value) {\n dispatch(resetCompetitiveJobs());\n }\n\n dispatch(setFilter(name, value));\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function showInputPaths(job) {\n return (dispatch) => {\n const {id: jobId} = job;\n\n dispatch({\n type: SHOW_INPUT_PATHS.REQUEST,\n });\n\n ytApiV3\n .getJobInputPaths({\n job_id: jobId,\n output_format: TYPED_OUTPUT_FORMAT,\n })\n .then((inputPaths) => {\n dispatch({\n type: SHOW_INPUT_PATHS.SUCCESS,\n data: inputPaths,\n });\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SHOW_INPUT_PATHS.FAILURE,\n data: error,\n });\n }\n });\n };\n}\n\nexport function hideInputPaths() {\n return {\n type: HIDE_INPUT_PATHS,\n };\n}\n\nexport function gotoJobsPage(where) {\n return (dispatch, getState) => {\n const {limit, offset} = getState().operations.jobs.pagination;\n\n let data = null;\n switch (where) {\n case OPERATIONS_PAGE.FIRST:\n data = 0;\n break;\n case OPERATIONS_PAGE.NEXT:\n data = offset + limit;\n break;\n case OPERATIONS_PAGE.PREV:\n data = Math.max(0, offset - limit);\n if (data === offset) {\n return;\n }\n break;\n default:\n return;\n }\n\n dispatch({\n type: UPDATE_OFFSET,\n data,\n });\n dispatch(getJobs());\n };\n}\n","import {RootState} from '../../reducers';\n\nexport const getJobsErrors = (state: RootState) => state.operations.jobs.jobsErrors;\nexport const getJobsOperationId = (state: RootState) => state.operations.jobs.operationId;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../../../common/hammer';\nimport Link from '../../../../../../components/Link/Link';\nimport {Template} from '../../../../../../components/MetaTable/templates/Template';\nimport {showErrorModal} from '../../../../../../store/actions/actions';\nimport {showInputPaths} from '../../../../../../store/actions/operations/jobs';\nimport {useDispatch} from 'react-redux';\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobError({error}) {\n const dispatch = useDispatch();\n return (\n <div>\n <Template.Error error={error} onClick={() => dispatch(showErrorModal(error))} />\n </div>\n );\n}\n\nJobError.propTypes = {\n error: PropTypes.object,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobInputPaths({job}) {\n const dispatch = useDispatch();\n return (\n <Link theme=\"ghost\" onClick={() => dispatch(showInputPaths(job))}>\n View\n </Link>\n );\n}\n\nJobInputPaths.propTypes = {\n job: PropTypes.object.isRequired,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobDebugInfo({type, job}) {\n const {size, url} = job.getDebugInfo(type);\n return <Template.DownloadLink url={url} size={size} />;\n}\n\nJobDebugInfo.propTypes = {\n type: PropTypes.oneOf(['stderr', 'fail_context', 'full_input']).isRequired,\n job: PropTypes.object.isRequired,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobProgress({state, progress}) {\n const RESOLVED_PROGRESS = 100;\n const PENDING_PROGRESS = 0;\n\n switch (state) {\n case 'running':\n return <Progress size=\"s\" value={progress * 100} theme=\"info\" />;\n case 'completed':\n return <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"success\" />;\n case 'failed':\n return <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"danger\" />;\n case 'aborted':\n return <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"default\" />;\n default:\n return <Progress size=\"s\" value={PENDING_PROGRESS} />;\n }\n}\n\nJobProgress.propTypes = {\n state: PropTypes.string,\n progress: PropTypes.number,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction renderStatistics(state, statistics) {\n const [rowCount, dataSize] = ypath.getValues(statistics, [\n '/processed_input_row_count',\n '/processed_input_uncompressed_data_size',\n ]);\n return (\n (state === 'running' || state === 'completed') &&\n `${hammer.format['Number'](rowCount)} (${hammer.format['Bytes'](dataSize)})`\n );\n}\n\nfunction JobStatistics({state, statistics}) {\n return statistics ? renderStatistics(state, statistics) : null;\n}\n\nJobStatistics.propTypes = {\n state: PropTypes.string,\n statistics: PropTypes.object,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nexport default function JobTemplate() {}\n\nJobTemplate.Error = JobError;\nJobTemplate.InputPaths = JobInputPaths;\nJobTemplate.DebugInfo = JobDebugInfo;\nJobTemplate.Progress = JobProgress;\nJobTemplate.Statistics = JobStatistics;\n","import React, {Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport {Button, DropdownMenu} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport ypath from '../../../../../../common/thor/ypath';\nimport unipika from '../../../../../../common/thor/unipika';\nimport hammer from '../../../../../../common/hammer';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\nimport {OPERATION_JOBS_TABLE_ID} from '../../../../../../constants/operations/jobs';\nimport SimpleModal from '../../../../../../components/Modal/SimpleModal';\nimport Error from '../../../../../../components/Error/Error';\n\nimport ClipboardButton from '../../../../../../components/ClipboardButton/ClipboardButton';\nimport ChartLink from '../../../../../../components/ChartLink/ChartLink';\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport Yson from '../../../../../../components/Yson/Yson';\nimport Icon from '../../../../../../components/Icon/Icon';\nimport Link from '../../../../../../components/Link/Link';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\n\nimport {\n getCompetitiveJobs,\n getJobs,\n hideInputPaths,\n showInputPaths,\n} from '../../../../../../store/actions/operations/jobs';\nimport {openAttributesModal} from '../../../../../../store/actions/modals/attributes-modal';\nimport {promptAction, showErrorModal} from '../../../../../../store/actions/actions';\nimport {performJobAction} from '../utils';\nimport {LOADING_STATUS} from '../../../../../../constants/index';\nimport {PLEASE_PROCEED_TEXT} from '../../../../../../utils/actions';\nimport {getShowCompetitiveJobs} from '../../../../../../pages/operations/selectors';\nimport {getJobsOperationId} from '../../../../../../store/selectors/operations/jobs';\nimport {\n getOperationId,\n getOperationTasksNames,\n} from '../../../../../../store/selectors/operations/operation';\nimport UIFactory from '../../../../../../UIFactory';\nimport {StaleJobIcon} from '../StaleJobIcon';\n\nimport JobTemplate from './JobTemplate';\nimport './OperationJobsTable.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../../constants/global';\n\nconst block = cn('operation-detail-jobs');\n\nconst BriefStatisticsDetailsMemo = React.memo(BriefStatisticsDetails);\n\nclass OperationJobsTable extends React.Component {\n static propTypes = {\n isLoading: PropTypes.bool.isRequired,\n // from connect\n jobs: PropTypes.arrayOf(PropTypes.object),\n job: PropTypes.object,\n showCompetitiveJobs: PropTypes.bool.isRequired,\n competitiveJobs: PropTypes.arrayOf(PropTypes.object),\n cluster: PropTypes.string.isRequired,\n login: PropTypes.string.isRequired,\n inputPaths: PropTypes.shape({\n status: PropTypes.oneOf(Object.values(LOADING_STATUS)).isRequired,\n paths: PropTypes.arrayOf(PropTypes.string),\n error: PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.object,\n }),\n }),\n\n openAttributesModal: PropTypes.func.isRequired,\n showErrorModal: PropTypes.func.isRequired,\n showInputPaths: PropTypes.func.isRequired,\n hideInputPaths: PropTypes.func.isRequired,\n promptAction: PropTypes.func.isRequired,\n getJobs: PropTypes.func.isRequired,\n getCompetitiveJobs: PropTypes.func.isRequired,\n taskNamesNumber: PropTypes.number,\n };\n\n actions = [\n {\n name: 'abort',\n modalKey: 'job_abort',\n successMessage: 'Successfully aborted the job.',\n errorMessage: 'Could not abort the job.',\n text: 'Abort',\n message: 'Aborting job will cause losing its data, are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n },\n {\n name: 'abandon',\n modalKey: 'job_abandon',\n successMessage: 'Successfully abandoned the job.',\n errorMessage: 'Could not abandon the job.',\n text: 'Abandon',\n message: 'Abandoning job will cause losing its data, are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n },\n {\n name: 'input_context',\n modalKey: 'job_input_context',\n message: (\n <span>\n You are about to <strong>dump input context</strong> of the job\n </span>\n ),\n text: 'Dump input context',\n successMessageTemplate: (data) => {\n const url = `/${this.props.cluster}/navigation?path=${data}`;\n return (\n <span>\n Successfully dumped the job input context <Link url={url}>here</Link>\n </span>\n );\n },\n errorMessage: 'Could not dump the job input context.',\n },\n ];\n\n prepareJobAction = ({text, ...settings}) => {\n const {login, promptAction} = this.props;\n const message = settings.message || (\n <span>\n You are about to <strong>{settings.name}</strong> a job.\n </span>\n );\n\n return {\n text: text,\n action: (params) =>\n promptAction({\n ...settings,\n message,\n handler: ({currentOption}) => {\n const finalParams = {\n ...params,\n name: settings.name,\n currentOption,\n login,\n };\n return performJobAction(finalParams);\n },\n }),\n };\n };\n\n preparedActions = map_(this.actions, this.prepareJobAction);\n\n renderIdAddress = (item) => {\n const {cluster} = this.props;\n const {id, address, jobCompetitionId, operationId, is_stale, attributes} = item;\n const host = hammer.format['Address'](address);\n\n const from = ypath.getValue(attributes, '/start_time');\n const to = ypath.getValue(attributes, '/finish_time');\n const monitoring_descriptor = ypath.getValue(attributes, '/monitoring_descriptor');\n\n const isSpeculativeJob = jobCompetitionId && jobCompetitionId !== id;\n\n return (\n <div>\n <div className={block('id', 'elements-monospace')}>\n <ClipboardButton text={id} view=\"flat-secondary\" size=\"s\" title=\"Copy job id\" />\n <Link\n className={block('id-job-link')}\n routed\n url={`/${cluster}/job/${operationId}/${id}`}\n theme={'primary'}\n >\n {id}\n </Link>\n {is_stale && <StaleJobIcon />}\n </div>\n <div className={block('host', 'elements-monospace')}>\n <span className={block('host-name')}>\n <ClipboardButton\n text={host}\n view=\"flat-secondary\"\n size=\"s\"\n title=\"Copy host\"\n />\n {host}\n </span>\n <span className={block('host-chart-link')}>\n <ChartLink\n url={UIFactory.makeUrlForMonitoringDescriptor(\n cluster,\n {from, to},\n monitoring_descriptor,\n )}\n />\n </span>\n </div>\n {isSpeculativeJob && (\n <Fragment>\n <br />\n <span\n className={block(\n 'speculative-job-label',\n 'elements-monospace elements-ellipsis',\n )}\n >\n Speculative job for {jobCompetitionId}\n </span>\n </Fragment>\n )}\n </div>\n );\n };\n\n renderErrorAndDebug = (item) => {\n const items = [\n {\n key: 'error',\n value: <JobTemplate.Error error={item.error} />,\n visible: Boolean(item.error),\n },\n {\n key: 'input_paths',\n value: <JobTemplate.InputPaths job={item} />,\n visible: item.areInputPathsPresent(),\n },\n {\n key: 'stderr',\n value: <JobTemplate.DebugInfo job={item} type=\"stderr\" />,\n visible: item.getDebugInfo('stderr').size > 0,\n },\n {\n key: 'fail_context',\n value: <JobTemplate.DebugInfo job={item} type=\"fail_context\" />,\n visible: item.getDebugInfo('fail_context').size > 0,\n },\n {\n key: 'full_input',\n value: <JobTemplate.DebugInfo job={item} type=\"full_input\" />,\n visible: Boolean(item.hasSpec),\n },\n ];\n\n return <MetaTable items={items} />;\n };\n\n renderActions = (item) => {\n const {openAttributesModal} = this.props;\n\n const button = (\n <Button view=\"flat-secondary\" title=\"Show actions\">\n <Icon awesome=\"ellipsis-h\" />\n </Button>\n );\n const firstGroup = map_(this.preparedActions, ({action, text}) => ({\n text,\n action: () => action({item}),\n }));\n\n const secondGroup = [\n {\n text: 'Show attributes',\n action: () =>\n openAttributesModal({\n title: item.id,\n attributes: item.attributes,\n }),\n },\n ];\n\n return item.state === 'running' ? (\n <DropdownMenu switcher={button} items={[firstGroup, secondGroup]} />\n ) : (\n <DropdownMenu switcher={button} items={secondGroup} />\n );\n };\n\n settings = {\n css: block(),\n theme: 'light',\n size: 's',\n striped: false,\n virtual: false,\n tableId: OPERATION_JOBS_TABLE_ID,\n computeKey: (item) => item.id,\n columns: {\n items: {\n id_address: {\n name: 'id_address',\n align: 'left',\n caption: 'Id / Address',\n sort: false,\n },\n task_name: {\n name: 'task_name',\n align: 'left',\n caption: 'Task name',\n sort: true,\n },\n start_time: {\n name: 'start_time',\n align: 'left',\n caption: 'Start time',\n sort: true,\n },\n finish_time: {\n name: 'finish_time',\n align: 'left',\n caption: 'Finish time',\n sort: true,\n },\n duration: {\n get(job) {\n return job.duration;\n },\n sort: true,\n name: 'duration',\n align: 'left',\n },\n error: {\n name: 'error',\n align: 'left',\n caption: 'Error / Debug',\n get: (job) => job.error,\n },\n type: {\n name: 'type',\n align: 'left',\n sort: true,\n },\n progress: {\n name: 'progress',\n align: 'left',\n sort: true,\n },\n actions: {\n name: 'actions',\n align: 'right',\n caption: '',\n sort: false,\n },\n },\n sets: {\n default: {\n items: [\n 'id_address',\n 'type',\n 'progress',\n 'error',\n 'start_time',\n 'finish_time',\n 'duration',\n 'actions',\n ],\n },\n withTaskName: {\n items: [\n 'id_address',\n 'type',\n 'progress',\n 'error',\n 'task_name',\n 'start_time',\n 'finish_time',\n 'duration',\n 'actions',\n ],\n },\n },\n mode: this.props.taskNamesNumber > 1 ? 'withTaskName' : 'default',\n },\n templates: {\n id_address: this.renderIdAddress,\n type: this.renderType,\n progress: this.renderProgress,\n error: this.renderErrorAndDebug,\n start_time: this.renderStartTime,\n finish_time: this.renderFinishTime,\n duration: this.renderDuration,\n actions: this.renderActions,\n task_name: this.renderTaskName,\n },\n };\n\n renderTaskName(item) {\n return <div className={block('task-name', 'elements-ellipsis')}>{item.task_name}</div>;\n }\n\n renderProgress(item) {\n const {state, progress, brief_statistics: statistics} = item;\n\n return (\n <div className={block('state')}>\n <div className={block('state-section', 'elements-ellipsis')}>\n {hammer.format['ReadableField'](state)}\n </div>\n <div className={block('state-section')}>\n <JobTemplate.Progress state={state} progress={progress} />\n </div>\n <Tooltip\n className={block('state-section', 'elements-ellipsis')}\n content={<BriefStatisticsDetailsMemo data={item.brief_statistics} />}\n >\n <span>\n <JobTemplate.Statistics state={state} statistics={statistics} />\n </span>\n <Icon className={block('state-icon')} awesome={'question-circle'} />\n </Tooltip>\n </div>\n );\n }\n\n renderStartTime(item) {\n return (\n <span className={block('start-time', 'elements-ellipsis')}>\n {hammer.format['DateTime'](item.startTime)}\n </span>\n );\n }\n\n renderFinishTime(item) {\n return item.state === 'running' ? (\n <span className={block('in-progress', 'elements-ellipsis elements-secondary-text')}>\n In progress...\n </span>\n ) : (\n <span className={block('finish-time elements-ellipsis')}>\n {hammer.format['DateTime'](item.finishTime)}\n </span>\n );\n }\n\n renderDuration(item) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['TimeDuration'](item.duration)}\n </span>\n );\n }\n\n renderType(item) {\n return <span>{hammer.format['ReadableField'](item.type)}</span>;\n }\n\n renderInputPathsModal() {\n const {\n inputPaths: {paths, status, error},\n hideInputPaths,\n } = this.props;\n\n if (status === LOADING_STATUS.UNINITIALIZED) {\n return null;\n }\n\n const ysonSettings = unipika.prepareSettings();\n const content =\n status === LOADING_STATUS.ERROR ? (\n <Error {...error} />\n ) : (\n <Yson value={paths} settings={ysonSettings} />\n );\n\n return (\n <SimpleModal\n visible\n onCancel={hideInputPaths}\n loading={status === LOADING_STATUS.LOADING}\n title=\"Input paths\"\n >\n {content}\n </SimpleModal>\n );\n }\n\n render() {\n const {jobs, showCompetitiveJobs, getJobs, isLoading, collapsibleSize} = this.props;\n if (showCompetitiveJobs) {\n const {job, competitiveJobs, getCompetitiveJobs} = this.props;\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={[job].filter(Boolean)}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n {competitiveJobs.length > 0 && (\n <CollapsibleSection\n name=\"All competitive jobs\"\n className={block('competitive-jobs')}\n collapsed={true}\n size={collapsibleSize}\n >\n <ElementsTable\n {...this.settings}\n items={competitiveJobs}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n </CollapsibleSection>\n )}\n </Fragment>\n );\n }\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={jobs}\n onSort={getJobs}\n isLoading={isLoading}\n />\n </Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state, props) {\n const {operations, global} = state;\n const {cluster, login} = global;\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\n const taskNamesNumber = getOperationTasksNames(state)?.length;\n const jobsOperationId = getJobsOperationId(state);\n const operationId = getOperationId(state);\n const {jobs, job, competitiveJobs, inputPaths} = operations.jobs;\n return {\n jobs: operationId !== jobsOperationId ? [] : jobs,\n job,\n competitiveJobs,\n showCompetitiveJobs,\n inputPaths,\n cluster,\n login,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n isLoading: props.isLoading || operationId !== jobsOperationId,\n taskNamesNumber,\n };\n}\n\nconst mapDispatchToProps = {\n openAttributesModal,\n showInputPaths,\n hideInputPaths,\n showErrorModal,\n promptAction,\n getJobs,\n getCompetitiveJobs,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OperationJobsTable);\n\nfunction BriefStatisticsDetails({data}) {\n const items = React.useMemo(\n () =>\n map_(ypath.getValue(data), (value, key) => {\n const asBytes = key.endsWith('_data_size') || key.endsWith('_data_weight');\n const formatValue = asBytes ? hammer.format.Bytes : hammer.format.Number;\n return {\n key: hammer.format.Readable(key),\n value: <div className={block('state-value')}>{formatValue(value)}</div>,\n };\n }),\n [data],\n );\n\n return <MetaTable items={items} />;\n}\n","import moment from 'moment';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport hammer from '../../../../../common/hammer';\nimport metrics from '../../../../../common/utils/metrics';\n\nfunction createTemporaryPath(login) {\n const temporaryPathBase = '//tmp/ui/' + login;\n\n return yt.v3\n .create({\n path: temporaryPathBase,\n type: 'map_node',\n recursive: true,\n ignore_existing: true,\n })\n .then(() => {\n const temporaryPath = '/input_context_' + hammer.format['toBase26'](moment().unix());\n return temporaryPathBase + temporaryPath;\n });\n}\n\nexport function performJobAction({login, name, item}) {\n const parameters = {job_id: item.id};\n\n metrics.countEvent({\n 'operation_detail_running-jobs_action': name,\n });\n\n let jobActionPromise;\n\n switch (name) {\n case 'abort':\n jobActionPromise = yt.v3.abortJob(parameters);\n break;\n case 'abandon':\n jobActionPromise = yt.v3.abandonJob(parameters);\n break;\n case 'input_context':\n jobActionPromise = createTemporaryPath(login).then((temporaryPath) => {\n return yt.v3\n .dumpJobContext(\n Object.assign({}, parameters, {\n path: temporaryPath,\n }),\n )\n .then(() => temporaryPath);\n });\n break;\n case 'input':\n jobActionPromise = Promise.resolve('foo');\n break;\n }\n\n return jobActionPromise;\n}\n","import {connect} from 'react-redux';\n\nimport {updateFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getActualValue} from '../../../../../../pages/operations/selectors';\nimport OperationSelectFilter from '../../../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.jobs.filters;\n const {name, states: initialStates, statesProvider} = ownProps;\n const {defaultValue, value, counters} = filters[name];\n\n const states =\n typeof statesProvider === 'function' ? statesProvider(operations) : initialStates;\n\n return {\n value: getActualValue(value, defaultValue),\n states,\n counters,\n };\n}\n\nexport default connect(mapStateToProps, {updateFilter})(OperationSelectFilter);\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Pagination from '../../../../../../components/Pagination/Pagination';\nimport {gotoJobsPage} from '../../../../../../store/actions/operations/jobs';\nimport {OPERATIONS_PAGE} from '../../../../../../constants/operations';\n\nclass JobsPaginator extends React.Component {\n static propTypes = {\n disabled: PropTypes.bool,\n firstPageReached: PropTypes.bool.isRequired,\n lastPageReached: PropTypes.bool.isRequired,\n gotoJobsPage: PropTypes.func.isRequired,\n };\n\n gotoFirstPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.FIRST);\n gotoNextPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.NEXT);\n gotoPrevPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.PREV);\n\n render() {\n const {firstPageReached, lastPageReached, disabled} = this.props;\n\n return (\n <Pagination\n size=\"s\"\n first={{\n handler: this.gotoFirstPage,\n disabled: disabled || firstPageReached,\n }}\n previous={{\n handler: this.gotoPrevPage,\n hotkeyHandler: this.gotoPrevPage,\n disabled: disabled || firstPageReached,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n }}\n next={{\n handler: this.gotoNextPage,\n hotkeyHandler: this.gotoNextPage,\n disabled: disabled || lastPageReached,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n }}\n last={{disabled: true}}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {firstPageReached, lastPageReached, limit, offset} = operations.jobs.pagination;\n return {firstPageReached, lastPageReached, limit, offset};\n}\n\nexport default connect(mapStateToProps, {gotoJobsPage})(JobsPaginator);\n","import {connect} from 'react-redux';\n\nimport OperationSuggestFilter from '../../../../../../pages/operations/OperationSuggestFilter/OperationSuggestFilter';\nimport {updateFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getActualValue} from '../../../../../../pages/operations/selectors';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.jobs.filters;\n const {statesProvider, name} = ownProps;\n const {defaultValue, value, data} = filters[name];\n const states = statesProvider(data);\n\n return {\n value: getActualValue(value, defaultValue),\n states,\n defaultValue,\n placeholder: `Filter ${name}...`,\n };\n}\n\nexport default connect(mapStateToProps, {updateFilter})(OperationSuggestFilter);\n","import React, {Fragment, useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport identity_ from 'lodash/identity';\n\nimport Select from '../../../../../../components/Select/Select';\nimport JobsSuggestFilter from './JobsSuggestFilter';\nimport Filter from '../../../../../../components/Filter/Filter';\n\nimport {updateFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getFilterValue} from '../../../../selectors';\n\nconst block = cn('operation-detail-jobs');\n\nfunction JobsIdFilter({pin}: Pick<React.ComponentProps<typeof Filter>, 'pin'>) {\n const value = useSelector(getFilterValue('jobId'));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: string) => {\n dispatch(updateFilter('jobId', value));\n }, []);\n\n return (\n <Filter\n size=\"m\"\n placeholder=\"Filter id...\"\n onChange={handleChange}\n value={value}\n pin={pin}\n />\n );\n}\n\nfunction JobsFilterBy() {\n const filterBy = useSelector(getFilterValue('filterBy'));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: string) => {\n dispatch(updateFilter('filterBy', value));\n }, []);\n\n return (\n <Fragment>\n <div className={block('toolbar-filter-by-select')}>\n <Select\n value={[filterBy]}\n items={map_(['address', 'id'], (value) => {\n return {value};\n })}\n onUpdate={(vals) => handleChange(vals[0])}\n pin=\"round-clear\"\n width=\"max\"\n hideFilter\n />\n </div>\n <div className={block('toolbar-filter-by-value')}>\n {filterBy === 'address' && (\n <JobsSuggestFilter\n name=\"address\"\n statesProvider={identity_}\n pin={'brick-round'}\n />\n )}\n {filterBy === 'id' && <JobsIdFilter pin={'brick-round'} />}\n </div>\n </Fragment>\n );\n}\n\nexport default JobsFilterBy;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport Select from '../../../../../../components/Select/Select';\n\nimport {getFilteredAttributes} from '../../../../../../pages/operations/selectors';\nimport {updateFilteredAttributes} from '../../../../../../store/actions/operations/jobs';\nimport {ATTRIBUTE_ITEMS, ATTRIBUTE_ITEM_NAMES} from '../../../../../../store/selectors/operations';\n\nfunction JobsAttributesFilter(props: {disabled: boolean}) {\n const attributes = useSelector(getFilteredAttributes(ATTRIBUTE_ITEM_NAMES));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: Array<string>) => {\n dispatch(updateFilteredAttributes(ATTRIBUTE_ITEM_NAMES, value));\n }, []);\n\n return (\n <Select\n {...props}\n multiple\n value={attributes}\n label=\"Attributes:\"\n filterable\n items={ATTRIBUTE_ITEMS}\n onUpdate={handleChange}\n />\n );\n}\n\nexport default JobsAttributesFilter;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport hammer from '../../../../../../common/hammer';\nimport JobsSelectFilter from './JobsSelectFilter';\nimport JobsPaginator from './JobsPaginator';\nimport JobsFilterBy from './JobsFilterBy';\nimport JobsAttributesFilter from './JobsAttributesFilter';\n\nimport {getShowCompetitiveJobs} from '../../../../../../pages/operations/selectors';\nimport {getOperationTasksNames} from '../../../../../../store/selectors/operations/operation';\n\nimport './OperationJobsToolbar.scss';\n\nconst block = cn('operation-detail-jobs');\nconst tbBlock = cn('elements-toolbar');\n\n// TODO: make this a selector inside a specific <JobsTypeFilter> component once we start using reselect library\nfunction extractJobTypes(operations) {\n const initialTypes = ['all'];\n\n const typeCounters = operations.jobs.filters.type.counters;\n return hammer.utils.sortInPredefinedOrder(initialTypes, keys_(typeCounters));\n}\n\nconst tbComp = tbBlock('component');\n\nexport default function OperationJobsToolbar() {\n const showCompetitiveJobs = useSelector(getShowCompetitiveJobs);\n\n const taskNames = useSelector(getOperationTasksNames);\n const allTaskNames = React.useMemo(() => {\n return [\n '',\n ...taskNames.map((name) => {\n return {name, caption: name};\n }),\n ];\n }, [taskNames]);\n\n return (\n <div className={block('toolbar')}>\n <div className={tbBlock()}>\n <div className={tbBlock('container')}>\n <div className={block('toolbar-filter-by', tbComp)}>\n <JobsFilterBy />\n </div>\n <div className={block('toolbar-filter-by', tbComp)}>\n <JobsSelectFilter name={'taskName'} states={allTaskNames} width=\"max\" />\n </div>\n <div className={block('toolbar-state', tbComp)}>\n <JobsSelectFilter\n name=\"dataSource\"\n states={['auto', 'runtime', 'archive']}\n disabled={showCompetitiveJobs}\n />\n </div>\n <div className={block('toolbar-state', tbComp)}>\n <JobsSelectFilter\n name=\"type\"\n statesProvider={extractJobTypes}\n disabled={showCompetitiveJobs}\n width={200}\n />\n </div>\n <div className={block('toolbar-state', tbComp)}>\n <JobsSelectFilter\n name=\"state\"\n states={['all', 'running', 'completed', 'failed', 'aborted']}\n disabled={showCompetitiveJobs}\n width={200}\n />\n </div>\n <div className={block('toolbar-attributes', tbComp)}>\n <JobsAttributesFilter disabled={showCompetitiveJobs} width={200} />\n </div>\n\n <div className={block('toolbar-pagination', tbComp)}>\n <JobsPaginator disabled={showCompetitiveJobs} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport map_ from 'lodash/map';\nimport cn from 'bem-cn-lite';\n\nimport {useSelector} from 'react-redux';\nimport {getJobsErrors} from '../../../../../../store/selectors/operations/jobs';\nimport ErrorBlock from '../../../../../../components/Error/Error';\n\nimport './OperationJobsErrors.scss';\n\nconst block = cn('operation-jobs-errors');\n\nfunction OperationJobsErrors() {\n const errors = useSelector(getJobsErrors);\n\n return (\n <div className={block()}>\n {map_(errors, (error, index) => {\n return <ErrorBlock key={index} error={error} />;\n })}\n </div>\n );\n}\n\nexport default React.memo(OperationJobsErrors);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {getJobs} from '../../../../../store/actions/operations/jobs';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport LoadDataHandler from '../../../../../components/LoadDataHandler/LoadDataHandler';\nimport OperationJobsTable from './OperationJobsTable/OperationJobsTable';\nimport OperationJobsToolbar from './OperationJobsToolbar/OperationJobsToolbar';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport {\n getOperationDetailsLoadingStatus,\n getOperationJobsLoadingStatus,\n} from '../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport OperationJobsErrors from './OperationJobsErrors/OperationJobsErrors';\n\nfunction Jobs({className}) {\n const dispatch = useDispatch();\n const loading = useSelector((state) => state.operations.jobs.loading);\n const loaded = useSelector((state) => state.operations.jobs.loaded);\n const error = useSelector((state) => state.operations.jobs.error);\n const errorData = useSelector((state) => state.operations.jobs.errorData);\n\n const updateFn = React.useCallback(() => {\n dispatch(getJobs());\n }, [dispatch]);\n\n useUpdater(updateFn, {timeout: 15 * 1000});\n\n const isLoading = loading && !loaded;\n return (\n <ErrorBoundary>\n <div className={`operation-detail-jobs ${className}`}>\n <OperationJobsToolbar />\n <LoadDataHandler {...{loaded, loading, error, errorData}} alwaysShowError>\n <OperationJobsErrors />\n <OperationJobsTable isLoading={isLoading} />\n </LoadDataHandler>\n </div>\n </ErrorBoundary>\n );\n}\n\nexport default function JobsWithRum(props) {\n const loadState = useSelector(getOperationJobsLoadingStatus);\n /**\n * Selection of this value involves additional rerenders of the component\n * but without it RUM-measures will be wrongly too big it.\n * OperationDetail cannot stop measure for RumMeasureTypes.OPERATION by self,\n * it must be done by nesting tab-content.\n */\n const operationLoadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState, operationLoadState],\n allowStart: ([loadState, operationLoadState]) => {\n return !isFinalLoadingStatus(loadState) || !isFinalLoadingStatus(operationLoadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n stopDeps: [loadState, operationLoadState],\n allowStop: ([loadState, operationLoadState]) => {\n return isFinalLoadingStatus(loadState) && isFinalLoadingStatus(operationLoadState);\n },\n });\n\n return <Jobs {...props} />;\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport min_ from 'lodash/min';\n\nimport moment from 'moment';\nimport {createSelector} from 'reselect';\nimport {RootState} from '../../../store/reducers';\nimport {getOperationId} from './operation';\n\nexport const getJobsMonitorError = (state: RootState) => state.operations.jobsMonitor.error;\nexport const getJobsMonitorOperationId = (state: RootState) =>\n state.operations.jobsMonitor.operation_id;\nexport const getJobsMonitorItems = (state: RootState) => state.operations.jobsMonitor.jobs;\n\nexport const getJobsMonitoringItemsWithDescriptor = createSelector(\n [getJobsMonitorItems],\n (items) => {\n return filter_(items, ({monitoring_descriptor}) => Boolean(monitoring_descriptor));\n },\n);\n\nexport const getJobsMonitorFromTo = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (items) => {\n let from: number | undefined;\n let to: number | undefined;\n forEach_(items, ({start_time, finish_time}) => {\n if (start_time) {\n const start = moment(start_time).valueOf();\n from = min_([start, from]);\n }\n if (finish_time) {\n const finish = moment(finish_time).valueOf();\n to = max_([finish, to]);\n }\n });\n return {from, to};\n },\n);\n\nexport const getJobsMonitorDescriptor = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (jobs) => {\n const tmp = map_(jobs, 'monitoring_descriptor');\n return tmp.join('|');\n },\n);\n\nexport const getJobsMonitorTabVisible = createSelector(\n [getOperationId, getJobsMonitorOperationId, getJobsMonitorDescriptor, getJobsMonitorError],\n (opId, jobMonId, jobsDescriptor, error) => {\n if (opId !== jobMonId) {\n return false;\n }\n if (!isEmpty_(error)) {\n return true;\n }\n\n return Boolean(jobsDescriptor);\n },\n);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {\n getJobsMonitorDescriptor,\n getJobsMonitorFromTo,\n} from '../../../../../store/selectors/operations/jobs-monitor';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport UIFactory from '../../../../../UIFactory';\n\nfunction JobsMonitor() {\n const cluster = useSelector(getCluster);\n const job_descriptor = useSelector(getJobsMonitorDescriptor);\n const {from, to} = useSelector(getJobsMonitorFromTo);\n\n if (!job_descriptor) {\n return <NoContent warning={'There are no jobs with \"monitoring_descriptor\"'} />;\n }\n\n const JobMonitorComponent = UIFactory.getMonitorComponentForJob()!;\n\n return (\n <ErrorBoundary>\n <JobMonitorComponent {...{cluster, job_descriptor, from, to}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(JobsMonitor);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {\n getOperationDetailsLoadingStatus,\n getOperationTypedAttributes,\n} from '../../../../../store/selectors/operations/operation';\nimport Yson from '../../../../../components/Yson/Yson';\nimport {getOperationAttributesYsonSettings} from '../../../../../store/selectors/thor/unipika';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nfunction useOperationAttributesRumMesures() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_ATTRIBUTES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_ATTRIBUTES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n}\n\nfunction OperationAttributes({className}: {className: string}) {\n const typedAttributes = useSelector(getOperationTypedAttributes);\n const settings = useSelector(getOperationAttributesYsonSettings);\n\n useOperationAttributesRumMesures();\n\n return <Yson className={className} value={typedAttributes} settings={settings} folding />;\n}\n\nexport default React.memo(OperationAttributes);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {getOperation} from '../../../../../store/selectors/operations/operation';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {OperationMonitoringTabProps} from '../../../../../UIFactory';\n\nfunction OperationDetailsMonitor(props: {\n component: React.ComponentType<OperationMonitoringTabProps>;\n}) {\n const {component: OperationMonitor} = props;\n const operation = useSelector(getOperation);\n const cluster = useSelector(getCluster);\n\n return (\n <ErrorBoundary>\n <OperationMonitor {...{cluster, operation}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(OperationDetailsMonitor);\n","import {match as MatchType, Redirect, Route, Switch} from 'react-router';\nimport React, {Fragment} from 'react';\nimport {ConnectedProps, connect, useDispatch, useSelector} from 'react-redux';\nimport hammer from '../../../common/hammer';\nimport unipika from '../../../common/thor/unipika';\nimport cn from 'bem-cn-lite';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable, {Template, TemplatePools} from '../../../components/MetaTable/MetaTable';\nimport OperationProgress from '../OperationProgress/OperationProgress';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {SubjectCard} from '../../../components/SubjectLink/SubjectLink';\nimport StatusLabel from '../../../components/StatusLabel/StatusLabel';\nimport Button from '../../../components/Button/Button';\nimport {Loader} from '@gravity-ui/uikit';\nimport Error from '../../../components/Error/Error';\nimport Icon from '../../../components/Icon/Icon';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Yson from '../../../components/Yson/Yson';\n\nimport PartitionSizes from './tabs/partition-sizes/PartitionSizes/PartitionSizes';\nimport Details from './tabs/details/Details/Details';\nimport Specification from './tabs/specification/Specification';\nimport JobSizes from './tabs/job-sizes/JobSizes/JobSizes';\nimport Statistics from './tabs/statistics/Statistics';\nimport Jobs from './tabs/Jobs/Jobs';\nimport JobsMonitor from './tabs/JobsMonitor/JobsMonitor';\nimport OperationAttributes from './tabs/attributes/OperationAttributes';\n\nimport Placeholder from '../../../pages/components/Placeholder';\n\nimport {\n getDetailsTabsShowSettings,\n operationMonitoringUrl,\n performAction,\n} from '../../../utils/operations/detail';\nimport {DEFAULT_TAB, OperationTabType, Tab} from '../../../constants/operations/detail';\nimport {showEditPoolsWeightsModal} from '../../../store/actions/operations';\nimport {getOperation} from '../../../store/actions/operations/detail';\nimport {isOperationId} from '../../../utils/operations/list';\nimport {promptAction} from '../../../store/actions/actions';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {TabSettings, makeTabProps} from '../../../utils';\nimport {Page} from '../../../constants/index';\nimport {\n getOperationDetailsLoadingStatus,\n getOperationErasedTrees,\n} from '../../../store/selectors/operations/operation';\n\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../utils/utils';\n\nimport './OperationDetail.scss';\nimport {updateFilter} from '../../../store/actions/operations/jobs';\nimport OperationDetailsMonitor from './tabs/monitor/OperationDetailsMonitor';\nimport {getJobsMonitorTabVisible} from '../../../store/selectors/operations/jobs-monitor';\nimport {\n JobState,\n getOperationStatiscsHasData,\n getTotalCpuTimeSpent,\n getTotalJobWallTime,\n} from '../../../store/selectors/operations/statistics-v2';\nimport UIFactory from '../../../UIFactory';\nimport {RootState} from '../../../store/reducers';\nimport {getCurrentCluster} from '../../../store/selectors/thor';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst detailBlock = cn('operation-detail');\n\nconst headingBlock = cn('elements-heading');\n\ntype RouteProps = {match: MatchType<{operationId: string; tab: OperationTabType}>};\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nfunction OperationDetailUpdater({operationId}: {operationId: string}) {\n const dispatch = useDispatch();\n\n const updateFn = React.useCallback(() => {\n dispatch(getOperation(operationId));\n }, [dispatch, operationId]);\n\n useUpdater(updateFn, {timeout: 15 * 1000});\n\n return null;\n}\n\nclass OperationDetail extends React.Component<ReduxProps & RouteProps> {\n get settings() {\n return unipika.prepareSettings();\n }\n\n handlePoolsEditClick = () => {\n const {operation, showEditPoolsWeightsModal} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderAction = (action: ReduxProps['actions'][0]) => {\n const {promptAction, operation} = this.props;\n\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the operation?\n </span>\n );\n const handler = ({currentOption}: {currentOption?: string}) =>\n performAction({\n ...action,\n operation,\n currentOption,\n }).then(() => {\n return this.props.getOperation(operation.$value);\n });\n\n return (\n <Button\n key={action.name}\n view={action.theme}\n className={detailBlock('action')}\n title={hammer.format['ReadableField'](action.name)}\n onClick={() => promptAction({...action, message, handler})}\n >\n <Icon awesome={action.icon} />\n &nbsp;\n {hammer.format['ReadableField'](action.name)}\n </Button>\n );\n };\n\n renderHeader() {\n const {actions = []} = this.props;\n const {type, user = '', state, suspended, title, $value} = this.props.operation;\n const label = suspended ? 'suspended' : state;\n\n return (\n <div className={detailBlock('header', 'elements-section')}>\n <div className={detailBlock('header-heading', headingBlock({size: 'l'}))}>\n {hammer.format['ReadableField'](type)} operation by <SubjectCard name={user} />\n &ensp;\n <StatusLabel label={label} renderPlaque />\n </div>\n\n <div className={detailBlock('header-title')}>\n <Yson value={title || $value} inline />\n </div>\n\n <div className={detailBlock('actions')}>{actions.map(this.renderAction)}</div>\n </div>\n );\n }\n\n renderOverview() {\n const {operation, cluster, totalJobWallTime, cpuTimeSpent, erasedTrees} = this.props;\n const {$value, user = '', type, startTime, finishTime, duration, pools, state} = operation;\n\n const items = [\n [\n {key: 'id', value: <Template.Id id={$value} />},\n {key: 'user', value: <SubjectCard name={user} />},\n {\n key: 'pools',\n value: (\n <TemplatePools\n onEdit={this.handlePoolsEditClick}\n cluster={cluster}\n pools={pools}\n state={state}\n erasedTrees={erasedTrees}\n />\n ),\n },\n {key: 'type', value: <Template.Readable value={type} />},\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: 'total job wall time',\n value: <Template.Time time={totalJobWallTime} valueFormat=\"TimeDuration\" />,\n },\n {\n key: 'total cpu time spent',\n value: <Template.Time time={cpuTimeSpent} valueFormat=\"TimeDuration\" />,\n },\n ],\n ];\n\n return (\n <div className={detailBlock('overview')}>\n <div className={detailBlock('general')}>\n <MetaTable items={items} />\n </div>\n\n <div className={detailBlock('progress-wrapper')}>\n <OperationProgress\n operation={operation}\n onLinkClick={this.onProgressLinkClick}\n />\n {operation.state !== 'failed' && (\n <OperationProgress\n operation={operation}\n type=\"failed\"\n onLinkClick={this.onProgressLinkClick}\n />\n )}\n </div>\n </div>\n );\n }\n\n onProgressLinkClick = (jobState: JobState) => {\n const {updateFilter} = this.props;\n updateFilter('state', jobState);\n };\n\n renderTabs() {\n const {\n match: {\n params: {operationId},\n },\n cluster,\n operation,\n hasStatististicsTab,\n jobsMonitorVisible,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n } = this.props;\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n const showSettings: Record<string, TabSettings> = {\n ...getDetailsTabsShowSettings(operation),\n [Tab.STATISTICS]: {show: hasStatististicsTab},\n [Tab.JOBS_MONITOR]: {show: jobsMonitorVisible},\n [Tab.MONITOR]: {show: monitorTabVisible},\n };\n\n if (monitorTabUrlTemplate) {\n const monTab = showSettings[Tab.MONITOR];\n monTab.routed = false;\n monTab.external = true;\n\n const firstPoolInfo = operation.pools?.[0] || {};\n monTab.url = operationMonitoringUrl({\n cluster,\n operation,\n ...firstPoolInfo,\n urlTemplate: monitorTabUrlTemplate,\n });\n }\n\n const props = makeTabProps(path, Tab, showSettings, undefined, {\n [Tab.MONITOR]: monitorTabTitle ?? 'Monitoring',\n });\n\n return (\n <div className={detailBlock('tabs')}>\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n routed\n routedPreserveLocation\n size={UI_TAB_SIZE}\n />\n </div>\n );\n }\n\n renderMain() {\n const {match, cluster, monitorTabVisible, jobsMonitorVisible, monitoringComponent} =\n this.props;\n const {url, params} = match;\n const {operationId} = params;\n\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n // NOTE: <Redirect> has issues with urls which contain '*', and since every operation alias starts with it,\n // we have to redirect to real operation id in those cases\n return !isOperationId(operationId) ? (\n this.renderAlias()\n ) : (\n <div className={detailBlock('main')}>\n <Switch>\n <Route\n path={`${path}/${Tab.ATTRIBUTES}`}\n render={() => <OperationAttributes className={detailBlock('attributes')} />}\n />\n <Route path={`${path}/${Tab.DETAILS}`} component={Details} />\n <Route path={`${path}/${Tab.SPECIFICATION}`} component={Specification} />\n <Route\n path={`${path}/${Tab.STATISTICS}`}\n render={() => <Statistics className={detailBlock('statistics')} />}\n />\n <Route\n path={`${path}/${Tab.JOBS}`}\n render={() => <Jobs className={detailBlock('jobs')} />}\n />\n <Route\n path={`${path}/${Tab.JOB_SIZES}`}\n render={() => <JobSizes className={detailBlock('job-sizes')} />}\n />\n <Route path={`${path}/${Tab.PARTITION_SIZES}`} component={PartitionSizes} />\n {monitorTabVisible && monitoringComponent && (\n <Route\n path={`${path}/${Tab.MONITOR}`}\n render={() => (\n <OperationDetailsMonitor component={monitoringComponent} />\n )}\n />\n )}\n {jobsMonitorVisible && (\n <Route path={`${path}/${Tab.JOBS_MONITOR}`} component={JobsMonitor} />\n )}\n <Route path={`${path}/:tab`} component={Placeholder} />\n <Redirect from={url} to={`${path}/${DEFAULT_TAB}`} />\n </Switch>\n </div>\n );\n }\n\n renderAlias() {\n const {match, cluster, operation} = this.props;\n const {\n url,\n params: {operationId, tab},\n } = match;\n\n const alias = ypath.getValue(operation, '/@spec/alias');\n if (operationId !== alias) {\n // Just wait until operation data is loaded\n return null;\n }\n\n const redirectPath = `/${cluster}/${Page.OPERATIONS}/${operation.$value}${\n tab ? '/' + tab : ''\n }`;\n return <Redirect from={url} to={redirectPath} />;\n }\n\n renderContent(isFirstLoading: boolean) {\n return isFirstLoading ? (\n <Loader />\n ) : (\n <Fragment>\n {this.renderHeader()}\n {this.renderOverview()}\n {this.renderTabs()}\n {this.renderMain()}\n </Fragment>\n );\n }\n\n renderError() {\n const {errorData} = this.props;\n\n return <Error message={errorData.message} error={errorData.details} />;\n }\n\n render() {\n const {\n error,\n loading,\n loaded,\n match: {\n params: {operationId},\n },\n } = this.props;\n const isFirstLoading = loading && !loaded;\n\n return (\n <ErrorBoundary>\n <OperationDetailUpdater operationId={operationId} />\n <div className={detailBlock({loading: isFirstLoading})}>\n {error && !loaded ? this.renderError() : this.renderContent(isFirstLoading)}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {operation, errorData, loading, loaded, error, actions} = state.operations.detail;\n const totalJobWallTime = getTotalJobWallTime(state);\n const cpuTimeSpent = getTotalCpuTimeSpent(state);\n const erasedTrees = getOperationErasedTrees(state);\n\n const {\n component: monitoringComponent,\n urlTemplate: monitorTabUrlTemplate,\n title: monitorTabTitle,\n } = UIFactory.getMonitoringForOperation(operation) || {};\n\n const monitorTabVisible = Boolean(monitoringComponent) || Boolean(monitorTabUrlTemplate);\n\n return {\n cluster: getCurrentCluster(state),\n operation,\n errorData,\n loading,\n loaded,\n error,\n actions,\n totalJobWallTime,\n cpuTimeSpent,\n erasedTrees,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n monitoringComponent,\n jobsMonitorVisible:\n Boolean(UIFactory.getMonitorComponentForJob()) && getJobsMonitorTabVisible(state),\n hasStatististicsTab: getOperationStatiscsHasData(state),\n };\n};\n\nconst mapDispatchToProps = {\n promptAction,\n getOperation,\n showEditPoolsWeightsModal,\n updateFilter,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst OperationDetailConnected = connector(OperationDetail);\n\nexport default function OperationDetailsWithRum(props: RouteProps) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n return <OperationDetailConnected {...props} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {Route, Switch, withRouter} from 'react-router';\n\nimport PoolsWeightsEditModal from '../PoolsWeightsEditModal/PoolsWeightsEditModal';\nimport OperationsList from '../OperationsList/OperationsList';\nimport OperationDetail from '../OperationDetail/OperationDetail';\nimport {DASHBOARD_VIEW_CONTEXT} from '../../../constants/index';\n\nconst block = cn('operations');\n\nfunction Operations(props) {\n const {match, viewContext} = props;\n const className = viewContext !== DASHBOARD_VIEW_CONTEXT ? 'elements-main-section' : '';\n\n return (\n <div className={block(null, className)}>\n <PoolsWeightsEditModal />\n <Switch>\n <Route path={match.path} exact render={() => <OperationsList />} />\n <Route path={`${match.path}/:operationId/:tab?`} component={OperationDetail} />\n </Switch>\n </div>\n );\n}\n\nOperations.propTypes = {\n // from parent\n viewContext: PropTypes.string,\n\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default withRouter(Operations);\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import {ThunkAction} from 'redux-thunk';\nimport FontFaceObserver from 'fontfaceobserver';\nimport {getFontFamilies} from '../../../store/selectors/global/fonts';\nimport {RootState} from '../../../store/reducers';\n\n// TODO: consider switching back for <link rel=\"preload\"> once it's supported in all major browsers\nexport function waitForFontFamily(fontFamily: string) {\n return new FontFaceObserver(fontFamily).load(null, 10000);\n}\n\nexport function waitForFontFamilies<T>(\n promiseToWrap: T,\n): ThunkAction<Promise<T>, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const fontFamilies = getFontFamilies(getState());\n return Promise.all([\n waitForFontFamily(fontFamilies.regular),\n waitForFontFamily(fontFamilies.monospace),\n ]).then(() => {\n return promiseToWrap;\n });\n };\n}\n","import {createSelector} from 'reselect';\n\nimport find_ from 'lodash/find';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {RootState} from '../../../store/reducers';\nimport {getCluster} from './index';\nimport {SelectWithSubItemsProps} from '../../../components/Dialog/controls/SelectWithSubItems/SelectWithSubItems';\nimport {OperationStatisticInfo} from '../../../store/reducers/global/supported-features';\n\nconst getSupportedFeaturesRaw = (state: RootState) => state.supportedFeatures.features;\nconst getSupportedFeaturesCluster = (state: RootState) => state.supportedFeatures.featuresCluster;\n\n// Record<codec, level>\nconst RECOMMENDED_COMPRESSION_CODECS: Record<string, string> = {\n lz4: '',\n zstd_: '5',\n zlib_: '9',\n brotli_: '8',\n lzma_: '6',\n};\n\nconst RECOMMENDED = ' (recommended)';\n\nconst getSupportedFeatures = createSelector(\n [getCluster, getSupportedFeaturesCluster, getSupportedFeaturesRaw],\n (cluster, featuresCluster, features) => {\n return cluster === featuresCluster ? features : {};\n },\n);\n\nexport const getErasureCodecs = createSelector([getSupportedFeatures], (features) => {\n return map_(features.erasure_codecs, (value) => {\n return {value, text: value};\n }).sort(compareItems);\n});\n\nexport const getPrimitiveTypes = createSelector([getSupportedFeatures], (features) => {\n return sortBy_(features.primitive_types).map((value) => {\n return {value, text: value};\n });\n});\n\nexport const getPrimitiveTypesMap = createSelector([getPrimitiveTypes], (types) => {\n return new Set(types.map(({value}) => value));\n});\n\nexport const getCompressionCodecs = createSelector([getSupportedFeatures], (features) => {\n return prepareItemsSubitems(features.compression_codecs);\n});\n\nexport const makeCompressionCodecFinder = createSelector([getCompressionCodecs], ({items}) => {\n return (codec: string) => {\n if (!codec) {\n return undefined;\n }\n\n const item = find_(items, (x) => {\n return x.value === codec;\n });\n if (item) {\n return [item.value as string];\n }\n\n const [first, ...rest] = codec.split('_');\n const subCodec = rest.join('_');\n\n return [first + '_', subCodec];\n };\n});\n\nexport type CompressionCodecs = Required<\n Pick<SelectWithSubItemsProps, 'items' | 'subItemsMap' | 'labels'>\n>;\n\nfunction prepareItemsSubitems(arr: Array<string> = []): CompressionCodecs {\n const res: CompressionCodecs = {\n items: [],\n subItemsMap: {},\n labels: ['Codec:', 'level:'],\n };\n\n const {items, subItemsMap} = res;\n\n for (const item of arr) {\n const parts = item.split('_');\n const [first, ...rest] = parts;\n\n if (rest.length) {\n const value = first + '_';\n\n if (!subItemsMap[value]) {\n items.push({value, content: value});\n }\n\n const dst = (subItemsMap[value] = subItemsMap[value] || new Array<string>());\n const subValue = rest.join('_');\n dst.push({value: subValue, content: subValue});\n } else {\n items.push({value: item, content: item});\n }\n }\n\n forEach_(subItemsMap, (subItems, key) => {\n const index = items.findIndex(({value}) => value === key);\n if (index === -1) {\n return;\n }\n subItems.sort(compareItems);\n if (subItems.length === 1) {\n const value = items[index].value + subItems[0].value;\n items[index] = {value, content: value};\n delete subItemsMap[key];\n } else {\n const item = items[index];\n item.content = `${item.value}[${subItems[0].value}-${\n subItems[subItems.length - 1].value\n }]`;\n }\n\n const recommended = RECOMMENDED_COMPRESSION_CODECS[key];\n if (recommended) {\n const subItems2 = subItemsMap[key];\n if (subItems2) {\n const first = subItems2[0];\n const last = subItems2[subItems2.length - 1];\n first.content = first.value + ' (faster)';\n last.content = last.value + ' (slower & smaller)';\n\n const item = subItems2.find(({value}) => value === recommended);\n if (item) {\n item.content = item.value + RECOMMENDED;\n }\n } else {\n items[index].content += RECOMMENDED;\n }\n }\n });\n\n items.sort(compareItems);\n return res;\n}\n\nfunction compareItems(l: {value: string}, r: {value: string}) {\n if (l.value === r.value) {\n return 0;\n }\n\n if (l.value === 'none') {\n return -1;\n }\n\n if (r.value === 'none') {\n return 1;\n }\n\n const lValue = String(Number(l.value)) === l.value ? Number(l.value) : l.value;\n const rValue = String(Number(r.value)) === r.value ? Number(r.value) : r.value;\n\n return lValue < rValue ? -1 : 1;\n}\n\nexport const getOperationStatisticsDescription = createSelector(\n [getSupportedFeaturesRaw],\n ({operation_statistics_descriptions}) => {\n const byName: Record<string, OperationStatisticInfo> = {};\n const byRegexp: Array<OperationStatisticInfo & {regexp: RegExp}> = [];\n forEach_(operation_statistics_descriptions, (item, key) => {\n const idx = key.indexOf('*');\n if (idx !== -1) {\n const tmp = key.replace(/\\//g, '\\\\/').replace(/\\*/g, '[^/]*');\n byRegexp.push({\n ...item,\n regexp: new RegExp(tmp),\n });\n } else {\n byName[key] = item;\n }\n });\n\n return {\n byName,\n byRegexp,\n };\n },\n);\n","import { I18N } from '@gravity-ui/i18n';\nimport en from './keysets/en.json';\nimport ru from './keysets/ru.json';\nconst i18nFactory = new I18N();\nconst EN = 'en';\nconst RU = 'ru';\ni18nFactory.registerKeysets(EN, en);\ni18nFactory.registerKeysets(RU, ru);\nconst i18n = i18nFactory.i18n.bind(i18nFactory);\nexport { i18nFactory, i18n };\n","export const CHARTKIT_ERROR_CODE = {\n NO_DATA: 'ERR.CK.NO_DATA',\n INVALID_DATA: 'ERR.CK.INVALID_DATA',\n UNKNOWN: 'ERR.CK.UNKNOWN_ERROR',\n UNKNOWN_PLUGIN: 'ERR.CK.UNKNOWN_PLUGIN',\n TOO_MANY_LINES: 'ERR.CK.TOO_MANY_LINES',\n};\nexport class ChartKitError extends Error {\n constructor({ originalError, message, code = CHARTKIT_ERROR_CODE.UNKNOWN, } = {}) {\n super(message);\n this.isCustomError = true;\n this.code = code;\n if (originalError) {\n this.name = originalError.name;\n this.stack = originalError.stack;\n }\n }\n}\nexport const isChartKitError = (error) => {\n return error instanceof Error && 'isCustomError' in error;\n};\n","import isObject from 'lodash/isObject';\nimport mergeWith from 'lodash/mergeWith';\n// @ts-ignore\nexport function mergeSettingStrategy(objValue, srcValue, key) {\n if (key === 'plugins') {\n const currentPlugins = [...objValue];\n const newPlugins = [...srcValue];\n // modify existing plugins\n let newSettingsPlugins = currentPlugins.map((currentPlugin) => {\n const newPluginIndex = newPlugins.findIndex(({ type }) => type === currentPlugin.type);\n if (newPluginIndex !== -1) {\n const newPlugin = newPlugins[newPluginIndex];\n newPlugins.splice(newPluginIndex, 1);\n return {\n type: currentPlugin.type,\n renderer: newPlugin.renderer,\n };\n }\n return currentPlugin;\n });\n // add new plugins if it exist after modified\n if (newPlugins.length > 0) {\n newSettingsPlugins = [...newSettingsPlugins, ...newPlugins];\n }\n return newSettingsPlugins;\n }\n if (isObject(objValue)) {\n return mergeWith(objValue, srcValue, mergeSettingStrategy);\n }\n return srcValue;\n}\n","import { configure } from '@gravity-ui/uikit';\nimport get from 'lodash/get';\nimport mergeWith from 'lodash/mergeWith';\nimport { i18nFactory } from '../../i18n';\nimport { EventEmitter } from './eventEmitter';\nimport { mergeSettingStrategy } from './mergeSettingStrategy';\nexport const settingsEventEmitter = new EventEmitter();\nconst removeUndefinedValues = (data) => {\n return Object.entries(data).reduce((acc, [key, value]) => {\n if (typeof value !== 'undefined') {\n acc[key] = value;\n }\n return acc;\n }, {});\n};\nconst updateLang = (lang) => {\n configure({ lang });\n i18nFactory.setLang(lang);\n};\nclass ChartKitSettings {\n constructor() {\n this.settings = {\n plugins: [],\n lang: 'en',\n };\n updateLang(this.get('lang'));\n }\n get(key) {\n return get(this.settings, key);\n }\n set(updates) {\n const filteredUpdates = removeUndefinedValues(updates);\n this.settings = mergeWith(this.settings, filteredUpdates, mergeSettingStrategy);\n if (filteredUpdates.lang) {\n const lang = filteredUpdates.lang || this.get('lang');\n updateLang(lang);\n settingsEventEmitter.dispatch('change-lang', lang);\n }\n }\n}\nexport const settings = new ChartKitSettings();\n","export class EventEmitter {\n constructor() {\n this.events = {};\n }\n on(type, event) {\n if (this.events[type]) {\n this.events[type].push(event);\n }\n else {\n this.events[type] = [event];\n }\n }\n off(type, eventId) {\n if (this.events[type]) {\n this.events[type] = this.events[type].filter(({ id }) => id !== eventId);\n }\n }\n dispatch(type, args) {\n if (this.events[type]) {\n this.events[type].forEach(({ action }) => {\n action(args);\n });\n }\n }\n}\n","import { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'chartkit-';\nexport const cn = withNaming({ e: '__', m: '_' });\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });\n","export const randomString = (length, chars) => {\n let result = '';\n for (let i = length; i > 0; --i) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n};\nexport const getRandomCKId = () => `ck.${randomString(10, '0123456789abcdefghijklmnopqrstuvwxyz')}`;\n","/* Font Face Observer v2.3.0 - © Bram Stein. License: BSD-3-Clause */(function(){function p(a,c){document.addEventListener?a.addEventListener(\"scroll\",c,!1):a.attachEvent(\"scroll\",c)}function u(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function b(){document.removeEventListener(\"DOMContentLoaded\",b);a()}):document.attachEvent(\"onreadystatechange\",function g(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",g),a()})};function w(a){this.g=document.createElement(\"div\");this.g.setAttribute(\"aria-hidden\",\"true\");this.g.appendChild(document.createTextNode(a));this.h=document.createElement(\"span\");this.i=document.createElement(\"span\");this.m=document.createElement(\"span\");this.j=document.createElement(\"span\");this.l=-1;this.h.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.i.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\nthis.j.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.m.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.h.appendChild(this.m);this.i.appendChild(this.j);this.g.appendChild(this.h);this.g.appendChild(this.i)}\nfunction x(a,c){a.g.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+c+\";\"}function B(a){var c=a.g.offsetWidth,b=c+100;a.j.style.width=b+\"px\";a.i.scrollLeft=b;a.h.scrollLeft=a.h.scrollWidth+100;return a.l!==c?(a.l=c,!0):!1}function C(a,c){function b(){var e=g;B(e)&&null!==e.g.parentNode&&c(e.l)}var g=a;p(a.h,b);p(a.i,b);B(a)};function D(a,c,b){c=c||{};b=b||window;this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\";this.context=b}var E=null,F=null,G=null,H=null;function I(a){null===F&&(M(a)&&/Apple/.test(window.navigator.vendor)?(a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent),F=!!a&&603>parseInt(a[1],10)):F=!1);return F}function M(a){null===H&&(H=!!a.document.fonts);return H}\nfunction N(a,c){var b=a.style,g=a.weight;if(null===G){var e=document.createElement(\"div\");try{e.style.font=\"condensed 100px sans-serif\"}catch(q){}G=\"\"!==e.style.font}return[b,g,G?a.stretch:\"\",\"100px\",c].join(\" \")}\nD.prototype.load=function(a,c){var b=this,g=a||\"BESbswy\",e=0,q=c||3E3,J=(new Date).getTime();return new Promise(function(K,L){if(M(b.context)&&!I(b.context)){var O=new Promise(function(r,t){function h(){(new Date).getTime()-J>=q?t(Error(\"\"+q+\"ms timeout exceeded\")):b.context.document.fonts.load(N(b,'\"'+b.family+'\"'),g).then(function(n){1<=n.length?r():setTimeout(h,25)},t)}h()}),P=new Promise(function(r,t){e=setTimeout(function(){t(Error(\"\"+q+\"ms timeout exceeded\"))},q)});Promise.race([P,O]).then(function(){clearTimeout(e);\nK(b)},L)}else u(function(){function r(){var d;if(d=-1!=k&&-1!=l||-1!=k&&-1!=m||-1!=l&&-1!=m)(d=k!=l&&k!=m&&l!=m)||(null===E&&(d=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),E=!!d&&(536>parseInt(d[1],10)||536===parseInt(d[1],10)&&11>=parseInt(d[2],10))),d=E&&(k==y&&l==y&&m==y||k==z&&l==z&&m==z||k==A&&l==A&&m==A)),d=!d;d&&(null!==f.parentNode&&f.parentNode.removeChild(f),clearTimeout(e),K(b))}function t(){if((new Date).getTime()-J>=q)null!==f.parentNode&&f.parentNode.removeChild(f),\nL(Error(\"\"+q+\"ms timeout exceeded\"));else{var d=b.context.document.hidden;if(!0===d||void 0===d)k=h.g.offsetWidth,l=n.g.offsetWidth,m=v.g.offsetWidth,r();e=setTimeout(t,50)}}var h=new w(g),n=new w(g),v=new w(g),k=-1,l=-1,m=-1,y=-1,z=-1,A=-1,f=document.createElement(\"div\");f.dir=\"ltr\";x(h,N(b,\"sans-serif\"));x(n,N(b,\"serif\"));x(v,N(b,\"monospace\"));f.appendChild(h.g);f.appendChild(n.g);f.appendChild(v.g);b.context.document.body.appendChild(f);y=h.g.offsetWidth;z=n.g.offsetWidth;A=v.g.offsetWidth;t();\nC(h,function(d){k=d;r()});x(h,N(b,'\"'+b.family+'\",sans-serif'));C(n,function(d){l=d;r()});x(n,N(b,'\"'+b.family+'\",serif'));C(v,function(d){m=d;r()});x(v,N(b,'\"'+b.family+'\",monospace'))})})};\"object\"===typeof module?module.exports=D:(window.FontFaceObserver=D,window.FontFaceObserver.prototype.load=D.prototype.load);}());\n"],"names":["block","cn","ExpandIcon","_ref","className","data","expanded","visible","onClick","icon","onClickCb","React","_jsx","Boolean","clickable","undefined","children","Icon","awesome","Pagination","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","name","control","handler","disabled","_this$props","this","props","size","tooltip","hotkeySettings","keys","hotkey","scope","hotkeyScope","hotkeyHandler","_jsxs","title","Button","first","previous","next","last","pin","Hotkey","settings","_this$props2","showInput","inputValue","onChange","TextInput","qa","type","onUpdate","_this$props3","renderComponent","renderInput","defaultProps","typedMemo","ErrorBoundary","constructor","super","state","error","resetError","setState","getDerivedStateFromError","componentDidCatch","_a","_b","onError","call","componentDidUpdate","prevProps","code","NO_DATA","render","message","i18n","toString","getErrorMessage","renderError","b","renderPluginLoader","pluginLoader","Object","assign","ChartKitComponent","widgetRef","instanceRef","id","propsId","isMobile","restProps","ckId","lang","get","plugin","find","iteratedPlugin","UNKNOWN_PLUGIN","ChartComponent","renderer","reflow","details","current","fallback","mobile","ref","YagrPlugin","set","plugins","COLORS","getSerieColor","serieIndex","length","datepickerDefaultProps","WaitForFont","_useSelector","useSelector","getFontFamilies","regular","monospace","_React$useState","_React$useState2","_slicedToArray","ready","setReady","Promise","all","waitForFontFamily","then","PoolTreesLoader","dispatch","useDispatch","loadPoolTreesIfNotLoaded","usePoolTreeOrLoadDefault","poolTree","defaultPoolTree","setDefaultPoolTree","loadDefaultPoolTree","WaitForDefaultPoolTree","formatShare","hammer","format","significantDigits","isEmptyStatistics","stats","some_","ypath","getValue","hasProgressTasks","operation","TASKS_PREFIX","prepareFile","file","path","originalPath","executable","getBoolean","prepareMeta","meta","prepared","map_","sortBy_","prepareStartedBy","startedBy","command","fields","filter_","option","prepareTransferTask","task","task_id","url","UIFactory","makeUrlForTransferTask","prepareLivePreview","index","isRunning","_operation$getLivePre","getLivePreviewPath","virtualPath","supported","transaction","prepareTableFilters","table","filters","ranges","range","upperLimit","lowerLimit","normalizeTableRanges","columns","prepareTable","typedTable","userTransactionAlive","cluster","concat","prepareTransaction","_objectSpread","livePreview","append","teleport","primary","foreign","typedFilters","groupTables","tables","currentGroup","group","forEach_","YPath","create","getKey","folder","toSubpath","stringify","groupKey","push","isFolder","err","console","prepareInput","TYPE","typedTables","$typedAttributes","prepareStderr","prepareCoredumps","coreTable","prepareOutput","prepareIntermediate","prepareScriptCaption","indexOf","substring","prepareScript","_environment","script","environment","jobCount","files","caption","prepareTasks","tasks","keys_","taskName","prepareVisibleItems","items","item","filterVisibleItems","itemsCount","_step","result","count","_iterator","_createForOfIteratorHelper","s","n","done","e","f","prepareFaqUrl","docsUrl","docsUrls","replace","OperationSelector","$value","$attributes","pools","attributes","_objectWithoutProperties","_excluded","RUNNING_STATES","PREPARING_STATES","INTERMEDIATE_STATES","orchidAttributes","trees","poolsIndexes","schedulingInfo","_orchidAttributes$tre","tree","pool","isEphemeral","slotIndex","weight","_OperationSelector","_toConsumableArray","ListOperationSelector","_OperationSelector2","_this","user","suspended","input","output","startTime","finishTime","duration","jobs","completedJobs","runningJobs","failedJobs","totalJobs","completedJobsProgress","runningJobsProgress","jobsProgress","briefSpec","_assertThisInitialized","computeIOProperties","computePools","moment","progress","_typeof","completed","total","running","failed","spec","io","res","remote","remoteInputUrl","DetailedOperationSelector","_OperationSelector3","_super2","typedData","orchidData","_this2","$orchidAttributes","alias","totalFailedJobs","failedJobsProgress","description","typedSpec","typedProvidedSpec","typedFullSpec","typedUnrecognizedSpec","live_preview","typedAttributes","fullSpec","runtimeAnnotations","hasVirtualPath","hasPath","suffix","basePath","utils","extractFirstByte","makeLivePreview","getActualValue","defaultValue","getFilterValue","_state$operations$job","operations","getShowCompetitiveJobs","createSelector","filterBy","jobId","isOperationId","idSection","RegExp","test","isGotoEnabled","aliasRegexp","getOperationErasedTrees","detail","rawTrees","reduce_","acc","getOperationAlertEvents","alert_events","appeared","alert_type","getNumberDeprecated","NaN","to","time","from","getOperation","getOperationId","getOperationTasks","getOperationTasksNames","sort","getOperationDetailsLoadingStatus","loading","loaded","calculateLoadingStatus","getOperationTypedAttributes","getOperationJobsLoadingStatus","monitorChartStates","states","getOperationExperimentAssignments","getOperationMonitoredJobCount","getOperationJobsMonitorTabSettings","jobsCount","maxJobCount","cancelHerlper","CancelHelper","toaster","Toaster","operationDetailsRequests","getIsEphemeral","_ref2","operationAttributes","treesInfo","requests","values","mapValues_","infoPerTree","map","parameters","ytApiV3Id","executeBatch","YTApiId","operationIsEphemeral","_ref3","YTErrors","NODE_DOES_NOT_EXIST","reduce","poolInfo","_defineProperty","getState","isAlias","params","include_scheduler","output_format","TYPED_OUTPUT_FORMAT","operation_alias","operation_id","GET_OPERATION","REQUEST","ytApiV3","checkUserTransaction","_ref5","_ref6","preparedAttributes","prepareAttributes","dispatchOperationSuccess","actions","prepareActions","specification","network","prepareRemote","transferTask","mode","genNavigationUrl","stderr","intermediate","coredumps","mapper","reducer","reduceCombiner","prepareSpecification","alerts","helpURL","prepareAlerts","prepareError","runtime","treeFairShareInfo","treeName","prepareRuntime","events","prepareOperationEvents","resources","statistics","estimatedInputStatistics","dataFlow","source_name","target_name","job_data_statistics","teleport_data_statistics","info","jobStat","teleportStat","tasksIndexMap","task_name","prepareGraphDataByTasks","dataFlowGraph","jobTypeOrder","fromJobType","toJobType","prepareGraphData","prepareCompletedUsage","SUCCESS","_getOperationJobsMoni","JOBS_MONITOR","listJobs","listJobs100","limit","with_monitoring_descriptor","cancellation","removeAllAndSave","isCancelled","CANCELLED","FAILURE","inIntermediateState","callback","_ref4","_asyncToGenerator","_regeneratorRuntime","_callee","outputTransaction","_context","prev","LOAD_RESOURCE_USAGE","abrupt","operationIntermediateResourceUsage","intermediateResources","account","stop","_x","loadIntermediateResourceUsage","isFirstLoading","add","autoHiding","theme","content","label","showErrorPopup","getOperationsListFilters","list","getOperationsPoolTreeRawCounters","_state$operations$lis","counters","pool_tree_counts","getOperationsPoolRawCounters","_getOperationsPoolFil","getOperationsPoolFilterData","pool_counts","getOperationsUserRawCounter","_getOperationsUserFil","getOperationsUserFilterData","user_counts","getOperationsPoolTreeCountersItems","convertCountersToItems","getOperationsPoolTreeItemsWithoutCounter","getAllPoolTreeNames","calculateItemsWithoutCounter","getOperationsPoolTreeSuggestions","concat_","getOperationsPoolCountersItems","getOperationsPoolItemsWithoutCounter","getAllPoolNames","getOperationsPoolSuggestions","getOperationsUserCountersItems","getOperationsUserItemsWithoutCounter","getAllUserNames","getOperationsUserSuggestions","text","counter","allNames","countersMap","ATTRIBUTE_ITEMS","ATTRIBUTE_ITEM_NAMES","getOperationsListFilterParameters","subject","permissions","actualSubject","getValueIfNotDefault","actualPermissions","access","filter","pool_tree","with_failed_jobs","getOperationsListTimeRange","_state$operations$lis2","timeRange","to_time","from_time","getOperationsListFiltersParameters_FOR_YTFRONT_2838","getCurrentUserName","getCluster","login","_clusterConfig$operat","getClusterConfigByName","operationPageSettings","disableOptimizationForYTFRONT2838","rest","getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838","fixedFilters","isEqual_","getDefaultToTime","currentTime","dataMode","OPERATIONS_DATA_MODE","ARCHIVE","toISOString","getDefaultFromTime","subtract","getListRequestParameters","getFilterParameters","cursor_time","_operations$list$curs","cursor","cursor_direction","direction","include_archive","USE_CACHE","getCompetitiveJobsRequestParameters","job","sortState","OPERATION_JOBS_TABLE_ID","job_competition_id","jobCompetitionId","sort_field","field","sort_order","asc","getJobsRequestParameters","offset","_operations$jobs","pagination","data_source","dataSource","address","with_stderr","withStderr","withMonitoringDescriptor","with_fail_context","withFailContext","with_spec","withSpec","with_competitors","withCompetitors","getJobFilterParameters","Math","max","EXTRA_JOBS_COUNT","cancellableRequests","updateCursor","timestamp","firstPageReached","lastPageReached","_ref$resetLoadingStat","resetLoadingStatus","UPDATE_CURSOR","updateOperationsList","updateOperationsByParams","UPDATE_OPERATIONS_REQUEST","rumId","RumWrapper","RumMeasureTypes","OPERATIONS_LIST","fetch","listOperations","response","incomplete","OPERATIONS_CURSOR_DIRECTION","PAST","FUTURE","updatePager","UPDATE_OPERATIONS_SUCCESS","wrap","UPDATE_FILTER_COUNTERS","yt","UPDATE_OPERATIONS_CANCELLED","UPDATE_OPERATIONS_FAILURE","resetCursor","updateFilter","UPDATE_FILTER","resetTimeRange","RESET_TIME_RANGE","showArchiveOperations","SET_OPERATIONS_DATA_MODE","toggleSaveFilterPresetDialog","TOGGLE_SAVE_FILTER_PRESET_DIALOG","showEditPoolsWeightsModal","editable","SHOW_EDIT_WEIGHT_POOL_MODAL","headingBlock","runtimeBlock","StarvingStatus","starvation_status","Readable","PropTypes","isRequired","Runtime","_Component","_len","args","Array","_key","handlePoolEditClick","_progress$partitions","_progress$partitions2","_progress$resource_de","_progress$resource_de2","MetaTable","OperationPool","onEdit","compact","TemplateWeight","min_share_ratio","adjusted_min_share_ratio","fair_share_ratio","usage_ratio","demand_ratio","partitions","scheduling_status","dominant_resource","Template","FormattedValue","preemptable_job_count","resource_demand","memory","user_slots","renderTree","Component","connect","preparePoolsState","prepareWeightsState","String","renderPoolsAndWeights","weights","setPools","setWeights","Page","SCHEDULING","Fragment","Link","mapDispatchToProps","hideEditPoolsWeightsModal","HIDE_EDIT_WEIGHT_POOL_MODAL","setPoolsAndWeights","pathItems","window","location","pathname","split","inOperationsList","OPERATIONS","operationId","poolTrees","SET_PULLS_AND_WEIGHTS","old","Number","updateOperationParameters","_parameters","scheduling_options_per_pool_tree","_operations$page$edit","page","editWeightModal","errorData","_useState","useState","_useState2","_useState3","_useState4","useEffect","Modal","footer","confirmText","onConfirm","onCancel","isConfirmDisabled","isStateCorrect","isWeightCorrect","every_","isNaN","isPoolCorrect","Yson","inline","Error","OperationProgress","onLinkClick","jobsByStateTitle","routed","renderCounter","isPreparing","showState","_this$props2$operatio","StatusLabel","renderState","Progress","progressBar","stack","renderProgressBar","renderFailedProgressBar","renderJobCounters","renderFailedJobCounters","BLOCK_NAME","renderIO","renderText","mix","elem","OperationIOLink","renderTitle","getTitle","trimEnd_","unipika","decode","renderCopyTitle","ClipboardButton","view","UserPoolItem","awesomeIcon","Tooltip","allowUnmounted","face","metaItem","templates","OperationsListTable","match","valueTemplate","renderUserPool","multiplePools","SubjectCard","renderMultiplePools","TemplatePools","allowDetachEditBtn","renderActions","promptAction","action","currentOption","performAction","withTooltip","tooltipProps","placement","css","striped","virtualType","getItemLink","computeKey","sets","default","align","user_pool","start_time","renderType","renderStartTime","renderProgress","initialLoading","ElementsTable","emptyDataDescription","isLoading","withRouter","global","_operations$list","hasLoaded","tbBlock","OperationsTextFilter","transition","gotoDetails","handleKeyDown","evt","target","stateValue","propsValue","activePreset","Redirect","Filter","placeholder","newValue","debounce","onKeyDown","bForm","DISPLAY_FORMAT","TimePicker","_isAMomentObject","date","handleTimeChange","newTime","isValidFormat","_checkInputTimeValidity","_prepareOutputDate","textTime","isValid","textDate","minDate","newDate","unix","currentDate","year","month","isValidDate","_checkDateValidity","iconRight","renderIcon","controlAttrs","maxLength","nextProps","prevState","formBlock","datePickerProps","controlSize","outputFormat","popupClassName","radioButtonTypes","custom","twoHours","hours","day","week","OperationsArchiveFilter","store","_useSelector$timeRang","modalVisible","activeTypeValue","showModal","useCallback","hideModal","CURRENT","applyTimeRange","prepareText","updateDate","dateWithHours","_moment$toObject","toObject","minutes","updateTime","handleActiveTypeChange","ev","checked","cancelText","cl","CustomRadioButton","values_","Datepicker","newFrom","newTo","renderCustomCancel","SelectButton","selected","OperationSelectFilter","onRadioChange","val","onCheckChange","withCounters","found","stateName","ReadableField","multiple","placeHolder","Select","isArray","vals","hideFilter","ownProps","_filters$name","rawCounters","countCategoriesNG","categories","flattenCategoriesNG","getCounters","OperationsListPaginator","gotoFirstPage","gotoOperationsPage","OPERATIONS_PAGE","FIRST","gotoLastPage","LAST","gotoNextPage","NEXT","gotoPrevPage","PREV","where","_getState$operations$","getOperationsListIsFinalState","hasError","status","isFinalLoadingStatus","getOperationsListFilterPresets","getSettingsDataRaw","collectionKeys","startsWith","NAMESPACES","OPERATION_PRESETS","OPERATIONS_LIST_RUNNING_PRESET","preconfigured","OPERATIONS_LIST_DEFAULT_FILTERS","createPreconfiguredPresets","collection","slice","NS_SEPARATOR","getOperationsListActivePresets","selectedFilters","presets","presetId","k","_selectedFilters$key","Set","ELEMENT","OperationsFilterPresets","presetName","isPresetDefault","saveFilterPreset","_this$state","makeRemoveHandler","event","stopPropagation","removeFilterPreset","isPresetNameEmpty","applyFilterPreset","defaultPreset","search","dialog","_this$state2","INPUT_ID","isSaving","htmlFor","autoFocus","Checkbox","_this3","_this$props4","activePresets","renderSavePresetDialog","preset","active","has","role","reload","APPLY_FILTER_PRESET","removeSetting","isDefault","promise","resolve","guid","setSetting","DEFAULT_PRESET_SETTING","OPERATION","currentFilters","makeGetSetting","getSetting","savePresetDialog","OperationSuggestFilter","Suggest","simpleSuggestLoader","zIndexGroupLevel","clear","toLowerCase","itemText","mapStateToPropsByFilterName","OperationsListPoolTreeSuggestFilter","OperationsListPoolSuggestFilter","OperationsListUserSuggestFilter","fixedStartedByFilter","OperationsAccessibleForFilterImpl","_useSelector$subject","actualValue","renderUserSuggest","width","OperationsAccessibleForFilter","tbComp","OperationsListToolbar","_React$PureComponent","permission","toUpperCase","join","failedJobsFilter","OperationsSelectFilter","preparePermissionsPlaceholder","show","renderTopSection","renderBottomSection","renderWarning_uiissue_2838","OperationsListToolbarHooked","subjects","handleUpdateFilter","handleToggleSaveFilterPresetDialog","OperationListUpdater","useMemoizedIfEqual","updateFn","useUpdater","onlyOnce","isBigTimeRange","dateFrom","diff","asDays","OperationsList","prevTimeRange","_this$props$error","inDashboard","firstTimeError","OperationsListConnected","OperationsListWithRum","isFinalStatus","useAppRumMeasureStart","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","YTHistogram","xLabel","yLabel","yLogarithmic","yMin","_ref$xFormat","xFormat","_ref$yFormat","yFormat","_ref$renderTooltip","renderTooltip","renderDefaultTooltip","yagrData","_genYagrData","min","step","serieData","timeline","i","genYagrData","graphs","v","color","formatter","renderOptions","gap","libraryConfig","axes","x","_d","y","scales","tooltipData","_renderTooltip","_tooltipData$scales","originalValue","rows","YagrChartKit","x0","x1","calculateFormatSettings","fmtFn","v2","opts","digits","PartitionSizes","formatX","formatSettings","Bytes","PartitionSizesConnected","chartKitTheme","getTheme","connector","PartitionSizesWithRum","loadState","OPERATION_TAB_PARTITION_SIZES","additionalStartType","row","Time","valueFormat","ClickableText","hideOopsMsg","AlertEvents","allVisible","setAllVisible","l","r","compareWithUndefined","toggleShowAll","DataTableYT","displayIndices","sortable","useThemeYT","disableRightGap","rowClassName","Description","prepareSettings","escapeWhitespace","_unipika$utils$yson","yson","isWithoutTags","hasOwnProperty","CollapsableText","renderAsMap","renderMetaTable","renderAsYSON","METRICS","virtual","completedTableProps","withActions","prepareTableColumns","row_count","compressed_data_size","uncompressed_data_size","data_weight","chunk_count","intermediateTableProps","disk_space","node_count","resourceAsBytes","columnName","resourceAsNumber","expandKey","prepareState","allowExpand","expandedTasks","inner","DataFlow","self","fromTo","expKey","toggleExpand","ClickableAttributesButton","columnsMode","getResourceTemplates","CollapsibleTable","heading","allItemsCount","renderToggler","renderHeading","withCollapsible","tableProps","tags","inputTableProps","outputTableProps","stderrTableProps","specificationBlock","scriptProps","Specification","TemplateTransferTask","_ref3$fields","TemplateCommand","lineCount","TemplateEnvironment","environments","TemplateFiles","TemplateLivePreivew","renderScript","_this$props$specifica","renderTransferTask","renderRemote","renderStartedBy","renderIntermediate","renderTasks","DetailedJobsCounter","helpUrl","scheduledCounters","scheduled","scheduledItems","nonScheduledCounters","nonScheduled","nonScheduledItems","renderSection","renderHelpLink","nonInterruptedItems","nonInterrupted","interruptedCounters","interrupted","renderAborted","abortedStats","renderCompleted","completedStats","secondary","primaryValue","secondaryValue","handleClose","handleShow","modalContent","renderModalContent","renderCount","onOutsideClick","withVisible","sortCounters","reasonA","reasonB","compareVectors","prepareCategoryCounters","category","prepareCompletedStatistics","prepareAbortedStatistics","aborted","prepareCounters","tasksTablesProps","job_type","prepareColumns","fieldTreeForEach","vertex","isT","visitorCb","forEach","pop","filterFieldTree","predicate","filterT","empty","tmp","fieldTreeSome","some","getOperationDetailsOperation","getOperationStatisticsV2","isStatisticItem","getOperationStatisticsAvailableValues","_stats$time$total","_stats$time","_construct","getOperationStatisticsActiveFilterValues","jobTypeFilter","poolTreeFilter","filterText","activeJobType","STATISTICS_FILTER_ALL_VALUE","activePoolTree","getOperationStatiscsHasData","isEmpty_","getOperationStatisticsFilteredTree","checkByName","_ref3$tags","getOperationStatisticsFiltered","_tree","isLeafNode","level","itemToRow","summary","job_state","c","sum_","sum","min_","max_","mergeSummary","getTotalJobWallTime","_tree$time","excludeRunningAndCalcSum","_itemToRow","valuesToSum","compact_","NO_VALUE","CPU_TIME_SPENT_PART_NAMES","getTotalCpuTimeSpent","get_","getOperationDetailTasksData","_stats$time$total2","_stats$time2","_timeStatistics$abort","_timeStatistics$compl","job_counter","jobType","totalCounters","isTotal","prepareDataFromGraphByTasks","countersByType","prepareJobTypeOrder","taskType","jobTypeInfo","prepareDataFromGraph","_itemToRow2","timeStatistics","_excluded2","abortedJobsTime","completedJobsTime","abortedJobsTimeRatio","abortedJobsShare","prepareAbortedJobsTimeRatio","averageReadDataRate","_itemToRow$completed$","_itemToRow$completed","_stats$data","completedInputSize","prepareAverageReadDataRate","averageReadRowRate","_itemToRow$completed$2","_itemToRow$completed2","_stats$data2","completedInputRows","prepareAverageReadRowRate","expandedState","visibleItems","taskInfo","Tasks","allowActions","__default__","column","_item$abortedStats","_item$completedStats","TaskInfo","_self$state","expandable","_rowIndex","colIndex","_jobs$items","collapsibleSize","CollapsibleSection","marginDirection","renderContent","_this$props$jobs","measure","colSpan","prevOperation","prevItems","has_user_job","input_finished","user_job_memory_reserve_factor","completion_time","ready_time","exhaust_time","readyTime","exhaustTime","timeSum","Value","Details","handleEditClick","_this$props$operation","OperationDescription","alertEvents","overview","renderRuntimeOverview","_this$props5","_this$props6","Events","renderDescription","renderSpecification","renderAlerts","renderRuntime","renderJobs","renderResources","renderEvents","DetailsConnected","UI_COLLAPSIBLE_SIZE","DetailsWithRum","OPERATION_TAB_DETAILS","StarTrackLink","_props$emptyContent","emptyContent","trackerBaseUrl","uiSettings","_Fragment","ExperimentAssignments","ExperimentsItem","ExperimentAssignmentsItem","collapsed","setCollapsed","onToggleCollapse","CollapsibleSectionStateLess","onToggle","_React$useState3","_React$useState4","effectVisible","setEffectVisibility","_ypath$getValue","effect","fraction","getOperationExperimentsYsonSettings","toggleEffectVisibility","dispatchEvent","Event","folding","virtualized","onResize","throttle_","leading","SpecificationConnected","providedSpec","unrecognizedSpec","hasUnrecognized","provided","unrecognized","resulting","onToggleProvided","onToggleUnrecognized","onToggleResulting","HelpLink","SpecificationWithRum","OPERATION_TAB_SPECIFICATION","JobSizes","showEstimated","toggleEstimated","WithStickyToolbar","toolbar","Toolbar","itemsToWrap","node","estimatedJobSizeHistogram","jobSizeHistogram","estimated_input_data_weight_histogram","input_data_weight_histogram","renderChart","_this$prepareJobSizes","prepareJobSizes","hasTaskHistograms","renderPerTaskCharts","renderCommon","JobSizesConnected","JobSizesWithRum","OPERATION_TAB_JOB_SIZES","STATISTIC_STATE","lost","statisticsTableProps","metric","useStatisticInfo","getOperationStatisticsDescription","byName","byRegexp","endsWith","find_","regexp","OperationStatisticNameImpl","emptyInfo","unit","Secondary","UNIT_TO_FORMATTER","_UNIT_TO_FORMATTER","TimeDuration","round","formatBytes","OperationStatisticValueImpl","formatFn","asNumber","OperationStatisticValue","OperationStatisticName","statisticsBlock","toolbarBlock","Statistics","collapseTable","setTreeState","TREE_STATE","COLLAPSED","expandTable","EXPANDED","activeAggregation","_columnName","toggleItemState","itemState","offsetStyle","paddingLeft","style","togglerIconName","itemIconName","_item$data","jobTypes","DEBOUNCE_DELAY","changeFilterText","RadioButton","changePoolTreeFilter","makeRadioButtonProps","changeJobType","changeAggregation","AGGREGATOR_RADIO_ITEMS","treeState","renderToolbar","template","SET_TREE_STATE","CHANGE_FILTER_TEXT","CHANGE_AGGREGATION","OPERATION_STATISTICS_PARTIAL","operationType","settingsJobTypes","getSettingOperationStatisticsActiveJobTypes","setSettingsStatisticsActiveJobTypes","StatisticsConnected","_state$operations$sta","_getOperationStatisti","OPERATION_TAB_STATISTICS","getJob","clusterConfig","getCurrentClusterConfig","removeAllRequests","job_id","saveCancelToken","GET_JOB","getCompetitiveJobs","GET_COMPETITIVE_JOBS","getJobsCanceler","getJobs","GET_JOBS","USE_MAX_SIZE","operationGetJobs","addresses","reject","_jobs$output","errors","state_counts","type_counts","jobsErrors","stateCounters","typeCounters","setFilter","isStateFilter","changeColumnSortOrder","tableId","RESET_COMPETITIVE_JOBS","gotoJobsPage","showInputPaths","SHOW_INPUT_PATHS","getJobInputPaths","inputPaths","UPDATE_OFFSET","getJobsErrors","JobStatistics","_ypath$getValues","_ypath$getValues2","rowCount","dataSize","renderStatistics","JobTemplate","propTypes","showErrorModal","InputPaths","DebugInfo","_job$getDebugInfo","getDebugInfo","DownloadLink","BriefStatisticsDetailsMemo","BriefStatisticsDetails","OperationJobsTable","modalKey","successMessage","errorMessage","confirmationText","PLEASE_PROCEED_TEXT","successMessageTemplate","prepareJobAction","jobActionPromise","metrics","countEvent","abortJob","abandonJob","temporaryPathBase","recursive","ignore_existing","temporaryPath","createTemporaryPath","dumpJobContext","performJobAction","preparedActions","renderIdAddress","is_stale","host","monitoring_descriptor","isSpeculativeJob","StaleJobIcon","ChartLink","makeUrlForMonitoringDescriptor","renderErrorAndDebug","areInputPathsPresent","hasSpec","openAttributesModal","button","firstGroup","secondGroup","DropdownMenu","switcher","id_address","finish_time","withTaskName","taskNamesNumber","renderFinishTime","renderDuration","renderTaskName","brief_statistics","_this$props2$inputPat","paths","hideInputPaths","LOADING_STATUS","UNINITIALIZED","ysonSettings","ERROR","SimpleModal","LOADING","showCompetitiveJobs","competitiveJobs","renderInputPathsModal","onSort","HIDE_INPUT_PATHS","_getOperationTasksNam","jobsOperationId","getJobsOperationId","formatValue","initialStates","statesProvider","JobsPaginator","_operations$jobs$pagi","JobsIdFilter","handleChange","JobsSuggestFilter","identity_","attributeNames","filtered","isFiltered","updateFilteredAttributes","filterable","extractJobTypes","sortInPredefinedOrder","OperationJobsToolbar","taskNames","allTaskNames","JobsFilterBy","JobsSelectFilter","JobsAttributesFilter","OperationJobsErrors","ErrorBlock","Jobs","timeout","LoadDataHandler","alwaysShowError","JobsWithRum","operationLoadState","OPERATION_TAB_JOBS","getJobsMonitoringItemsWithDescriptor","jobsMonitor","getJobsMonitorFromTo","start","valueOf","finish","getJobsMonitorDescriptor","getJobsMonitorTabVisible","opId","jobMonId","jobsDescriptor","JobsMonitor","job_descriptor","NoContent","warning","JobMonitorComponent","getMonitorComponentForJob","OperationAttributes","getOperationAttributesYsonSettings","OPERATION_TAB_ATTRIBUTES","OperationDetailsMonitor","OperationMonitor","component","detailBlock","OperationDetailUpdater","OperationDetail","handlePoolsEditClick","renderAction","onProgressLinkClick","jobState","_this$props$actions","_this$props$operation2","renderPlaque","totalJobWallTime","cpuTimeSpent","erasedTrees","_operation$user","Id","_objectSpread2","hasStatististicsTab","jobsMonitorVisible","monitorTabVisible","monitorTabTitle","monitorTabUrlTemplate","showSettings","getDetailsTabsShowSettings","Tab","STATISTICS","MONITOR","_operation$pools","monTab","external","firstPoolInfo","operationMonitoringUrl","urlTemplate","makeTabProps","Tabs","DEFAULT_TAB","routedPreserveLocation","UI_TAB_SIZE","monitoringComponent","Switch","Route","ATTRIBUTES","DETAILS","SPECIFICATION","JOBS","JOB_SIZES","PARTITION_SIZES","Placeholder","renderAlias","_match$params","tab","redirectPath","Loader","renderHeader","renderOverview","renderTabs","renderMain","_this$props7","_state$operations$det","getMonitoringForOperation","getCurrentCluster","OperationDetailConnected","OperationDetailsWithRum","viewContext","DASHBOARD_VIEW_CONTEXT","PoolsWeightsEditModal","exact","useRumMeasureStart","subPage","fontFamily","FontFaceObserver","load","waitForFontFamilies","promiseToWrap","_dispatch","fontFamilies","getSupportedFeaturesRaw","supportedFeatures","features","RECOMMENDED_COMPRESSION_CODECS","lz4","zstd_","zlib_","brotli_","lzma_","RECOMMENDED","getSupportedFeatures","featuresCluster","getErasureCodecs","erasure_codecs","compareItems","getPrimitiveTypes","primitive_types","getPrimitiveTypesMap","types","getCompressionCodecs","arr","subItemsMap","labels","parts","_parts","_toArray","dst","subValue","subItems","findIndex","recommended","subItems2","prepareItemsSubitems","compression_codecs","makeCompressionCodecFinder","codec","_codec$split","_codec$split2","operation_statistics_descriptions","i18nFactory","registerKeysets","bind","CHARTKIT_ERROR_CODE","INVALID_DATA","UNKNOWN","TOO_MANY_LINES","ChartKitError","originalError","isCustomError","mergeSettingStrategy","objValue","srcValue","currentPlugins","newPlugins","newSettingsPlugins","currentPlugin","newPluginIndex","newPlugin","splice","settingsEventEmitter","on","off","eventId","updateLang","configure","setLang","updates","filteredUpdates","entries","withNaming","m","getRandomCKId","chars","floor","random","randomString","p","a","document","addEventListener","attachEvent","w","g","createElement","setAttribute","appendChild","createTextNode","h","j","cssText","B","offsetWidth","scrollLeft","scrollWidth","C","parentNode","D","family","stretch","context","E","F","G","H","M","fonts","N","font","q","prototype","J","Date","getTime","K","L","navigator","vendor","exec","userAgent","parseInt","I","O","t","setTimeout","P","race","clearTimeout","body","removeEventListener","readyState","detachEvent","u","d","z","A","removeChild","dir","hidden","module","exports"],"sourceRoot":""}