@ytsaurus/ui 1.103.0 → 1.103.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +40 -40
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css +2 -0
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css.map +1 -0
- package/dist/public/build/css/{main.d1987746.css → main.23e8d0fd.css} +2 -2
- package/dist/public/build/css/main.23e8d0fd.css.map +1 -0
- package/dist/public/build/js/6157.6786c942.chunk.js +2 -0
- package/dist/public/build/js/6157.6786c942.chunk.js.map +1 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js +2 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js.map +1 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js +2 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js.map +1 -0
- package/dist/public/build/js/{accounts.aaa21eca.chunk.js → accounts.f328f823.chunk.js} +2 -2
- package/dist/public/build/js/accounts.f328f823.chunk.js.map +1 -0
- package/dist/public/build/js/acl.556f2525.chunk.js +2 -0
- package/dist/public/build/js/acl.556f2525.chunk.js.map +1 -0
- package/dist/public/build/js/{bundles.b851f32c.chunk.js → bundles.0ab2d6f4.chunk.js} +2 -2
- package/dist/public/build/js/{bundles.b851f32c.chunk.js.map → bundles.0ab2d6f4.chunk.js.map} +1 -1
- package/dist/public/build/js/cluster-page-wrapper.a5c05070.chunk.js +2 -0
- package/dist/public/build/js/{cluster-page-wrapper.45436df6.chunk.js.map → cluster-page-wrapper.a5c05070.chunk.js.map} +1 -1
- package/dist/public/build/js/dashboard.efdd63a2.chunk.js +3 -0
- package/dist/public/build/js/{dashboard.234b8062.chunk.js.map → dashboard.efdd63a2.chunk.js.map} +1 -1
- package/dist/public/build/js/main.a89bac74.js +3 -0
- package/dist/public/build/js/main.a89bac74.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js → navigation-flow.1d83e216.chunk.js} +2 -2
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js.map → navigation-flow.1d83e216.chunk.js.map} +1 -1
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js → navigation.0aff5a3a.chunk.js} +2 -2
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js.map → navigation.0aff5a3a.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js → query-tracker.b7334a6f.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js.map → query-tracker.b7334a6f.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.8a460b23.js → runtime.d583e98e.js} +2 -2
- package/dist/public/build/js/{runtime.8a460b23.js.map → runtime.d583e98e.js.map} +1 -1
- package/dist/public/build/js/users.aec1e380.chunk.js +2 -0
- package/dist/public/build/js/users.aec1e380.chunk.js.map +1 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js +3 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +34 -34
- package/package.json +4 -3
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css +0 -2
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css.map +0 -1
- package/dist/public/build/css/main.d1987746.css.map +0 -1
- package/dist/public/build/js/2009.8121a60e.chunk.js +0 -2
- package/dist/public/build/js/2009.8121a60e.chunk.js.map +0 -1
- package/dist/public/build/js/6157.92170346.chunk.js +0 -2
- package/dist/public/build/js/6157.92170346.chunk.js.map +0 -1
- package/dist/public/build/js/6960.8b7e01c6.chunk.js +0 -2
- package/dist/public/build/js/6960.8b7e01c6.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.aaa21eca.chunk.js.map +0 -1
- package/dist/public/build/js/acl.1ad3d494.chunk.js +0 -2
- package/dist/public/build/js/acl.1ad3d494.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.45436df6.chunk.js +0 -2
- package/dist/public/build/js/dashboard.234b8062.chunk.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js.map +0 -1
- package/dist/public/build/js/users.a0dc610f.chunk.js +0 -2
- package/dist/public/build/js/users.a0dc610f.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js +0 -3
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js.map +0 -1
- /package/dist/public/build/js/{dashboard.234b8062.chunk.js.LICENSE.txt → dashboard.efdd63a2.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.aa6a17d8.js.LICENSE.txt → main.a89bac74.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{yt-df-dialog.acab4eb0.chunk.js.LICENSE.txt → yt-df-dialog.1d05b0a5.chunk.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/2009.8121a60e.chunk.js","mappings":"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","sources":["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/runtime.js","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/PoolsWeightsEditModal/PoolsWeightsEditModal.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationProgress/OperationProgress.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListTable/PathItem.tsx","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/i18n/index.ts","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/Runtime/Runtime.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DetailedJobsCounter/JobCounters.tsx","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.tsx","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/store/selectors/operations/jobs-timeline.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-timeline.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/constants/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-expand-to-lines.svg","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/TimeLineHeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getPhaseColor.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsSidePanel/EventsTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/MetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsSidePanel/EventsSidePanel.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/helpers/getColorByState.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/enums/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getTimeLineDisplayMode.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/helpers/convertToRGBA.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/JobLineRenderer.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/AllocationLineRenderer.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventTimelineTooltip.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContentRow.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContent.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventCanvas.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventsTimeline.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/TimelineTable.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/GroupCollapse.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/TimelineBlock.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/JobsGroups/JobsGroups.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/prepareJobTimeline.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/JobsTimeline.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/components/YTChartKit/index.tsx","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/ExpandIcon/ExpandIcon.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/useAlertContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertAction.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertContextProvider.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertIcon.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleXmarkFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleXmark.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleInfoFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleCheckFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/TriangleExclamationFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ThunderboltFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/Alert.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertTitle.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertActions.js","webpack://@ytsaurus/ui/./src/ui/components/common/Datepicker/index.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/./node_modules/dayjs/plugin/duration.js","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/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withSplit.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Table/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Table/Table.js","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/use-side-panel.tsx","webpack://@ytsaurus/ui/./node_modules/dayjs/plugin/relativeTime.js","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/global-pool-trees.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/circle-question.svg","webpack://@ytsaurus/ui/./src/ui/components/OperationType/OperationType.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx"],"sourcesContent":["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 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 {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'] + '#' + 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\nexport interface OperationPool {\n tree: string;\n pool: string;\n isEphemeral: boolean;\n slotIndex?: number;\n weight?: number;\n}\n\ntype PreparingStates = 'materializing' | 'initializing' | 'preparing' | 'pending';\ntype RunningStates = 'running' | 'completing' | 'failing' | 'aborting' | 'reviving';\n\nexport type OperationStates = PreparingStates | RunningStates | 'completed' | 'failed' | 'aborted';\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: OperationStates;\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) {\n const trees = ypath.getValue(\n attributes,\n '/runtime_parameters/scheduling_options_per_pool_tree',\n );\n const attrsPerPoolTree = ypath.getValue(attributes, '/scheduling_attributes_per_pool_tree');\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 treeData = ypath.getValue(attrsPerPoolTree, `/${tree}`);\n const isEphemeral = ypath.getValue(treeData, '/running_in_ephemeral_pool') || false;\n const isLightweight = ypath.getValue(treeData, '/running_in_lightweight_pool') || false;\n\n return {\n tree,\n pool,\n isEphemeral,\n isLightweight,\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\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) {\n super(data);\n\n this.$typedAttributes = typedData;\n\n const attributes = this.$attributes;\n const typedAttributes = this.$typedAttributes;\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);\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';\nimport {getClusterUiConfig} from '../global';\nimport {formatByParams} from '../../../utils/format';\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 getOperationTreeConfigs = (state: RootState) => state.operations.detail.treeConfigs;\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\nexport const selectIsOperationInGpuTree = createSelector(\n [getOperationTreeConfigs],\n (treeConfigs) => {\n return treeConfigs?.every((item) => item.config.main_resource === 'gpu');\n },\n);\n\nexport const getOperationPerformanceUrlTemplate = createSelector(\n [getOperationId, getClusterUiConfig],\n (operationId, uiConfig) => {\n const operationPerformanceUrlTemplate = uiConfig?.operation_performance_url_template;\n\n if (!operationPerformanceUrlTemplate) return undefined;\n\n return {\n url: formatByParams(operationPerformanceUrlTemplate.url_template, {\n operation_id: operationId,\n }),\n title: operationPerformanceUrlTemplate.title,\n };\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 type {ThunkAction} from 'redux-thunk';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport {forEachYTError} from '../../../utils/errors';\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 {\n GET_OPERATION,\n LOAD_RESOURCE_USAGE,\n OPERATION_DETAIL_PARTIAL,\n} from '../../../constants/operations/detail';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\nimport {DetailedOperationSelector} from '../../../pages/operations/selectors';\nimport {checkUserTransaction, prepareActions} from '../../../utils/operations/detail';\nimport {prepareAttributes} from '../../../utils';\nimport {showErrorPopup, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {isOperationId} from '../../../utils/operations/list';\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 {getCluster} from '../../../store/selectors/global';\nimport type {RootState} from './../../../store/reducers';\nimport type {OperationDetailActionType} from '../../reducers/operations/detail';\nimport {JSONSerializer} from '../../../common/yt-api';\n\nconst toaster = new Toaster();\nconst operationDetailsRequests = new CancelHelper();\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: TYPED_OUTPUT_FORMAT,\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({parameters: params, setup: {JSONSerializer}}, operationDetailsRequests)\n .then(checkUserTransaction)\n .then(([operationAttributes, userTransactionAlive]) => {\n const preparedAttributes = prepareAttributes(operationAttributes);\n const operation = new DetailedOperationSelector(\n preparedAttributes,\n operationAttributes,\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 if (error?.error) {\n forEachYTError([error.error], (item) => {\n const attributes = ypath.getValue(item, '/attributes');\n const job_id = ypath.getValue(attributes, '/job_id');\n\n const dst = attributes.$value ?? attributes;\n if ('string' === typeof job_id) {\n const cluster = getCluster(getState());\n Object.assign(dst, {\n job_id: {\n $attributes: {\n _type_tag: 'url',\n },\n $value: {\n href: `${window.location.origin}/${cluster}/job/${id}/${job_id}`,\n text: job_id,\n },\n },\n });\n }\n });\n }\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 dispatch(loadOperationPoolTreeConfigs(operation));\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\nexport function loadOperationPoolTreeConfigs({\n pools,\n}: DetailedOperationSelector): ThunkAction<\n Promise<void>,\n RootState,\n unknown,\n OperationDetailActionType\n> {\n return async (dispatch) => {\n const treeNames = pools?.map((i) => i.tree);\n\n const resources = await ytApiV3Id.executeBatch(YTApiId.operationTreeConfigs, {\n requests: treeNames.map((item) => ({\n command: 'get',\n parameters: {\n path: `//sys/pool_trees/${item}/@config/main_resource`,\n ...USE_CACHE,\n },\n })),\n });\n\n const limits = await wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.operationTreeConfigs, {\n requests: treeNames.map((item) => ({\n command: 'get',\n parameters: {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${item}/pools/<Root>/resource_limits`,\n ...USE_CACHE,\n },\n })),\n }),\n {\n toasterName: 'operationTreeConfigs',\n skipSuccessToast: true,\n batchType: 'v3' as const,\n errorTitle: 'Failed to load tree limits',\n },\n );\n\n const configs = await wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.operationTreeConfigs, {\n requests: treeNames.map((item) => ({\n command: 'get',\n parameters: {path: `//sys/pool_trees/${item}/@config`, ...USE_CACHE},\n })),\n }),\n {\n toasterName: 'operationTreeConfigs',\n skipSuccessToast: true,\n batchType: 'v3' as const,\n errorTitle: 'Failed to load tree configs',\n },\n );\n\n dispatch({\n type: OPERATION_DETAIL_PARTIAL,\n data: {\n treeConfigs: configs.map((item, index) => {\n return {\n tree: treeNames[index],\n config: {\n ...item.output,\n resource_limits: limits[index].output,\n main_resource: resources[index].output || 'cpu',\n },\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 {\n value: 'withInterruptionInfo' as const,\n text: 'With interruption info',\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, {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 {YTErrorBlock} 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: PropTypes.object,\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 && <YTErrorBlock 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 from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {CypressNodeRaw} from '../../../../../shared/yt-types';\n\nimport ypath from '../../../../common/thor/ypath';\nimport format from '../../../../common/hammer/format';\nimport OperationIOLink, {\n OperationIOLinkProps,\n} from '../../../../pages/operations/OperationIOLink/OperationIOLink';\nimport {isTransactionAlive, isValidTransactionId} from '../../../../utils/operations/detail';\n\nimport './PathItem.scss';\n\nconst block = cn('yt-operations-list-path-item');\n\ntype PathItemProps = {\n caption: string;\n item: Omit<OperationIOLinkProps, 'path'> & {\n table: CypressNodeRaw<{transaction_id?: string}, string>;\n count: number;\n };\n user_transaction_id?: string;\n transaction_id?: string;\n};\n\nexport function PathItem({caption, item, transaction_id, user_transaction_id}: PathItemProps) {\n const {table, count, ...rest} = item;\n const [activeTransaction, setActiveTransaction] = React.useState<string | undefined>();\n\n React.useEffect(() => {\n const tableTx = ypath.getValue(table, '/@transaction_id');\n if (isValidTransactionId(tableTx)) {\n return setActiveTransaction(tableTx);\n }\n if (isValidTransactionId(transaction_id)) {\n return setActiveTransaction(transaction_id);\n }\n\n isTransactionAlive(user_transaction_id).then(() =>\n setActiveTransaction(user_transaction_id),\n );\n }, [table, user_transaction_id, transaction_id]);\n\n return (\n <div key={caption} className={block(null, 'elements-meta-item')}>\n <div className=\"elements-meta-item__key\">{format.ReadableField(caption)}</div>\n <div className=\"elements-meta-item__value\">\n <span className={block('item-io')}>\n <span className={block('item-count')}>{count}</span>\n {\n <OperationIOLink\n path={ypath.getValue(table)}\n {...rest}\n transaction={activeTransaction}\n theme={'ghost'}\n className={block('item-io-table')}\n />\n }\n </span>\n </div>\n </div>\n );\n}\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 ypath from '../../../../common/thor/ypath';\nimport unipika from '../../../../common/thor/unipika';\nimport OperationProgress from '../../../../pages/operations/OperationProgress/OperationProgress';\nimport {TemplatePools, TemplateWeight} from '../../../../components/MetaTable/MetaTable';\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 {OperationType} from '../../../../components/OperationType/OperationType';\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 {PathItem} from './PathItem';\n\nimport './OperationsListTable.scss';\n\nconst BLOCK_NAME = 'operations-list';\nconst block = cn(BLOCK_NAME);\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\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 <OperationType value={item.type} />;\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 const isRunning = ypath.getValue(item, '/@state') === 'running';\n const inputTx = isRunning\n ? ypath.getValue(item, '/@brief_spec/input_transaction_id')\n : undefined;\n const outputTx = isRunning\n ? ypath.getValue(item, '/@brief_spec/output_transaction_id')\n : undefined;\n const user_transaction_id = isRunning\n ? ypath.getValue(item, '/@brief_spec/user_transaction_id')\n : undefined;\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 <PathItem\n caption=\"in\"\n item={item.input}\n {...{user_transaction_id, transaction: inputTx}}\n />\n )}\n {item.output.count > 0 && (\n <PathItem\n caption=\"out\"\n item={item.output}\n {...{user_transaction_id, transaction: outputTx}}\n />\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 '.';\nimport {\n OperationPresetsSettings,\n OperationsListPreset,\n} from '../../../../shared/constants/settings-types';\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\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): Record<string, OperationsListPreset> => {\n const collectionKeys: Array<keyof OperationPresetsSettings> = filter_(\n Object.keys(data) as Array<keyof OperationPresetsSettings>,\n (path) => 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[path]};\n return collection;\n },\n {} as Record<string, OperationPresetsSettings>,\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';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\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, children} = this.props;\n\n return (\n <StickyContainer hideShadow keepWidth>\n {({stickyTop: sticky, stickyTopClassName}) => (\n <React.Fragment>\n <div\n className={block('toolbar', {sticky}, [tbBlock(), stickyTopClassName])}\n >\n {this.renderTopSection()}\n {this.renderBottomSection()}\n {fixedStartedByFilter && this.renderWarning_uiissue_2838()}\n <OperationsFilterPresets />\n </div>\n {children}\n </React.Fragment>\n )}\n </StickyContainer>\n );\n }\n}\n\nfunction OperationsListToolbarHooked({children}) {\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 {children}\n </OperationsListToolbar>\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 {YTErrorBlock} 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';\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 <YTErrorBlock 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 </OperationsListToolbar>\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 {\n RawSerieData,\n YTChartKitLazy,\n YagrWidgetData,\n getSerieColor,\n} from '../../components/YTChartKit';\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 <YTChartKitLazy 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 {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: PropTypes.object.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 {addI18Keysets} from '../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:alert-events', {en, ru});\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';\nimport i18n from './i18n';\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: i18n('columns.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: i18n('columns.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 {i18n('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 ? i18n('less') : i18n('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';\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: PropTypes.object.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, FC} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\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';\nimport ypath from '../../../../../../common/thor/ypath';\nimport {RuntimeItem, RuntimeProgress} from '../../../../../../store/reducers/operations/detail';\nimport {Flex, Icon, Tooltip} from '@gravity-ui/uikit';\nimport CircleQuestionIcon from '@gravity-ui/icons/svgs/circle-question.svg';\n\nconst headingBlock = cn('elements-heading');\nconst runtimeBlock = cn('runtime');\n\nexport type PoolItem = {\n tree: string;\n pool: string;\n};\n\nexport type Operation = {\n $value?: string;\n $attributes?: Record<string, any>;\n type?: string;\n user?: string;\n pool?: string;\n state?: string;\n title?: string;\n suspended?: boolean;\n duration?: number;\n startTime?: string;\n finishTime?: string;\n pools?: PoolItem[];\n};\n\ntype StarvingStatusProps = {\n progress: RuntimeProgress;\n};\n\nconst StarvingStatus: FC<StarvingStatusProps> = ({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\nconst mapDispatchToProps = {\n showEditPoolsWeightsModal,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport type Props = {\n isAbsoluteValue: boolean;\n runtime: RuntimeItem[];\n operation: Operation;\n cluster: string;\n treeConfigs?: {tree: string; config: Record<string, any>}[];\n} & ConnectedProps<typeof connector>;\n\nclass Runtime extends Component<Props> {\n handlePoolEditClick = () => {\n const {showEditPoolsWeightsModal, operation} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderTree({progress, name}: RuntimeItem) {\n const {cluster, operation, showEditPoolsWeightsModal, treeConfigs} = this.props;\n const {state} = operation;\n\n const {config} = treeConfigs?.find((item) => item.tree === name) || {};\n const main_resource = config?.main_resource || 'cpu';\n const total = config?.resource_limits?.[main_resource];\n const detailed_fair_share = progress?.detailed_fair_share?.total[main_resource];\n\n const fair_share =\n total !== undefined && detailed_fair_share !== undefined\n ? detailed_fair_share * total\n : undefined;\n\n const pool = {\n pool: progress.pool,\n tree: name,\n weight: progress.weight,\n };\n\n const isGang = ypath.getValue(operation, '/@full_spec/is_gang');\n\n return (\n <div className={runtimeBlock('tree')} key={name}>\n <Flex gap={2}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](name)}\n </div>\n </Flex>\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: 'fifo_index',\n label: (\n <Tooltip content=\"Operation's position in the pool's queue. Operations on lower positions will be scheduled sooner.\">\n <Flex alignItems=\"center\" gap={1}>\n FIFO index <Icon data={CircleQuestionIcon} size={16} />\n </Flex>\n </Tooltip>\n ),\n value: (\n <Template.FormattedValue\n value={progress.fifo_index}\n format=\"Number\"\n />\n ),\n },\n {\n key: 'fair_share',\n value: this.props.isAbsoluteValue\n ? hammer.format['Number'](fair_share, {\n digits: 6,\n digitsOnlyForFloat: true,\n }) + ` ${hammer.format.Readable(main_resource)}`\n : formatShare(progress.fair_share_ratio),\n },\n {\n key: 'usage',\n value: this.props.isAbsoluteValue\n ? hammer.format['Number'](\n progress?.resource_usage?.[main_resource],\n {digits: 6, digitsOnlyForFloat: true},\n ) + ` ${hammer.format.Readable(main_resource)}`\n : formatShare(progress.usage_ratio),\n },\n {\n key: 'demand',\n value: this.props.isAbsoluteValue\n ? hammer.format['Number'](\n progress?.resource_demand?.[main_resource],\n {digits: 6, digitsOnlyForFloat: true},\n ) + ` ${hammer.format.Readable(main_resource)}`\n : formatShare(progress.demand_ratio),\n },\n ],\n [\n {\n key: 'dominant_resource',\n value: hammer.format.Readable(progress.dominant_resource),\n },\n {\n key: 'Starvation status',\n value: <StarvingStatus progress={progress} />,\n },\n {\n key: 'scheduling_status',\n value: hammer.format.Readable(progress.scheduling_status),\n },\n {\n key: 'gang',\n label: (\n <Tooltip content=\"Indicates whether operation's jobs perform a single collective computation and must be scheduled simultaneously.\">\n <Flex alignItems=\"center\" gap={1}>\n Gang <Icon data={CircleQuestionIcon} size={16} />\n </Flex>\n </Tooltip>\n ),\n value: isGang ? 'True' : 'False',\n },\n ...(isGang\n ? [\n {\n key: 'scheduling_segment',\n value: hammer.format.Readable(\n progress.scheduling_segment,\n ),\n },\n ]\n : []),\n {\n key: 'partitions',\n value:\n progress.partitions?.completed +\n ' / ' +\n progress.partitions?.total,\n visible: Boolean(progress.partitions),\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 connector(Runtime);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport {docsUrl} from '../../../../../../config';\nimport MetaTable, {\n MetaTableItem,\n MetaTableProps,\n} from '../../../../../../components/MetaTable/MetaTable';\nimport Link from '../../../../../../components/Link/Link';\nimport Icon from '../../../../../../components/Icon/Icon';\n\nimport './JobCounters.scss';\n\nconst block = cn('yt-job-counters');\n\nexport function JobCounters({\n data,\n helpUrl,\n allowHideEmpty,\n}: {\n data: Record<string, Array<MetaTableItem>>;\n helpUrl: string;\n allowHideEmpty?: boolean;\n}) {\n const [hideEmpty, setHideEmpty] = React.useState(true);\n\n return (\n <div className={block()}>\n {allowHideEmpty && (\n <div className={block('filters')}>\n <Checkbox checked={hideEmpty} onUpdate={setHideEmpty}>\n Hide empty\n </Checkbox>\n </div>\n )}\n {Object.keys(data).map((key) => {\n const items = data[key];\n return (\n <JobCoutnersSection\n key={key}\n name={key}\n items={allowHideEmpty ? filterValues(hideEmpty, items) : items}\n />\n );\n })}\n {docsUrl(\n <div className=\"elements-section\">\n <Link url={helpUrl}>\n <Icon awesome=\"book\" /> Help\n </Link>\n </div>,\n )}\n </div>\n );\n}\n\nfunction filterValues(hideEmpty: boolean, items: Array<MetaTableItem>) {\n if (!hideEmpty) {\n return items;\n }\n\n return items.filter(({value}) => Boolean(value));\n}\n\nfunction JobCoutnersSection({name, items}: {name: string; items: MetaTableProps['items']}) {\n return (\n <div className=\"elements-section\">\n <div className=\"elements-heading elements-heading_size_s\">{name}</div>\n\n {items.length ? <MetaTable items={items} /> : 'No items'}\n </div>\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 Modal from '../../../../../../components/Modal/Modal';\nimport Link from '../../../../../../components/Link/Link';\n\nimport withVisible from '../../../../../../hocs/withVisible';\nimport hammer from '../../../../../../common/hammer';\n\nimport UIFactory from '../../../../../../UIFactory';\nimport {JobCounters} from './JobCounters';\n\nconst block = cn('operation-jobs-detailed');\n\nclass DetailedJobsCounter extends Component {\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 <JobCounters\n helpUrl={helpUrl}\n data={{Scheduled: scheduledItems, 'Non scheduled': nonScheduledItems}}\n allowHideEmpty\n />\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 <JobCounters\n helpUrl={helpUrl}\n data={{\n 'Non interrupted': nonInterruptedItems,\n Interrupted: nonScheduledItems,\n }}\n />\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 collapsed?: boolean;\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, collapsed} = this.props;\n return !jobs?.items?.length ? null : (\n <CollapsibleSection\n name=\"Tasks\"\n className={className}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n collapsed={collapsed}\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 {ConnectedProps, 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 {YTErrorBlock} from '../../../../../../components/Error/Error';\nimport Icon from '../../../../../../components/Icon/Icon';\nimport {Flex, Switch} from '@gravity-ui/uikit';\n\nimport {RootState} from '../../../../../../store/reducers';\nimport {showEditPoolsWeightsModal} from '../../../../../../store/actions/operations';\nimport {getCluster} from '../../../../../../store/selectors/global';\nimport {\n getOperationAlertEvents,\n getOperationDetailsLoadingStatus,\n selectIsOperationInGpuTree,\n} from '../../../../../../store/selectors/operations/operation';\n\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\n\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../../constants/global';\n\nimport DataFlow, {intermediateResourcesProps, resourcesProps} from '../DataFlow/DataFlow';\nimport Specification, {specificationProps} from '../Specification/Specification';\nimport Runtime from '../Runtime/Runtime';\nimport Events, {eventsProps} from '../Events/Events';\nimport Tasks from '../Tasks/Tasks';\n\nimport './Details.scss';\n\nconst block = cn('operation-details');\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nclass Details extends Component<ReduxProps> {\n static propTypes = {\n error: PropTypes.object,\n specification: specificationProps.isRequired,\n operation: PropTypes.object.isRequired,\n treeConfigs: PropTypes.array,\n cluster: PropTypes.string.isRequired,\n result: PropTypes.shape({\n error: PropTypes.object.isRequired,\n }),\n runtime: PropTypes.object,\n events: eventsProps,\n resources: resourcesProps,\n intermediateResources: intermediateResourcesProps,\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n };\n\n state = {\n isAbsoluteValue: true,\n };\n\n handleSwitchChange = (checked: boolean) => {\n this.setState({isAbsoluteValue: checked});\n };\n\n handleEditClick = () => {\n const {operation, showEditPoolsWeightsModal} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderDescription() {\n const {collapsibleSize} = this.props;\n const {description} = 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, isVanillaGpuOperation} = this.props;\n return !alertEvents?.length ? null : (\n <CollapsibleSection\n name=\"Alerts\"\n size={collapsibleSize}\n marginDirection=\"bottom\"\n collapsed={isVanillaGpuOperation}\n >\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 <YTErrorBlock {...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, treeConfigs} = this.props;\n\n return (\n runtime !== undefined &&\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 <Flex className={block('runtime-switch')} gap={2}>\n Show abs. resources{' '}\n <Switch\n checked={this.state.isAbsoluteValue}\n onUpdate={this.handleSwitchChange}\n ></Switch>\n </Flex>\n <Runtime\n isAbsoluteValue={this.state.isAbsoluteValue}\n runtime={runtime}\n treeConfigs={treeConfigs}\n operation={operation}\n cluster={cluster}\n />\n </CollapsibleSection>\n )\n );\n }\n\n renderJobs() {\n const {collapsibleSize, isVanillaGpuOperation} = this.props;\n return (\n <Tasks\n className={block('jobs')}\n collapsibleSize={collapsibleSize}\n collapsed={isVanillaGpuOperation}\n />\n );\n }\n\n renderResources() {\n const {resources, intermediateResources, operation, collapsibleSize} = this.props;\n\n return (\n resources &&\n operation.type !== 'vanilla' && (\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 const {isVanillaGpuOperation} = this.props;\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 {isVanillaGpuOperation ? (\n <React.Fragment>\n {this.renderError()}\n {this.renderRuntime()}\n {this.renderResources()}\n {this.renderEvents()}\n {this.renderAlerts()}\n {this.renderJobs()}\n </React.Fragment>\n ) : (\n <React.Fragment>\n {this.renderAlerts()}\n {this.renderError()}\n {this.renderRuntime()}\n {this.renderJobs()}\n {this.renderResources()}\n {this.renderEvents()}\n </React.Fragment>\n )}\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n return {\n cluster: getCluster(state),\n operation,\n treeConfigs: state.operations.detail.treeConfigs,\n ...state.operations.detail.details,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n alertEvents: getOperationAlertEvents(state),\n isVanillaGpuOperation: operation.type === 'vanilla' && selectIsOperationInGpuTree(state),\n };\n};\n\nconst mapDispatchToProps = {\n showEditPoolsWeightsModal,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst DetailsConnected = connector(Details) as unknown as React.ComponentType<{}>;\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';\nimport PropTypes from 'prop-types';\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 {\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: PropTypes.object.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 {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: PropTypes.object.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';\nimport {Flex} from '@gravity-ui/uikit';\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';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\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 ? (\n <Tooltip\n placement={['right', 'left']}\n content={\n <Flex gap={1}>\n <span> {asNumber}</span>\n {!isNaN(value!) && (\n <ClipboardButton text={`${value}`} inlineMargins view=\"flat-outlined\" />\n )}\n </Flex>\n }\n >\n {asStr}\n </Tooltip>\n ) : (\n asNumber\n );\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 = 'avg'} = 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 getJobsOperationIncarnationsFilter = (state: RootState) =>\n state.operations.jobsOperationIncarnations.filter;\nexport const getJobsOperationIncarnationsValues = (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 {getJobsOperationIncarnationsFilter} 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 incarnation = getJobsOperationIncarnationsFilter(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: incarnation || 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_interruption_info: getValueIfNotDefault(filters, 'withInterruptionInfo'),\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\" wrap>\n <span>{hammer.format['Number'](rowCount)}</span>\n <span>({hammer.format['Bytes'](dataSize)})</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 {YTErrorBlock} 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 <YTErrorBlock {...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 onOutsideClick={hideInputPaths}\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 {getMetrics} 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 getMetrics().countEvent('operation_detail_running-jobs_action', name);\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';\nimport cn from 'bem-cn-lite';\n\nimport {updateJobsOperationIncarnationFilter} from '../../../../../../store/actions/operations/jobs-operation-incarnations';\nimport OperationSelectFilter from '../../../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\nimport {\n getJobsOperationIncarnationsFilter,\n getJobsOperationIncarnationsValues,\n} from '../../../../../../store/selectors/operations/jobs';\n\nimport './JobsOperationsIncarnationsFilter.scss';\n\nconst block = cn('yt-jobs-incarnation-filter');\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(getJobsOperationIncarnationsFilter);\n const values = useSelector(getJobsOperationIncarnationsValues);\n\n return !values?.length\n ? null\n : wrap(\n <OperationSelectFilter\n name=\"incarnation\"\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 popupClassName={block('popup')}\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 {YTErrorBlock} 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 <YTErrorBlock 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 {YTErrorBlock} 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 && <YTErrorBlock 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 {RootState} from '../../reducers';\nimport {createSelector} from 'reselect';\nimport {JobsTimelineState} from '../../reducers/operations/jobs/jobs-timeline-slice';\n\nexport const selectJobs = (state: RootState) => state.operations.jobsTimeline.jobs;\nexport const selectLoading = (state: RootState) => state.operations.jobsTimeline.isLoading;\nexport const selectInterval = (state: RootState) => state.operations.jobsTimeline.interval;\nexport const selectFilter = (state: RootState) => state.operations.jobsTimeline.filter;\nexport const selectActiveJob = (state: RootState) => state.operations.jobsTimeline.selectedJob;\nexport const selectJobsOverloadError = (state: RootState) =>\n state.operations.jobsTimeline.jobsCountError;\nexport const selectError = (state: RootState) => state.operations.jobsTimeline.error;\n\nexport const selectEventsInterval = (state: RootState) => {\n const interval = state.operations.jobsTimeline.eventsInterval;\n return isFinite(interval.from) ? interval : undefined;\n};\n\nexport const selectJobsEmptyError = createSelector(\n [selectJobs, selectLoading],\n (jobs, isLoading) => {\n return jobs.length === 0 && !isLoading;\n },\n);\n\nexport const selectJobsInIntervalByGroup = createSelector([selectJobs], (jobs) => {\n return jobs.reduce<Record<string, JobsTimelineState['jobs']>>((acc, job) => {\n if (job.groupName in acc) {\n acc[job.groupName].push(job);\n } else {\n acc[job.groupName] = [job];\n }\n\n return acc;\n }, {});\n});\n\nexport const selectJobGroupsCount = createSelector([selectJobs], (jobs) => {\n return jobs.reduce<Record<string, number>>((acc, job) => {\n if (job.groupName in acc) {\n acc[job.groupName]++;\n } else {\n acc[job.groupName] = 1;\n }\n return acc;\n }, {});\n});\n\nexport const getSelectedJob = createSelector([selectJobs, selectActiveJob], (jobs, activeJob) => {\n return jobs.find(({id}) => activeJob.id === id) || null;\n});\n\nexport const selectIntervalsIsSame = createSelector(\n [selectInterval, selectEventsInterval],\n (interval, eInterval) => {\n if (interval && eInterval) {\n if (interval.from === eInterval.from && interval.to === eInterval.to) return true;\n }\n\n return !interval && !eInterval;\n },\n);\n","import {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getBatchError} from '../../../utils/utils';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\nimport {Action} from 'redux';\nimport {getOperationId} from '../../selectors/operations/operation';\nimport {RawJob} from '../../../types/operations/job';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {\n JobsTimelineState,\n TimelineJob,\n setError,\n setInterval,\n setJobs,\n setJobsCountError,\n setLoading,\n} from '../../reducers/operations/jobs/jobs-timeline-slice';\nimport dayjs from 'dayjs';\nimport {\n selectEventsInterval,\n selectIntervalsIsSame,\n} from '../../selectors/operations/jobs-timeline';\nimport {MAX_JOBS_COUNT} from '../../../pages/operations/OperationDetail/tabs/JobsTimeline/constants';\n\nconst cancelHelper = new CancelHelper();\n\ntype AsyncAction = ThunkAction<void, RootState, undefined, Action>;\n\nexport const resetInterval = (): AsyncAction => (dispatch, getState) => {\n const interval = selectEventsInterval(getState());\n if (!interval) return;\n\n dispatch(setInterval(interval));\n};\n\ntype OperationJob = RawJob & {\n id: string;\n allocation_id?: string;\n job_cookie: number;\n task_name: string;\n};\n\nexport const getJobsWithEvents =\n (firstRequest?: boolean): AsyncAction =>\n async (dispatch, getState) => {\n const state = getState();\n const operationId = getOperationId(state);\n const sameIntervals = selectIntervalsIsSame(state);\n\n if (firstRequest) {\n dispatch(setLoading(true));\n }\n try {\n dispatch(setError(undefined));\n const listResponse = await ytApiV3Id.listJobs(YTApiId.operationGetJobs, {\n operation_id: operationId,\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const jobs = listResponse.jobs as OperationJob[];\n if (jobs.length > MAX_JOBS_COUNT) {\n dispatch(setJobsCountError(true));\n return;\n }\n\n const requests = jobs.map(({id}) => {\n return {\n command: 'get_job' as const,\n parameters: {\n operation_id: operationId,\n job_id: id,\n },\n };\n });\n\n const response = await ytApiV3Id.executeBatch<OperationJob>(YTApiId.operationGetJobs, {\n parameters: {requests},\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const error = getBatchError(response, 'Get operation jobs error');\n if (error) {\n throw error;\n }\n\n const result = response.reduce<Pick<JobsTimelineState, 'jobs' | 'eventsInterval'>>(\n (acc, {output: job}) => {\n if (!job?.events || !job.events.length) return acc;\n\n const jobEvents = job.events;\n const isRunning = job.state === 'running';\n\n // stretch running job timeline\n const maxTime = isRunning\n ? Date.now()\n : dayjs(jobEvents.at(-1)!.time).valueOf();\n const minTime = dayjs(jobEvents[0].time).valueOf();\n const percent = (maxTime - minTime) / 100;\n\n const timeLineJob: TimelineJob = {\n id: job.job_id,\n cookieId: job.job_cookie,\n allocationId: job.allocation_id,\n groupName: job.task_name || '',\n events: [],\n start_time: job.start_time,\n finish_time: job.finish_time,\n address: job.address,\n };\n\n const eventsCount = jobEvents.length;\n let stateIndex = 0;\n for (let i = 0; i < eventsCount; i++) {\n const event = jobEvents[i];\n\n const startTime = dayjs(event.time).valueOf();\n const prevEvent = timeLineJob['events'][stateIndex];\n if (event.state) {\n timeLineJob['events'].push({\n state: event.state,\n startTime,\n endTime: 0,\n phases: [],\n percent: 0,\n });\n stateIndex = timeLineJob['events'].length - 1;\n } else {\n timeLineJob['events'][stateIndex].phases.push({\n phase: event.phase!,\n startTime,\n });\n }\n\n if (prevEvent) {\n prevEvent.endTime = startTime;\n prevEvent.percent = (startTime - prevEvent.startTime) / percent;\n }\n }\n\n // stretch running job timeline\n if (isRunning) {\n const lastEventIndex = timeLineJob.events.length - 1;\n const {startTime} = timeLineJob.events[lastEventIndex];\n timeLineJob.events[lastEventIndex].endTime = Date.now();\n timeLineJob.events[lastEventIndex].percent =\n (Date.now() - startTime) / percent;\n }\n\n acc.jobs.push(timeLineJob);\n\n // job duration\n acc.eventsInterval = {\n from: Math.min(acc.eventsInterval.from, minTime),\n to: Math.max(acc.eventsInterval.to, maxTime),\n };\n\n return acc;\n },\n {\n jobs: [],\n eventsInterval: {\n from: Infinity,\n to: 0,\n },\n },\n );\n\n dispatch(setJobs(result));\n if (firstRequest || sameIntervals) {\n dispatch(setInterval(result.eventsInterval));\n }\n } catch (e) {\n const error = e as Error;\n\n if (isCancelled(error)) {\n return;\n }\n\n dispatch(setError(error));\n } finally {\n if (firstRequest) {\n dispatch(setLoading(false));\n }\n }\n };\n","export const ROW_HEIGHT = 30;\nexport const TIMELINE_HEIGHT = 12;\nexport const TIMELINE_SELECT_BORDER_WIDTH = 2;\nexport const OFFSET = (ROW_HEIGHT - TIMELINE_HEIGHT) / 2;\nexport const MAX_JOBS_COUNT = 10000;\n","const SvgChevronsExpandToLines = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1.5 2.75a.75.75 0 0 0-1.5 0v10.5a.75.75 0 0 0 1.5 0zm14.5 0a.75.75 0 0 0-1.5 0v10.5a.75.75 0 0 0 1.5 0zM6.53 4.97a.75.75 0 0 1 0 1.06L4.56 8l1.97 1.97a.75.75 0 1 1-1.06 1.06l-2.5-2.5a.75.75 0 0 1 0-1.06l2.5-2.5a.75.75 0 0 1 1.06 0m2.94 1.06a.75.75 0 0 1 1.06-1.06l2.5 2.5a.75.75 0 0 1 0 1.06l-2.5 2.5a.75.75 0 1 1-1.06-1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsExpandToLines;","import React, {FC} from 'react';\nimport {Button, Flex, Icon, TextInput} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport './TimeLineHeader.scss';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n selectFilter,\n selectInterval,\n} from '../../../../../store/selectors/operations/jobs-timeline';\nimport {\n setFilter,\n setInterval,\n} from '../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {dateTimeParse} from '@gravity-ui/date-utils';\nimport {RangeDateSelection} from '@gravity-ui/date-components';\nimport {DateTime} from '@gravity-ui/date-utils/build/typings/dateTime';\nimport ChevronsExpandToLinesIcon from '@gravity-ui/icons/svgs/chevrons-expand-to-lines.svg';\nimport {resetInterval} from '../../../../../store/actions/operations/jobs-timeline';\n\nconst block = cn('yt-timeline-header');\n\ntype Props = {\n className?: string;\n};\n\nexport const TimeLineHeader: FC<Props> = ({className}) => {\n const dispatch = useDispatch();\n const filter = useSelector(selectFilter);\n const interval = useSelector(selectInterval);\n\n const handleFilterChange = (val: string) => {\n dispatch(setFilter(val));\n };\n\n const handleOnUpdate = ({start, end}: {start: DateTime; end: DateTime}) => {\n dispatch(setInterval({from: start.valueOf(), to: end.valueOf()}));\n };\n\n const handleResetInterval = () => {\n dispatch(resetInterval());\n };\n\n if (!interval) return null;\n\n return (\n <div className={block(null, className)}>\n <TextInput\n defaultValue={filter}\n placeholder=\"Search by job ID\"\n onUpdate={handleFilterChange}\n hasClear\n />\n <Flex>\n <Button\n view=\"outlined\"\n pin=\"brick-brick\"\n onClick={handleResetInterval}\n title=\"Reset interval\"\n >\n <Icon data={ChevronsExpandToLinesIcon} size={16} />\n </Button>\n <RangeDateSelection\n className={block('range-selector')}\n value={{\n start: dateTimeParse(interval.from)!,\n end: dateTimeParse(interval.to)!,\n }}\n displayNow\n hasScaleButtons\n onUpdate={handleOnUpdate}\n />\n </Flex>\n </div>\n );\n};\n","export const getPhaseColor = (state: string, phase?: string) => {\n if (!phase) return state;\n\n return state.toLowerCase() === 'running' && phase.toLowerCase() !== 'running'\n ? 'running-prev'\n : state;\n};\n","import React, {FC, ReactNode, useMemo} from 'react';\nimport {JobEvent} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {Table} from '@gravity-ui/uikit';\nimport '../mixin/stateMixin.scss';\nimport './EventsTable.scss';\nimport cn from 'bem-cn-lite';\nimport hammer from '../../../../../../common/hammer';\nimport {getPhaseColor} from '../helpers/getPhaseColor';\n\nconst block = cn('yt-events-table');\n\nconst PhaseNameCell: FC<{state: string; phase: string}> = ({state, phase}) => {\n return (\n <div className={block('row', {state: getPhaseColor(state, phase)})}>\n {hammer.format['ReadableField'](state)}: {hammer.format['ReadableField'](phase)}\n </div>\n );\n};\n\nconst getDateTime = (timestamp: number) =>\n hammer.format['DateTime'](new Date(timestamp).toString());\n\ntype Props = {\n events: JobEvent[];\n};\n\nexport const EventsTable: FC<Props> = ({events}) => {\n const data = useMemo(() => {\n return events.reduce<{phase: ReactNode; duration: string; startTime: string}[]>(\n (acc, event) => {\n acc.push({\n phase: <PhaseNameCell state={event.state} phase=\"—\" />,\n duration: hammer.format['TimeDuration'](event.endTime - event.startTime, {\n format: 'milliseconds',\n }),\n startTime: getDateTime(event.startTime),\n });\n\n let prevTime = event.startTime;\n event.phases.forEach((eventPhase) => {\n acc.push({\n phase: <PhaseNameCell state={event.state} phase={eventPhase.phase} />,\n duration: hammer.format['TimeDuration'](eventPhase.startTime - prevTime, {\n format: 'milliseconds',\n }),\n startTime: getDateTime(eventPhase.startTime),\n });\n prevTime = eventPhase.startTime;\n });\n return acc;\n },\n [],\n );\n }, [events]);\n\n return (\n <Table\n className={block()}\n width=\"max\"\n columns={[\n {id: 'phase', name: 'State: Phase'},\n {id: 'duration', name: 'Duration'},\n {id: 'startTime', name: 'Start time'},\n ]}\n data={data}\n />\n );\n};\n","import React, {FC} from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport {JobLineEvent} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport cn from 'bem-cn-lite';\nimport './MetaData.scss';\nimport ClipboardButton from '../../../../../../components/ClipboardButton/ClipboardButton';\nimport hammer from '../../../../../../common/hammer';\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport relativeTime from 'dayjs/plugin/relativeTime';\n\ndayjs.extend(relativeTime);\ndayjs.extend(duration);\n\nconst block = cn('yt-event-timeline-meta');\n\ntype Props = {\n meta: JobLineEvent['meta'];\n showCopyButton?: boolean;\n className?: string;\n};\n\nexport const MetaData: FC<Props> = ({meta, showCopyButton, className}) => {\n let duration;\n if (meta.endTime && meta.startTime) {\n const start = dayjs(meta.startTime);\n const end = dayjs(meta.endTime);\n const diff = end.diff(start);\n duration = dayjs.duration(diff);\n }\n\n return (\n <div className={block(null, className)}>\n {meta.allocationId && (\n <>\n <Text color=\"secondary\">AllocationId:</Text> <span>{meta.allocationId}</span>\n </>\n )}\n <Text color=\"secondary\">Address:</Text>{' '}\n <span>\n {hammer.format['Address'](meta.address)} \n {showCopyButton && (\n <ClipboardButton view=\"flat-secondary\" text={meta.address} size=\"s\" />\n )}\n </span>\n <Text color=\"secondary\">Start:</Text>{' '}\n <span>{hammer.format['DateTime'](meta.startTime)}</span>\n <Text color=\"secondary\">End:</Text>{' '}\n <span>{meta.endTime ? hammer.format['DateTime'](meta.endTime) : '—'}</span>\n {duration && (\n <>\n <Text color=\"secondary\">Duration:</Text>{' '}\n <span>{hammer.format['TimeDuration'](duration.asMilliseconds())}</span>\n </>\n )}\n </div>\n );\n};\n","import React, {FC, useCallback, useEffect, useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport {\n getSelectedJob,\n selectActiveJob,\n} from '../../../../../../store/selectors/operations/jobs-timeline';\nimport {Button, Flex, Icon, Text} from '@gravity-ui/uikit';\nimport Link from '../../../../../../components/Link/Link';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport cn from 'bem-cn-lite';\nimport {EventsTable} from './EventsTable';\nimport {getCluster} from '../../../../../../store/selectors/global';\nimport {getOperationId} from '../../../../../../store/selectors/operations/operation';\nimport './EventsSidePanel.scss';\nimport {MetaData} from '../EventsTimeline/MetaData';\n\nconst block = cn('yt-events-side-panel');\n\ntype Props = {\n onClose: () => void;\n onOutsideClick?: (e: MouseEvent) => void;\n};\n\nexport const EventsSidePanel: FC<Props> = ({onClose, onOutsideClick}) => {\n const {id} = useSelector(selectActiveJob);\n const job = useSelector(getSelectedJob);\n const cluster = useSelector(getCluster);\n const operationId = useSelector(getOperationId);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const handleDocumentClick = useCallback(\n (e: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n onOutsideClick?.(e);\n }\n },\n [onOutsideClick],\n );\n\n useEffect(() => {\n document.addEventListener('click', handleDocumentClick);\n\n return () => {\n document.removeEventListener('click', handleDocumentClick);\n };\n }, [handleDocumentClick]);\n\n if (!id || !job) return null;\n\n return (\n <div ref={panelRef} className={block()}>\n <Flex alignItems=\"center\" justifyContent=\"space-between\">\n <Flex alignItems=\"center\" justifyContent=\"center\" gap={1}>\n <Text variant=\"subheader-3\">\n Job id:{' '}\n <Link\n theme=\"primary\"\n url={`/${cluster}/job/${operationId}/${id}`}\n target=\"_blank\"\n >\n {id}\n </Link>\n </Text>\n </Flex>\n <Button view=\"flat\" onClick={onClose}>\n <Icon data={XmarkIcon} size={16} />\n </Button>\n </Flex>\n <MetaData\n className={block('meta')}\n meta={{\n startTime: job.start_time,\n endTime: job.finish_time,\n address: job.address,\n allocationId: job.allocationId,\n }}\n showCopyButton\n />\n <div className={block('separator')} />\n <EventsTable events={job.events} />\n </div>\n );\n};\n","import {getCssColor} from '../../../utils/get-css-color';\n\nexport const getColorByState = (state: string) => {\n switch (state) {\n case 'waiting': {\n return getCssColor('--default-color');\n }\n case 'running': {\n return getCssColor('--info-color');\n }\n case 'aborting': {\n return getCssColor('--g-color-base-misc-heavy');\n }\n case 'aborted': {\n return getCssColor('--g-color-base-misc-heavy');\n }\n case 'completed': {\n return getCssColor('--success-color');\n }\n case 'failed': {\n return getCssColor('--danger-color');\n }\n case 'lost': {\n return getCssColor('--warning-color');\n }\n default: {\n return getCssColor('--g-progress-filled-background-color');\n }\n }\n};\n","export enum EventDisplayMode {\n Selected = 'selected',\n SelectedFound = 'selectedFound',\n Found = 'found',\n Transparent = 'transparent',\n Default = 'default',\n}\n","import {EventDisplayMode} from '../../../../../../components/TimelineBlock/enums';\n\nexport const getTimeLineDisplayMode = ({\n jobId,\n timeLineId,\n filter = '',\n selectedJob = [],\n}: {\n jobId: string;\n timeLineId: string;\n filter?: string;\n selectedJob?: string[];\n}): EventDisplayMode => {\n const hasFilter = Boolean(filter);\n const hasSelectedJobs = selectedJob && Boolean(selectedJob[0]);\n const matchesFilter = hasFilter && jobId.includes(filter);\n const isSelected = selectedJob[0] === timeLineId;\n\n if (matchesFilter && isSelected) {\n return EventDisplayMode.SelectedFound;\n }\n\n if (matchesFilter) {\n return EventDisplayMode.Found;\n }\n\n if (isSelected) {\n return EventDisplayMode.Selected;\n }\n\n if (hasFilter || hasSelectedJobs) {\n return EventDisplayMode.Transparent;\n }\n\n return EventDisplayMode.Default;\n};\n","/**\n * Converts color to RGBA format with specified opacity\n * @param colorString - color string (formats: #RGB, #RRGGBB, rgb(R,G,B), rgba(R,G,B,A))\n * @param opacity - transparency (0-1)\n * @returns string in rgba(R, G, B, A) format\n */\nexport const convertToRGBA = (colorString: string, opacity: number): string => {\n // Validate and normalize input data\n if (opacity < 0 || opacity > 1) {\n throw new Error('Opacity must be between 0 and 1');\n }\n\n let r = 0,\n g = 0,\n b = 0;\n let a = opacity;\n\n // Remove all whitespace and convert to lowercase\n const normalizedColor = colorString.replace(/\\s+/g, '').toLowerCase();\n\n // Handle HEX format (#RGB or #RRGGBB)\n if (normalizedColor.startsWith('#')) {\n const hex = normalizedColor.substring(1);\n\n if (hex.length === 3) {\n // #RGB → #RRGGBB\n r = parseInt(hex[0] + hex[0], 16);\n g = parseInt(hex[1] + hex[1], 16);\n b = parseInt(hex[2] + hex[2], 16);\n } else if (hex.length === 6) {\n // #RRGGBB\n r = parseInt(hex.substring(0, 2), 16);\n g = parseInt(hex.substring(2, 4), 16);\n b = parseInt(hex.substring(4, 6), 16);\n } else {\n throw new Error('Invalid HEX color format');\n }\n }\n // Handle RGB/RGBA format\n else if (normalizedColor.startsWith('rgb(') || normalizedColor.startsWith('rgba(')) {\n const colorValues = normalizedColor.match(/rgba?\\((\\d+),(\\d+),(\\d+)(?:,([\\d.]+))?\\)/i);\n\n if (!colorValues) {\n throw new Error('Invalid RGB/RGBA color format');\n }\n\n r = parseInt(colorValues[1], 10);\n g = parseInt(colorValues[2], 10);\n b = parseInt(colorValues[3], 10);\n\n // If original color has transparency, multiply with new opacity\n if (colorValues[4]) {\n a = parseFloat(colorValues[4]) * opacity;\n }\n } else {\n throw new Error('Unsupported color format');\n }\n\n // Validate color values\n if ([r, g, b].some((v) => v < 0 || v > 255)) {\n throw new Error('Invalid color values (must be 0-255)');\n }\n\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\n","import {\n AbstractEventRenderer,\n Hitbox,\n} from '../../../packages/ya-timeline/components/Events/AbstractEventRenderer';\nimport {TimelineEvent, yaTimelineConfig} from '../../../packages/ya-timeline';\nimport {EventDisplayMode} from '../enums';\nimport {convertToRGBA} from '../helpers/convertToRGBA';\nimport {getCssColor} from '../../../utils/get-css-color';\n\nexport type JobPhase = {\n phase: string;\n startTime: number;\n};\n\nexport type JobEvent = {\n percentage: number;\n color: string;\n state: string;\n interval: {\n from: number;\n to: number;\n };\n phases: JobPhase[];\n};\n\nexport type JobLineEvent = TimelineEvent & {\n jobId: string;\n parts: JobEvent[];\n meta: {\n allocationId?: string;\n startTime: string;\n endTime?: string;\n address: string;\n };\n displayMode: EventDisplayMode;\n};\n\nconst MIN_LINE_WIDTH = 8;\nconst DEFAULT_COLOR = '#333';\n\nexport class JobLineRenderer extends AbstractEventRenderer {\n render(\n ctx: CanvasRenderingContext2D,\n event: JobLineEvent,\n isSelected: boolean,\n rawX0: number,\n rawX1: number,\n y: number,\n _: number,\n timeToPosition: (t: number) => number,\n ) {\n const {displayMode, parts} = event;\n const y0 = y - yaTimelineConfig.LINE_HEIGHT / 2;\n const {x1, x0} = this.getFixedXCoordinates(rawX0, rawX1);\n const isTransparent = displayMode === EventDisplayMode.Transparent;\n\n const percent = (x1 - x0) / 100;\n\n if (displayMode === EventDisplayMode.Found) {\n this.renderFilterBackground(ctx, x0, x1, y0);\n }\n\n let startX = x0;\n parts.forEach(({color, percentage, state, phases, interval}) => {\n const width = percentage * percent;\n\n if (state.toLowerCase() === 'running') {\n const phaseCount = phases.length;\n for (let i = 0; i < phaseCount; i++) {\n const startPosition = timeToPosition(phases[i].startTime);\n const endPosition =\n i === phaseCount - 1\n ? timeToPosition(interval.to)\n : timeToPosition(phases[i + 1].startTime);\n const isRunningPhase = phases[i].phase?.toLowerCase() === 'running';\n const lineColor = isRunningPhase ? color : getCssColor('--purple-color');\n\n ctx.beginPath();\n ctx.fillStyle = convertToRGBA(\n lineColor || DEFAULT_COLOR,\n isTransparent ? 0.4 : 0.7,\n );\n ctx.rect(\n startPosition,\n y0,\n endPosition - startPosition,\n yaTimelineConfig.LINE_HEIGHT,\n );\n ctx.fill();\n }\n } else {\n ctx.beginPath();\n ctx.fillStyle = convertToRGBA(color || DEFAULT_COLOR, isTransparent ? 0.4 : 0.7);\n ctx.rect(startX, y0, width, yaTimelineConfig.LINE_HEIGHT);\n ctx.fill();\n }\n startX += width;\n });\n\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x0 + 8, y0 + yaTimelineConfig.LINE_HEIGHT / 2);\n ctx.lineTo(x0, y0 + yaTimelineConfig.LINE_HEIGHT);\n ctx.closePath();\n ctx.fillStyle = 'rgba(0, 0, 0, 0.25)';\n ctx.fill();\n\n ctx.beginPath();\n ctx.moveTo(x1, y0);\n ctx.lineTo(x1 - 8, y0 + yaTimelineConfig.LINE_HEIGHT / 2);\n ctx.lineTo(x1, y0 + yaTimelineConfig.LINE_HEIGHT);\n ctx.closePath();\n ctx.fillStyle = 'rgba(0, 0, 0, 0.25)';\n ctx.fill();\n\n if (isSelected) {\n this.renderSelectedBorder(ctx, x0, x1, y0, displayMode);\n }\n }\n\n renderFilterBackground(ctx: CanvasRenderingContext2D, x0: number, x1: number, y: number) {\n const borderThickness = yaTimelineConfig.SELECTION_OUTLINE_THICKNESS;\n\n ctx.beginPath();\n ctx.rect(\n x0 - borderThickness,\n y - borderThickness,\n x1 - x0 + borderThickness * 2,\n yaTimelineConfig.LINE_HEIGHT + borderThickness * 2,\n );\n ctx.fillStyle = 'rgba(255, 219, 77)';\n ctx.fill();\n }\n\n renderSelectedBorder(\n ctx: CanvasRenderingContext2D,\n x0: number,\n x1: number,\n y: number,\n displayMode: EventDisplayMode,\n ) {\n const borderThickness = yaTimelineConfig.SELECTION_OUTLINE_THICKNESS;\n const borderColor = yaTimelineConfig.resolveCssValue(\n yaTimelineConfig.SELECTION_OUTLINE_COLOR,\n );\n const backgroundColor = yaTimelineConfig.resolveCssValue(\n yaTimelineConfig.PRIMARY_BACKGROUND_COLOR,\n );\n\n const borderX0 = x0 + borderThickness / 2;\n const borderWidth = x1 - x0 - borderThickness;\n const borderY0 = y - borderThickness;\n const borderHeight = yaTimelineConfig.LINE_HEIGHT + borderThickness * 2;\n\n ctx.beginPath();\n ctx.rect(borderX0, borderY0, borderWidth, borderHeight);\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderThickness;\n ctx.stroke();\n\n const innerBorderOffset = 1;\n const innerBorderX0 = borderX0 + innerBorderOffset;\n const innerBorderY0 = y - innerBorderOffset;\n const innerBorderWidth = borderWidth - 2 * innerBorderOffset;\n const innerBorderHeight = yaTimelineConfig.LINE_HEIGHT + 2 * innerBorderOffset;\n\n ctx.beginPath();\n ctx.rect(innerBorderX0, innerBorderY0, innerBorderWidth, innerBorderHeight);\n ctx.strokeStyle =\n displayMode === EventDisplayMode.SelectedFound ? 'rgba(255, 219, 77)' : backgroundColor;\n ctx.lineWidth = innerBorderOffset;\n ctx.stroke();\n }\n\n getHitbox(_event: TimelineEvent, rawX0: number, rawX1: number): Hitbox {\n const {x0, x1} = this.getFixedXCoordinates(rawX0, rawX1);\n this.hitboxResult.left = x0;\n this.hitboxResult.right = x1;\n return this.hitboxResult;\n }\n\n getFixedXCoordinates(x0: number, x1: number) {\n return x1 - x0 < MIN_LINE_WIDTH ? {x0, x1: x0 + MIN_LINE_WIDTH} : {x0, x1};\n }\n}\n","import {TimelineEvent, yaTimelineConfig} from '../../../packages/ya-timeline';\nimport {AbstractEventRenderer} from '../../../packages/ya-timeline/components/Events';\nimport {Hitbox} from '../../../packages/ya-timeline/components/Events/AbstractEventRenderer';\n\nexport type AllocationLineEvent = TimelineEvent & {\n allocationId: string;\n};\n\nconst MIN_LINE_WIDTH = 8;\n\nexport class AllocationLineRenderer extends AbstractEventRenderer {\n render(\n ctx: CanvasRenderingContext2D,\n _: AllocationLineEvent,\n __: boolean,\n rawX0: number,\n rawX1: number,\n y: number,\n ) {\n const y0 = y - yaTimelineConfig.LINE_HEIGHT / 2;\n ctx.beginPath();\n ctx.fillStyle = 'rgba(107, 132, 153, 0.3)';\n ctx.rect(rawX0, y0, rawX1 - rawX0, yaTimelineConfig.LINE_HEIGHT);\n ctx.fill();\n }\n\n getHitbox(_event: TimelineEvent, rawX0: number, rawX1: number): Hitbox {\n const {x0, x1} = this.getFixedXCoordinates(rawX0, rawX1);\n this.hitboxResult.left = x0;\n this.hitboxResult.right = x1;\n return this.hitboxResult;\n }\n\n getFixedXCoordinates(x0: number, x1: number) {\n return x1 - x0 < MIN_LINE_WIDTH ? {x0, x1: x0 + MIN_LINE_WIDTH} : {x0, x1};\n }\n}\n","import React, {FC, PropsWithChildren, useRef} from 'react';\nimport {Popup} from '@gravity-ui/uikit';\nimport './EventTimelineTooltip.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-event-timeline-tooltip');\n\ntype Props = {\n offset: {\n x: number;\n y: number;\n };\n};\n\nexport const EventTimelineTooltip: FC<PropsWithChildren<Props>> = ({children, offset}) => {\n const anchorRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n className={block()}\n style={{\n top: offset.y,\n left: offset.x,\n }}\n >\n <div ref={anchorRef} className={block('anchor')} />\n <Popup anchorRef={anchorRef} open disablePortal>\n {children}\n </Popup>\n </div>\n );\n};\n","import React, {FC} from 'react';\nimport hammer from '../../../../../../common/hammer';\nimport './EventTimelineTooltipContentRow.scss';\nimport cn from 'bem-cn-lite';\nimport {Flex} from '@gravity-ui/uikit';\nimport {getPhaseColor} from '../helpers/getPhaseColor';\n\nconst block = cn('yt-event-timeline-tooltip-content-row');\n\ntype Props = {\n state: string;\n phase?: string;\n duration: number;\n};\n\nexport const EventTimelineTooltipContentRow: FC<Props> = ({state, phase, duration}) => {\n return (\n <Flex justifyContent=\"space-between\" gap={2} className={block()}>\n <div className={block('title', {state: getPhaseColor(state, phase)})}>\n {hammer.format['ReadableField'](state)}:{' '}\n {phase ? hammer.format['ReadableField'](phase) : <>—</>}\n </div>\n <div>{hammer.format['TimeDuration'](duration, {format: 'milliseconds'})}</div>\n </Flex>\n );\n};\n","import React, {FC, useMemo} from 'react';\nimport {\n JobEvent,\n JobLineEvent,\n} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport './EventTimelineTooltipContent.scss';\nimport {EventTimelineTooltipContentRow} from './EventTimelineTooltipContentRow';\nimport {MetaData} from './MetaData';\n\nconst block = cn('yt-event-timeline-tooltip-content');\ntype Props = {\n events: JobEvent[];\n jobId: string;\n metaData: JobLineEvent['meta'];\n};\n\nexport const EventTimelineTooltipContent: FC<Props> = ({events, jobId, metaData}) => {\n const phaseItems = useMemo(() => {\n if (!events) return [];\n return events.reduce<React.ReactElement[]>((ac, {state, phases, interval}) => {\n const eventDuration = interval.to - interval.from;\n const items = phases.reduce<React.ReactElement[]>((acc, {phase, startTime}, i, arr) => {\n const duration =\n i > 0 ? startTime - arr[i - 1].startTime : startTime - interval.from;\n\n acc.push(\n <EventTimelineTooltipContentRow\n key={`text_${phase}_${startTime}`}\n phase={phase}\n state={state}\n duration={duration}\n />,\n );\n return acc;\n }, []);\n\n return [\n ...ac,\n <EventTimelineTooltipContentRow\n key=\"text_all\"\n state={state}\n duration={eventDuration}\n />,\n ...items,\n ];\n }, []);\n }, [events]);\n\n if (!phaseItems.length) return null;\n\n return (\n <Flex direction=\"column\" gap={3} className={block()}>\n <Text variant=\"subheader-2\">Job id: {jobId}</Text>\n <MetaData meta={metaData} />\n <Flex direction=\"column\" gap={1} className={block('phases')}>\n {phaseItems}\n </Flex>\n </Flex>\n );\n};\n","import {wrapWc} from 'wc-react';\nimport {\n Axes,\n BasicEventsProvider,\n BoundsChangedEvent,\n Events,\n EventsSelectedEvent,\n Grid,\n TimelineAxis,\n TimelineComponent,\n TimelineEvent,\n TimelineMarker,\n YaTimeline,\n yaTimelineConfig,\n} from '../../packages/ya-timeline';\nimport {EventGroup} from '../../pages/query-tracker/Plan/Timeline/TimelineCanvas';\nimport {\n AbstractEventRenderer,\n EventIdentity,\n HoverEvent,\n LeftEvent,\n} from '../../packages/ya-timeline/components/Events';\nimport {getCSSPropertyValue} from '../../utils/get-css-color';\nimport {\n ROW_HEIGHT,\n TIMELINE_HEIGHT,\n TIMELINE_SELECT_BORDER_WIDTH,\n} from '../../pages/operations/OperationDetail/tabs/JobsTimeline/constants';\n\nexport type TimelineRenderer = {\n id: string;\n renderer: AbstractEventRenderer;\n};\n\nexport class EventCanvas<T extends TimelineEvent> extends YaTimeline {\n private renderersList: TimelineRenderer[] = [];\n\n set renderers(value: TimelineRenderer[]) {\n this.renderersList = value;\n this.scheduleTimelineRender();\n }\n\n set events(value: EventGroup[]) {\n this.getComponent(BasicEventsProvider).then((component) => {\n component?.setEvents(value);\n });\n }\n\n set axes(axes: TimelineAxis[]) {\n this.getComponent(BasicEventsProvider).then((component) => {\n if (component) {\n component.axes = axes;\n }\n });\n }\n\n set selectedEvents(events: EventIdentity[]) {\n this.getComponent(BasicEventsProvider).then((component) => {\n if (component) {\n component.setSelectedEvents(events);\n }\n });\n }\n\n set theme(_theme: string) {\n this.setTimelineConfig();\n this.scheduleTimelineRender();\n }\n\n override updateCanvasSize() {\n if (this.offsetHeight) {\n return super.updateCanvasSize();\n }\n\n return () => {};\n }\n\n createComponents(): TimelineComponent[] {\n this.setTimelineConfig();\n const events = new Events(this);\n\n this.renderersList.forEach(({id, renderer}) => {\n events.registerRenderer(id, renderer);\n });\n\n return [new Grid(this), new Axes(this), events, new BasicEventsProvider<T>(this)];\n }\n\n private setTimelineConfig() {\n yaTimelineConfig.OVERLAPPING_THRESHOLD = 0;\n yaTimelineConfig.SKIP_OVERLAPPING = true;\n yaTimelineConfig.PRIMARY_BACKGROUND_COLOR = getCSSPropertyValue(\n '--g-color-base-background',\n );\n yaTimelineConfig.SELECTION_OUTLINE_THICKNESS = TIMELINE_SELECT_BORDER_WIDTH;\n yaTimelineConfig.TRACK_HEIGHT = ROW_HEIGHT;\n yaTimelineConfig.LINE_HEIGHT = TIMELINE_HEIGHT;\n }\n}\n\ncustomElements.define('events-timeline-canvas', EventCanvas);\n\ninterface TimelineProps<T extends TimelineEvent> {\n start: number;\n end: number;\n selectedEvents?: EventIdentity[];\n eventsSelected?: (event: EventsSelectedEvent<T>) => void;\n hoverEvent?: (event: HoverEvent<T>) => void;\n leftEvent?: (event: LeftEvent<T>) => void;\n axes: TimelineAxis[];\n theme: string;\n markers?: TimelineMarker[];\n events?: T[];\n isZoomAllowed?: boolean;\n boundsChanged?: (event: BoundsChangedEvent) => void;\n renderers: TimelineRenderer[];\n}\n\nexport const Timeline = wrapWc<TimelineProps<TimelineEvent>>('events-timeline-canvas') as <\n T extends TimelineEvent,\n>(\n props: TimelineProps<T>,\n) => JSX.Element;\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {Timeline, TimelineRenderer} from './EventCanvas';\nimport {EventsSelectedEvent, HoverEvent} from '../../packages/ya-timeline/components/Events';\nimport cn from 'bem-cn-lite';\nimport {useThemeValue} from '@gravity-ui/uikit';\nimport debounce_ from 'lodash/debounce';\nimport {BoundsChangedEvent, TimelineAxis, TimelineEvent} from '../../packages/ya-timeline';\nimport './EventsTimeline.scss';\n\nconst block = cn('yt-events-timeline');\ntype Interval = {from: number; to: number};\n\nexport type Props<T extends TimelineEvent> = {\n axes: TimelineAxis[];\n timelines: T[];\n selectedJob?: string[];\n interval: Interval;\n rowHeight?: number;\n tooltip: (event?: HoverEvent<T>) => React.ReactNode;\n onTimelineClick: (events: T[]) => void;\n onBoundsChanged: (interval: Interval) => void;\n renderers: TimelineRenderer[];\n};\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nexport const EventsTimeline = <T extends TimelineEvent>({\n axes,\n timelines,\n selectedJob,\n interval,\n rowHeight,\n tooltip,\n onTimelineClick,\n onBoundsChanged,\n renderers,\n}: Props<T>) => {\n const theme = useThemeValue();\n const [hoverEvent, setHoverEvent] = useState<HoverEvent<T>>();\n\n const debouncedSetHoverEvent = useMemo(\n () =>\n debounce_((event: HoverEvent<T> | undefined) => {\n setHoverEvent(event);\n }, 50),\n [],\n );\n\n const handleLeftEvent = useCallback(() => {\n debouncedSetHoverEvent(undefined);\n }, [debouncedSetHoverEvent]);\n\n const handleHoverEvent = useCallback(\n (event: HoverEvent<T>) => {\n debouncedSetHoverEvent(event);\n },\n [debouncedSetHoverEvent],\n );\n\n const handleEventClick = useCallback(\n (e: EventsSelectedEvent<T>) => {\n const events = e.detail.events;\n if (!events.length) {\n onTimelineClick([]);\n return;\n }\n\n onTimelineClick(events);\n },\n [onTimelineClick],\n );\n\n const scrollTopChanged = useCallback(\n ({detail}: BoundsChangedEvent) => {\n onBoundsChanged({from: detail.start, to: detail.end});\n },\n [onBoundsChanged],\n );\n\n return (\n <div\n className={block()}\n onMouseLeave={handleLeftEvent}\n style={{\n height: `${axes.length * (rowHeight || DEFAULT_ROW_HEIGHT)}px`,\n }}\n >\n {tooltip(hoverEvent)}\n\n <Timeline<T>\n theme={theme}\n start={interval.from}\n end={interval.to}\n axes={axes}\n selectedEvents={selectedJob}\n events={timelines}\n eventsSelected={handleEventClick}\n hoverEvent={handleHoverEvent}\n leftEvent={handleLeftEvent}\n isZoomAllowed\n boundsChanged={scrollTopChanged}\n renderers={renderers}\n />\n </div>\n );\n};\n","import React, {FC, ReactNode} from 'react';\nimport {Flex, Icon, Text} from '@gravity-ui/uikit';\nimport FileIcon from '@gravity-ui/icons/svgs/file.svg';\nimport cn from 'bem-cn-lite';\nimport './TimelineTable.scss';\n\nconst block = cn('yt-timeline-table');\n\nexport type Item = {id: string; content: ReactNode};\n\ntype Props = {\n items: Item[];\n rowHeight: number;\n className?: string;\n};\n\nexport const TimelineTable: FC<Props> = ({items, rowHeight, className}) => {\n return (\n <Flex direction=\"column\" className={block(null, className)}>\n {items.map(({id, content}) => (\n <Flex\n alignItems=\"center\"\n gap={1}\n key={id}\n className={block('item')}\n style={{height: `${rowHeight}px`}}\n >\n <Icon data={FileIcon} size={16} />\n <Text variant=\"body-1\" ellipsis>\n {content}\n </Text>\n </Flex>\n ))}\n </Flex>\n );\n};\n","import React, {FC, PropsWithChildren} from 'react';\nimport {useToggle} from 'react-use';\nimport {Flex, Icon} from '@gravity-ui/uikit';\nimport ChevronDownIcon from '@gravity-ui/icons/svgs/chevron-down.svg';\nimport './GroupCollapse.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-timeline-group-collapse');\n\nexport type Props = {\n title: string;\n open?: boolean;\n};\n\nexport const GroupCollapse: FC<PropsWithChildren<Props>> = ({children, title, open = true}) => {\n const [isOpen, toggleOpen] = useToggle(open);\n\n return (\n <div className={block()}>\n <Flex alignItems=\"center\" gap={2} onClick={toggleOpen} className={block('head')}>\n <Icon data={ChevronDownIcon} className={block('icon', {open: isOpen})} />\n {title}\n </Flex>\n {isOpen && <div className={block('content')}>{children}</div>}\n </div>\n );\n};\n","import React, {FC, PropsWithChildren} from 'react';\nimport {EventsTimeline, Props as EventsTimelineProps} from './EventsTimeline';\nimport {Item, TimelineTable} from './TimelineTable';\nimport {GroupCollapse, Props as GroupCollapseProps} from './GroupCollapse';\nimport {TimelineEvent} from '../../packages/ya-timeline';\n\ntype Props<T extends TimelineEvent> = {\n tableItems: Item[];\n rowHeight: number;\n collapse?: GroupCollapseProps;\n className?: string;\n} & EventsTimelineProps<T>;\n\nconst Wrap: FC<PropsWithChildren<{collapse?: GroupCollapseProps}>> = ({children, collapse}) =>\n collapse ? (\n <GroupCollapse {...collapse}>{children}</GroupCollapse>\n ) : (\n <React.Fragment>{children}</React.Fragment>\n );\n\nexport const TimelineBlock = <T extends TimelineEvent>({\n className,\n timelines,\n axes,\n rowHeight,\n selectedJob,\n interval,\n tableItems,\n collapse,\n tooltip,\n renderers,\n onTimelineClick,\n onBoundsChanged,\n}: Props<T>) => {\n return (\n <Wrap collapse={collapse}>\n <div className={className}>\n <TimelineTable items={tableItems} rowHeight={rowHeight} />\n <EventsTimeline<T>\n timelines={timelines}\n axes={axes}\n selectedJob={selectedJob}\n interval={interval}\n rowHeight={rowHeight}\n onTimelineClick={onTimelineClick}\n onBoundsChanged={onBoundsChanged}\n tooltip={tooltip}\n renderers={renderers}\n />\n </div>\n </Wrap>\n );\n};\n","import React, {FC, useCallback, useEffect, useMemo} from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n selectActiveJob,\n selectFilter,\n selectInterval,\n selectJobGroupsCount,\n selectJobsInIntervalByGroup,\n} from '../../../../../../store/selectors/operations/jobs-timeline';\nimport {\n Interval,\n setInterval,\n setSelectedJob,\n} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport hammer from '../../../../../../common/hammer';\nimport {useSidePanel} from '../../../../../../hooks/use-side-panel';\nimport {EventsSidePanel} from '../EventsSidePanel';\nimport {prepareJobTimeline} from '../helpers/prepareJobTimeline';\nimport {\n JobLineEvent,\n JobLineRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {\n AllocationLineEvent,\n AllocationLineRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/AllocationLineRenderer';\nimport {EventTimelineTooltip} from '../../../../../../components/TimelineBlock/EventTimelineTooltip';\nimport {EventTimelineTooltipContent} from '../EventsTimeline/EventTimelineTooltipContent';\nimport {Item} from '../../../../../../components/TimelineBlock/TimelineTable';\nimport {ROW_HEIGHT} from '../constants';\nimport './JobsGroups.scss';\nimport {TimelineBlock} from '../../../../../../components/TimelineBlock/TimelineBlock';\n\nconst block = cn('yt-timeline-event-group');\n\nexport const JobsGroups: FC = () => {\n const dispatch = useDispatch();\n const jobGroups = useSelector(selectJobsInIntervalByGroup);\n const groupsCount = useSelector(selectJobGroupsCount);\n const interval = useSelector(selectInterval);\n const {timelineId} = useSelector(selectActiveJob);\n const filter = useSelector(selectFilter);\n\n const handleTimeLineClick = useCallback(\n (events: (JobLineEvent | AllocationLineEvent)[]) => {\n const job = events.find((event) => event.renderType === 'jobLine');\n if (!job) return;\n\n dispatch(\n setSelectedJob({\n id: (job as JobLineEvent).jobId,\n timelineId: `jobLine:${job.axisId}:${job.from}-${job.to}`,\n }),\n );\n },\n [dispatch],\n );\n\n const handleBoundsChanged = useCallback(\n (newInterval: Interval) => {\n dispatch(setInterval(newInterval));\n },\n [dispatch],\n );\n\n const handleSidePanelClose = useCallback(\n (onClose: () => void) => () => {\n dispatch(setSelectedJob({id: '', timelineId: ''}));\n onClose();\n },\n [dispatch],\n );\n\n const handleSidePanelOutsideClick = useCallback(\n (onClose: () => void) => (e: MouseEvent) => {\n if (e.target instanceof Element && e.target.localName !== 'events-timeline-canvas') {\n dispatch(setSelectedJob({id: '', timelineId: ''}));\n onClose();\n }\n },\n [dispatch],\n );\n\n const {openWidget, closeWidget, widgetContent} = useSidePanel('JobsTimeline', {\n renderContent({onClose}) {\n return (\n <EventsSidePanel\n onClose={handleSidePanelClose(onClose)}\n onOutsideClick={handleSidePanelOutsideClick(onClose)}\n />\n );\n },\n });\n\n useEffect(() => {\n const operation = timelineId ? openWidget : closeWidget;\n operation();\n }, [closeWidget, openWidget, timelineId]);\n\n const groups = useMemo(() => {\n if (!interval) return [];\n\n const groupNames = Object.keys(jobGroups).sort();\n return groupNames.map((groupName) => {\n const group = jobGroups[groupName].sort(\n (a, b) => Number(a.cookieId) - Number(b.cookieId),\n );\n const readableGroupName = hammer.format['ReadableField'](groupName);\n const title = `${readableGroupName} (${group.length} / ${groupsCount[groupName]})`;\n\n const tableItems = group.reduce<Record<string, Item>>((acc, item) => {\n if (item.cookieId === undefined) return acc;\n\n acc[item.cookieId] = {\n id: `${item.cookieId}: ${item.start_time}-${item.finish_time}`,\n content: `${readableGroupName} ${item.cookieId}`,\n };\n return acc;\n }, {});\n\n const {timelines, axes} = prepareJobTimeline({\n jobs: group,\n selectedJob: [timelineId],\n filter,\n axesRowHeight: ROW_HEIGHT,\n });\n\n return (\n <TimelineBlock<JobLineEvent | AllocationLineEvent>\n key={groupName}\n className={block()}\n collapse={{\n title,\n }}\n tableItems={Object.values(tableItems)}\n timelines={timelines}\n axes={axes}\n selectedJob={[timelineId]}\n interval={interval}\n rowHeight={ROW_HEIGHT}\n onTimelineClick={handleTimeLineClick}\n onBoundsChanged={handleBoundsChanged}\n tooltip={(e) => {\n if (!e) return;\n\n const {offset, events} = e.detail;\n const event = events.find((i) => i.renderType === 'jobLine');\n if (!event) return null;\n\n const jobEvent = event as JobLineEvent;\n\n return (\n <EventTimelineTooltip offset={offset}>\n <EventTimelineTooltipContent\n events={jobEvent.parts}\n jobId={jobEvent.jobId}\n metaData={jobEvent.meta}\n />\n </EventTimelineTooltip>\n );\n }}\n renderers={[\n {id: 'jobLine', renderer: new JobLineRenderer()},\n {id: 'allocationLine', renderer: new AllocationLineRenderer()},\n ]}\n />\n );\n });\n }, [\n filter,\n groupsCount,\n handleBoundsChanged,\n handleTimeLineClick,\n interval,\n jobGroups,\n timelineId,\n ]);\n\n return (\n <>\n <div className={block('wrap')}>{groups}</div>\n <>{widgetContent}</>\n </>\n );\n};\n","import {JobsTimelineState} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {JobLineEvent} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {getColorByState} from '../../../../../../components/TimelineBlock/helpers/getColorByState';\nimport {AllocationLineEvent} from '../../../../../../components/TimelineBlock/renderer/AllocationLineRenderer';\nimport {getTimeLineDisplayMode} from './getTimeLineDisplayMode';\n\ninterface AllocationData {\n from: number;\n to: number;\n cookieId: string;\n}\n\nexport const prepareJobTimeline = ({\n jobs,\n selectedJob = [],\n filter = '',\n axesRowHeight = 0,\n}: {\n jobs: JobsTimelineState['jobs'];\n selectedJob?: string[];\n filter?: string;\n axesRowHeight: number;\n}) => {\n // Process allocations\n const allocationMap = new Map<string, AllocationData>();\n const validJobs = jobs.filter((job) => job.cookieId !== undefined);\n\n for (const job of validJobs) {\n if (!job.allocationId) continue;\n\n const firstEvent = job.events[0];\n const lastEvent = job.events[job.events.length - 1];\n const jobStartTime = firstEvent.startTime;\n const jobEndTime = lastEvent.endTime;\n const cookieId = job.cookieId.toString();\n\n const existingAllocation = allocationMap.get(job.allocationId);\n\n if (existingAllocation) {\n existingAllocation.from = Math.min(existingAllocation.from, jobStartTime);\n existingAllocation.to = Math.max(existingAllocation.to, jobEndTime);\n } else {\n allocationMap.set(job.allocationId, {\n from: jobStartTime,\n to: jobEndTime,\n cookieId,\n });\n }\n }\n\n // Convert allocations to events\n const allocations: AllocationLineEvent[] = Array.from(allocationMap.entries()).map(\n ([allocationId, allocation]) => ({\n renderType: 'allocationLine' as const,\n allocationId,\n axisId: allocation.cookieId,\n eventsCount: 1,\n trackIndex: 0,\n from: allocation.from,\n to: allocation.to,\n }),\n );\n\n // Process jobs and collect axes\n const axes = new Set<string>();\n const timelines: JobLineEvent[] = [];\n\n for (const job of validJobs) {\n const cookieId = job.cookieId.toString();\n axes.add(cookieId);\n\n const jobEvents = job.events;\n const firstEvent = jobEvents[0];\n const lastEvent = jobEvents[jobEvents.length - 1];\n\n const parts = jobEvents.map((event) => ({\n percentage: event.percent,\n color: getColorByState(event.state),\n state: event.state,\n interval: {\n from: event.startTime,\n to: event.endTime,\n },\n phases: event.phases,\n }));\n\n timelines.push({\n renderType: 'jobLine' as const,\n axisId: cookieId,\n eventsCount: jobEvents.length,\n trackIndex: 0,\n from: firstEvent.startTime,\n to: lastEvent.endTime,\n jobId: job.id,\n parts,\n displayMode: getTimeLineDisplayMode({\n jobId: job.id,\n timeLineId: `jobLine:${cookieId}:${firstEvent.startTime}-${lastEvent.endTime}`,\n filter,\n selectedJob,\n }),\n meta: {\n startTime: job.start_time,\n endTime: job.finish_time,\n address: job.address,\n allocationId: job.allocationId,\n },\n });\n }\n\n // Prepare axis\n const axesArray = Array.from(axes).map((id, index) => ({\n id,\n top: axesRowHeight * index,\n height: axesRowHeight,\n tracksCount: 1,\n }));\n\n return {\n axes: axesArray,\n timelines: [...timelines, ...allocations],\n };\n};\n","import React, {FC, useCallback, useRef} from 'react';\nimport './JobsTimeline.scss';\nimport cn from 'bem-cn-lite';\nimport {Alert, Flex, Loader} from '@gravity-ui/uikit';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n selectError,\n selectEventsInterval,\n selectInterval,\n selectJobsEmptyError,\n selectJobsOverloadError,\n selectLoading,\n} from '../../../../../store/selectors/operations/jobs-timeline';\nimport {getJobsWithEvents} from '../../../../../store/actions/operations/jobs-timeline';\nimport {TimeLineHeader} from './TimeLineHeader';\nimport {JobsGroups} from './JobsGroups';\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport WithStickyToolbar from '../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {MAX_JOBS_COUNT} from './constants';\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\n\nconst block = cn('yt-jobs-timeline');\n\nexport const JobsTimeline: FC = () => {\n const dispatch = useDispatch();\n const firstUpdate = useRef<boolean>(true);\n const eventsRange = useSelector(selectEventsInterval);\n const overloadError = useSelector(selectJobsOverloadError);\n const emptyError = useSelector(selectJobsEmptyError);\n const isLoading = useSelector(selectLoading);\n const interval = useSelector(selectInterval);\n const error = useSelector(selectError);\n\n const handleUpdate = useCallback(async () => {\n await dispatch(getJobsWithEvents(firstUpdate.current));\n firstUpdate.current = false;\n }, [dispatch]);\n\n useUpdater(handleUpdate);\n\n if (error) {\n return <YTErrorBlock error={error} />;\n }\n\n if (overloadError) {\n return (\n <Alert\n theme=\"info\"\n message={`Too many jobs to display. Max number ${MAX_JOBS_COUNT}`}\n />\n );\n }\n\n if (emptyError) {\n return <Alert theme=\"info\" message={`No jobs to display`} />;\n }\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\">\n <Loader />\n </Flex>\n );\n }\n\n if (!interval || !eventsRange) return null;\n\n return (\n <WithStickyToolbar\n toolbar={<TimeLineHeader />}\n content={<JobsGroups />}\n className={block()}\n padding=\"skip-horizontal\"\n />\n );\n};\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 Button from '../../../components/Button/Button';\nimport {Loader} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../../components/Error/Error';\nimport Icon from '../../../components/Icon/Icon';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Yson from '../../../components/Yson/Yson';\nimport StatusLabel from '../../../components/StatusLabel/StatusLabel';\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 getOperationPerformanceUrlTemplate,\n selectIsOperationInGpuTree,\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 {RuntimeItem} from '../../../store/reducers/operations/detail';\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';\nimport {OperationPool, OperationStates} from '../selectors';\nimport {JobsTimeline} from './tabs/JobsTimeline';\nimport {getSettingsTimelineTabVisible} from '../../../store/selectors/settings/settings-ts';\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\nfunction getSpecialWaitingStatuses(\n pools: OperationPool[],\n state: OperationStates,\n suspended: boolean | undefined,\n runtime: RuntimeItem[] | undefined,\n type: string | undefined,\n isGpuOperation: boolean | undefined,\n) {\n const fairShareRatio = runtime?.[0]?.progress?.fair_share_ratio as number | undefined;\n const usageRatio = runtime?.[0]?.progress?.usage_ratio as number | undefined;\n const demandRatio = runtime?.[0]?.progress?.demand_ratio as number | undefined;\n\n const isSingleTree = new Set(pools?.map((pool) => pool?.tree)).size === 1;\n const isSpecialStatus =\n type === 'vanilla' && isSingleTree && state === 'running' && isGpuOperation && !suspended;\n\n const isWaitingForResources =\n isSpecialStatus && fairShareRatio === usageRatio && fairShareRatio === 0;\n\n const isWaitingForJobs =\n isSpecialStatus &&\n fairShareRatio === demandRatio &&\n usageRatio !== undefined &&\n fairShareRatio !== undefined &&\n usageRatio < fairShareRatio;\n\n return {isWaitingForResources, isWaitingForJobs};\n}\n\nconst waitingForJobsTooltip =\n 'Operation scheduling has started, but not all jobs have been scheduled yet. If the problem persists, contact cluster administrators.';\nconst waitingForResourcesTooltip =\n 'Not enough resources to start operation scheduling. This may happen if the pool has too many operations in the queue or too low resource guarantees.';\n\nfunction SpecialWaitingStatus({type}: {type: 'jobs' | 'resources'}) {\n return (\n <Tooltip content={type === 'jobs' ? waitingForJobsTooltip : waitingForResourcesTooltip}>\n <StatusLabel\n state={'running'}\n iconState={'running'}\n text={`Waiting for ${type}`}\n renderPlaque\n />\n </Tooltip>\n );\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 = [], runtime, operation, isGpuOperation} = this.props;\n const {type, user = '', state, suspended, pools, title, $value} = operation;\n\n const {isWaitingForJobs, isWaitingForResources} = getSpecialWaitingStatuses(\n pools,\n state,\n suspended,\n runtime,\n type,\n isGpuOperation,\n );\n\n const label = suspended ? 'suspended' : state;\n\n const mainStatusProps:\n | {label: typeof label}\n | {state: 'unknown'; iconState: 'running'; text: string} =\n isWaitingForJobs || isWaitingForResources\n ? {state: 'unknown', iconState: 'running', text: 'Running'}\n : {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 {...mainStatusProps} renderPlaque />\n  \n {isWaitingForJobs && <SpecialWaitingStatus type={'jobs'} />}\n {isWaitingForResources && <SpecialWaitingStatus type={'resources'} />}\n </div>\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, isGpuOperation} =\n this.props;\n const {$value, user = '', type, startTime, finishTime, duration, pools, state} = operation;\n\n const isGpuVanillaOperation = isGpuOperation && type === 'vanilla';\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 operationRefId={$value}\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 visible: !isGpuVanillaOperation,\n },\n {\n key: 'total cpu time spent',\n value: <Template.Time time={cpuTimeSpent} valueFormat=\"TimeDuration\" />,\n visible: !isGpuVanillaOperation,\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 timelineTabVisible,\n operationPerformanceUrlTemplate,\n pyDLTelemetryTabVisible,\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 [Tab.JOBS_TIMELINE]: {show: timelineTabVisible},\n [Tab.PYDL_TELEMETRY]: {show: pyDLTelemetryTabVisible, title: 'PyDL Telemetry'},\n [Tab.PERFORMANCE]: {\n show: Boolean(operationPerformanceUrlTemplate),\n external: true,\n url: operationPerformanceUrlTemplate?.url,\n title: operationPerformanceUrlTemplate?.title,\n routed: false,\n },\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 {\n match,\n cluster,\n monitorTabVisible,\n jobsMonitorIsSupported,\n monitoringComponent,\n timelineTabVisible,\n pyDLTelemetryTabVisible,\n } = this.props;\n const {url, params} = match;\n const {operationId} = params;\n\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n const PyDLTelemetry = UIFactory.PyDLTelemetrySetup?.renderPyDLTelemetry;\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 {timelineTabVisible && (\n <Route\n path={`${path}/${Tab.JOBS_TIMELINE}`}\n render={() => <JobsTimeline />}\n />\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 {pyDLTelemetryTabVisible && (\n <Route path={`${path}/${Tab.PYDL_TELEMETRY}`} render={PyDLTelemetry} />\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 <YTErrorBlock 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, details} =\n state.operations.detail;\n const totalJobWallTime = getTotalJobWallTime(state);\n const cpuTimeSpent = getTotalCpuTimeSpent(state);\n const erasedTrees = getOperationErasedTrees(state);\n\n const {runtime} = details;\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 const pyDLTelemetryTabVisible = Boolean(UIFactory.PyDLTelemetrySetup?.hasTelemtery(operation));\n\n return {\n cluster: getCurrentCluster(state),\n operation,\n errorData,\n loading,\n loaded,\n error,\n actions,\n runtime,\n totalJobWallTime,\n cpuTimeSpent,\n erasedTrees,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n monitoringComponent,\n pyDLTelemetryTabVisible,\n timelineTabVisible: getSettingsTimelineTabVisible(state),\n jobsMonitorIsSupported: Boolean(UIFactory.getMonitorComponentForJob()),\n jobsMonitorVisible: getJobsMonitorTabVisible(state),\n hasStatististicsTab: getOperationStatiscsHasData(state),\n isGpuOperation: selectIsOperationInGpuTree(state),\n operationPerformanceUrlTemplate: getOperationPerformanceUrlTemplate(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 React from 'react';\nexport type {ChartKitProps, ChartKitWidget, ChartKitRef} from './YTChartKit';\nexport type {RawSerieData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';\n\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport type {YTChartKitType} from './YTChartKit';\n\nexport const YTChartKitLazy = withLazyLoading(\n React.lazy(async () => import(/* webpackChunkName: 'chart-kit' */ './YTChartKit')),\n) as YTChartKitType;\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 {YTChartKitPie} from './YTChartKitPie';\nexport {YTChartKitHistogram} from './YTChartKitHistogram';\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:attributes-button', {en, ru});\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\nimport i18n from './i18n';\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: i18n('tooltip-content')},\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 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 * as React from 'react';\nexport const AlertContext = React.createContext(null);\n","'use client';\nimport * as React from 'react';\nimport { AlertContext } from './AlertContext';\nexport const useAlertContext = () => {\n const context = React.useContext(AlertContext);\n if (!context)\n throw new Error('Alert: `useAlertContext` hook is used out of \"AlertContext\"');\n return context;\n};\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Button } from '../Button';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertAction = (props) => {\n const { view } = useAlertContext();\n return _jsx(Button, Object.assign({ view: view === 'filled' ? 'normal-contrast' : undefined }, props));\n};\n","import { block } from '../utils/cn';\nimport './Alert.css';\nexport const DEFAULT_ICON_SIZE = 18;\nexport const bAlert = block('alert');\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { AlertContext } from './AlertContext';\nexport const AlertContextProvider = ({ layout, view, children }) => {\n return _jsx(AlertContext.Provider, { value: { layout, view }, children: children });\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { CircleCheck, CircleCheckFill, CircleInfo, CircleInfoFill, CircleXmark, CircleXmarkFill, Thunderbolt, ThunderboltFill, TriangleExclamation, TriangleExclamationFill, } from '@gravity-ui/icons';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text/colorText/colorText';\nimport { DEFAULT_ICON_SIZE, bAlert } from './constants';\nconst typeToIcon = {\n danger: {\n filled: CircleXmarkFill,\n outlined: CircleXmark,\n },\n info: {\n filled: CircleInfoFill,\n outlined: CircleInfo,\n },\n success: {\n filled: CircleCheckFill,\n outlined: CircleCheck,\n },\n warning: {\n filled: TriangleExclamationFill,\n outlined: TriangleExclamation,\n },\n utility: {\n filled: ThunderboltFill,\n outlined: Thunderbolt,\n },\n normal: null,\n};\nexport const AlertIcon = ({ className, theme, view = 'filled', size = DEFAULT_ICON_SIZE, }) => {\n const iconByTheme = typeToIcon[theme];\n if (!iconByTheme) {\n return null;\n }\n let color;\n if (theme === 'success') {\n color = 'positive';\n }\n else if (theme !== 'normal') {\n color = theme;\n }\n return (_jsx(\"div\", { className: bAlert('icon', colorText({ color }, className)), children: _jsx(Icon, { data: iconByTheme[view], size: size }) }));\n};\n","import * as React from 'react';\nconst CircleXmarkFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmarkFill;\n","import * as React from 'react';\nconst CircleXmark = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M13.5 8a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmark;\n","import * as React from 'react';\nconst CircleInfoFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-9.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0M8 7.75a.75.75 0 0 1 .75.75V11a.75.75 0 0 1-1.5 0V8.5A.75.75 0 0 1 8 7.75\", clipRule: \"evenodd\" })));\nexport default CircleInfoFill;\n","import * as React from 'react';\nconst CircleCheckFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m3.1-8.55a.75.75 0 1 0-1.2-.9L7.419 8.858 6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08z\", clipRule: \"evenodd\" })));\nexport default CircleCheckFill;\n","import * as React from 'react';\nconst TriangleExclamationFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M5.835 2.244c.963-1.665 3.367-1.665 4.33 0l4.916 8.505c.964 1.666-.24 3.751-2.164 3.751H3.083c-1.925 0-3.128-2.085-2.165-3.751zM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 1 1-1.5 0v-2A.75.75 0 0 1 8 5m1 5.75a1 1 0 1 1-2 0 1 1 0 0 1 2 0\", clipRule: \"evenodd\" })));\nexport default TriangleExclamationFill;\n","import * as React from 'react';\nconst ThunderboltFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", d: \"m14.61 6.914-7.632 8.08a1.614 1.614 0 0 1-2.69-1.66L5.5 10H2.677A1.677 1.677 0 0 1 1.12 7.7l2.323-5.807A2.22 2.22 0 0 1 5.5.5h4c.968 0 1.637.967 1.298 1.873L10 4.5h3.569a1.431 1.431 0 0 1 1.04 2.414\" })));\nexport default ThunderboltFill;\n","import { addComponentKeysets } from '../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'Alert';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Xmark } from '@gravity-ui/icons';\nimport { Button } from '../Button';\nimport { Card } from '../Card';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text';\nimport { Flex, spacing } from '../layout';\nimport { AlertAction } from './AlertAction';\nimport { AlertActions } from './AlertActions';\nimport { AlertContextProvider } from './AlertContextProvider';\nimport { AlertIcon } from './AlertIcon';\nimport { AlertTitle } from './AlertTitle';\nimport { DEFAULT_ICON_SIZE, bAlert } from './constants';\nimport i18n from './i18n';\nexport const Alert = (props) => {\n const { theme = 'normal', view = 'filled', layout = 'vertical', message, className, corners, style, onClose, align, qa, } = props;\n return (_jsx(AlertContextProvider, { layout: layout, view: view, children: _jsx(Card, { style: style, className: bAlert({ corners }, spacing({ py: 4, px: 5 }, className)), theme: theme, view: view, qa: qa, children: _jsxs(Flex, { gap: \"3\", alignItems: align, children: [typeof props.icon === 'undefined' ? (_jsx(Alert.Icon, { theme: theme, view: view })) : (props.icon // ability to pass `null` as `icon` prop value\n ), _jsxs(Flex, { direction: layout === 'vertical' ? 'column' : 'row', gap: \"5\", grow: true, children: [_jsx(Flex, { gap: \"2\", grow: true, className: bAlert('text-content'), children: _jsxs(Flex, { direction: \"column\", gap: \"1\", grow: true, justifyContent: align, children: [typeof props.title === 'string' ? (_jsx(Alert.Title, { text: props.title })) : (props.title), message] }) }), Array.isArray(props.actions) ? (_jsx(Alert.Actions, { items: props.actions })) : (props.actions)] }), onClose && (_jsx(Button, { view: \"flat\", className: bAlert('close-btn'), onClick: onClose, extraProps: {\n 'aria-label': i18n('label_close'),\n }, children: _jsx(Icon, { data: Xmark, size: DEFAULT_ICON_SIZE, className: colorText({ color: 'secondary' }) }) }))] }) }) }));\n};\nAlert.Icon = AlertIcon;\nAlert.Title = AlertTitle;\nAlert.Actions = AlertActions;\nAlert.Action = AlertAction;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Text } from '../Text';\nimport { bAlert } from './constants';\nexport const AlertTitle = ({ text, className }) => {\n return (_jsx(Text, { variant: \"subheader-2\", className: bAlert('title', className), children: text }));\n};\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Flex } from '../layout';\nimport { AlertAction } from './AlertAction';\nimport { bAlert } from './constants';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertActions = ({ items, children, className }) => {\n const { layout } = useAlertContext();\n return (_jsx(Flex, { className: bAlert('actions', { minContent: layout === 'horizontal' }, className), direction: \"row\", gap: \"3\", wrap: true, alignItems: layout === 'horizontal' ? 'center' : 'flex-start', children: (items === null || items === void 0 ? void 0 : items.map(({ handler, text }, i) => (_jsx(AlertAction, { onClick: handler, children: text }, i)))) || children }));\n};\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 {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","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","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 React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import {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 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 block from 'bem-cn-lite';\n\nimport hammer from '../../common/hammer';\nimport Icon, {IconName} from '../Icon/Icon';\n\nimport {NavigationFlowState, StatusLabelState} from '../../types/common/states';\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\nexport type 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 text?: string;\n state?: ViewState;\n iconState?: ViewState;\n};\n\nexport default function StatusLabel({\n className,\n label,\n renderPlaque,\n text,\n state,\n iconState,\n}: StatusLabelProps) {\n const mappedState = getViewState(label);\n const icon = getIcon(iconState ?? mappedState);\n const mods = {state: state ?? mappedState};\n\n return !label && !(text || state) ? (\n <span />\n ) : (\n <span className={b(null, renderPlaque ? b('plaque', mods, className) : b(mods, className))}>\n <Icon awesome={icon} />\n <span>{text ?? hammer.format['ReadableField'](label)}</span>\n </span>\n );\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {getDisplayName} from '../utils';\nimport {SPLIT_PANE_ID} from '../constants/index';\n\nexport default function withSplit<P>(Component: React.ComponentType<P>): React.ComponentType<P> {\n return class WithSplit extends React.Component<P> {\n static displayName = `WithSplit(${getDisplayName(Component)})`;\n\n render() {\n return ReactDOM.createPortal(\n <Component {...this.props} />,\n document.getElementById(SPLIT_PANE_ID)!,\n );\n }\n };\n}\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:chart-link', {en, ru});\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\nimport i18n from './i18n';\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\n className={className}\n target=\"_blank\"\n theme={theme}\n url={url}\n title={title ?? i18n('View')}\n >\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import { addComponentKeysets } from '../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'Table';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","'use client';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport _get from 'lodash/get';\nimport _has from 'lodash/has';\nimport _isNumber from 'lodash/isNumber';\nimport { block } from '../utils/cn';\nimport { warnOnce } from '../utils/warn';\nimport i18n from './i18n';\nimport './Table.css';\nconst DASH = '\\u2014';\nfunction warnAboutPhysicalValues(propName) {\n warnOnce(`[Table] Physical values (left, right) of \"${propName}\" property are deprecated. Use logical values (start, end) instead.`);\n}\nfunction normalizeSides(side, propName) {\n if (side === 'left') {\n warnAboutPhysicalValues(propName);\n return 'start';\n }\n if (side === 'right') {\n warnAboutPhysicalValues(propName);\n return 'end';\n }\n return side;\n}\nconst b = block('table');\nexport class Table extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n activeScrollElement: 'scrollContainer',\n columnsStyles: Array.from(this.props.columns, () => ({})),\n columnHeaderRefs: Array.from(this.props.columns, () => React.createRef()),\n };\n this.tableRef = React.createRef();\n this.scrollContainerRef = React.createRef();\n this.horizontalScrollBarRef = React.createRef();\n this.horizontalScrollBarInnerRef = React.createRef();\n this.renderRow = (item, rowIndex) => {\n const { columns, isRowDisabled, onRowClick, onRowMouseEnter, onRowMouseLeave, onRowMouseDown, getRowClassNames, verticalAlign, edgePadding, wordWrap, getRowDescriptor, } = this.props;\n const { columnsStyles } = this.state;\n const descriptor = getRowDescriptor === null || getRowDescriptor === void 0 ? void 0 : getRowDescriptor(item, rowIndex);\n const disabled = (descriptor === null || descriptor === void 0 ? void 0 : descriptor.disabled) || (isRowDisabled === null || isRowDisabled === void 0 ? void 0 : isRowDisabled(item, rowIndex)) || false;\n const additionalClassNames = (descriptor === null || descriptor === void 0 ? void 0 : descriptor.classNames) || (getRowClassNames === null || getRowClassNames === void 0 ? void 0 : getRowClassNames(item, rowIndex)) || [];\n const interactive = Boolean(!disabled && onRowClick);\n return (_jsx(\"tr\", { onClick: !disabled && onRowClick ? onRowClick.bind(null, item, rowIndex) : undefined, onMouseEnter: !disabled && onRowMouseEnter\n ? onRowMouseEnter.bind(null, item, rowIndex)\n : undefined, onMouseLeave: !disabled && onRowMouseLeave\n ? onRowMouseLeave.bind(null, item, rowIndex)\n : undefined, onMouseDown: !disabled && onRowMouseDown\n ? onRowMouseDown.bind(null, item, rowIndex)\n : undefined, className: b('row', { disabled, interactive, 'vertical-align': verticalAlign }, additionalClassNames.join(' ')), children: columns.map((column, colIndex) => {\n const { id, align: rawAlign, primary, className, sticky: rawSticky } = column;\n const content = Table.getBodyCellContent(column, item, rowIndex);\n const align = normalizeSides(rawAlign, 'column.align');\n const sticky = normalizeSides(rawSticky, 'column.sticky');\n return (_jsx(\"td\", { style: columnsStyles[colIndex], className: b('cell', {\n align,\n primary,\n sticky,\n ['edge-padding']: edgePadding,\n ['word-wrap']: wordWrap,\n }, className), children: content }, id));\n }) }, Table.getRowId(this.props, item, rowIndex)));\n };\n this.handleScrollContainerMouseenter = () => {\n this.setState({ activeScrollElement: 'scrollContainer' });\n };\n this.handleScrollContainerScroll = () => {\n if (this.state.activeScrollElement === 'scrollContainer' &&\n this.horizontalScrollBarRef.current &&\n this.scrollContainerRef.current) {\n this.horizontalScrollBarRef.current.scrollLeft =\n this.scrollContainerRef.current.scrollLeft;\n }\n };\n this.handleHorizontalScrollBarMouseenter = () => {\n this.setState({ activeScrollElement: 'scrollBar' });\n };\n this.handleHorizontalScrollBarScroll = () => {\n if (this.state.activeScrollElement === 'scrollBar' &&\n this.horizontalScrollBarRef.current &&\n this.scrollContainerRef.current) {\n this.scrollContainerRef.current.scrollLeft =\n this.horizontalScrollBarRef.current.scrollLeft;\n }\n };\n }\n // Static methods may be used by HOCs\n static getRowId(props, item, rowIndex) {\n const { data, getRowId, getRowDescriptor } = props;\n const index = rowIndex !== null && rowIndex !== void 0 ? rowIndex : data.indexOf(item);\n const descriptor = getRowDescriptor === null || getRowDescriptor === void 0 ? void 0 : getRowDescriptor(item, index);\n if ((descriptor === null || descriptor === void 0 ? void 0 : descriptor.id) !== undefined) {\n return descriptor.id;\n }\n if (typeof getRowId === 'function') {\n return getRowId(item, index);\n }\n if (getRowId && getRowId in item) {\n return String(item[getRowId]);\n }\n return String(index);\n }\n static getHeadCellContent(column) {\n const { id, name } = column;\n let content;\n if (typeof name === 'function') {\n content = name();\n }\n else if (typeof name === 'string') {\n content = name;\n }\n else {\n content = id;\n }\n return content;\n }\n static getBodyCellContent(column, item, rowIndex) {\n const { id, template, placeholder } = column;\n let placeholderValue;\n if (typeof placeholder === 'function') {\n placeholderValue = placeholder(item, rowIndex);\n }\n else {\n placeholderValue = placeholder !== null && placeholder !== void 0 ? placeholder : DASH;\n }\n let value;\n if (typeof template === 'function') {\n value = template(item, rowIndex);\n }\n else if (typeof template === 'string') {\n value = _get(item, template);\n }\n else if (_has(item, id)) {\n value = _get(item, id);\n }\n if ([undefined, null, ''].includes(value) && placeholderValue) {\n return placeholderValue;\n }\n return value;\n }\n static getDerivedStateFromProps(props, state) {\n if (props.columns.length === state.columnHeaderRefs.length) {\n return null;\n }\n return {\n columnHeaderRefs: Array.from(props.columns, () => React.createRef()),\n };\n }\n componentDidMount() {\n if (this.props.stickyHorizontalScroll) {\n this.tableResizeObserver = new ResizeObserver((entries) => {\n var _a;\n const { contentRect } = entries[0];\n // Sync scrollbar width with table width\n (_a = this.horizontalScrollBarInnerRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty('width', `${contentRect.width}px`);\n });\n if (this.tableRef.current) {\n this.tableResizeObserver.observe(this.tableRef.current);\n }\n if (this.scrollContainerRef.current) {\n this.scrollContainerRef.current.addEventListener('scroll', this.handleScrollContainerScroll);\n this.scrollContainerRef.current.addEventListener('mouseenter', this.handleScrollContainerMouseenter);\n }\n if (this.horizontalScrollBarRef.current) {\n this.horizontalScrollBarRef.current.addEventListener('scroll', this.handleHorizontalScrollBarScroll);\n this.horizontalScrollBarRef.current.addEventListener('mouseenter', this.handleHorizontalScrollBarMouseenter);\n }\n }\n this.columnsResizeObserver = new ResizeObserver((entries) => {\n // fix ResizeObserver loop error\n window.requestAnimationFrame(() => {\n if (!Array.isArray(entries) || !entries.length) {\n return;\n }\n this.updateColumnStyles();\n });\n });\n if (this.tableRef.current) {\n this.columnsResizeObserver.observe(this.tableRef.current);\n }\n this.updateColumnStyles();\n }\n componentDidUpdate(prevProps) {\n if (this.props.columns !== prevProps.columns) {\n this.updateColumnStyles();\n }\n }\n componentWillUnmount() {\n if (this.props.stickyHorizontalScroll) {\n if (this.tableResizeObserver) {\n this.tableResizeObserver.disconnect();\n }\n if (this.scrollContainerRef.current) {\n this.scrollContainerRef.current.removeEventListener('scroll', this.handleScrollContainerScroll);\n this.scrollContainerRef.current.removeEventListener('mouseenter', this.handleScrollContainerMouseenter);\n }\n if (this.horizontalScrollBarRef.current) {\n this.horizontalScrollBarRef.current.removeEventListener('scroll', this.handleHorizontalScrollBarScroll);\n this.horizontalScrollBarRef.current.removeEventListener('mouseenter', this.handleHorizontalScrollBarMouseenter);\n }\n }\n if (this.columnsResizeObserver) {\n this.columnsResizeObserver.disconnect();\n }\n }\n render() {\n const { columns, stickyHorizontalScroll, className, qa } = this.props;\n const withPrimary = columns.some(({ primary }) => primary);\n return (_jsx(\"div\", { className: b({\n 'with-primary': withPrimary,\n 'with-sticky-scroll': stickyHorizontalScroll,\n }, className), \"data-qa\": qa, children: stickyHorizontalScroll ? (_jsxs(React.Fragment, { children: [_jsx(\"div\", { ref: this.scrollContainerRef, className: b('scroll-container'), children: this.renderTable() }), this.renderHorizontalScrollBar()] })) : (this.renderTable()) }));\n }\n renderHead() {\n const { columns, edgePadding, wordWrap } = this.props;\n const { columnsStyles } = this.state;\n return (_jsx(\"thead\", { className: b('head'), children: _jsx(\"tr\", { className: b('row'), children: columns.map((column, index) => {\n const { id, align: rawAlign, primary, sticky: rawSticky, className } = column;\n const align = normalizeSides(rawAlign, 'column.align');\n const sticky = normalizeSides(rawSticky, 'column.sticky');\n const content = Table.getHeadCellContent(column);\n return (_jsx(\"th\", { ref: this.state.columnHeaderRefs[index], style: columnsStyles[index], className: b('cell', {\n align,\n primary,\n sticky,\n ['edge-padding']: edgePadding,\n ['word-wrap']: wordWrap,\n }, className), children: content }, id));\n }) }) }));\n }\n renderBody() {\n const { data } = this.props;\n return (_jsx(\"tbody\", { className: b('body'), children: data.length > 0 ? data.map(this.renderRow) : this.renderEmptyRow() }));\n }\n renderTable() {\n const { width = 'auto' } = this.props;\n return (_jsxs(\"table\", { ref: this.tableRef, className: b('table', { width }), children: [this.renderHead(), this.renderBody()] }));\n }\n renderEmptyRow() {\n const { columns, emptyMessage } = this.props;\n return (_jsx(\"tr\", { className: b('row', { empty: true }), children: _jsx(\"td\", { className: b('cell'), colSpan: columns.length, children: emptyMessage ? emptyMessage : i18n('label_empty') }) }));\n }\n renderHorizontalScrollBar() {\n const { stickyHorizontalScroll, stickyHorizontalScrollBreakpoint = 0 } = this.props;\n return (_jsx(\"div\", { ref: this.horizontalScrollBarRef, className: b('horizontal-scroll-bar', {\n 'sticky-horizontal-scroll': stickyHorizontalScroll,\n }), style: { bottom: `${stickyHorizontalScrollBreakpoint}px` }, \"data-qa\": \"sticky-horizontal-scroll-breakpoint-qa\", children: _jsx(\"div\", { ref: this.horizontalScrollBarInnerRef, className: b('horizontal-scroll-bar-inner') }) }));\n }\n updateColumnStyles() {\n this.setState((prevState) => {\n const columnsWidth = prevState.columnHeaderRefs.map((ref) => ref.current === null ? undefined : ref.current.getBoundingClientRect().width);\n const columnsStyles = this.props.columns.map((_, index) => this.getColumnStyles(index, columnsWidth));\n return { columnsStyles };\n });\n }\n getColumnStyles(index, columnsWidth) {\n const { columns } = this.props;\n const column = columns[index];\n const style = {};\n if (typeof column.width === 'string') {\n return { maxWidth: 0, width: column.width };\n }\n if (typeof column.width !== 'undefined') {\n style.width = column.width;\n }\n if (!column.sticky) {\n return style;\n }\n const filteredColumns = column.sticky === 'left' || column.sticky === 'start'\n ? columnsWidth.slice(0, index)\n : columnsWidth.slice(index + 1);\n const styleName = column.sticky === 'left' || column.sticky === 'start'\n ? 'insetInlineStart'\n : 'insetInlineEnd';\n style[styleName] = filteredColumns.reduce((start, width) => {\n return _isNumber(width) ? start + width : start;\n }, 0);\n return style;\n }\n}\nTable.defaultProps = {\n edgePadding: true,\n};\n","import React, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport {YTErrorBlock} 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 <YTErrorBlock error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport withSplit from '../hocs/withSplit';\nimport {mergeScreen, splitScreen} from '../store/actions/global';\n\ntype SidePanelContentProps = {\n onClose: () => void;\n renderContent(props: {visible: boolean; onClose: () => void}): React.ReactNode;\n};\n\nexport const SidePanelPortal = withSplit(SideContent);\n\nexport function useSidePanel(\n name: string,\n {renderContent}: Pick<SidePanelContentProps, 'renderContent'>,\n) {\n const [widgetOpened, setWidgetOpened] = React.useState(false);\n const dispatch = useDispatch();\n\n const openWidget = React.useCallback(() => {\n dispatch(splitScreen(name));\n setWidgetOpened(true);\n }, [setWidgetOpened, dispatch, name]);\n\n const onClose = React.useCallback(() => {\n setWidgetOpened(false);\n dispatch(mergeScreen());\n }, [setWidgetOpened, dispatch]);\n\n return {\n closeWidget: onClose,\n openWidget,\n widgetOpened,\n widgetContent: widgetOpened ? (\n <SidePanelPortal>{renderContent({onClose, visible: widgetOpened})}</SidePanelPortal>\n ) : null,\n };\n}\n\nfunction SideContent({children}: {children: React.ReactNode}) {\n return children;\n}\n","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Text} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './WarningIcon.scss';\n\nconst b = cn('yt-warning-icon');\n\ninterface Props {\n className?: string;\n hoverContent?: React.ReactNode;\n color?: 'warning' | 'danger';\n children?: React.ReactNode;\n}\n\nexport default function WarningIcon(props: Props) {\n const {className, hoverContent, children, color} = props;\n return (\n <span className={b(null, className)}>\n <Tooltip className={b('tooltip')} content={hoverContent}>\n <Icon className={b('icon', {color})} awesome=\"exclamation-triangle\" />\n {children && (\n <Text variant=\"inherit\" color={color}>\n {children}\n </Text>\n )}\n </Tooltip>\n </span>\n );\n}\n","import React from 'react';\nimport {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","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-.078.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.325.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 .075-.312c0-.3-.244-.641-.84-.641a1 1 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 0 1-1.5 0c0-.674.345-1.22.78-1.577M8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2\" clipRule=\"evenodd\" /></svg>;\nexport default SvgCircleQuestion;","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\n\nimport './OperationType.scss';\n\nconst block = cn('yt-operation-type');\n\nexport function OperationType({value}: {value?: string}) {\n const text = React.useMemo(() => {\n return format.ReadableField(value);\n }, [value]);\n\n return <span className={block()}>{text}</span>;\n}\n","import React from 'react';\n\nimport cn from 'bem-cn-lite';\n\nimport './ColorCircle.scss';\n\nconst block = cn('yt-color-circle');\n\nexport function ColorCircle({color, marginRight = true}: {color: string; marginRight?: boolean}) {\n return (\n <div className={block({'margin-right': marginRight})} style={{backgroundColor: color}} />\n );\n}\n"],"names":["isEmptyStatistics","stats","some_","value","Boolean","ypath","getValue","hasProgressTasks","operation","TASKS_PREFIX","prepareFile","file","path","originalPath","name","executable","getBoolean","prepareMeta","meta","prepared","map_","sortBy_","prepareStartedBy","startedBy","command","fields","filter_","option","length","prepareTransferTask","task","id","task_id","url","UIFactory","makeUrlForTransferTask","prepareLivePreview","type","index","isRunning","_operation$getLivePre","getLivePreviewPath","virtualPath","supported","transaction","prepareTableFilters","table","filters","ranges","range","upperLimit","lowerLimit","normalizeTableRanges","columns","prepareTable","typedTable","userTransactionAlive","cluster","get","state","concat","prepareTransaction","_objectSpread","livePreview","append","teleport","primary","foreign","typedFilters","groupTables","tables","currentGroup","group","forEach_","YPath","create","getKey","folder","toSubpath","stringify","groupKey","push","isFolder","Object","assign","err","console","error","prepareInput","TYPE","typedTables","$typedAttributes","prepareStderr","prepareCoredumps","coreTable","prepareOutput","prepareIntermediate","prepareScriptCaption","indexOf","substring","prepareScript","_environment","script","environment","className","jobCount","files","layerPaths","caption","prepareTasks","tasks","keys_","taskName","prepareVisibleItems","items","item","filterVisibleItems","itemsCount","_step","result","count","_iterator","_createForOfIteratorHelper","s","n","done","e","f","formatShare","hammer","format","significantDigits","prepareFaqUrl","docsUrl","docsUrls","replace","OperationSelector","data","_classCallCheck","$value","$attributes","pools","attributes","_objectWithoutProperties","_excluded","this","_createClass","key","RUNNING_STATES","PREPARING_STATES","INTERMEDIATE_STATES","trees","attrsPerPoolTree","poolsIndexes","schedulingInfo","tree","pool","treeData","isEphemeral","isLightweight","slotIndex","weight","_OperationSelector","_toConsumableArray","ListOperationSelector","_OperationSelector2","_this","_callSuper","title","user","suspended","input","output","startTime","finishTime","duration","jobs","completedJobs","runningJobs","failedJobs","totalJobs","completedJobsProgress","runningJobsProgress","jobsProgress","briefSpec","undefined","computeIOProperties","computePools","moment","progress","_typeof","completed","total","running","failed","_inherits","spec","io","res","remote","remoteInputUrl","DetailedOperationSelector","_OperationSelector3","typedData","_this2","alias","totalFailedJobs","failedJobsProgress","description","typedSpec","typedProvidedSpec","typedFullSpec","typedUnrecognizedSpec","live_preview","typedAttributes","fullSpec","runtimeAnnotations","hasVirtualPath","hasPath","suffix","basePath","utils","extractFirstByte","makeLivePreview","getActualValue","defaultValue","getFilterValue","_state$operations$job","operations","getShowCompetitiveJobs","createSelector","filterBy","jobId","isOperationId","idSection","RegExp","test","isGotoEnabled","aliasRegexp","getOperationErasedTrees","detail","rawTrees","reduce_","acc","getOperationAlertEvents","details","alert_events","appeared","alert_type","code","getNumberDeprecated","NaN","to","time","from","getOperation","getOperationId","getOperationTasks","getOperationTasksNames","sort","getOperationDetailsLoadingStatus","loading","loaded","calculateLoadingStatus","getOperationTypedAttributes","getOperationJobsLoadingStatus","monitorChartStates","states","getOperationExperimentAssignments","getOperationMonitoredJobCount","getOperationJobsMonitorTabSettings","jobsCount","visible","maxJobCount","selectIsOperationInGpuTree","treeConfigs","every","config","main_resource","getOperationPerformanceUrlTemplate","getClusterUiConfig","operationId","uiConfig","operationPerformanceUrlTemplate","operation_performance_url_template","formatByParams","url_template","operation_id","cancelHerlper","CancelHelper","toaster","Toaster","operationDetailsRequests","dispatch","getState","isAlias","params","include_scheduler","output_format","TYPED_OUTPUT_FORMAT","operation_alias","GET_OPERATION","REQUEST","ytApiV3","parameters","setup","JSONSerializer","then","checkUserTransaction","_ref2","_ref3","_slicedToArray","operationAttributes","preparedAttributes","prepareAttributes","dispatchOperationSuccess","actions","prepareActions","specification","network","prepareRemote","transferTask","mode","genNavigationUrl","stderr","intermediate","coredumps","mapper","reducer","reduceCombiner","prepareSpecification","alerts","helpURL","prepareAlerts","prepareError","runtime","treeFairShareInfo","treeName","prepareRuntime","events","prepareOperationEvents","resources","statistics","estimatedInputStatistics","dataFlow","source_name","target_name","job_data_statistics","teleport_data_statistics","info","reduce","jobStat","teleportStat","tasksIndexMap","_ref","task_name","prepareGraphDataByTasks","dataFlowGraph","jobTypeOrder","fromJobType","toJobType","prepareGraphData","prepareCompletedUsage","forEachYTError","_attributes$$value","job_id","dst","getCluster","_type_tag","href","window","location","origin","text","SUCCESS","_getOperationJobsMoni","JOBS_MONITOR","ytApiV3Id","listJobs","YTApiId","listJobs100","limit","with_monitoring_descriptor","cancellation","removeAllAndSave","isCancelled","CANCELLED","FAILURE","_ref5","_asyncToGenerator","_regeneratorRuntime","mark","_callee2","treeNames","limits","configs","wrap","_context2","prev","next","map","i","executeBatch","operationTreeConfigs","requests","USE_CACHE","sent","wrapApiPromiseByToaster","toasterName","skipSuccessToast","batchType","errorTitle","OPERATION_DETAIL_PARTIAL","resource_limits","stop","_x2","apply","arguments","inIntermediateState","callback","_callee","outputTransaction","_context","LOAD_RESOURCE_USAGE","abrupt","operationIntermediateResourceUsage","intermediateResources","account","_x","loadIntermediateResourceUsage","isFirstLoading","YTErrors","add","autoHiding","theme","content","message","label","onClick","showErrorPopup","getOperationsListFilters","list","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","filter","pool_tree","with_failed_jobs","getOperationsListTimeRange","_state$operations$lis2","timeRange","to_time","from_time","getOperationsListFiltersParameters_FOR_YTFRONT_2838","getCurrentUserName","login","_clusterConfig$operat","getClusterConfigByName","operationPageSettings","disableOptimizationForYTFRONT2838","rest","getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838","fixedFilters","isEqual_","getDefaultToTime","currentTime","dataMode","OPERATIONS_DATA_MODE","ARCHIVE","toISOString","getDefaultFromTime","subtract","getListRequestParameters","getFilterParameters","cursor_time","_operations$list$curs","cursor","cursor_direction","direction","include_archive","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","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","block","cn","preparePoolsState","prepareWeightsState","String","renderPoolsAndWeights","weights","setPools","setWeights","_ref4","Page","SCHEDULING","_jsxs","Fragment","children","_jsx","TextInput","onUpdate","_defineProperty","Link","mapDispatchToProps","hideEditPoolsWeightsModal","HIDE_EDIT_WEIGHT_POOL_MODAL","setPoolsAndWeights","pathItems","pathname","split","inOperationsList","OPERATIONS","poolTrees","SET_PULLS_AND_WEIGHTS","old","Number","updateOperationParameters","_parameters","scheduling_options_per_pool_tree","connect","_operations$page$edit","page","editWeightModal","errorData","props","_useState","useState","_useState2","_useState3","_useState4","useEffect","Modal","size","footer","confirmText","onConfirm","onCancel","isConfirmDisabled","isStateCorrect","isWeightCorrect","every_","isNaN","isPoolCorrect","Yson","inline","YTErrorBlock","OperationProgress","_Component","_this$props","onLinkClick","jobsByStateTitle","routed","renderCounter","isPreparing","_this$props2","showState","_this$props2$operatio","StatusLabel","renderState","Progress","progressBar","stack","renderProgressBar","renderFailedProgressBar","renderJobCounters","renderFailedJobCounters","Component","defaultProps","PathItem","transaction_id","user_transaction_id","_React$useState","React","_React$useState2","activeTransaction","setActiveTransaction","tableTx","isValidTransactionId","isTransactionAlive","ReadableField","OperationIOLink","renderTitle","getTitle","trimEnd_","unipika","decode","renderCopyTitle","ClipboardButton","view","UserPoolItem","awesomeIcon","Tooltip","allowUnmounted","Icon","face","awesome","OperationsListTable","_len","args","Array","_key","match","inputTx","outputTx","renderUserPool","multiplePools","SubjectCard","renderMultiplePools","TemplatePools","onEdit","compact","allowDetachEditBtn","TemplateWeight","renderActions","promptAction","action","icon","handler","currentOption","performAction","Button","withTooltip","tooltipProps","placement","settings","css","striped","virtualType","getItemLink","computeKey","sets","default","align","user_pool","start_time","templates","renderType","renderStartTime","renderProgress","initialLoading","ElementsTable","emptyDataDescription","isLoading","OperationType","withRouter","global","_operations$list","hasLoaded","tbBlock","OperationsTextFilter","transition","gotoDetails","setState","handleKeyDown","evt","target","stateValue","propsValue","activePreset","Redirect","Filter","placeholder","onChange","newValue","debounce","onKeyDown","pin","disabled","bForm","DISPLAY_FORMAT","TimePicker","PropTypes","_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","_useSelector","useSelector","store","_useSelector$timeRang","useDispatch","modalVisible","activeTypeValue","showModal","useCallback","hideModal","CURRENT","applyTimeRange","prepareText","updateDate","dateWithHours","mapValues_","field","_moment$toObject","toObject","minutes","updateTime","handleActiveTypeChange","ev","checked","cancelText","cl","CustomRadioButton","values_","Datepicker","newFrom","newTo","renderCustomCancel","SelectButton","selected","OperationSelectFilter","onRadioChange","val","onCheckChange","withCounters","found","stateName","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","Pagination","first","previous","hotkeyHandler","hotkeyScope","hotkey","last","where","_getState$operations$","getOperationsListIsFinalState","hasError","status","isFinalLoadingStatus","getOperationsListFilterPresets","getSettingsDataRaw","collectionKeys","keys","startsWith","NAMESPACES","OPERATION_PRESETS","OPERATIONS_LIST_RUNNING_PRESET","preconfigured","OPERATIONS_LIST_DEFAULT_FILTERS","createPreconfiguredPresets","collection","slice","NS_SEPARATOR","getOperationsListActivePresets","selectedFilters","presets","presetId","k","_selectedFilters$key","Set","ELEMENT","OperationsFilterPresets","presetName","isPresetDefault","saveFilterPreset","_this$state","makeRemoveHandler","event","stopPropagation","removeFilterPreset","isPresetNameEmpty","applyFilterPreset","defaultPreset","search","_this$props3","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","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","width","hasClear","OperationsAccessibleForFilter","tbComp","OperationsListToolbar","_React$PureComponent","permission","toUpperCase","join","PoolTreesLoader","failedJobsFilter","OperationsSelectFilter","preparePermissionsPlaceholder","show","StickyContainer","hideShadow","keepWidth","sticky","stickyTop","stickyTopClassName","renderTopSection","renderBottomSection","renderWarning_uiissue_2838","OperationsListToolbarHooked","subjects","handleUpdateFilter","handleToggleSaveFilterPresetDialog","OperationListUpdater","useMemoizedIfEqual","updateFn","useUpdater","onlyOnce","isBigTimeRange","dateFrom","diff","asDays","OperationsList","prevTimeRange","_this$props$error","inDashboard","renderError","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","max","step","Math","serieData","timeline","genYagrData","graphs","v","color","getSerieColor","formatter","renderOptions","gap","libraryConfig","axes","x","values","_d","y","scales","tooltip","render","tooltipData","_renderTooltip","_tooltipData$scales","originalValue","rows","YTChartKitLazy","x0","x1","calculateFormatSettings","fmtFn","v2","opts","digits","PartitionSizes","_React$Component","formatX","formatSettings","Bytes","ErrorBoundary","PartitionSizesConnected","chartKitTheme","getTheme","connector","PartitionSizesWithRum","loadState","OPERATION_TAB_PARTITION_SIZES","additionalStartType","addI18Keysets","en","ru","i18n","row","Readable","Template","Time","valueFormat","ClickableText","hideOopsMsg","AlertEvents","allVisible","setAllVisible","all","l","r","compareWithUndefined","toggleShowAll","DataTableYT","displayIndices","sortable","useThemeYT","disableRightGap","rowClassName","current","Description","prepareSettings","escapeWhitespace","_unipika$utils$yson","yson","isWithoutTags","hasOwnProperty","call","CollapsableText","MetaTable","renderAsMap","renderMetaTable","renderAsYSON","METRICS","virtual","completedTableProps","withActions","prepareTableColumns","row_count","compressed_data_size","uncompressed_data_size","data_weight","chunk_count","intermediateTableProps","disk_space","node_count","resourceAsBytes","columnName","resourceAsNumber","expandKey","prepareState","allowExpand","expandedTasks","expanded","inner","DataFlow","prevProps","self","fromTo","expKey","toggleExpand","ExpandIcon","ClickableAttributesButton","columnsMode","getResourceTemplates","headingBlock","CollapsibleTable","heading","allItemsCount","renderToggler","renderHeading","withCollapsible","tableProps","tags","inputTableProps","outputTableProps","stderrTableProps","specificationBlock","scriptProps","isRequired","Specification","TemplateTransferTask","_ref3$fields","TemplateCommand","lineCount","TemplateEnvironment","environments","TemplateFiles","TemplateLayerPaths","paths","TemplateLivePreivew","renderScript","_this$props$specifica","renderTransferTask","renderRemote","renderStartedBy","renderIO","renderIntermediate","renderTasks","runtimeBlock","StarvingStatus","starvation_status","Runtime","handlePoolEditClick","_config$resource_limi","_progress$detailed_fa","_progress$resource_us","_progress$resource_de","_progress$partitions","_progress$partitions2","find","detailed_fair_share","fair_share","isGang","Flex","OperationPool","alignItems","CircleQuestionIcon","FormattedValue","fifo_index","isAbsoluteValue","digitsOnlyForFloat","fair_share_ratio","resource_usage","usage_ratio","resource_demand","demand_ratio","dominant_resource","scheduling_status","scheduling_segment","partitions","renderTree","JobCounters","helpUrl","allowHideEmpty","hideEmpty","setHideEmpty","JobCoutnersSection","filterValues","DetailedJobsCounter","scheduledCounters","scheduled","scheduledItems","nonScheduledCounters","nonScheduled","nonScheduledItems","Scheduled","nonInterruptedItems","nonInterrupted","interruptedCounters","interrupted","Interrupted","renderAborted","abortedStats","renderCompleted","completedStats","secondary","primaryValue","secondaryValue","handleClose","handleShow","modalContent","renderModalContent","renderCount","onOutsideClick","withVisible","sortCounters","reasonA","reasonB","compareVectors","prepareCategoryCounters","category","prepareCompletedStatistics","prepareAbortedStatistics","aborted","prepareCounters","tasksTablesProps","job_type","prepareColumns","fieldTreeForEach","vertex","isT","visitorCb","forEach","pop","filterFieldTree","predicate","filterT","empty","tmp","fieldTreeSome","some","getOperationDetailsOperation","getOperationStatisticsV2","isStatisticItem","getOperationStatisticsAvailableValues","_stats$time$total","_stats$time","_construct","getOperationStatisticsActiveFilterValues","jobTypeFilter","poolTreeFilter","filterText","activeJobType","STATISTICS_FILTER_ALL_VALUE","activePoolTree","getOperationStatiscsHasData","isEmpty_","getOperationStatisticsFilteredTree","checkByName","_ref3$tags","getOperationStatisticsFiltered","_tree","isLeafNode","level","itemToRow","summary","job_state","c","sum_","sum","min_","max_","mergeSummary","getTotalJobWallTime","_tree$time","excludeRunningAndCalcSum","_itemToRow","valuesToSum","compact_","NO_VALUE","CPU_TIME_SPENT_PART_NAMES","getTotalCpuTimeSpent","get_","getOperationDetailTasksData","_stats$time$total2","_stats$time2","_timeStatistics$abort","_timeStatistics$compl","job_counter","jobType","totalCounters","isTotal","prepareDataFromGraphByTasks","countersByType","prepareJobTypeOrder","taskType","jobTypeInfo","prepareDataFromGraph","_itemToRow2","timeStatistics","_excluded2","abortedJobsTime","completedJobsTime","abortedJobsTimeRatio","abortedJobsShare","prepareAbortedJobsTimeRatio","averageReadDataRate","_itemToRow$completed$","_itemToRow$completed","_stats$data","completedInputSize","prepareAverageReadDataRate","averageReadRowRate","_itemToRow$completed$2","_itemToRow$completed2","_stats$data2","completedInputRows","prepareAverageReadRowRate","expandedState","visibleItems","taskInfo","Tasks","allowActions","__default__","column","_item$abortedStats","_item$completedStats","TaskInfo","_self$state","expandable","clickable","_rowIndex","colIndex","_jobs$items","collapsibleSize","collapsed","CollapsibleSection","marginDirection","renderContent","_this$props$jobs","measure","colSpan","prevOperation","prevItems","has_user_job","input_finished","user_job_memory_reserve_factor","completion_time","ready_time","exhaust_time","readyTime","exhaustTime","timeSum","Value","Details","handleSwitchChange","handleEditClick","OperationDescription","alertEvents","isVanillaGpuOperation","disableLogger","overview","renderRuntimeOverview","Switch","_this$props5","_this$props6","_this$props7","Events","renderDescription","renderSpecification","renderRuntime","renderResources","renderEvents","renderAlerts","renderJobs","DetailsConnected","UI_COLLAPSIBLE_SIZE","DetailsWithRum","OPERATION_TAB_DETAILS","StarTrackLink","_props$emptyContent","emptyContent","trackerBaseUrl","uiSettings","_Fragment","ExperimentAssignments","ExperimentsItem","ExperimentAssignmentsItem","setCollapsed","onToggleCollapse","CollapsibleSectionStateLess","onToggle","_React$useState3","_React$useState4","effectVisible","setEffectVisibility","_ypath$getValue","effect","fraction","getOperationExperimentsYsonSettings","toggleEffectVisibility","dispatchEvent","Event","folding","virtualized","extraTools","YsonDownloadButton","onResize","throttle_","leading","SpecificationConnected","providedSpec","unrecognizedSpec","hasUnrecognized","provided","unrecognized","resulting","onToggleProvided","onToggleUnrecognized","onToggleResulting","HelpLink","SpecificationWithRum","OPERATION_TAB_SPECIFICATION","JobSizes","showEstimated","toggleEstimated","WithStickyToolbar","toolbar","Toolbar","itemsToWrap","node","estimatedJobSizeHistogram","jobSizeHistogram","estimated_input_data_weight_histogram","input_data_weight_histogram","renderChart","_this$prepareJobSizes","prepareJobSizes","hasTaskHistograms","renderPerTaskCharts","renderCommon","JobSizesConnected","JobSizesWithRum","OPERATION_TAB_JOB_SIZES","STATISTIC_STATE","lost","statisticsTableProps","metric","useStatisticInfo","getStatisticInfo","getOperationStatisticsDescription","OperationStatisticNameImpl","StatisticName","OperationStatisticValueImpl","asStr","formatByUnit","unit","asNumber","inlineMargins","OperationStatisticValue","OperationStatisticName","statisticsBlock","toolbarBlock","Statistics","collapseTable","setTreeState","TREE_STATE","COLLAPSED","expandTable","EXPANDED","_this$props$activeAgg","activeAggregation","_columnName","toggleItemState","itemState","offsetStyle","paddingLeft","style","togglerIconName","itemIconName","_item$data","jobTypes","DEBOUNCE_DELAY","changeFilterText","RadioButton","changePoolTreeFilter","makeRadioButtonProps","changeJobType","changeAggregation","AGGREGATOR_RADIO_ITEMS","treeState","renderToolbar","WaitForFont","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","getJobsOperationIncarnationsFilter","jobsOperationIncarnations","getJobsOperationIncarnationsValues","availableValues","cancelHelper","getJob","clusterConfig","getCurrentClusterConfig","removeAllRequests","getJobRequestParameters","saveCancelToken","job","GET_JOB","getCompetitiveJobs","getCompetitiveJobsRequestParameters","GET_COMPETITIVE_JOBS","getJobsRequestParameters","offset","pagination","sortState","OPERATION_JOBS_TABLE_ID","incarnation","address","with_stderr","with_interruption_info","with_fail_context","with_spec","with_competitors","sort_field","sort_order","asc","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","inputPaths","UPDATE_OFFSET","JobTemplate","Error","showErrorModal","InputPaths","DebugInfo","getDebugInfo","DownloadLink","prepareStatistics","endsWith","TimeDuration","textAlign","JobDetails","_ypath$getValues","getValues","_ypath$getValues2","rowCount","dataSize","xmlns","fill","viewBox","fillRule","d","clipRule","StatusInfo","_useToggle","useToggle","_useToggle2","open","toggleOpen","anchorRef","useRef","reason","preemption_reason","interruption_reason","onMouseEnter","Label","ref","Popup","hasArrow","onMouseLeave","OperationJobsTable","modalKey","successMessage","errorMessage","confirmationText","PLEASE_PROCEED_TEXT","successMessageTemplate","prepareJobAction","jobActionPromise","getMetrics","countEvent","abortJob","abandonJob","temporaryPathBase","recursive","ignore_existing","temporaryPath","createTemporaryPath","dumpJobContext","performJobAction","preparedActions","renderIdAddress","is_stale","host","monitoring_descriptor","isSpeculativeJob","StaleJobIcon","ChartLink","makeUrlForMonitoringDescriptor","renderErrorAndDebug","areInputPathsPresent","has_spec","openAttributesModal","button","EllipsisIcon","firstGroup","secondGroup","DropdownMenu","switcher","id_address","finish_time","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","setFilter","updateJobsOperationIncarnationFilter","hideClear","extractJobTypes","sortInPredefinedOrder","OperationJobsToolbar","taskNames","allTaskNames","JobsFilterBy","JobsSelectFilter","JobsAttributesFilter","OperationJobsErrors","Jobs","timeout","LoadDataHandler","alwaysShowError","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","selectJobs","jobsTimeline","selectLoading","selectInterval","interval","selectFilter","selectActiveJob","selectedJob","selectJobsOverloadError","jobsCountError","selectError","selectEventsInterval","eventsInterval","isFinite","selectJobsEmptyError","selectJobsInIntervalByGroup","groupName","selectJobGroupsCount","getSelectedJob","activeJob","selectIntervalsIsSame","eInterval","getJobsWithEvents","firstRequest","sameIntervals","listResponse","_error","setLoading","setError","setJobsCountError","getBatchError","jobEvents","maxTime","Date","now","dayjs","at","minTime","percent","timeLineJob","cookieId","job_cookie","allocationId","allocation_id","eventsCount","stateIndex","prevEvent","endTime","phases","phase","lastEventIndex","Infinity","setJobs","setInterval","t0","TimeLineHeader","ChevronsExpandToLinesIcon","RangeDateSelection","dateTimeParse","end","displayNow","hasScaleButtons","getPhaseColor","PhaseNameCell","getDateTime","toString","EventsTable","useMemo","prevTime","eventPhase","Table","relativeTime","MetaData","showCopyButton","Text","asMilliseconds","EventsSidePanel","onClose","panelRef","handleDocumentClick","contains","document","addEventListener","removeEventListener","justifyContent","variant","XmarkIcon","getColorByState","getCssColor","EventDisplayMode","getTimeLineDisplayMode","timeLineId","_ref$filter","_ref$selectedJob","hasFilter","hasSelectedJobs","matchesFilter","includes","isSelected","SelectedFound","Found","Selected","Transparent","Default","convertToRGBA","colorString","opacity","g","b","a","normalizedColor","hex","parseInt","colorValues","parseFloat","DEFAULT_COLOR","JobLineRenderer","_AbstractEventRendere","ctx","rawX0","rawX1","_","timeToPosition","displayMode","parts","y0","yaTimelineConfig","LINE_HEIGHT","_this$getFixedXCoordi","getFixedXCoordinates","isTransparent","renderFilterBackground","startX","percentage","phaseCount","_phases$i$phase","startPosition","endPosition","lineColor","beginPath","fillStyle","rect","moveTo","lineTo","closePath","renderSelectedBorder","borderThickness","SELECTION_OUTLINE_THICKNESS","borderColor","resolveCssValue","SELECTION_OUTLINE_COLOR","backgroundColor","PRIMARY_BACKGROUND_COLOR","borderX0","borderWidth","borderY0","borderHeight","strokeStyle","lineWidth","stroke","innerBorderX0","innerBorderY0","innerBorderWidth","innerBorderHeight","_event","_this$getFixedXCoordi2","hitboxResult","left","right","AbstractEventRenderer","AllocationLineRenderer","__","EventTimelineTooltip","top","disablePortal","EventTimelineTooltipContentRow","EventTimelineTooltipContent","metaData","phaseItems","ac","eventDuration","arr","EventCanvas","_YaTimeline","renderersList","set","scheduleTimelineRender","getComponent","BasicEventsProvider","setEvents","setSelectedEvents","_theme","setTimelineConfig","offsetHeight","_superPropGet","renderer","registerRenderer","Grid","Axes","OVERLAPPING_THRESHOLD","SKIP_OVERLAPPING","getCSSPropertyValue","TRACK_HEIGHT","YaTimeline","customElements","define","Timeline","wrapWc","EventsTimeline","timelines","rowHeight","onTimelineClick","onBoundsChanged","renderers","useThemeValue","hoverEvent","setHoverEvent","debouncedSetHoverEvent","debounce_","handleLeftEvent","handleHoverEvent","handleEventClick","scrollTopChanged","height","selectedEvents","eventsSelected","leftEvent","isZoomAllowed","boundsChanged","TimelineTable","FileIcon","ellipsis","GroupCollapse","_ref$open","isOpen","ChevronDownIcon","Wrap","collapse","TimelineBlock","tableItems","JobsGroups","jobGroups","groupsCount","timelineId","handleTimeLineClick","setSelectedJob","axisId","handleBoundsChanged","newInterval","handleSidePanelClose","handleSidePanelOutsideClick","Element","localName","_useSidePanel","useSidePanel","openWidget","closeWidget","widgetContent","groups","readableGroupName","_prepareJobTimeline","_ref$axesRowHeight","axesRowHeight","allocationMap","Map","validJobs","firstEvent","lastEvent","jobStartTime","jobEndTime","existingAllocation","_step2","allocations","entries","allocation","trackIndex","_iterator2","tracksCount","prepareJobTimeline","_e$detail","jobEvent","JobsTimeline","firstUpdate","eventsRange","overloadError","emptyError","handleUpdate","Alert","padding","detailBlock","OperationDetailUpdater","SpecialWaitingStatus","iconState","renderPlaque","OperationDetail","handlePoolsEditClick","renderAction","onProgressLinkClick","jobState","_this$props3$actions","isGpuOperation","_operation$user","_getSpecialWaitingSta","_runtime$","_runtime$2","_runtime$3","fairShareRatio","usageRatio","demandRatio","isSingleTree","isSpecialStatus","isWaitingForResources","isWaitingForJobs","getSpecialWaitingStatuses","mainStatusProps","totalJobWallTime","cpuTimeSpent","erasedTrees","_operation$user2","isGpuVanillaOperation","Id","operationRefId","_this$props5$match$pa","activeTab","tab","hasStatististicsTab","jobsMonitorVisible","monitorTabVisible","monitorTabTitle","monitorTabUrlTemplate","timelineTabVisible","pyDLTelemetryTabVisible","showSettings","getDetailsTabsShowSettings","Tab","STATISTICS","MONITOR","JOBS_TIMELINE","PYDL_TELEMETRY","PERFORMANCE","external","_operation$pools","monTab","firstPoolInfo","operationMonitoringUrl","urlTemplate","makeTabProps","Tabs","routedPreserveLocation","UI_TAB_SIZE","_UIFactory$PyDLTeleme","jobsMonitorIsSupported","monitoringComponent","PyDLTelemetry","PyDLTelemetrySetup","renderPyDLTelemetry","Route","ATTRIBUTES","DETAILS","SPECIFICATION","JOBS","JOB_SIZES","PARTITION_SIZES","Placeholder","DEFAULT_TAB","renderAlias","_match$params","redirectPath","renderHeader","renderOverview","renderTabs","renderMain","_this$props8","_UIFactory$PyDLTeleme2","_state$operations$det","getMonitoringForOperation","hasTelemtery","getCurrentCluster","getSettingsTimelineTabVisible","OperationDetailConnected","OperationDetailsWithRum","viewContext","DASHBOARD_VIEW_CONTEXT","PoolsWeightsEditModal","exact","withLazyLoading","COLORS","serieIndex","_ref$getPathProps","getPathProps","exactPath","attribute","_ref$withTooltip","_ref$tooltipProps","AttributesButton","pathProps","onClickCb","AlertContext","useAlertContext","context","AlertAction","bAlert","AlertContextProvider","layout","Provider","typeToIcon","danger","filled","outlined","CircleInfo","success","CircleCheck","TriangleExclamation","utility","Thunderbolt","normal","addComponentKeysets","corners","qa","Card","spacing","py","px","grow","Title","Actions","extraProps","I","Xmark","colorText","iconByTheme","minContent","Action","datepickerDefaultProps","initializing","preparing","pending","materializing","completing","reviving","reviving_jobs","DEFAULT_MODE","WITH_ACTIONS_MODE","getEventsTableProps","showActions","eventsTableProps","header","getEventsGeneralProps","odBlock","compose","withStickyHead","withStickyFooter","ElementsTableBase","_columns$columnName","isFinalState","isNotFinalState","_getValue","eventsItems","totalRow","showAttributesColumn","module","exports","t","o","u","h","years","months","days","seconds","milliseconds","weeks","$l","m","p","$","ceil","floor","abs","negative","$d","$ms","parseFromMilliseconds","calMilliseconds","prototype","round","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","as","locale","clone","humanize","fromNow","asSeconds","asMinutes","asHours","asWeeks","asMonths","asYears","$utils","isDuration","bind","useRouteMatch","WarningIcon","hoverContent","toggleColumnSortOrder","_WithStickyHead","WithStickyHead","bWrapper","prepareTableClassName","ElementsTableHeader","renderStickyHead","displayName","getDisplayName","padded","HEADER_HEIGHT","useRumMeasureStart","subPage","ElementsTableFooter","itemHeight","itemMods","selectedIndex","cssHover","columnSet","columnItems","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","renderRow","_prepareColumnsData","prepareColumnsData","_WithStickyFooter","WithStickyFooter","renderStickyFooter","mappedState","_states","starting","failing","aborting","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","unknown","getIcon","mods","withSplit","_WithSplit","WithSplit","ReactDOM","getElementById","SPLIT_PANE_ID","hideIcon","wrapContent","warnAboutPhysicalValues","propName","warn","normalizeSides","side","constructor","super","activeScrollElement","columnsStyles","columnHeaderRefs","tableRef","scrollContainerRef","horizontalScrollBarRef","horizontalScrollBarInnerRef","rowIndex","isRowDisabled","onRowClick","onRowMouseEnter","onRowMouseLeave","onRowMouseDown","getRowClassNames","verticalAlign","edgePadding","wordWrap","getRowDescriptor","descriptor","additionalClassNames","classNames","interactive","onMouseDown","rawAlign","rawSticky","getBodyCellContent","getRowId","handleScrollContainerMouseenter","handleScrollContainerScroll","scrollLeft","handleHorizontalScrollBarMouseenter","handleHorizontalScrollBarScroll","getHeadCellContent","placeholderValue","getDerivedStateFromProps","componentDidMount","stickyHorizontalScroll","tableResizeObserver","ResizeObserver","_a","contentRect","setProperty","observe","columnsResizeObserver","requestAnimationFrame","updateColumnStyles","componentDidUpdate","componentWillUnmount","disconnect","withPrimary","renderTable","renderHorizontalScrollBar","renderHead","renderBody","renderEmptyRow","emptyMessage","stickyHorizontalScrollBreakpoint","bottom","columnsWidth","getBoundingClientRect","getColumnStyles","maxWidth","filteredColumns","_this$props2$alwaysSh","SidePanelPortal","widgetOpened","setWidgetOpened","splitScreen","mergeScreen","future","past","hh","dd","yy","fromToBase","$locale","thresholds","rounding","$u","utc","toNow","usePoolTreesLoaded","loadPoolTreesIfNotLoaded","useDefaultPoolTree","defaultPoolTree","setDefaultPoolTree","loadDefaultPoolTree","WaitForDefaultPoolTree","ColorCircle","_ref$marginRight","marginRight"],"sourceRoot":""}
|