@ytsaurus/ui 2.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +39 -39
- package/dist/public/build/css/{9030.30b67fe6.chunk.css → 3792.a5336147.chunk.css} +1 -1
- package/dist/public/build/css/{9030.30b67fe6.chunk.css.map → 3792.a5336147.chunk.css.map} +1 -1
- package/dist/public/build/js/2142.9a9a44af.chunk.js +2 -0
- package/dist/public/build/js/2142.9a9a44af.chunk.js.map +1 -0
- package/dist/public/build/js/3225.0ca5646d.chunk.js +2 -0
- package/dist/public/build/js/3225.0ca5646d.chunk.js.map +1 -0
- package/dist/public/build/js/{9030.200c7642.chunk.js → 3792.1af8dc36.chunk.js} +2 -2
- package/dist/public/build/js/{9030.200c7642.chunk.js.map → 3792.1af8dc36.chunk.js.map} +1 -1
- package/dist/public/build/js/3848.db687afa.chunk.js +2 -0
- package/dist/public/build/js/3848.db687afa.chunk.js.map +1 -0
- package/dist/public/build/js/{9361.f5606246.chunk.js → 9361.632ac658.chunk.js} +3 -3
- package/dist/public/build/js/9361.632ac658.chunk.js.map +1 -0
- package/dist/public/build/js/acl.86dde5b4.chunk.js +2 -0
- package/dist/public/build/js/acl.86dde5b4.chunk.js.map +1 -0
- package/dist/public/build/js/{chart-kit.6c826f92.chunk.js → chart-kit.bc706a72.chunk.js} +2 -2
- package/dist/public/build/js/{chart-kit.6c826f92.chunk.js.map → chart-kit.bc706a72.chunk.js.map} +1 -1
- package/dist/public/build/js/{cluster-page-wrapper.24759f54.chunk.js → cluster-page-wrapper.69410672.chunk.js} +2 -2
- package/dist/public/build/js/{cluster-page-wrapper.24759f54.chunk.js.map → cluster-page-wrapper.69410672.chunk.js.map} +1 -1
- package/dist/public/build/js/{dashboard.5baf76be.chunk.js → dashboard.705aef5e.chunk.js} +2 -2
- package/dist/public/build/js/{dashboard.5baf76be.chunk.js.map → dashboard.705aef5e.chunk.js.map} +1 -1
- package/dist/public/build/js/{incarnations.db35d3e7.chunk.js → incarnations.b6c8305d.chunk.js} +2 -2
- package/dist/public/build/js/incarnations.b6c8305d.chunk.js.map +1 -0
- package/dist/public/build/js/main.2691b74a.js +3 -0
- package/dist/public/build/js/main.2691b74a.js.map +1 -0
- package/dist/public/build/js/navigation.b95d53a4.chunk.js +2 -0
- package/dist/public/build/js/navigation.b95d53a4.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.0bd241cc.js → runtime.cd2507d5.js} +2 -2
- package/dist/public/build/js/{runtime.0bd241cc.js.map → runtime.cd2507d5.js.map} +1 -1
- package/dist/public/build/js/settings-panel.5508764a.chunk.js +2 -0
- package/dist/public/build/js/settings-panel.5508764a.chunk.js.map +1 -0
- package/dist/public/build/js/{yt-df-dialog.3c75c1c6.chunk.js → yt-df-dialog.d8b77493.chunk.js} +3 -3
- package/dist/public/build/js/yt-df-dialog.d8b77493.chunk.js.map +1 -0
- package/dist/public/build/js/yt-queries-list.9b028808.chunk.js +2 -0
- package/dist/public/build/js/yt-queries-list.9b028808.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +34 -34
- package/package.json +2 -2
- package/dist/public/build/js/2142.e3f4501e.chunk.js +0 -2
- package/dist/public/build/js/2142.e3f4501e.chunk.js.map +0 -1
- package/dist/public/build/js/3225.1bafd8e7.chunk.js +0 -2
- package/dist/public/build/js/3225.1bafd8e7.chunk.js.map +0 -1
- package/dist/public/build/js/3792.87728e87.chunk.js +0 -2
- package/dist/public/build/js/3792.87728e87.chunk.js.map +0 -1
- package/dist/public/build/js/9361.f5606246.chunk.js.map +0 -1
- package/dist/public/build/js/acl.ad72cb19.chunk.js +0 -2
- package/dist/public/build/js/acl.ad72cb19.chunk.js.map +0 -1
- package/dist/public/build/js/incarnations.db35d3e7.chunk.js.map +0 -1
- package/dist/public/build/js/main.10db4a06.js +0 -3
- package/dist/public/build/js/main.10db4a06.js.map +0 -1
- package/dist/public/build/js/navigation.dd0f8fc8.chunk.js +0 -2
- package/dist/public/build/js/navigation.dd0f8fc8.chunk.js.map +0 -1
- package/dist/public/build/js/settings-panel.4be91fef.chunk.js +0 -2
- package/dist/public/build/js/settings-panel.4be91fef.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.3c75c1c6.chunk.js.map +0 -1
- package/dist/public/build/js/yt-queries-list.e40d766e.chunk.js +0 -2
- package/dist/public/build/js/yt-queries-list.e40d766e.chunk.js.map +0 -1
- /package/dist/public/build/js/{9361.f5606246.chunk.js.LICENSE.txt → 9361.632ac658.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.10db4a06.js.LICENSE.txt → main.2691b74a.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{yt-df-dialog.3c75c1c6.chunk.js.LICENSE.txt → yt-df-dialog.d8b77493.chunk.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"js/3792.87728e87.chunk.js","mappings":"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","sources":["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/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/pages/operations/selectors.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/list.js","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.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/helpers/canRenderAsMap.ts","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/i18n/index.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/./node_modules/@gravity-ui/timeline/build/enums/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/helpers/math.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/lib/AxesIndex.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Axes.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/constants/timeConstants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/constants/ruler.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Ruler.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/constants/grid.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Grid.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/lib/utils.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Events/AbstractEventRenderer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Events/DefaultEventRenderer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Events/Events.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/constants/colors.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/constants/options.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/CanvasApi.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/TimelineController.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Markers/AbstractMarkerRenderer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Markers/DefaultMarkerRenderer.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/components/Markers/Markers.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/Timeline.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getPhaseColor.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/isFinalState.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/SidePanelEmpty.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsSidePanel/EventsSidePanel.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/enums/index.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/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContentRow.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContent.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/react-components/TimelineCanvas.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/timeline/build/react-components/hooks/useTimelineEvent.js","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/GroupCollapse.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventPopup.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/TimelineBlock.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getJobTrackId.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/IncarnationMarkerRenderer.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/helpers/getColorByState.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/AllocationLineRenderer.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getTimeLineDisplayMode.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/prepareJobEvents.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/OperationTimeline/OperationTimeline.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/OperationTimeline/createTimelineConfig.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/prepareAxes.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/prepareMarkers.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/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/store/actions/global/fonts.ts","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/StaleJobIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Label/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Label/Label.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Ellipsis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronLeft.js","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withSplit.tsx","webpack://@ytsaurus/ui/./node_modules/fontfaceobserver/fontfaceobserver.standalone.js","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/./node_modules/dayjs/plugin/relativeTime.js","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronRight.js","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/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenu.classname.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useListNavigation/moveBack.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useListNavigation/moveForward.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuNavigationContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/isSeparator.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/shouldSkipItemNavigation.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/stringifyNavigationPath.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuPopup.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useListNavigation/useListNavigation.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/isSubmenuOpen.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/hooks/useSubmenu.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/toItemList.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenu.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/hooks/usePopupVisibility.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/private/useConditionallyControlledState/useConditionallyControlledState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/private/useStateWithCallback/useStateWithCallback.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/utils/typeCheckers.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/hooks/useScrollHandler.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Menu/MenuGroup.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Menu/MenuItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Menu/Menu.js","webpack://@ytsaurus/ui/./src/ui/components/OperationType/OperationType.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx"],"sourcesContent":["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 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 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';\nimport {CypressNodeRaw} from '../../../shared/yt-types';\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 | CypressNodeRaw<Record<string, unknown>, unknown>;\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 {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 {getOperationMonitoredJobCount} from '../../../store/selectors/operations/operation';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\n\ntype JobsMonitorThunkAction = ThunkAction<unknown, RootState, unknown, JobsMonitorAction>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function getJobsMonitoringDescriptors(operation_id: string): JobsMonitorThunkAction {\n return (dispatch, getState) => {\n const jobsCount = getOperationMonitoredJobCount(getState());\n if (jobsCount === 0) {\n return undefined;\n }\n\n dispatch({type: JOBS_MONITOR.REQUEST});\n\n return ytApiV3Id\n .listJobs(YTApiId.listJobs100, {\n parameters: {\n operation_id,\n sort_field: 'start_time',\n sort_order: 'descending',\n attributes: ['monitoring_descriptor', 'start_time', 'finish_time'],\n with_monitoring_descriptor: true,\n },\n cancellation: cancelHelper.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, {FC} from 'react';\nimport {useSelector} from 'react-redux';\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';\nimport {canRenderAsMap} from './helpers/canRenderAsMap';\nimport {getYsonSettingsDisableDecode} from '../../../../../store/selectors/thor/unipika';\nimport {DetailedOperationSelector} from '../../../selectors';\n\ntype Props = {\n description: DetailedOperationSelector['description'];\n};\n\nexport const Description: FC<Props> = ({description}) => {\n const settings = useSelector(getYsonSettingsDisableDecode);\n\n if (canRenderAsMap(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={settings} value={value[key]} />,\n }));\n\n return <MetaTable items={items} />;\n }\n\n return <Yson settings={settings} value={description} />;\n};\n","import unipika from '../../../../../../common/thor/unipika';\nimport {DetailedOperationSelector} from '../../../../selectors';\n\n// TODO support getting correct type in UNIPIKA (e.g. account for tagged type)\nexport const canRenderAsMap = (value: DetailedOperationSelector['description']) => {\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","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 {Description} 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 Boolean(description) && (\n <CollapsibleSection\n name=\"Description\"\n className={block('description')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Description 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';\nimport {TemplateTime} from '../../../../../../components/MetaTable/templates/TemplateTime';\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 <TemplateTime\n className={block('start-time')}\n time={item.startTime}\n valueFormat=\"DateTimeTwoLines\"\n />\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 <TemplateTime\n className={block('finish-time')}\n time={item.finishTime}\n valueFormat=\"DateTimeTwoLines\"\n />\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 MAX_DESCRIPTORS_COUNT = 200;\nexport const getUniqueJobsMonitorDescriptors = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (jobs) => {\n const descriptors = new Set(map_(jobs, 'monitoring_descriptor'));\n return [...descriptors];\n },\n);\n\nexport const getLimitedJobsMonitorDescriptors = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (jobs) => {\n const descriptors = new Set<string>();\n for (const job of jobs) {\n if (job.monitoring_descriptor && descriptors.size < MAX_DESCRIPTORS_COUNT) {\n descriptors.add(job.monitoring_descriptor);\n }\n if (descriptors.size >= MAX_DESCRIPTORS_COUNT) {\n break;\n }\n }\n return [...descriptors];\n },\n);\n\nexport const getJobsMonitorTabVisible = createSelector(\n [\n getOperationId,\n getJobsMonitorOperationId,\n getUniqueJobsMonitorDescriptors,\n getJobsMonitorError,\n ],\n (opId, jobMonId, jobsDescriptorArray, error) => {\n if (opId !== jobMonId) {\n return false;\n }\n if (!isEmpty_(error)) {\n return true;\n }\n\n return Boolean(jobsDescriptorArray.length);\n },\n);\n","import {addI18Keysets} from '../../../../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:operations-jobs-monitor', {en, ru});\n","import React, {useMemo} 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 MAX_DESCRIPTORS_COUNT,\n getJobsMonitorError,\n getJobsMonitorFromTo,\n getJobsMonitorItemsLoaded,\n getJobsMonitorItemsLoading,\n getLimitedJobsMonitorDescriptors,\n getUniqueJobsMonitorDescriptors,\n} from '../../../../../store/selectors/operations/jobs-monitor';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport UIFactory from '../../../../../UIFactory';\nimport {Alert, Flex} from '@gravity-ui/uikit';\n\nimport i18n from './i18n';\n\nfunction JobsMonitor() {\n const cluster = useSelector(getCluster);\n const allJobDescriptors = useSelector(getUniqueJobsMonitorDescriptors);\n const limitedJobDescriptors = useSelector(getLimitedJobsMonitorDescriptors);\n const {from, to} = useSelector(getJobsMonitorFromTo);\n const error = useSelector(getJobsMonitorError);\n const loaded = useSelector(getJobsMonitorItemsLoaded);\n const loading = useSelector(getJobsMonitorItemsLoading);\n\n const job_descriptor = useMemo(() => limitedJobDescriptors.join('|'), [limitedJobDescriptors]);\n\n const alert = useMemo(() => {\n return allJobDescriptors.length > MAX_DESCRIPTORS_COUNT ? (\n <Alert\n message={i18n('alert_descriptors-limited', {limit: MAX_DESCRIPTORS_COUNT})}\n theme=\"warning\"\n />\n ) : undefined;\n }, [allJobDescriptors]);\n\n if (!loaded && loading) {\n return <Loader visible centered />;\n }\n\n if (!job_descriptor && !error) {\n return <NoContent warning={i18n('alert_no-jobs-with-monitoring-descriptor')} />;\n }\n\n const JobMonitorComponent = UIFactory.getMonitorComponentForJob()!;\n\n return (\n <ErrorBoundary>\n <Flex direction=\"column\" gap={1}>\n {error && <YTErrorBlock error={error} />}\n <JobMonitorComponent {...{cluster, job_descriptor, from, to}} alerts={alert} />\n </Flex>\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 {getYsonSettingsDisableDecode} 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(getYsonSettingsDisableDecode);\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';\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 selectActiveIncarnation = (state: RootState) =>\n state.operations.jobsTimeline.selectedIncarnation;\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 selectSortedJobs = createSelector([selectJobs], (jobs) => {\n return [...jobs].sort((a, b) => {\n const groupNameComparison = a.groupName.localeCompare(b.groupName);\n\n if (groupNameComparison !== 0) {\n return groupNameComparison;\n }\n\n return Number(a.cookieId) - Number(b.cookieId);\n });\n});\n\nexport const getSelectedJob = createSelector([selectJobs, selectActiveJob], (jobs, activeJob) => {\n return jobs.find(({id}) => activeJob === 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 {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 operation_incarnation: 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 attributes: [\n 'events',\n 'state',\n 'job_cookie',\n 'task_name',\n 'start_time',\n 'finish_time',\n 'address',\n 'allocation_id',\n 'operation_incarnation',\n ],\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 result = jobs.reduce<Pick<JobsTimelineState, 'jobs' | 'eventsInterval'>>(\n (acc, job) => {\n // filter valid jobs\n if (!job?.events || job.job_cookie === undefined || !job.events.length)\n return acc;\n\n const jobEvents = job.events;\n const isRunning = job.state === 'running' || job.state === 'waiting';\n const isAborted = job.state === 'aborted';\n\n // stretch running job timeline\n const lastEventTime = dayjs(jobEvents.at(-1)!.time).valueOf();\n const finishTime = job.finish_time\n ? dayjs(job.finish_time).valueOf()\n : lastEventTime;\n\n let maxTime: number;\n if (isRunning) {\n maxTime = Date.now();\n } else if (isAborted) {\n maxTime = Math.max(lastEventTime, finishTime);\n } else {\n maxTime = lastEventTime;\n }\n\n const minTime = dayjs(jobEvents[0].time).valueOf();\n const percent = (maxTime - minTime) / 100;\n\n const timeLineJob: TimelineJob = {\n id: job.id,\n cookieId: job.job_cookie,\n incarnation: job.operation_incarnation,\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 if (isRunning || isAborted) {\n const lastEventIndex = timeLineJob.events.length - 1;\n const {startTime} = timeLineJob.events[lastEventIndex];\n\n // stretch running job timeline\n if (isRunning) {\n timeLineJob.events[lastEventIndex].endTime = Date.now();\n timeLineJob.events[lastEventIndex].percent =\n (Date.now() - startTime) / percent;\n }\n\n // set endTime to finish_time for aborted jobs\n if (isAborted) {\n const endTime = Math.max(finishTime, startTime);\n timeLineJob.events[lastEventIndex].endTime = endTime;\n timeLineJob.events[lastEventIndex].percent =\n (endTime - startTime) / percent;\n }\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 var ComponentType;\n(function (ComponentType) {\n ComponentType[\"Axes\"] = \"Axes\";\n ComponentType[\"Grid\"] = \"grid\";\n ComponentType[\"Ruler\"] = \"ruler\";\n ComponentType[\"Events\"] = \"events\";\n ComponentType[\"Markers\"] = \"markers\";\n})(ComponentType || (ComponentType = {}));\nexport var StrokeMode;\n(function (StrokeMode) {\n StrokeMode[StrokeMode[\"STRAIGHT\"] = 0] = \"STRAIGHT\";\n StrokeMode[StrokeMode[\"DASHED\"] = 1] = \"DASHED\";\n})(StrokeMode || (StrokeMode = {}));\nexport var TimelineState;\n(function (TimelineState) {\n TimelineState[TimelineState[\"INIT\"] = 0] = \"INIT\";\n TimelineState[TimelineState[\"READY\"] = 1] = \"READY\";\n})(TimelineState || (TimelineState = {}));\nexport var ZoomMode;\n(function (ZoomMode) {\n ZoomMode[\"NONE\"] = \"none\";\n ZoomMode[\"HORIZONTAL\"] = \"horizontal\";\n ZoomMode[\"DEFAULT\"] = \"default\";\n})(ZoomMode || (ZoomMode = {}));\nexport var MarkerDeselectionMode;\n(function (MarkerDeselectionMode) {\n MarkerDeselectionMode[\"ON_CLICK_ANYWHERE\"] = \"on_click_anywhere\";\n MarkerDeselectionMode[\"ON_MARKER_CLICK_ONLY\"] = \"on_marker_click_only\";\n})(MarkerDeselectionMode || (MarkerDeselectionMode = {}));\n","/**\n * Checks if a point is within a range (inclusive).\n * @param {number} point - The point to check\n * @param {number} x0 - The start of the range\n * @param {number} x1 - The end of the range\n * @returns {boolean} True if the point is within the range, false otherwise\n */\nexport function pointToRangeIntersect(point, x0, x1) {\n return point >= x0 && point <= x1;\n}\n/**\n * Checks if two ranges intersect.\n * @param {number} a0 - The start of the first range\n * @param {number} a1 - The end of the first range\n * @param {number} b0 - The start of the second range\n * @param {number} b1 - The end of the second range\n * @returns {boolean} True if the ranges intersect, false otherwise\n */\nexport function rangeToRangeIntersect(a0, a1, b0, b1) {\n return a1 - a0 > b1 - b0\n ? pointToRangeIntersect(b0, a0, a1) || pointToRangeIntersect(b1, a0, a1)\n : pointToRangeIntersect(a0, b0, b1) || pointToRangeIntersect(a1, b0, b1);\n}\n/**\n * Calculates the ratio of a value within a domain.\n * @param {number} value - The value to calculate the ratio for\n * @param {number} x0 - The start of the domain\n * @param {number} x1 - The end of the domain\n * @returns {number} The ratio of the value within the domain (0 to 1)\n */\nexport function getRatio(value, x0, x1) {\n const domain = Math.abs(x1 - x0);\n return x0 < x1 ? (value - x0) / domain : (value - x1) / domain;\n}\n/**\n * Converts a value from one domain to another, with an optional transformation function.\n * @param {number} value - The value to convert\n * @param {number} src0 - The start of the source domain\n * @param {number} src1 - The end of the source domain\n * @param {number} dst0 - The start of the destination domain\n * @param {number} dst1 - The end of the destination domain\n * @param {Function} fn - Optional transformation function to apply to the ratio (defaults to identity function)\n * @returns {number} The converted value in the destination domain\n */\nexport function convertDomain(value, src0, src1, dst0, dst1, fn = (x) => x) {\n const dstDomain = Math.abs(dst1 - dst0);\n const ratio = getRatio(value, src0, src1);\n return dst0 < dst1\n ? dst0 + fn(ratio) * dstDomain\n : dst1 + fn(1 - ratio) * dstDomain;\n}\n/**\n * Restricts a value to be within a specified range.\n * Uses direct comparison operators instead of Math.min/max for potential performance benefits.\n * @param {number} value - The value to clamp\n * @param {number} min - The lower boundary of the range\n * @param {number} max - The upper boundary of the range\n * @returns {number} The clamped value\n */\nexport function clamp(value, min, max) {\n // if operators are faster than Math.min/max\n if (value > max) {\n return max;\n }\n if (value < min) {\n return min;\n }\n return value;\n}\n/**\n * Aligns a number to a specific step by removing the remainder.\n * Effectively rounds down to the nearest multiple of the step.\n * @param {number} value - The value to align\n * @param {number} step - The step size to align to\n * @returns {number} The aligned value\n */\nexport function alignNumber(value, step) {\n return value - (value % step);\n}\n/**\n * Checks if two numbers are approximately equal within a specified epsilon.\n * Useful for floating-point comparisons where exact equality might not work due to precision issues.\n * @param {number} value - The value to compare\n * @param {number} target - The target value to compare against\n * @param {number} [epsilon] - The maximum allowed difference between the values\n * @returns {boolean} True if the values are approximately equal, false otherwise\n */\nexport function inexactEqual(value, target, epsilon = 0.01) {\n return value >= target - epsilon && value <= target + epsilon;\n}\n","/**\n * Utility function to compare two arrays for equality\n */\nfunction arraysEqual(a, b) {\n if (a === b)\n return true;\n if (a.length !== b.length)\n return false;\n return a.every((val, index) => val === b[index]);\n}\n/**\n * A class for indexing and managing timeline axes with sorting and ID-based lookup capabilities\n * @template Axis - The axis type extending TimelineAxis\n */\nexport class AxesIndex {\n /**\n * Creates an AxesIndex instance\n * @param axes - Array of axes to initialize with\n * @param options - Configuration options\n * @param options.identityFunction - Custom function to get axis identifier\n */\n constructor(axes = [], options) {\n this._axes = [];\n this.axes = axes;\n if (options?.identityFunction) {\n this.getAxisId = options.identityFunction;\n }\n }\n /**\n * Gets the identifier for an axis\n * @param axis - The axis object\n * @returns The axis identifier\n * @throws Will throw an error if axis has no valid identifier\n */\n getAxisId(axis) {\n const id = axis.id;\n if (!id) {\n throw new Error(\"Axis must have a non-empty id property\");\n }\n return id;\n }\n /**\n * Sets the axes array and invalidates cached indexes\n */\n set axes(newAxes) {\n if (!arraysEqual(newAxes, this._axes)) {\n this._axes = newAxes;\n this._sortedAxes = undefined;\n this._axesByIdMap = undefined;\n }\n }\n /**\n * Gets the raw axes array\n */\n get axes() {\n return this._axes;\n }\n /**\n * Gets axes sorted by their top position\n */\n get sortedAxes() {\n if (!this._sortedAxes) {\n // Create a new sorted array without modifying the original\n this._sortedAxes = this._axes.slice().sort((a, b) => a.top - b.top);\n }\n return this._sortedAxes;\n }\n /**\n * Gets a map of axes by their IDs\n */\n get axesById() {\n if (!this._axesByIdMap) {\n this._axesByIdMap = this._axes.reduce((acc, axis) => {\n // eslint-disable-next-line no-param-reassign\n acc[this.getAxisId(axis)] = axis;\n return acc;\n }, {});\n }\n return this._axesByIdMap;\n }\n /**\n * Gets an axis by its ID\n * @param id - The axis ID to look up\n * @returns The axis if found, otherwise undefined\n */\n getAxisById(id) {\n return this.axesById[id];\n }\n /**\n * Checks if an axis with the given ID exists\n * @param id - The axis ID to check\n * @returns True if axis exists, false otherwise\n */\n hasAxis(id) {\n return id in this.axesById;\n }\n}\n","import { clamp, rangeToRangeIntersect } from \"../helpers/math\";\nimport { AxesIndex } from \"../lib/AxesIndex\";\nimport { StrokeMode } from \"../enums\";\n/**\n * Axes component responsible for managing and rendering timeline axes\n * Implements BaseComponentInterface for consistent component structure\n * @template Axis - Type of axis extending TimelineAxis\n */\nexport class Axes {\n constructor(api) {\n this.strokeMode = StrokeMode.STRAIGHT;\n this.api = api;\n this.axesIndex = new AxesIndex([], {\n identityFunction: (axis) => axis.id,\n });\n }\n /**\n * Replaces all axes with a new set and triggers re-render\n * @param newAxes - Array of new axes to display\n * @throws Error if newAxes is not an array\n */\n setAxes(newAxes) {\n if (!newAxes || !Array.isArray(newAxes)) {\n throw new Error(\"Axes must be an array\");\n }\n this.axesIndex.axes = newAxes;\n this.render();\n }\n /**\n * Gets all axes indexed by their ID for quick lookup\n * @returns Record mapping axis IDs to axis objects\n */\n getAxesById() {\n return this.axesIndex.axesById;\n }\n /**\n * Calculates vertical position for a track within an axis\n * @param axis - Axis containing the track\n * @param trackIndex - Index of the track within the axis\n * @returns Y coordinate of the track's center\n * @throws Error if axis is invalid or trackIndex is out of bounds\n */\n getAxisTrackPosition(axis, trackIndex) {\n if (!axis || axis.tracksCount < 0) {\n throw new Error(\"Invalid axis configuration\");\n }\n const { axes } = this.api.getViewConfiguration();\n const index = clamp(trackIndex, 0, axis.tracksCount - 1);\n return axis.top + axes.trackHeight * index + axes.trackHeight / 2;\n }\n /**\n * Renders all axes to the canvas\n */\n render() {\n const { axes } = this.api.getViewConfiguration();\n const { ctx } = this.api;\n if (this.strokeMode === StrokeMode.DASHED) {\n ctx.setLineDash(axes.dashedLinePattern);\n }\n this.api.useScrollTransform();\n ctx.translate(0, this.api.getRulerHeight());\n const canvasWidth = ctx.canvas.width;\n ctx.strokeStyle = axes.color.line;\n ctx.beginPath();\n ctx.lineWidth = axes.lineWidth;\n const camera = this.api.getCameraPosition();\n const visibleAxes = this.axesIndex.sortedAxes.filter((axis) => {\n return rangeToRangeIntersect(axis.top, axis.top + axis.tracksCount * axes.trackHeight, camera.y0, camera.y1);\n });\n for (const axis of visibleAxes) {\n for (let i = 0; i < axis.tracksCount; i += 1) {\n const y = this.getAxisTrackPosition(axis, i);\n // Check if this track is within the camera's field of view\n if (y >= camera.y0 && y <= camera.y1) {\n ctx.moveTo(0, y);\n ctx.lineTo(canvasWidth, y);\n }\n }\n }\n ctx.stroke();\n ctx.setLineDash(axes.solidLinePattern);\n }\n}\n","export const SECOND = 1000;\nexport const MINUTE = SECOND * 60;\nexport const HOUR = MINUTE * 60;\nexport const DAY = HOUR * 24;\nexport const WEEK = DAY * 7;\nexport const MONTH = DAY * 30;\nexport const YEAR = DAY * 365;\n","import dayjs from \"dayjs\";\nimport { DAY, HOUR, MINUTE, MONTH, SECOND, YEAR } from \"./timeConstants\";\nconst minuteSupLabel = {\n start(t) {\n return dayjs(t).startOf(\"hour\");\n },\n step(t) {\n return dayjs(t).add(1, \"hour\");\n },\n format: \"HH\",\n};\nconst getHourSupLabel = (weekendColor) => ({\n start(t) {\n return dayjs(t).startOf(\"day\");\n },\n step(t) {\n return dayjs(t).add(1, \"day\");\n },\n color(t) {\n const weekday = dayjs(t).day();\n return weekday === 6 || weekday === 0 ? weekendColor : null;\n },\n format: \"MMM D\",\n});\nconst dateSupLabel = {\n start(t) {\n return dayjs(t).startOf(\"month\");\n },\n step(t) {\n return dayjs(t).add(1, \"month\");\n },\n format: \"MMM YYYY\",\n};\nconst monthSupLabel = {\n start(t) {\n return dayjs(t).startOf(\"year\");\n },\n step(t) {\n return dayjs(t).add(1, \"year\");\n },\n format: \"YYYY\",\n};\nexport const getLabelLevels = ({ color, }) => {\n const hourSupLabel = getHourSupLabel(color.rulerWeekendColor);\n return [\n {\n domain: SECOND,\n start: (t) => dayjs(t).startOf(\"millisecond\"),\n step: (t) => dayjs(t).add(1, \"millisecond\"),\n format: \"SSS[ms]\",\n sup: {\n start(t) {\n return dayjs(t).startOf(\"second\");\n },\n step(t) {\n return dayjs(t).add(1, \"second\");\n },\n format: \"ss[′′]\",\n },\n },\n {\n domain: MINUTE,\n start: (t) => dayjs(t).startOf(\"second\"),\n step: (t) => dayjs(t).add(1, \"second\"),\n format: \"ss[′′]\",\n sup: {\n start(t) {\n const time = dayjs(t).startOf(\"minute\");\n return time.subtract(time.minute() % 5, \"minute\");\n },\n step(t) {\n return dayjs(t).add(5, \"minute\");\n },\n format: \"mm[′]\",\n },\n },\n {\n domain: HOUR,\n start(t) {\n const time = dayjs(t).startOf(\"minute\");\n return time.subtract(time.minute() % 5, \"minute\");\n },\n step: (t) => dayjs(t).add(5, \"minute\"),\n format: \"mm[′]\",\n sup: minuteSupLabel,\n },\n {\n domain: DAY,\n start(t) {\n const time = dayjs(t).startOf(\"minute\");\n return time.subtract(time.minute() % 15, \"minute\");\n },\n step: (t) => dayjs(t).add(15, \"minute\"),\n format: \"mm[′]\",\n sup: minuteSupLabel,\n },\n {\n domain: DAY,\n start: (t) => dayjs(t).startOf(\"hour\"),\n step: (t) => dayjs(t).add(1, \"hour\"),\n format: \"HH\",\n sup: hourSupLabel,\n },\n {\n domain: MONTH,\n start(t) {\n const time = dayjs(t).startOf(\"hour\");\n return time.subtract(time.hour() % 4, \"hour\");\n },\n step: (t) => dayjs(t).add(4, \"hour\"),\n format: \"HH\",\n sup: hourSupLabel,\n },\n {\n domain: MONTH,\n start: (t) => dayjs(t).startOf(\"day\"),\n step: (t) => dayjs(t).add(1, \"day\"),\n color(t) {\n const weekday = dayjs(t).day();\n return weekday === 6 || weekday === 0 ? color.rulerWeekendColor : null;\n },\n format: \"D\",\n sup: dateSupLabel,\n },\n {\n domain: MONTH * 6,\n start: (t) => dayjs(t).startOf(\"week\").add(1, \"day\"),\n step: (t) => dayjs(t).add(1, \"week\"),\n format: \"D\",\n },\n {\n domain: YEAR,\n start: (t) => dayjs(t).startOf(\"month\"),\n step: (t) => dayjs(t).add(1, \"month\"),\n format: \"MMM\",\n sup: monthSupLabel,\n },\n {\n domain: YEAR * 10,\n start(t) {\n const time = dayjs(t).startOf(\"month\");\n return time.subtract(time.month() % 3, \"month\");\n },\n step: (t) => dayjs(t).add(3, \"month\"),\n format: \"[Q]Q\",\n },\n {\n domain: Infinity,\n start: (t) => dayjs(t).startOf(\"year\"),\n step: (t) => dayjs(t).add(1, \"year\"),\n format: \"YYYY\",\n },\n ];\n};\n","import { getLabelLevels } from \"../constants/ruler\";\nimport dayjs from \"dayjs\";\nimport { clamp, convertDomain } from \"../helpers/math\";\n/**\n * Ruler component responsible for rendering timescale and labels on the timeline\n * Implements BaseComponentInterface for consistent component structure\n */\nexport class Ruler {\n constructor(api) {\n this.levelCache = new Map();\n this.api = api;\n this.labelLevels = getLabelLevels(this.api.getViewConfiguration().ruler);\n }\n /**\n * Renders the ruler component including background, labels and grid lines\n */\n render() {\n const { ruler } = this.api.getViewConfiguration();\n const { ctx, width } = this.api;\n this.api.useStaticTransform();\n // Draw background\n ctx.fillStyle = ruler.color.background;\n ctx.fillRect(0, 0, width, ruler.height);\n // Set common text properties\n ctx.font = ruler.font;\n ctx.lineJoin = \"miter\";\n ctx.miterLimit = 2;\n ctx.lineWidth = 1;\n this.renderBottomLine();\n this.renderLevels();\n }\n /**\n * Renders the bottom border line of the ruler\n * Uses ruler's border color from visual configuration\n */\n renderBottomLine() {\n const { ruler } = this.api.getViewConfiguration();\n const { ctx, width } = this.api;\n ctx.strokeStyle = ruler.color.borderColor;\n ctx.beginPath();\n ctx.moveTo(0, ruler.height + ctx.lineWidth / 2);\n ctx.lineTo(width, ruler.height + ctx.lineWidth / 2);\n ctx.stroke();\n }\n /**\n * Selects and renders appropriate time marking levels based on zoom level\n * Renders both primary and secondary levels if applicable\n */\n renderLevels() {\n const { start, end } = this.api.getInterval();\n const { ruler } = this.api.getViewConfiguration();\n if (!ruler)\n return;\n const domain = end - start;\n const { width } = this.api;\n const { level, supLevel } = this.findAppropriateLevels(domain, width);\n if (level) {\n this.renderLevel(level, ruler.position, ruler.color.primaryLevel);\n }\n if (supLevel) {\n this.renderLevel(supLevel, ruler.subPosition, ruler.color.secondaryLevel);\n }\n }\n /**\n * Finds appropriate primary and secondary levels for current zoom level\n */\n findAppropriateLevels(domain, width) {\n let level;\n let supLevel;\n for (const currentLevel of this.labelLevels) {\n if (domain > currentLevel.domain)\n continue;\n // Calculate or get cached marks width\n let marksWidth = this.levelCache.get(currentLevel);\n if (marksWidth === undefined) {\n marksWidth = this.calculateMarksWidth(currentLevel, domain, width);\n this.levelCache.set(currentLevel, marksWidth);\n }\n if (marksWidth > width)\n continue;\n level = currentLevel;\n supLevel =\n level.sup ||\n this.labelLevels[this.labelLevels.indexOf(currentLevel) + 1];\n break;\n }\n return { level, supLevel };\n }\n /**\n * Calculates total width required for level's marks\n */\n calculateMarksWidth(level, domain, width) {\n const { ruler } = this.api.getViewConfiguration();\n let marksWidth = 0;\n for (let t = dayjs(0); Number(t) < domain; t = level.step(t)) {\n const x = convertDomain(Number(t), 0, domain, 0, width);\n if (x > 0)\n marksWidth += ruler.spacing;\n }\n return marksWidth;\n }\n /**\n * Renders a single level of time markings\n * @param level - Level configuration\n * @param y - Vertical position\n * @param color - Default text color\n */\n renderLevel(level, y, color) {\n const { ruler } = this.api.getViewConfiguration();\n const { start, end } = this.api.getInterval();\n const { ctx, width } = this.api;\n ctx.strokeStyle = ruler.color.textOutlineColor;\n const t0 = level.start(start);\n let firstRendered = null;\n // Render fully visible labels\n for (let t = t0; Number(t) < end; t = level.step(t)) {\n const label = dayjs(t).format(level.format);\n const x = this.timeToPosition(t);\n if (x > 10 && x < width) {\n if (!firstRendered)\n firstRendered = t;\n ctx.fillStyle = (level.color && level.color(t)) || color;\n ctx.strokeText(label, x, y);\n ctx.fillText(label, x, y);\n }\n }\n // Render edge label if partially visible\n this.renderEdgeLabel(level, y, color, firstRendered);\n }\n /**\n * Renders partially visible label at the edge of visible area\n */\n renderEdgeLabel(level, y, color, firstRendered) {\n const { ctx } = this.api;\n const firstLabelTimestamp = this.positionToTime(10);\n const firstLabel = dayjs(firstLabelTimestamp).format(level.format);\n const firstMark = clamp(10, -Infinity, this.timeToPosition(firstRendered || this.api.getInterval().end) -\n ctx.measureText(firstLabel).width -\n 5);\n ctx.fillStyle = (level.color && level.color(firstLabelTimestamp)) || color;\n ctx.strokeText(firstLabel, firstMark, y);\n ctx.fillText(firstLabel, firstMark, y);\n }\n /**\n * Converts a time value to horizontal position on the canvas\n * @param t - Time value (timestamp or dayjs object)\n * @returns X coordinate corresponding to the time value\n */\n timeToPosition(t) {\n const { start, end } = this.api.getInterval();\n return convertDomain(Number(t), start, end, 0, this.api.width);\n }\n /**\n * Converts a horizontal position to time value\n * @param x - X coordinate on the canvas\n * @returns Timestamp corresponding to the position\n */\n positionToTime(x) {\n const { start, end } = this.api.getInterval();\n return convertDomain(x, 0, this.api.width, start, end);\n }\n}\n","import { DAY, HOUR, MONTH, YEAR } from \"./timeConstants\";\nimport dayjs from \"dayjs\";\nconst getGridColorForTimeUnitMultiple = (n, unit, primaryColor, secondaryColor) => {\n return (t) => {\n return t[unit]() % n === 0 ? primaryColor : secondaryColor;\n };\n};\nexport const getGridLevels = ({ color, }) => [\n {\n domain: HOUR,\n style: getGridColorForTimeUnitMultiple(5, \"minute\", color.primaryMarkColor, color.secondaryMarkColor),\n start: (t) => dayjs(t).startOf(\"minute\"),\n step: (t) => t.add(1, \"minute\"),\n },\n {\n domain: DAY,\n style(t) {\n if (t.hour() === 0 && t.minute() === 0) {\n return color.boundaryMarkColor;\n }\n return t.minute() % 4 === 0\n ? color.primaryMarkColor\n : color.secondaryMarkColor;\n },\n start(t) {\n const time = dayjs(t).startOf(\"minute\");\n return time.subtract(time.minute() % 15, \"minute\");\n },\n step: (t) => t.add(15, \"minute\"),\n },\n {\n domain: MONTH,\n style(t) {\n if (t.hour() === 0) {\n return color.boundaryMarkColor;\n }\n return t.hour() % 4 === 0\n ? color.primaryMarkColor\n : color.secondaryMarkColor;\n },\n start: (t) => dayjs(t).startOf(\"hour\"),\n step: (t) => t.add(1, \"hour\"),\n },\n {\n domain: YEAR,\n style(t) {\n if (t.date() === 1) {\n return color.boundaryMarkColor;\n }\n return t.day() === 1 ? color.primaryMarkColor : color.secondaryMarkColor;\n },\n start: (t) => dayjs(t).startOf(\"day\"),\n step: (t) => t.add(1, \"day\"),\n },\n {\n domain: YEAR * 5,\n style: getGridColorForTimeUnitMultiple(3, \"month\", color.primaryMarkColor, color.secondaryMarkColor),\n start: (t) => dayjs(t).startOf(\"month\"),\n step: (t) => dayjs(t).add(1, \"month\"),\n },\n {\n domain: Infinity,\n style() {\n return color.primaryMarkColor;\n },\n start: (t) => dayjs(t).startOf(\"year\"),\n step: (t) => t.add(1, \"year\"),\n },\n];\n","import { convertDomain } from \"../helpers/math\";\nimport dayjs from \"dayjs\";\nimport { getGridLevels } from \"../constants/grid\";\n/**\n * Grid component responsible for rendering vertical grid lines on the timeline\n */\nexport class Grid {\n constructor(api) {\n this.api = api;\n this.levels = getGridLevels(this.api.getViewConfiguration().grid);\n }\n /**\n * Renders the grid on the canvas\n */\n render() {\n this.api.useStaticTransform();\n const { start, end } = this.api.getInterval();\n const { ctx, width } = this.api;\n const domainSize = end - start;\n // Get the appropriate grid level\n const level = this.selectGridLevel(domainSize, width);\n if (!level)\n return;\n // Set up the drawing area\n this.api.useStaticTransform();\n const rulerHeight = this.api.getRulerHeight();\n const top = rulerHeight;\n const height = ctx.canvas.height - rulerHeight;\n // Render the selected level\n this.renderLevel(top, 0, width, height, level);\n }\n /**\n * Selects the appropriate grid level based on domain size and canvas width\n */\n selectGridLevel(domainSize, canvasWidth) {\n if (!this.levels.length)\n return null;\n for (const level of this.levels) {\n if (domainSize > level.domain)\n continue;\n // Check if the marks fit within the visible area\n if (this.calculateMarksWidth(level, domainSize) >\n canvasWidth + this.api.getViewConfiguration().grid.widthBuffer) {\n continue;\n }\n return level;\n }\n // Return the coarsest level as fallback\n return this.levels[this.levels.length - 1];\n }\n /**\n * Calculates the total width that the level's marks will occupy\n */\n calculateMarksWidth(level, domainSize) {\n let time = dayjs(0);\n let totalWidth = 0;\n while (Number(time) < domainSize) {\n const x = convertDomain(Number(time), 0, domainSize, 0, totalWidth);\n totalWidth += x > 0 ? this.api.getViewConfiguration().grid.spacing : 0;\n time = level.step(time);\n }\n return totalWidth;\n }\n /**\n * Renders a specific grid level with vertical lines\n */\n renderLevel(top, left, width, height, level) {\n const { grid } = this.api.getViewConfiguration();\n const { start, end } = this.api.getInterval();\n const { ctx } = this.api;\n ctx.lineWidth = grid.lineWidth;\n // Draw vertical grid lines for each time point in the visible range\n for (let t = level.start(start); Number(t) < end; t = level.step(t)) {\n const x = Math.floor(convertDomain(Number(t), start, end, left, left + width));\n ctx.beginPath();\n ctx.strokeStyle = level.style(t);\n ctx.moveTo(x, top);\n ctx.lineTo(x, top + height);\n ctx.stroke();\n }\n }\n}\n","export function isMac() {\n return navigator.userAgent.indexOf(\"Mac OS\") !== -1;\n}\nexport function checkControlCommandKey(event) {\n return isMac() ? event.metaKey : event.ctrlKey;\n}\n","export class AbstractEventRenderer {\n constructor() {\n this.hitboxResult = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n };\n }\n}\n","import { AbstractEventRenderer } from \"./AbstractEventRenderer\";\nconst DEFAULT_COLOR = \"#333\";\nconst DEFAULT_SELECTED_COLOR = \"#546\";\nexport class DefaultEventRenderer extends AbstractEventRenderer {\n render(ctx, event, isSelected, x0, x1, y0, h) {\n let color = event.color || DEFAULT_COLOR;\n if (isSelected)\n color = event.selectedColor || DEFAULT_SELECTED_COLOR;\n ctx.beginPath();\n ctx.fillStyle = color;\n ctx.rect(x0, y0 - h / 2, x1 - x0, h);\n ctx.fill();\n }\n getHitbox(_event, x0, x1) {\n this.hitboxResult.left = x0;\n this.hitboxResult.right = x1;\n return this.hitboxResult;\n }\n}\n","import RBush from \"rbush\";\nimport { rangeToRangeIntersect } from \"../../helpers/math\";\nimport { checkControlCommandKey } from \"../../lib/utils\";\nimport { DefaultEventRenderer } from \"./DefaultEventRenderer\";\nimport { ComponentType } from \"../../enums\";\nconst MAX_INDEX_TREE_WIDTH = 16;\n/**\n * Events component responsible for managing and rendering timeline events\n * Implements BaseComponentInterface for consistent component structure\n * @template Event - Type of event-extending TimelineEvent\n */\nexport class Events {\n constructor(api) {\n this.allowMultipleSelection = true;\n this.activeEvents = null;\n this.index = new RBush(MAX_INDEX_TREE_WIDTH);\n this._selectedEvents = new Set();\n this._events = [];\n this.handleCanvasMouseup = (event) => {\n const { clickEventsCollectionFilter } = this.api.getTimelineSettings();\n let candidates = this.getEventsAtPoint(event.offsetX, event.offsetY);\n if (clickEventsCollectionFilter) {\n candidates = clickEventsCollectionFilter(candidates);\n }\n if (candidates.length > 0) {\n this.selectEvents(candidates, {\n append: checkControlCommandKey(event),\n toggle: true,\n });\n }\n else {\n this.selectEvents([]);\n }\n };\n this.handleCanvasContextMenu = (event) => {\n event.preventDefault();\n const candidates = this.getEventsAtPoint(event.offsetX, event.offsetY);\n const candidate = candidates.length > 0 ? candidates[0] : undefined;\n this.api.emit(\"on-context-click\", {\n event: candidate,\n time: this.api.positionToTime(event.offsetX),\n relativeX: event.clientX,\n relativeY: event.clientY,\n });\n };\n this.handleCanvasMousemove = (event) => {\n event.preventDefault();\n const candidates = this.getEventsAtPoint(event.offsetX, event.offsetY);\n const isEqual = JSON.stringify(this.activeEvents) === JSON.stringify(candidates);\n if (this.activeEvents && (!isEqual || !candidates.length)) {\n const candidateIds = new Set(candidates.map(({ id }) => id));\n this.api.emit(\"on-leave\", {\n event: this.activeEvents.filter(({ id }) => !candidateIds.has(id)),\n });\n }\n if (!candidates.length) {\n this.activeEvents = null;\n return;\n }\n if (isEqual)\n return;\n const api = this.api;\n this.activeEvents = candidates;\n this.api.emit(\"on-hover\", {\n events: candidates,\n time: api.positionToTime(event.offsetX),\n relativeX: event.clientX,\n relativeY: event.clientY,\n });\n };\n this.api = api;\n this.addEventListeners();\n }\n /**\n * Updates the events data and rebuilds the spatial index\n * @param newEvents - Array of events to display on the timeline\n * @param selectedIds - Optional array of event IDs to mark as selected\n */\n setEvents(newEvents, selectedIds) {\n this._events = newEvents;\n this.rebuildIndex();\n if (selectedIds) {\n this._selectedEvents = new Set(selectedIds);\n }\n }\n /**\n * Finds events that intersect with the given rectangle\n * @param rect - DOMRect representing the search area\n * @returns Array of events that intersect with the rectangle\n */\n getEventsAt(rect) {\n const { events: { hitboxPadding }, } = this.api.getViewConfiguration();\n const rulerHeight = this.api.getRulerHeight();\n const topOffset = -rulerHeight + this.api.canvasScrollTop;\n const events = this.index.search({\n minX: this.api.positionToTime(rect.left - hitboxPadding),\n maxX: this.api.positionToTime(rect.right + hitboxPadding),\n minY: rect.top + topOffset - hitboxPadding,\n maxY: rect.bottom + topOffset + hitboxPadding,\n });\n return events.map((box) => box.event);\n }\n /**\n * Finds events at a specific point on the canvas\n * @param x - X coordinate\n * @param y - Y coordinate\n * @returns Array of events at the specified point\n */\n getEventsAtPoint(x, y) {\n const p = 6;\n return this.getEventsAt(new DOMRect(x - p / 2, y - p / 2, p, p));\n }\n /**\n * Updates the set of selected event IDs\n * @param ids - Array of event IDs to mark as selected\n */\n setSelectedEvents(ids) {\n this._selectedEvents = new Set(ids);\n this.render();\n }\n /**\n * Gets all currently selected events\n * @returns Array of selected events\n */\n getSelectedEvents() {\n return this._events.filter((event) => this.isSelectedEvent(event));\n }\n /**\n * Checks if an event is currently selected\n * @param event - Event to check\n * @returns True if the event is selected, false otherwise\n */\n isSelectedEvent(event) {\n if (!event)\n return false;\n return this._selectedEvents.has(event.id);\n }\n /**\n * Selects or deselects events based on provided options\n * @param events - Array of events to select/deselect\n * @param options - Selection options (append, toggle)\n */\n selectEvents(events, options = {}) {\n const selection = this._selectedEvents;\n if (!options.append) {\n selection.clear();\n }\n const add = (id) => selection.add(id);\n const toggle = (id) => {\n if (selection.has(id)) {\n selection.delete(id);\n }\n else {\n selection.add(id);\n }\n };\n const select = options.toggle ? toggle : add;\n if (this.allowMultipleSelection) {\n for (const event of events) {\n select(event.id);\n }\n }\n else if (events.length > 0) {\n if (selection.size > 0 && !selection.has(events[0].id)) {\n selection.clear();\n }\n select(events[0].id);\n }\n this.api.emit(\"on-select-change\", { events: this.getSelectedEvents() });\n this.api.rerender();\n }\n render() {\n const viewConfiguration = this.api.getViewConfiguration();\n const { start, end } = this.api.getInterval();\n const axesComponent = this.api.getComponent(ComponentType.Axes);\n if (!axesComponent) {\n return;\n }\n this.api.useScrollTransform();\n const ctx = this.api.ctx;\n const timeToPosition = (t) => this.api.timeToPosition(t);\n ctx.translate(0, this.api.getRulerHeight());\n ctx.font = viewConfiguration.events.font;\n ctx.lineWidth = 2;\n const camera = this.api.getCameraPosition();\n for (let i = 0, len = this._events.length; i < len; i += 1) {\n const event = this._events[i];\n const axis = axesComponent.getAxesById()[event.axisId];\n if (!axis)\n continue;\n const y = axesComponent.getAxisTrackPosition(axis, event.trackIndex);\n const eventTo = event.to || end;\n // Check if the event is within time range and vertical camera view\n if (axis &&\n rangeToRangeIntersect(start, end, event.from, eventTo) &&\n y >= camera.y0 &&\n y <= camera.y1) {\n const x0 = this.api.timeToPosition(event.from);\n const x1 = this.api.timeToPosition(eventTo);\n this.runRenderer(ctx, event, this.isSelectedEvent(event), x0, x1, y, axis.height, viewConfiguration, timeToPosition);\n }\n }\n }\n /**\n * Cleans up event listeners when component is destroyed\n */\n destroy() {\n this.api.canvas.removeEventListener(\"mouseup\", this.handleCanvasMouseup);\n this.api.canvas.removeEventListener(\"contextmenu\", this.handleCanvasContextMenu);\n this.api.canvas.removeEventListener(\"mousemove\", this.handleCanvasMousemove);\n }\n /**\n * Rebuilds the spatial index for efficient event lookup\n * Updates the RBush tree with current event positions\n */\n rebuildIndex() {\n const { end } = this.api.getInterval();\n const { axes } = this.api.getViewConfiguration();\n const axesComponent = this.api.getComponent(ComponentType.Axes);\n const axesById = axesComponent.getAxesById();\n const boxes = this._events.map((event) => {\n const axis = axesById[event.axisId];\n const eventTrackY = axesComponent.getAxisTrackPosition(axis, event.trackIndex);\n const minX = event.from;\n const maxX = event.to ? event.to : end;\n const minY = eventTrackY - axes.lineHeight / 2;\n const maxY = eventTrackY + axes.lineHeight / 2;\n return { minX, maxX, minY, maxY, event };\n });\n this.index.clear();\n this.index.load(boxes);\n }\n /**\n * Adds necessary event listeners for mouse interactions\n */\n addEventListeners() {\n this.api.canvas.addEventListener(\"mouseup\", this.handleCanvasMouseup);\n this.api.canvas.addEventListener(\"contextmenu\", this.handleCanvasContextMenu);\n this.api.canvas.addEventListener(\"mousemove\", this.handleCanvasMousemove);\n }\n /**\n * Renders an event using its renderer or the default renderer\n * @param ctx - Canvas rendering context\n * @param event - Event to render\n * @param isSelected - Whether the event is selected\n * @param x0 - Start X coordinate\n * @param x1 - End X coordinate\n * @param y - Y coordinate\n * @param h - Height of the event\n * @param viewConfiguration - Timeline view configuration\n * @param timeToPosition - Optional function to convert time to position\n */\n runRenderer(ctx, event, isSelected, x0, x1, y, h, viewConfiguration, timeToPosition) {\n if (!event.renderer) {\n event.renderer = new DefaultEventRenderer();\n }\n event.renderer.render(ctx, event, isSelected, x0, x1, y, h, viewConfiguration, timeToPosition);\n }\n}\n","export const defaultPalette = {\n gray1: \"#111\",\n gray3: \"#333\",\n gray7: \"#777\",\n gray13: \"#DDD\",\n white: \"#FFF\",\n red: \"#D30\",\n};\n","import { defaultPalette } from \"./colors\";\nimport { ZoomMode } from \"../enums\";\nconst DEFAULT_FONT = \"10px sans-serif\";\nconst DEFAULT_GROUP_COLOR = \"rgb(254, 127, 45)\";\nconst DEFAULT_GROUP_COLOR_HOVER = \"red\";\nexport const defaultViewConfig = {\n hideRuler: false,\n ruler: {\n spacing: 40,\n position: 33,\n subPosition: 16,\n height: 41,\n font: DEFAULT_FONT,\n color: {\n background: defaultPalette.white,\n primaryLevel: defaultPalette.gray1,\n secondaryLevel: defaultPalette.gray7,\n textOutlineColor: defaultPalette.white,\n borderColor: defaultPalette.gray3,\n rulerWeekendColor: defaultPalette.red,\n },\n },\n grid: {\n spacing: 40,\n lineWidth: 1,\n widthBuffer: 40,\n color: {\n primaryMarkColor: defaultPalette.gray7,\n secondaryMarkColor: defaultPalette.gray13,\n boundaryMarkColor: defaultPalette.gray3,\n },\n },\n axes: {\n trackHeight: 25,\n lineHeight: 25,\n color: {\n line: defaultPalette.gray13,\n },\n lineWidth: 1,\n dashedLinePattern: [5, 3],\n solidLinePattern: [0, 0],\n },\n events: {\n font: DEFAULT_FONT,\n hitboxPadding: 2,\n },\n markers: {\n font: DEFAULT_FONT,\n groupColor: DEFAULT_GROUP_COLOR,\n groupColorHover: DEFAULT_GROUP_COLOR_HOVER,\n hitboxPadding: 2,\n collapseMinDistance: 4,\n collapseEnabled: true,\n groupZoomEnabled: true,\n groupZoomPadding: 0.2,\n groupZoomMaxFactor: 0.5,\n },\n camera: {\n zoom: ZoomMode.DEFAULT,\n },\n};\n","import { alignNumber, convertDomain } from \"./helpers/math\";\nimport { SECOND } from \"./constants/timeConstants\";\nimport { ComponentType } from \"./enums\";\nexport class CanvasApi {\n constructor(timeline) {\n this.timeline = timeline;\n this.canvas = this.timeline.canvas;\n this.components = new Map();\n this.ctx = this.canvas.getContext(\"2d\");\n this.ctx.globalAlpha = 1.0;\n }\n addComponent(key, component) {\n this.components.set(key, component);\n }\n removeComponent(key) {\n this.components.delete(key);\n }\n getComponent(key) {\n if (this.components.has(key))\n return this.components.get(key);\n return undefined;\n }\n rerender(clearBeforeRender = true) {\n if (clearBeforeRender) {\n this.clear();\n }\n if (!this.components.size)\n return;\n this.ctx.save();\n this.components.forEach((component) => {\n component.rebuildIndex?.();\n component.render();\n });\n this.ctx.restore();\n }\n getViewConfiguration() {\n return this.timeline.viewConfiguration;\n }\n getRulerHeight() {\n const config = this.timeline.viewConfiguration;\n if (config.hideRuler)\n return 0;\n return config.ruler.height || 0;\n }\n getTimelineSettings() {\n return this.timeline.settings;\n }\n setRange(start, end) {\n this.timeline.settings.start = start;\n this.timeline.settings.end = end;\n this.rerender();\n }\n setAxes(newAxes) {\n const axes = this.getComponent(ComponentType.Axes);\n axes.setAxes(newAxes);\n }\n setEvents(newEvents, selectedIds) {\n const events = this.getComponent(ComponentType.Events);\n events.setEvents(newEvents, selectedIds);\n this.rerender();\n }\n setSelectedEvents(ids) {\n const events = this.getComponent(ComponentType.Events);\n events.setSelectedEvents(ids);\n }\n setMarkers(newMarkers) {\n const markers = this.getComponent(ComponentType.Markers);\n markers.setMarkers(newMarkers);\n }\n setCanvasScrollTop(newScrollTop) {\n this.timeline.canvasScrollTop = newScrollTop;\n this.rerender();\n }\n get pixelRatio() {\n return window.devicePixelRatio || 1;\n }\n get canvasScrollTop() {\n return this.timeline.canvasScrollTop || 0;\n }\n getInterval() {\n const { start, end } = this.timeline.settings;\n return {\n start,\n end,\n };\n }\n getSelectedEvents() {\n const events = this.getComponent(ComponentType.Events);\n return events.getSelectedEvents();\n }\n get width() {\n return this.canvas.width / this.pixelRatio;\n }\n get height() {\n return this.canvas.height / this.pixelRatio;\n }\n get currentTime() {\n return alignNumber(Date.now(), SECOND);\n }\n get emit() {\n return this.timeline.emit.bind(this.timeline);\n }\n widthToTime(px) {\n return this.positionToTime(px) - this.getInterval().start;\n }\n timeToPosition(t) {\n const actualWidth = this.width;\n return (convertDomain(t, this.timeline.settings.start, this.timeline.settings.end, 0, actualWidth) || 0);\n }\n positionToTime(px) {\n return convertDomain(px, 0, this.width, this.timeline.settings.start, this.timeline.settings.end);\n }\n clear() {\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n useStaticTransform() {\n const dpr = this.pixelRatio;\n this.ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n useScrollTransform() {\n const dpr = this.pixelRatio;\n const yOffset = this.canvasScrollTop * dpr;\n this.ctx.setTransform(dpr, 0, 0, dpr, 0, -yOffset);\n }\n destroy() {\n this.components.forEach((component, key) => {\n component?.destroy?.();\n this.removeComponent(key);\n });\n }\n getCameraPosition() {\n return {\n y0: this.canvasScrollTop,\n y1: this.canvasScrollTop + this.height,\n x0: 0,\n x1: this.width,\n };\n }\n getEventPosition(event) {\n const axesComponent = this.getComponent(ComponentType.Axes);\n if (!axesComponent) {\n throw new Error(\"Invalid axes configuration\");\n }\n const axis = axesComponent.getAxesById()[event.axisId];\n if (!axis) {\n throw new Error(\"Invalid axis id\");\n }\n const { end } = this.getInterval();\n const x0 = this.timeToPosition(event.from);\n const x1 = this.timeToPosition(event.to || end);\n const y0 = axesComponent.getAxisTrackPosition(axis, event.trackIndex) +\n this.getRulerHeight() -\n this.canvasScrollTop;\n return {\n x0,\n x1,\n y0,\n h: axis.height,\n };\n }\n}\n","import { clamp } from \"./helpers/math\";\nimport { MONTH, SECOND } from \"./constants/timeConstants\";\nimport debounce_ from \"lodash/debounce\";\nimport { ComponentType, ZoomMode } from \"./enums\";\nconst WHEEL_PAN_SPEED = 0.00025;\nconst ZOOM_MIN = SECOND * 5;\nconst ZOOM_MAX = MONTH * 2;\n/**\n * Controller class responsible for handling timeline interactions and canvas resizing\n * Manages zoom, pan, and canvas size updates\n */\nexport class TimelineController {\n /**\n * Creates a new TimelineController instance\n * @param api - CanvasApi instance for timeline manipulation\n */\n constructor(api) {\n this.emitCameraChange = debounce_((newStart, newEnd) => {\n this.api.emit(\"on-camera-change\", { from: newStart, to: newEnd });\n }, 150);\n /**\n * Updates canvas size based on container dimensions and device pixel ratio\n * Triggers re-render after size update\n * @private\n */\n this.updateCanvasSize = () => {\n const pixelRatio = window.devicePixelRatio || 1;\n const logicalWidth = this.api.canvas.offsetWidth;\n const logicalHeight = this.api.canvas.offsetHeight;\n // Set internal canvas size (physical pixels)\n this.api.canvas.width = Math.floor(logicalWidth * pixelRatio);\n this.api.canvas.height = Math.floor(logicalHeight * pixelRatio);\n this.api.rerender();\n };\n /**\n * Handles mouse wheel events for zooming and panning\n * Supports:\n * - Zoom with mouse wheel (centered on cursor position)\n * - Pan with shift + wheel\n * - Horizontal pan with wheel deltaX\n * @param event - WheelEvent from canvas\n * @private\n */\n this.handleCanvasWheel = (event) => {\n event.stopPropagation();\n event.preventDefault();\n const { start, end } = this.api.getInterval();\n const { camera } = this.api.getViewConfiguration();\n const zoomMode = camera.zoom;\n if (zoomMode === ZoomMode.NONE)\n return;\n let newStart = start;\n let newEnd = end;\n let isPanned = false;\n const oldDomain = newEnd - newStart;\n if (Math.abs(event.deltaY) > 2) {\n if (event.shiftKey || zoomMode === ZoomMode.HORIZONTAL) {\n isPanned = true;\n const shift = oldDomain * event.deltaY * WHEEL_PAN_SPEED;\n newStart += shift;\n newEnd += shift;\n }\n else {\n const factor = event.deltaY > 0 ? 1.15 : 0.9;\n const newDomain = clamp(oldDomain * factor, ZOOM_MIN, ZOOM_MAX);\n // Check if the cursor is inside the canvas (using logical pixels)\n if (event.offsetX >= 0 &&\n event.offsetX <= this.api.canvas.offsetWidth &&\n event.offsetY >= 0 &&\n event.offsetY <= this.api.canvas.offsetHeight) {\n // Center zoom around the cursor position\n const cursorTime = this.api.positionToTime(event.offsetX);\n const ratio = (cursorTime - start) / oldDomain;\n newStart = Math.round(cursorTime - ratio * newDomain);\n newEnd = Math.round(cursorTime + (1 - ratio) * newDomain);\n }\n }\n }\n if (!isPanned && event.deltaX !== 0) {\n const newDomain = newEnd - newStart;\n const shift = newDomain * event.deltaX * WHEEL_PAN_SPEED;\n newStart += shift;\n newEnd += shift;\n }\n if (newStart !== start || newEnd !== end) {\n this.api.setRange(newStart, newEnd);\n this.emitCameraChange(newStart, newEnd);\n }\n };\n /**\n * Handles mouse up events on the canvas\n * Returns both events and markers at the click point\n * @param event - MouseEvent from canvas\n * @private\n */\n this.handleCanvasMouseup = (event) => {\n const { clickEventsCollectionFilter, clickMarkerCollectionFilter } = this.api.getTimelineSettings();\n const eventsComponent = this.api.getComponent(ComponentType.Events);\n const markersComponent = this.api.getComponent(ComponentType.Markers);\n const events = eventsComponent\n ? eventsComponent.getEventsAtPoint(event.offsetX, event.offsetY)\n : [];\n const markers = markersComponent\n ? markersComponent.getMarkersAtPoint(event.offsetX, event.offsetY)\n : [];\n this.api.emit(\"on-click\", {\n events: clickEventsCollectionFilter\n ? clickEventsCollectionFilter(events)\n : events,\n markers: clickMarkerCollectionFilter\n ? clickMarkerCollectionFilter(markers)\n : markers,\n });\n };\n this.api = api;\n this.updateCanvasSize();\n this.init();\n }\n /**\n * Initializes event listeners for canvas resize and wheel events\n */\n init() {\n this.resizeObserver = new ResizeObserver(() => {\n this.updateCanvasSize();\n });\n this.resizeObserver.observe(this.api.canvas);\n this.api.canvas.addEventListener(\"wheel\", this.handleCanvasWheel);\n this.api.canvas.addEventListener(\"mouseup\", this.handleCanvasMouseup);\n }\n /**\n * Cleans up event listeners when the controller is destroyed\n */\n destroy() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = undefined;\n this.api.canvas.removeEventListener(\"wheel\", this.handleCanvasWheel);\n this.api.canvas.removeEventListener(\"mouseup\", this.handleCanvasMouseup);\n }\n}\n","export class AbstractMarkerRenderer {\n}\n","import { AbstractMarkerRenderer } from \"./AbstractMarkerRenderer\";\nimport { clamp } from \"../../helpers/math\";\nconst DEFAULT_LINE_WIDTH = 1;\nconst DEFAULT_TEXT_COLOR = \"#333\";\nconst DEFAULT_LABEL_PADDING = 4;\nexport class DefaultMarkerRenderer extends AbstractMarkerRenderer {\n render({ ctx, isSelected, isHovered, marker, markerPosition, viewConfiguration, lastRenderedLabelPosition, getLabelSize, }) {\n const { markers } = viewConfiguration;\n const activeColor = marker.group ? markers.groupColor : marker.activeColor;\n const hoverColor = marker.group\n ? markers.groupColorHover\n : marker.hoverColor;\n let color = isHovered ? hoverColor : marker.color;\n if (isSelected) {\n color = activeColor;\n }\n let labelAreaHeight = 0;\n if (marker.label) {\n const labelSize = getLabelSize(marker.label);\n labelAreaHeight = labelSize.height + DEFAULT_LABEL_PADDING * 2;\n this.renderLabel(ctx, color, isSelected, isHovered, marker, markerPosition, labelSize, viewConfiguration.markers, lastRenderedLabelPosition);\n }\n ctx.strokeStyle = color;\n ctx.lineWidth = marker.lineWidth || DEFAULT_LINE_WIDTH;\n ctx.beginPath();\n ctx.moveTo(markerPosition, labelAreaHeight);\n ctx.lineTo(markerPosition, ctx.canvas.height);\n ctx.stroke();\n }\n renderLabel(ctx, color, isSelected, isHovered, marker, markerPosition, labelSize, markerConfiguration, lastRenderedLabelPosition) {\n const { width, height } = labelSize;\n const widthWithPadding = width + DEFAULT_LABEL_PADDING * 2;\n const heightWithPadding = height + DEFAULT_LABEL_PADDING * 2;\n const isActive = isSelected || isHovered;\n const labelPosition = this.calculateSelectedLabelPosition(markerPosition, widthWithPadding, isActive\n ? ctx.canvas.width\n : Math.min(ctx.canvas.width, lastRenderedLabelPosition[\"top\"]));\n if (markerPosition < lastRenderedLabelPosition[\"top\"] || isActive) {\n if (isActive)\n lastRenderedLabelPosition[\"top\"] = labelPosition;\n this.drawLabelContent(ctx, color, marker, labelPosition, widthWithPadding, heightWithPadding, height, markerConfiguration);\n }\n }\n calculateSelectedLabelPosition(markerPosition, widthWithPadding, width) {\n return clamp(markerPosition - widthWithPadding / 2, 0, width - widthWithPadding);\n }\n drawLabelContent(ctx, color, marker, labelPosition, widthWithPadding, heightWithPadding, height, markerConfiguration) {\n ctx.font = markerConfiguration.font;\n ctx.fillStyle = color;\n ctx.fillRect(labelPosition, 0, widthWithPadding, heightWithPadding);\n ctx.fillStyle = marker.labelColor || DEFAULT_TEXT_COLOR;\n ctx.fillText(marker.label, labelPosition + DEFAULT_LABEL_PADDING, height + DEFAULT_LABEL_PADDING);\n }\n}\n","import { pointToRangeIntersect } from \"../../helpers/math\";\nimport { DefaultMarkerRenderer } from \"./DefaultMarkerRenderer\";\nimport { MarkerDeselectionMode } from \"../../enums\";\nimport RBush from \"rbush\";\nconst MAX_INDEX_TREE_WIDTH = 16;\n/**\n * Handles rendering timeline markers on the canvas\n * Implements BaseComponentInterface for a consistent component structure\n */\nexport class Markers {\n constructor(api) {\n this._sortedMarkers = [];\n this._collapsedMarkers = []; // Store collapsed markers separately\n this.index = new RBush(MAX_INDEX_TREE_WIDTH);\n // Tracks last rendered label positions to prevent overlapping\n this.lastRenderedLabelPosition = { top: Infinity, bottom: Infinity };\n this.textWidthCache = new Map();\n this._selectedMarkers = new Set();\n this.hoveredMarker = undefined;\n this.handleCanvasMouseup = (event) => {\n const { clickMarkerCollectionFilter, markerDeselectionMode = MarkerDeselectionMode.ON_CLICK_ANYWHERE, } = this.api.getTimelineSettings();\n let candidates = this.getMarkersAtPoint(event.offsetX, event.offsetY);\n if (clickMarkerCollectionFilter) {\n candidates = clickMarkerCollectionFilter(candidates);\n }\n const times = candidates.map((marker) => marker.time);\n const arraysAreEqual = times.length === this._selectedMarkers.size &&\n times.every((num) => this._selectedMarkers.has(num));\n const isMarkerOnlyMode = markerDeselectionMode === MarkerDeselectionMode.ON_MARKER_CLICK_ONLY;\n const emitAndRender = (markers) => {\n this.api.emit(\"on-marker-select-change\", {\n markers,\n time: this.api.positionToTime(event.offsetX),\n relativeX: event.clientX,\n relativeY: event.clientY,\n });\n this.api.rerender();\n };\n if (isMarkerOnlyMode && !candidates.length)\n return;\n if (arraysAreEqual) {\n if (!isMarkerOnlyMode)\n return;\n // In ON_MARKER_CLICK_ONLY mode, clicking on the already selected marker should deselect it\n this._selectedMarkers.clear();\n emitAndRender([]);\n return;\n }\n if (candidates.length) {\n this._selectedMarkers = new Set(times);\n const groupMarker = candidates.find((marker) => Boolean(marker.group));\n if (groupMarker) {\n this.handleGroupMarkerClick(groupMarker);\n }\n emitAndRender(candidates);\n return;\n }\n if (!isMarkerOnlyMode) {\n this._selectedMarkers.clear();\n emitAndRender([]);\n }\n };\n this.handleCanvasMousemove = (event) => {\n const candidates = this.getMarkersAtPoint(event.offsetX, event.offsetY);\n const newHover = candidates.length ? candidates[0].time : undefined;\n if (this.hoveredMarker === newHover)\n return;\n this.hoveredMarker = newHover;\n this.api.rerender();\n };\n this.api = api;\n this.addEventListeners();\n }\n /**\n * Updates markers data and triggers re-render\n * @param markers - Array of timeline markers to display\n */\n setMarkers(markers) {\n // Sort markers by time for efficient rendering\n this._sortedMarkers = markers.slice().sort((a, b) => a.time - b.time);\n this._collapsedMarkers = []; // Reset collapsed markers\n this.rebuildIndex();\n this.render();\n }\n getMarkersAt(rect) {\n const { markers: { hitboxPadding }, } = this.api.getViewConfiguration();\n const markers = this.index.search({\n minX: this.api.positionToTime(rect.left - hitboxPadding),\n maxX: this.api.positionToTime(rect.right + hitboxPadding),\n minY: 0,\n maxY: this.api.ctx.canvas.height,\n });\n return markers\n .filter((box) => !box.marker.nonSelectable)\n .map((box) => box.marker);\n }\n getMarkersAtPoint(x, y) {\n const p = 6;\n return this.getMarkersAt(new DOMRect(x - p / 2, y - p / 2, p, p));\n }\n isSelectedMarker(time) {\n return this._selectedMarkers.has(time);\n }\n isHoveredMarker(time) {\n return this.hoveredMarker === time;\n }\n /**\n * Renders all visible markers within the current viewport\n */\n render() {\n this.api.useStaticTransform();\n // Reset label positions for a new render pass\n this.lastRenderedLabelPosition = { top: Infinity, bottom: Infinity };\n const { start, end } = this.api.getInterval();\n const visibleMarkers = [];\n for (let i = 0; i < this._sortedMarkers.length; i += 1) {\n const marker = this._sortedMarkers[i];\n const overscan = marker.label\n ? this.api.widthToTime(this.getLabelSize(marker.label).width)\n : 0;\n if (pointToRangeIntersect(marker.time, start - overscan, end + overscan)) {\n visibleMarkers.push(marker);\n }\n }\n const collapsedMarkers = this.collapseCloseSimilarMarkers(visibleMarkers);\n // Store collapsed markers for later use\n this._collapsedMarkers = collapsedMarkers;\n // Rebuild index with both original and collapsed markers\n this.rebuildIndexWithCollapsedMarkers();\n // Render in z-index order: normal -> selected -> hovered (last = on top)\n const renderMarker = (marker, isSelected, isHovered) => {\n const renderer = marker.renderer || new DefaultMarkerRenderer();\n renderer.render({\n ctx: this.api.ctx,\n marker,\n isSelected,\n isHovered,\n markerPosition: this.api.timeToPosition(marker.time),\n viewConfiguration: this.api.getViewConfiguration(),\n lastRenderedLabelPosition: this.lastRenderedLabelPosition,\n timeToPosition: this.api.timeToPosition,\n getLabelSize: this.getLabelSize.bind(this),\n });\n };\n // First pass: render normal markers (neither selected nor hovered)\n for (let i = collapsedMarkers.length - 1; i >= 0; i -= 1) {\n const marker = collapsedMarkers[i];\n if (!this.isSelectedMarker(marker.time) &&\n !this.isHoveredMarker(marker.time)) {\n renderMarker(marker, false, false);\n }\n }\n // Second pass: render selected markers (on top of normal)\n for (let i = collapsedMarkers.length - 1; i >= 0; i -= 1) {\n const marker = collapsedMarkers[i];\n if (this.isSelectedMarker(marker.time) &&\n !this.isHoveredMarker(marker.time)) {\n renderMarker(marker, true, false);\n }\n }\n // Third pass: render hovered markers (on top of all)\n for (let i = collapsedMarkers.length - 1; i >= 0; i -= 1) {\n const marker = collapsedMarkers[i];\n if (this.isHoveredMarker(marker.time)) {\n renderMarker(marker, false, true);\n }\n }\n }\n destroy() {\n this.api.canvas.removeEventListener(\"mouseup\", this.handleCanvasMouseup);\n this.api.canvas.removeEventListener(\"mousemove\", this.handleCanvasMousemove);\n }\n rebuildIndex() {\n const boxes = this._sortedMarkers.map((marker) => {\n const minX = marker.time;\n const maxX = marker.time;\n const minY = 0;\n const maxY = this.api.ctx.canvas.height;\n return { minX, maxX, minY, maxY, marker };\n });\n this.index.clear();\n this.index.load(boxes);\n }\n getLabelSize(text) {\n if (this.textWidthCache.has(text)) {\n return this.textWidthCache.get(text);\n }\n const measureResult = this.api.ctx.measureText(text);\n const result = {\n width: measureResult.width,\n height: measureResult.actualBoundingBoxAscent +\n measureResult.actualBoundingBoxDescent,\n };\n this.textWidthCache.set(text, result);\n return result;\n }\n addEventListeners() {\n this.api.canvas.addEventListener(\"mouseup\", this.handleCanvasMouseup);\n this.api.canvas.addEventListener(\"mousemove\", this.handleCanvasMousemove);\n }\n /**\n * Rebuilds the spatial index including both original and collapsed markers\n */\n rebuildIndexWithCollapsedMarkers() {\n const boxes = [];\n // Add original markers\n for (const marker of this._sortedMarkers) {\n const minX = marker.time;\n const maxX = marker.time;\n const minY = 0;\n const maxY = this.api.ctx.canvas.height;\n boxes.push({ minX, maxX, minY, maxY, marker });\n }\n // Add collapsed markers (they might have different times due to averaging)\n for (const marker of this._collapsedMarkers) {\n if (marker.group) {\n // Only add grouped markers\n const minX = marker.time;\n const maxX = marker.time;\n const minY = 0;\n const maxY = this.api.ctx.canvas.height;\n boxes.push({ minX, maxX, minY, maxY, marker });\n }\n }\n this.index.clear();\n this.index.load(boxes);\n }\n /**\n * Collapses groups of similar markers that are closer than or equal to\n * `viewConfiguration.markers.collapseMinDistance` pixels in the current zoom level.\n *\n * This function groups markers that are visually close together and creates\n * a single representative marker for each group, improving readability.\n * @param markers - Array of markers to process\n * @returns Array of collapsed markers where close groups are merged\n */\n collapseCloseSimilarMarkers(markers) {\n if (!markers.length)\n return markers;\n const { markers: markersCfg } = this.api.getViewConfiguration();\n if (!markersCfg.collapseEnabled)\n return markers;\n const collapseDistance = markersCfg.collapseMinDistance;\n // Early return if collapse distance is 0 or negative (no collapsing)\n if (collapseDistance <= 0)\n return markers;\n // Pre-calculate positions to avoid repeated API calls\n const markersWithPositions = markers\n .map((marker) => ({\n marker,\n position: this.api.timeToPosition(marker.time),\n }))\n .sort((a, b) => a.position - b.position);\n const result = [];\n let currentGroup = [];\n let lastPosition = Number.NEGATIVE_INFINITY;\n const flushCurrentGroup = () => {\n if (!currentGroup.length)\n return;\n if (currentGroup.length === 1) {\n result.push(currentGroup[0]);\n }\n else {\n const avgTime = this.calculateAverageTime(currentGroup);\n const template = currentGroup[0];\n const groupedMarker = {\n ...template,\n time: avgTime,\n label: `${currentGroup.length}`,\n group: true,\n };\n result.push(groupedMarker);\n }\n currentGroup = [];\n };\n for (const { marker, position } of markersWithPositions) {\n if (!currentGroup.length) {\n currentGroup.push(marker);\n lastPosition = position;\n continue;\n }\n const isCloseEnough = Math.abs(position - lastPosition) <= collapseDistance;\n if (isCloseEnough) {\n currentGroup.push(marker);\n lastPosition = position;\n }\n else {\n flushCurrentGroup();\n currentGroup.push(marker);\n lastPosition = position;\n }\n }\n flushCurrentGroup();\n return result;\n }\n /**\n * Calculates the average time for a group of markers.\n * Used when collapsing multiple markers into a single representative marker.\n * @param markers - Array of markers to calculate average time for\n * @returns Rounded average time value\n */\n calculateAverageTime(markers) {\n const totalTime = markers.reduce((sum, marker) => sum + marker.time, 0);\n return Math.round(totalTime / markers.length);\n }\n /**\n * Handles click on a grouped marker by zooming to show all markers in the group\n * @param groupMarker - The grouped marker that was clicked\n */\n handleGroupMarkerClick(groupMarker) {\n const { markers: markersCfg } = this.api.getViewConfiguration();\n if (!markersCfg.groupZoomEnabled)\n return;\n const groupMarkers = this.findMarkersInGroup(groupMarker);\n if (groupMarkers.length <= 1)\n return;\n const { start, end } = this.calculateGroupInterval(groupMarkers);\n this.api.setRange(start, end);\n this.api.emit(\"on-group-marker-click\", {\n groupMarker,\n originalMarkers: groupMarkers,\n newInterval: { start, end },\n });\n }\n /**\n * Finds all original markers that were collapsed into a group\n * @param groupMarker - The grouped marker to find original markers for\n * @returns Array of original markers in the group\n */\n findMarkersInGroup(groupMarker) {\n const { markers: markersCfg } = this.api.getViewConfiguration();\n const collapseDistance = markersCfg.collapseMinDistance;\n if (!collapseDistance || collapseDistance <= 0)\n return [groupMarker];\n const groupTime = groupMarker.time;\n const groupPosition = this.api.timeToPosition(groupTime);\n const allMarkers = [...this._sortedMarkers, ...this._collapsedMarkers];\n const foundMarkers = allMarkers.filter((marker) => {\n // Skip the group marker itself\n if (marker.group)\n return false;\n const markerPosition = this.api.timeToPosition(marker.time);\n const distance = Math.abs(markerPosition - groupPosition);\n return distance <= collapseDistance;\n });\n return foundMarkers;\n }\n /**\n * Calculates an optimal interval to show all markers in a group\n * @param groupMarkers - Array of markers in the group\n * @returns Object with start and end times for the new interval\n */\n calculateGroupInterval(groupMarkers) {\n const { markers } = this.api.getViewConfiguration();\n const { start: currentStart, end: currentEnd } = this.api.getInterval();\n const currentDomain = currentEnd - currentStart;\n const groupTimes = groupMarkers.map((m) => m.time);\n const minTime = Math.min(...groupTimes);\n const maxTime = Math.max(...groupTimes);\n const groupDomain = maxTime - minTime;\n const padding = Math.max(groupDomain * markers.groupZoomPadding, 1000);\n let newStart = minTime - padding;\n let newEnd = maxTime + padding;\n const newDomain = newEnd - newStart;\n const maxFactor = markers.groupZoomMaxFactor;\n if (newDomain > currentDomain * maxFactor) {\n // If the new domain is too large, center the group in the current view\n const center = (minTime + maxTime) / 2;\n const halfDomain = (currentDomain * maxFactor) / 2;\n newStart = center - halfDomain;\n newEnd = center + halfDomain;\n }\n return { start: Math.round(newStart), end: Math.round(newEnd) };\n }\n}\n","import { Axes } from \"./components/Axes\";\nimport { Ruler } from \"./components/Ruler\";\nimport { Grid } from \"./components/Grid\";\nimport { Events } from \"./components/Events\";\nimport { defaultViewConfig } from \"./constants/options\";\nimport { CanvasApi } from \"./CanvasApi\";\nimport { TimelineController } from \"./TimelineController\";\nimport { ComponentType, TimelineState } from \"./enums\";\nimport { Markers } from \"./components/Markers\";\n/**\n * The main Timeline class that manages the timeline visualization and interactions\n * Handles component initialization, event management, and timeline state\n */\nexport class Timeline {\n /**\n * Creates a new Timeline instance\n * @param config - Configuration object containing timeline settings and view configuration\n * @example\n * const timeline = new Timeline({\n * settings: {\n * start: Date.now(),\n * end: Date.now() + 3600000,\n * axes: [],\n * events: []\n * selectedEventIds: []\n * }\n * });\n */\n constructor(config) {\n this.eventEmitter = new EventTarget();\n this.state = TimelineState.INIT;\n this.viewConfiguration = this.getViewConfig(config.viewConfiguration);\n this.settings = config.settings;\n }\n /**\n * Initializes the timeline with a canvas element\n * Sets up components, axes, events, and markers\n * @param canvas - HTML canvas element to render the timeline on\n * @throws {Error} If the provided canvas is invalid or not an HTMLCanvasElement\n * @example\n * const canvas = document.querySelector('canvas');\n * timeline.init(canvas);\n */\n init(canvas) {\n if (!canvas || !(canvas instanceof HTMLCanvasElement)) {\n throw new Error(\"Invalid canvas element provided to Timeline.init()\");\n }\n if (this.state !== TimelineState.INIT)\n return;\n this.canvas = canvas;\n this.canvasScrollTop = 0;\n this.api = new CanvasApi(this);\n this.initComponents();\n this.api.setAxes(this.settings.axes);\n this.api.setEvents(this.settings.events);\n this.api.setMarkers(this.settings.markers || []);\n this.api.setSelectedEvents(this.settings.selectedEventIds || []);\n this.controller = new TimelineController(this.api);\n this.state = TimelineState.READY;\n }\n /**\n * Destroys the timeline instance, cleaning up all resources and event listeners\n * This method should be called when the timeline is no longer needed\n * @example\n * // Clean up when a component unmounts\n * timeline.destroy();\n */\n destroy() {\n this.controller.destroy();\n if (this.api) {\n this.api.destroy();\n }\n }\n /**\n * Adds an event listener to the timeline\n * @template EventName - The type of event to listen for, must be a key of ApiEvent\n * @template Cb - The callback function type, must match the event type in ApiEvent\n * @param type - The event type to listen for\n * @param listener - The callback function that will be called when the event occurs\n * @param options - Optional event listener options (same as addEventListener options)\n * @example\n * timeline.on('eventClick', (detail) => {\n * console.log('Event clicked:', detail);\n * });\n */\n on(type, listener, options) {\n this.eventEmitter.addEventListener(type, listener, options);\n }\n /**\n * Removes an event listener from the timeline\n * @template EventName - The type of event to remove listener from, must be a key of ApiEvent\n * @template Cb - The callback function type, must match the event type in ApiEvent\n * @param type - The event type to remove the listener from\n * @param listener - The callback function to remove\n * @param options - Optional event listener options (same as removeEventListener options)\n * @example\n * const handler = (detail) => console.log(detail);\n * timeline.on('eventClick', handler);\n * // Later...\n * timeline.off('eventClick', handler);\n */\n off(type, listener, options) {\n this.eventEmitter.removeEventListener(type, listener, options);\n }\n /**\n * Emits an event to all registered listeners\n * @template EventName - The type of event to emit, must be a key of ApiEvent\n * @template Cb - The callback function type, must match the event type in ApiEvent\n * @template P - The type of the event detail parameter\n * @param type - The event type to emit\n * @param detail - Optional data to pass with the event\n * @returns The created CustomEvent instance\n * @example\n * timeline.emit('eventClick', { eventId: '123', time: Date.now() });\n */\n emit(type, detail) {\n const event = new CustomEvent(type, {\n detail,\n bubbles: false,\n cancelable: true,\n });\n this.eventEmitter.dispatchEvent(event);\n return event;\n }\n /**\n * Merges default view configuration with provided configuration\n * @param config - Optional view configuration to merge with defaults\n * @returns Merged view configuration\n * @private\n */\n getViewConfig(config) {\n if (!config)\n return defaultViewConfig;\n return {\n ruler: { ...defaultViewConfig.ruler, ...config.ruler },\n grid: { ...defaultViewConfig.grid, ...config.grid },\n axes: { ...defaultViewConfig.axes, ...config.axes },\n markers: { ...defaultViewConfig.markers, ...config.markers },\n events: { ...defaultViewConfig.events, ...config.events },\n camera: { ...defaultViewConfig.camera, ...config.camera },\n hideRuler: config.hideRuler === undefined\n ? defaultViewConfig.hideRuler\n : config.hideRuler,\n };\n }\n /**\n * Initializes all timeline components\n * Creates and adds Grid, Axes, Events, Ruler (if not hidden), and Markers components\n * @private\n */\n initComponents() {\n this.api.addComponent(ComponentType.Grid, new Grid(this.api));\n this.api.addComponent(ComponentType.Axes, new Axes(this.api));\n this.api.addComponent(ComponentType.Events, new Events(this.api));\n if (!this.viewConfiguration.hideRuler) {\n this.api.addComponent(ComponentType.Ruler, new Ruler(this.api));\n }\n this.api.addComponent(ComponentType.Markers, new Markers(this.api));\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","const COMPLETED_STATES = ['completed', 'failed', 'aborted'];\n\nexport const isFinalState = (state: string) => COMPLETED_STATES.indexOf(state) !== -1;\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';\nimport {isFinalState} from '../helpers/isFinalState';\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 const eventDuration = event.endTime - event.startTime;\n const isFinal = isFinalState(event.state);\n\n acc.push({\n phase: <PhaseNameCell state={event.state} phase=\"—\" />,\n duration: isFinal\n ? hammer.format.NO_VALUE\n : hammer.format['TimeDuration'](eventDuration, {\n format: 'milliseconds',\n }),\n startTime: getDateTime(event.startTime),\n });\n\n event.phases.forEach((eventPhase, index) => {\n const nextPhase = event.phases[index + 1];\n const phaseEndTime = nextPhase ? nextPhase.startTime : event.endTime;\n const phaseDuration = phaseEndTime - eventPhase.startTime;\n\n acc.push({\n phase: <PhaseNameCell state={event.state} phase={eventPhase.phase} />,\n duration: isFinal\n ? hammer.format.NO_VALUE\n : hammer.format['TimeDuration'](phaseDuration, {\n format: 'milliseconds',\n }),\n startTime: getDateTime(eventPhase.startTime),\n });\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 {Flex, 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\ntype ItemProps = {\n title: string;\n value: string;\n showCopy?: boolean;\n};\n\nconst MetaItem: FC<ItemProps> = ({title, value, showCopy}) => {\n return (\n <>\n <Text color=\"secondary\">{title}</Text>\n <Flex alignItems=\"flex-start\" gap={1}>\n <span>{value}</span>\n {showCopy && (\n <ClipboardButton\n className={block('copy-button')}\n view=\"flat-secondary\"\n text={value}\n size=\"s\"\n />\n )}\n </Flex>\n </>\n );\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 <MetaItem\n title=\"Allocation id\"\n value={meta.allocationId}\n showCopy={showCopyButton}\n />\n )}\n {meta.incarnation && (\n <MetaItem\n title=\"Incarnation id\"\n value={meta.incarnation}\n showCopy={showCopyButton}\n />\n )}\n <MetaItem\n title=\"Address\"\n value={hammer.format['Address'](meta.address)}\n showCopy={showCopyButton}\n />\n <MetaItem\n title=\"Start\"\n value={hammer.format['DateTime'](meta.startTime)}\n showCopy={showCopyButton}\n />\n <MetaItem\n title=\"End\"\n value={meta.endTime ? hammer.format['DateTime'](meta.endTime) : '—'}\n showCopy={showCopyButton}\n />\n {duration && (\n <MetaItem\n title=\"Duration\"\n value={hammer.format['TimeDuration'](duration.asMilliseconds())}\n showCopy={showCopyButton}\n />\n )}\n </div>\n );\n};\n","import React, {FC} from 'react';\nimport {Flex} from '@gravity-ui/uikit';\nimport './SidePanelEmpty.scss';\nimport cn from 'bem-cn-lite';\nimport {NoContent} from '../../../../../../components/NoContent/NoContent';\n\nconst block = cn('yt-side-panel-empty');\n\nexport const SidePanelEmpty: FC = () => {\n return (\n <Flex className={block()} alignItems=\"center\" justifyContent=\"center\">\n <NoContent className={block('message')} hint=\"Select job for more details\" />\n </Flex>\n );\n};\n","import React, {FC, useCallback, useEffect, useRef} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n getSelectedJob,\n selectActiveJob,\n} from '../../../../../../store/selectors/operations/jobs-timeline';\nimport {setSelectedJob} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport Link from '../../../../../../components/Link/Link';\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';\nimport {SidePanelEmpty} from './SidePanelEmpty';\n\nconst block = cn('yt-events-side-panel');\n\nexport const EventsSidePanel: FC = () => {\n const dispatch = useDispatch();\n const containerRef = useRef<HTMLDivElement>(null);\n const id = useSelector(selectActiveJob);\n const job = useSelector(getSelectedJob);\n const cluster = useSelector(getCluster);\n const operationId = useSelector(getOperationId);\n\n const handleOutsideClick = useCallback(\n (event: MouseEvent) => {\n if (\n id &&\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n // exclude timeline & gutter click\n const target = event.target as Element;\n const timelineElement = target.closest('.yt-operation-timeline');\n const gutterElement = target.closest('.gutter');\n const headerControls = target.closest('.yt-timeline-header');\n\n if (!timelineElement && !gutterElement && !headerControls) {\n dispatch(setSelectedJob(''));\n }\n }\n },\n [dispatch, id],\n );\n\n useEffect(() => {\n document.addEventListener('click', handleOutsideClick);\n\n return () => {\n document.removeEventListener('click', handleOutsideClick);\n };\n }, [handleOutsideClick]);\n\n if (!id || !job) return <SidePanelEmpty />;\n\n return (\n <div ref={containerRef} 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 </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 incarnation: job.incarnation,\n }}\n showCopyButton\n />\n <div className={block('separator')} />\n <EventsTable events={job.events} />\n </div>\n );\n};\n","export enum EventDisplayMode {\n Selected = 'selected',\n SelectedFound = 'selectedFound',\n Found = 'found',\n FoundIncarnation = 'foundIncarnation',\n Transparent = 'transparent',\n Default = '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 {EventDisplayMode} from '../enums';\nimport {convertToRGBA} from '../helpers/convertToRGBA';\nimport {getCssColor} from '../../../utils/get-css-color';\nimport {AbstractEventRenderer, TimelineEvent, ViewConfiguration} from '@gravity-ui/timeline';\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 incarnation?: string;\n };\n displayMode: EventDisplayMode;\n};\n\nconst MIN_LINE_WIDTH = 8;\nconst DEFAULT_COLOR = '#333';\nconst SELECTION_OUTLINE_THICKNESS = 2;\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 h: number,\n _: ViewConfiguration,\n timeToPosition: (t: number) => number,\n ) {\n const {displayMode, parts} = event;\n const y0 = y - h / 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, h);\n }\n\n if (displayMode === EventDisplayMode.FoundIncarnation) {\n this.renderIncarnationBackground(ctx, x0, x1, y0, h);\n }\n\n let startX = x0;\n parts.forEach(({color, percentage, state, phases, interval}) => {\n const width = Math.max(0, Math.min(percentage * percent, x1 - startX));\n\n if (state.toLowerCase() === 'running') {\n const phaseCount = phases.length;\n for (let i = 0; i < phaseCount; i++) {\n const rawStartPosition = timeToPosition(phases[i].startTime);\n const rawEndPosition =\n i === phaseCount - 1\n ? timeToPosition(interval.to)\n : timeToPosition(phases[i + 1].startTime);\n\n // Clamp positions to [x0, x1] bounds\n const startPosition = Math.max(x0, Math.min(x1, rawStartPosition));\n const endPosition = Math.max(startPosition, Math.min(x1, rawEndPosition));\n\n const phaseWidth = endPosition - startPosition;\n\n // Only draw if there's visible width\n if (phaseWidth > 0) {\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(startPosition, y0, phaseWidth, h);\n ctx.fill();\n }\n }\n } else {\n // Only draw if there's visible width\n if (width > 0) {\n ctx.beginPath();\n ctx.fillStyle = convertToRGBA(\n color || DEFAULT_COLOR,\n isTransparent ? 0.4 : 0.7,\n );\n ctx.rect(startX, y0, width, h);\n ctx.fill();\n }\n }\n startX += width;\n });\n\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x0 + 8, y0 + h / 2);\n ctx.lineTo(x0, y0 + h);\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 + h / 2);\n ctx.lineTo(x1, y0 + h);\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, h, displayMode);\n }\n }\n\n renderFilterBackground(\n ctx: CanvasRenderingContext2D,\n x0: number,\n x1: number,\n y: number,\n h: number,\n ) {\n this.renderBackground(ctx, x0, x1, y, h, 'rgba(255, 219, 77)');\n }\n\n renderIncarnationBackground(\n ctx: CanvasRenderingContext2D,\n x0: number,\n x1: number,\n y: number,\n h: number,\n ) {\n this.renderBackground(ctx, x0, x1, y, h, 'rgb(244,94,2)');\n }\n\n renderSelectedBorder(\n ctx: CanvasRenderingContext2D,\n x0: number,\n x1: number,\n y: number,\n h: number,\n displayMode: EventDisplayMode,\n ) {\n const borderThickness = SELECTION_OUTLINE_THICKNESS;\n const borderColor = getCssColor('--g-color-line-brand');\n const backgroundColor = getCssColor('--g-color-base-background');\n\n const borderX0 = x0 + borderThickness / 2;\n const borderWidth = x1 - x0 - borderThickness;\n const borderY0 = y - borderThickness;\n const borderHeight = h + 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 = h + 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) {\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 private renderBackground(\n ctx: CanvasRenderingContext2D,\n x0: number,\n x1: number,\n y: number,\n h: number,\n fillColor: string,\n ) {\n const borderThickness = SELECTION_OUTLINE_THICKNESS;\n\n ctx.beginPath();\n ctx.rect(\n x0 - borderThickness,\n y - borderThickness,\n x1 - x0 + borderThickness * 2,\n h + borderThickness * 2,\n );\n ctx.fillStyle = fillColor;\n ctx.fill();\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';\nimport {isFinalState} from '../helpers/isFinalState';\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 const isFinal = isFinalState(state);\n\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>\n {isFinal\n ? hammer.format.NO_VALUE\n : hammer.format['TimeDuration'](duration, {format: 'milliseconds'})}\n </div>\n </Flex>\n );\n};\n","import React, {FC, useMemo} from 'react';\nimport {JobLineEvent} 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 event: JobLineEvent;\n};\n\nexport const EventTimelineTooltipContent: FC<Props> = ({event: {parts, jobId, meta}}) => {\n const phaseItems = useMemo(() => {\n if (!parts) return [];\n return parts.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 nextPhase = arr[i + 1];\n const phaseEndTime = nextPhase ? nextPhase.startTime : interval.to;\n const duration = phaseEndTime - startTime;\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_' + eventDuration}\n state={state}\n duration={eventDuration}\n />,\n ...items,\n ];\n }, []);\n }, [parts]);\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={meta} />\n <Flex direction=\"column\" gap={1} className={block('phases')}>\n {phaseItems}\n </Flex>\n </Flex>\n );\n};\n","import React, { useEffect, useRef } from \"react\";\nexport const TimelineCanvas = ({ timeline, className, }) => {\n const canvasRef = useRef(null);\n useEffect(() => {\n timeline.init(canvasRef.current);\n return () => {\n timeline.destroy();\n };\n }, [timeline]);\n return (React.createElement(\"canvas\", { ref: canvasRef, className: className, tabIndex: 0, style: {\n position: \"relative\",\n height: \"100%\",\n width: \"100%\",\n } }));\n};\n","import { useCallback, useLayoutEffect } from \"react\";\nexport function useTimelineEvent(timeline, event, cb) {\n const onEvent = useCallback((e) => {\n cb(e.detail, e);\n }, [cb]);\n useLayoutEffect(() => {\n if (!timeline)\n return;\n timeline.on(event, onEvent);\n }, [timeline, event, onEvent]);\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, {useCallback, useEffect, useRef, useState} from 'react';\nimport {HoverEvent, Timeline, TimelineEvent, TimelineMarker} from '@gravity-ui/timeline';\nimport {useTimelineEvent} from '@gravity-ui/timeline/react';\nimport {Popup} from '@gravity-ui/uikit';\n\ntype Props<TEvent extends TimelineEvent, TMarker extends TimelineMarker> = {\n content: (event: TEvent) => React.ReactNode;\n timeline: Timeline<TEvent, TMarker>;\n parentRef?: React.RefObject<HTMLDivElement>;\n delay?: number;\n};\n\ntype Position = {x0: number; x1: number; y0: number; h: number};\n\nexport const EventPopup = <\n TEvent extends TimelineEvent = TimelineEvent,\n TMarker extends TimelineMarker = TimelineMarker,\n>({\n timeline,\n content,\n parentRef,\n delay = 400,\n}: Props<TEvent, TMarker>) => {\n const anchorRef = useRef<HTMLDivElement>(null);\n const [eventData, setEventData] = useState<{event: TEvent; position: Position} | undefined>(\n undefined,\n );\n const [showPopup, setShowPopup] = useState(false);\n const hoverTimeout = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n return () => {\n if (hoverTimeout.current) {\n clearTimeout(hoverTimeout.current);\n }\n };\n }, []);\n\n const handleEventsHover = useCallback(\n ({events}: HoverEvent<TEvent>) => {\n if (hoverTimeout.current) {\n clearTimeout(hoverTimeout.current);\n }\n\n const jobEvent = events.find((e) => 'jobId' in e);\n if (!jobEvent) return;\n\n const position = timeline.api.getEventPosition(jobEvent);\n setEventData({event: jobEvent, position});\n\n hoverTimeout.current = setTimeout(() => {\n setShowPopup(true);\n }, delay);\n },\n [delay, timeline.api],\n );\n\n const handleEventLeave = useCallback(() => {\n if (hoverTimeout.current) {\n clearTimeout(hoverTimeout.current);\n }\n setShowPopup(false);\n setEventData(undefined);\n }, []);\n\n const handleParentLeave = useCallback(\n (e: MouseEvent) => {\n if (parentRef && parentRef.current && parentRef.current.contains(e.target as Node)) {\n return;\n }\n handleEventLeave();\n },\n [handleEventLeave, parentRef],\n );\n\n useEffect(() => {\n document.addEventListener('mouseleave', handleParentLeave);\n\n return () => {\n document.removeEventListener('mouseleave', handleParentLeave);\n };\n }, [handleParentLeave, parentRef]);\n\n useTimelineEvent(timeline, 'on-hover', handleEventsHover);\n\n useTimelineEvent(timeline, 'on-leave', handleEventLeave);\n\n useTimelineEvent(timeline, 'on-camera-change', handleEventLeave);\n\n if (!eventData) return null;\n\n return (\n <>\n <div\n ref={anchorRef}\n style={{\n position: 'absolute',\n top: eventData.position.y0 - eventData.position.h / 2,\n left: eventData.position.x0,\n width: eventData.position.x1 - eventData.position.x0,\n height: eventData.position.h,\n zIndex: 1,\n pointerEvents: 'none',\n }}\n ></div>\n <Popup\n key={eventData.event.id}\n anchorRef={anchorRef}\n open={showPopup}\n onMouseLeave={handleEventLeave}\n onOutsideClick={handleEventLeave}\n >\n {content(eventData.event)}\n </Popup>\n </>\n );\n};\n","import React, {FC, PropsWithChildren, useCallback, useEffect, useRef} from 'react';\nimport {\n MarkerSelectEvent,\n SelectEvent,\n Timeline,\n TimelineEvent,\n TimelineMarker,\n} from '@gravity-ui/timeline';\nimport {TimelineCanvas, useTimelineEvent} from '@gravity-ui/timeline/react';\nimport {Flex} from '@gravity-ui/uikit';\nimport {GroupCollapse, Props as GroupCollapseProps} from './GroupCollapse';\nimport {EventPopup} from './EventPopup';\nimport cn from 'bem-cn-lite';\nimport {VirtualList} from '../List/VirtualList';\nimport './TimelineBlock.scss';\n\nconst MAX_LIST_VISIBLE_COUNT = 25;\n\nconst block = cn('yt-events-block');\n\ntype Interval = {from: number; to: number};\n\ntype Props<TEvent extends TimelineEvent, TMarker extends TimelineMarker> = {\n listItems: string[];\n rowHeight: number;\n topPadding: number;\n className?: string;\n timeline: Timeline<TEvent, TMarker>;\n selectedJob: string;\n tooltip: (event?: TEvent) => React.ReactNode;\n onTimelineClick: (events: SelectEvent<TEvent>) => void;\n onMarkerClick: (markers: MarkerSelectEvent<TMarker>) => void;\n onCameraChange: (interval: Interval) => void;\n};\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 = <TEvent extends TimelineEvent, TMarker extends TimelineMarker>({\n className,\n listItems,\n timeline,\n selectedJob,\n rowHeight,\n topPadding,\n tooltip,\n onTimelineClick,\n onMarkerClick,\n onCameraChange,\n}: Props<TEvent, TMarker>) => {\n const sidebarRef = useRef<HTMLDivElement>(null);\n const timelineWrapRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const selectedEvents = timeline.api.getSelectedEvents();\n if (!selectedJob && selectedEvents.length !== 0) {\n timeline.api.setSelectedEvents([]);\n }\n }, [selectedJob, timeline.api]);\n\n const handleScroll = useCallback(() => {\n if (sidebarRef.current) {\n timeline.api.setCanvasScrollTop(sidebarRef.current.scrollTop);\n }\n }, [timeline.api]);\n\n useTimelineEvent(timeline, 'on-camera-change', onCameraChange);\n\n useTimelineEvent(timeline, 'on-select-change', onTimelineClick);\n\n useTimelineEvent(timeline, 'on-marker-select-change', onMarkerClick);\n\n return (\n <Wrap>\n <Flex\n className={block(null, className)}\n style={{\n height: `${Math.min(listItems.length, MAX_LIST_VISIBLE_COUNT) * rowHeight + topPadding}px`,\n }}\n >\n <VirtualList\n className={block('list')}\n items={listItems}\n itemHeight={rowHeight}\n scrollRef={sidebarRef}\n renderItem={(item) => (\n <Flex\n className={block('list-item')}\n alignItems=\"center\"\n justifyItems=\"center\"\n >\n <div className={block('list-item-content')}>{item}</div>\n </Flex>\n )}\n onWrapperScroll={handleScroll}\n />\n <div ref={timelineWrapRef} className={block('timeline')}>\n <TimelineCanvas timeline={timeline} />\n <EventPopup timeline={timeline} content={tooltip} />\n </div>\n </Flex>\n </Wrap>\n );\n};\n","import {TimelineJob} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\n\nexport const getJobTrackId = (job: TimelineJob) => job.groupName + '_' + job.cookieId.toString();\n","import {\n AbstractMarkerRenderer,\n LabelSize,\n TimelineMarker,\n ViewConfiguration,\n clamp,\n} from '@gravity-ui/timeline';\n\nconst DEFAULT_FONT = '10px sans-serif';\nconst DEFAULT_LABEL_PADDING = 4;\nconst DEFAULT_LABEL_COLOR = '#333';\nconst DEFAULT_LABEL_LINE_WIDTH = 1;\n\nexport type IncarnationMarker = TimelineMarker & {\n incarnationId: string;\n};\n\nexport class IncarnationMarkerRenderer<\n TMarker extends TimelineMarker,\n> extends AbstractMarkerRenderer<TMarker> {\n render({\n ctx,\n isSelected,\n isHovered,\n marker,\n markerPosition,\n viewConfiguration,\n lastRenderedLabelPosition,\n getLabelSize,\n }: {\n ctx: CanvasRenderingContext2D;\n marker: TimelineMarker;\n isSelected: boolean;\n isHovered: boolean;\n markerPosition: number;\n viewConfiguration: ViewConfiguration;\n lastRenderedLabelPosition: {top: number; bottom: number};\n getLabelSize: (label: string) => LabelSize;\n }) {\n const {markers} = viewConfiguration;\n\n let color = isHovered ? marker.hoverColor : marker.color;\n if (marker.group) {\n color = (isHovered ? markers?.groupColorHover : markers?.groupColor) || marker.color;\n }\n if (isSelected) {\n color = marker.activeColor;\n }\n\n // Draw marker line\n ctx.strokeStyle = color;\n ctx.lineWidth = marker.lineWidth || DEFAULT_LABEL_LINE_WIDTH;\n if (marker.group) {\n ctx.setLineDash([5, 3]);\n } else {\n ctx.setLineDash([]);\n }\n ctx.beginPath();\n ctx.moveTo(markerPosition, 0);\n ctx.lineTo(markerPosition, ctx.canvas.height);\n ctx.stroke();\n\n if (!marker.label) return;\n\n if (isHovered || isSelected || marker.group) {\n this.renderLabel(\n ctx,\n color,\n marker,\n markerPosition,\n viewConfiguration.markers,\n lastRenderedLabelPosition,\n getLabelSize,\n );\n }\n }\n\n protected renderLabel(\n ctx: CanvasRenderingContext2D,\n color: string,\n marker: TimelineMarker,\n markerPosition: number,\n markerConfiguration: ViewConfiguration['markers'],\n lastRenderedLabelPosition: {top: number; bottom: number},\n getLabelSize: (label: string) => LabelSize,\n ) {\n const {width, height} = getLabelSize(marker.label!);\n const widthWithPadding = width + DEFAULT_LABEL_PADDING * 2;\n const heightWithPadding = height + DEFAULT_LABEL_PADDING * 2;\n //\n const labelPosition = clamp(\n markerPosition - widthWithPadding / 2, // Center label on marker\n 0, // Don't go past the left edge\n Math.min(ctx.canvas.width, lastRenderedLabelPosition['top']) - widthWithPadding, // Don't overlap previous labels\n );\n\n ctx.font = markerConfiguration?.font || DEFAULT_FONT;\n ctx.fillStyle = color;\n ctx.roundRect(labelPosition, 0, widthWithPadding, heightWithPadding, 4);\n ctx.fill();\n\n //Draw label text\n ctx.fillStyle = marker.labelColor || DEFAULT_LABEL_COLOR;\n ctx.fillText(\n marker.label!,\n labelPosition + DEFAULT_LABEL_PADDING,\n height + DEFAULT_LABEL_PADDING,\n );\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","import {AbstractEventRenderer, TimelineEvent} from '@gravity-ui/timeline';\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 h: number,\n ) {\n const height = h * 2;\n const y0 = y - height / 2;\n ctx.beginPath();\n ctx.fillStyle = 'rgba(107, 132, 153, 0.3)';\n ctx.rect(rawX0, y0, rawX1 - rawX0, height);\n ctx.fill();\n }\n\n getHitbox(_event: TimelineEvent, rawX0: number, rawX1: number) {\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 {EventDisplayMode} from '../../../../../../components/TimelineBlock/enums';\n\nexport const getTimeLineDisplayMode = ({\n jobId,\n filter = '',\n selectedJob = [],\n selectedByIncarnation = false,\n}: {\n jobId: string;\n filter?: string;\n selectedJob?: string[];\n selectedByIncarnation?: boolean;\n}): EventDisplayMode => {\n if (selectedByIncarnation) {\n return EventDisplayMode.FoundIncarnation;\n }\n\n const hasFilter = Boolean(filter);\n const hasSelectedJobs = selectedJob && Boolean(selectedJob[0]);\n const matchesFilter = hasFilter && jobId.includes(filter);\n const isSelected = selectedJob[0] === jobId;\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","import {JobsTimelineState} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {\n JobLineEvent,\n JobLineRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {getColorByState} from '../../../../../../components/TimelineBlock/helpers/getColorByState';\nimport {\n AllocationLineEvent,\n AllocationLineRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/AllocationLineRenderer';\nimport {getTimeLineDisplayMode} from './getTimeLineDisplayMode';\nimport {getJobTrackId} from './getJobTrackId';\n\ninterface AllocationData {\n from: number;\n to: number;\n trackId: string;\n}\n\nconst AXIS_ID = 'main';\n\nexport const prepareJobEvents = ({\n jobs,\n selectedJob = [],\n selectedIncarnation = '',\n filter = '',\n}: {\n jobs: JobsTimelineState['jobs'];\n selectedJob?: string[];\n selectedIncarnation?: string;\n filter?: string;\n}) => {\n // Process allocations\n const allocationMap = new Map<string, AllocationData>();\n\n const trackIdSet = new Set<string>();\n for (const job of jobs) {\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 trackId = getJobTrackId(job);\n trackIdSet.add(trackId);\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 trackId,\n });\n }\n }\n\n const cookieIds = Array.from(trackIdSet);\n\n // Convert allocations to events\n const allocations: AllocationLineEvent[] = Array.from(allocationMap.entries()).map(\n ([allocationId, allocation]) => ({\n id: allocationId,\n axisId: AXIS_ID,\n trackIndex: cookieIds.indexOf(allocation.trackId),\n from: allocation.from,\n to: allocation.to,\n renderer: new AllocationLineRenderer(),\n allocationId,\n }),\n );\n\n // Process jobs and collect axes\n const timelines: JobLineEvent[] = [];\n\n for (const job of jobs) {\n const trackId = getJobTrackId(job);\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 const displayMode = getTimeLineDisplayMode({\n jobId: job.id,\n filter,\n selectedJob,\n selectedByIncarnation: selectedIncarnation === job.incarnation,\n });\n\n timelines.push({\n id: job.id,\n axisId: AXIS_ID,\n trackIndex: cookieIds.indexOf(trackId),\n from: firstEvent.startTime,\n to: lastEvent.endTime,\n renderer: new JobLineRenderer(),\n jobId: job.id,\n parts,\n displayMode,\n meta: {\n startTime: job.start_time,\n endTime: job.finish_time,\n address: job.address,\n allocationId: job.allocationId,\n incarnation: job.incarnation,\n },\n });\n }\n\n return [...allocations, ...timelines];\n};\n","import React, {FC, useCallback, useEffect, useMemo} from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {MarkerSelectEvent, SelectEvent, Timeline} from '@gravity-ui/timeline';\nimport {\n selectActiveIncarnation,\n selectActiveJob,\n selectFilter,\n selectInterval,\n selectSortedJobs,\n} from '../../../../../../store/selectors/operations/jobs-timeline';\nimport {\n Interval,\n setInterval,\n setSelectedIncarnation,\n setSelectedJob,\n} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {splitScreen} from '../../../../../../store/actions/global';\nimport {EventsSidePanel} from '../EventsSidePanel';\nimport {\n JobLineEvent,\n JobLineRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {AllocationLineEvent} from '../../../../../../components/TimelineBlock/renderer/AllocationLineRenderer';\nimport {EventTimelineTooltipContent} from '../EventsTimeline/EventTimelineTooltipContent';\nimport {ROW_HEIGHT} from '../constants';\nimport {TimelineBlock} from '../../../../../../components/TimelineBlock/TimelineBlock';\nimport {prepareAxis} from '../helpers/prepareAxes';\nimport {prepareMarkers} from '../helpers/prepareMarkers';\nimport {prepareJobEvents} from '../helpers/prepareJobEvents';\nimport withSplit from '../../../../../../hocs/withSplit';\nimport './OperationTimeline.scss';\nimport {createTimelineConfig} from './createTimelineConfig';\nimport {IncarnationMarker} from '../../../../../../components/TimelineBlock/renderer/IncarnationMarkerRenderer';\nimport hammer from '../../../../../../common/hammer';\nimport {getJobTrackId} from '../helpers/getJobTrackId';\n\nconst block = cn('yt-operation-timeline');\n\nexport const SidePanelPortal = withSplit(React.Fragment);\n\nexport const OperationTimeline: FC = () => {\n const dispatch = useDispatch();\n const jobs = useSelector(selectSortedJobs);\n const interval = useSelector(selectInterval);\n const selectedJobId = useSelector(selectActiveJob);\n const selectedIncarnation = useSelector(selectActiveIncarnation);\n const filter = useSelector(selectFilter);\n\n const listItems = useMemo(() => {\n const set = jobs.reduce<Set<string>>((acc, job) => {\n acc.add(hammer.format['ReadableField'](getJobTrackId(job)));\n return acc;\n }, new Set());\n\n return Array.from(set);\n }, [jobs]);\n\n const timeline = useMemo(() => {\n return new Timeline<JobLineEvent | AllocationLineEvent, IncarnationMarker>(\n createTimelineConfig(),\n );\n }, []);\n\n const handleTimeLineClick = useCallback(\n ({events}: SelectEvent) => {\n if (!events.length) {\n dispatch(setSelectedJob(''));\n return;\n }\n\n const job = events.find((event) => event.renderer instanceof JobLineRenderer);\n if (!job) return;\n\n dispatch(setSelectedJob(job.id));\n },\n [dispatch],\n );\n\n const handleMarkerClick = useCallback(\n ({markers}: MarkerSelectEvent<IncarnationMarker>) => {\n if (!markers.length || 'group' in markers[0]) {\n dispatch(setSelectedIncarnation(''));\n return;\n }\n\n dispatch(setSelectedIncarnation(markers[0].incarnationId));\n },\n [dispatch],\n );\n\n const handleBoundsChanged = useCallback(\n (newInterval: Interval) => {\n dispatch(setInterval(newInterval));\n },\n [dispatch],\n );\n\n const handleMakeTimelineContent = useCallback(\n (event: JobLineEvent | AllocationLineEvent | undefined) => {\n if (!event || !('jobId' in event)) return null;\n return <EventTimelineTooltipContent event={event} />;\n },\n [],\n );\n\n useEffect(() => {\n dispatch(splitScreen('JobsTimeline'));\n }, [dispatch]);\n\n useEffect(() => {\n if (!timeline.api) return;\n\n timeline.api.setAxes(prepareAxis(jobs, 12, 15));\n timeline.api.setMarkers(prepareMarkers(jobs));\n }, [jobs, timeline]);\n\n useEffect(() => {\n if (!timeline.api) return;\n\n timeline.api.setEvents(\n prepareJobEvents({\n jobs,\n filter,\n selectedIncarnation,\n selectedJob: selectedJobId ? [selectedJobId] : [],\n }),\n );\n }, [jobs, filter, selectedJobId, selectedIncarnation, timeline]);\n\n useEffect(() => {\n if (!timeline.api || !interval) return;\n\n timeline.api.setRange(interval.from || 0, interval.to || 0);\n }, [interval, timeline]);\n\n return (\n <>\n <div className={block('wrap')}>\n <TimelineBlock<JobLineEvent | AllocationLineEvent, IncarnationMarker>\n className={block('block')}\n timeline={timeline}\n listItems={listItems}\n selectedJob={selectedJobId}\n rowHeight={ROW_HEIGHT}\n topPadding={15}\n tooltip={handleMakeTimelineContent}\n onCameraChange={handleBoundsChanged}\n onTimelineClick={handleTimeLineClick}\n onMarkerClick={handleMarkerClick}\n />\n </div>\n <SidePanelPortal>\n <EventsSidePanel />\n </SidePanelPortal>\n </>\n );\n};\n","import {JobLineRenderer} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {ROW_HEIGHT} from '../constants';\nimport {\n MarkerDeselectionMode,\n TimeLineConfig,\n TimelineEvent,\n TimelineMarker,\n} from '@gravity-ui/timeline';\n\nexport const createTimelineConfig = <\n TEvent extends TimelineEvent,\n TMarker extends TimelineMarker,\n>(): TimeLineConfig<TEvent, TMarker> => ({\n settings: {\n start: 0,\n end: 0,\n axes: [],\n events: [],\n markers: [],\n selectedEventIds: [],\n markerDeselectionMode: MarkerDeselectionMode.ON_MARKER_CLICK_ONLY,\n clickEventsCollectionFilter: (candidates) => {\n return candidates\n .filter((event) => event.renderer instanceof JobLineRenderer)\n .splice(0, 1);\n },\n clickMarkerCollectionFilter: (candidates) => {\n const group = candidates.find((candidate) => 'group' in candidate);\n if (group) return [group];\n\n return candidates.splice(0, 1);\n },\n },\n viewConfiguration: {\n axes: {\n trackHeight: ROW_HEIGHT,\n lineHeight: 12,\n },\n markers: {\n collapseMinDistance: 10,\n },\n hideRuler: true,\n },\n});\n","import {TimelineJob} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {TimelineAxis} from '@gravity-ui/timeline';\nimport {getJobTrackId} from './getJobTrackId';\n\nexport const AXIS_ID = 'main';\n\ntype Props = (jobs: TimelineJob[], axesRowHeight: number, topPadding: number) => TimelineAxis[];\n\nexport const prepareAxis: Props = (jobs, axesRowHeight, topPadding) => {\n const cookieIdSet = new Set<string>();\n for (const job of jobs) {\n if (!job.allocationId) continue;\n cookieIdSet.add(getJobTrackId(job));\n }\n\n return [\n {\n id: AXIS_ID,\n tracksCount: cookieIdSet.size,\n top: topPadding,\n height: axesRowHeight,\n },\n ];\n};\n","import {TimelineJob} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {\n IncarnationMarker,\n IncarnationMarkerRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/IncarnationMarkerRenderer';\n\ntype Props = (jobs: TimelineJob[]) => IncarnationMarker[];\n\nexport const prepareMarkers: Props = (jobs) => {\n const incarnationMap = new Map<string, number>();\n\n jobs.forEach(({incarnation, events}) => {\n if (!incarnation || !events.length) return;\n\n const item = incarnationMap.get(incarnation);\n const start = events[0].startTime;\n if (item) {\n const newTime = Math.min(item, start);\n incarnationMap.set(incarnation, newTime);\n } else {\n incarnationMap.set(incarnation, start);\n }\n });\n\n return Array.from(incarnationMap.entries()).map(([incarnation, time]) => ({\n time,\n color: 'rgba(143, 82, 204, 0.8)',\n hoverColor: 'rgb(254, 127, 45)',\n activeColor: 'rgb(254, 127, 45)',\n labelBackgroundColor: 'rgba(143, 82, 204)',\n label: incarnation,\n incarnationId: incarnation,\n lineWidth: 2,\n renderer: new IncarnationMarkerRenderer<IncarnationMarker>(),\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 {OperationTimeline} from './OperationTimeline';\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={<OperationTimeline />}\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 {getOperationEvents, listOperationEventsApi} from '../../../store/api/yt';\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 componentDidMount() {\n const {operationId} = this.props.match.params;\n this.props.listOperationEvents(operationId);\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 editBtnVisibility=\"always\"\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 operationEvents,\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.INCARNATIONS]: {show: Boolean(operationEvents?.length)},\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 } = this.props;\n const {url, params} = match;\n const {operationId} = params;\n\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n // NOTE: <Redirect> has issues with urls which contain '*', and since every operation alias starts with it,\n // we have to redirect to real operation id in those cases\n return !isOperationId(operationId) ? (\n this.renderAlias()\n ) : (\n <div className={detailBlock('main')}>\n <Switch>\n <Route\n path={`${path}/${Tab.ATTRIBUTES}`}\n render={() => <OperationAttributes className={detailBlock('attributes')} />}\n />\n <Route path={`${path}/${Tab.DETAILS}`} component={Details} />\n <Route path={`${path}/${Tab.SPECIFICATION}`} component={Specification} />\n <Route\n path={`${path}/${Tab.STATISTICS}`}\n render={() => <Statistics className={detailBlock('statistics')} />}\n />\n <Route\n path={`${path}/${Tab.JOBS}`}\n render={() => <Jobs className={detailBlock('jobs')} />}\n />\n {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 <Route\n path={`${path}/${Tab.INCARNATIONS}`}\n render={UIFactory.renderIncarnationsTab}\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, routerProps: RouteProps) => {\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 const {runtime} = details;\n\n const {operationId} = routerProps.match.params;\n const {data: operationEvents} = getOperationEvents(state, {\n operation_id: operationId,\n event_type: 'incarnation_started',\n });\n\n const {\n component: monitoringComponent,\n urlTemplate: monitorTabUrlTemplate,\n title: monitorTabTitle,\n } = UIFactory.getMonitoringForOperation(operation) || {};\n\n const monitorTabVisible = Boolean(monitoringComponent) || Boolean(monitorTabUrlTemplate);\n\n return {\n cluster: getCurrentCluster(state),\n operation,\n errorData,\n loading,\n loaded,\n error,\n actions,\n runtime,\n totalJobWallTime,\n cpuTimeSpent,\n erasedTrees,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n monitoringComponent,\n timelineTabVisible: operation?.type === 'vanilla',\n jobsMonitorIsSupported: Boolean(UIFactory.getMonitorComponentForJob()),\n jobsMonitorVisible: getJobsMonitorTabVisible(state),\n hasStatististicsTab: getOperationStatiscsHasData(state),\n isGpuOperation: selectIsOperationInGpuTree(state),\n operationPerformanceUrlTemplate: getOperationPerformanceUrlTemplate(state),\n operationEvents,\n };\n};\n\nconst mapDispatchToProps = {\n promptAction,\n getOperation,\n showEditPoolsWeightsModal,\n updateListJobsFilter,\n listOperationEvents: (operationId: string) =>\n listOperationEventsApi.endpoints.listOperationEvents.initiate({\n operation_id: operationId,\n event_type: 'incarnation_started',\n }),\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, {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 {ThunkAction} from 'redux-thunk';\nimport FontFaceObserver from 'fontfaceobserver';\nimport {getFontFamilies} from '../../../store/selectors/global/fonts';\nimport {RootState} from '../../../store/reducers';\n\n// TODO: consider switching back for <link rel=\"preload\"> once it's supported in all major browsers\nexport function waitForFontFamily(fontFamily: string) {\n return new FontFaceObserver(fontFamily).load(null, 10000);\n}\n\nexport function waitForFontFamilies<T>(\n promiseToWrap: T,\n): ThunkAction<Promise<T>, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const fontFamilies = getFontFamilies(getState());\n return Promise.all([\n waitForFontFamily(fontFamilies.regular),\n waitForFontFamily(fontFamilies.monospace),\n ]).then(() => {\n return promiseToWrap;\n });\n };\n}\n","import 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","export const LabelQa = {\n copyButton: 'copy-button',\n closeButton: 'close-button',\n mainButton: 'main-button',\n};\n","'use client';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { Xmark } from '@gravity-ui/icons';\nimport { ClipboardIcon } from '../ClipboardIcon';\nimport { CopyToClipboard } from '../CopyToClipboard';\nimport { Icon } from '../Icon';\nimport { block } from '../utils/cn';\nimport { LabelQa } from './constants';\nimport './Label.css';\nconst b = block('label');\nconst sizeMap = {\n xs: { copyIconSize: 12, closeIconSize: 12 },\n s: { copyIconSize: 14, closeIconSize: 14 },\n m: { copyIconSize: 16, closeIconSize: 16 },\n};\nexport const Label = React.forwardRef(function Label(props, ref) {\n const { type = 'default', theme = 'normal', size = 'xs', title, icon, children, onCloseClick, className, disabled, copyText, closeButtonLabel, copyButtonLabel, interactive = false, value, onCopy, onClick, qa, } = props;\n const hasContent = Boolean(children !== '' && React.Children.count(children) > 0);\n const typeClose = type === 'close' && hasContent;\n const typeCopy = type === 'copy' && hasContent;\n const hasOnClick = typeof onClick === 'function';\n const hasCopy = Boolean(typeCopy && copyText);\n const isInteractive = (hasOnClick || hasCopy || interactive) && !disabled;\n const { copyIconSize, closeIconSize } = sizeMap[size];\n const startIcon = icon && (_jsx(\"div\", { className: b('addon', { side: hasContent ? 'start' : undefined, type: 'icon' }), children: icon }));\n const content = hasContent && (_jsxs(\"div\", { className: b('text'), children: [_jsx(\"div\", { className: b('content'), children: children }), Boolean(value) && (_jsxs(\"div\", { className: b('value'), children: [_jsx(\"div\", { className: b('separator'), children: \":\" }), _jsx(\"div\", { className: b('key'), children: value })] }))] }));\n const renderLabel = (status) => {\n let actionButton;\n if (typeCopy) {\n actionButton = (_jsx(\"button\", { type: \"button\", \"aria-label\": copyButtonLabel || undefined, onClick: hasOnClick ? onClick : undefined, disabled: disabled, className: b('addon', {\n side: 'end',\n type: 'button',\n }), \"data-qa\": LabelQa.copyButton, children: _jsx(ClipboardIcon, { status: status || 'pending', size: copyIconSize }) }));\n }\n else if (typeClose) {\n actionButton = (_jsx(\"button\", { type: \"button\", onClick: onCloseClick, \"aria-label\": closeButtonLabel || undefined, disabled: disabled, className: b('addon', {\n side: 'end',\n type: 'button',\n }), \"data-qa\": LabelQa.closeButton, children: _jsx(Icon, { size: closeIconSize, data: Xmark }) }));\n }\n return (_jsxs(\"div\", { ref: ref, className: b({\n theme,\n size,\n interactive: isInteractive,\n disabled,\n }, className), title: title, \"data-qa\": qa, children: [startIcon, hasOnClick ? (_jsx(\"button\", { disabled: disabled, type: \"button\", onClick: onClick, className: b('main-button'), \"data-qa\": LabelQa.mainButton, children: content })) : (content), actionButton] }));\n };\n if (hasCopy && copyText && !hasOnClick) {\n return (_jsx(CopyToClipboard, { text: copyText, onCopy: onCopy, timeout: 1000, children: (status) => renderLabel(status) }));\n }\n return renderLabel();\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 * as React from 'react';\nconst Ellipsis = (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: \"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\" })));\nexport default Ellipsis;\n","import * as React from 'react';\nconst ChevronLeft = (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: \"M10.53 2.97a.75.75 0 0 1 0 1.06L6.56 8l3.97 3.97a.75.75 0 1 1-1.06 1.06l-4.5-4.5a.75.75 0 0 1 0-1.06l4.5-4.5a.75.75 0 0 1 1.06 0\", clipRule: \"evenodd\" })));\nexport default ChevronLeft;\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 waiting: '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 hideIcon?: boolean;\n};\n\nexport default function StatusLabel({\n className,\n label,\n renderPlaque,\n text,\n state,\n iconState,\n hideIcon,\n}: StatusLabelProps) {\n const mappedState = getViewState(label);\n const icon = getIcon(iconState ?? mappedState);\n const mods = {state: state ?? mappedState};\n return !label && !(text || state) ? (\n <span />\n ) : (\n <span className={b(null, renderPlaque ? b('plaque', mods, className) : b(mods, className))}>\n {!hideIcon && <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","/* Font Face Observer v2.3.0 - © Bram Stein. License: BSD-3-Clause */(function(){function p(a,c){document.addEventListener?a.addEventListener(\"scroll\",c,!1):a.attachEvent(\"scroll\",c)}function u(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function b(){document.removeEventListener(\"DOMContentLoaded\",b);a()}):document.attachEvent(\"onreadystatechange\",function g(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",g),a()})};function w(a){this.g=document.createElement(\"div\");this.g.setAttribute(\"aria-hidden\",\"true\");this.g.appendChild(document.createTextNode(a));this.h=document.createElement(\"span\");this.i=document.createElement(\"span\");this.m=document.createElement(\"span\");this.j=document.createElement(\"span\");this.l=-1;this.h.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.i.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\nthis.j.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.m.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.h.appendChild(this.m);this.i.appendChild(this.j);this.g.appendChild(this.h);this.g.appendChild(this.i)}\nfunction x(a,c){a.g.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+c+\";\"}function B(a){var c=a.g.offsetWidth,b=c+100;a.j.style.width=b+\"px\";a.i.scrollLeft=b;a.h.scrollLeft=a.h.scrollWidth+100;return a.l!==c?(a.l=c,!0):!1}function C(a,c){function b(){var e=g;B(e)&&null!==e.g.parentNode&&c(e.l)}var g=a;p(a.h,b);p(a.i,b);B(a)};function D(a,c,b){c=c||{};b=b||window;this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\";this.context=b}var E=null,F=null,G=null,H=null;function I(a){null===F&&(M(a)&&/Apple/.test(window.navigator.vendor)?(a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent),F=!!a&&603>parseInt(a[1],10)):F=!1);return F}function M(a){null===H&&(H=!!a.document.fonts);return H}\nfunction N(a,c){var b=a.style,g=a.weight;if(null===G){var e=document.createElement(\"div\");try{e.style.font=\"condensed 100px sans-serif\"}catch(q){}G=\"\"!==e.style.font}return[b,g,G?a.stretch:\"\",\"100px\",c].join(\" \")}\nD.prototype.load=function(a,c){var b=this,g=a||\"BESbswy\",e=0,q=c||3E3,J=(new Date).getTime();return new Promise(function(K,L){if(M(b.context)&&!I(b.context)){var O=new Promise(function(r,t){function h(){(new Date).getTime()-J>=q?t(Error(\"\"+q+\"ms timeout exceeded\")):b.context.document.fonts.load(N(b,'\"'+b.family+'\"'),g).then(function(n){1<=n.length?r():setTimeout(h,25)},t)}h()}),P=new Promise(function(r,t){e=setTimeout(function(){t(Error(\"\"+q+\"ms timeout exceeded\"))},q)});Promise.race([P,O]).then(function(){clearTimeout(e);\nK(b)},L)}else u(function(){function r(){var d;if(d=-1!=k&&-1!=l||-1!=k&&-1!=m||-1!=l&&-1!=m)(d=k!=l&&k!=m&&l!=m)||(null===E&&(d=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),E=!!d&&(536>parseInt(d[1],10)||536===parseInt(d[1],10)&&11>=parseInt(d[2],10))),d=E&&(k==y&&l==y&&m==y||k==z&&l==z&&m==z||k==A&&l==A&&m==A)),d=!d;d&&(null!==f.parentNode&&f.parentNode.removeChild(f),clearTimeout(e),K(b))}function t(){if((new Date).getTime()-J>=q)null!==f.parentNode&&f.parentNode.removeChild(f),\nL(Error(\"\"+q+\"ms timeout exceeded\"));else{var d=b.context.document.hidden;if(!0===d||void 0===d)k=h.g.offsetWidth,l=n.g.offsetWidth,m=v.g.offsetWidth,r();e=setTimeout(t,50)}}var h=new w(g),n=new w(g),v=new w(g),k=-1,l=-1,m=-1,y=-1,z=-1,A=-1,f=document.createElement(\"div\");f.dir=\"ltr\";x(h,N(b,\"sans-serif\"));x(n,N(b,\"serif\"));x(v,N(b,\"monospace\"));f.appendChild(h.g);f.appendChild(n.g);f.appendChild(v.g);b.context.document.body.appendChild(f);y=h.g.offsetWidth;z=n.g.offsetWidth;A=v.g.offsetWidth;t();\nC(h,function(d){k=d;r()});x(h,N(b,'\"'+b.family+'\",sans-serif'));C(n,function(d){l=d;r()});x(n,N(b,'\"'+b.family+'\",serif'));C(v,function(d){m=d;r()});x(v,N(b,'\"'+b.family+'\",monospace'))})})};\"object\"===typeof module?module.exports=D:(window.FontFaceObserver=D,window.FontFaceObserver.prototype.load=D.prototype.load);}());\n","import {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","!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 * as React from 'react';\nconst ChevronRight = (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.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\", clipRule: \"evenodd\" })));\nexport default ChevronRight;\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 { block } from '../utils/cn';\nexport const cnDropdownMenu = block('dropdown-menu');\n","import * as React from 'react';\nexport const DropdownMenuContext = React.createContext({\n toggle() { },\n data: undefined,\n});\nDropdownMenuContext.displayName = 'DropdownMenu.Context';\n","export function moveBack(items, activeItemIndex, steps = 1, skip) {\n const newActiveItemIndex = (items.length + activeItemIndex - (steps % items.length)) % items.length;\n if (skip && skip(items[newActiveItemIndex])) {\n return moveBack(items, newActiveItemIndex, 1, skip);\n }\n return newActiveItemIndex;\n}\n","export function moveForward(items, activeItemIndex, steps = 1, skip) {\n const newActiveItemIndex = (activeItemIndex + steps) % items.length;\n if (skip && skip(items[newActiveItemIndex])) {\n return moveForward(items, newActiveItemIndex, 1, skip);\n }\n return newActiveItemIndex;\n}\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nconst rootMenuPath = [];\nexport const DropdownMenuNavigationContext = React.createContext({\n activeMenuPath: rootMenuPath,\n setActiveMenuPath: () => { },\n anchorRef: { current: null },\n});\nexport const DropdownMenuNavigationContextProvider = ({ anchorRef, children, disabled, }) => {\n const [activeMenuPath, setActiveMenuPath] = React.useState(rootMenuPath);\n React.useEffect(() => {\n if (disabled) {\n setActiveMenuPath(rootMenuPath);\n }\n }, [disabled]);\n const contextValue = React.useMemo(() => ({\n activeMenuPath,\n setActiveMenuPath,\n anchorRef,\n }), [activeMenuPath, anchorRef]);\n return (_jsx(DropdownMenuNavigationContext.Provider, { value: contextValue, children: children }));\n};\n","export const dropdownMenuSeparator = { text: '', action: () => { }, path: [] };\n","import { dropdownMenuSeparator } from '../constants';\nexport function isSeparator(item) {\n return item === dropdownMenuSeparator;\n}\n","import { isSeparator } from './isSeparator';\nexport function shouldSkipItemNavigation(item) {\n return item.disabled || isSeparator(item);\n}\n","export function stringifyNavigationPath(path) {\n var _a;\n return (_a = path === null || path === void 0 ? void 0 : path.join(' ')) !== null && _a !== void 0 ? _a : '';\n}\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { useListNavigation } from '../../hooks';\nimport { Menu } from '../Menu';\nimport { Popup } from '../Popup';\nimport { cnDropdownMenu } from './DropdownMenu.classname';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuItem } from './DropdownMenuItem';\nimport { DropdownMenuNavigationContext } from './DropdownMenuNavigationContext';\nimport { isSeparator } from './utils/isSeparator';\nimport { shouldSkipItemNavigation } from './utils/shouldSkipItemNavigation';\nimport { stringifyNavigationPath } from './utils/stringifyNavigationPath';\nexport const DropdownMenuPopup = ({ items, open, anchorRef, onClose, size, menuProps, children, popupProps, path = [], }) => {\n const { toggle, data } = React.useContext(DropdownMenuContext);\n const { activeMenuPath, setActiveMenuPath, anchorRef: navigationAnchorRef, } = React.useContext(DropdownMenuNavigationContext);\n const isSubmenu = path.length > 0;\n const activateParent = React.useCallback(() => {\n setActiveMenuPath(path.slice(0, path.length - 1));\n }, [setActiveMenuPath, path]);\n const handleMouseEnter = React.useCallback((event) => {\n var _a;\n setActiveMenuPath(path);\n (_a = popupProps === null || popupProps === void 0 ? void 0 : popupProps.onMouseEnter) === null || _a === void 0 ? void 0 : _a.call(popupProps, event);\n }, [path, popupProps, setActiveMenuPath]);\n const handleMouseLeave = React.useCallback((event) => {\n var _a;\n activateParent();\n (_a = popupProps === null || popupProps === void 0 ? void 0 : popupProps.onMouseLeave) === null || _a === void 0 ? void 0 : _a.call(popupProps, event);\n }, [activateParent, popupProps]);\n const handleSelect = React.useCallback((activeItem, event) => {\n var _a;\n if (activeItem.items && activeItem.path) {\n setActiveMenuPath(activeItem.path);\n }\n else {\n (_a = activeItem.action) === null || _a === void 0 ? void 0 : _a.call(activeItem, event, data);\n toggle(false);\n }\n }, [data, setActiveMenuPath, toggle]);\n const handleKeydown = React.useCallback((activeItemIndex, event) => {\n switch (event.key) {\n case 'Escape': {\n if (isSubmenu) {\n event.stopPropagation();\n activateParent === null || activateParent === void 0 ? void 0 : activateParent();\n }\n return false;\n }\n case 'Enter':\n case ' ': {\n const activeItem = items[activeItemIndex];\n const isSubmenuToggleActive = activeItem === null || activeItem === void 0 ? void 0 : activeItem.items;\n if (isSubmenu || isSubmenuToggleActive) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (activeItem) {\n handleSelect(activeItem, event);\n }\n return false;\n }\n }\n return true;\n }, [activateParent, handleSelect, isSubmenu, items]);\n const isNavigationActive = open && stringifyNavigationPath(path) === stringifyNavigationPath(activeMenuPath);\n const { activeItemIndex, setActiveItemIndex, reset: resetNavigation, } = useListNavigation({\n items,\n skip: shouldSkipItemNavigation,\n anchorRef: navigationAnchorRef,\n onAnchorKeyDown: handleKeydown,\n disabled: !isNavigationActive,\n initialValue: isSubmenu ? 0 : -1,\n });\n React.useEffect(() => {\n if (!open) {\n resetNavigation();\n }\n }, [open, resetNavigation]);\n return (_jsx(Popup, Object.assign({ open: open, anchorRef: anchorRef, onClose: onClose }, popupProps, { onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children: children || (_jsx(Menu, Object.assign({ className: cnDropdownMenu('menu'), size: size }, menuProps, { children: items.map((item, index) => {\n var _a;\n const isActive = isNavigationActive && activeItemIndex === index;\n const activate = () => setActiveItemIndex(index);\n const isActiveParent = open &&\n !isActive &&\n activeMenuPath.length !== 0 &&\n stringifyNavigationPath(item.path) ===\n stringifyNavigationPath(activeMenuPath.slice(0, item.path.length));\n const extraProps = Object.assign(Object.assign({}, item.extraProps), { onMouseEnter: activate });\n return (_jsx(DropdownMenuItem, Object.assign({ className: cnDropdownMenu('menu-item', {\n separator: isSeparator(item),\n 'active-parent': isActiveParent,\n 'with-submenu': Boolean((_a = item.items) === null || _a === void 0 ? void 0 : _a.length),\n }, item.className), selected: isActive, popupProps: popupProps, closeMenu: onClose }, item, { extraProps: extraProps }), index));\n }) }))) })));\n};\n","import * as React from 'react';\nimport { moveBack } from './moveBack';\nimport { moveForward } from './moveForward';\nexport function useListNavigation({ items, skip, pageSize, processHomeKey = true, processEndKey = true, anchorRef, disabled = false, initialValue = -1, onAnchorKeyDown, }) {\n const [activeItemIndex, setActiveItemIndex] = React.useState(initialValue);\n const reset = React.useCallback(() => {\n setActiveItemIndex(initialValue);\n }, [initialValue]);\n React.useEffect(() => {\n if (items) {\n reset();\n }\n }, [items, reset]);\n React.useLayoutEffect(() => {\n if (disabled) {\n return undefined;\n }\n const canNavigate = items.some((item) => !(skip === null || skip === void 0 ? void 0 : skip(item)));\n if (!canNavigate) {\n return undefined;\n }\n const anchor = anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current;\n if (!anchor) {\n return undefined;\n }\n const handleKeyDown = (event) => {\n const shouldProcessKeydown = onAnchorKeyDown === null || onAnchorKeyDown === void 0 ? void 0 : onAnchorKeyDown(activeItemIndex, event);\n if (shouldProcessKeydown === false) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n // Go 1 step forward\n setActiveItemIndex((previousActiveItemIndex) => moveForward(items, previousActiveItemIndex, 1, skip));\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n // Go 1 step back\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, 1, skip));\n break;\n }\n case 'PageDown': {\n if (!pageSize) {\n return;\n }\n event.preventDefault();\n // Go pageSize steps forward\n setActiveItemIndex((previousActiveItemIndex) => moveForward(items, previousActiveItemIndex, pageSize, skip));\n break;\n }\n case 'PageUp': {\n if (!pageSize) {\n return;\n }\n event.preventDefault();\n // Go pageSize steps back\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, pageSize, skip));\n break;\n }\n case 'Home': {\n if (!processHomeKey) {\n return;\n }\n event.preventDefault();\n // Go to the start of the list\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, previousActiveItemIndex, skip));\n break;\n }\n case 'End': {\n if (!processEndKey) {\n return;\n }\n event.preventDefault();\n // Go to the end of the list\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, previousActiveItemIndex + 1, skip));\n break;\n }\n }\n };\n anchor.addEventListener('keydown', handleKeyDown);\n return () => {\n anchor.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n activeItemIndex,\n anchorRef,\n disabled,\n items,\n onAnchorKeyDown,\n pageSize,\n processEndKey,\n processHomeKey,\n skip,\n ]);\n return {\n activeItemIndex,\n setActiveItemIndex,\n reset,\n };\n}\n","export function isSubmenuOpen(path, activeMenuPath) {\n var _a;\n return (_a = path === null || path === void 0 ? void 0 : path.every((item, index) => item === (activeMenuPath === null || activeMenuPath === void 0 ? void 0 : activeMenuPath[index]))) !== null && _a !== void 0 ? _a : false;\n}\n","import * as React from 'react';\nimport { DropdownMenuNavigationContext } from '../DropdownMenuNavigationContext';\nimport { isSubmenuOpen } from '../utils/isSubmenuOpen';\nexport function useSubmenu({ items, path }) {\n const { activeMenuPath, setActiveMenuPath } = React.useContext(DropdownMenuNavigationContext);\n const hasSubmenu = Boolean(path) && Boolean(items === null || items === void 0 ? void 0 : items.length);\n const closeSubmenu = React.useCallback(() => {\n if (!path) {\n return;\n }\n setActiveMenuPath(path.slice(0, path.length - 1));\n }, [path, setActiveMenuPath]);\n const openSubmenu = React.useCallback(() => {\n if (!path) {\n return;\n }\n setActiveMenuPath(path);\n }, [path, setActiveMenuPath]);\n return {\n hasSubmenu,\n isSubmenuOpen: isSubmenuOpen(path, activeMenuPath),\n openSubmenu,\n closeSubmenu,\n };\n}\n","'use client';\nimport { __rest } from \"tslib\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from '@gravity-ui/icons';\nimport { Icon } from '../Icon';\nimport { Menu } from '../Menu';\nimport { useDirection } from '../theme';\nimport { cnDropdownMenu } from './DropdownMenu.classname';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuPopup } from './DropdownMenuPopup';\nimport { useSubmenu } from './hooks/useSubmenu';\nexport const DropdownMenuItem = (_a) => {\n var { text, action, items: subMenuItems, popupProps, closeMenu, children, path } = _a, props = __rest(_a, [\"text\", \"action\", \"items\", \"popupProps\", \"closeMenu\", \"children\", \"path\"]);\n const { toggle, data } = React.useContext(DropdownMenuContext);\n const menuItemRef = React.useRef(null);\n const direction = useDirection();\n const { hasSubmenu, isSubmenuOpen, closeSubmenu, openSubmenu } = useSubmenu({\n items: subMenuItems,\n path,\n });\n const handleCloseMenu = React.useCallback(() => {\n const close = () => {\n if (closeMenu) {\n closeMenu();\n }\n else {\n toggle(false);\n }\n };\n if (hasSubmenu) {\n closeSubmenu();\n // Wait for submenu to close\n requestAnimationFrame(close);\n }\n else {\n close();\n }\n }, [closeMenu, closeSubmenu, hasSubmenu, toggle]);\n const handleMenuItemClick = React.useCallback((event) => {\n if (hasSubmenu) {\n return;\n }\n action === null || action === void 0 ? void 0 : action(event, data);\n handleCloseMenu();\n }, [action, data, handleCloseMenu, hasSubmenu]);\n const extraProps = React.useMemo(() => {\n return Object.assign(Object.assign({}, props.extraProps), { onMouseEnter: (event) => {\n var _a, _b;\n (_b = (_a = props.extraProps) === null || _a === void 0 ? void 0 : _a.onMouseEnter) === null || _b === void 0 ? void 0 : _b.call(_a, event);\n if (hasSubmenu) {\n openSubmenu();\n }\n }, onMouseLeave: (event) => {\n var _a, _b;\n (_b = (_a = props.extraProps) === null || _a === void 0 ? void 0 : _a.onMouseLeave) === null || _b === void 0 ? void 0 : _b.call(_a, event);\n if (hasSubmenu) {\n closeSubmenu();\n }\n } });\n }, [props.extraProps, closeSubmenu, hasSubmenu, openSubmenu]);\n const subMenuPlacement = React.useMemo(() => (direction === 'rtl' ? ['left-start', 'right-start'] : ['right-start', 'left-start']), [direction]);\n const iconEnd = React.useMemo(() => hasSubmenu ? (_jsx(Icon, { data: direction === 'rtl' ? ChevronLeft : ChevronRight, size: 10, className: cnDropdownMenu('sub-menu-arrow') })) : (props.iconEnd), [hasSubmenu, direction, props.iconEnd]);\n return (_jsxs(React.Fragment, { children: [_jsx(Menu.Item, Object.assign({ ref: menuItemRef }, props, { extraProps: extraProps, onClick: handleMenuItemClick, iconEnd: iconEnd, children: text || children })), hasSubmenu && subMenuItems && (_jsx(DropdownMenuPopup, { popupProps: Object.assign(Object.assign({}, popupProps), { className: cnDropdownMenu('sub-menu', popupProps === null || popupProps === void 0 ? void 0 : popupProps.className), placement: subMenuPlacement }), items: subMenuItems, path: path, open: isSubmenuOpen, anchorRef: menuItemRef, onClose: handleCloseMenu }))] }));\n};\n","export function toItemList(items, separator, path = [], startIndex = 0) {\n const updatedItems = [];\n let addedGroup = false;\n let index = startIndex;\n for (const item of items) {\n if (Array.isArray(item)) {\n const groupItems = toItemList(item, separator, path, index);\n if (updatedItems.length !== 0) {\n updatedItems.push(separator);\n }\n updatedItems.push(...groupItems);\n index += groupItems.length;\n addedGroup = true;\n }\n else {\n if (item.hidden) {\n continue;\n }\n if (addedGroup) {\n updatedItems.push(separator);\n }\n const updatedItem = Object.assign(Object.assign({}, item), { path: [...path, index++] });\n if (item.items) {\n updatedItem.items = toItemList(item.items, separator, updatedItem.path);\n }\n updatedItems.push(updatedItem);\n addedGroup = false;\n }\n }\n return updatedItems;\n}\n","'use client';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { Ellipsis } from '@gravity-ui/icons';\nimport { useActionHandlers } from '../../hooks/useActionHandlers';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { cnDropdownMenu } from './DropdownMenu.classname';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuItem as DropdownMenuItemComponent } from './DropdownMenuItem';\nimport { DropdownMenuNavigationContextProvider } from './DropdownMenuNavigationContext';\nimport { DropdownMenuPopup } from './DropdownMenuPopup';\nimport { dropdownMenuSeparator } from './constants';\nimport { usePopupVisibility } from './hooks/usePopupVisibility';\nimport { useScrollHandler } from './hooks/useScrollHandler';\nimport { toItemList } from './utils/toItemList';\nimport './DropdownMenu.css';\nconst DropdownMenu = ({ items = [], size = 'm', icon = _jsx(Icon, { data: Ellipsis }), open, onOpenToggle, hideOnScroll = true, data, disabled, switcher, renderSwitcher, switcherWrapperClassName, defaultSwitcherProps, defaultSwitcherClassName, onSwitcherClick, menuProps, popupProps, children, }) => {\n const anchorRef = React.useRef(null);\n const { isPopupShown, togglePopup, closePopup } = usePopupVisibility(open, onOpenToggle, disabled);\n useScrollHandler(closePopup, anchorRef, !isPopupShown || !hideOnScroll);\n const contextValue = React.useMemo(() => ({\n toggle: togglePopup,\n data,\n }), [data, togglePopup]);\n const itemsList = React.useMemo(() => toItemList(items, dropdownMenuSeparator), [items]);\n const handleSwitcherClick = React.useCallback((event) => {\n if (disabled) {\n return;\n }\n onSwitcherClick === null || onSwitcherClick === void 0 ? void 0 : onSwitcherClick(event);\n togglePopup();\n }, [disabled, onSwitcherClick, togglePopup]);\n const { onKeyDown: handleSwitcherKeyDown } = useActionHandlers(handleSwitcherClick);\n const switcherProps = React.useMemo(() => ({\n onClick: handleSwitcherClick,\n onKeyDown: handleSwitcherKeyDown,\n }), [handleSwitcherClick, handleSwitcherKeyDown]);\n return (_jsxs(DropdownMenuContext.Provider, { value: contextValue, children: [_jsx(\"div\", Object.assign({ ref: anchorRef, className: cnDropdownMenu('switcher-wrapper', switcherWrapperClassName) }, (renderSwitcher ? {} : switcherProps), { children: (renderSwitcher === null || renderSwitcher === void 0 ? void 0 : renderSwitcher(switcherProps)) || switcher || (_jsx(Button, Object.assign({ view: \"flat\", size: size }, defaultSwitcherProps, { className: cnDropdownMenu('switcher-button', defaultSwitcherClassName), disabled: disabled, children: icon }))) })), _jsx(DropdownMenuNavigationContextProvider, { anchorRef: anchorRef, disabled: !isPopupShown, children: _jsx(DropdownMenuPopup, { items: itemsList, open: isPopupShown, size: size, menuProps: menuProps, anchorRef: anchorRef, onClose: closePopup, popupProps: popupProps, children: children }) })] }));\n};\nconst DropdownMenuExport = Object.assign(DropdownMenu, { Item: DropdownMenuItemComponent });\nexport { DropdownMenuExport as DropdownMenu };\n","import * as React from 'react';\nimport { useConditionallyControlledState } from '../../../hooks/private';\nexport function usePopupVisibility(visible, onChangeVisibility, disabled) {\n const [isPopupShown, setPopupShown] = useConditionallyControlledState(visible, onChangeVisibility, false);\n const togglePopup = React.useCallback((open) => {\n setPopupShown((isShown) => {\n if (typeof open === 'boolean') {\n return open;\n }\n return !isShown;\n });\n }, [setPopupShown]);\n const closePopup = React.useCallback(() => {\n setPopupShown(false);\n }, [setPopupShown]);\n React.useEffect(() => {\n if (disabled && isPopupShown) {\n closePopup();\n }\n }, [closePopup, disabled, isPopupShown]);\n return {\n isPopupShown,\n togglePopup,\n closePopup,\n };\n}\n","import { useStateWithCallback } from '../useStateWithCallback';\nexport function useConditionallyControlledState(property, setProperty, initialState, isControlled = property !== undefined && setProperty !== undefined) {\n const state = useStateWithCallback((property || initialState), setProperty);\n if (isControlled) {\n return [property, setProperty];\n }\n return state;\n}\n","import * as React from 'react';\nimport { isFunction } from '../../../components/utils/typeCheckers';\nexport function useStateWithCallback(initialValue, callback) {\n const [state, setState] = React.useState(initialValue);\n const setWithCallback = React.useCallback((nextValue) => {\n if (isFunction(nextValue)) {\n setState((previousState) => {\n const newState = nextValue(previousState);\n callback === null || callback === void 0 ? void 0 : callback(newState);\n return newState;\n });\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback(nextValue);\n setState(nextValue);\n }\n }, [callback]);\n return [state, setWithCallback];\n}\n","export const isFunction = (value) => typeof value === 'function';\n","import * as React from 'react';\nexport function useScrollHandler(onScroll, anchorRef, disabled) {\n React.useEffect(() => {\n if (disabled) {\n return undefined;\n }\n const handleScroll = (event) => {\n if (event.target.contains(anchorRef.current)) {\n onScroll(event);\n }\n };\n document.addEventListener('scroll', handleScroll, true);\n return () => {\n document.removeEventListener('scroll', handleScroll, true);\n };\n }, [anchorRef, onScroll, disabled]);\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { useUniqId } from '../../hooks';\nimport { block } from '../utils/cn';\nconst b = block('menu');\nexport const MenuGroup = React.forwardRef(function MenuGroup({ label, children, style, className, qa }, ref) {\n const labelId = useUniqId();\n return (_jsx(\"li\", { ref: ref, className: b('list-group-item'), children: _jsxs(\"div\", { style: style, className: b('group', className), \"data-qa\": qa, children: [label && (_jsx(\"div\", { id: labelId, className: b('group-label'), children: label })), _jsx(\"ul\", { role: \"group\", \"aria-labelledby\": labelId, className: b('group-list'), children: children })] }) }));\n});\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { useActionHandlers } from '../../hooks';\nimport { block } from '../utils/cn';\nimport { eventBroker } from '../utils/event-broker';\nconst b = block('menu');\nexport const MenuItem = React.forwardRef(function MenuItem({ icon, iconStart = icon, iconEnd, title, disabled, active, selected, href, target, rel, onClick, style, className, theme, extraProps, children, qa, }, ref) {\n const { onKeyDown } = useActionHandlers(onClick);\n const handleClickCapture = React.useCallback((event) => {\n eventBroker.publish({\n componentId: 'MenuItem',\n eventId: 'click',\n domEvent: event,\n });\n }, []);\n const defaultProps = {\n role: 'menuitem',\n onKeyDown: onClick && !disabled ? onKeyDown : undefined,\n };\n const commonProps = {\n title,\n onClick: disabled ? undefined : onClick,\n onClickCapture: disabled ? undefined : handleClickCapture,\n style,\n tabIndex: disabled ? -1 : 0,\n className: b('item', { disabled, active, selected, theme, interactive: Boolean(onClick) || Boolean(href) }, className),\n 'data-qa': qa,\n };\n const content = [\n iconStart && (_jsx(\"div\", { className: b('item-icon'), children: iconStart }, \"icon-start\")),\n _jsx(\"div\", { className: b('item-content'), children: children }, \"content\"),\n iconEnd && (_jsx(\"div\", { className: b('item-icon-end'), children: iconEnd }, 'icon-end')),\n ];\n let item;\n if (href) {\n item = (_jsx(\"a\", Object.assign({}, defaultProps, extraProps, commonProps, { href: href, target: target, rel: rel, children: content })));\n }\n else {\n item = (_jsx(\"div\", Object.assign({}, defaultProps, extraProps, commonProps, { children: content })));\n }\n return (_jsx(\"li\", { ref: ref, className: b('list-item'), children: item }));\n});\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { block } from '../utils/cn';\nimport { MenuGroup } from './MenuGroup';\nimport { MenuItem } from './MenuItem';\nimport './Menu.css';\nconst b = block('menu');\n// TODO: keyboard navigation, Up/Down arrows and Enter\nexport const Menu = React.forwardRef(function Menu({ size = 'm', children, style, className, qa }, ref) {\n return (_jsx(\"ul\", { ref: ref, role: \"menu\", \n // tabIndex={0}\n style: style, className: b({ size }, className), \"data-qa\": qa, children: children }));\n});\nMenu.Item = MenuItem;\nMenu.Group = MenuGroup;\n","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":["YTChartKitLazy","withLazyLoading","React","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","abrupt","stop","COLORS","getSerieColor","serieIndex","length","addI18Keysets","en","ru","connect","openAttributesModal","_ref","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","i18n","rest","_objectWithoutProperties","_excluded","_jsx","AttributesButton","_objectSpread","onClick","pathProps","block","cn","ExpandIcon","className","data","expanded","visible","icon","onClickCb","Boolean","clickable","undefined","children","Icon","awesome","AlertContext","useAlertContext","context","Error","AlertAction","props","view","Button","Object","assign","bAlert","AlertContextProvider","layout","Provider","value","typeToIcon","danger","filled","xmlns","width","height","fill","viewBox","fillRule","d","clipRule","outlined","info","CircleInfo","success","CircleCheck","warning","TriangleExclamation","utility","Thunderbolt","normal","addComponentKeysets","Alert","theme","message","corners","style","onClose","align","qa","Card","spacing","py","px","Flex","gap","alignItems","direction","grow","justifyContent","Title","text","Array","isArray","actions","Actions","items","extraProps","I","Xmark","size","colorText","color","iconByTheme","Text","variant","minContent","map","handler","i","Action","isEmptyStatistics","stats","some_","ypath","getValue","hasProgressTasks","operation","TASKS_PREFIX","prepareFile","file","originalPath","name","executable","getBoolean","prepareMeta","meta","prepared","map_","sortBy_","prepareStartedBy","startedBy","command","fields","filter_","option","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","livePreview","append","teleport","primary","foreign","typedFilters","groupTables","tables","currentGroup","group","forEach_","YPath","create","getKey","folder","toSubpath","stringify","groupKey","push","isFolder","err","console","error","prepareInput","TYPE","typedTables","$typedAttributes","prepareStderr","prepareCoredumps","coreTable","prepareOutput","prepareIntermediate","prepareScriptCaption","indexOf","substring","prepareScript","_environment","script","environment","jobCount","files","layerPaths","caption","prepareTasks","tasks","keys_","taskName","prepareVisibleItems","item","filterVisibleItems","itemsCount","_step","result","count","_iterator","_createForOfIteratorHelper","s","n","done","e","f","formatShare","hammer","format","significantDigits","OperationSelector","_classCallCheck","$value","$attributes","pools","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","user","suspended","input","output","startTime","finishTime","duration","jobs","completedJobs","runningJobs","failedJobs","totalJobs","completedJobsProgress","runningJobsProgress","jobsProgress","briefSpec","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","cancelHelper","CancelHelper","toaster","Toaster","operationDetailsRequests","getOperation","dispatch","getState","isAlias","params","include_scheduler","output_format","TYPED_OUTPUT_FORMAT","operation_alias","operation_id","GET_OPERATION","REQUEST","ytApiV3","parameters","setup","JSONSerializer","then","checkUserTransaction","_ref2","_ref3","_slicedToArray","operationAttributes","preparedAttributes","prepareAttributes","dispatchOperationSuccess","prepareActions","specification","network","prepareRemote","transferTask","mode","genNavigationUrl","stderr","intermediate","coredumps","mapper","reducer","reduceCombiner","prepareSpecification","alerts","prepareAlerts","alert_events","prepareError","runtime","treeFairShareInfo","treeName","prepareRuntime","events","prepareOperationEvents","resources","statistics","estimatedInputStatistics","dataFlow","reduce_","acc","from","source_name","to","target_name","job_data_statistics","teleport_data_statistics","reduce","jobStat","teleportStat","tasksIndexMap","task_name","prepareGraphDataByTasks","dataFlowGraph","jobTypeOrder","fromJobType","toJobType","prepareGraphData","prepareCompletedUsage","forEachYTError","_attributes$$value","job_id","dst","getCluster","_type_tag","href","window","location","origin","details","SUCCESS","getOperationMonitoredJobCount","JOBS_MONITOR","ytApiV3Id","listJobs","YTApiId","listJobs100","sort_field","sort_order","with_monitoring_descriptor","cancellation","removeAllAndSave","isCancelled","CANCELLED","FAILURE","_ref5","_callee2","treeNames","limits","configs","_context2","executeBatch","operationTreeConfigs","requests","USE_CACHE","sent","wrapApiPromiseByToaster","toasterName","skipSuccessToast","batchType","errorTitle","OPERATION_DETAIL_PARTIAL","treeConfigs","config","resource_limits","main_resource","_x2","apply","arguments","inIntermediateState","callback","outputTransaction","LOAD_RESOURCE_USAGE","operationIntermediateResourceUsage","intermediateResources","account","_x","loadIntermediateResourceUsage","isFirstLoading","detail","loaded","code","YTErrors","add","autoHiding","label","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","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","include_archive","limit","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","preparePoolsState","prepareWeightsState","String","renderPoolsAndWeights","weights","setPools","setWeights","_ref4","Page","SCHEDULING","_jsxs","Fragment","TextInput","onUpdate","_defineProperty","Link","mapDispatchToProps","hideEditPoolsWeightsModal","HIDE_EDIT_WEIGHT_POOL_MODAL","setPoolsAndWeights","pathItems","pathname","split","inOperationsList","OPERATIONS","operationId","poolTrees","SET_PULLS_AND_WEIGHTS","old","Number","updateOperationParameters","_parameters","scheduling_options_per_pool_tree","_operations$page$edit","page","editWeightModal","loading","errorData","_useState","useState","_useState2","_useState3","_useState4","useEffect","Modal","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$useState2","activeTransaction","setActiveTransaction","tableTx","isValidTransactionId","isTransactionAlive","ReadableField","OperationIOLink","renderTitle","getTitle","trimEnd_","unipika","decode","renderCopyTitle","ClipboardButton","UserPoolItem","awesomeIcon","Tooltip","allowUnmounted","face","OperationsListTable","_len","args","_key","match","inputTx","outputTx","renderUserPool","multiplePools","SubjectCard","renderMultiplePools","TemplatePools","onEdit","compact","allowDetachEditBtn","TemplateWeight","renderActions","promptAction","action","currentOption","performAction","settings","css","striped","virtualType","getItemLink","computeKey","sets","default","sort","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","time","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","states","withCounters","found","stateName","multiple","placeHolder","Select","hideFilter","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","calculateLoadingStatus","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","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","NaN","formatter","renderOptions","libraryConfig","axes","x","values","_d","y","scales","tooltip","render","tooltipData","_renderTooltip","_tooltipData$scales","originalValue","rows","x0","x1","calculateFormatSettings","fmtFn","v2","opts","digits","PartitionSizes","_React$Component","formatX","formatSettings","Bytes","ErrorBoundary","PartitionSizesConnected","chartKitTheme","getTheme","connector","PartitionSizesWithRum","loadState","getOperationDetailsLoadingStatus","OPERATION_TAB_PARTITION_SIZES","additionalStartType","row","Readable","Template","Time","valueFormat","ClickableText","hideOopsMsg","helpURL","AlertEvents","allVisible","setAllVisible","all","l","r","compareWithUndefined","toggleShowAll","DataTableYT","displayIndices","sortable","useThemeYT","disableRightGap","rowClassName","current","Description","getYsonSettingsDisableDecode","_unipika$utils$yson","yson","isWithoutTags","hasOwnProperty","call","canRenderAsMap","CollapsableText","MetaTable","METRICS","virtual","completedTableProps","withActions","prepareTableColumns","row_count","compressed_data_size","uncompressed_data_size","data_weight","chunk_count","intermediateTableProps","disk_space","node_count","resourceAsBytes","columnName","resourceAsNumber","expandKey","prepareState","allowExpand","expandedTasks","inner","DataFlow","prevProps","self","fromTo","expKey","toggleExpand","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","OperationPool","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","docsUrl","DetailedJobsCounter","scheduledCounters","scheduled","scheduledItems","nonScheduledCounters","nonScheduled","nonScheduledItems","docsUrls","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","_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","alertEvents","isVanillaGpuOperation","disableLogger","overview","renderRuntimeOverview","Switch","_this$props5","_this$props6","_this$props7","Events","renderDescription","renderSpecification","renderRuntime","renderResources","renderEvents","renderAlerts","renderJobs","DetailsConnected","UI_COLLAPSIBLE_SIZE","getOperationAlertEvents","selectIsOperationInGpuTree","DetailsWithRum","OPERATION_TAB_DETAILS","StarTrackLink","_props$emptyContent","emptyContent","trackerBaseUrl","uiSettings","_Fragment","ExperimentAssignments","ExperimentsItem","ExperimentAssignmentsItem","getOperationExperimentAssignments","getOperationId","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","prepareSettings","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","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","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","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","showErrorModal","InputPaths","DebugInfo","getDebugInfo","DownloadLink","prepareStatistics","endsWith","TimeDuration","textAlign","JobDetails","_ypath$getValues","getValues","_ypath$getValues2","rowCount","dataSize","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","button","EllipsisIcon","firstGroup","secondGroup","DropdownMenu","switcher","id_address","finish_time","withTaskName","taskNamesNumber","renderFinishTime","renderDuration","renderTaskName","brief_statistics","interruption_info","TemplateTime","_this$props2$inputPat","hideInputPaths","LOADING_STATUS","UNINITIALIZED","ysonSettings","ERROR","SimpleModal","LOADING","competitiveJobs","renderInputPathsModal","onSort","HIDE_INPUT_PATHS","_getOperationTasksNam","getOperationTasksNames","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","getOperationJobsLoadingStatus","operationLoadState","OPERATION_TAB_JOBS","getJobsMonitorError","jobsMonitor","getJobsMonitorItemsLoading","getJobsMonitorItemsLoaded","getJobsMonitoringItemsWithDescriptor","getJobsMonitorFromTo","start","valueOf","finish","MAX_DESCRIPTORS_COUNT","getUniqueJobsMonitorDescriptors","descriptors","getLimitedJobsMonitorDescriptors","getJobsMonitorTabVisible","opId","jobMonId","jobsDescriptorArray","JobsMonitor","allJobDescriptors","limitedJobDescriptors","job_descriptor","useMemo","alert","Loader","centered","NoContent","JobMonitorComponent","getMonitorComponentForJob","OperationAttributes","getOperationTypedAttributes","OPERATION_TAB_ATTRIBUTES","OperationDetailsMonitor","OperationMonitor","component","selectJobs","jobsTimeline","selectLoading","selectInterval","interval","selectFilter","selectActiveJob","selectedJob","selectActiveIncarnation","selectedIncarnation","selectJobsOverloadError","jobsCountError","selectError","selectEventsInterval","eventsInterval","isFinite","selectJobsEmptyError","selectSortedJobs","a","b","groupNameComparison","groupName","localeCompare","cookieId","getSelectedJob","activeJob","selectIntervalsIsSame","eInterval","getJobsWithEvents","firstRequest","sameIntervals","listResponse","setLoading","setError","setJobsCountError","job_cookie","maxTime","jobEvents","isAborted","lastEventTime","dayjs","at","Date","now","minTime","percent","timeLineJob","allocationId","allocation_id","eventsCount","stateIndex","prevEvent","endTime","phases","phase","lastEventIndex","Infinity","setJobs","setInterval","t0","ComponentType","StrokeMode","TimelineState","ZoomMode","MarkerDeselectionMode","TimeLineHeader","ChevronsExpandToLinesIcon","RangeDateSelection","dateTimeParse","end","displayNow","hasScaleButtons","pointToRangeIntersect","point","rangeToRangeIntersect","a0","a1","b0","b1","convertDomain","src0","src1","dst0","dst1","fn","dstDomain","abs","ratio","domain","getRatio","clamp","AxesIndex","constructor","options","_axes","identityFunction","getAxisId","axis","newAxes","every","_sortedAxes","_axesByIdMap","sortedAxes","top","axesById","getAxisById","hasAxis","Axes","api","strokeMode","STRAIGHT","axesIndex","setAxes","getAxesById","getAxisTrackPosition","trackIndex","tracksCount","getViewConfiguration","trackHeight","ctx","DASHED","setLineDash","dashedLinePattern","useScrollTransform","translate","getRulerHeight","canvasWidth","canvas","strokeStyle","line","beginPath","lineWidth","camera","getCameraPosition","visibleAxes","y0","y1","moveTo","lineTo","stroke","solidLinePattern","HOUR","MINUTE","DAY","MONTH","YEAR","minuteSupLabel","t","startOf","dateSupLabel","monthSupLabel","Ruler","levelCache","Map","labelLevels","hourSupLabel","weekendColor","rulerWeekendColor","weekday","sup","SECOND","minute","hour","getLabelLevels","ruler","useStaticTransform","fillStyle","background","fillRect","font","lineJoin","miterLimit","renderBottomLine","renderLevels","borderColor","getInterval","supLevel","findAppropriateLevels","renderLevel","position","primaryLevel","subPosition","secondaryLevel","currentLevel","marksWidth","calculateMarksWidth","set","textOutlineColor","firstRendered","timeToPosition","strokeText","fillText","renderEdgeLabel","firstLabelTimestamp","positionToTime","firstLabel","firstMark","measureText","getGridColorForTimeUnitMultiple","primaryColor","secondaryColor","Grid","levels","primaryMarkColor","secondaryMarkColor","boundaryMarkColor","getGridLevels","grid","domainSize","selectGridLevel","rulerHeight","widthBuffer","totalWidth","left","floor","checkControlCommandKey","navigator","userAgent","metaKey","ctrlKey","AbstractEventRenderer","hitboxResult","right","bottom","DefaultEventRenderer","isSelected","h","selectedColor","rect","getHitbox","_event","allowMultipleSelection","activeEvents","_selectedEvents","_events","handleCanvasMouseup","clickEventsCollectionFilter","getTimelineSettings","candidates","getEventsAtPoint","offsetX","offsetY","selectEvents","toggle","handleCanvasContextMenu","preventDefault","candidate","emit","relativeX","clientX","relativeY","clientY","handleCanvasMousemove","isEqual","JSON","candidateIds","addEventListeners","setEvents","newEvents","selectedIds","rebuildIndex","getEventsAt","hitboxPadding","topOffset","canvasScrollTop","minX","maxX","minY","maxY","box","DOMRect","p","setSelectedEvents","ids","getSelectedEvents","isSelectedEvent","selection","select","delete","rerender","viewConfiguration","axesComponent","getComponent","len","axisId","eventTo","runRenderer","destroy","removeEventListener","boxes","eventTrackY","lineHeight","load","addEventListener","renderer","defaultPalette","DEFAULT_FONT","defaultViewConfig","hideRuler","markers","groupColor","groupColorHover","collapseMinDistance","collapseEnabled","groupZoomEnabled","groupZoomPadding","groupZoomMaxFactor","zoom","DEFAULT","CanvasApi","components","getContext","globalAlpha","addComponent","removeComponent","clearBeforeRender","save","restore","setRange","setMarkers","newMarkers","Markers","setCanvasScrollTop","newScrollTop","pixelRatio","devicePixelRatio","bind","widthToTime","actualWidth","clearRect","dpr","setTransform","yOffset","getEventPosition","WHEEL_PAN_SPEED","ZOOM_MAX","TimelineController","emitCameraChange","newStart","newEnd","updateCanvasSize","logicalWidth","offsetWidth","logicalHeight","offsetHeight","handleCanvasWheel","zoomMode","NONE","isPanned","oldDomain","deltaY","shiftKey","HORIZONTAL","shift","newDomain","cursorTime","round","deltaX","clickMarkerCollectionFilter","eventsComponent","markersComponent","getMarkersAtPoint","init","resizeObserver","ResizeObserver","observe","disconnect","AbstractMarkerRenderer","DefaultMarkerRenderer","isHovered","marker","markerPosition","lastRenderedLabelPosition","getLabelSize","activeColor","hoverColor","labelAreaHeight","labelSize","DEFAULT_LABEL_PADDING","renderLabel","markerConfiguration","widthWithPadding","heightWithPadding","isActive","labelPosition","calculateSelectedLabelPosition","drawLabelContent","labelColor","_sortedMarkers","_collapsedMarkers","textWidthCache","_selectedMarkers","hoveredMarker","markerDeselectionMode","ON_CLICK_ANYWHERE","times","arraysAreEqual","num","isMarkerOnlyMode","ON_MARKER_CLICK_ONLY","emitAndRender","groupMarker","handleGroupMarkerClick","newHover","getMarkersAt","nonSelectable","isSelectedMarker","isHoveredMarker","visibleMarkers","overscan","collapsedMarkers","collapseCloseSimilarMarkers","rebuildIndexWithCollapsedMarkers","renderMarker","measureResult","actualBoundingBoxAscent","actualBoundingBoxDescent","markersCfg","collapseDistance","markersWithPositions","lastPosition","NEGATIVE_INFINITY","flushCurrentGroup","avgTime","calculateAverageTime","groupedMarker","totalTime","groupMarkers","findMarkersInGroup","calculateGroupInterval","originalMarkers","newInterval","groupTime","groupPosition","currentStart","currentEnd","currentDomain","groupTimes","m","groupDomain","padding","maxFactor","center","halfDomain","eventEmitter","EventTarget","INIT","getViewConfig","HTMLCanvasElement","initComponents","selectedEventIds","controller","READY","on","listener","off","CustomEvent","bubbles","cancelable","getPhaseColor","COMPLETED_STATES","isFinalState","PhaseNameCell","getDateTime","toString","EventsTable","eventDuration","isFinal","eventPhase","nextPhase","phaseDuration","Table","relativeTime","MetaItem","showCopy","MetaData","showCopyButton","asMilliseconds","SidePanelEmpty","hint","EventsSidePanel","containerRef","handleOutsideClick","contains","timelineElement","closest","gutterElement","headerControls","setSelectedJob","document","EventDisplayMode","convertToRGBA","colorString","opacity","g","normalizedColor","replace","hex","parseInt","colorValues","parseFloat","DEFAULT_COLOR","JobLineRenderer","_AbstractEventRendere","rawX0","rawX1","_","displayMode","parts","_this$getFixedXCoordi","getFixedXCoordinates","isTransparent","Transparent","Found","renderFilterBackground","FoundIncarnation","renderIncarnationBackground","startX","percentage","phaseCount","rawStartPosition","rawEndPosition","startPosition","phaseWidth","_phases$i$phase","lineColor","getCssColor","closePath","renderSelectedBorder","renderBackground","backgroundColor","borderX0","borderThickness","borderWidth","borderY0","borderHeight","innerBorderX0","innerBorderY0","innerBorderWidth","innerBorderHeight","SelectedFound","_this$getFixedXCoordi2","fillColor","EventTimelineTooltipContentRow","EventTimelineTooltipContent","_ref$event","phaseItems","ac","arr","TimelineCanvas","canvasRef","tabIndex","useTimelineEvent","cb","onEvent","useLayoutEffect","GroupCollapse","_ref$open","isOpen","ChevronDownIcon","EventPopup","parentRef","_ref$delay","delay","eventData","setEventData","showPopup","setShowPopup","hoverTimeout","clearTimeout","handleEventsHover","jobEvent","setTimeout","handleEventLeave","handleParentLeave","zIndex","pointerEvents","Wrap","collapse","TimelineBlock","listItems","rowHeight","topPadding","onTimelineClick","onMarkerClick","onCameraChange","sidebarRef","timelineWrapRef","selectedEvents","handleScroll","scrollTop","VirtualList","itemHeight","scrollRef","renderItem","justifyItems","onWrapperScroll","getJobTrackId","IncarnationMarkerRenderer","_AbstractMarkerRender","_getLabelSize","roundRect","getColorByState","AllocationLineRenderer","__","getTimeLineDisplayMode","_ref$filter","_ref$selectedJob","_ref$selectedByIncarn","selectedByIncarnation","hasFilter","hasSelectedJobs","matchesFilter","includes","Selected","Default","AXIS_ID","SidePanelPortal","withSplit","OperationTimeline","selectedJobId","Timeline","splice","handleTimeLineClick","handleMarkerClick","setSelectedIncarnation","incarnationId","handleBoundsChanged","handleMakeTimelineContent","splitScreen","axesRowHeight","cookieIdSet","prepareAxis","incarnationMap","entries","labelBackgroundColor","prepareMarkers","_ref$selectedIncarnat","allocationMap","trackIdSet","firstEvent","lastEvent","jobStartTime","jobEndTime","trackId","existingAllocation","_step2","cookieIds","allocations","allocation","timelines","_iterator2","prepareJobEvents","JobsTimeline","firstUpdate","eventsRange","overloadError","emptyError","handleUpdate","detailBlock","OperationDetailUpdater","SpecialWaitingStatus","iconState","renderPlaque","OperationDetail","handlePoolsEditClick","renderAction","onProgressLinkClick","jobState","listOperationEvents","_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","editBtnVisibility","_this$props5$match$pa","activeTab","tab","hasStatististicsTab","jobsMonitorVisible","monitorTabVisible","monitorTabTitle","monitorTabUrlTemplate","timelineTabVisible","operationPerformanceUrlTemplate","operationEvents","showSettings","getDetailsTabsShowSettings","Tab","STATISTICS","MONITOR","JOBS_TIMELINE","INCARNATIONS","PERFORMANCE","external","_operation$pools","monTab","firstPoolInfo","operationMonitoringUrl","urlTemplate","makeTabProps","Tabs","routedPreserveLocation","UI_TAB_SIZE","jobsMonitorIsSupported","monitoringComponent","Route","ATTRIBUTES","DETAILS","SPECIFICATION","JOBS","JOB_SIZES","PARTITION_SIZES","renderIncarnationsTab","Placeholder","DEFAULT_TAB","renderAlias","_match$params","redirectPath","renderHeader","renderOverview","renderTabs","renderMain","_this$props8","listOperationEventsApi","endpoints","initiate","event_type","routerProps","_state$operations$det","getOperationErasedTrees","getOperationEvents","getMonitoringForOperation","getCurrentCluster","getOperationPerformanceUrlTemplate","OperationDetailConnected","OperationDetailsWithRum","viewContext","DASHBOARD_VIEW_CONTEXT","PoolsWeightsEditModal","exact","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","isNotFinalState","_getValue","eventsItems","totalRow","showAttributesColumn","module","exports","o","u","years","months","days","seconds","milliseconds","weeks","$l","$","ceil","negative","$d","$ms","parseFromMilliseconds","calMilliseconds","prototype","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","waitForFontFamily","fontFamily","FontFaceObserver","waitForFontFamilies","promiseToWrap","_dispatch","fontFamilies","getFontFamilies","regular","monospace","useRouteMatch","WarningIcon","hoverContent","toggleColumnSortOrder","_WithStickyHead","WithStickyHead","bWrapper","prepareTableClassName","ElementsTableHeader","renderStickyHead","displayName","getDisplayName","padded","HEADER_HEIGHT","useRumMeasureStart","subPage","sizeMap","xs","copyIconSize","closeIconSize","onCloseClick","copyText","closeButtonLabel","copyButtonLabel","interactive","onCopy","hasContent","typeClose","typeCopy","hasOnClick","hasCopy","isInteractive","startIcon","side","actionButton","ClipboardIcon","CopyToClipboard","ElementsTableFooter","itemMods","selectedIndex","cssHover","columnSet","columnItems","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","renderRow","_prepareColumnsData","prepareColumnsData","_WithStickyFooter","WithStickyFooter","renderStickyFooter","hideIcon","mappedState","_states","starting","waiting","failing","aborting","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","unknown","getIcon","mods","_WithSplit","WithSplit","ReactDOM","getElementById","SPLIT_PANE_ID","attachEvent","w","createElement","setAttribute","appendChild","createTextNode","j","cssText","B","scrollLeft","scrollWidth","C","parentNode","family","stretch","E","F","G","fonts","N","q","J","getTime","K","L","vendor","exec","O","P","race","body","readyState","detachEvent","z","A","removeChild","dir","hidden","wrapContent","warnAboutPhysicalValues","propName","warn","normalizeSides","super","activeScrollElement","columnsStyles","columnHeaderRefs","tableRef","scrollContainerRef","horizontalScrollBarRef","horizontalScrollBarInnerRef","rowIndex","isRowDisabled","onRowClick","onRowMouseEnter","onRowMouseLeave","onRowMouseDown","getRowClassNames","verticalAlign","edgePadding","wordWrap","getRowDescriptor","descriptor","additionalClassNames","classNames","onMouseDown","rawAlign","rawSticky","getBodyCellContent","getRowId","handleScrollContainerMouseenter","handleScrollContainerScroll","handleHorizontalScrollBarMouseenter","handleHorizontalScrollBarScroll","getHeadCellContent","placeholderValue","getDerivedStateFromProps","componentDidMount","stickyHorizontalScroll","tableResizeObserver","_a","contentRect","setProperty","columnsResizeObserver","requestAnimationFrame","updateColumnStyles","componentDidUpdate","componentWillUnmount","withPrimary","renderTable","renderHorizontalScrollBar","renderHead","renderBody","renderEmptyRow","emptyMessage","stickyHorizontalScrollBreakpoint","columnsWidth","getBoundingClientRect","getColumnStyles","maxWidth","filteredColumns","_this$props2$alwaysSh","future","past","hh","dd","yy","fromToBase","$locale","thresholds","rounding","$u","utc","toNow","usePoolTreesLoaded","loadPoolTreesIfNotLoaded","useDefaultPoolTree","defaultPoolTree","setDefaultPoolTree","loadDefaultPoolTree","WaitForDefaultPoolTree","cnDropdownMenu","DropdownMenuContext","moveBack","activeItemIndex","steps","skip","newActiveItemIndex","moveForward","rootMenuPath","DropdownMenuNavigationContext","activeMenuPath","setActiveMenuPath","DropdownMenuNavigationContextProvider","contextValue","dropdownMenuSeparator","isSeparator","shouldSkipItemNavigation","stringifyNavigationPath","DropdownMenuPopup","menuProps","popupProps","navigationAnchorRef","isSubmenu","activateParent","handleMouseEnter","handleMouseLeave","handleSelect","activeItem","handleKeydown","isSubmenuToggleActive","isNavigationActive","setActiveItemIndex","reset","resetNavigation","pageSize","processHomeKey","processEndKey","initialValue","onAnchorKeyDown","anchor","previousActiveItemIndex","useListNavigation","Menu","isActiveParent","DropdownMenuItem","separator","closeMenu","isSubmenuOpen","useSubmenu","hasSubmenu","closeSubmenu","openSubmenu","subMenuItems","menuItemRef","useDirection","handleCloseMenu","close","handleMenuItemClick","_b","subMenuPlacement","iconEnd","ChevronLeft","ChevronRight","Item","toItemList","startIndex","updatedItems","addedGroup","groupItems","updatedItem","DropdownMenuExport","Ellipsis","onOpenToggle","hideOnScroll","renderSwitcher","switcherWrapperClassName","defaultSwitcherProps","defaultSwitcherClassName","onSwitcherClick","isPopupShown","togglePopup","closePopup","onChangeVisibility","setPopupShown","property","initialState","isControlled","nextValue","previousState","newState","useStateWithCallback","useConditionallyControlledState","isShown","usePopupVisibility","onScroll","useScrollHandler","itemsList","handleSwitcherClick","handleSwitcherKeyDown","useActionHandlers","switcherProps","MenuGroup","labelId","useUniqId","MenuItem","iconStart","rel","handleClickCapture","publish","componentId","eventId","domEvent","commonProps","onClickCapture","Group","ColorCircle","_ref$marginRight","marginRight"],"sourceRoot":""}
|