@ytsaurus/ui 1.83.0 → 1.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +61 -61
- package/dist/public/build/css/{2209.ee64dbab.chunk.css → 2209.b618d964.chunk.css} +2 -2
- package/dist/public/build/css/2209.b618d964.chunk.css.map +1 -0
- package/dist/public/build/css/components.6375c10d.chunk.css +2 -0
- package/dist/public/build/css/components.6375c10d.chunk.css.map +1 -0
- package/dist/public/build/css/{navigation.d170ba80.chunk.css → navigation.b6f988cd.chunk.css} +2 -2
- package/dist/public/build/css/navigation.b6f988cd.chunk.css.map +1 -0
- package/dist/public/build/css/{query-tracker.94d91868.chunk.css → query-tracker.7c9d0851.chunk.css} +2 -2
- package/dist/public/build/css/{query-tracker.94d91868.chunk.css.map → query-tracker.7c9d0851.chunk.css.map} +1 -1
- package/dist/public/build/js/{1604.72f6d465.chunk.js → 1604.7b5c7976.chunk.js} +3 -3
- package/dist/public/build/js/1604.7b5c7976.chunk.js.map +1 -0
- package/dist/public/build/js/{1983.e3e6d5e8.chunk.js → 1983.034a4de9.chunk.js} +2 -2
- package/dist/public/build/js/1983.034a4de9.chunk.js.map +1 -0
- package/dist/public/build/js/{3724.f72a2691.chunk.js → 3724.1674ced1.chunk.js} +2 -2
- package/dist/public/build/js/3724.1674ced1.chunk.js.map +1 -0
- package/dist/public/build/js/3751.147f6dd9.chunk.js +2 -0
- package/dist/public/build/js/3751.147f6dd9.chunk.js.map +1 -0
- package/dist/public/build/js/4319.3407fde8.chunk.js +3 -0
- package/dist/public/build/js/4319.3407fde8.chunk.js.map +1 -0
- package/dist/public/build/js/5088.bee0a42a.chunk.js +2 -0
- package/dist/public/build/js/5088.bee0a42a.chunk.js.map +1 -0
- package/dist/public/build/js/{5653.45eec4e2.chunk.js → 5653.cff8909f.chunk.js} +2 -2
- package/dist/public/build/js/5653.cff8909f.chunk.js.map +1 -0
- package/dist/public/build/js/{acl.614f12c4.chunk.js → acl.f6256b52.chunk.js} +2 -2
- package/dist/public/build/js/{acl.614f12c4.chunk.js.map → acl.f6256b52.chunk.js.map} +1 -1
- package/dist/public/build/js/{app-navigation.7629fe5d.chunk.js → app-navigation.e7dd869b.chunk.js} +2 -2
- package/dist/public/build/js/{app-navigation.7629fe5d.chunk.js.map → app-navigation.e7dd869b.chunk.js.map} +1 -1
- package/dist/public/build/js/cluster-menu.68f5e677.chunk.js +2 -0
- package/dist/public/build/js/{cluster-menu.381d4a48.chunk.js.map → cluster-menu.68f5e677.chunk.js.map} +1 -1
- package/dist/public/build/js/cluster-page-wrapper.e42322f0.chunk.js +2 -0
- package/dist/public/build/js/{cluster-page-wrapper.b70c30d4.chunk.js.map → cluster-page-wrapper.e42322f0.chunk.js.map} +1 -1
- package/dist/public/build/js/components.1ea8e03b.chunk.js +2 -0
- package/dist/public/build/js/components.1ea8e03b.chunk.js.map +1 -0
- package/dist/public/build/js/{dashboard.a63eef8c.chunk.js → dashboard.303faf7e.chunk.js} +2 -2
- package/dist/public/build/js/{dashboard.a63eef8c.chunk.js.map → dashboard.303faf7e.chunk.js.map} +1 -1
- package/dist/public/build/js/default-subject-link.f30c100a.chunk.js +2 -0
- package/dist/public/build/js/default-subject-link.f30c100a.chunk.js.map +1 -0
- package/dist/public/build/js/job.47f7b4c0.chunk.js +2 -0
- package/dist/public/build/js/job.47f7b4c0.chunk.js.map +1 -0
- package/dist/public/build/js/main.4f383c25.js +3 -0
- package/dist/public/build/js/main.4f383c25.js.map +1 -0
- package/dist/public/build/js/navigation.5512d9c6.chunk.js +2 -0
- package/dist/public/build/js/navigation.5512d9c6.chunk.js.map +1 -0
- package/dist/public/build/js/odin.96cec50a.chunk.js +2 -0
- package/dist/public/build/js/odin.96cec50a.chunk.js.map +1 -0
- package/dist/public/build/js/{operations.3535a692.chunk.js → operations.1a486c6e.chunk.js} +2 -2
- package/dist/public/build/js/operations.1a486c6e.chunk.js.map +1 -0
- package/dist/public/build/js/{query-tracker.d266354f.chunk.js → query-tracker.028a8ccf.chunk.js} +2 -2
- package/dist/public/build/js/query-tracker.028a8ccf.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.948c8e30.js → runtime.ad8a9439.js} +2 -2
- package/dist/public/build/js/{runtime.948c8e30.js.map → runtime.ad8a9439.js.map} +1 -1
- package/dist/public/build/js/{tablet.4e3852cc.chunk.js → tablet.68f185b6.chunk.js} +2 -2
- package/dist/public/build/js/{tablet.4e3852cc.chunk.js.map → tablet.68f185b6.chunk.js.map} +1 -1
- package/dist/public/build/js/{yt-df-dialog.63cfd34a.chunk.js → yt-df-dialog.bbf72b55.chunk.js} +2 -2
- package/dist/public/build/js/{yt-df-dialog.63cfd34a.chunk.js.map → yt-df-dialog.bbf72b55.chunk.js.map} +1 -1
- package/dist/public/build/js/yt-monaco-editor.72350aca.chunk.js +2 -0
- package/dist/public/build/js/yt-monaco-editor.72350aca.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +56 -56
- package/package.json +2 -2
- package/dist/public/build/css/2209.ee64dbab.chunk.css.map +0 -1
- package/dist/public/build/css/components.fd2fa23a.chunk.css +0 -2
- package/dist/public/build/css/components.fd2fa23a.chunk.css.map +0 -1
- package/dist/public/build/css/navigation.d170ba80.chunk.css.map +0 -1
- package/dist/public/build/js/1604.72f6d465.chunk.js.map +0 -1
- package/dist/public/build/js/1983.e3e6d5e8.chunk.js.map +0 -1
- package/dist/public/build/js/3724.f72a2691.chunk.js.map +0 -1
- package/dist/public/build/js/3745.aa320ee5.chunk.js +0 -2
- package/dist/public/build/js/3745.aa320ee5.chunk.js.map +0 -1
- package/dist/public/build/js/4319.20f80209.chunk.js +0 -3
- package/dist/public/build/js/4319.20f80209.chunk.js.map +0 -1
- package/dist/public/build/js/5088.91897d9a.chunk.js +0 -2
- package/dist/public/build/js/5088.91897d9a.chunk.js.map +0 -1
- package/dist/public/build/js/5653.45eec4e2.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-menu.381d4a48.chunk.js +0 -2
- package/dist/public/build/js/cluster-page-wrapper.b70c30d4.chunk.js +0 -2
- package/dist/public/build/js/components.4b381a1a.chunk.js +0 -2
- package/dist/public/build/js/components.4b381a1a.chunk.js.map +0 -1
- package/dist/public/build/js/default-subject-link.17448a19.chunk.js +0 -2
- package/dist/public/build/js/default-subject-link.17448a19.chunk.js.map +0 -1
- package/dist/public/build/js/job.c5cdc8c6.chunk.js +0 -2
- package/dist/public/build/js/job.c5cdc8c6.chunk.js.map +0 -1
- package/dist/public/build/js/main.03147e02.js +0 -3
- package/dist/public/build/js/main.03147e02.js.map +0 -1
- package/dist/public/build/js/navigation.1f7a0ea4.chunk.js +0 -2
- package/dist/public/build/js/navigation.1f7a0ea4.chunk.js.map +0 -1
- package/dist/public/build/js/odin.45cc399f.chunk.js +0 -2
- package/dist/public/build/js/odin.45cc399f.chunk.js.map +0 -1
- package/dist/public/build/js/operations.3535a692.chunk.js.map +0 -1
- package/dist/public/build/js/query-tracker.d266354f.chunk.js.map +0 -1
- package/dist/public/build/js/yt-monaco-editor.ba383e90.chunk.js +0 -2
- package/dist/public/build/js/yt-monaco-editor.ba383e90.chunk.js.map +0 -1
- /package/dist/public/build/js/{1604.72f6d465.chunk.js.LICENSE.txt → 1604.7b5c7976.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{4319.20f80209.chunk.js.LICENSE.txt → 4319.3407fde8.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.03147e02.js.LICENSE.txt → main.4f383c25.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"js/3751.147f6dd9.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/ExpandIcon/ExpandIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/components/Pagination/Pagination.js","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/Toolbar.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/get-min-width.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/prepare-statistic.ts.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/utils.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/StatisticTable.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","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/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/StaleJobIcon.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/events/eventsTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Events/Events.js","webpack://@ytsaurus/ui/./src/ui/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/selectors/operations/jobs.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-operation-incarnations.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/JobTemplate.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/JobDetails.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/ellipsis.svg","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/StatusInfo.tsx","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/JobsOperationsIncarnationsFilter.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/thor/unipika.ts","webpack://@ytsaurus/ui/./src/ui/utils/tablet_cell_bundles/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/circle-question.svg","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","webpack://@ytsaurus/ui/./node_modules/react-use/esm/useToggle.js"],"sourcesContent":["import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../../components/Icon/Icon';\n\nimport './ExpandIcon.scss';\n\nconst block = cn('expand-icon');\n\ntype ExpandIconProps = {\n className?: string;\n\n expanded?: boolean;\n visible?: boolean;\n onClick?: (data?: string, expanded?: boolean) => void;\n\n data?: string;\n};\n\nexport default function ExpandIcon({className, data, expanded, visible, onClick}: ExpandIconProps) {\n const icon = expanded ? 'angle-up' : 'angle-down';\n const onClickCb = React.useCallback(() => {\n if (onClick) {\n onClick(data, expanded);\n }\n }, [data, onClick, expanded]);\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, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport Error from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\n\nconst toaster = new Toaster();\n\ninterface LoadDataHandlerProps {\n alwaysShowError?: boolean;\n loaded: boolean;\n error: boolean;\n errorData?: YTError;\n children: React.ReactNode;\n}\n\nexport default class LoadDataHandler extends Component<LoadDataHandlerProps> {\n componentDidUpdate() {\n const {error, loaded, errorData} = this.props;\n\n if (error && loaded) {\n toaster.add({\n theme: 'danger',\n name: 'network',\n autoHiding: 500000,\n title: 'Oops! something went wrong.',\n content: errorData ? (errorData as YTError).message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(errorData as YTError),\n },\n ],\n });\n }\n }\n\n render() {\n const {alwaysShowError = false, error, errorData, loaded, children} = this.props;\n\n const initialLoading = !loaded;\n\n if (error && (alwaysShowError || initialLoading)) {\n return <Error error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport 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, {useCallback} from 'react';\nimport {useDispatch} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Filter from '../Filter/Filter';\nimport HelpLink from '../HelpLink/HelpLink';\n\nimport {ExpandButton} from '../ExpandButton';\nimport {TreeState} from './types';\n\nconst toolbarBlock = cn('elements-toolbar');\n\nconst block = cn('yt-statistics-table');\n\nexport default function Toolbar(props: {\n helpUrl?: string;\n treeState: TreeState;\n onFilterChange: (value: string) => void;\n onTreeStateChange: (state: TreeState) => void;\n}) {\n const collapseTable = React.useCallback(\n () => props.onTreeStateChange('collapsed'),\n [props.onTreeStateChange],\n );\n const expandTable = React.useCallback(\n () => props.onTreeStateChange('expanded'),\n [props.onTreeStateChange],\n );\n\n const dispatch = useDispatch();\n\n const handleFilterChange = useCallback(\n (val: string) => dispatch(props.onFilterChange(val)),\n [dispatch],\n );\n\n const isExpanded = props.treeState === 'expanded' || props.treeState === 'mixed';\n\n return (\n <div className={toolbarBlock(null, block('toolbar'))}>\n <div className={toolbarBlock('container')}>\n <div className={toolbarBlock('component', block('filter'))}>\n <Filter size=\"m\" debounce={500} value={''} onChange={handleFilterChange} />\n </div>\n <div className={toolbarBlock('component', block('expand-collapse'))}>\n <span className={block('expand-metrics')}>\n <ExpandButton\n expanded={isExpanded}\n toggleExpanded={isExpanded ? collapseTable : expandTable}\n />\n </span>\n </div>\n {props.helpUrl && (\n <div className={toolbarBlock('component', block('help'))}>\n <HelpLink url={props.helpUrl} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import {LEVEL_OFFSET} from './StatisticTable';\n\nexport function createCanvasContext(font: string) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n ctx!.font = font;\n return ctx!;\n}\n\nexport function mesureRowWidth(ctx: CanvasRenderingContext2D, text = '') {\n const {width} = ctx.measureText(text);\n return Math.max(1, Math.ceil(width));\n}\n\nexport const getMinWidth = (items: any[], fontFamilies: {regular: string; monospace: string}) => {\n let res = 300;\n const ctx = createCanvasContext(\n `14px / 20.02px \"${fontFamilies.regular}\", \"Helvetica Neue\", Arial, Helvetica, sans-serif`,\n );\n\n for (const item of items) {\n const iconsWidth = item.isLeafNode ? 20 : 20 * 2;\n const width = mesureRowWidth(ctx, item.attributes.name);\n res = Math.max(res, width + iconsWidth + item.level * LEVEL_OFFSET);\n }\n return Math.round(res * 1.05);\n};\n","import forEach_ from 'lodash/forEach';\nimport values_ from 'lodash/values';\n\nimport hammer from '../../common/hammer';\nimport {\n MetricsEntry,\n MetricsEntryLeaf,\n MetricsList,\n Statistic,\n StatisticTree,\n StatisticTreeInner,\n} from './types';\n\nconst TREE_ROOT_NAME = '<Root>';\n\nfunction createMetricsEntry(prefix: string, name: string): MetricsEntry {\n return {\n name: name,\n prefix: prefix,\n path: prefix + '/' + name,\n };\n}\n\nfunction createMetricsEntryLeaf(\n prefix: string,\n name: string,\n statistics: Statistic,\n): MetricsEntryLeaf {\n const entry: Partial<MetricsEntryLeaf> = createMetricsEntry(prefix, name);\n entry.value = statistics;\n\n return entry as MetricsEntryLeaf;\n}\n\nfunction prepareMetricsList(\n statistics: object,\n list?: MetricsList,\n prefix: string = TREE_ROOT_NAME,\n): MetricsList {\n let preparedList: MetricsList = list || {children: {}, leaves: {}};\n\n forEach_(statistics, (statistic: object | Statistic, name: string) => {\n if (typeof values_(statistic)[0] === 'object') {\n const metricsChild: MetricsEntry = createMetricsEntry(prefix, name);\n\n preparedList.children[metricsChild.path] = metricsChild;\n\n preparedList = prepareMetricsList(statistic, preparedList, metricsChild.path);\n } else {\n const metricsLeaf: MetricsEntryLeaf = createMetricsEntryLeaf(\n prefix,\n name,\n statistic as Statistic,\n );\n\n preparedList.leaves[metricsLeaf.path] = metricsLeaf;\n }\n });\n\n return preparedList;\n}\n\nexport function prepareMetricsTree(statistics: StatisticTree): StatisticTreeInner {\n const metricsList: MetricsList = prepareMetricsList(statistics);\n\n let metricsTree = hammer.treeList.prepareTree(\n metricsList.children,\n (entry: MetricsEntry) => entry.prefix,\n );\n\n metricsTree = hammer.treeList.attachTreeLeaves(\n metricsTree,\n metricsList.leaves,\n (leafEntry: MetricsEntryLeaf) => leafEntry.prefix,\n );\n\n return metricsTree[TREE_ROOT_NAME];\n}\n\nexport function filterStatisticTree(tree?: StatisticTreeInner, currentFilter = '') {\n if (!tree) {\n return [];\n }\n\n const filteredTree = hammer.treeList.filterTree(\n tree,\n (entry: MetricsEntry) => entry.name.indexOf(currentFilter) !== -1,\n true,\n );\n\n const sortedTree = hammer.treeList.sortTree(\n filteredTree,\n {field: 'name', asc: true},\n {\n name: {\n get: function (entry: MetricsEntry) {\n return entry.name;\n },\n },\n },\n );\n\n return hammer.treeList.flattenTree(sortedTree);\n}\n\nexport const prepareStatisticTs = (statistic: StatisticTree) => {\n return prepareMetricsTree(statistic);\n};\n","import format from '../../common/hammer/format';\n\nconst UNIT_TO_FORMATTER: Record<string, undefined | ((v?: number, settings?: object) => string)> = {\n ['ms']: (v, settings) =>\n format.TimeDuration(Math.round(v!), {format: 'milliseconds', ...settings}),\n ['bytes']: (v, settings) => formatBytes(v, settings),\n ['bytes * sec']: (v, settings) => formatBytes(v, settings, ' * sec'),\n ['ms * bytes']: (v, settings) => formatBytes(v, settings, ' * ms'),\n ['Mb*sec']: (v, settings) => formatBytes(v! * 1024 * 1024, settings, ' * sec'),\n};\n\nfunction formatBytes(v?: number, settings?: object, suffix = '') {\n return isNaN(v!) ? format.NO_VALUE : format.Bytes(Math.round(v!), settings) + suffix;\n}\n\nexport function formatByUnit(v?: number, unit?: string, settings?: object) {\n const formatFn = UNIT_TO_FORMATTER[unit!] ?? format.Number;\n return formatFn?.(v, settings);\n}\n","import * as React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../Icon/Icon';\nimport format from '../../common/hammer/format';\nimport ErrorBoundary from '../ErrorBoundary/ErrorBoundary';\nimport ElementsTableRow from '../ElementsTable/ElementsTable';\nimport {ExpandButton} from '../ExpandButton';\nimport {getFontFamilies} from '../../store/selectors/global/fonts';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport MetaTable from '../../components/MetaTable/MetaTable';\nimport {Secondary} from '../../components/Text/Text';\n\nimport Toolbar from './Toolbar';\nimport {getMinWidth} from './get-min-width';\nimport {filterStatisticTree, prepareStatisticTs} from './prepare-statistic.ts';\nimport {Statistic, StatisticTree, TreeState} from './types';\n\nimport {formatByUnit} from './utils';\nimport './StatisticTable.scss';\n\nconst block = cn('yt-statistics-table');\n\nexport const LEVEL_OFFSET = 40;\n\nexport type StatisticInfo = {\n description?: string;\n unit?: string;\n};\n\ninterface TreeItem {\n name: string;\n level: number;\n attributes: {\n name: string;\n path: string;\n prefix: string;\n value?: Statistic;\n };\n isLeafNode?: boolean;\n}\n\ninterface AvgProps {\n item: TreeItem;\n unit?: string;\n}\n\nfunction Avg({item, unit}: AvgProps) {\n const statistic: Statistic = item.attributes.value as Statistic;\n\n if (statistic && statistic.count && statistic.sum) {\n const result: number = statistic.sum / statistic.count;\n\n if (result < 1) {\n return formatByUnit(result, unit, {significantDigits: 6});\n } else {\n return formatByUnit(result, unit);\n }\n }\n\n return format.NO_VALUE;\n}\n\ninterface StatisticProps {\n item: TreeItem;\n aggregation: 'avg' | 'min' | 'max' | 'sum' | 'count' | 'last';\n unit?: string;\n}\n\nfunction StatisticTableStaticCell({item, aggregation, unit}: StatisticProps) {\n if (item.isLeafNode && Boolean(item.attributes.value)) {\n if (aggregation === 'avg') {\n return <Avg item={item} unit={unit} />;\n } else if (aggregation === 'count') {\n return format['Number'](item.attributes?.value?.[aggregation]);\n } else {\n return formatByUnit(item.attributes?.value?.[aggregation], unit);\n }\n }\n\n return format.NO_VALUE;\n}\n\ninterface ItemState {\n empty: boolean;\n collapsed: boolean;\n visible: boolean;\n}\n\ninterface MetricProps {\n item: TreeItem;\n itemState: ItemState;\n toggleItemState: Function;\n renderValue: (item: TreeItem) => React.ReactChild;\n minWidth?: number;\n info?: StatisticInfo;\n}\n\nexport function StatisticName({title, info}: {title: React.ReactNode; info?: StatisticInfo}) {\n const emptyInfo = !info?.description && !info?.unit;\n\n return (\n <Tooltip\n content={\n emptyInfo ? null : (\n <MetaTable\n items={[\n {\n key: 'Description',\n value: info.description,\n visible: Boolean(info.description),\n className: block('description'),\n },\n {\n key: 'Unit',\n value: info.unit,\n visible: Boolean(info.unit),\n },\n ]}\n />\n )\n }\n >\n {title}{' '}\n {!emptyInfo && (\n <Secondary>\n <Icon awesome={'question-circle'} />\n </Secondary>\n )}\n </Tooltip>\n );\n}\n\nexport function ExpandedCell({\n item,\n itemState,\n toggleItemState,\n minWidth = undefined,\n renderValue,\n info,\n}: MetricProps) {\n const offsetStyle = React.useMemo(() => {\n return {minWidth, paddingLeft: (item?.level || 0) * LEVEL_OFFSET};\n }, [item.level, minWidth]);\n\n const toggleItemAndTreeState = React.useCallback(() => {\n if (!itemState.empty) {\n toggleItemState();\n }\n }, [itemState, toggleItemState]);\n\n if (item.isLeafNode) {\n return (\n <span className={block('metric')} style={offsetStyle}>\n <Icon awesome=\"chart-line\" className={block('metric-icon')} />\n\n <StatisticName title={renderValue(item)} info={info} />\n </span>\n );\n } else {\n return (\n <span className={block('group')} style={offsetStyle} onClick={toggleItemAndTreeState}>\n <ExpandButton\n expanded={!(itemState.collapsed || itemState.empty)}\n toggleExpanded={() => {}}\n />\n <Icon\n awesome={itemState.collapsed || itemState.empty ? 'folder' : 'folder-open'}\n className={block('group-icon')}\n />\n <span>{renderValue(item)}</span>\n </span>\n );\n }\n}\n\ntype StatisticTableTemplate<Item extends Partial<TreeItem>> = {\n [name: string]: (\n item: Item,\n colName: string,\n toggleItemState: Function,\n itemState: ItemState,\n ) => React.ReactChild | null;\n};\n\ntype ColumnName = 'avg' | 'min' | 'max' | 'sum' | 'count' | 'last';\ntype VisibleColumns = Array<ColumnName>;\n\nconst prepareTableProps = ({visibleColumns}: {visibleColumns: VisibleColumns}) => {\n const columns = visibleColumns.reduce(\n (ret, col) => {\n ret[col] = {\n sort: false,\n align: 'right',\n };\n\n return ret;\n },\n {\n name: {\n sort: false,\n align: 'left',\n },\n } as Record<ColumnName | 'name', {sort: boolean; align: 'left' | 'right'}>,\n );\n\n return {\n theme: 'light',\n size: 's',\n striped: false,\n computeKey(item: TreeItem) {\n return item.name;\n },\n tree: true,\n columns: {\n sets: {\n default: {\n items: Object.keys(columns),\n },\n },\n items: columns,\n mode: 'default',\n },\n };\n};\n\nconst useJobStatisticTable = ({\n statistic,\n fontFamilies,\n}: {\n statistic: StatisticTree;\n fontFamilies: {regular: string; monospace: string};\n}) => {\n const [filter, setFilter] = React.useState('');\n const [treeState, setTreeState] = React.useState<TreeState>('expanded');\n\n const tree = React.useMemo(() => prepareStatisticTs(statistic), [statistic]);\n const items = React.useMemo(() => filterStatisticTree(tree, filter), [tree, filter]);\n const minWidth = React.useMemo(() => getMinWidth(items, fontFamilies), [fontFamilies, items]);\n const onFilterChange = (value: string) => setFilter(value);\n\n return {\n minWidth,\n items,\n treeState,\n setTreeState,\n onFilterChange,\n };\n};\n\nexport function StatisticTable({\n className,\n helpUrl,\n virtual,\n visibleColumns,\n fixedHeader,\n statistic,\n getStatisticInfo,\n}: {\n className?: string;\n helpUrl?: string;\n virtual?: boolean;\n fixedHeader?: boolean;\n statistic: StatisticTree;\n visibleColumns: Array<'avg' | 'min' | 'max' | 'sum' | 'count' | 'last'>;\n getStatisticInfo?: (name: string) => StatisticInfo | undefined;\n}) {\n const fontFamilies = useSelector(getFontFamilies);\n const {items, minWidth, treeState, setTreeState, onFilterChange} = useJobStatisticTable({\n statistic,\n fontFamilies,\n });\n\n const templates = React.useMemo(\n () =>\n ({\n name(item, _, toggleItemState, itemState) {\n const info = getStatisticInfo?.(item.name) ?? {};\n return (\n <ExpandedCell\n item={item}\n minWidth={minWidth}\n toggleItemState={toggleItemState}\n itemState={itemState}\n renderValue={(item) => item?.attributes?.name}\n info={info}\n />\n );\n },\n __default__(item, columnName: ColumnName) {\n if (item.isLeafNode) {\n const {unit} = getStatisticInfo?.(item.name) ?? {};\n return (\n <StatisticTableStaticCell\n item={item}\n aggregation={columnName}\n unit={unit}\n />\n );\n }\n\n return null;\n },\n }) as StatisticTableTemplate<TreeItem>,\n [minWidth, getStatisticInfo],\n );\n const tableProps = React.useMemo(() => {\n return prepareTableProps({\n visibleColumns,\n });\n }, [...visibleColumns]);\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n <Toolbar\n helpUrl={helpUrl}\n onFilterChange={onFilterChange}\n onTreeStateChange={setTreeState}\n treeState={treeState}\n />\n <div className={block('table-container')}>\n <ElementsTableRow\n {...tableProps}\n virtual={virtual}\n treeState={treeState}\n templates={templates}\n items={items}\n css={block()}\n headerClassName={block('header', {fixed: fixedHeader})}\n />\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport hammer from '../../common/hammer';\nimport Icon, {IconName} from '../Icon/Icon';\n\nimport './StatusLabel.scss';\n\nfunction getViewState(label?: StatusLabelProps['label']): ViewState {\n const states: Record<Exclude<typeof label, undefined>, ViewState> = {\n // preparing states\n materializing: 'preparing',\n initializing: 'preparing',\n preparing: 'preparing',\n pending: 'preparing',\n starting: 'preparing',\n\n // running states\n running: 'running',\n completing: 'running',\n failing: 'running',\n aborting: 'running',\n reviving: 'running',\n suspended: 'suspended',\n\n // final states\n failed: 'failed',\n completed: 'completed',\n aborted: 'aborted',\n\n // NavigationFlowState\n Unknown: 'unknown',\n Stopped: 'suspended',\n Paused: 'suspended',\n Working: 'running',\n Draining: 'running',\n Pausing: 'running',\n Completed: 'completed',\n };\n\n return states[label!] ?? 'unknown';\n}\n\n// see https://github.com/ytsaurus/ytsaurus/blob/4ff6c0d/yt/yt/flow/lib/client/public.h#L20-L28\nexport type NavigationFlowState =\n | 'Unknown'\n | 'Stopped'\n | 'Paused'\n | 'Working'\n | 'Draining'\n | 'Pausing'\n | 'Completed';\n\nexport type StatusLabelState =\n | 'aborted'\n | 'aborting'\n | 'completed'\n | 'completing'\n | 'failed'\n | 'failing'\n | 'initializing'\n | 'materializing'\n | 'pending'\n | 'preparing'\n | 'reviving'\n | 'running'\n | 'starting'\n | 'suspended'\n | 'running';\n\ntype ViewState =\n | 'preparing'\n | 'running'\n | 'failed'\n | 'aborted'\n | 'completed'\n | 'suspended'\n | 'unknown';\n\nfunction getIcon(state: ViewState) {\n const iconsByViewState: Record<ViewState, IconName> = {\n preparing: 'clock',\n running: 'play-circle',\n suspended: 'pause-circle',\n failed: 'times-circle',\n completed: 'check-circle',\n aborted: 'times-circle',\n unknown: 'question-circle',\n };\n return iconsByViewState[state];\n}\n\nconst b = block('status-label');\n\nexport type StatusLabelProps = {\n className?: string;\n label?: StatusLabelState | NavigationFlowState;\n renderPlaque?: boolean;\n};\n\nexport default function StatusLabel({className, label, renderPlaque}: StatusLabelProps) {\n const mappedState = getViewState(label);\n const icon = getIcon(mappedState);\n const mods = {state: mappedState};\n\n return !label ? (\n <span />\n ) : (\n <span className={b(null, renderPlaque ? b('plaque', mods, className) : b(mods, className))}>\n <Icon awesome={icon} />\n <span>{hammer.format['ReadableField'](label)}</span>\n </span>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Text} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './WarningIcon.scss';\n\nconst b = cn('yt-warning-icon');\n\ninterface Props {\n className?: string;\n hoverContent?: React.ReactNode;\n color?: 'warning' | 'danger';\n children?: React.ReactNode;\n}\n\nexport default function WarningIcon(props: Props) {\n const {className, hoverContent, children, color} = props;\n return (\n <span className={b(null, className)}>\n <Tooltip className={b('tooltip')} content={hoverContent}>\n <Icon className={b('icon', {color})} awesome=\"exclamation-triangle\" />\n {children && (\n <Text variant=\"inherit\" color={color}>\n {children}\n </Text>\n )}\n </Tooltip>\n </span>\n );\n}\n","import React from 'react';\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\nexport function 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 useDefaultPoolTree() {\n const [defaultPoolTree, setDefaultPoolTree] = React.useState<string | undefined>();\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 = useDefaultPoolTree();\n\n return defaultPoolTree ? children({defaultPoolTree}) : null;\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\nimport {useRouteMatch} from 'react-router';\n\nimport hammer from '../../common/hammer';\n\nconst b = block('elements-message');\n\ninterface MatchParams {\n tab: string;\n}\n\nexport default function Placeholder() {\n const match = useRouteMatch<MatchParams>();\n const {tab} = match.params;\n\n return (\n <div className={b({theme: 'warning'})}>\n <p className={b('paragraph')}>\n {tab\n ? `Viewer for tab \"${hammer.format['ReadableField'](tab)}\" is not implemented.`\n : 'Viewer for this tab is not implemented.'}\n </p>\n </div>\n );\n}\n","import React from 'react';\n\nimport WarningIcon from '../../../../../components/WarningIcon/WarningIcon';\n\nexport function StaleJobIcon({className}: {className?: string}) {\n return (\n <WarningIcon\n className={className}\n hoverContent={'The job is stale, the information may be obsolete'}\n />\n );\n}\n","import {prepareTableColumns} from '../../../../../utils/index';\nimport hammer from '../../../../../common/hammer';\n\nexport const columns = {\n state: {\n align: 'left',\n get(event) {\n return event.state;\n },\n },\n phase: {\n align: 'left',\n caption: 'State : Phase',\n get(event) {\n if (event.state === 'total') {\n return 'Total';\n }\n\n const formatter = hammer.format['Readable'];\n const state = formatter(event.state);\n const phase = formatter(event.phase || hammer.format.NO_VALUE);\n\n return `${state} : ${phase}`;\n },\n },\n progress: {\n align: 'center',\n caption: '',\n get(event) {\n const progressValue = event.progress && event.progress.duration;\n\n return {\n value: progressValue,\n theme:\n {\n initializing: 'grass',\n preparing: 'mint',\n pending: 'aqua',\n materializing: 'bluejeans',\n running: 'lavander',\n completing: 'grapefruit',\n reviving: 'bittersweet',\n reviving_jobs: 'sunflower',\n failed: 'grapefruit',\n }[event.state] || 'mediumgray',\n };\n },\n },\n duration: {\n align: 'right',\n get(event) {\n return event.duration;\n },\n },\n start_time: {\n align: 'left',\n get(event) {\n return event.time;\n },\n },\n actions: {\n align: 'center',\n caption: '',\n },\n};\n\nconst DEFAULT_MODE = 'default';\nconst WITH_ACTIONS_MODE = 'withActions';\n\nconst getEventsGeneralProps = (type) => ({\n theme: 'light',\n striped: false,\n virtual: true,\n header: false,\n size: 'm',\n computeKey(item) {\n return item.state + '/' + item.time;\n },\n columns: {\n items: prepareTableColumns(columns),\n sets: {\n [DEFAULT_MODE]: {\n items: [type, 'progress', 'duration', 'start_time'],\n },\n [WITH_ACTIONS_MODE]: {\n items: [type, 'progress', 'duration', 'start_time', 'actions'],\n },\n },\n mode: DEFAULT_MODE,\n },\n});\n\nexport function getEventsTableProps(showActions, type) {\n const eventsTableProps = getEventsGeneralProps(type);\n let res = eventsTableProps;\n if (showActions) {\n res = {...eventsTableProps};\n res.columns = {\n ...res.columns,\n mode: WITH_ACTIONS_MODE,\n };\n }\n return res;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {compose} from 'redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\n\nimport ElementsTableBase from '../../../../../../components/ElementsTable/ElementsTable';\nimport withStickyFooter from '../../../../../../components/ElementsTable/hocs/withStickyFooter';\nimport withStickyHead from '../../../../../../components/ElementsTable/hocs/withStickyHead';\nimport {Progress} from '@gravity-ui/uikit';\nimport {Template} from '../../../../../../components/MetaTable/templates/Template';\nimport {Event} from '../../../../../../utils/operations/tabs/details/events/events';\n\nimport hammer from '../../../../../../common/hammer';\nimport {\n columns,\n getEventsTableProps,\n} from '../../../../../../utils/operations/tabs/details/events/eventsTablesProps';\n\nimport './Events.scss';\n\nexport const eventsProps = PropTypes.array;\nconst block = cn('events');\n\nconst odBlock = cn('operation-detail');\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction getValue(event, columnName) {\n return columns[columnName]?.get(event);\n}\n\nexport default class Events extends React.Component {\n static propTypes = {\n events: eventsProps,\n type: PropTypes.string,\n };\n\n static defaultProps = {\n type: 'state',\n };\n\n get templates() {\n return {\n start_time(event, columnName) {\n const value = getValue(event, columnName);\n return value ? (\n <Template.Time\n time={value}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n ) : null;\n },\n finish_time(event, columnName) {\n const value = getValue(event, columnName);\n return value ? (\n <Template.Time\n time={value}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n ) : null;\n },\n duration(item, columnName) {\n if (Event.isFinalState(item)) {\n return hammer.format.NO_VALUE;\n }\n const value = getValue(item, columnName);\n return (\n <Template.Time\n time={value}\n settings={{format: 'milliseconds'}}\n valueFormat={'TimeDuration'}\n />\n );\n },\n progress(item, columnName) {\n if (Event.isNotFinalState(item) && item.state !== 'total') {\n const progress = item.progress.duration;\n const {theme, value} = getValue(item, columnName);\n\n return (\n <div className={odBlock('events-progress', {theme})}>\n <span\n className={odBlock(\n 'events-progress-percentage',\n 'elements-secondary-text',\n )}\n >\n {hammer.format['Percent'](progress)}\n </span>\n <Progress value={value} size=\"s\" />\n </div>\n );\n }\n },\n state(event, columnName) {\n const value = getValue(event, columnName);\n return <Template.Readable value={value} />;\n },\n phase(event, columnName) {\n const value = getValue(event, columnName);\n return <Template.Readable value={value} />;\n },\n actions: (event) => {\n const {attributes} = event || {};\n if (isEmpty_(attributes)) {\n return null;\n }\n return (\n <ClickableAttributesButton\n title={'Event attributes'}\n attributes={event.attributes}\n />\n );\n },\n };\n }\n\n render() {\n const {events, type} = this.props;\n const eventsItems = events.slice();\n const totalRow = eventsItems.pop();\n const {showAttributesColumn} = totalRow;\n\n return (\n <div className={block()}>\n <ElementsTable\n {...getEventsTableProps(showAttributesColumn, type)}\n items={eventsItems}\n css={block()}\n footer={totalRow}\n templates={this.templates}\n />\n </div>\n );\n }\n}\n","import 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 const layerPaths = ypath.getValue(script, '/layer_paths');\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 layerPaths,\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';\nimport {JobsState} from '../../store/reducers/operations/jobs/jobs';\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<K extends keyof JobsState['filters']>(name: K) {\n return (state: RootState): JobsState['filters'][K]['value'] | undefined => {\n const {value, defaultValue} = state.operations.jobs.filters[name];\n\n return getActualValue(value, defaultValue);\n };\n}\n\nexport function getFilteredAttributes(attributeNames: Array<keyof JobsState['filters']>) {\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 {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 {\n include_scheduler: true,\n output_format: {\n $value: 'json' as const,\n $attributes: {\n stringify: true,\n annotate_with_types: true,\n encode_utf8: false,\n },\n },\n },\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' as const,\n text: 'With stderr',\n },\n {\n value: 'withFailContext' as const,\n text: 'With fail context',\n },\n {\n value: 'withSpec' as const,\n text: 'With full input',\n },\n {\n value: 'withCompetitors' as const,\n text: 'With competitive jobs',\n },\n {\n value: 'withMonitoringDescriptor' as const,\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 {OPERATIONS_DATA_MODE} from '../../../constants/operations';\nimport {\n getOperationsListFiltersParameters_FOR_YTFRONT_2838,\n getOperationsListTimeRange,\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","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 / \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 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 hideFilter={true}\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 />\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 '../../../store/selectors/settings/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  \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},\n } = useSelector(getOperationsListFilters);\n\n return (\n <div>\n {UIFactory.renderUserSuggest({\n value: typeof value === 'string' && value ? [value] : [],\n onUpdate: ([first] = []) => {\n dispatch(updateFilter('subject', first));\n },\n width: 'max',\n pin: 'round-clear',\n placeholder: 'Accessible for...',\n hasClear: true,\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 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 "Started by" 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 \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} -> {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 TemplateLayerPaths,\n TemplateLivePreivew,\n TemplateTransferTask,\n} from '../../../../../../components/MetaTable/MetaTable';\nimport CollapsibleTable from '../../../../../../components/CollapsibleTable/CollapsibleTable';\nimport Yson from '../../../../../../components/Yson/Yson';\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: typeof field.value === 'object' ? <Yson value={field.value} /> : field.value,\n }));\n\n items.push({\n key: 'command',\n value: <TemplateCommand value={command} lineCount={5} />,\n visible: Boolean(command?.length),\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, layerPaths}) {\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 key: 'layer paths',\n value: <TemplateLayerPaths paths={layerPaths} cluster={cluster} />,\n visible: Boolean(layerPaths),\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 {Flex} from '@gravity-ui/uikit';\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 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 ({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 <Flex className={block()} gap={1}>\n <Link theme=\"ghost\" size=\"xs\" onClick={handleShow}>\n View{' '}\n </Link>\n {this.renderCount(type, primaryValue, secondaryValue)}\n <Modal\n onOutsideClick={handleClose}\n onCancel={handleClose}\n content={modalContent}\n visible={visible}\n footer={false}\n title={title}\n />\n </Flex>\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} disableLogger />\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 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 getOperationId,\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';\nimport {YsonDownloadButton} from '../../../../components/DownloadAttributesButton';\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 operationId = useSelector(getOperationId);\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} operationId={operationId} />\n ))}\n </CollapsibleSectionStateLess>\n );\n}\n\ninterface ItemProps {\n data: OperationExperimentItem;\n operationId: string;\n}\n\nfunction ExperimentAssignmentsItem(props: ItemProps) {\n const {data, operationId} = 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 && (\n <Yson\n value={effect}\n settings={settings}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={effect}\n settings={settings}\n name={`experiment_assignments_${operationId}`}\n />\n }\n />\n )}\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 {\n getOperationDetailsLoadingStatus,\n getOperationId,\n} 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';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\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, operationId}) {\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 extraTools={\n <YsonDownloadButton\n value={providedSpec}\n settings={unipika.prepareSettings()}\n name={`provider_specification_${operationId}`}\n />\n }\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 extraTools={\n <YsonDownloadButton\n value={unrecognizedSpec}\n settings={unipika.prepareSettings()}\n name={`unrecognized_specification_${operationId}`}\n />\n }\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 extraTools={\n <YsonDownloadButton\n value={fullSpec}\n settings={unipika.prepareSettings()}\n name={`resulting_specification_${operationId}`}\n />\n }\n />\n </CollapsibleSectionStateLess>\n )}\n </div>\n </ErrorBoundary>\n );\n}\n\nSpecification.propTypes = {\n // from connect\n operation: operationProps.isRequired,\n};\n\nconst mapStateToProps = (state) => ({\n operation: state.operations.detail.operation,\n operationId: getOperationId(state),\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 {getOperationStatisticsDescription} from '../../../../../store/selectors/global/supported-features';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport format from '../../../../../common/hammer/format';\nimport {StatisticName, formatByUnit} from '../../../../../components/StatisticTable';\n\nfunction useStatisticInfo(name: string) {\n const {getStatisticInfo} = useSelector(getOperationStatisticsDescription);\n return getStatisticInfo(name);\n}\n\nfunction OperationStatisticNameImpl({name, title}: {name: string; title: string}) {\n const info = useStatisticInfo(name);\n\n return <StatisticName title={title} info={info} />;\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 asStr = formatByUnit(value, info?.unit, settings);\n const asNumber = format.Number(value, settings);\n\n return asStr !== undefined ? <Tooltip content={asNumber}>{asStr}</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/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 {RootState} from '../../reducers';\n\nexport const getJobsErrors = (state: RootState) => state.operations.jobs.jobsErrors;\nexport const getJobsOperationId = (state: RootState) => state.operations.jobs.operationId;\n\nexport const getJobsOperationIncarnactionsFilter = (state: RootState) =>\n state.operations.jobsOperationIncarnations.filter;\nexport const getJobsOperationIncarnactionsValues = (state: RootState) =>\n state.operations.jobsOperationIncarnations.availableValues;\n","import {ThunkAction} from 'redux-thunk';\nimport compact_ from 'lodash/compact';\nimport uniq_ from 'lodash/uniq';\n\nimport {RootState} from '../../../store/reducers';\nimport {jobOperaionIncarnationActions} from '../../../store/reducers/operations/jobs/jobs-operation-incarnations';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {ListJobsResponse} from '../../../../shared/yt-types';\nimport {getJobs} from './jobs';\n\ntype OperationIncarnationThunkAction<T = void> = ThunkAction<T, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function fetchOperationIncarnationAvailableItems(operation: {\n id: string;\n type: string;\n}): OperationIncarnationThunkAction {\n return (dispatch) => {\n cancelHelper.removeAllRequests();\n dispatch(jobOperaionIncarnationActions.onRequest({operationId: operation.id}));\n\n if (operation.type !== 'vanilla') {\n return dispatch(jobOperaionIncarnationActions.onReset());\n }\n\n return ytApiV3Id\n .listJobs(YTApiId.jobsOperationIncarnations, {\n parameters: {\n operation_id: operation.id,\n /**\n * It is supposed that vanilla operations don't have much jobs\n * and `limit: 1000` allows to load all jobs\n */\n limit: 1000,\n },\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then((data: ListJobsResponse) => {\n dispatch(\n jobOperaionIncarnationActions.onSuccess({\n availableValues: uniq_(\n compact_(data.jobs.map((item) => item.operation_incarnation)),\n ),\n }),\n );\n });\n };\n}\n\nexport function updateJobsOperationIncarnationFilter(\n filter: string | undefined,\n): OperationIncarnationThunkAction {\n return (dispatch) => {\n dispatch(jobOperaionIncarnationActions.setFilter({filter}));\n dispatch(getJobs());\n };\n}\n","// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {ThunkAction} from 'redux-thunk';\n\nimport {\n EXTRA_JOBS_COUNT,\n GET_COMPETITIVE_JOBS,\n GET_JOB,\n GET_JOBS,\n HIDE_INPUT_PATHS,\n JOB_LIST_UPDATE_FILTER,\n OPERATION_JOBS_TABLE_ID,\n RESET_COMPETITIVE_JOBS,\n SHOW_INPUT_PATHS,\n UPDATE_FILTER_COUNTERS,\n UPDATE_OFFSET,\n} from '../../../constants/operations/jobs';\nimport {changeColumnSortOrder} from '../../../store/actions/tables';\nimport {OPERATIONS_PAGE} from '../../../constants/operations/list';\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\n\nimport {getShowCompetitiveJobs} from '../../../pages/operations/selectors';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {\n JobsListAction,\n JobsState,\n UpdateFilterData,\n} from '../../../store/reducers/operations/jobs/jobs';\nimport {OldSortState} from '../../../types';\nimport {ListJobsParameters} from '../../../../shared/yt-types';\nimport {KeysByType} from '../../../../@types/types';\nimport {TablesSortOrderAction} from '../../../store/reducers/tables';\nimport {getJobsOperationIncarnactionsFilter} from '../../../store/selectors/operations/jobs';\nimport {fetchOperationIncarnationAvailableItems} from './jobs-operation-incarnations';\n\nconst requests = new CancelHelper();\n\nconst getOperation = (state: RootState) => state.operations.detail.operation;\n\ntype JobsListThunkAction = ThunkAction<\n void | Promise<void>,\n RootState,\n unknown,\n JobsListAction | TablesSortOrderAction\n>;\n\nexport function getJob(): JobsListThunkAction {\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\nfunction getJobRequestParameters(state: RootState) {\n const {operation} = state.operations.detail;\n const {filters} = state.operations.jobs;\n return {\n operation_id: operation.$value,\n job_id: filters.jobId.value,\n };\n}\n\nexport function getCompetitiveJobs(): JobsListThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const clusterConfig = getCurrentClusterConfig(state);\n\n return ytApiV3\n .listJobs({\n parameters: getCompetitiveJobsRequestParameters(state),\n cancellation: requests.removeAllAndSave,\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\nfunction getJobsRequestParameters(state: RootState): ListJobsParameters {\n const {operation} = state.operations.detail;\n const {filters, pagination} = state.operations.jobs;\n const sortState = state.tables[OPERATION_JOBS_TABLE_ID];\n\n const incarnaction = getJobsOperationIncarnactionsFilter(state);\n\n return {\n operation_id: operation.$value,\n /*\n include_archive: true,\n include_cypress: true,\n include_runtime: true\n */\n // prepareSortQuery(),\n ...getJobFilterParameters(filters, sortState),\n ...preparePaginationQuery(pagination),\n operation_incarnation: incarnaction || undefined,\n };\n}\n\n// Operation Jobs\n\nfunction getJobFilterParameters(filters: JobsState['filters'], sortState: OldSortState) {\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' as const) : ('descending' as const),\n task_name: getValueIfNotDefault(filters, 'taskName'),\n };\n}\n\nfunction getCompetitiveJobsRequestParameters(state: RootState) {\n const {operation} = state.operations.detail;\n const {job} = state.operations.jobs;\n const sortState = state.tables[OPERATION_JOBS_TABLE_ID];\n return {\n operation_id: operation.$value,\n job_competition_id: job?.attributes.job_competition_id,\n sort_field: sortState.field || 'none',\n sort_order: sortState.asc ? ('ascending' as const) : ('descending' as const),\n };\n}\n\nfunction getValueIfNotDefault<K extends keyof JobsState['filters']>(\n filters: JobsState['filters'],\n name: K,\n): JobsState['filters'][K]['value'] | undefined {\n const filter = filters[name];\n return filter.value === filter.defaultValue ? undefined : filter.value;\n}\n\nfunction preparePaginationQuery({offset, limit}: {offset: number; limit: number}) {\n return {\n offset: Math.max(0, offset),\n limit: limit + EXTRA_JOBS_COUNT,\n };\n}\n\nconst getJobsCanceler = new CancelHelper();\n\nexport function getJobs(): JobsListThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\n\n const operation = getOperation(state);\n dispatch(\n fetchOperationIncarnationAvailableItems({id: operation.id, type: operation.type!}),\n );\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' as const,\n parameters: getJobsRequestParameters(state),\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]) => {\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 operationId: operation.id,\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 return undefined;\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: GET_JOBS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nfunction setJobsListFilter(data: UpdateFilterData): JobsListAction {\n return {type: JOB_LIST_UPDATE_FILTER, data};\n}\n\nexport function resetCompetitiveJobs() {\n return {\n type: RESET_COMPETITIVE_JOBS,\n };\n}\n\nexport function updateFilteredAttributes<\n K extends KeysByType<JobsState['filters'], {value: boolean}>,\n>(filtersToUpdate: Array<K>, selected: Array<K>): JobsListThunkAction {\n return (dispatch) => {\n filtersToUpdate.forEach((name) => {\n const isFiltered = selected.indexOf(name) !== -1;\n dispatch(setJobsListFilter({name, value: isFiltered}));\n });\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function updateListJobsFilter(data: UpdateFilterData): JobsListThunkAction {\n return (dispatch) => {\n const {name, value} = data;\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(setJobsListFilter(data));\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function showInputPaths(job: {id: string}): JobsListThunkAction {\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: 'first' | 'next' | 'prev'): JobsListThunkAction {\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 React from 'react';\nimport {Progress} from '@gravity-ui/uikit';\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';\nimport {Job} from '../job-selector';\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobError({error}: {error: Error}) {\n const dispatch = useDispatch();\n return (\n <div>\n <Template.Error error={error} onClick={() => dispatch(showErrorModal(error))} />\n </div>\n );\n}\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobInputPaths({job}: {job: Job}) {\n const dispatch = useDispatch();\n return (\n <Link theme=\"ghost\" onClick={() => dispatch(showInputPaths(job))}>\n View\n </Link>\n );\n}\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobDebugInfo({type, job}: {type: 'stderr' | 'fail_context' | 'full_input'; job: Job}) {\n const {size, url} = job.getDebugInfo(type)!;\n return <Template.DownloadLink url={url} size={size} />;\n}\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nexport type JobProgressState = 'running' | 'completed' | 'failed' | 'aborted';\nfunction JobProgress({state, progress}: {state: JobProgressState; progress: number}) {\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\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nexport default function JobTemplate() {}\n\nJobTemplate.Error = JobError;\nJobTemplate.InputPaths = JobInputPaths;\nJobTemplate.DebugInfo = JobDebugInfo;\nJobTemplate.Progress = JobProgress;\n","import React, {FC} from 'react';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport ypath from '../../../../../../common/thor/ypath';\nimport hammer from '../../../../../../common/hammer';\nimport {Flex, Icon} from '@gravity-ui/uikit';\nimport CircleQuestionIcon from '@gravity-ui/icons/svgs/circle-question.svg';\nimport map_ from 'lodash/map';\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport {RawJob} from '../../../../../../types/operations/job';\n\ntype Props = {\n statistics: RawJob['statistics'];\n type: string;\n};\n\nconst prepareStatistics = (statistics: RawJob['statistics']) => {\n return map_(ypath.getValue(statistics), (value, key: string) => {\n let result = hammer.format.Number(value);\n\n if (key.endsWith('_data_size') || key.endsWith('_data_weight')) {\n result = hammer.format.Bytes(value);\n } else if (key.endsWith('_time')) {\n result = hammer.format.TimeDuration(value, {format: 'milliseconds'});\n }\n\n return {\n key: hammer.format.Readable(key),\n value: <div style={{textAlign: 'right'}}>{result}</div>,\n };\n });\n};\n\nexport const JobDetails: FC<Props> = ({statistics, type}) => {\n if (!statistics || type === 'vanilla') return null;\n\n const [rowCount, dataSize] = ypath.getValues(statistics, [\n '/processed_input_row_count',\n '/processed_input_uncompressed_data_size',\n ]);\n\n if (!rowCount && !dataSize) return null;\n\n return (\n <Tooltip content={<MetaTable items={prepareStatistics(statistics)} />}>\n <Flex gap={2} alignItems=\"center\">\n <span>\n {hammer.format['Number'](rowCount)} ({hammer.format['Bytes'](dataSize)})\n </span>\n <Icon data={CircleQuestionIcon} size={16} />\n </Flex>\n </Tooltip>\n );\n};\n","const SvgEllipsis = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3M9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m5 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgEllipsis;","import React, {FC, useRef} from 'react';\nimport {RawJob} from '../../../../../../types/operations/job';\nimport hammer from '../../../../../../common/hammer';\nimport {ClipboardButton, Flex, Label, Popup} from '@gravity-ui/uikit';\nimport {useToggle} from 'react-use';\nimport './StatusInfo.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-job-status-info');\n\ntype Props = {\n state: RawJob['state'];\n info: RawJob['interruption_info'];\n};\n\nexport const StatusInfo: FC<Props> = ({state, info}) => {\n const [open, toggleOpen] = useToggle(false);\n const anchorRef = useRef<HTMLDivElement>(null);\n const reason = hammer.format['ReadableField'](\n info?.preemption_reason || info?.interruption_reason,\n );\n\n return (\n <Flex alignItems=\"center\" gap={1} className={block()}>\n {hammer.format['ReadableField'](state)}\n {Boolean(reason) && (\n <>\n <div onMouseEnter={toggleOpen}>\n <Label theme=\"warning\" ref={anchorRef}>\n Interrupted\n </Label>\n </div>\n\n <Popup open={open} hasArrow anchorRef={anchorRef} onMouseLeave={toggleOpen}>\n <div className={block('popup')}>\n <div>{reason}</div>\n <ClipboardButton\n title=\"Copy reason\"\n view=\"flat-secondary\"\n size=\"s\"\n text={reason}\n />\n </div>\n </Popup>\n </>\n )}\n </Flex>\n );\n};\n","import React, {Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport {Button, DropdownMenu, Icon} 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 Link from '../../../../../../components/Link/Link';\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';\nimport {JobDetails} from './JobDetails';\nimport EllipsisIcon from '@gravity-ui/icons/svgs/ellipsis.svg';\nimport {StatusInfo} from './StatusInfo';\n\nconst block = cn('operation-detail-jobs');\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:\n 'Aborting job will cause losing its progress, 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:\n 'Abandoning job will cause losing its progress, 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, job_competition_id, 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 = job_competition_id && job_competition_id !== 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 {job_competition_id}\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.has_spec),\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 data={EllipsisIcon} size={16} />\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, type, interruption_info} = item;\n\n return (\n <div className={block('state')}>\n <div className={block('state-section', 'elements-ellipsis')}>\n <StatusInfo info={interruption_info} state={state} />\n </div>\n <div className={block('state-section')}>\n <JobTemplate.Progress state={state} progress={progress} />\n </div>\n <JobDetails statistics={brief_statistics} type={type} />\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","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 {updateListJobsFilter} 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, {\n updateFilter: (name, value) => updateListJobsFilter({name, value}),\n})(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 {updateListJobsFilter} 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, {\n updateFilter: (name, value) => updateListJobsFilter({name, value}),\n})(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 {updateListJobsFilter} 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(updateListJobsFilter({name: '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(updateListJobsFilter({name: 'filterBy', value}));\n }, []);\n\n return (\n <Fragment>\n <div className={block('toolbar-filter-by-select')}>\n <Select\n value={filterBy ? [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(\n updateFilteredAttributes(ATTRIBUTE_ITEM_NAMES, value as typeof ATTRIBUTE_ITEM_NAMES),\n );\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 {useDispatch, useSelector} from 'react-redux';\n\nimport {updateJobsOperationIncarnationFilter} from '../../../../../../store/actions/operations/jobs-operation-incarnations';\nimport OperationSelectFilter from '../../../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\nimport {\n getJobsOperationIncarnactionsFilter,\n getJobsOperationIncarnactionsValues,\n} from '../../../../../../store/selectors/operations/jobs';\n\nexport function JobsOperationIncarnationsFilter({\n disabled,\n wrap,\n}: {\n disabled: boolean;\n wrap: (node: React.ReactNode) => React.ReactNode;\n}) {\n const dispatch = useDispatch();\n\n const filter = useSelector(getJobsOperationIncarnactionsFilter);\n const values = useSelector(getJobsOperationIncarnactionsValues);\n\n return !values?.length\n ? null\n : wrap(\n <OperationSelectFilter\n name=\"incarnaction\"\n states={values.map((name) => ({name, caption: name}))}\n disabled={disabled}\n width={'auto'}\n value={filter}\n updateFilter={(_name: unknown, value: string) => {\n dispatch(updateJobsOperationIncarnationFilter(value));\n }}\n hideClear={false}\n hideFilter={false}\n />,\n );\n}\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 {JobsOperationIncarnationsFilter} from './JobsOperationsIncarnationsFilter';\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=\"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 <JobsOperationIncarnationsFilter\n disabled={showCompetitiveJobs}\n wrap={(children) => {\n return (\n <div className={block('toolbar-state', tbComp)}>{children} </div>\n );\n }}\n />\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;\nexport const getJobsMonitorItemsLoading = (state: RootState) =>\n state.operations.jobsMonitor.loading;\nexport const getJobsMonitorItemsLoaded = (state: RootState) => state.operations.jobsMonitor.loaded;\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';\n\nimport Error from '../../../../../components/Error/Error';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Loader from '../../../../../components/Loader/Loader';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {\n getJobsMonitorDescriptor,\n getJobsMonitorError,\n getJobsMonitorFromTo,\n getJobsMonitorItemsLoaded,\n getJobsMonitorItemsLoading,\n} from '../../../../../store/selectors/operations/jobs-monitor';\nimport {getCluster} from '../../../../../store/selectors/global';\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 const error = useSelector(getJobsMonitorError);\n const loaded = useSelector(getJobsMonitorItemsLoaded);\n const loading = useSelector(getJobsMonitorItemsLoading);\n\n if (!loaded && loading) {\n return <Loader visible centered />;\n }\n\n if (!job_descriptor && !error) {\n return <NoContent warning={'There are no jobs with \"monitoring_descriptor\"'} />;\n }\n\n const JobMonitorComponent = UIFactory.getMonitorComponentForJob()!;\n\n return (\n <ErrorBoundary>\n {error && <Error error={error} />}\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 getOperationId,\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';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\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 const id = useSelector(getOperationId);\n\n useOperationAttributesRumMesures();\n\n return (\n <Yson\n className={className}\n value={typedAttributes}\n settings={settings}\n extraTools={\n <YsonDownloadButton\n value={typedAttributes}\n settings={settings}\n name={`operation_attributes_${id}`}\n />\n }\n folding\n />\n );\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 {updateListJobsFilter} 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 \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  \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 {updateListJobsFilter} = this.props;\n updateListJobsFilter({name: 'state', value: jobState});\n };\n\n renderTabs() {\n const {\n match: {\n params: {operationId, tab: activeTab},\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 || activeTab === Tab.JOBS_MONITOR},\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={activeTab}\n routed\n routedPreserveLocation\n size={UI_TAB_SIZE}\n />\n </div>\n );\n }\n\n renderMain() {\n const {match, cluster, monitorTabVisible, jobsMonitorIsSupported, 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 {jobsMonitorIsSupported && (\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 jobsMonitorIsSupported: Boolean(UIFactory.getMonitorComponentForJob()),\n jobsMonitorVisible: getJobsMonitorTabVisible(state),\n hasStatististicsTab: getOperationStatiscsHasData(state),\n };\n};\n\nconst mapDispatchToProps = {\n promptAction,\n getOperation,\n showEditPoolsWeightsModal,\n updateListJobsFilter,\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';\nimport clone_ from 'lodash/clone';\n\nimport {\n getFormat,\n getShowDecoded,\n shouldCompact,\n shouldEscapeWhitespace,\n useBinaryAsHex,\n} from '../../../store/selectors/settings';\nimport {getUnipikaSettingsFromConfig} from '../../../common/thor/unipika-settings';\n\nexport interface YsonSettings {\n format: string;\n showDecoded: boolean;\n compact: boolean;\n escapeWhitespace: boolean;\n binaryAsHex: boolean;\n asHTML: boolean;\n}\n\n/**\n * !!! Do not use this selector directly, result should be copied by another selector !!!\n * unipika.format && unipika.foramtRaw mix different properties into settings-object.\n * So, to minimize side-effects each UI-component should use his-own copy of settings-object.\n */\nconst getYsonSettings = createSelector(\n [getFormat, getShowDecoded, shouldCompact, shouldEscapeWhitespace, useBinaryAsHex],\n (\n format: string,\n showDecoded: boolean,\n compact: boolean,\n escapeWhitespace: boolean,\n binaryAsHex: boolean,\n ): YsonSettings => {\n return {\n format,\n showDecoded,\n compact,\n escapeWhitespace,\n binaryAsHex,\n asHTML: true,\n ...getUnipikaSettingsFromConfig(),\n };\n },\n);\n\nexport const getJobGeneralYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getJobSpecificationYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getTableYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getOperationAttributesYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getOperationExperimentsYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getNavigationMountConfigYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getEditJsonYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getNodeUnrecognizedOptionsYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getPreviewCellYsonSettings = createSelector([getYsonSettings], clone_);\n\nexport const getFlowSpecYsonSettings = createSelector([getYsonSettings], clone_);\n","import UIFactory from '../../UIFactory';\nimport {Page} from '../../constants';\nimport {TabletsTab} from '../../constants/tablets';\nimport {OrderType, multiSortWithUndefined, orderTypeToOrderK} from '../sort-helpers';\n\nexport function tabletCellBundleDashboardUrl(cluster: string, bundle: string) {\n return UIFactory.makeUrlForTabletCellBundleDashboard(cluster, bundle);\n}\n\nexport function genTabletCellBundlesCellUrl(cellId: string, cluster?: string) {\n const prefix = cluster ? `/${cluster}/` : '';\n return `${prefix}${Page.TABLET_CELL_BUNDLES}/${TabletsTab.TABLET_CELLS}?id=${cellId}`;\n}\n\nfunction compareBundlesByAccount<T extends Record<string, any>>(left: T, right: T) {\n if (\n left.changelog_account === right.changelog_account &&\n left.snapshot_account === right.snapshot_account\n ) {\n return 0;\n }\n\n return left.changelog_account < right.changelog_account\n ? -1\n : left.snapshot_account < right.snapshot_account\n ? -1\n : 1;\n}\n\nexport const sortTableBundles = <T extends Record<string, any>>({\n bundles,\n column,\n columnsSortable,\n order,\n}: {\n bundles: T[];\n column: keyof T;\n columnsSortable: Set<string>;\n order: OrderType;\n}) => {\n let sorted: T[] = [];\n\n const {orderK, undefinedOrderK} = orderTypeToOrderK(order);\n\n if (column === 'changelog_account') {\n sorted = [...bundles].sort(compareBundlesByAccount);\n } else if (column === 'nodes') {\n sorted = [...bundles].sort(({nodes: l = []}, {nodes: r = []}) => l.length - r.length);\n } else if (columnsSortable.has(column as string)) {\n return multiSortWithUndefined(bundles, [{key: column, orderK, undefinedOrderK}]);\n }\n\n return (order as string).includes('asc') ? sorted : sorted.reverse();\n};\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;","const SvgCircleQuestion = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.079.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.326.257-.379.328-.038.052-.038.07-.038.089a.75.75 0 0 1-1.5 0c0-.794.544-1.286 1.057-1.645.28-.196.4-.332.458-.426a.54.54 0 0 0 .074-.312c0-.3-.243-.641-.839-.641a1 1 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 1 1-1.5 0c0-.674.345-1.22.78-1.577ZM8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2\" clipRule=\"evenodd\" /></svg>;\nexport default SvgCircleQuestion;","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","import { useReducer } from 'react';\nvar toggleReducer = function (state, nextValue) {\n return typeof nextValue === 'boolean' ? nextValue : !state;\n};\nvar useToggle = function (initialValue) {\n return useReducer(toggleReducer, initialValue);\n};\nexport default useToggle;\n"],"names":["connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","ChartLink","props","className","url","theme","children","hideIcon","face","wrapContent","icon","Icon","awesome","_jsxs","React","Link","target","b","block","headingCN","CollapsibleSectionStateLess","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","toggle","onToggle","collapsed","_createClass","key","value","_this$props","this","name","size","overview","headingClassName","marginDirection","togglerRightPadding","ErrorBoundary","margin","clickable","Component","CollapsibleSection","_React$useState","_React$useState2","_slicedToArray","setCollapsed","onChange","defaultProps","ElementsTableFooter","state","item","index","undefined","css","itemHeight","templates","itemMods","selectedIndex","computeKey","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","footer","renderRow","columns","_prepareColumnsData","prepareColumnsData","items","set","_WithStickyFooter","_React$Component","WithStickyFooter","bWrapper","sticky","prepareTableClassName","renderStickyFooter","displayName","getDisplayName","mapDispatchToProps","toggleColumnSortOrder","compose","sortState","tables","_WithStickyHead","WithStickyHead","top","style","ElementsTableHeader","renderStickyHead","padded","striped","HEADER_HEIGHT","xmlns","fill","viewBox","fillRule","d","clipRule","cn","ExpandButton","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","Button","view","data","doubleShevronRightSvg","shevronRightSvg","ExpandIcon","visible","onClickCb","Boolean","toaster","Toaster","LoadDataHandler","error","loaded","errorData","add","autoHiding","message","hammer","format","NO_VALUE","actions","label","showErrorPopup","_this$props2","_this$props2$alwaysSh","alwaysShowError","Error","Pagination","control","handler","disabled","tooltip","hotkeySettings","keys","hotkey","scope","hotkeyScope","hotkeyHandler","first","previous","next","last","pin","Hotkey","settings","showInput","inputValue","TextInput","type","onUpdate","_this$props3","renderComponent","renderInput","toolbarBlock","Toolbar","collapseTable","onTreeStateChange","expandTable","dispatch","useDispatch","handleFilterChange","useCallback","val","onFilterChange","isExpanded","treeState","Filter","debounce","helpUrl","HelpLink","mesureRowWidth","ctx","text","width","measureText","Math","max","ceil","TREE_ROOT_NAME","createMetricsEntry","prefix","prepareMetricsList","statistics","list","preparedList","leaves","forEach_","statistic","_typeof","values_","metricsChild","metricsLeaf","entry","createMetricsEntryLeaf","prepareStatisticTs","metricsList","metricsTree","treeList","prepareTree","attachTreeLeaves","leafEntry","UNIT_TO_FORMATTER","_UNIT_TO_FORMATTER","_defineProperty","v","TimeDuration","round","formatBytes","suffix","isNaN","Bytes","formatByUnit","unit","_UNIT_TO_FORMATTER2","formatFn","Number","LEVEL_OFFSET","Avg","count","sum","result","significantDigits","StatisticTableStaticCell","_ref2","_item$attributes","_item$attributes2","aggregation","isLeafNode","StatisticName","_ref3","info","emptyInfo","description","Tooltip","MetaTable","Secondary","ExpandedCell","_ref4","itemState","toggleItemState","_ref4$minWidth","minWidth","renderValue","offsetStyle","paddingLeft","level","toggleItemAndTreeState","empty","prepareTableProps","_ref5","visibleColumns","reduce","ret","col","sort","align","tree","sets","default","Object","mode","useJobStatisticTable","_ref6","fontFamilies","filter","setFilter","_React$useState3","_React$useState4","setTreeState","currentFilter","filteredTree","filterTree","indexOf","sortedTree","sortTree","field","asc","get","flattenTree","filterStatisticTree","_step","res","font","document","createElement","getContext","createCanvasContext","regular","_iterator","_createForOfIteratorHelper","s","n","done","iconsWidth","err","e","f","getMinWidth","StatisticTable","_ref7","virtual","fixedHeader","getStatisticInfo","useSelector","getFontFamilies","_useJobStatisticTable","_","_getStatisticInfo","_item$attributes3","__default__","columnName","_getStatisticInfo2","tableProps","_toConsumableArray","headerClassName","fixed","StatusLabel","renderPlaque","mappedState","_states","materializing","initializing","preparing","pending","starting","running","completing","failing","aborting","reviving","suspended","failed","completed","aborted","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","unknown","mods","WarningIcon","hoverContent","color","Text","variant","typedMemo","constructor","super","resetError","setState","getDerivedStateFromError","componentDidCatch","_a","_b","onError","componentDidUpdate","prevProps","code","NO_DATA","render","i18n","toString","getErrorMessage","renderError","renderPluginLoader","pluginLoader","assign","ChartKitComponent","widgetRef","instanceRef","id","propsId","isMobile","restProps","ckId","lang","plugin","find","iteratedPlugin","UNKNOWN_PLUGIN","ChartComponent","renderer","reflow","details","current","fallback","mobile","ref","YagrPlugin","plugins","COLORS","getSerieColor","serieIndex","datepickerDefaultProps","WaitForFont","_useSelector","monospace","ready","setReady","Promise","waitForFontFamily","then","usePoolTreesLoaded","loadPoolTreesIfNotLoaded","PoolTreesLoader","useDefaultPoolTree","defaultPoolTree","setDefaultPoolTree","loadDefaultPoolTree","WaitForDefaultPoolTree","Placeholder","tab","useRouteMatch","params","StaleJobIcon","event","phase","caption","formatter","progress","duration","reviving_jobs","start_time","time","DEFAULT_MODE","WITH_ACTIONS_MODE","getEventsTableProps","showActions","eventsTableProps","_sets","header","prepareTableColumns","getEventsGeneralProps","PropTypes","odBlock","ElementsTable","withStickyHead","withStickyFooter","ElementsTableBase","getValue","_columns$columnName","Events","Template","Time","valueFormat","finish_time","Event","isFinalState","isNotFinalState","_getValue","Progress","Readable","isEmpty_","ClickableAttributesButton","events","eventsItems","slice","totalRow","pop","showAttributesColumn","formatShare","isEmptyStatistics","stats","some_","ypath","hasProgressTasks","operation","TASKS_PREFIX","prepareFile","file","originalPath","executable","getBoolean","prepareMeta","meta","prepared","map_","sortBy_","prepareStartedBy","startedBy","command","fields","filter_","option","prepareTransferTask","task","task_id","UIFactory","makeUrlForTransferTask","prepareLivePreview","isRunning","_operation$getLivePre","getLivePreviewPath","virtualPath","supported","transaction","prepareTableFilters","table","filters","ranges","range","upperLimit","lowerLimit","normalizeTableRanges","prepareTable","typedTable","userTransactionAlive","cluster","prepareTransaction","livePreview","append","teleport","primary","foreign","typedFilters","groupTables","currentGroup","group","YPath","create","getKey","folder","toSubpath","stringify","groupKey","push","isFolder","console","prepareInput","TYPE","typedTables","$typedAttributes","prepareStderr","prepareCoredumps","coreTable","prepareOutput","prepareIntermediate","prepareScriptCaption","substring","prepareScript","_environment","script","environment","jobCount","files","layerPaths","prepareTasks","tasks","keys_","taskName","prepareVisibleItems","filterVisibleItems","itemsCount","prepareFaqUrl","docsUrl","docsUrls","replace","OperationSelector","$value","$attributes","pools","RUNNING_STATES","PREPARING_STATES","INTERMEDIATE_STATES","orchidAttributes","trees","poolsIndexes","schedulingInfo","_orchidAttributes$tre","pool","isEphemeral","slotIndex","weight","_OperationSelector","ListOperationSelector","_OperationSelector2","user","input","output","startTime","finishTime","jobs","completedJobs","runningJobs","failedJobs","totalJobs","completedJobsProgress","runningJobsProgress","jobsProgress","briefSpec","_assertThisInitialized","computeIOProperties","computePools","moment","total","spec","io","remote","remoteInputUrl","DetailedOperationSelector","_OperationSelector3","_super2","typedData","orchidData","_this2","$orchidAttributes","alias","totalFailedJobs","failedJobsProgress","typedSpec","typedProvidedSpec","typedFullSpec","typedUnrecognizedSpec","live_preview","typedAttributes","fullSpec","runtimeAnnotations","hasVirtualPath","hasPath","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","from","getOperation","getOperationId","getOperationTasks","getOperationTasksNames","getOperationDetailsLoadingStatus","loading","calculateLoadingStatus","getOperationTypedAttributes","getOperationJobsLoadingStatus","monitorChartStates","states","getOperationExperimentAssignments","getOperationMonitoredJobCount","getOperationJobsMonitorTabSettings","jobsCount","maxJobCount","cancelHerlper","CancelHelper","operationDetailsRequests","getIsEphemeral","operationAttributes","treesInfo","requests","values","mapValues_","infoPerTree","map","parameters","ytApiV3Id","executeBatch","YTApiId","operationIsEphemeral","YTErrors","NODE_DOES_NOT_EXIST","poolInfo","getState","isAlias","include_scheduler","output_format","annotate_with_types","encode_utf8","operation_alias","operation_id","GET_OPERATION","REQUEST","ytApiV3","checkUserTransaction","preparedAttributes","prepareAttributes","dispatchOperationSuccess","prepareActions","specification","network","prepareRemote","transferTask","genNavigationUrl","stderr","intermediate","coredumps","mapper","reducer","reduceCombiner","prepareSpecification","alerts","helpURL","prepareAlerts","prepareError","runtime","treeFairShareInfo","treeName","prepareRuntime","prepareOperationEvents","resources","estimatedInputStatistics","dataFlow","source_name","target_name","job_data_statistics","teleport_data_statistics","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","_asyncToGenerator","_regeneratorRuntime","_callee","outputTransaction","_context","prev","LOAD_RESOURCE_USAGE","abrupt","operationIntermediateResourceUsage","intermediateResources","account","stop","_x","loadIntermediateResourceUsage","isFirstLoading","getOperationsListFilters","getOperationsPoolTreeRawCounters","_state$operations$lis","poolTree","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","counter","allNames","countersMap","ATTRIBUTE_ITEMS","ATTRIBUTE_ITEM_NAMES","getOperationsListFilterParameters","subject","permissions","actualSubject","getValueIfNotDefault","actualPermissions","access","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","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","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","isRequired","Runtime","handlePoolEditClick","_progress$partitions","_progress$partitions2","_progress$resource_de","_progress$resource_de2","OperationPool","onEdit","compact","TemplateWeight","min_share_ratio","adjusted_min_share_ratio","fair_share_ratio","usage_ratio","demand_ratio","partitions","scheduling_status","dominant_resource","FormattedValue","preemptable_job_count","resource_demand","memory","user_slots","renderTree","preparePoolsState","prepareWeightsState","String","renderPoolsAndWeights","weights","setPools","setWeights","Page","SCHEDULING","Fragment","hideEditPoolsWeightsModal","HIDE_EDIT_WEIGHT_POOL_MODAL","setPoolsAndWeights","pathItems","window","location","pathname","split","inOperationsList","OPERATIONS","operationId","poolTrees","SET_PULLS_AND_WEIGHTS","old","updateOperationParameters","_parameters","scheduling_options_per_pool_tree","_operations$page$edit","page","editWeightModal","_useState","useState","_useState2","_useState3","_useState4","useEffect","Modal","confirmText","onConfirm","onCancel","isConfirmDisabled","isStateCorrect","isWeightCorrect","every_","isPoolCorrect","Yson","OperationProgress","onLinkClick","jobsByStateTitle","routed","renderCounter","isPreparing","showState","_this$props2$operatio","renderState","progressBar","stack","renderProgressBar","renderFailedProgressBar","renderJobCounters","renderFailedJobCounters","BLOCK_NAME","renderIO","renderText","mix","elem","OperationIOLink","renderTitle","getTitle","trimEnd_","unipika","decode","renderCopyTitle","ClipboardButton","UserPoolItem","awesomeIcon","allowUnmounted","metaItem","OperationsListTable","match","valueTemplate","renderUserPool","multiplePools","SubjectCard","renderMultiplePools","TemplatePools","allowDetachEditBtn","renderActions","promptAction","action","currentOption","performAction","virtualType","getItemLink","user_pool","renderType","renderStartTime","renderProgress","initialLoading","emptyDataDescription","isLoading","withRouter","global","_operations$list","hasLoaded","tbBlock","OperationsTextFilter","transition","gotoDetails","handleKeyDown","evt","stateValue","propsValue","activePreset","Redirect","placeholder","newValue","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","hideModal","CURRENT","applyTimeRange","prepareText","updateDate","dateWithHours","_moment$toObject","toObject","minutes","updateTime","handleActiveTypeChange","ev","checked","cancelText","cl","CustomRadioButton","Datepicker","newFrom","newTo","renderCustomCancel","SelectButton","OperationSelectFilter","onRadioChange","onCheckChange","withCounters","found","stateName","ReadableField","multiple","placeHolder","Select","hideFilter","isArray","vals","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","NS_SEPARATOR","getOperationsListActivePresets","selectedFilters","presets","presetId","k","_selectedFilters$key","Set","ELEMENT","OperationsFilterPresets","presetName","isPresetDefault","saveFilterPreset","makeRemoveHandler","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","renderUserSuggest","hasClear","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","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","PartitionSizesConnected","chartKitTheme","getTheme","connector","PartitionSizesWithRum","loadState","OPERATION_TAB_PARTITION_SIZES","additionalStartType","row","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","completedTableProps","withActions","row_count","compressed_data_size","uncompressed_data_size","data_weight","chunk_count","intermediateTableProps","disk_space","node_count","resourceAsBytes","resourceAsNumber","expandKey","prepareState","allowExpand","expandedTasks","inner","DataFlow","self","fromTo","expKey","toggleExpand","columnsMode","getResourceTemplates","CollapsibleTable","heading","allItemsCount","renderToggler","renderHeading","withCollapsible","tags","inputTableProps","outputTableProps","stderrTableProps","specificationBlock","scriptProps","Specification","TemplateTransferTask","_ref3$fields","TemplateCommand","lineCount","TemplateEnvironment","environments","TemplateFiles","TemplateLayerPaths","paths","TemplateLivePreivew","renderScript","_this$props$specifica","renderTransferTask","renderRemote","renderStartedBy","renderIntermediate","renderTasks","DetailedJobsCounter","scheduledCounters","scheduled","scheduledItems","nonScheduledCounters","nonScheduled","nonScheduledItems","renderSection","renderHelpLink","nonInterruptedItems","nonInterrupted","interruptedCounters","interrupted","renderAborted","abortedStats","renderCompleted","completedStats","secondary","primaryValue","secondaryValue","handleClose","handleShow","modalContent","renderModalContent","Flex","renderCount","onOutsideClick","withVisible","sortCounters","reasonA","reasonB","compareVectors","prepareCategoryCounters","category","prepareCompletedStatistics","prepareAbortedStatistics","prepareCounters","tasksTablesProps","job_type","prepareColumns","fieldTreeForEach","vertex","isT","visitorCb","forEach","filterFieldTree","predicate","filterT","tmp","fieldTreeSome","some","getOperationDetailsOperation","getOperationStatisticsV2","isStatisticItem","getOperationStatisticsAvailableValues","_stats$time$total","_stats$time","_construct","getOperationStatisticsActiveFilterValues","jobTypeFilter","poolTreeFilter","filterText","activeJobType","STATISTICS_FILTER_ALL_VALUE","activePoolTree","getOperationStatiscsHasData","getOperationStatisticsFilteredTree","checkByName","_ref3$tags","getOperationStatisticsFiltered","_tree","itemToRow","summary","job_state","c","sum_","min_","max_","mergeSummary","getTotalJobWallTime","_tree$time","excludeRunningAndCalcSum","_itemToRow","valuesToSum","compact_","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","column","_item$abortedStats","_item$completedStats","TaskInfo","_self$state","expandable","_rowIndex","colIndex","_jobs$items","collapsibleSize","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","disableLogger","renderRuntimeOverview","_this$props5","_this$props6","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","onToggleCollapse","effectVisible","setEffectVisibility","_ypath$getValue","effect","fraction","getOperationExperimentsYsonSettings","toggleEffectVisibility","dispatchEvent","folding","virtualized","extraTools","YsonDownloadButton","onResize","throttle_","leading","SpecificationConnected","providedSpec","unrecognizedSpec","hasUnrecognized","provided","unrecognized","resulting","onToggleProvided","onToggleUnrecognized","onToggleResulting","SpecificationWithRum","OPERATION_TAB_SPECIFICATION","JobSizes","showEstimated","toggleEstimated","WithStickyToolbar","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","OperationStatisticNameImpl","OperationStatisticValueImpl","asStr","asNumber","OperationStatisticValue","OperationStatisticName","statisticsBlock","Statistics","TREE_STATE","COLLAPSED","EXPANDED","activeAggregation","_columnName","togglerIconName","itemIconName","_item$data","jobTypes","DEBOUNCE_DELAY","changeFilterText","RadioButton","changePoolTreeFilter","makeRadioButtonProps","changeJobType","changeAggregation","AGGREGATOR_RADIO_ITEMS","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","getJobsErrors","jobsErrors","getJobsOperationIncarnactionsFilter","jobsOperationIncarnations","getJobsOperationIncarnactionsValues","availableValues","cancelHelper","getJob","clusterConfig","getCurrentClusterConfig","removeAllRequests","getJobRequestParameters","saveCancelToken","job","GET_JOB","getCompetitiveJobs","job_id","getCompetitiveJobsRequestParameters","GET_COMPETITIVE_JOBS","getJobsRequestParameters","offset","pagination","OPERATION_JOBS_TABLE_ID","incarnaction","address","with_stderr","with_fail_context","with_spec","with_competitors","sort_field","sort_order","getJobFilterParameters","EXTRA_JOBS_COUNT","operation_incarnation","job_competition_id","getJobsCanceler","getJobs","showCompetitiveJobs","jobOperaionIncarnationActions","onRequest","onReset","onSuccess","uniq_","fetchOperationIncarnationAvailableItems","GET_JOBS","operationGetJobs","reject","_jobs$output","errors","state_counts","type_counts","stateCounters","typeCounters","setJobsListFilter","JOB_LIST_UPDATE_FILTER","updateListJobsFilter","isStateFilter","changeColumnSortOrder","tableId","RESET_COMPETITIVE_JOBS","gotoJobsPage","showInputPaths","SHOW_INPUT_PATHS","getJobInputPaths","TYPED_OUTPUT_FORMAT","inputPaths","UPDATE_OFFSET","JobTemplate","showErrorModal","InputPaths","DebugInfo","getDebugInfo","DownloadLink","prepareStatistics","endsWith","textAlign","JobDetails","_ypath$getValues","getValues","_ypath$getValues2","rowCount","dataSize","alignItems","CircleQuestionIcon","StatusInfo","_useToggle","useToggle","_useToggle2","open","toggleOpen","anchorRef","useRef","reason","preemption_reason","interruption_reason","onMouseEnter","Label","Popup","hasArrow","onMouseLeave","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","makeUrlForMonitoringDescriptor","renderErrorAndDebug","areInputPathsPresent","has_spec","button","EllipsisIcon","firstGroup","secondGroup","DropdownMenu","switcher","id_address","withTaskName","taskNamesNumber","renderFinishTime","renderDuration","renderTaskName","brief_statistics","interruption_info","_this$props2$inputPat","hideInputPaths","LOADING_STATUS","UNINITIALIZED","ysonSettings","ERROR","SimpleModal","LOADING","competitiveJobs","renderInputPathsModal","onSort","HIDE_INPUT_PATHS","_getOperationTasksNam","jobsOperationId","getJobsOperationId","_operations$jobs","initialStates","statesProvider","JobsPaginator","_operations$jobs$pagi","JobsIdFilter","handleChange","JobsSuggestFilter","identity_","attributeNames","filtersToUpdate","isFiltered","filterable","JobsOperationIncarnationsFilter","_name","updateJobsOperationIncarnationFilter","hideClear","extractJobTypes","sortInPredefinedOrder","OperationJobsToolbar","taskNames","allTaskNames","JobsFilterBy","JobsSelectFilter","JobsAttributesFilter","OperationJobsErrors","ErrorBlock","Jobs","timeout","JobsWithRum","operationLoadState","OPERATION_TAB_JOBS","getJobsMonitorError","jobsMonitor","getJobsMonitorItemsLoading","getJobsMonitorItemsLoaded","getJobsMonitoringItemsWithDescriptor","getJobsMonitorFromTo","start","valueOf","finish","getJobsMonitorDescriptor","getJobsMonitorTabVisible","opId","jobMonId","jobsDescriptor","JobsMonitor","job_descriptor","Loader","centered","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","totalJobWallTime","cpuTimeSpent","erasedTrees","_operation$user","Id","_objectSpread2","_this$props4$match$pa","activeTab","hasStatististicsTab","jobsMonitorVisible","monitorTabVisible","monitorTabTitle","monitorTabUrlTemplate","showSettings","getDetailsTabsShowSettings","Tab","STATISTICS","MONITOR","_operation$pools","monTab","external","firstPoolInfo","operationMonitoringUrl","urlTemplate","makeTabProps","Tabs","routedPreserveLocation","UI_TAB_SIZE","jobsMonitorIsSupported","monitoringComponent","Switch","Route","ATTRIBUTES","DETAILS","SPECIFICATION","JOBS","JOB_SIZES","PARTITION_SIZES","DEFAULT_TAB","renderAlias","_match$params","redirectPath","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","getYsonSettings","getFormat","getShowDecoded","shouldCompact","shouldEscapeWhitespace","useBinaryAsHex","showDecoded","binaryAsHex","asHTML","getUnipikaSettingsFromConfig","getJobGeneralYsonSettings","clone_","getJobSpecificationYsonSettings","getTableYsonSettings","getNavigationMountConfigYsonSettings","getEditJsonYsonSettings","getNodeUnrecognizedOptionsYsonSettings","getPreviewCellYsonSettings","getFlowSpecYsonSettings","tabletCellBundleDashboardUrl","bundle","makeUrlForTabletCellBundleDashboard","genTabletCellBundlesCellUrl","cellId","TABLET_CELL_BUNDLES","TabletsTab","TABLET_CELLS","compareBundlesByAccount","left","right","changelog_account","snapshot_account","sortTableBundles","bundles","columnsSortable","order","sorted","_orderTypeToOrderK","orderTypeToOrderK","orderK","undefinedOrderK","_ref2$nodes","nodes","_ref3$nodes","multiSortWithUndefined","includes","reverse","i18nFactory","registerKeysets","bind","CHARTKIT_ERROR_CODE","INVALID_DATA","UNKNOWN","TOO_MANY_LINES","ChartKitError","originalError","isCustomError","mergeSettingStrategy","objValue","srcValue","currentPlugins","newPlugins","newSettingsPlugins","currentPlugin","newPluginIndex","findIndex","newPlugin","splice","settingsEventEmitter","on","off","eventId","updateLang","configure","setLang","updates","filteredUpdates","entries","withNaming","m","getRandomCKId","chars","floor","random","randomString","p","a","addEventListener","attachEvent","w","g","setAttribute","appendChild","createTextNode","h","j","cssText","B","offsetWidth","scrollLeft","scrollWidth","C","parentNode","D","family","stretch","context","E","F","G","H","M","fonts","N","q","prototype","J","Date","getTime","K","L","navigator","vendor","exec","userAgent","parseInt","I","O","t","setTimeout","P","race","clearTimeout","body","removeEventListener","readyState","detachEvent","u","z","A","removeChild","dir","hidden","module","exports","toggleReducer","nextValue","initialValue","useReducer"],"sourceRoot":""}
|