@ytsaurus/ui 1.103.0 → 1.103.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +40 -40
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css +2 -0
- package/dist/public/build/css/default-subject-link.b01c2230.chunk.css.map +1 -0
- package/dist/public/build/css/{main.d1987746.css → main.23e8d0fd.css} +2 -2
- package/dist/public/build/css/main.23e8d0fd.css.map +1 -0
- package/dist/public/build/js/6157.6786c942.chunk.js +2 -0
- package/dist/public/build/js/6157.6786c942.chunk.js.map +1 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js +2 -0
- package/dist/public/build/js/6983.a2b31b33.chunk.js.map +1 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js +2 -0
- package/dist/public/build/js/8165.9684f49e.chunk.js.map +1 -0
- package/dist/public/build/js/{accounts.aaa21eca.chunk.js → accounts.f328f823.chunk.js} +2 -2
- package/dist/public/build/js/accounts.f328f823.chunk.js.map +1 -0
- package/dist/public/build/js/acl.556f2525.chunk.js +2 -0
- package/dist/public/build/js/acl.556f2525.chunk.js.map +1 -0
- package/dist/public/build/js/{bundles.b851f32c.chunk.js → bundles.0ab2d6f4.chunk.js} +2 -2
- package/dist/public/build/js/{bundles.b851f32c.chunk.js.map → bundles.0ab2d6f4.chunk.js.map} +1 -1
- package/dist/public/build/js/cluster-page-wrapper.a5c05070.chunk.js +2 -0
- package/dist/public/build/js/{cluster-page-wrapper.45436df6.chunk.js.map → cluster-page-wrapper.a5c05070.chunk.js.map} +1 -1
- package/dist/public/build/js/dashboard.efdd63a2.chunk.js +3 -0
- package/dist/public/build/js/{dashboard.234b8062.chunk.js.map → dashboard.efdd63a2.chunk.js.map} +1 -1
- package/dist/public/build/js/main.a89bac74.js +3 -0
- package/dist/public/build/js/main.a89bac74.js.map +1 -0
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js → navigation-flow.1d83e216.chunk.js} +2 -2
- package/dist/public/build/js/{navigation-flow.a79a25f5.chunk.js.map → navigation-flow.1d83e216.chunk.js.map} +1 -1
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js → navigation.0aff5a3a.chunk.js} +2 -2
- package/dist/public/build/js/{navigation.b91a7a0b.chunk.js.map → navigation.0aff5a3a.chunk.js.map} +1 -1
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js → query-tracker.b7334a6f.chunk.js} +2 -2
- package/dist/public/build/js/{query-tracker.5a0d626f.chunk.js.map → query-tracker.b7334a6f.chunk.js.map} +1 -1
- package/dist/public/build/js/{runtime.8a460b23.js → runtime.d583e98e.js} +2 -2
- package/dist/public/build/js/{runtime.8a460b23.js.map → runtime.d583e98e.js.map} +1 -1
- package/dist/public/build/js/users.aec1e380.chunk.js +2 -0
- package/dist/public/build/js/users.aec1e380.chunk.js.map +1 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js +3 -0
- package/dist/public/build/js/yt-df-dialog.1d05b0a5.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +34 -34
- package/package.json +4 -3
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css +0 -2
- package/dist/public/build/css/default-subject-link.4dc8a973.chunk.css.map +0 -1
- package/dist/public/build/css/main.d1987746.css.map +0 -1
- package/dist/public/build/js/2009.8121a60e.chunk.js +0 -2
- package/dist/public/build/js/2009.8121a60e.chunk.js.map +0 -1
- package/dist/public/build/js/6157.92170346.chunk.js +0 -2
- package/dist/public/build/js/6157.92170346.chunk.js.map +0 -1
- package/dist/public/build/js/6960.8b7e01c6.chunk.js +0 -2
- package/dist/public/build/js/6960.8b7e01c6.chunk.js.map +0 -1
- package/dist/public/build/js/accounts.aaa21eca.chunk.js.map +0 -1
- package/dist/public/build/js/acl.1ad3d494.chunk.js +0 -2
- package/dist/public/build/js/acl.1ad3d494.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.45436df6.chunk.js +0 -2
- package/dist/public/build/js/dashboard.234b8062.chunk.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js +0 -3
- package/dist/public/build/js/main.aa6a17d8.js.map +0 -1
- package/dist/public/build/js/users.a0dc610f.chunk.js +0 -2
- package/dist/public/build/js/users.a0dc610f.chunk.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js +0 -3
- package/dist/public/build/js/yt-df-dialog.acab4eb0.chunk.js.map +0 -1
- /package/dist/public/build/js/{dashboard.234b8062.chunk.js.LICENSE.txt → dashboard.efdd63a2.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.aa6a17d8.js.LICENSE.txt → main.a89bac74.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{yt-df-dialog.acab4eb0.chunk.js.LICENSE.txt → yt-df-dialog.1d05b0a5.chunk.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js/6983.a2b31b33.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/components/common/Datepicker/index.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/events/eventsTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Events/Events.js","webpack://@ytsaurus/ui/./node_modules/dayjs/plugin/duration.js","webpack://@ytsaurus/ui/./src/ui/pages/components/Placeholder.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/StaleJobIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyHead.js","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/ElementsTableFooter.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withStickyFooter.js","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withSplit.tsx","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Table/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Table/Table.js","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/use-side-panel.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/data-flow.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/specification/specification.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/runtime.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/alerts.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/selectors.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/operation.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-monitor.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/detail.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/error.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/utils.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/index.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/PoolsWeightsEditModal/PoolsWeightsEditModal.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationProgress/OperationProgress.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListTable/PathItem.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListTable/OperationsListTable.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsTextFilter.js","webpack://@ytsaurus/ui/./src/ui/components/TimePicker/TimePicker.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsArchiveFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationSelectFilter/OperationSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListPaginator.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/operations-list.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsFilterPresets.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationSuggestFilter/OperationSuggestFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListSuggestFilters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListToolbar.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsList.js","webpack://@ytsaurus/ui/./src/ui/components/YTHistogram/YTHistogram.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/partition-sizes/PartitionSizes/PartitionSizes.tsx","webpack://@ytsaurus/ui/./src/ui/components/AlertEvents/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/AlertEvents/AlertEvents.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Description.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/JobsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/attributes/OperationAttributes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs-timeline.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-timeline.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/constants/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-expand-to-lines.svg","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/TimeLineHeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getPhaseColor.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsSidePanel/EventsTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/MetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsSidePanel/EventsSidePanel.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/helpers/getColorByState.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/enums/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getTimeLineDisplayMode.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/helpers/convertToRGBA.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/JobLineRenderer.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/AllocationLineRenderer.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventTimelineTooltip.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContentRow.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContent.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventCanvas.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventsTimeline.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/TimelineTable.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/GroupCollapse.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/TimelineBlock.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/JobsGroups/JobsGroups.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/prepareJobTimeline.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/JobsTimeline.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/OperationDetail.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/Operations/Operations.js","webpack://@ytsaurus/ui/./node_modules/dayjs/plugin/relativeTime.js","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/global-pool-trees.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/circle-question.svg","webpack://@ytsaurus/ui/./src/ui/components/OperationType/OperationType.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx"],"sourcesContent":["import React from 'react';\nexport type {ChartKitProps, ChartKitWidget, ChartKitRef} from './YTChartKit';\nexport type {RawSerieData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';\n\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport type {YTChartKitType} from './YTChartKit';\n\nexport const YTChartKitLazy = withLazyLoading(\n React.lazy(async () => import(/* webpackChunkName: 'chart-kit' */ './YTChartKit')),\n) as YTChartKitType;\n\nconst COLORS = ['rgb(77, 162, 241)', 'rgb(255, 61, 100)'];\n\nexport function getSerieColor(serieIndex: number) {\n return COLORS[serieIndex % COLORS.length];\n}\n\nexport {YTChartKitPie} from './YTChartKitPie';\nexport {YTChartKitHistogram} from './YTChartKitHistogram';\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:attributes-button', {en, ru});\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\nimport i18n from './i18n';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: i18n('tooltip-content')},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../../components/Icon/Icon';\n\nimport './ExpandIcon.scss';\n\nconst block = cn('expand-icon');\n\ntype ExpandIconProps = {\n className?: string;\n\n expanded?: boolean;\n visible?: boolean;\n onClick?: (data?: string, expanded?: boolean) => void;\n\n data?: string;\n};\n\nexport default function ExpandIcon({className, data, expanded, visible, onClick}: ExpandIconProps) {\n const icon = expanded ? 'angle-up' : 'angle-down';\n const onClickCb = React.useCallback(() => {\n if (onClick) {\n onClick(data, expanded);\n }\n }, [data, onClick, expanded]);\n\n return (\n <span\n className={block(\n {visible: Boolean(visible), clickable: onClick !== undefined},\n className,\n )}\n onClick={onClickCb}\n >\n <Icon awesome={icon} />\n </span>\n );\n}\n","import * as React from 'react';\nexport const AlertContext = React.createContext(null);\n","'use client';\nimport * as React from 'react';\nimport { AlertContext } from './AlertContext';\nexport const useAlertContext = () => {\n const context = React.useContext(AlertContext);\n if (!context)\n throw new Error('Alert: `useAlertContext` hook is used out of \"AlertContext\"');\n return context;\n};\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Button } from '../Button';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertAction = (props) => {\n const { view } = useAlertContext();\n return _jsx(Button, Object.assign({ view: view === 'filled' ? 'normal-contrast' : undefined }, props));\n};\n","import { block } from '../utils/cn';\nimport './Alert.css';\nexport const DEFAULT_ICON_SIZE = 18;\nexport const bAlert = block('alert');\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { AlertContext } from './AlertContext';\nexport const AlertContextProvider = ({ layout, view, children }) => {\n return _jsx(AlertContext.Provider, { value: { layout, view }, children: children });\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { CircleCheck, CircleCheckFill, CircleInfo, CircleInfoFill, CircleXmark, CircleXmarkFill, Thunderbolt, ThunderboltFill, TriangleExclamation, TriangleExclamationFill, } from '@gravity-ui/icons';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text/colorText/colorText';\nimport { DEFAULT_ICON_SIZE, bAlert } from './constants';\nconst typeToIcon = {\n danger: {\n filled: CircleXmarkFill,\n outlined: CircleXmark,\n },\n info: {\n filled: CircleInfoFill,\n outlined: CircleInfo,\n },\n success: {\n filled: CircleCheckFill,\n outlined: CircleCheck,\n },\n warning: {\n filled: TriangleExclamationFill,\n outlined: TriangleExclamation,\n },\n utility: {\n filled: ThunderboltFill,\n outlined: Thunderbolt,\n },\n normal: null,\n};\nexport const AlertIcon = ({ className, theme, view = 'filled', size = DEFAULT_ICON_SIZE, }) => {\n const iconByTheme = typeToIcon[theme];\n if (!iconByTheme) {\n return null;\n }\n let color;\n if (theme === 'success') {\n color = 'positive';\n }\n else if (theme !== 'normal') {\n color = theme;\n }\n return (_jsx(\"div\", { className: bAlert('icon', colorText({ color }, className)), children: _jsx(Icon, { data: iconByTheme[view], size: size }) }));\n};\n","import * as React from 'react';\nconst CircleXmarkFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmarkFill;\n","import * as React from 'react';\nconst CircleXmark = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M13.5 8a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmark;\n","import * as React from 'react';\nconst CircleInfoFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-9.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0M8 7.75a.75.75 0 0 1 .75.75V11a.75.75 0 0 1-1.5 0V8.5A.75.75 0 0 1 8 7.75\", clipRule: \"evenodd\" })));\nexport default CircleInfoFill;\n","import * as React from 'react';\nconst CircleCheckFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m3.1-8.55a.75.75 0 1 0-1.2-.9L7.419 8.858 6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08z\", clipRule: \"evenodd\" })));\nexport default CircleCheckFill;\n","import * as React from 'react';\nconst TriangleExclamationFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M5.835 2.244c.963-1.665 3.367-1.665 4.33 0l4.916 8.505c.964 1.666-.24 3.751-2.164 3.751H3.083c-1.925 0-3.128-2.085-2.165-3.751zM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 1 1-1.5 0v-2A.75.75 0 0 1 8 5m1 5.75a1 1 0 1 1-2 0 1 1 0 0 1 2 0\", clipRule: \"evenodd\" })));\nexport default TriangleExclamationFill;\n","import * as React from 'react';\nconst ThunderboltFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", d: \"m14.61 6.914-7.632 8.08a1.614 1.614 0 0 1-2.69-1.66L5.5 10H2.677A1.677 1.677 0 0 1 1.12 7.7l2.323-5.807A2.22 2.22 0 0 1 5.5.5h4c.968 0 1.637.967 1.298 1.873L10 4.5h3.569a1.431 1.431 0 0 1 1.04 2.414\" })));\nexport default ThunderboltFill;\n","import { addComponentKeysets } from '../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'Alert';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Xmark } from '@gravity-ui/icons';\nimport { Button } from '../Button';\nimport { Card } from '../Card';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text';\nimport { Flex, spacing } from '../layout';\nimport { AlertAction } from './AlertAction';\nimport { AlertActions } from './AlertActions';\nimport { AlertContextProvider } from './AlertContextProvider';\nimport { AlertIcon } from './AlertIcon';\nimport { AlertTitle } from './AlertTitle';\nimport { DEFAULT_ICON_SIZE, bAlert } from './constants';\nimport i18n from './i18n';\nexport const Alert = (props) => {\n const { theme = 'normal', view = 'filled', layout = 'vertical', message, className, corners, style, onClose, align, qa, } = props;\n return (_jsx(AlertContextProvider, { layout: layout, view: view, children: _jsx(Card, { style: style, className: bAlert({ corners }, spacing({ py: 4, px: 5 }, className)), theme: theme, view: view, qa: qa, children: _jsxs(Flex, { gap: \"3\", alignItems: align, children: [typeof props.icon === 'undefined' ? (_jsx(Alert.Icon, { theme: theme, view: view })) : (props.icon // ability to pass `null` as `icon` prop value\n ), _jsxs(Flex, { direction: layout === 'vertical' ? 'column' : 'row', gap: \"5\", grow: true, children: [_jsx(Flex, { gap: \"2\", grow: true, className: bAlert('text-content'), children: _jsxs(Flex, { direction: \"column\", gap: \"1\", grow: true, justifyContent: align, children: [typeof props.title === 'string' ? (_jsx(Alert.Title, { text: props.title })) : (props.title), message] }) }), Array.isArray(props.actions) ? (_jsx(Alert.Actions, { items: props.actions })) : (props.actions)] }), onClose && (_jsx(Button, { view: \"flat\", className: bAlert('close-btn'), onClick: onClose, extraProps: {\n 'aria-label': i18n('label_close'),\n }, children: _jsx(Icon, { data: Xmark, size: DEFAULT_ICON_SIZE, className: colorText({ color: 'secondary' }) }) }))] }) }) }));\n};\nAlert.Icon = AlertIcon;\nAlert.Title = AlertTitle;\nAlert.Actions = AlertActions;\nAlert.Action = AlertAction;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Text } from '../Text';\nimport { bAlert } from './constants';\nexport const AlertTitle = ({ text, className }) => {\n return (_jsx(Text, { variant: \"subheader-2\", className: bAlert('title', className), children: text }));\n};\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Flex } from '../layout';\nimport { AlertAction } from './AlertAction';\nimport { bAlert } from './constants';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertActions = ({ items, children, className }) => {\n const { layout } = useAlertContext();\n return (_jsx(Flex, { className: bAlert('actions', { minContent: layout === 'horizontal' }, className), direction: \"row\", gap: \"3\", wrap: true, alignItems: layout === 'horizontal' ? 'center' : 'flex-start', children: (items === null || items === void 0 ? void 0 : items.map(({ handler, text }, i) => (_jsx(AlertAction, { onClick: handler, children: text }, i)))) || children }));\n};\n","import React, {FC} from 'react';\nimport {Datepicker, DatepickerProps, datepickerDefaultProps} from './Datepicker';\n\nexport * from './Datepicker';\n\nexport const DatePickerWrapper: FC<DatepickerProps> = (props) => <Datepicker {...props} />;\nDatePickerWrapper.defaultProps = datepickerDefaultProps;\n","import {prepareTableColumns} from '../../../../../utils/index';\nimport hammer from '../../../../../common/hammer';\n\nexport const columns = {\n state: {\n align: 'left',\n get(event) {\n return event.state;\n },\n },\n phase: {\n align: 'left',\n caption: 'State : Phase',\n get(event) {\n if (event.state === 'total') {\n return 'Total';\n }\n\n const formatter = hammer.format['Readable'];\n const state = formatter(event.state);\n const phase = formatter(event.phase || hammer.format.NO_VALUE);\n\n return `${state} : ${phase}`;\n },\n },\n progress: {\n align: 'center',\n caption: '',\n get(event) {\n const progressValue = event.progress && event.progress.duration;\n\n return {\n value: progressValue,\n theme:\n {\n initializing: 'grass',\n preparing: 'mint',\n pending: 'aqua',\n materializing: 'bluejeans',\n running: 'lavander',\n completing: 'grapefruit',\n reviving: 'bittersweet',\n reviving_jobs: 'sunflower',\n failed: 'grapefruit',\n }[event.state] || 'mediumgray',\n };\n },\n },\n duration: {\n align: 'right',\n get(event) {\n return event.duration;\n },\n },\n start_time: {\n align: 'left',\n get(event) {\n return event.time;\n },\n },\n actions: {\n align: 'center',\n caption: '',\n },\n};\n\nconst DEFAULT_MODE = 'default';\nconst WITH_ACTIONS_MODE = 'withActions';\n\nconst getEventsGeneralProps = (type) => ({\n theme: 'light',\n striped: false,\n virtual: true,\n header: false,\n size: 'm',\n computeKey(item) {\n return item.state + '/' + item.time;\n },\n columns: {\n items: prepareTableColumns(columns),\n sets: {\n [DEFAULT_MODE]: {\n items: [type, 'progress', 'duration', 'start_time'],\n },\n [WITH_ACTIONS_MODE]: {\n items: [type, 'progress', 'duration', 'start_time', 'actions'],\n },\n },\n mode: DEFAULT_MODE,\n },\n});\n\nexport function getEventsTableProps(showActions, type) {\n const eventsTableProps = getEventsGeneralProps(type);\n let res = eventsTableProps;\n if (showActions) {\n res = {...eventsTableProps};\n res.columns = {\n ...res.columns,\n mode: WITH_ACTIONS_MODE,\n };\n }\n return res;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {compose} from 'redux';\n\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\n\nimport ElementsTableBase from '../../../../../../components/ElementsTable/ElementsTable';\nimport withStickyFooter from '../../../../../../components/ElementsTable/hocs/withStickyFooter';\nimport withStickyHead from '../../../../../../components/ElementsTable/hocs/withStickyHead';\nimport {Progress} from '@gravity-ui/uikit';\nimport {Template} from '../../../../../../components/MetaTable/templates/Template';\nimport {Event} from '../../../../../../utils/operations/tabs/details/events/events';\n\nimport hammer from '../../../../../../common/hammer';\nimport {\n columns,\n getEventsTableProps,\n} from '../../../../../../utils/operations/tabs/details/events/eventsTablesProps';\n\nimport './Events.scss';\n\nexport const eventsProps = PropTypes.array;\nconst block = cn('events');\n\nconst odBlock = cn('operation-detail');\n\nconst ElementsTable = compose(withStickyHead, withStickyFooter)(ElementsTableBase);\n\nfunction getValue(event, columnName) {\n return columns[columnName]?.get(event);\n}\n\nexport default class Events extends React.Component {\n static propTypes = {\n events: eventsProps,\n type: PropTypes.string,\n };\n\n static defaultProps = {\n type: 'state',\n };\n\n get templates() {\n return {\n start_time(event, columnName) {\n const value = getValue(event, columnName);\n return value ? (\n <Template.Time\n time={value}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n ) : null;\n },\n finish_time(event, columnName) {\n const value = getValue(event, columnName);\n return value ? (\n <Template.Time\n time={value}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n ) : null;\n },\n duration(item, columnName) {\n if (Event.isFinalState(item)) {\n return hammer.format.NO_VALUE;\n }\n const value = getValue(item, columnName);\n return (\n <Template.Time\n time={value}\n settings={{format: 'milliseconds'}}\n valueFormat={'TimeDuration'}\n />\n );\n },\n progress(item, columnName) {\n if (Event.isNotFinalState(item) && item.state !== 'total') {\n const progress = item.progress.duration;\n const {theme, value} = getValue(item, columnName);\n\n return (\n <div className={odBlock('events-progress', {theme})}>\n <span\n className={odBlock(\n 'events-progress-percentage',\n 'elements-secondary-text',\n )}\n >\n {hammer.format['Percent'](progress)}\n </span>\n <Progress value={value} size=\"s\" />\n </div>\n );\n }\n },\n state(event, columnName) {\n const value = getValue(event, columnName);\n return <Template.Readable value={value} />;\n },\n phase(event, columnName) {\n const value = getValue(event, columnName);\n return <Template.Readable value={value} />;\n },\n actions: (event) => {\n const {attributes} = event || {};\n if (isEmpty_(attributes)) {\n return null;\n }\n return (\n <ClickableAttributesButton\n title={'Event attributes'}\n attributes={event.attributes}\n />\n );\n },\n };\n }\n\n render() {\n const {events, type} = this.props;\n const eventsItems = events.slice();\n const totalRow = eventsItems.pop();\n const {showAttributesColumn} = totalRow;\n\n return (\n <div className={block()}>\n <ElementsTable\n {...getEventsTableProps(showAttributesColumn, type)}\n items={eventsItems}\n css={block()}\n footer={totalRow}\n templates={this.templates}\n />\n </div>\n );\n }\n}\n","!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));","import React from 'react';\nimport block from 'bem-cn-lite';\nimport {useRouteMatch} from 'react-router';\n\nimport hammer from '../../common/hammer';\n\nconst b = block('elements-message');\n\ninterface MatchParams {\n tab: string;\n}\n\nexport default function Placeholder() {\n const match = useRouteMatch<MatchParams>();\n const {tab} = match.params;\n\n return (\n <div className={b({theme: 'warning'})}>\n <p className={b('paragraph')}>\n {tab\n ? `Viewer for tab \"${hammer.format['ReadableField'](tab)}\" is not implemented.`\n : 'Viewer for this tab is not implemented.'}\n </p>\n </div>\n );\n}\n","import React from 'react';\n\nimport WarningIcon from '../../../../../components/WarningIcon/WarningIcon';\n\nexport function StaleJobIcon({className}: {className?: string}) {\n return (\n <WarningIcon\n className={className}\n hoverContent={'The job is stale, the information may be obsolete'}\n />\n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {compose} from 'redux';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableHeader from '../../../components/ElementsTable/ElementsTableHeader';\n\nimport {toggleColumnSortOrder} from '../../../store/actions/tables';\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\nimport {HEADER_HEIGHT} from '../../../constants/index';\n\nimport '../ElementsTable.scss';\n\nconst withStickyHead = (Component) => {\n return class WithStickyHead extends React.Component {\n static displayName = `WithStickyHead(${getDisplayName(Component)})`;\n\n static propTypes = {\n top: PropTypes.number,\n };\n\n static defaultProps = {\n templates: {},\n size: 'm',\n theme: 'bordered',\n padded: false,\n striped: true,\n top: HEADER_HEIGHT,\n };\n\n renderStickyHead() {\n const {top} = this.props;\n const bWrapper = block('elements-table-wrapper')({sticky: 'top'});\n\n return (\n <div className={bWrapper} style={{top}}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableHeader {...this.props} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n {this.renderStickyHead()}\n <Component {...this.props} />\n </React.Fragment>\n );\n }\n };\n};\n\nconst mapStateToProps = ({tables}) => {\n return {sortState: tables};\n};\n\nconst mapDispatchToProps = {\n toggleColumnSortOrder,\n};\n\nconst composedWithStickyHead = compose(\n connect(mapStateToProps, mapDispatchToProps),\n withStickyHead,\n);\n\nexport default composedWithStickyHead;\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableRow from '../../components/ElementsTable/ElementsTableRow';\n\nimport {ELEMENTS_TABLE, TemplatesPropType, prepareColumnsData} from './utils';\n\nimport './ElementsTable.scss';\n\nexport default class ElementsTableFooter extends Component {\n static propTypes = {\n footer: PropTypes.object.isRequired,\n templates: TemplatesPropType.isRequired,\n cssHover: PropTypes.bool,\n };\n\n static defaultProps = {\n templates: {},\n cssHover: false,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {};\n }\n\n static getDerivedStateFromProps(props) {\n const {columns} = props;\n const {items, set} = prepareColumnsData(columns);\n\n return {\n columnItems: items,\n columnSet: set,\n };\n }\n\n renderRow(item, index, key = index) {\n const {css, itemHeight, templates, itemMods, selectedIndex, computeKey, cssHover} =\n this.props;\n const {columnSet, columnItems} = this.state;\n\n const selected = selectedIndex === index;\n const currentKey = typeof computeKey === 'function' ? computeKey(item) : key;\n\n return (\n <ElementsTableRow\n key={currentKey}\n columnSet={columnSet}\n columnItems={columnItems}\n item={item}\n itemHeight={itemHeight}\n css={css}\n templates={templates}\n selected={selected}\n index={index}\n itemMods={itemMods}\n cssHover={cssHover}\n />\n );\n }\n\n render() {\n const bFooter = block(ELEMENTS_TABLE)('footer');\n const {footer} = this.props;\n\n return <tfoot className={bFooter}>{this.renderRow(footer, 0)}</tfoot>;\n }\n}\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport ElementsTableFooter from '../../../components/ElementsTable/ElementsTableFooter';\n\nimport {getDisplayName} from '../../../utils';\nimport {prepareTableClassName} from '../../../components/ElementsTable/utils';\n\nimport '../ElementsTable.scss';\n\nexport default (Component) => {\n return class WithStickyFooter extends React.Component {\n static displayName = `WithStickyFooter(${getDisplayName(Component)})`;\n\n static defaultProps = {\n size: 'm',\n };\n\n renderStickyFooter() {\n const bWrapper = block('elements-table-wrapper')({\n sticky: 'bottom',\n });\n const {footer} = this.props;\n\n return (\n <div className={bWrapper}>\n <table className={prepareTableClassName(this.props)}>\n <ElementsTableFooter {...this.props} footer={footer} />\n </table>\n </div>\n );\n }\n\n render() {\n return (\n <React.Fragment>\n <Component {...this.props} />\n {this.props.footer && this.renderStickyFooter()}\n </React.Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport hammer from '../../common/hammer';\nimport Icon, {IconName} from '../Icon/Icon';\n\nimport {NavigationFlowState, StatusLabelState} from '../../types/common/states';\n\nimport './StatusLabel.scss';\n\nfunction getViewState(label?: StatusLabelProps['label']): ViewState {\n const states: Record<Exclude<typeof label, undefined>, ViewState> = {\n // preparing states\n materializing: 'preparing',\n initializing: 'preparing',\n preparing: 'preparing',\n pending: 'preparing',\n starting: 'preparing',\n\n // running states\n running: 'running',\n completing: 'running',\n failing: 'running',\n aborting: 'running',\n reviving: 'running',\n suspended: 'suspended',\n\n // final states\n failed: 'failed',\n completed: 'completed',\n aborted: 'aborted',\n\n // NavigationFlowState\n Unknown: 'unknown',\n Stopped: 'suspended',\n Paused: 'suspended',\n Working: 'running',\n Draining: 'running',\n Pausing: 'running',\n Completed: 'completed',\n };\n\n return states[label!] ?? 'unknown';\n}\n\nexport type ViewState =\n | 'preparing'\n | 'running'\n | 'failed'\n | 'aborted'\n | 'completed'\n | 'suspended'\n | 'unknown';\n\nfunction getIcon(state: ViewState) {\n const iconsByViewState: Record<ViewState, IconName> = {\n preparing: 'clock',\n running: 'play-circle',\n suspended: 'pause-circle',\n failed: 'times-circle',\n completed: 'check-circle',\n aborted: 'times-circle',\n unknown: 'question-circle',\n };\n return iconsByViewState[state];\n}\n\nconst b = block('status-label');\n\nexport type StatusLabelProps = {\n className?: string;\n label?: StatusLabelState | NavigationFlowState;\n renderPlaque?: boolean;\n text?: string;\n state?: ViewState;\n iconState?: ViewState;\n};\n\nexport default function StatusLabel({\n className,\n label,\n renderPlaque,\n text,\n state,\n iconState,\n}: StatusLabelProps) {\n const mappedState = getViewState(label);\n const icon = getIcon(iconState ?? mappedState);\n const mods = {state: state ?? mappedState};\n\n return !label && !(text || state) ? (\n <span />\n ) : (\n <span className={b(null, renderPlaque ? b('plaque', mods, className) : b(mods, className))}>\n <Icon awesome={icon} />\n <span>{text ?? hammer.format['ReadableField'](label)}</span>\n </span>\n );\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {getDisplayName} from '../utils';\nimport {SPLIT_PANE_ID} from '../constants/index';\n\nexport default function withSplit<P>(Component: React.ComponentType<P>): React.ComponentType<P> {\n return class WithSplit extends React.Component<P> {\n static displayName = `WithSplit(${getDisplayName(Component)})`;\n\n render() {\n return ReactDOM.createPortal(\n <Component {...this.props} />,\n document.getElementById(SPLIT_PANE_ID)!,\n );\n }\n };\n}\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:chart-link', {en, ru});\n","import React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\nimport i18n from './i18n';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link\n className={className}\n target=\"_blank\"\n theme={theme}\n url={url}\n title={title ?? i18n('View')}\n >\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import { addComponentKeysets } from '../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'Table';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","'use client';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport _get from 'lodash/get';\nimport _has from 'lodash/has';\nimport _isNumber from 'lodash/isNumber';\nimport { block } from '../utils/cn';\nimport { warnOnce } from '../utils/warn';\nimport i18n from './i18n';\nimport './Table.css';\nconst DASH = '\\u2014';\nfunction warnAboutPhysicalValues(propName) {\n warnOnce(`[Table] Physical values (left, right) of \"${propName}\" property are deprecated. Use logical values (start, end) instead.`);\n}\nfunction normalizeSides(side, propName) {\n if (side === 'left') {\n warnAboutPhysicalValues(propName);\n return 'start';\n }\n if (side === 'right') {\n warnAboutPhysicalValues(propName);\n return 'end';\n }\n return side;\n}\nconst b = block('table');\nexport class Table extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n activeScrollElement: 'scrollContainer',\n columnsStyles: Array.from(this.props.columns, () => ({})),\n columnHeaderRefs: Array.from(this.props.columns, () => React.createRef()),\n };\n this.tableRef = React.createRef();\n this.scrollContainerRef = React.createRef();\n this.horizontalScrollBarRef = React.createRef();\n this.horizontalScrollBarInnerRef = React.createRef();\n this.renderRow = (item, rowIndex) => {\n const { columns, isRowDisabled, onRowClick, onRowMouseEnter, onRowMouseLeave, onRowMouseDown, getRowClassNames, verticalAlign, edgePadding, wordWrap, getRowDescriptor, } = this.props;\n const { columnsStyles } = this.state;\n const descriptor = getRowDescriptor === null || getRowDescriptor === void 0 ? void 0 : getRowDescriptor(item, rowIndex);\n const disabled = (descriptor === null || descriptor === void 0 ? void 0 : descriptor.disabled) || (isRowDisabled === null || isRowDisabled === void 0 ? void 0 : isRowDisabled(item, rowIndex)) || false;\n const additionalClassNames = (descriptor === null || descriptor === void 0 ? void 0 : descriptor.classNames) || (getRowClassNames === null || getRowClassNames === void 0 ? void 0 : getRowClassNames(item, rowIndex)) || [];\n const interactive = Boolean(!disabled && onRowClick);\n return (_jsx(\"tr\", { onClick: !disabled && onRowClick ? onRowClick.bind(null, item, rowIndex) : undefined, onMouseEnter: !disabled && onRowMouseEnter\n ? onRowMouseEnter.bind(null, item, rowIndex)\n : undefined, onMouseLeave: !disabled && onRowMouseLeave\n ? onRowMouseLeave.bind(null, item, rowIndex)\n : undefined, onMouseDown: !disabled && onRowMouseDown\n ? onRowMouseDown.bind(null, item, rowIndex)\n : undefined, className: b('row', { disabled, interactive, 'vertical-align': verticalAlign }, additionalClassNames.join(' ')), children: columns.map((column, colIndex) => {\n const { id, align: rawAlign, primary, className, sticky: rawSticky } = column;\n const content = Table.getBodyCellContent(column, item, rowIndex);\n const align = normalizeSides(rawAlign, 'column.align');\n const sticky = normalizeSides(rawSticky, 'column.sticky');\n return (_jsx(\"td\", { style: columnsStyles[colIndex], className: b('cell', {\n align,\n primary,\n sticky,\n ['edge-padding']: edgePadding,\n ['word-wrap']: wordWrap,\n }, className), children: content }, id));\n }) }, Table.getRowId(this.props, item, rowIndex)));\n };\n this.handleScrollContainerMouseenter = () => {\n this.setState({ activeScrollElement: 'scrollContainer' });\n };\n this.handleScrollContainerScroll = () => {\n if (this.state.activeScrollElement === 'scrollContainer' &&\n this.horizontalScrollBarRef.current &&\n this.scrollContainerRef.current) {\n this.horizontalScrollBarRef.current.scrollLeft =\n this.scrollContainerRef.current.scrollLeft;\n }\n };\n this.handleHorizontalScrollBarMouseenter = () => {\n this.setState({ activeScrollElement: 'scrollBar' });\n };\n this.handleHorizontalScrollBarScroll = () => {\n if (this.state.activeScrollElement === 'scrollBar' &&\n this.horizontalScrollBarRef.current &&\n this.scrollContainerRef.current) {\n this.scrollContainerRef.current.scrollLeft =\n this.horizontalScrollBarRef.current.scrollLeft;\n }\n };\n }\n // Static methods may be used by HOCs\n static getRowId(props, item, rowIndex) {\n const { data, getRowId, getRowDescriptor } = props;\n const index = rowIndex !== null && rowIndex !== void 0 ? rowIndex : data.indexOf(item);\n const descriptor = getRowDescriptor === null || getRowDescriptor === void 0 ? void 0 : getRowDescriptor(item, index);\n if ((descriptor === null || descriptor === void 0 ? void 0 : descriptor.id) !== undefined) {\n return descriptor.id;\n }\n if (typeof getRowId === 'function') {\n return getRowId(item, index);\n }\n if (getRowId && getRowId in item) {\n return String(item[getRowId]);\n }\n return String(index);\n }\n static getHeadCellContent(column) {\n const { id, name } = column;\n let content;\n if (typeof name === 'function') {\n content = name();\n }\n else if (typeof name === 'string') {\n content = name;\n }\n else {\n content = id;\n }\n return content;\n }\n static getBodyCellContent(column, item, rowIndex) {\n const { id, template, placeholder } = column;\n let placeholderValue;\n if (typeof placeholder === 'function') {\n placeholderValue = placeholder(item, rowIndex);\n }\n else {\n placeholderValue = placeholder !== null && placeholder !== void 0 ? placeholder : DASH;\n }\n let value;\n if (typeof template === 'function') {\n value = template(item, rowIndex);\n }\n else if (typeof template === 'string') {\n value = _get(item, template);\n }\n else if (_has(item, id)) {\n value = _get(item, id);\n }\n if ([undefined, null, ''].includes(value) && placeholderValue) {\n return placeholderValue;\n }\n return value;\n }\n static getDerivedStateFromProps(props, state) {\n if (props.columns.length === state.columnHeaderRefs.length) {\n return null;\n }\n return {\n columnHeaderRefs: Array.from(props.columns, () => React.createRef()),\n };\n }\n componentDidMount() {\n if (this.props.stickyHorizontalScroll) {\n this.tableResizeObserver = new ResizeObserver((entries) => {\n var _a;\n const { contentRect } = entries[0];\n // Sync scrollbar width with table width\n (_a = this.horizontalScrollBarInnerRef.current) === null || _a === void 0 ? void 0 : _a.style.setProperty('width', `${contentRect.width}px`);\n });\n if (this.tableRef.current) {\n this.tableResizeObserver.observe(this.tableRef.current);\n }\n if (this.scrollContainerRef.current) {\n this.scrollContainerRef.current.addEventListener('scroll', this.handleScrollContainerScroll);\n this.scrollContainerRef.current.addEventListener('mouseenter', this.handleScrollContainerMouseenter);\n }\n if (this.horizontalScrollBarRef.current) {\n this.horizontalScrollBarRef.current.addEventListener('scroll', this.handleHorizontalScrollBarScroll);\n this.horizontalScrollBarRef.current.addEventListener('mouseenter', this.handleHorizontalScrollBarMouseenter);\n }\n }\n this.columnsResizeObserver = new ResizeObserver((entries) => {\n // fix ResizeObserver loop error\n window.requestAnimationFrame(() => {\n if (!Array.isArray(entries) || !entries.length) {\n return;\n }\n this.updateColumnStyles();\n });\n });\n if (this.tableRef.current) {\n this.columnsResizeObserver.observe(this.tableRef.current);\n }\n this.updateColumnStyles();\n }\n componentDidUpdate(prevProps) {\n if (this.props.columns !== prevProps.columns) {\n this.updateColumnStyles();\n }\n }\n componentWillUnmount() {\n if (this.props.stickyHorizontalScroll) {\n if (this.tableResizeObserver) {\n this.tableResizeObserver.disconnect();\n }\n if (this.scrollContainerRef.current) {\n this.scrollContainerRef.current.removeEventListener('scroll', this.handleScrollContainerScroll);\n this.scrollContainerRef.current.removeEventListener('mouseenter', this.handleScrollContainerMouseenter);\n }\n if (this.horizontalScrollBarRef.current) {\n this.horizontalScrollBarRef.current.removeEventListener('scroll', this.handleHorizontalScrollBarScroll);\n this.horizontalScrollBarRef.current.removeEventListener('mouseenter', this.handleHorizontalScrollBarMouseenter);\n }\n }\n if (this.columnsResizeObserver) {\n this.columnsResizeObserver.disconnect();\n }\n }\n render() {\n const { columns, stickyHorizontalScroll, className, qa } = this.props;\n const withPrimary = columns.some(({ primary }) => primary);\n return (_jsx(\"div\", { className: b({\n 'with-primary': withPrimary,\n 'with-sticky-scroll': stickyHorizontalScroll,\n }, className), \"data-qa\": qa, children: stickyHorizontalScroll ? (_jsxs(React.Fragment, { children: [_jsx(\"div\", { ref: this.scrollContainerRef, className: b('scroll-container'), children: this.renderTable() }), this.renderHorizontalScrollBar()] })) : (this.renderTable()) }));\n }\n renderHead() {\n const { columns, edgePadding, wordWrap } = this.props;\n const { columnsStyles } = this.state;\n return (_jsx(\"thead\", { className: b('head'), children: _jsx(\"tr\", { className: b('row'), children: columns.map((column, index) => {\n const { id, align: rawAlign, primary, sticky: rawSticky, className } = column;\n const align = normalizeSides(rawAlign, 'column.align');\n const sticky = normalizeSides(rawSticky, 'column.sticky');\n const content = Table.getHeadCellContent(column);\n return (_jsx(\"th\", { ref: this.state.columnHeaderRefs[index], style: columnsStyles[index], className: b('cell', {\n align,\n primary,\n sticky,\n ['edge-padding']: edgePadding,\n ['word-wrap']: wordWrap,\n }, className), children: content }, id));\n }) }) }));\n }\n renderBody() {\n const { data } = this.props;\n return (_jsx(\"tbody\", { className: b('body'), children: data.length > 0 ? data.map(this.renderRow) : this.renderEmptyRow() }));\n }\n renderTable() {\n const { width = 'auto' } = this.props;\n return (_jsxs(\"table\", { ref: this.tableRef, className: b('table', { width }), children: [this.renderHead(), this.renderBody()] }));\n }\n renderEmptyRow() {\n const { columns, emptyMessage } = this.props;\n return (_jsx(\"tr\", { className: b('row', { empty: true }), children: _jsx(\"td\", { className: b('cell'), colSpan: columns.length, children: emptyMessage ? emptyMessage : i18n('label_empty') }) }));\n }\n renderHorizontalScrollBar() {\n const { stickyHorizontalScroll, stickyHorizontalScrollBreakpoint = 0 } = this.props;\n return (_jsx(\"div\", { ref: this.horizontalScrollBarRef, className: b('horizontal-scroll-bar', {\n 'sticky-horizontal-scroll': stickyHorizontalScroll,\n }), style: { bottom: `${stickyHorizontalScrollBreakpoint}px` }, \"data-qa\": \"sticky-horizontal-scroll-breakpoint-qa\", children: _jsx(\"div\", { ref: this.horizontalScrollBarInnerRef, className: b('horizontal-scroll-bar-inner') }) }));\n }\n updateColumnStyles() {\n this.setState((prevState) => {\n const columnsWidth = prevState.columnHeaderRefs.map((ref) => ref.current === null ? undefined : ref.current.getBoundingClientRect().width);\n const columnsStyles = this.props.columns.map((_, index) => this.getColumnStyles(index, columnsWidth));\n return { columnsStyles };\n });\n }\n getColumnStyles(index, columnsWidth) {\n const { columns } = this.props;\n const column = columns[index];\n const style = {};\n if (typeof column.width === 'string') {\n return { maxWidth: 0, width: column.width };\n }\n if (typeof column.width !== 'undefined') {\n style.width = column.width;\n }\n if (!column.sticky) {\n return style;\n }\n const filteredColumns = column.sticky === 'left' || column.sticky === 'start'\n ? columnsWidth.slice(0, index)\n : columnsWidth.slice(index + 1);\n const styleName = column.sticky === 'left' || column.sticky === 'start'\n ? 'insetInlineStart'\n : 'insetInlineEnd';\n style[styleName] = filteredColumns.reduce((start, width) => {\n return _isNumber(width) ? start + width : start;\n }, 0);\n return style;\n }\n}\nTable.defaultProps = {\n edgePadding: true,\n};\n","import React, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\n\nconst toaster = new Toaster();\n\ninterface LoadDataHandlerProps {\n alwaysShowError?: boolean;\n loaded?: boolean;\n error?: boolean;\n errorData?: YTError;\n children: React.ReactNode;\n}\n\nexport default class LoadDataHandler extends Component<LoadDataHandlerProps> {\n componentDidUpdate() {\n const {error, loaded, errorData} = this.props;\n\n if (error && loaded) {\n toaster.add({\n theme: 'danger',\n name: 'network',\n autoHiding: 500000,\n title: 'Oops! something went wrong.',\n content: errorData ? (errorData as YTError).message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(errorData as YTError),\n },\n ],\n });\n }\n }\n\n render() {\n const {alwaysShowError = false, error, errorData, loaded, children} = this.props;\n\n const initialLoading = !loaded;\n\n if (error && (alwaysShowError || initialLoading)) {\n return <YTErrorBlock error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport withSplit from '../hocs/withSplit';\nimport {mergeScreen, splitScreen} from '../store/actions/global';\n\ntype SidePanelContentProps = {\n onClose: () => void;\n renderContent(props: {visible: boolean; onClose: () => void}): React.ReactNode;\n};\n\nexport const SidePanelPortal = withSplit(SideContent);\n\nexport function useSidePanel(\n name: string,\n {renderContent}: Pick<SidePanelContentProps, 'renderContent'>,\n) {\n const [widgetOpened, setWidgetOpened] = React.useState(false);\n const dispatch = useDispatch();\n\n const openWidget = React.useCallback(() => {\n dispatch(splitScreen(name));\n setWidgetOpened(true);\n }, [setWidgetOpened, dispatch, name]);\n\n const onClose = React.useCallback(() => {\n setWidgetOpened(false);\n dispatch(mergeScreen());\n }, [setWidgetOpened, dispatch]);\n\n return {\n closeWidget: onClose,\n openWidget,\n widgetOpened,\n widgetContent: widgetOpened ? (\n <SidePanelPortal>{renderContent({onClose, visible: widgetOpened})}</SidePanelPortal>\n ) : null,\n };\n}\n\nfunction SideContent({children}: {children: React.ReactNode}) {\n return children;\n}\n","import forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\nimport sortBy_ from 'lodash/sortBy';\n\nimport ypath from '../../../../common/thor/ypath';\n\nfunction prepareGraphData(operation) {\n if (hasProgressTasks(operation)) {\n return prepareGraphDataByTasks(operation);\n }\n\n const dataFlowGraph = ypath.getValue(operation, '/@progress/data_flow_graph');\n const jobTypeOrder = ypath.getValue(dataFlowGraph, '/topological_ordering');\n const statistics = ypath.getValue(dataFlowGraph, '/edges');\n\n const data = [];\n\n if (dataFlowGraph) {\n forEach_(jobTypeOrder, (fromJobType) => {\n forEach_(statistics[fromJobType], (value, toJobType) => {\n data.push({\n from: fromJobType,\n to: toJobType,\n value: value.statistics,\n });\n });\n });\n }\n\n return data;\n}\n\nfunction prepareGraphDataByTasks(operation) {\n const dataFlow = ypath.getValue(operation, '/@progress/data_flow');\n const tasks = ypath.getValue(operation, '/@progress/tasks');\n\n const res = reduce_(\n dataFlow,\n (acc, item) => {\n const {\n source_name: from,\n target_name: to,\n job_data_statistics,\n teleport_data_statistics,\n } = item;\n acc.push({\n from,\n to,\n info: item,\n value: keys_(job_data_statistics).reduce((acc, key) => {\n const jobStat = ypath.getValue(job_data_statistics[key]);\n const teleportStat = ypath.getValue(teleport_data_statistics[key]);\n acc[key] = jobStat + teleportStat;\n return acc;\n }, {}),\n job_data_statistics: isEmptyStatistics(job_data_statistics)\n ? null\n : job_data_statistics,\n teleport_data_statistics: isEmptyStatistics(teleport_data_statistics)\n ? null\n : teleport_data_statistics,\n });\n return acc;\n },\n [],\n );\n\n const tasksIndexMap = reduce_(\n tasks,\n (acc, {task_name}, index) => {\n acc[task_name] = index;\n return acc;\n },\n {},\n );\n\n return sortBy_(res, ({from}) => {\n if (from === 'input') {\n return -1;\n }\n return tasksIndexMap[from];\n });\n}\n\nfunction isEmptyStatistics(stats) {\n return !some_(stats, (value) => {\n return Boolean(ypath.getValue(value));\n });\n}\n\nexport function prepareCompletedUsage(operation) {\n const progress = ypath.getValue(operation, '/@progress');\n\n if (progress) {\n let statistics = [];\n\n const estimatedInputStatistics = ypath.getValue(\n operation,\n '/@progress/estimated_input_statistics',\n );\n\n if (estimatedInputStatistics) {\n statistics.push({\n name: 'Estimated input',\n value: estimatedInputStatistics,\n });\n }\n\n statistics = statistics.concat(prepareGraphData(operation));\n\n return statistics;\n }\n}\n\nexport function prepareIntermediateUsage(operation, intermediate) {\n return map_(intermediate, (resources, account) => ({\n ...resources,\n account,\n }));\n}\n\nexport function hasProgressTasks(operation) {\n return ypath.getValue(operation, '/@progress/tasks');\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\n\nimport ypath from '../../../../../common/thor/ypath';\nimport UIFactory from '../../../../../UIFactory';\nimport type {\n DetailedOperationSelector,\n OperationPreviewType,\n} from '../../../../../pages/operations/selectors';\nimport {genNavigationUrl} from '../../../../../utils/navigation/navigation';\n\nconst TASKS_PREFIX = 'tasks/';\n\nfunction prepareFile(file: unknown) {\n return {\n path: ypath.getValue(file),\n originalPath: ypath.getValue(file, '/@original_path'),\n name: ypath.getValue(file, '/@file_name'),\n executable: ypath.getBoolean(file, '/@executable'),\n };\n}\n\nfunction prepareMeta(meta: Record<string, unknown>) {\n const prepared = map_(meta, (value, name) => ({name, value}));\n\n return sortBy_(prepared, 'name');\n}\n\nfunction prepareStartedBy(operation: DetailedOperationSelector) {\n const startedBy = ypath.getValue(operation, '/@spec/started_by');\n const command = ypath.getValue(startedBy, '/command') || [];\n\n const fields = filter_(prepareMeta(startedBy), (option) => option.name !== 'command');\n\n if (fields.length || command.length) {\n return {\n fields: fields,\n command: command,\n };\n }\n\n return undefined;\n}\n\nfunction prepareRemote(operation: DetailedOperationSelector) {\n if (operation.type === 'remote_copy') {\n return {\n cluster: ypath.getValue(operation, '/@spec/cluster_name'),\n network: ypath.getValue(operation, '/@spec/network_name'),\n };\n }\n return undefined;\n}\n\nfunction prepareTransferTask(operation: DetailedOperationSelector) {\n const task = ypath.getValue(operation, '/@spec/transfer_manager');\n\n if (task) {\n return {\n id: task.task_id,\n url: UIFactory.makeUrlForTransferTask(operation),\n };\n }\n return undefined;\n}\n\nfunction prepareTransaction(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n table: unknown,\n userTransactionAlive: boolean,\n) {\n const tableTransaction = ypath.get(table, '/@transaction_id');\n\n if (tableTransaction) {\n return tableTransaction;\n } else if (operation.state === 'running') {\n return ypath.get(\n operation,\n `/@${type === 'stderr' ? 'debug_output' : type}_transaction_id`,\n );\n } else if (userTransactionAlive) {\n return ypath.get(operation, '/@user_transaction_id');\n }\n return undefined;\n}\n\nfunction prepareLivePreview(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n index?: number | string,\n): {path?: string; supported: boolean; transaction?: string} {\n if (operation.isRunning()) {\n const {path, virtualPath} = operation.getLivePreviewPath(type, index);\n\n if (virtualPath) {\n return {path: virtualPath, supported: true};\n } else if (path) {\n const transaction = ypath.getValue(operation, '/@async_scheduler_transaction_id');\n return {path, transaction, supported: true};\n }\n }\n\n return {supported: false};\n}\n\ntype RangeType = {upper_limit?: number; lower_limit?: number};\n\nfunction normalizeTableRanges(table: unknown) {\n let ranges: Array<RangeType> = ypath.getValue(table, '/@ranges');\n\n if (typeof ranges === 'undefined') {\n // Fallback attempt to get ranges from attributes\n // Exact range is only supported in updated ypath\n const upperLimit = ypath.getValue(table, '/@upper_limit');\n const lowerLimit = ypath.getValue(table, '/@lower_limit');\n\n let range: RangeType | undefined;\n\n if (typeof upperLimit !== 'undefined') {\n range = range || {};\n range['upper_limit'] = upperLimit;\n }\n\n if (typeof lowerLimit !== 'undefined') {\n range = range || {};\n range['lower_limit'] = lowerLimit;\n }\n\n if (range) {\n ranges = [range];\n }\n\n if (range) {\n ranges = [range];\n }\n }\n\n return ranges;\n}\n\nfunction prepareTableFilters(table: unknown) {\n const ranges = normalizeTableRanges(table);\n const columns = ypath.getValue(table, '/@columns');\n let filters: {ranges?: typeof ranges; columns?: typeof columns} | undefined;\n\n if (ranges) {\n filters = filters || {};\n filters.ranges = ranges;\n }\n\n if (columns) {\n filters = filters || {};\n filters.columns = columns;\n }\n\n return filters;\n}\n\nfunction prepareTable(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n table: unknown,\n typedTable: unknown,\n userTransactionAlive: boolean,\n index?: number | string,\n) {\n const path: string = ypath.getValue(table);\n const cluster: string | undefined = ypath.getValue(table, '/@cluster');\n const originalPath = ypath.getValue(table, '/@original_path');\n const transaction = prepareTransaction(operation, type, table, userTransactionAlive);\n\n return {\n path,\n ...(cluster ? {cluster} : {}),\n originalPath,\n transaction,\n livePreview: prepareLivePreview(operation, type, index),\n append: ypath.getBoolean(table, '/@append'),\n teleport: ypath.getBoolean(table, '/@teleport'),\n primary: ypath.getBoolean(table, '/@primary'),\n foreign: ypath.getBoolean(table, '/@foreign'),\n filters: prepareTableFilters(table),\n typedFilters: prepareTableFilters(typedTable),\n };\n}\n\nfunction groupTables<T extends {path: string; transaction?: string; cluster?: string}>(\n tables: Array<T>,\n) {\n const group: Array<{\n path: string;\n name?: string;\n isFolder?: boolean;\n transaction?: string;\n cluster?: string;\n }> = [];\n let currentGroup: string;\n\n forEach_(tables, (table) => {\n try {\n const {cluster} = table;\n const path = ypath.YPath.create(table.path, 'absolute');\n const name = path.getKey();\n const folder = path.toSubpath(-2).stringify();\n const groupKey: string = cluster ? `${cluster}:${folder}` : folder;\n\n if (currentGroup !== groupKey) {\n currentGroup = groupKey;\n group.push({\n path: folder,\n transaction: table.transaction,\n isFolder: true,\n ...(cluster ? {cluster} : {}),\n });\n }\n\n group.push(Object.assign(table, {name: name}));\n } catch (err) {\n console.error('groupTables error', err);\n }\n });\n\n return group;\n}\n\nfunction prepareRemoteInput<T extends {path: string; transaction?: string}>(\n input: Array<T>,\n cluster: string,\n) {\n if (cluster) {\n return map_(input, (item) => ({\n ...item,\n remote: true,\n url: genNavigationUrl({cluster, ...item}),\n }));\n }\n\n return input;\n}\n\nexport function remoteInputUrl(cluster: string, path: string, transaction?: string) {\n return '/' + cluster + '/navigation?path=' + path + (transaction ? '&t=' + transaction : '');\n}\n\nfunction prepareInput(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'input';\n let tables;\n\n switch (operation.type) {\n case 'remote_copy':\n case 'merge':\n case 'map':\n case 'reduce':\n case 'map_reduce':\n case 'sort':\n case 'join_reduce': {\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n tables = ypath.get(operation, '/@spec/input_table_paths');\n tables = map_(tables, (table, index) =>\n prepareTable(operation, TYPE, table, typedTables[index], userTransactionAlive),\n );\n break;\n }\n case 'erase': {\n const typedTable = ypath.get(operation.$typedAttributes, '/spec/input_table_path');\n\n tables = ypath.get(operation, '/@spec/table_path');\n tables = tables && [\n prepareTable(operation, TYPE, tables, typedTable, userTransactionAlive),\n ];\n break;\n }\n }\n\n return groupTables(tables);\n}\n\nfunction prepareStderr(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'stderr';\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n let tables = ypath.get(operation, '/@spec/stderr_table_path');\n tables = tables && [prepareTable(operation, TYPE, tables, typedTables, userTransactionAlive)];\n\n return groupTables(tables);\n}\n\nfunction prepareCoredumps(operation: DetailedOperationSelector) {\n const coreTable = ypath.get(operation.$typedAttributes, '/spec/core_table_path');\n\n const tables = coreTable ? [prepareTable(operation, 'core', coreTable, [], false)] : [];\n return groupTables(tables);\n}\n\nfunction prepareOutput(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'output';\n let tables;\n\n switch (operation.type) {\n case 'map':\n case 'reduce':\n case 'map_reduce':\n case 'join_reduce': {\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n tables = ypath.get(operation, '/@spec/output_table_paths');\n tables = map_(tables, (table, index) =>\n prepareTable(\n operation,\n TYPE,\n table,\n typedTables[index],\n userTransactionAlive,\n index,\n ),\n );\n break;\n }\n case 'merge': // These operations do not have output livePreview\n case 'sort':\n case 'remote_copy': {\n const typedTable = ypath.get(operation.$typedAttributes, '/spec/input_table_path');\n\n tables = ypath.get(operation, '/@spec/output_table_path');\n tables = tables && [\n prepareTable(operation, TYPE, tables, typedTable, userTransactionAlive),\n ];\n break;\n }\n }\n\n return groupTables(tables);\n}\n\nfunction prepareIntermediate(operation: DetailedOperationSelector) {\n let livePreview;\n\n switch (operation.type) {\n case 'map_reduce':\n case 'sort':\n livePreview = prepareLivePreview(operation, 'intermediate');\n break;\n }\n\n if (livePreview && livePreview.supported) {\n return livePreview;\n }\n\n return undefined;\n}\n\nfunction prepareScriptCaption(type: string) {\n return type.indexOf(TASKS_PREFIX) === 0 ? type.substring(TASKS_PREFIX.length) + '_task' : type;\n}\n\nfunction prepareScript(operation: DetailedOperationSelector, type: string) {\n try {\n const script = ypath.getValue(operation, '/@spec/' + type);\n\n let environment = ypath.getValue(script, '/environment');\n environment = prepareMeta(environment);\n\n const command = ypath.getValue(script, '/command');\n const className = ypath.getValue(script, '/class_name');\n const jobCount = ypath.getValue(script, '/job_count');\n const files = map_(ypath.getValue(script, '/file_paths'), prepareFile);\n const layerPaths = ypath.getValue(script, '/layer_paths');\n\n if (command || className || jobCount || files?.length || environment?.length) {\n return {\n type: type,\n caption: prepareScriptCaption(type),\n command,\n className,\n jobCount,\n files,\n environment,\n layerPaths,\n };\n }\n } catch (err) {\n console.error('prepareScript error:', err);\n }\n\n return undefined;\n}\n\nfunction prepareTasks(operation: DetailedOperationSelector) {\n const tasks = ypath.getValue(operation, '/@spec/tasks');\n\n if (tasks) {\n return map_(keys_(tasks), (taskName) => prepareScript(operation, TASKS_PREFIX + taskName));\n }\n\n return undefined;\n}\n\nexport function prepareSpecification(\n operation: DetailedOperationSelector,\n userTransactionAlive: boolean,\n) {\n const remote = prepareRemote(operation);\n\n const specification = {\n startedBy: prepareStartedBy(operation),\n\n // Remote copy\n remote,\n transferTask: prepareTransferTask(operation),\n // Merge\n mode: ypath.getValue(operation, '/@spec/mode'),\n\n // Input/Intermediate/Output/Stderr\n input: prepareRemoteInput(prepareInput(operation, userTransactionAlive), remote?.cluster),\n output: prepareOutput(operation, userTransactionAlive),\n stderr: prepareStderr(operation, userTransactionAlive),\n intermediate: prepareIntermediate(operation),\n coredumps: prepareCoredumps(operation),\n\n // Scripts\n mapper: prepareScript(operation, 'mapper'),\n reducer: prepareScript(operation, 'reducer'),\n reduceCombiner: prepareScript(operation, 'reduce_combiner'),\n\n tasks: prepareTasks(operation),\n };\n\n return specification;\n}\n\nexport function prepareVisibleItems<T extends {isFolder?: boolean}>(items: Array<T>) {\n return filter_(items, (item) => !item.isFolder);\n}\n\nexport function filterVisibleItems<T extends {isFolder?: boolean}>(\n items: Array<T>,\n itemsCount: number,\n) {\n const result = [];\n let count = 0;\n\n for (const item of items) {\n if (!item.isFolder) {\n count++;\n }\n if (count === itemsCount + 1) {\n break;\n }\n\n result.push(item);\n }\n\n return result;\n}\n","import map_ from 'lodash/map';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\n\nexport function formatShare(value) {\n return hammer.format['SmallNumber'](value, {significantDigits: 4});\n}\n\nexport function prepareRuntime(operation) {\n const progress = ypath.getValue(operation, '/@progress');\n\n if (progress && operation.isRunning()) {\n let trees = ypath.getValue(progress, '/scheduling_info_per_pool_tree');\n\n trees =\n trees &&\n map_(trees, (treeFairShareInfo, treeName) => ({\n progress: treeFairShareInfo,\n name: treeName,\n }));\n\n return trees;\n }\n}\n","import {docsUrl} from '../../../../config';\n\nimport map_ from 'lodash/map';\n\nimport UIFactory from '../../../../UIFactory';\n\nexport function prepareFaqUrl(type: string) {\n return docsUrl(UIFactory.docsUrls['faq'] + '#' + type.replace(/_/g, ''));\n}\n\nexport function prepareAlerts(alerts?: Record<string, unknown>) {\n if (alerts) {\n return map_(alerts, (error, type) => ({\n error: error,\n helpURL: prepareFaqUrl(type),\n }));\n }\n\n return undefined;\n}\n","import map_ from 'lodash/map';\n\nimport moment from 'moment';\n\nimport ypath from '../../common/thor/ypath';\nimport hammer from '../../common/hammer';\nimport {createSelector} from 'reselect';\nimport {remoteInputUrl} from '../../utils/operations/tabs/details/specification/specification';\nimport {FIX_MY_TYPE} from '../../types';\nimport {RootState} from '../../store/reducers';\nimport {JobsState} from '../../store/reducers/operations/jobs/jobs';\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 map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport {RootState} from '../../../store/reducers';\nimport ypath from '../../../common/thor/ypath';\nimport {AlertInfo} from '../../../components/AlertEvents/AlertEvents';\nimport {calculateLoadingStatus} from '../../../utils/utils';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {prepareFaqUrl} from '../../../utils/operations/tabs/details/alerts';\nimport {getClusterUiConfig} from '../global';\nimport {formatByParams} from '../../../utils/format';\n\nconst getOperationErasedTreesRaw = (state: RootState) => {\n return ypath.getValue(state.operations.detail, '/operation/@runtime_parameters/erased_trees');\n};\n\nexport const getOperationErasedTrees = createSelector(\n [getOperationErasedTreesRaw],\n (rawTrees: Array<unknown>) => {\n return reduce_(\n rawTrees,\n (acc, item) => {\n const poolTree = ypath.getValue(item);\n acc[poolTree] = true;\n return acc;\n },\n {} as {[poolTree: string]: boolean},\n );\n },\n);\n\ninterface OperationTask {\n task_name: string;\n}\n\nconst getOperationAlertEventsImpl = (state: RootState) =>\n state.operations.detail.details.alert_events;\n\nexport const getOperationAlertEvents = createSelector([getOperationAlertEventsImpl], (items) => {\n const appeared: Record<string, AlertInfo> = {};\n return reduce_(\n items,\n (acc, item) => {\n const type = ypath.getValue(item.alert_type);\n const code = ypath.getNumberDeprecated(item, '/error/code', NaN);\n if (!code && appeared[type]) {\n const last = appeared[type];\n last.to = ypath.getValue(item.time);\n delete appeared[type];\n } else if (code) {\n acc.push({\n from: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n appeared[type] = acc[acc.length - 1];\n } else {\n acc.push({\n to: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n }\n return acc;\n },\n [] as Array<AlertInfo>,\n );\n});\n\nexport const getOperation = (state: RootState) => state.operations.detail.operation;\nexport const getOperationId = (state: RootState) =>\n ypath.getValue(state.operations.detail.operation);\nexport const getOperationTasks = createSelector(\n [getOperation],\n (operation): Array<OperationTask> | undefined => {\n return ypath.getValue(operation, '/@progress/tasks');\n },\n);\nexport const getOperationTasksNames = createSelector(\n [getOperationTasks],\n (tasks?: Array<{task_name: string}>) => {\n return map_(tasks, 'task_name').sort();\n },\n);\n\nexport const getOperationTreeConfigs = (state: RootState) => state.operations.detail.treeConfigs;\n\nexport const getOperationDetailsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const getOperationTypedAttributes = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).$typedAttributes;\n\nexport const getOperationMonitorChartStates = (state: RootState) =>\n state.operations.detail.monitorChartStates;\n\nexport const getOperationPools = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).pools;\n\nexport const getOperationPoolNames = createSelector([getOperationPools], (pools): Array<string> => {\n return map_(pools, 'pool');\n});\n\nexport const getOperationsMonitorChartStatesFinishedCount = createSelector(\n [getOperationMonitorChartStates],\n (states) => {\n return reduce_(\n states,\n (acc, value) => {\n return value ? acc + 1 : acc;\n },\n 0,\n );\n },\n);\n\nexport const getOperationJobsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport interface OperationExperimentItem {\n experiment: string;\n group: string;\n ticket: string;\n dimension: string;\n effect: unknown;\n}\n\nexport const getOperationExperimentAssignments = createSelector(\n [getOperation],\n (operation): Array<OperationExperimentItem> => {\n return ypath.getValue(operation, '/@experiment_assignments');\n },\n);\n\nconst getOperationMonitoredJobCount = createSelector([getOperation], (operation) => {\n const res = ypath.getNumberDeprecated(\n operation,\n '/@brief_progress/registered_monitoring_descriptor_count',\n );\n return res;\n});\n\nexport const getOperationJobsMonitorTabSettings = createSelector(\n [getOperationMonitoredJobCount],\n (jobsCount) => {\n const maxJobCount = 200;\n return {visible: jobsCount > 0 && jobsCount <= maxJobCount, maxJobCount};\n },\n);\n\nexport const selectIsOperationInGpuTree = createSelector(\n [getOperationTreeConfigs],\n (treeConfigs) => {\n return treeConfigs?.every((item) => item.config.main_resource === 'gpu');\n },\n);\n\nexport const getOperationPerformanceUrlTemplate = createSelector(\n [getOperationId, getClusterUiConfig],\n (operationId, uiConfig) => {\n const operationPerformanceUrlTemplate = uiConfig?.operation_performance_url_template;\n\n if (!operationPerformanceUrlTemplate) return undefined;\n\n return {\n url: formatByParams(operationPerformanceUrlTemplate.url_template, {\n operation_id: operationId,\n }),\n title: operationPerformanceUrlTemplate.title,\n };\n },\n);\n","import {JOBS_MONITOR} from '../../../constants/operations/detail';\nimport {ThunkAction} from 'redux-thunk';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {JobsMonitorAction} from '../../../store/reducers/operations/jobs/jobs-monitor';\nimport {getOperationJobsMonitorTabSettings} from '../../../store/selectors/operations/operation';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\n\ntype JobsMonitorThunkAction = ThunkAction<unknown, RootState, unknown, JobsMonitorAction>;\n\nconst cancelHerlper = new CancelHelper();\n\nexport function getJobsMonitoringDescriptors(operation_id: string): JobsMonitorThunkAction {\n return (dispatch, getState) => {\n const {visible, maxJobCount} = getOperationJobsMonitorTabSettings(getState());\n if (!visible) {\n return undefined;\n }\n\n dispatch({type: JOBS_MONITOR.REQUEST});\n\n return ytApiV3Id\n .listJobs(YTApiId.listJobs100, {\n parameters: {operation_id, limit: maxJobCount, with_monitoring_descriptor: true},\n cancellation: cancelHerlper.removeAllAndSave,\n })\n .then(({jobs}) => {\n dispatch({type: JOBS_MONITOR.SUCCESS, data: {jobs, operation_id}});\n })\n .catch((error) => {\n if (isCancelled(error)) {\n dispatch({type: JOBS_MONITOR.CANCELLED});\n return;\n }\n\n dispatch({type: JOBS_MONITOR.FAILURE, data: {error}});\n });\n };\n}\n","import type {ThunkAction} from 'redux-thunk';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport {forEachYTError} from '../../../utils/errors';\nimport {\n prepareCompletedUsage,\n prepareIntermediateUsage,\n} from '../../../utils/operations/tabs/details/data-flow';\nimport {prepareSpecification} from '../../../utils/operations/tabs/details/specification/specification';\nimport {prepareOperationEvents} from '../../../utils/operations/tabs/details/events/events';\nimport {prepareRuntime} from '../../../utils/operations/tabs/details/runtime';\nimport {prepareAlerts} from '../../../utils/operations/tabs/details/alerts';\nimport {prepareError} from '../../../utils/operations/tabs/details/error';\n\nimport {\n GET_OPERATION,\n LOAD_RESOURCE_USAGE,\n OPERATION_DETAIL_PARTIAL,\n} from '../../../constants/operations/detail';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\nimport {DetailedOperationSelector} from '../../../pages/operations/selectors';\nimport {checkUserTransaction, prepareActions} from '../../../utils/operations/detail';\nimport {prepareAttributes} from '../../../utils';\nimport {showErrorPopup, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {isOperationId} from '../../../utils/operations/list';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {YTErrors} from '../../../rum/constants';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getJobsMonitoringDescriptors} from '../../../store/actions/operations/jobs-monitor';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport type {RootState} from './../../../store/reducers';\nimport type {OperationDetailActionType} from '../../reducers/operations/detail';\nimport {JSONSerializer} from '../../../common/yt-api';\n\nconst toaster = new Toaster();\nconst operationDetailsRequests = new CancelHelper();\n\nfunction loadIntermediateResourceUsage(\n operation: unknown,\n callback: () => void,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return async (dispatch) => {\n const outputTransaction = ypath.get(operation, '/@output_transaction_id');\n\n if (outputTransaction && outputTransaction !== '0-0-0-0') {\n dispatch({type: LOAD_RESOURCE_USAGE.REQUEST});\n\n return ytApiV3Id\n .get(YTApiId.operationIntermediateResourceUsage, {\n path: '#' + outputTransaction + '/@resource_usage',\n })\n .then((resources) => {\n callback();\n\n const intermediateResources = prepareIntermediateUsage(operation, resources);\n\n dispatch({\n type: LOAD_RESOURCE_USAGE.SUCCESS,\n data: {resources, intermediateResources},\n });\n })\n .catch(() => {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.FAILURE});\n });\n } else {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.CANCELLED});\n }\n };\n}\n\nexport function getOperation(\n id: string,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return (dispatch, getState) => {\n const isAlias = !isOperationId(id);\n\n const params = Object.assign(\n {\n include_scheduler: true,\n output_format: TYPED_OUTPUT_FORMAT,\n },\n isAlias ? {operation_alias: id} : {operation_id: id},\n );\n\n dispatch({type: GET_OPERATION.REQUEST, data: {isAlias, id}});\n\n return ytApiV3\n .getOperation({parameters: params, setup: {JSONSerializer}}, operationDetailsRequests)\n .then(checkUserTransaction)\n .then(([operationAttributes, userTransactionAlive]) => {\n const preparedAttributes = prepareAttributes(operationAttributes);\n const operation = new DetailedOperationSelector(\n preparedAttributes,\n operationAttributes,\n );\n\n const dispatchOperationSuccess = () => {\n const actions = prepareActions(operation);\n\n const specification = prepareSpecification(operation, userTransactionAlive);\n const alerts = prepareAlerts(ypath.getValue(operation, '/@alerts'));\n const alert_events = ypath.getValue(operation, '/@alert_events');\n const error = prepareError(operation);\n const runtime = prepareRuntime(operation);\n const events = prepareOperationEvents(operation);\n const resources = prepareCompletedUsage(operation);\n\n if (error?.error) {\n forEachYTError([error.error], (item) => {\n const attributes = ypath.getValue(item, '/attributes');\n const job_id = ypath.getValue(attributes, '/job_id');\n\n const dst = attributes.$value ?? attributes;\n if ('string' === typeof job_id) {\n const cluster = getCluster(getState());\n Object.assign(dst, {\n job_id: {\n $attributes: {\n _type_tag: 'url',\n },\n $value: {\n href: `${window.location.origin}/${cluster}/job/${id}/${job_id}`,\n text: job_id,\n },\n },\n });\n }\n });\n }\n\n const details = {\n specification,\n alerts,\n alert_events,\n error,\n runtime,\n events,\n resources,\n };\n\n dispatch({\n type: GET_OPERATION.SUCCESS,\n data: {operation, actions, details},\n });\n\n dispatch(getJobsMonitoringDescriptors(id));\n dispatch(loadOperationPoolTreeConfigs(operation));\n };\n\n if (operation.inIntermediateState()) {\n dispatch(loadIntermediateResourceUsage(operation, dispatchOperationSuccess));\n } else {\n dispatchOperationSuccess();\n }\n })\n .catch((error) => {\n const {operations} = getState();\n const isFirstLoading = !operations.detail.loaded;\n\n if (error.code !== YTErrors.CANCELLED) {\n if (!isFirstLoading) {\n toaster.add({\n name: 'get operation',\n autoHiding: false,\n theme: 'danger',\n title: 'Failed to load operation',\n content: error.message,\n actions: [{label: ' view', onClick: () => showErrorPopup(error)}],\n });\n }\n\n dispatch({\n type: GET_OPERATION.FAILURE,\n data: {\n message: `Error occured when loading operation \"${id}\"`,\n details: error,\n },\n });\n }\n });\n };\n}\n\nexport function loadOperationPoolTreeConfigs({\n pools,\n}: DetailedOperationSelector): ThunkAction<\n Promise<void>,\n RootState,\n unknown,\n OperationDetailActionType\n> {\n return async (dispatch) => {\n const treeNames = pools?.map((i) => i.tree);\n\n const resources = await ytApiV3Id.executeBatch(YTApiId.operationTreeConfigs, {\n requests: treeNames.map((item) => ({\n command: 'get',\n parameters: {\n path: `//sys/pool_trees/${item}/@config/main_resource`,\n ...USE_CACHE,\n },\n })),\n });\n\n const limits = await wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.operationTreeConfigs, {\n requests: treeNames.map((item) => ({\n command: 'get',\n parameters: {\n path: `//sys/scheduler/orchid/scheduler/pool_trees/${item}/pools/<Root>/resource_limits`,\n ...USE_CACHE,\n },\n })),\n }),\n {\n toasterName: 'operationTreeConfigs',\n skipSuccessToast: true,\n batchType: 'v3' as const,\n errorTitle: 'Failed to load tree limits',\n },\n );\n\n const configs = await wrapApiPromiseByToaster(\n ytApiV3Id.executeBatch(YTApiId.operationTreeConfigs, {\n requests: treeNames.map((item) => ({\n command: 'get',\n parameters: {path: `//sys/pool_trees/${item}/@config`, ...USE_CACHE},\n })),\n }),\n {\n toasterName: 'operationTreeConfigs',\n skipSuccessToast: true,\n batchType: 'v3' as const,\n errorTitle: 'Failed to load tree configs',\n },\n );\n\n dispatch({\n type: OPERATION_DETAIL_PARTIAL,\n data: {\n treeConfigs: configs.map((item, index) => {\n return {\n tree: treeNames[index],\n config: {\n ...item.output,\n resource_limits: limits[index].output,\n main_resource: resources[index].output || 'cpu',\n },\n };\n }),\n },\n });\n };\n}\n","import ypath from '../../../../common/thor/ypath';\n\nexport function prepareError(operation) {\n if (operation.state === 'aborted' || operation.state === 'failed') {\n return ypath.getValue(operation, '/@result');\n }\n}\n","import {createSelector} from 'reselect';\nimport {\n getAllPoolNames,\n getAllPoolTreeNames,\n getAllUserNames,\n getCluster,\n getClusterConfigByName,\n getCurrentUserName,\n} from '../../../store/selectors/global';\n\nimport concat_ from 'lodash/concat';\nimport filter_ from 'lodash/filter';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport some_ from 'lodash/some';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {RootState} from '../../reducers';\nimport {OperationsListFilterValue} from '../../reducers/operations/list/list';\n\nexport const getOperationsListFilters = (state: RootState) => state.operations.list.filters;\nexport const getOperationsPoolFilterData = (state: RootState) =>\n getOperationsListFilters(state)['pool'];\nexport const getOperationsUserFilterData = (state: RootState) =>\n getOperationsListFilters(state)['user'];\nexport const getOperationsPoolTreeRawCounters = (state: RootState) =>\n state.operations.list.filters.poolTree.counters?.pool_tree_counts || {};\nexport const getOperationsPoolRawCounters = (state: RootState) =>\n getOperationsPoolFilterData(state).counters?.pool_counts || {};\nexport const getOperationsUserRawCounter = (state: RootState) =>\n getOperationsUserFilterData(state).counters?.user_counts || {};\n\nexport const getOperationsPoolTreeCountersItems = createSelector(\n [getOperationsPoolTreeRawCounters],\n convertCountersToItems,\n);\n\nexport const getOperationsPoolTreeItemsWithoutCounter = createSelector(\n [getAllPoolTreeNames, getOperationsPoolTreeRawCounters],\n (f, s) => {\n return calculateItemsWithoutCounter(f, s);\n },\n);\n\nexport const getOperationsPoolTreeSuggestions = createSelector(\n [getOperationsPoolTreeCountersItems, getOperationsPoolTreeItemsWithoutCounter],\n concat_,\n);\n\nexport const getOperationsPoolCountersItems = createSelector(\n [getOperationsPoolRawCounters],\n convertCountersToItems,\n);\n\nexport const getOperationsPoolItemsWithoutCounter = createSelector(\n [getAllPoolNames, getOperationsPoolRawCounters],\n calculateItemsWithoutCounter,\n);\n\nexport const getOperationsPoolSuggestions = createSelector(\n [getOperationsPoolCountersItems, getOperationsPoolItemsWithoutCounter],\n concat_,\n);\n\nexport const getOperationsUserCountersItems = createSelector(\n [getOperationsUserRawCounter],\n convertCountersToItems,\n);\n\nexport const getOperationsUserItemsWithoutCounter = createSelector(\n [getAllUserNames, getOperationsUserRawCounter],\n calculateItemsWithoutCounter,\n);\n\nexport const getOperationsUserSuggestions = createSelector(\n [getOperationsUserCountersItems, getOperationsUserItemsWithoutCounter],\n concat_,\n);\n\nfunction convertCountersToItems(counters: Record<string, number>) {\n return sortBy_(\n map_(counters, (count, pool) => ({\n value: pool,\n text: pool,\n counter: count,\n })),\n 'text',\n );\n}\n\nfunction calculateItemsWithoutCounter(\n allNames: Array<string>,\n countersMap: Record<string, number>,\n) {\n return sortBy_(\n map_(\n filter_(allNames, (name) => countersMap[name] === undefined),\n (name) => ({value: name, text: name}),\n ),\n 'text',\n );\n}\n\nexport const ATTRIBUTE_ITEMS = [\n {\n value: 'withStderr' as const,\n text: 'With stderr',\n },\n {\n value: 'withFailContext' as const,\n text: 'With fail context',\n },\n {\n value: 'withSpec' as const,\n text: 'With full input',\n },\n {\n value: 'withCompetitors' as const,\n text: 'With competitive jobs',\n },\n {\n value: 'withMonitoringDescriptor' as const,\n text: 'With monitoring descriptor',\n },\n {\n value: 'withInterruptionInfo' as const,\n text: 'With interruption info',\n },\n];\nexport const ATTRIBUTE_ITEM_NAMES = map_(ATTRIBUTE_ITEMS, ({value}) => value);\n\nexport const getOperationsListFilterParameters = createSelector(\n [getOperationsListFilters],\n (filters) => {\n const {text, user, subject, permissions, pool, poolTree, state, type, failedJobs} = filters;\n\n const actualSubject = getValueIfNotDefault(subject);\n const actualPermissions = getValueIfNotDefault(permissions) as string;\n const access =\n actualSubject || actualPermissions?.length > 0\n ? {subject: actualSubject, permissions: actualPermissions || []}\n : undefined;\n\n const res = {\n filter: getValueIfNotDefault(text),\n user: getValueIfNotDefault(user),\n pool: getValueIfNotDefault(pool),\n pool_tree: getValueIfNotDefault(poolTree),\n type: getValueIfNotDefault(type),\n with_failed_jobs: getValueIfNotDefault(failedJobs),\n access,\n };\n return {\n state: getValueIfNotDefault(state),\n ...res,\n };\n },\n);\n\nexport function getOperationsListTimeRange(state: RootState) {\n const {from, to} = state.operations.list.timeRange;\n\n return {\n to_time: to,\n from_time: from,\n };\n}\n\nexport const getOperationsListFiltersParameters_FOR_YTFRONT_2838 = createSelector(\n [getOperationsListFilterParameters, getCurrentUserName, getOperationsListTimeRange, getCluster],\n (filters, login, {from_time, to_time}, cluster) => {\n const clusterConfig = getClusterConfigByName(cluster);\n\n if (clusterConfig.operationPageSettings?.disableOptimizationForYTFRONT2838) {\n return filters;\n }\n\n const {state, ...rest} = filters;\n if (Boolean(from_time || to_time) && !some_(rest, Boolean)) {\n rest.user = login;\n }\n return {\n state,\n ...rest,\n };\n },\n);\n\nexport const getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838 = createSelector(\n [getOperationsListFilterParameters, getOperationsListFiltersParameters_FOR_YTFRONT_2838],\n (filters, fixedFilters) => {\n if (isEqual_(filters, fixedFilters)) {\n return undefined;\n }\n return fixedFilters.user;\n },\n);\n\nexport function getValueIfNotDefault(filter: OperationsListFilterValue) {\n return filter.value === filter.defaultValue ? undefined : filter.value;\n}\n","import moment from 'moment';\n\nimport {OPERATIONS_DATA_MODE} from '../../../constants/operations';\nimport {\n getOperationsListFiltersParameters_FOR_YTFRONT_2838,\n getOperationsListTimeRange,\n} from '../../../store/selectors/operations';\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\n// Operations\n\nexport function getDefaultToTime(currentTime, dataMode) {\n return dataMode === OPERATIONS_DATA_MODE.ARCHIVE\n ? moment(currentTime).toISOString()\n : undefined;\n}\n\nexport function getDefaultFromTime(currentTime, dataMode) {\n return dataMode === OPERATIONS_DATA_MODE.ARCHIVE\n ? moment(currentTime).subtract(6, 'hours').toISOString()\n : undefined;\n}\n\nfunction getFilterParameters(state) {\n return getOperationsListFiltersParameters_FOR_YTFRONT_2838(state);\n}\n\nfunction getCursorParams({operations}) {\n const {from, direction} = operations.list.cursor;\n\n return {\n cursor_time: from, // ISO string\n cursor_direction: direction,\n };\n}\n\nexport function getListRequestParameters(state) {\n return {\n ...getFilterParameters(state),\n ...getOperationsListTimeRange(state),\n ...getCursorParams(state),\n include_archive: state.operations.list.dataMode === OPERATIONS_DATA_MODE.ARCHIVE,\n // TODO: make limit configurable by using settings, 20 | 50 | 100\n limit: 20,\n ...USE_CACHE,\n };\n}\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport moment from 'moment';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../common/thor/ypath';\nimport hammer from '../../../common/hammer';\nimport {\n APPLY_FILTER_PRESET,\n DEFAULT_PRESET_SETTING,\n OPERATIONS_CURSOR_DIRECTION,\n OPERATIONS_DATA_MODE,\n OPERATIONS_PAGE,\n RESET_TIME_RANGE,\n SET_OPERATIONS_DATA_MODE,\n TOGGLE_SAVE_FILTER_PRESET_DIALOG,\n UPDATE_CURSOR,\n UPDATE_FILTER,\n UPDATE_FILTER_COUNTERS,\n UPDATE_OPERATIONS_CANCELLED,\n UPDATE_OPERATIONS_FAILURE,\n UPDATE_OPERATIONS_REQUEST,\n UPDATE_OPERATIONS_SUCCESS,\n UPDATE_SAVE_FILTER_PRESET_DIALOG,\n} from '../../../constants/operations';\nimport {ListOperationSelector} from '../../../pages/operations/selectors';\nimport {removeSetting, setSetting} from '../../../store/actions/settings';\nimport {\n getDefaultFromTime,\n getDefaultToTime,\n getListRequestParameters,\n} from '../../../store/actions/operations/utils';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\nimport {RumWrapper, YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {getCluster} from '../../../store/selectors/global';\n\nconst cancellableRequests = new CancelHelper();\n\n// selectors\nfunction updateCursor({\n timestamp,\n direction,\n firstPageReached,\n lastPageReached,\n resetLoadingStatus = true,\n}) {\n return {\n type: UPDATE_CURSOR,\n data: {\n timestamp,\n direction,\n firstPageReached,\n lastPageReached,\n resetLoadingStatus,\n },\n };\n}\n\nexport function updatePager(incomplete) {\n return (dispatch, getState) => {\n const direction = getState().operations.list.cursor.direction;\n\n if (direction === OPERATIONS_CURSOR_DIRECTION.PAST) {\n dispatch(\n updateCursor({\n lastPageReached: !incomplete,\n resetLoadingStatus: false,\n }),\n );\n } else if (direction === OPERATIONS_CURSOR_DIRECTION.FUTURE) {\n dispatch(\n updateCursor({\n firstPageReached: !incomplete,\n resetLoadingStatus: false,\n }),\n );\n }\n };\n}\n\nexport function updateOperationsList() {\n return (dispatch, getState) => {\n const state = getState();\n const cluster = getCluster(state);\n const parameters = getListRequestParameters(state);\n\n return dispatch(updateOperationsByParams(cluster, parameters));\n };\n}\n\nexport function updateOperationsByParams(cluster, parameters) {\n return (dispatch) => {\n dispatch({\n type: UPDATE_OPERATIONS_REQUEST,\n });\n\n const rumId = new RumWrapper(cluster, RumMeasureTypes.OPERATIONS_LIST);\n return rumId\n .fetch(\n YTApiId.listOperations,\n ytApiV3Id.listOperations(YTApiId.listOperations, {\n parameters,\n cancellation: cancellableRequests.removeAllAndSave,\n }),\n )\n .then((response) => {\n const {operations, incomplete, ...counters} = response;\n\n dispatch(updatePager(incomplete));\n dispatch({\n type: UPDATE_OPERATIONS_SUCCESS,\n data: rumId.wrap('parse', () => {\n return map_(operations, (data) => new ListOperationSelector(data));\n }),\n });\n dispatch({\n type: UPDATE_FILTER_COUNTERS,\n data: counters,\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: UPDATE_OPERATIONS_CANCELLED,\n });\n } else {\n dispatch({\n type: UPDATE_OPERATIONS_FAILURE,\n data: {\n message: 'Could not load operations.',\n details: error,\n },\n });\n }\n });\n };\n}\n\nfunction resetCursor() {\n return updateCursor({\n timestamp: null,\n direction: OPERATIONS_CURSOR_DIRECTION.PAST,\n firstPageReached: true,\n lastPageReached: false,\n });\n}\n\nexport function updateFilter(name, value) {\n return (dispatch) => {\n dispatch({\n type: UPDATE_FILTER,\n data: {name, value},\n });\n dispatch(resetCursor());\n };\n}\n\nfunction resetTimeRange() {\n return (dispatch, getState) => {\n const dataMode = getState().operations.list.dataMode;\n const currentTime = moment();\n\n dispatch({\n type: RESET_TIME_RANGE,\n data: {\n from: getDefaultFromTime(currentTime, dataMode),\n to: getDefaultToTime(currentTime, dataMode),\n },\n });\n };\n}\n\nexport function showArchiveOperations(from, to) {\n return (dispatch) => {\n dispatch({\n type: SET_OPERATIONS_DATA_MODE,\n data: {dataMode: OPERATIONS_DATA_MODE.ARCHIVE, from, to},\n });\n dispatch(resetCursor());\n };\n}\n\nexport function showCurrentOperations() {\n return (dispatch) => {\n dispatch({\n type: SET_OPERATIONS_DATA_MODE,\n data: {dataMode: OPERATIONS_DATA_MODE.CURRENT},\n });\n dispatch(resetCursor());\n };\n}\n\nexport function gotoOperationsPage(where) {\n return (dispatch, getState) => {\n const {dataMode, timeRange, cursor, operations} = getState().operations.list;\n\n switch (where) {\n case OPERATIONS_PAGE.FIRST:\n dispatch(resetCursor());\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n break;\n\n case OPERATIONS_PAGE.LAST:\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n // WARNING fromTime is changed in reset timeRange\n dispatch(\n updateCursor({\n timestamp: timeRange.from,\n direction: OPERATIONS_CURSOR_DIRECTION.FUTURE,\n firstPageReached: false,\n lastPageReached: true,\n }),\n );\n break;\n\n case OPERATIONS_PAGE.NEXT:\n if (!cursor.lastPageReached) {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n\n dispatch(\n updateCursor({\n timestamp: ypath.getValue(\n operations[operations.length - 1],\n '/@start_time',\n ),\n direction: OPERATIONS_CURSOR_DIRECTION.PAST,\n firstPageReached: false,\n }),\n );\n }\n break;\n\n case OPERATIONS_PAGE.PREV:\n if (!cursor.firstPageReached) {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n\n dispatch(\n updateCursor({\n timestamp: ypath.getValue(operations[0], '/@start_time'),\n direction: OPERATIONS_CURSOR_DIRECTION.FUTURE,\n lastPageReached: false,\n }),\n );\n }\n break;\n }\n };\n}\n\nexport function applyFilterPreset(preset, reload = true) {\n return (dispatch) => {\n dispatch({\n type: APPLY_FILTER_PRESET,\n data: {preset},\n });\n\n if (reload) {\n dispatch(resetCursor());\n }\n };\n}\n\nexport function removeFilterPreset(presetId) {\n return (dispatch) => {\n dispatch(removeSetting(presetId, NAMESPACES.OPERATION_PRESETS));\n };\n}\n\nexport function toggleSaveFilterPresetDialog() {\n return {\n type: TOGGLE_SAVE_FILTER_PRESET_DIALOG,\n };\n}\n\nexport function updateSaveFilterPresetDialog({name, value}) {\n return {\n type: UPDATE_SAVE_FILTER_PRESET_DIALOG,\n data: {fieldName: name, fieldValue: value},\n };\n}\n\nfunction selectActualFilters(state) {\n const currentFilters = state.operations.list.filters;\n return reduce_(\n currentFilters,\n (filters, {value}, key) => {\n return {...filters, [key]: value};\n },\n {},\n );\n}\n\nexport function saveFilterPreset(name, isDefault) {\n return (dispatch, getState) => {\n let promise = Promise.resolve();\n const presetId = hammer.guid();\n\n if (isDefault) {\n promise = dispatch(setSetting(DEFAULT_PRESET_SETTING, NAMESPACES.OPERATION, presetId));\n }\n return promise.then(() => {\n dispatch(\n setSetting(presetId, NAMESPACES.OPERATION_PRESETS, {\n name,\n filters: selectActualFilters(getState()),\n }),\n );\n });\n };\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport reduce_ from 'lodash/reduce';\n\nimport {getOperation} from '../../../store/actions/operations/detail';\nimport {updateOperationsList} from '../../../store/actions/operations/list';\nimport {\n HIDE_EDIT_WEIGHT_POOL_MODAL,\n SET_PULLS_AND_WEIGHTS,\n SHOW_EDIT_WEIGHT_POOL_MODAL,\n} from '../../../constants/operations';\nimport {Page} from '../../../constants';\n\nexport * from '../../../store/actions/operations/list';\n\nexport function showEditPoolsWeightsModal(operation, editable = true) {\n return {\n type: SHOW_EDIT_WEIGHT_POOL_MODAL,\n data: {operation, editable},\n };\n}\n\nexport function hideEditPoolsWeightsModal() {\n return {\n type: HIDE_EDIT_WEIGHT_POOL_MODAL,\n };\n}\n\nexport function setPoolsAndWeights(operation, pools, weights) {\n const pathItems = window.location.pathname.split('/');\n const inOperationsList = pathItems.length === 3 && pathItems[2] === Page.OPERATIONS;\n const operationId = operation.$value;\n\n const poolTrees = reduce_(\n operation.pools,\n (acc, item) => {\n const {tree} = item;\n acc[tree] = item;\n return acc;\n },\n {},\n );\n\n return (dispatch) => {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.REQUEST,\n });\n\n const params = reduce_(\n pools,\n (res, pool, tree) => {\n const old = poolTrees[tree];\n if (weights[tree] && old.weight !== Number(weights[tree])) {\n res[tree] = Object.assign({}, {weight: Number(weights[tree])});\n }\n if (old.pool !== pools[tree]) {\n res[tree] = Object.assign(res[tree] || {}, {\n pool: pools[tree],\n });\n }\n return res;\n },\n {},\n );\n\n return yt.v3\n .updateOperationParameters({\n operation_id: operationId,\n _parameters: {\n scheduling_options_per_pool_tree: params,\n },\n })\n .then(() => {\n if (inOperationsList) {\n dispatch(updateOperationsList());\n } else {\n dispatch(getOperation(operationId));\n }\n\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.SUCCESS,\n });\n dispatch({\n type: HIDE_EDIT_WEIGHT_POOL_MODAL,\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.CANCELLED,\n });\n } else {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n","import React, {Fragment, useEffect, useState} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport every_ from 'lodash/every';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {YTErrorBlock} from '../../../components/Error/Error';\nimport Modal from '../../../components/Modal/Modal';\nimport Link from '../../../components/Link/Link';\nimport Yson from '../../../components/Yson/Yson';\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport {hideEditPoolsWeightsModal, setPoolsAndWeights} from '../../../store/actions/operations';\nimport {Page} from '../../../constants/index';\n\nimport './PoolsWeightsEditModal.scss';\nimport {getCluster} from '../../../store/selectors/global';\n\nPoolsWeightsEditModal.propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n visible: PropTypes.bool.isRequired,\n editable: PropTypes.bool.isRequired,\n cluster: PropTypes.string.isRequired,\n operation: PropTypes.object,\n\n hideEditPoolsWeightsModal: PropTypes.func.isRequired,\n setPoolsAndWeights: PropTypes.func.isRequired,\n};\n\nconst block = cn('operation-pools-weights');\nconst preparePoolsState = (pools) => {\n return reduce_(\n pools,\n (res, {pool, tree}) => {\n res[tree] = pool;\n return res;\n },\n {},\n );\n};\n\nconst prepareWeightsState = (pools) => {\n return reduce_(\n pools,\n (res, {weight, tree}) => {\n res[tree] = String(weight);\n return res;\n },\n {},\n );\n};\n\nconst renderPoolsAndWeights = ({\n cluster,\n operation,\n editable,\n pools,\n weights,\n setPools,\n setWeights,\n}) => {\n return map_(operation.pools, ({tree}) => {\n const pool = pools[tree];\n const title = `${pool} [${tree}]`;\n const url = `/${cluster}/${Page.SCHEDULING}?tree=${tree}&pool=${pool}&tab=monitor`;\n\n return (\n <Fragment key={tree}>\n <div className={block('pool', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={pool}\n onUpdate={(pool) => {\n setPools({...pools, [tree]: pool});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">\n <Link url={url} title={title}>\n <span className={block('pool-link')}>{pool}</span>\n </Link>\n </span>\n )}\n </div>\n\n <div className={block('tree', 'elements-form_field')}>{tree}</div>\n\n <div className={block('weight', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={weights[tree]}\n onUpdate={(weight) => {\n setWeights({...weights, [tree]: weight});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">{weights[tree]}</span>\n )}\n </div>\n </Fragment>\n );\n });\n};\n\nfunction PoolsWeightsEditModal(props) {\n const {operation, setPoolsAndWeights} = props;\n const [pools, setPools] = useState(preparePoolsState(operation.pools));\n const [weights, setWeights] = useState(prepareWeightsState(operation.pools));\n\n useEffect(() => {\n setPools(preparePoolsState(operation.pools));\n setWeights(prepareWeightsState(operation.pools));\n }, [operation.$value]);\n\n const isConfirmDisabled = () => {\n const state = {operation};\n const isStateCorrect = state !== 'completed' && state !== 'failed' && state !== 'aborted';\n\n const isWeightCorrect = every_(keys_(weights), (tree) => {\n const value = Number(weights[tree]);\n return !isNaN(value) && value > 0;\n });\n\n const isPoolCorrect = every_(keys_(pools), (tree) => {\n const value = pools[tree];\n return Boolean(value);\n });\n\n return !isStateCorrect || !isWeightCorrect || !isPoolCorrect;\n };\n\n const handleConfirm = () => {\n setPoolsAndWeights(operation, pools, weights);\n };\n\n const {loading, error, errorData, visible, editable, hideEditPoolsWeightsModal} = props;\n const title = (\n <div className={block('title')}>{editable ? 'Edit' : 'View'} pools and weights</div>\n );\n\n return (\n <Modal\n size=\"l\"\n title={title}\n loading={loading}\n visible={visible}\n footer={editable}\n confirmText=\"Apply\"\n onConfirm={handleConfirm}\n onCancel={hideEditPoolsWeightsModal}\n isConfirmDisabled={isConfirmDisabled}\n content={\n <Fragment>\n <div className={block('name')}>\n <Yson value={operation.title || operation.$value} inline />\n </div>\n <div className={block()}>\n <div className={block('header')}>Pool</div>\n <div className={block('header')}>Tree</div>\n <div className={block('header')}>Weight</div>\n {renderPoolsAndWeights({\n ...props,\n pools,\n weights,\n setPools,\n setWeights,\n })}\n </div>\n {error && <YTErrorBlock className={block('error')} error={errorData} />}\n </Fragment>\n }\n />\n );\n}\n\nfunction mapStateToProps(state) {\n const {operations} = state;\n const {loading, loaded, error, errorData, visible, editable, operation} =\n operations.page.editWeightModal;\n\n return {\n loading,\n loaded,\n error,\n errorData,\n visible,\n editable,\n operation,\n cluster: getCluster(state),\n };\n}\n\nconst mapDispatchToProps = {\n hideEditPoolsWeightsModal,\n setPoolsAndWeights,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PoolsWeightsEditModal);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\nimport Link from '../../../components/Link/Link';\n\nimport hammer from '../../../common/hammer';\nimport StatusLabel from '../../../components/StatusLabel/StatusLabel';\n\nimport './OperationProgress.scss';\nimport {getCluster} from '../../../store/selectors/global';\n\nconst block = cn('operation-progress');\n\nclass OperationProgress extends Component {\n static propTypes = {\n // from parent\n operation: PropTypes.object.isRequired,\n type: PropTypes.oneOf(['running', 'failed']),\n cluster: PropTypes.string.isRequired,\n showState: PropTypes.bool,\n\n onLinkClick: PropTypes.func,\n };\n\n static defaultProps = {\n type: 'running',\n };\n\n renderCounter(state, count, total) {\n const {cluster, onLinkClick} = this.props;\n\n const className = 'operation-progress__counter';\n const stateClassName = 'operation-progress__counter-state';\n const valueClassName = 'operation-progress__counter-value';\n\n const {\n operation: {$value},\n } = this.props;\n const url = `/${cluster}/operations/${$value}/jobs?state=${state}`;\n\n const jobsByStateTitle = `View ${state} jobs`;\n\n return (\n <div className={className}>\n <span className={stateClassName}>\n <Link\n theme=\"ghost\"\n title={jobsByStateTitle}\n url={url}\n routed\n onClick={\n !onLinkClick\n ? undefined\n : () => {\n onLinkClick(state);\n }\n }\n >\n {hammer.format['ReadableField'](state)}\n </Link>\n </span>\n <span className={valueClassName}>\n {hammer.format['Number'](count)}\n / \n {hammer.format['Number'](total)}\n </span>\n </div>\n );\n }\n\n renderFailedJobCounters() {\n const {operation} = this.props;\n const {failedJobs, totalFailedJobs} = operation;\n\n const className = 'operation-progress__counters';\n\n return (\n typeof totalFailedJobs !== 'undefined' && (\n <div className={className}>\n {this.renderCounter('failed', failedJobs, totalFailedJobs)}\n </div>\n )\n );\n }\n\n renderJobCounters() {\n const {operation} = this.props;\n const {state, totalJobs, failedJobs, completedJobs, runningJobs} = operation;\n\n const className = 'operation-progress__counters';\n\n return operation.isPreparing()\n ? null\n : typeof totalJobs !== 'undefined' && (\n <div className={className}>\n {operation.inIntermediateState() &&\n this.renderCounter('running', runningJobs, totalJobs)}\n {state === 'failed' && this.renderCounter('failed', failedJobs, totalJobs)}\n {this.renderCounter('completed', completedJobs, totalJobs)}\n </div>\n );\n }\n\n renderState() {\n const {\n showState,\n operation: {suspended, state},\n } = this.props;\n\n return !showState ? null : (\n <div className={block('state')}>\n <StatusLabel label={suspended ? 'suspended' : state} />\n </div>\n );\n }\n\n renderFailedProgressBar() {\n const {operation} = this.props;\n const {failedJobsProgress} = operation;\n\n const className = 'operation-progress__bar';\n\n return (\n <div className={className}>\n {this.renderState()}\n <Progress size=\"s\" value={failedJobsProgress || 0} theme=\"danger\" />\n </div>\n );\n }\n\n renderProgressBar() {\n const {operation} = this.props;\n const {state, jobsProgress, completedJobsProgress, runningJobsProgress} = operation;\n\n const RESOLVED_PROGRESS = 100;\n const PENDING_PROGRESS = 0;\n\n let progressBar;\n\n switch (state) {\n case 'running':\n progressBar = operation.inIntermediateState() && (\n <Progress\n size=\"s\"\n value={jobsProgress || 0}\n stack={[\n {\n value: completedJobsProgress || 0,\n theme: 'success',\n },\n {value: runningJobsProgress || 0, theme: 'info'},\n ]}\n />\n );\n break;\n case 'completed':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"success\" />;\n break;\n case 'failed':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"danger\" />;\n break;\n case 'aborted':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"default\" />;\n break;\n default:\n progressBar = <Progress size=\"s\" value={PENDING_PROGRESS || 0} />;\n break;\n }\n\n const className = 'operation-progress__bar';\n\n return (\n <div className={className}>\n {this.renderState()}\n {progressBar}\n </div>\n );\n }\n render() {\n const className = 'operation-progress';\n const {type} = this.props;\n return (\n <div className={className}>\n {type === 'running' ? this.renderProgressBar() : this.renderFailedProgressBar()}\n {type === 'running' ? this.renderJobCounters() : this.renderFailedJobCounters()}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n cluster: getCluster(state),\n };\n};\n\nexport default connect(mapStateToProps)(OperationProgress);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {CypressNodeRaw} from '../../../../../shared/yt-types';\n\nimport ypath from '../../../../common/thor/ypath';\nimport format from '../../../../common/hammer/format';\nimport OperationIOLink, {\n OperationIOLinkProps,\n} from '../../../../pages/operations/OperationIOLink/OperationIOLink';\nimport {isTransactionAlive, isValidTransactionId} from '../../../../utils/operations/detail';\n\nimport './PathItem.scss';\n\nconst block = cn('yt-operations-list-path-item');\n\ntype PathItemProps = {\n caption: string;\n item: Omit<OperationIOLinkProps, 'path'> & {\n table: CypressNodeRaw<{transaction_id?: string}, string>;\n count: number;\n };\n user_transaction_id?: string;\n transaction_id?: string;\n};\n\nexport function PathItem({caption, item, transaction_id, user_transaction_id}: PathItemProps) {\n const {table, count, ...rest} = item;\n const [activeTransaction, setActiveTransaction] = React.useState<string | undefined>();\n\n React.useEffect(() => {\n const tableTx = ypath.getValue(table, '/@transaction_id');\n if (isValidTransactionId(tableTx)) {\n return setActiveTransaction(tableTx);\n }\n if (isValidTransactionId(transaction_id)) {\n return setActiveTransaction(transaction_id);\n }\n\n isTransactionAlive(user_transaction_id).then(() =>\n setActiveTransaction(user_transaction_id),\n );\n }, [table, user_transaction_id, transaction_id]);\n\n return (\n <div key={caption} className={block(null, 'elements-meta-item')}>\n <div className=\"elements-meta-item__key\">{format.ReadableField(caption)}</div>\n <div className=\"elements-meta-item__value\">\n <span className={block('item-io')}>\n <span className={block('item-count')}>{count}</span>\n {\n <OperationIOLink\n path={ypath.getValue(table)}\n {...rest}\n transaction={activeTransaction}\n theme={'ghost'}\n className={block('item-io-table')}\n />\n }\n </span>\n </div>\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport {withRouter} from 'react-router';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport trimEnd_ from 'lodash/trimEnd';\n\nimport ypath from '../../../../common/thor/ypath';\nimport unipika from '../../../../common/thor/unipika';\nimport OperationProgress from '../../../../pages/operations/OperationProgress/OperationProgress';\nimport {TemplatePools, TemplateWeight} from '../../../../components/MetaTable/MetaTable';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport {SubjectCard} from '../../../../components/SubjectLink/SubjectLink';\nimport Button from '../../../../components/Button/Button';\nimport Link from '../../../../components/Link/Link';\nimport Icon from '../../../../components/Icon/Icon';\nimport {OperationType} from '../../../../components/OperationType/OperationType';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport {\n showEditPoolsWeightsModal,\n updateOperationsList,\n} from '../../../../store/actions/operations';\nimport {performAction, prepareActions} from '../../../../utils/operations/detail';\nimport {promptAction} from '../../../../store/actions/actions';\nimport {PathItem} from './PathItem';\n\nimport './OperationsListTable.scss';\n\nconst BLOCK_NAME = 'operations-list';\nconst block = cn(BLOCK_NAME);\n\nfunction getTitle(item) {\n return typeof item.title !== 'undefined' ? item.title : item.$value;\n}\n\nfunction renderTitle(item, url) {\n const title = getTitle(item);\n return (\n <Link\n routed\n className=\"elements-ellipsis\"\n url={`${trimEnd_(url, '/')}/${item.$value}`}\n theme=\"primary\"\n >\n <span>{unipika.decode(title)}</span>\n </Link>\n );\n}\n\nfunction renderCopyTitle(item) {\n return (\n <ClipboardButton\n text={item.$value}\n view=\"flat-secondary\"\n size=\"s\"\n title={'Copy operation id'}\n className={block('item-title-copy')}\n />\n );\n}\n\nfunction UserPoolItem({awesomeIcon, children, title}) {\n return (\n <div className={block('user-pool-item')}>\n <div className={block('user-pool-item-icon')}>\n <Tooltip content={title} to={'left'} allowUnmounted>\n <Icon face={'solid'} awesome={awesomeIcon} />\n </Tooltip>\n </div>\n <div className={block('user-pool-item-name')}>{children}</div>\n </div>\n );\n}\n\nclass OperationsListTable extends Component {\n static propTypes = {\n // from connect\n operations: PropTypes.arrayOf(PropTypes.object).isRequired,\n initialLoading: PropTypes.bool.isRequired,\n cluster: PropTypes.string.isRequired,\n\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n promptAction: PropTypes.func.isRequired,\n updateOperationsList: PropTypes.func.isRequired,\n // from react-router\n match: PropTypes.shape({\n url: PropTypes.string.isRequired,\n }),\n };\n\n static renderType(item) {\n return <OperationType value={item.type} />;\n }\n\n static renderStartTime(item) {\n return (\n <div className={block('item-start-time')}>\n <div className={block('item-start-time-human')}>\n {hammer.format['DateTime'](item.startTime, {\n format: 'human',\n })}\n </div>\n <div className={block('item-start-time-default')}>\n {hammer.format['DateTime'](item.startTime)}\n </div>\n <div className={block('item-duration')} title=\"Duration\">\n {hammer.format['TimeDuration'](item.duration)}\n </div>\n </div>\n );\n }\n\n static renderProgress(item) {\n return <OperationProgress operation={item} showState />;\n }\n\n renderTitle = (item) => {\n const {url} = this.props.match;\n\n const isRunning = ypath.getValue(item, '/@state') === 'running';\n const inputTx = isRunning\n ? ypath.getValue(item, '/@brief_spec/input_transaction_id')\n : undefined;\n const outputTx = isRunning\n ? ypath.getValue(item, '/@brief_spec/output_transaction_id')\n : undefined;\n const user_transaction_id = isRunning\n ? ypath.getValue(item, '/@brief_spec/user_transaction_id')\n : undefined;\n\n return (\n <div>\n <div className={block('item-title')}>\n {renderCopyTitle(item)}\n {renderTitle(item, url)}\n </div>\n <div className={block('item-io')}>\n {item.input.count > 0 && (\n <PathItem\n caption=\"in\"\n item={item.input}\n {...{user_transaction_id, transaction: inputTx}}\n />\n )}\n {item.output.count > 0 && (\n <PathItem\n caption=\"out\"\n item={item.output}\n {...{user_transaction_id, transaction: outputTx}}\n />\n )}\n </div>\n </div>\n );\n };\n\n renderMultiplePools(item) {\n const {showEditPoolsWeightsModal} = this.props;\n\n return (\n <span className={block('multiply-pools')}>\n {item.pools.length}\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title=\"Show pools and weights\"\n className={block('view-button')}\n onClick={() => showEditPoolsWeightsModal(item, false)}\n >\n <Icon awesome=\"eye\" />\n View\n </Button>\n\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title=\"Edit pools and weights\"\n className={block('edit-button')}\n onClick={() => showEditPoolsWeightsModal(item)}\n >\n <Icon awesome=\"pencil\" />\n </Button>\n </span>\n );\n }\n\n renderUserPool = (item) => {\n const {showEditPoolsWeightsModal, cluster} = this.props;\n const {pools, user, state} = item;\n const multiplePools = pools?.length > 1 || false;\n\n return (\n <React.Fragment>\n <UserPoolItem awesomeIcon={'user'} title={'User'}>\n <SubjectCard name={user} />\n </UserPoolItem>\n <UserPoolItem awesomeIcon={'poll-people'} title={'Pool'}>\n {multiplePools ? (\n this.renderMultiplePools(item)\n ) : (\n <TemplatePools\n onEdit={() => showEditPoolsWeightsModal(item)}\n cluster={cluster}\n pools={pools}\n state={state}\n compact\n allowDetachEditBtn\n />\n )}\n </UserPoolItem>\n {!multiplePools && (\n <UserPoolItem awesomeIcon={'weight-hanging'} title={'Weight'}>\n <TemplateWeight\n onEdit={() => showEditPoolsWeightsModal(item)}\n operation={item}\n pool={pools[0]}\n />\n </UserPoolItem>\n )}\n </React.Fragment>\n );\n };\n\n renderActions = (operation) => {\n const {promptAction} = this.props;\n\n const actions = prepareActions(operation);\n\n return (\n <div className={block('actions')}>\n {actions.map((action) => {\n const {icon, name, $value} = action;\n const text = hammer.format['Readable'](name);\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the operation{' '}\n {$value}?\n </span>\n );\n const handler = ({currentOption}) =>\n performAction({\n ...action,\n operation,\n currentOption,\n }).then(() => {\n this.props.updateOperationsList();\n });\n\n return (\n <Button\n withTooltip\n size=\"m\"\n key={name}\n view=\"flat-secondary\"\n tooltipProps={{\n placement: 'bottom',\n content: text,\n }}\n onClick={() => promptAction({...action, message, handler})}\n >\n <Icon awesome={icon} />\n </Button>\n );\n })}\n </div>\n );\n };\n\n settings = {\n css: 'operations-list',\n theme: 'light',\n striped: false,\n virtualType: 'simple',\n getItemLink: (item) => `${this.props.match.url}/${item.$value}`,\n computeKey: (item) => item.$value,\n columns: {\n sets: {\n default: {\n items: ['title', 'type', 'user_pool', 'start_time', 'progress', 'actions'],\n },\n },\n mode: 'default',\n items: {\n title: {\n name: 'title',\n sort: false,\n align: 'left',\n },\n type: {\n name: 'type',\n sort: false,\n align: 'left',\n },\n user: {\n name: 'user',\n sort: false,\n align: 'left',\n },\n pool: {\n name: 'pool',\n sort: false,\n align: 'left',\n },\n user_pool: {\n name: 'user_pool',\n sort: false,\n caption: 'User / Pool',\n align: 'left',\n },\n start_time: {\n name: 'start_time',\n sort: false,\n align: 'left',\n },\n progress: {\n name: 'progress',\n sort: false,\n align: 'left',\n caption: 'State / Progress',\n },\n actions: {\n name: 'actions',\n caption: '',\n sort: false,\n align: 'right',\n },\n },\n },\n templates: {\n title: this.renderTitle,\n user_pool: this.renderUserPool,\n type: OperationsListTable.renderType,\n start_time: OperationsListTable.renderStartTime,\n progress: OperationsListTable.renderProgress,\n actions: this.renderActions,\n },\n };\n\n render() {\n const {operations, initialLoading} = this.props;\n\n return (\n <ElementsTable\n emptyDataDescription=\"Please, change your filtering settings to see search results\"\n isLoading={initialLoading}\n items={operations}\n {...this.settings}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations, global}) {\n const {isLoading, hasLoaded} = operations.list;\n const initialLoading = isLoading && !hasLoaded;\n\n return {\n initialLoading,\n cluster: global.cluster,\n operations: operations.list.operations,\n };\n}\n\nconst mapDispatchToProps = {\n showEditPoolsWeightsModal,\n promptAction,\n updateOperationsList,\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsListTable));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {connect} from 'react-redux';\nimport {Redirect, withRouter} from 'react-router';\n\nimport Filter from '../../../../components/Filter/Filter';\n\nimport {isGotoEnabled} from '../../../../utils/operations/list';\nimport {updateFilter} from '../../../../store/actions/operations';\nimport Button from '../../../../components/Button/Button';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\n\nclass OperationsTextFilter extends Component {\n static propTypes = {\n // from connect\n updateFilter: PropTypes.func.isRequired,\n activePreset: PropTypes.string.isRequired,\n filter: PropTypes.shape({\n type: PropTypes.string.isRequired,\n defaultValue: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n // from react-router\n match: PropTypes.object,\n };\n\n state = {\n transition: false,\n value: '',\n };\n\n get value() {\n const {value: stateValue} = this.state;\n const {value: propsValue} = this.props.filter;\n\n if (stateValue) {\n return stateValue;\n }\n\n return propsValue;\n }\n\n gotoDetails = (value = this.props.filter.value) => {\n if (isGotoEnabled(value)) {\n this.setState({transition: true, value});\n }\n };\n\n handleKeyDown = (evt) => {\n if (evt.key === 'Enter') {\n this.gotoDetails(evt.target.value);\n }\n };\n\n render() {\n const {\n match,\n updateFilter,\n activePreset,\n filter: {value},\n } = this.props;\n const {transition} = this.state;\n\n return transition ? (\n <Redirect to={`${match.url}/${this.value}`} />\n ) : (\n <div className={block('toolbar-text-filter', tbBlock('component'))}>\n <Filter\n key={activePreset}\n placeholder=\"Filter operations...\"\n size=\"m\"\n value={this.value}\n onChange={(newValue) => updateFilter('text', newValue)}\n debounce={500}\n onKeyDown={this.handleKeyDown}\n pin=\"round-brick\"\n />\n <Button\n view=\"action\"\n pin=\"brick-round\"\n onClick={() => this.gotoDetails(value)}\n disabled={!isGotoEnabled(this.value)}\n >\n Go to operation\n </Button>\n </div>\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n return {\n filter: operations.list.filters.text,\n activePreset: operations.list.activePreset,\n };\n}\n\nconst mapDispatchToProps = {updateFilter};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsTextFilter));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport moment from 'moment';\n\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\n\nimport './TimePicker.scss';\n\nconst bForm = cn('elements-form');\nconst block = cn('timepicker');\nconst DISPLAY_FORMAT = 'HH:mm';\nconst invalidTitle = `Time should be specified as HH:MM.\nEstimated start time should be less than estimated finish time.`;\n\nexport const MomentObjectType = PropTypes.shape({\n _isAMomentObject: PropTypes.oneOf([true]),\n});\n\nexport default class TimePicker extends Component {\n static propTypes = {\n date: PropTypes.oneOfType([PropTypes.string, MomentObjectType]).isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n minDate: PropTypes.oneOfType([PropTypes.string, MomentObjectType]),\n };\n\n static defaultProps = {\n minDate: null,\n disabled: false,\n };\n\n state = {\n time: '',\n date: '',\n };\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.date !== prevState.date) {\n return {\n time: moment(nextProps.date).format(DISPLAY_FORMAT),\n date: nextProps.date,\n };\n }\n\n return null;\n }\n\n _checkInputTimeValidity(textTime) {\n return (\n new RegExp('[0-9]{2}:[0-9]{2}').test(textTime) &&\n moment(textTime, DISPLAY_FORMAT).isValid()\n );\n }\n\n _checkDateValidity(textDate) {\n const {minDate} = this.props;\n const newDate = moment(textDate).unix();\n\n return minDate ? newDate > moment(minDate).unix() : true;\n }\n\n _prepareOutputDate(textTime) {\n const {date} = this.state;\n const currentDate = moment(date);\n const newDate = moment(textTime, DISPLAY_FORMAT);\n\n newDate.year(currentDate.year());\n newDate.month(currentDate.month());\n newDate.date(currentDate.date());\n\n return newDate.toISOString();\n }\n\n handleTimeChange = (newTime) => {\n const {onChange} = this.props;\n const isValidFormat = this._checkInputTimeValidity(newTime);\n\n this.setState({time: newTime});\n\n if (isValidFormat) {\n const newDate = this._prepareOutputDate(newTime);\n\n onChange(newDate);\n }\n };\n\n renderIcon(icon) {\n return <Icon awesome={icon} />;\n }\n\n render() {\n const {time} = this.state;\n const {disabled} = this.props;\n const newDate = this._prepareOutputDate(time);\n\n const isValidFormat = this._checkInputTimeValidity(time);\n const isValidDate = this._checkDateValidity(newDate);\n const isValid = isValidFormat && isValidDate;\n\n const title = isValid ? '' : invalidTitle;\n\n return (\n <div className={bForm('field', {theme: isValid ? 'valid' : 'invalid'}, block())}>\n <TextInput\n theme=\"normal\"\n size=\"s\"\n value={time}\n disabled={disabled}\n onUpdate={this.handleTimeChange}\n iconRight={this.renderIcon('clock')}\n controlAttrs={{\n maxLength: 5,\n title,\n }}\n className={block('control')}\n placeholder={'HH:mm'}\n />\n </div>\n );\n }\n}\n","import React, {useCallback, useState} from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {RootState} from '../../../../store/reducers';\nimport {showArchiveOperations, showCurrentOperations} from '../../../../store/actions/operations';\nimport {OPERATIONS_DATA_MODE} from '../../../../constants/operations';\n\nimport mapValues_ from 'lodash/mapValues';\nimport values_ from 'lodash/values';\n\nimport moment from 'moment';\n\nimport {Button} from '@gravity-ui/uikit';\nimport Icon from '../../../../components/Icon/Icon';\nimport Modal from '../../../../components/Modal/Modal';\nimport TimePicker from '../../../../components/TimePicker/TimePicker';\nimport CustomRadioButton from '../../../../components/RadioButton/RadioButton';\nimport {SelectButton} from '../../../../components/Button/Button';\nimport {Datepicker} from '../../../../components/common/Datepicker';\n\nimport './OperationsArchiveFilter.scss';\nimport {ValueOf} from '../../../../../@types/types';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\nconst formBlock = cn('elements-form');\n\nconst datePickerProps = {\n range: false,\n controlSize: 's',\n format: 'dd-MM-yyyy',\n outputFormat: 'datetime',\n className: 'operations-datepicker-control',\n popupClassName: 'operations-datepicker-popup',\n} as const;\n\nconst radioButtonTypes = {\n custom: {\n text: 'custom',\n value: 'custom',\n },\n twoHours: {\n text: 'last 2 hours',\n value: 'twoHours',\n hours: 2,\n },\n day: {\n text: 'last day',\n value: 'day',\n hours: 24,\n },\n week: {\n text: 'last week',\n value: 'week',\n hours: 168,\n },\n} as const;\n\ninterface State {\n modalVisible: boolean;\n activeTypeValue: ValueOf<typeof radioButtonTypes>['value'];\n from?: string;\n to?: string;\n}\n\nexport default function OperationsArchiveFilter() {\n const {\n dataMode,\n timeRange: {from, to},\n } = useSelector((store: RootState) => store.operations.list);\n\n const dispatch = useDispatch();\n\n const [state, setState] = useState<State>({\n modalVisible: false,\n activeTypeValue: radioButtonTypes.custom.value,\n from: from || moment().subtract(6, 'hours').toISOString(),\n to: to || moment().toISOString(),\n });\n\n const showModal = useCallback(() => {\n setState({\n ...state,\n modalVisible: true,\n });\n }, [state]);\n\n const hideModal = useCallback(() => {\n setState({...state, modalVisible: false});\n }, [state]);\n\n const resetTimeRange = useCallback(() => {\n hideModal();\n dispatch(showCurrentOperations());\n }, [dispatch, hideModal]);\n\n const applyTimeRange = useCallback(() => {\n hideModal();\n if (state.activeTypeValue === 'custom') {\n dispatch(showArchiveOperations(state.from, state.to));\n } else {\n dispatch(\n showArchiveOperations(\n moment()\n .subtract(radioButtonTypes[state.activeTypeValue].hours, 'hours')\n .toISOString(),\n moment().toISOString(),\n ),\n );\n }\n }, [dispatch, hideModal, state]);\n\n const prepareText = useCallback(() => {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n return 'Current operations';\n } else {\n const format = 'DD-MM-YYYY HH:mm';\n const fromPart = moment(from).format(format);\n const toPart = moment(to).format(format);\n return fromPart + ' — ' + toPart;\n }\n }, [dataMode, from, to]);\n\n const updateDate = useCallback(\n (date: Pick<State, 'from' | 'to'>) => {\n const dateWithHours = mapValues_(date, (field, key) => {\n if (field) {\n const {hours, minutes} = moment(state[key as 'from' | 'to']).toObject();\n return moment(field).add({hours, minutes}).toISOString();\n }\n return field;\n });\n setState({...state, ...dateWithHours});\n },\n [state],\n );\n\n const updateTime = useCallback(\n (date: {from?: string; to?: string}) => setState({...state, ...date}),\n [state],\n );\n\n const handleActiveTypeChange = useCallback(\n (ev: React.ChangeEvent<HTMLInputElement>) => {\n const activeTypeValue = ev.target.value as ValueOf<typeof radioButtonTypes>['value'];\n setState({\n ...state,\n activeTypeValue,\n ...(activeTypeValue !== 'custom' && {\n from: moment()\n .subtract(radioButtonTypes[activeTypeValue].hours, 'hours')\n .toISOString(),\n to: moment().toISOString(),\n }),\n });\n },\n [state],\n );\n\n const text = prepareText();\n const checked = dataMode === OPERATIONS_DATA_MODE.ARCHIVE;\n const disabled = state.activeTypeValue !== radioButtonTypes.custom.value;\n\n return (\n <div className={block('archive-range', tbBlock('component'))}>\n <Modal\n title=\"Choose range\"\n size=\"s\"\n confirmText=\"Apply\"\n cancelText=\"Show current\"\n cl={formBlock('time-modal')}\n visible={state.modalVisible}\n content={\n <div className={formBlock(null, 'operations-archive-filter')}>\n <div className={formBlock('button-group')}>\n <CustomRadioButton\n name=\"time-range\"\n items={values_(radioButtonTypes)}\n value={state.activeTypeValue}\n onChange={handleActiveTypeChange}\n />\n </div>\n <div>\n <div className={formBlock('label')}>From</div>\n <div className={formBlock('field-group')}>\n <span className={formBlock('field')}>\n <Datepicker\n {...datePickerProps}\n disabled={disabled}\n from={state.from}\n onUpdate={({from: newFrom}) =>\n newFrom && updateDate({from: newFrom})\n }\n />\n </span>\n <span className={formBlock('field')}>\n {state.from && (\n <TimePicker\n disabled={disabled}\n date={state.from}\n onChange={(newDate: string) =>\n updateTime({from: newDate})\n }\n />\n )}\n </span>\n </div>\n <div className={formBlock('label')}>To</div>\n <div className={formBlock('field-group')}>\n <span className={formBlock('field')}>\n <Datepicker\n {...datePickerProps}\n disabled={disabled}\n to={state.to}\n onUpdate={({from: newTo}) =>\n newTo && updateDate({to: newTo})\n }\n />\n </span>\n <span className={formBlock('field')}>\n {state.to && (\n <TimePicker\n disabled={disabled}\n date={state.to}\n onChange={(newDate: string) =>\n updateTime({to: newDate})\n }\n />\n )}\n </span>\n </div>\n </div>\n </div>\n }\n renderCustomCancel={(className: string | undefined) => (\n <Button title=\"Show current\" className={className} onClick={resetTimeRange}>\n Show current\n </Button>\n )}\n onCancel={hideModal}\n onConfirm={applyTimeRange}\n />\n <SelectButton type=\"submit\" selected={checked} title={text} onClick={showModal}>\n {text}\n <Icon awesome=\"calendar-alt\" />\n </SelectButton>\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport map_ from 'lodash/map';\n\nimport hammer from '../../../common/hammer';\nimport Select from '../../../components/Select/Select';\nimport {itemsProps} from '../../../components/Suggest/Suggest';\n\nexport default class OperationSelectFilter extends Component {\n static propTypes = {\n // from props\n name: PropTypes.string.isRequired,\n withCounters: PropTypes.bool,\n type: PropTypes.string,\n // from connect\n updateFilter: PropTypes.func.isRequired,\n states: itemsProps,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n counters: PropTypes.object,\n };\n\n static defaultProps = {\n withCounters: true,\n type: 'radio',\n };\n\n get items() {\n const {value, states, counters, withCounters} = this.props;\n\n let found = false;\n const res = map_(states, (state) => {\n const stateName = typeof state === 'string' ? state : state.name;\n const count = counters && (counters[stateName] || 0);\n\n if (stateName === value) {\n found = true;\n }\n\n return {\n value: stateName,\n text: state.caption || hammer.format['ReadableField'](stateName),\n count: withCounters ? count : undefined,\n };\n });\n\n if ('string' === typeof value && !found) {\n res.push({\n value,\n text: hammer.format.ReadableField(value),\n });\n }\n\n return res;\n }\n\n onRadioChange = (val) => this.props.updateFilter(this.props.name, val);\n onCheckChange = (val) => this.props.updateFilter(this.props.name, val);\n\n render() {\n const {name, value, type, placeholder, ...props} = this.props;\n const {multiple} = this.props;\n\n const placeHolder = 'function' === typeof placeholder ? placeholder(value) : placeholder;\n\n const onChange = type === 'radio' ? this.onRadioChange : this.onCheckChange;\n\n return (\n <Select\n hideFilter={true}\n {...props}\n placeholder={placeHolder}\n value={Array.isArray(value) ? value : [value]}\n type={type}\n items={this.items}\n onUpdate={(vals) => onChange(multiple ? vals : vals[0])}\n label={hammer.format['FirstUppercase'](name) + ':'}\n />\n );\n }\n}\n","import {connect} from 'react-redux';\n\nimport OperationSelectFilter from '../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\nimport {updateFilter} from '../../../../store/actions/operations/list';\nimport {getActualValue, getCounters} from '../../../../pages/operations/selectors';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.list.filters;\n const {name, states} = ownProps;\n const {defaultValue, value, counters: rawCounters} = filters[name];\n\n const counters = getCounters(name, states, rawCounters);\n\n return {\n value: getActualValue(value, defaultValue),\n defaultValue,\n counters,\n };\n}\n\nexport default connect(mapStateToProps, {updateFilter})(OperationSelectFilter);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Pagination from '../../../../components/Pagination/Pagination';\nimport {gotoOperationsPage} from '../../../../store/actions/operations';\nimport {OPERATIONS_PAGE} from '../../../../constants/operations';\n\nclass OperationsListPaginator extends Component {\n static propTypes = {\n // from connect\n gotoOperationsPage: PropTypes.func.isRequired,\n firstPageReached: PropTypes.bool.isRequired,\n lastPageReached: PropTypes.bool.isRequired,\n };\n\n gotoFirstPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.FIRST);\n };\n gotoLastPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.LAST);\n };\n gotoNextPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.NEXT);\n };\n gotoPrevPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.PREV);\n };\n\n render() {\n const {firstPageReached, lastPageReached} = this.props;\n\n return (\n <Pagination\n size=\"s\"\n first={{\n handler: this.gotoFirstPage,\n disabled: firstPageReached,\n }}\n previous={{\n handler: this.gotoPrevPage,\n hotkeyHandler: this.gotoPrevPage,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n }}\n next={{\n handler: this.gotoNextPage,\n hotkeyHandler: this.gotoNextPage,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n }}\n last={{\n handler: this.gotoLastPage,\n disabled: lastPageReached,\n }}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {firstPageReached, lastPageReached} = operations.list.cursor;\n return {firstPageReached, lastPageReached};\n}\n\nconst mapDispatchToProps = {\n gotoOperationsPage,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OperationsListPaginator);\n","import {createSelector} from 'reselect';\nimport filter_ from 'lodash/filter';\nimport reduce_ from 'lodash/reduce';\nimport every_ from 'lodash/every';\nimport isEqual_ from 'lodash/isEqual';\n\nimport {RootState} from '../../../store/reducers';\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../utils/utils';\nimport {getSettingsDataRaw} from '../../../store/selectors/settings/settings-ts';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\nimport {NS_SEPARATOR} from '../../../../shared/utils/settings';\nimport {\n OPERATIONS_LIST_DEFAULT_FILTERS,\n OPERATIONS_LIST_RUNNING_PRESET,\n} from '../../../constants/operations/list';\nimport {getCurrentUserName} from '../global';\nimport {getOperationsListFilters} from '.';\nimport {\n OperationPresetsSettings,\n OperationsListPreset,\n} from '../../../../shared/constants/settings-types';\n\nexport const getOperationsListIsFinalState = createSelector(\n [\n (state: RootState) => state.operations.list.isLoading,\n (state: RootState) => state.operations.list.hasLoaded,\n (state: RootState) => state.operations.list.hasError,\n ],\n (loading, loaded, error) => {\n const status = calculateLoadingStatus(loading, loaded, error);\n return isFinalLoadingStatus(status);\n },\n);\n\n/**\n * \n * \n \n\n \n\n * \n * @param login \n * @returns \n */\n\nfunction createPreconfiguredPresets(login: string) {\n return {\n [OPERATIONS_LIST_RUNNING_PRESET]: {\n name: 'My/Running',\n preconfigured: true,\n filters: {\n ...OPERATIONS_LIST_DEFAULT_FILTERS,\n user: login,\n state: 'running',\n },\n },\n ['failed']: {\n name: 'My/Failed',\n preconfigured: true,\n filters: {\n ...OPERATIONS_LIST_DEFAULT_FILTERS,\n user: login,\n state: 'failed',\n },\n },\n };\n}\n\nexport const getOperationsListFilterPresets = createSelector(\n [getSettingsDataRaw, getCurrentUserName],\n (data, login): Record<string, OperationsListPreset> => {\n const collectionKeys: Array<keyof OperationPresetsSettings> = filter_(\n Object.keys(data) as Array<keyof OperationPresetsSettings>,\n (path) => path.startsWith(NAMESPACES.OPERATION_PRESETS.value),\n );\n return {\n ...createPreconfiguredPresets(login),\n ...reduce_(\n collectionKeys,\n (collection, path) => {\n const settingName = path.slice(\n (NAMESPACES.OPERATION_PRESETS.value + NS_SEPARATOR).length,\n );\n collection[settingName] = {...data[path]};\n return collection;\n },\n {} as Record<string, OperationPresetsSettings>,\n ),\n };\n },\n);\n\nexport const getOperationsListActivePresets = createSelector(\n [getOperationsListFilters, getOperationsListFilterPresets],\n (selectedFilters, presets) => {\n return reduce_(\n presets,\n (acc, {filters}, presetId) => {\n const active = every_(filters, (value, k) => {\n const key: keyof typeof selectedFilters = k as any;\n return isEqual_(selectedFilters[key]?.value, value);\n });\n if (active) {\n acc.add(presetId);\n }\n return acc;\n },\n new Set<string>(),\n );\n },\n);\n","import React, {Component} from 'react';\nimport {withRouter} from 'react-router';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, Checkbox, TextInput} from '@gravity-ui/uikit';\n\nimport {NAMESPACES} from '../../../../../shared/constants/settings';\nimport {\n applyFilterPreset,\n removeFilterPreset,\n saveFilterPreset,\n toggleSaveFilterPresetDialog,\n} from '../../../../store/actions/operations';\nimport {DEFAULT_PRESET_SETTING} from '../../../../constants/operations';\nimport {OPERATIONS_LIST_RUNNING_PRESET} from '../../../../constants/operations/list';\n\nimport {makeGetSetting} from '../../../../store/selectors/settings';\nimport {\n getOperationsListActivePresets,\n getOperationsListFilterPresets,\n} from '../../../../store/selectors/operations/operations-list';\nimport Modal from '../../../../components/Modal/Modal';\nimport Icon from '../../../../components/Icon/Icon';\n\nimport './OperationsFilterPresets.scss';\n\nconst ELEMENT = 'toolbar-presets';\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\n\nclass OperationsFilterPresets extends Component {\n static propTypes = {\n // from connect\n applyFilterPreset: PropTypes.func.isRequired,\n removeFilterPreset: PropTypes.func.isRequired,\n saveFilterPreset: PropTypes.func.isRequired,\n toggleSaveFilterPresetDialog: PropTypes.func.isRequired,\n presets: PropTypes.objectOf(\n PropTypes.shape({\n failedJobs: PropTypes.bool,\n pool: PropTypes.string,\n state: PropTypes.string,\n text: PropTypes.string,\n type: PropTypes.string,\n user: PropTypes.string,\n }),\n ).isRequired,\n defaultPreset: PropTypes.string,\n dialog: PropTypes.shape({\n isSaving: PropTypes.bool.isRequired,\n name: PropTypes.string.isRequired,\n isDefault: PropTypes.bool.isRequired,\n }).isRequired,\n // from react-router\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n };\n\n state = {\n presetName: '',\n isPresetDefault: false,\n };\n\n componentDidMount() {\n const {applyFilterPreset, defaultPreset, presets, location} = this.props;\n\n if (location.search.length <= 1) {\n applyFilterPreset(presets[defaultPreset], false);\n }\n }\n\n onConfirm = () => {\n const {saveFilterPreset, toggleSaveFilterPresetDialog} = this.props;\n const {presetName, isPresetDefault} = this.state;\n saveFilterPreset(presetName, isPresetDefault).then(() => {\n this.setState({\n presetName: '',\n isPresetDefault: false,\n });\n toggleSaveFilterPresetDialog();\n });\n };\n\n makeRemoveHandler = (presetId) => {\n return (event) => {\n event.stopPropagation();\n this.props.removeFilterPreset(presetId);\n };\n };\n\n isPresetNameEmpty = () => !this.state.presetName;\n\n renderSavePresetDialog() {\n const {dialog, toggleSaveFilterPresetDialog} = this.props;\n const {presetName, isPresetDefault} = this.state;\n\n const block = cn('elements-form');\n const INPUT_ID = 'save-preset-filter';\n\n return (\n <Modal\n title=\"Save filter\"\n confirmText=\"Save\"\n visible={dialog.isSaving}\n onCancel={toggleSaveFilterPresetDialog}\n onConfirm={this.onConfirm}\n isConfirmDisabled={this.isPresetNameEmpty}\n content={\n <React.Fragment>\n <div className={block('field')}>\n <label\n htmlFor={INPUT_ID}\n className={block('label')}\n title=\"Filter name\"\n >\n Filter name\n </label>\n <TextInput\n id={INPUT_ID}\n value={presetName}\n onUpdate={(presetName) => this.setState({presetName})}\n autoFocus\n />\n </div>\n <div className={block('field')}>\n <Checkbox\n checked={isPresetDefault}\n onChange={(isPresetDefault) => this.setState({isPresetDefault})}\n >\n Default filter\n </Checkbox>\n </div>\n </React.Fragment>\n }\n />\n );\n }\n\n render() {\n const {defaultPreset, presets, applyFilterPreset, activePresets} = this.props;\n\n return (\n <div className={block(ELEMENT, tbBlock('container'))}>\n {this.renderSavePresetDialog()}\n {map_(presets, (preset, presetId) => {\n const active = activePresets.has(presetId);\n return (\n <div className={block(ELEMENT, tbBlock('component'))} key={presetId}>\n <Button\n className={block('preset', {active})}\n onClick={() => applyFilterPreset(preset)}\n role=\"button\"\n selected={active}\n >\n <span className={block('preset-content')}>\n <span className={block('preset-name')}>\n {defaultPreset === presetId && <Icon awesome=\"star-alt\" />}\n  \n {preset.name}\n </span>\n {!preset.preconfigured && (\n <span\n className={block('preset-remove')}\n onClick={this.makeRemoveHandler(presetId)}\n >\n <Icon face=\"solid\" awesome=\"times\" />\n </span>\n )}\n </span>\n </Button>\n </div>\n );\n })}\n </div>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {operations} = state;\n\n const getSetting = makeGetSetting(state);\n let defaultPreset = getSetting(DEFAULT_PRESET_SETTING, NAMESPACES.OPERATION);\n const presets = getOperationsListFilterPresets(state);\n\n if (!presets[defaultPreset]) {\n defaultPreset = OPERATIONS_LIST_RUNNING_PRESET;\n }\n\n return {\n presets,\n activePresets: getOperationsListActivePresets(state),\n defaultPreset,\n dialog: operations.list.savePresetDialog,\n };\n}\n\nconst mapDispatchToProps = {\n applyFilterPreset,\n removeFilterPreset,\n saveFilterPreset,\n toggleSaveFilterPresetDialog,\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsFilterPresets));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport filter_ from 'lodash/filter';\n\nimport Suggest, {itemsProps} from '../../../components/Suggest/Suggest';\n\nexport default class OperationSuggestFilter extends Component {\n static propTypes = {\n // from props\n name: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n statesProvider: PropTypes.func,\n // from connect\n updateFilter: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n defaultValue: PropTypes.string.isRequired,\n states: itemsProps,\n pin: PropTypes.string,\n };\n\n static simpleSuggestLoader(items, text) {\n text = text.toLowerCase();\n\n items = filter_(items, (item) => {\n const itemText = typeof item === 'string' ? item : item.value;\n\n return text ? itemText.toLowerCase().indexOf(text) !== -1 : true;\n });\n\n return items;\n }\n\n render() {\n const {states, name, placeholder, updateFilter, value, defaultValue, pin} = this.props;\n\n return (\n <Suggest\n key={value}\n apply={(newValue) => updateFilter(name, newValue || defaultValue)}\n filter={OperationSuggestFilter.simpleSuggestLoader}\n text={value !== defaultValue ? value : ''}\n items={states}\n placeholder={placeholder}\n zIndexGroupLevel={1}\n clear={() => updateFilter(name, defaultValue)}\n pin={pin}\n />\n );\n }\n}\n","import React from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\n\nimport OperationSuggestFilter from '../../../../pages/operations/OperationSuggestFilter/OperationSuggestFilter';\nimport {updateFilter} from '../../../../store/actions/operations/list';\nimport {getActualValue} from '../../../../pages/operations/selectors';\nimport {\n getOperationsListFilters,\n getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838,\n getOperationsPoolSuggestions,\n getOperationsPoolTreeSuggestions,\n getOperationsUserSuggestions,\n} from '../../../../store/selectors/operations';\nimport {RootState} from '../../../../store/reducers';\nimport {OperationsListFilterName} from '../../../../store/reducers/operations/list/list';\nimport UIFactory from '../../../../UIFactory';\n\nconst mapStateToPropsByFilterName = (state: RootState, name: OperationsListFilterName) => {\n const filters = getOperationsListFilters(state);\n const {defaultValue, value} = filters[name];\n\n return {\n name,\n value: getActualValue(value, defaultValue),\n defaultValue,\n };\n};\n\nconst mapPoolTreeStateToProps = (state: RootState) => {\n return {\n ...mapStateToPropsByFilterName(state, 'poolTree'),\n states: getOperationsPoolTreeSuggestions(state),\n placeholder: 'Pool tree...',\n };\n};\n\nexport const OperationsListPoolTreeSuggestFilter = connect(mapPoolTreeStateToProps, {updateFilter})(\n OperationSuggestFilter,\n);\n\nconst mapPoolStateToProps = (state: RootState) => {\n return {\n ...mapStateToPropsByFilterName(state, 'pool'),\n states: getOperationsPoolSuggestions(state),\n placeholder: 'Filter pool...',\n };\n};\nexport const OperationsListPoolSuggestFilter = connect(mapPoolStateToProps, {\n updateFilter,\n})(OperationSuggestFilter);\n\nconst mapUserStateToProps = (state: RootState) => {\n const fixedStartedByFilter = getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838(state);\n\n return {\n ...mapStateToPropsByFilterName(state, 'user'),\n states: getOperationsUserSuggestions(state),\n placeholder: fixedStartedByFilter || 'Started by...',\n };\n};\nexport const OperationsListUserSuggestFilter = connect(mapUserStateToProps, {\n updateFilter,\n})(OperationSuggestFilter);\n\nfunction OperationsAccessibleForFilterImpl() {\n const dispatch = useDispatch();\n const {\n subject: {value},\n } = useSelector(getOperationsListFilters);\n\n return (\n <div>\n {UIFactory.renderUserSuggest({\n value: typeof value === 'string' && value ? [value] : [],\n onUpdate: ([first] = []) => {\n dispatch(updateFilter('subject', first));\n },\n width: 'max',\n pin: 'round-clear',\n placeholder: 'Accessible for...',\n hasClear: true,\n })}\n </div>\n );\n}\n\nexport const OperationsAccessibleForFilter = React.memo(OperationsAccessibleForFilterImpl);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\n\nimport map_ from 'lodash/map';\n\nimport {getAllUserNames} from '../../../../store/selectors/global';\nimport OperationsTextFilter from './OperationsTextFilter';\nimport OperationsArchiveFilter from './OperationsArchiveFilter';\nimport OperationsSelectFilter from './OperationsSelectFilter';\n\nimport OperationsListPaginator from './OperationsListPaginator';\nimport OperationsFilterPresets from './OperationsFilterPresets';\nimport {\n toggleSaveFilterPresetDialog,\n updateFilter,\n} from '../../../../store/actions/operations/list';\n\nimport {\n OperationsAccessibleForFilter,\n OperationsListPoolSuggestFilter,\n OperationsListPoolTreeSuggestFilter,\n OperationsListUserSuggestFilter,\n} from '../../../../pages/operations/OperationsList/OperationsListToolbar/OperationsListSuggestFilters';\nimport {getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838} from '../../../../store/selectors/operations';\nimport Button, {SelectButton} from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport {PoolTreesLoader} from '../../../../hooks/global-pool-trees';\n\nimport './OperationsListToolbar.scss';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\nconst tbComp = tbBlock('component');\n\nclass OperationsListToolbar extends React.PureComponent {\n static propTypes = {\n // from connect\n updateFilter: PropTypes.func.isRequired,\n toggleSaveFilterPresetDialog: PropTypes.func.isRequired,\n failedJobsFilter: PropTypes.shape({\n type: PropTypes.string.isRequired,\n defaultValue: PropTypes.bool.isRequired,\n value: PropTypes.bool,\n }).isRequired,\n subjects: PropTypes.arrayOf(PropTypes.string).isRequired,\n // from props\n inDashboard: PropTypes.bool,\n };\n\n preparePermissionsPlaceholder(permissions) {\n if (permissions.length === 0) {\n return 'Select...';\n }\n\n const labels = map_(permissions, (permission) => permission[0].toUpperCase());\n\n return labels.join(', ');\n }\n\n renderTopSection() {\n return (\n <div className={tbBlock('container')}>\n <OperationsTextFilter />\n\n <div className={block('toolbar-pool-filter', tbComp)}>\n <PoolTreesLoader />\n <OperationsListPoolTreeSuggestFilter pin=\"round-clear\" />\n <OperationsListPoolSuggestFilter pin=\"brick-round\" />\n </div>\n\n <OperationsArchiveFilter />\n\n <div className={block('toolbar-pagination', tbComp)}>\n <OperationsListPaginator />\n </div>\n </div>\n );\n }\n\n renderBottomSection() {\n const {failedJobsFilter, updateFilter, toggleSaveFilterPresetDialog} = this.props;\n\n return (\n <div className={tbBlock('container')}>\n <div className={block('toolbar-user-filter', tbComp)}>\n <OperationsListUserSuggestFilter />\n </div>\n\n <div className={block('toolbar-access-filters', tbComp)}>\n <OperationsAccessibleForFilter pin=\"round-clear\" />\n <OperationsSelectFilter\n type=\"check\"\n name=\"permissions\"\n withCounters={false}\n placeholder={this.preparePermissionsPlaceholder}\n states={[\n {\n name: 'read',\n show: true,\n },\n {\n name: 'manage',\n show: true,\n },\n ]}\n width={170}\n multiple\n pin=\"brick-round\"\n />\n </div>\n\n <div className={block('toolbar-state-filter', tbComp)}>\n <OperationsSelectFilter\n name=\"state\"\n states={[\n {\n name: 'all',\n caption: 'All states',\n show: true,\n },\n {\n name: 'pending',\n show: true,\n },\n {\n name: 'running',\n show: true,\n },\n {\n name: 'completed',\n show: true,\n },\n {\n name: 'failed',\n show: true,\n },\n {\n name: 'aborted',\n show: true,\n },\n ]}\n width={200}\n />\n </div>\n\n <div className={block('toolbar-type-filter', tbComp)}>\n <OperationsSelectFilter\n name=\"type\"\n states={[\n {\n name: 'all',\n caption: 'All types',\n show: true,\n },\n {\n name: 'map',\n show: true,\n },\n {\n name: 'reduce',\n show: true,\n },\n {\n name: 'map_reduce',\n show: true,\n },\n {\n name: 'join_reduce',\n show: true,\n },\n {\n name: 'merge',\n show: true,\n },\n {\n name: 'sort',\n show: true,\n },\n {\n name: 'erase',\n show: true,\n },\n {\n name: 'remote_copy',\n show: true,\n },\n {\n name: 'vanilla',\n show: true,\n },\n ]}\n width={200}\n />\n </div>\n\n <div className={block('failed-jobs', tbComp)}>\n <SelectButton\n selected={failedJobsFilter.value}\n onClick={() => updateFilter('failedJobs', !failedJobsFilter.value)}\n >\n Only ops with failed jobs:{' '}\n <span className={block('only-jobs-with-failed-counter')}>\n {failedJobsFilter.counter}\n </span>\n </SelectButton>\n </div>\n\n <div className={block('toolbar-save-preset', tbComp)}>\n <Button\n title=\"Save filter\"\n onClick={toggleSaveFilterPresetDialog}\n className={block('save-preset')}\n >\n <Icon awesome={'save'} face={'regular'} />\n Save filter\n </Button>\n </div>\n </div>\n );\n }\n\n renderWarning_uiissue_2838() {\n return (\n <div className={block('ytfront-2838')}>\n At the moment there is the unresolved performance issue with getting unfiltered list\n of operations from archive,\n <br />\n as a temporary solution UI adds current username to "Started by" filter if\n there are no any other filters specified.\n </div>\n );\n }\n\n render() {\n const {fixedStartedByFilter, children} = this.props;\n\n return (\n <StickyContainer hideShadow keepWidth>\n {({stickyTop: sticky, stickyTopClassName}) => (\n <React.Fragment>\n <div\n className={block('toolbar', {sticky}, [tbBlock(), stickyTopClassName])}\n >\n {this.renderTopSection()}\n {this.renderBottomSection()}\n {fixedStartedByFilter && this.renderWarning_uiissue_2838()}\n <OperationsFilterPresets />\n </div>\n {children}\n </React.Fragment>\n )}\n </StickyContainer>\n );\n }\n}\n\nfunction OperationsListToolbarHooked({children}) {\n const subjects = useSelector(getAllUserNames);\n const {failedJobs} = useSelector((state) => state.operations.list.filters) || {};\n const fixedStartedByFilter = useSelector(\n getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838,\n );\n\n const dispatch = useDispatch();\n const handleUpdateFilter = React.useCallback(\n (...args) => {\n dispatch(updateFilter(...args));\n },\n [dispatch],\n );\n\n const handleToggleSaveFilterPresetDialog = React.useCallback(\n (...args) => {\n dispatch(toggleSaveFilterPresetDialog(...args));\n },\n [dispatch],\n );\n\n return (\n <OperationsListToolbar\n {...{\n subjects,\n failedJobsFilter: failedJobs,\n fixedStartedByFilter,\n }}\n updateFilter={handleUpdateFilter}\n toggleSaveFilterPresetDialog={handleToggleSaveFilterPresetDialog}\n >\n {children}\n </OperationsListToolbar>\n );\n}\n\nexport default React.memo(OperationsListToolbarHooked);\n","import React, {Component} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport moment from 'moment';\n\nimport {YTErrorBlock} from '../../../components/Error/Error';\n\nimport OperationsListTable from './OperationsListTable/OperationsListTable';\nimport OperationsListToolbar from './OperationsListToolbar/OperationsListToolbar';\nimport {updateOperationsByParams} from '../../../store/actions/operations/list';\nimport {useMemoizedIfEqual, useUpdater} from '../../../hooks';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../rum/RumUiContext';\nimport {getOperationsListIsFinalState} from '../../../store/selectors/operations/operations-list';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getListRequestParameters} from '../../../store/actions/operations/utils';\n\nconst block = cn('operations-list');\n\nfunction OperationListUpdater({timeRange}) {\n const dispatch = useDispatch();\n\n const cluster = useSelector(getCluster);\n const parameters = useSelector(getListRequestParameters);\n\n const params = useMemoizedIfEqual(cluster, parameters);\n\n const updateFn = React.useCallback(() => {\n dispatch(updateOperationsByParams(...params));\n }, [dispatch, params]);\n\n useUpdater(updateFn, {onlyOnce: isBigTimeRange(timeRange)});\n\n return null;\n}\n\nfunction isBigTimeRange(timeRange) {\n const {from, to} = timeRange;\n if (typeof from === 'string' && typeof to === 'string') {\n const dateFrom = moment(from);\n const dateTo = moment(to);\n const diff = dateTo.diff(dateFrom);\n\n return moment.duration(diff).asDays() >= 1;\n }\n\n return false;\n}\n\nclass OperationsList extends Component {\n static propTypes = {\n // from connect\n isLoading: PropTypes.bool.isRequired,\n hasLoaded: PropTypes.bool.isRequired,\n hasError: PropTypes.bool.isRequired,\n error: PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.object,\n }),\n timeRange: PropTypes.shape({\n from: PropTypes.string,\n to: PropTypes.string,\n }).isRequired,\n // from props\n inDashboard: PropTypes.bool,\n };\n\n static defaultProps = {\n inDashboard: false,\n };\n\n isTimeRangeChanged(prevTimeRange) {\n const {timeRange} = this.props;\n\n return timeRange.from !== prevTimeRange.from || timeRange.to !== prevTimeRange.to;\n }\n\n renderError() {\n const {\n error: {message, details},\n } = this.props;\n return <YTErrorBlock message={message} error={details} />;\n }\n\n firstTimeError() {\n const {hasLoaded, hasError} = this.props;\n return hasError && !hasLoaded;\n }\n\n render() {\n const {hasError, inDashboard, timeRange} = this.props;\n\n return (\n <div className={block()}>\n <OperationListUpdater timeRange={timeRange} />\n {inDashboard && (\n <div className={cn('elements-heading')({size: 'l'})}>Operations</div>\n )}\n <OperationsListToolbar>\n {hasError && this.renderError()}\n {!this.firstTimeError() && <OperationsListTable />}\n </OperationsListToolbar>\n </div>\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {isLoading, hasLoaded, hasError, error, timeRange} = operations.list;\n\n return {\n timeRange,\n isLoading,\n hasLoaded,\n hasError,\n error,\n };\n}\n\nconst OperationsListConnected = connect(mapStateToProps)(OperationsList);\n\nfunction OperationsListWithRum() {\n const isFinalStatus = useSelector(getOperationsListIsFinalState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATIONS_LIST,\n startDeps: [isFinalStatus],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATIONS_LIST,\n stopDeps: [isFinalStatus],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OperationsListConnected />;\n}\n\nexport default React.memo(OperationsListWithRum);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {\n RawSerieData,\n YTChartKitLazy,\n YagrWidgetData,\n getSerieColor,\n} from '../../components/YTChartKit';\nimport './YTHistogram.scss';\n\nimport format from '../../common/hammer/format';\n\nconst block = cn('yt-histogram');\n\nexport interface YTHistorgramData {\n min: number;\n max: number;\n count: Array<number>;\n}\n\nexport interface AxisInfo {\n label?: string;\n}\n\nexport interface YTHistogramProps {\n className?: string;\n xLabel?: string;\n yLabel?: string;\n yLogarithmic?: boolean;\n yMin?: number;\n xFormat?: (v?: number | string | null) => string;\n yFormat?: (v?: number | string | null) => string;\n renderTooltip?: (value: string | undefined, xl: string, xr: string) => string;\n data: YTHistorgramData;\n}\n\nfunction YTHistogram({\n className,\n data,\n xLabel,\n yLabel,\n yLogarithmic,\n yMin,\n xFormat = format.Number,\n yFormat = format.Number,\n renderTooltip = renderDefaultTooltip,\n}: YTHistogramProps) {\n const yagrData = React.useMemo(() => {\n const {timeline, serieData, step} = genYagrData(data);\n const graphs: Array<RawSerieData> = [\n {\n type: 'column' as const,\n data: yLogarithmic ? serieData.map((v) => (v === 0 ? NaN : v)) : (serieData as any),\n color: getSerieColor(0),\n formatter: yFormat,\n ...{\n renderOptions: {\n size: [1],\n gap: 1,\n },\n },\n },\n ];\n\n const res: YagrWidgetData = {\n data: {\n timeline,\n graphs,\n },\n libraryConfig: {\n axes: {\n x: {\n label: xLabel,\n values: (_d: unknown, x: Array<any>) => x.map(xFormat),\n },\n y: {\n label: yLabel,\n },\n },\n scales: {\n y: {\n min: yMin,\n type: yLogarithmic ? 'logarithmic' : 'linear',\n },\n },\n tooltip: {\n render: (tooltipData) => {\n const {\n x,\n scales: [\n {\n rows: [row],\n },\n ],\n } = tooltipData;\n\n const {originalValue} = row;\n\n return (\n renderTooltip(\n yFormat(isNaN(originalValue!) ? 0 : originalValue),\n xFormat(x - step / 2),\n xFormat(x + step / 2),\n ) ?? '-'\n );\n },\n },\n },\n };\n return res;\n }, [data, xLabel, yLabel, xFormat, yFormat, renderTooltip, yMin, yLogarithmic]);\n\n return (\n <div className={block(null, className)}>\n <YTChartKitLazy type={'yagr'} data={yagrData} />\n </div>\n );\n}\n\nexport default React.memo(YTHistogram);\n\nfunction genYagrData({min, max, count}: YTHistorgramData) {\n const step = min === max ? 1 : (max - min) / Math.max(count.length, 1);\n\n const serieData = [undefined, ...count];\n const timeline = [min - step / 2];\n if (count.length > 1) {\n for (let i = 0; i < count.length; ++i) {\n timeline.push(min + i * step + step / 2);\n }\n } else {\n timeline.push(min);\n }\n timeline.push(max + step / 2);\n serieData.push(undefined);\n\n return {timeline, serieData, step: min === max ? 0 : step};\n}\n\nconst renderDefaultTooltip: Required<YTHistogramProps>['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> for range from <b>${x0}</b> to <b>${x1}</b>`;\n};\n\nexport function calculateFormatSettings(\n data: YTHistorgramData | undefined,\n fmtFn: (v: number, opts?: {digits?: number}) => number,\n) {\n const {min, max} = data ?? {};\n if (min === max || min === undefined || max === undefined) {\n return undefined;\n }\n const v2 = min + (max - min) / 10;\n if (fmtFn(min) !== fmtFn(v2)) {\n return undefined;\n }\n for (let i = 0; i < 5; ++i) {\n const opts = {digits: i + 2};\n const s1 = fmtFn(min, opts);\n const s2 = fmtFn(v2, opts);\n if (s1 !== s2) {\n return {digits: i + 3};\n }\n }\n return undefined;\n}\n","import React from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ypath from '../../../../../../common/thor/ypath';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {getTheme} from '../../../../../../store/selectors/global';\n\nimport {getOperationDetailsLoadingStatus} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport YTHistogram, {\n YTHistogramProps,\n YTHistorgramData,\n calculateFormatSettings,\n} from '../../../../../../components/YTHistogram/YTHistogram';\nimport {RootState} from '../../../../../../store/reducers';\n\nimport './PartitionSizes.scss';\n\nconst block = cn('operation-detail-partition-sizes');\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\ninterface State {\n formatSettings?: {digits: number};\n data?: YTHistorgramData;\n}\n\nclass PartitionSizes extends React.Component<ReduxProps, State> {\n static propTypes = {\n operation: PropTypes.object.isRequired,\n chartKitTheme: PropTypes.string.isRequired,\n };\n\n static getDerivedStateFromProps(props: ReduxProps) {\n const progress = ypath.getValue(props.operation, '/@progress');\n const data = progress && ypath.getValue(progress, '/partition_size_histogram');\n\n return {\n formatSettings: calculateFormatSettings(data, format.Bytes),\n data,\n };\n }\n\n state: State = {};\n\n render() {\n const {data} = this.state;\n if (!data) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <YTHistogram\n className={block('charts')}\n data={data}\n yLabel={'partition count'}\n xLabel={'partition data weight'}\n xFormat={this.formatX}\n yMin={0.5}\n yLogarithmic\n renderTooltip={this.renderTooltip}\n />\n </div>\n </ErrorBoundary>\n );\n }\n\n formatX = (v?: number | string | null) => {\n const {formatSettings} = this.state;\n return format.Bytes(v, formatSettings) as string;\n };\n\n renderTooltip: YTHistogramProps['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> jobs have estimated input job size from ${x0} to ${x1}`;\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n const chartKitTheme = getTheme(state);\n\n return {operation, chartKitTheme};\n};\n\nconst connector = connect(mapStateToProps);\n\nconst PartitionSizesConnected = connector(PartitionSizes);\n\nexport default function PartitionSizesWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PartitionSizesConnected />;\n}\n","import {addI18Keysets} from '../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:alert-events', {en, ru});\n","import React from 'react';\nimport {Column} from '@gravity-ui/react-data-table';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport DataTableYT from '../../components/DataTableYT/DataTableYT';\nimport {Template} from '../../components/MetaTable/templates/Template';\n\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\nimport Icon from '../../components/Icon/Icon';\nimport Link from '../../components/Link/Link';\nimport {showErrorPopup} from '../../utils/utils';\nimport {compareWithUndefined} from '../../utils/sort-helpers';\nimport i18n from './i18n';\n\nimport './AlertEvents.scss';\n\nconst block = cn('alert-events');\n\ninterface Props {\n className?: string;\n items: Array<AlertInfo>;\n}\n\nexport interface AlertInfo {\n from?: string;\n to?: string;\n type: string;\n error: unknown;\n url?: string;\n}\n\nconst columns: Array<Column<AlertInfo>> = [\n {\n name: i18n('columns.type'),\n render({row}) {\n return (\n <span>\n {format.Readable(row.type)}\n {Boolean(row.url) && (\n <Link url={row.url} theme={'secondary'}>\n \n <Icon awesome={'question-circle'} />\n </Link>\n )}\n </span>\n );\n },\n },\n {\n name: i18n('columns.period'),\n render({row}) {\n const {from, to} = row;\n return (\n <React.Fragment>\n <Template.Time\n time={from}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n {' - '}\n {!to ? (\n '...'\n ) : (\n <Template.Time\n time={to}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n )}\n </React.Fragment>\n );\n },\n },\n {\n name: '',\n render({row}) {\n return (\n <ClickableText\n onClick={() => {\n showErrorPopup(row.error as any, {\n type: 'alert',\n hideOopsMsg: true,\n helpURL: row.url,\n });\n }}\n >\n {i18n('details')}\n </ClickableText>\n );\n },\n },\n];\n\nconst VISIBLE_COUNT = 5;\n\nfunction AlertEvents({className, items}: Props) {\n const [allVisible, setAllVisible] = React.useState(false);\n const all = React.useMemo(() => {\n return items.sort((l, r) => {\n return (\n compareWithUndefined(l.to, r.to, -1, -1) ||\n compareWithUndefined(l.from, r.from, -1, 1)\n );\n });\n }, [items]);\n\n const data = React.useMemo(() => {\n return allVisible ? all : all.slice(0, VISIBLE_COUNT);\n }, [allVisible, all]);\n\n const toggleShowAll = React.useCallback(() => {\n setAllVisible(!allVisible);\n }, [allVisible, setAllVisible]);\n\n return (\n <div className={className}>\n <DataTableYT\n className={block()}\n columns={columns}\n data={data}\n settings={{displayIndices: false, sortable: false}}\n useThemeYT\n disableRightGap\n rowClassName={(row) => {\n return block('row', {current: !row.to});\n }}\n />\n {all.length > VISIBLE_COUNT ? (\n <ClickableText onClick={toggleShowAll}>\n {allVisible ? i18n('less') : i18n('more')}\n </ClickableText>\n ) : null}\n </div>\n );\n}\n\nexport default React.memo(AlertEvents);\n","import React, {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';\n\nimport {\n getCompetitiveJobs,\n getJobs,\n hideInputPaths,\n showInputPaths,\n} from '../../../../../../store/actions/operations/jobs';\nimport {openAttributesModal} from '../../../../../../store/actions/modals/attributes-modal';\nimport {promptAction, showErrorModal} from '../../../../../../store/actions/actions';\nimport {performJobAction} from '../utils';\nimport {LOADING_STATUS} from '../../../../../../constants/index';\nimport {PLEASE_PROCEED_TEXT} from '../../../../../../utils/actions';\nimport {getShowCompetitiveJobs} from '../../../../../../pages/operations/selectors';\nimport {getJobsOperationId} from '../../../../../../store/selectors/operations/jobs';\nimport {\n getOperationId,\n getOperationTasksNames,\n} from '../../../../../../store/selectors/operations/operation';\nimport UIFactory from '../../../../../../UIFactory';\nimport {StaleJobIcon} from '../StaleJobIcon';\n\nimport JobTemplate from './JobTemplate';\nimport './OperationJobsTable.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../../constants/global';\nimport {JobDetails} from './JobDetails';\nimport EllipsisIcon from '@gravity-ui/icons/svgs/ellipsis.svg';\nimport {StatusInfo} from './StatusInfo';\n\nconst block = cn('operation-detail-jobs');\n\nclass OperationJobsTable extends React.Component {\n static propTypes = {\n isLoading: PropTypes.bool.isRequired,\n // from connect\n jobs: PropTypes.arrayOf(PropTypes.object),\n job: PropTypes.object,\n showCompetitiveJobs: PropTypes.bool.isRequired,\n competitiveJobs: PropTypes.arrayOf(PropTypes.object),\n cluster: PropTypes.string.isRequired,\n login: PropTypes.string.isRequired,\n inputPaths: PropTypes.shape({\n status: PropTypes.oneOf(Object.values(LOADING_STATUS)).isRequired,\n paths: PropTypes.arrayOf(PropTypes.string),\n error: PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.object,\n }),\n }),\n\n openAttributesModal: PropTypes.func.isRequired,\n showErrorModal: PropTypes.func.isRequired,\n showInputPaths: PropTypes.func.isRequired,\n hideInputPaths: PropTypes.func.isRequired,\n promptAction: PropTypes.func.isRequired,\n getJobs: PropTypes.func.isRequired,\n getCompetitiveJobs: PropTypes.func.isRequired,\n taskNamesNumber: PropTypes.number,\n };\n\n actions = [\n {\n name: 'abort',\n modalKey: 'job_abort',\n successMessage: 'Successfully aborted the job.',\n errorMessage: 'Could not abort the job.',\n text: 'Abort',\n message:\n 'Aborting job will cause losing its progress, are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n },\n {\n name: 'abandon',\n modalKey: 'job_abandon',\n successMessage: 'Successfully abandoned the job.',\n errorMessage: 'Could not abandon the job.',\n text: 'Abandon',\n message:\n 'Abandoning job will cause losing its progress, are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n },\n {\n name: 'input_context',\n modalKey: 'job_input_context',\n message: (\n <span>\n You are about to <strong>dump input context</strong> of the job\n </span>\n ),\n text: 'Dump input context',\n successMessageTemplate: (data) => {\n const url = `/${this.props.cluster}/navigation?path=${data}`;\n return (\n <span>\n Successfully dumped the job input context <Link url={url}>here</Link>\n </span>\n );\n },\n errorMessage: 'Could not dump the job input context.',\n },\n ];\n\n prepareJobAction = ({text, ...settings}) => {\n const {login, promptAction} = this.props;\n const message = settings.message || (\n <span>\n You are about to <strong>{settings.name}</strong> a job.\n </span>\n );\n\n return {\n text: text,\n action: (params) =>\n promptAction({\n ...settings,\n message,\n handler: ({currentOption}) => {\n const finalParams = {\n ...params,\n name: settings.name,\n currentOption,\n login,\n };\n return performJobAction(finalParams);\n },\n }),\n };\n };\n\n preparedActions = map_(this.actions, this.prepareJobAction);\n\n renderIdAddress = (item) => {\n const {cluster} = this.props;\n const {id, address, job_competition_id, operationId, is_stale, attributes} = item;\n const host = hammer.format['Address'](address);\n\n const from = ypath.getValue(attributes, '/start_time');\n const to = ypath.getValue(attributes, '/finish_time');\n const monitoring_descriptor = ypath.getValue(attributes, '/monitoring_descriptor');\n\n const isSpeculativeJob = job_competition_id && job_competition_id !== id;\n\n return (\n <div>\n <div className={block('id', 'elements-monospace')}>\n <ClipboardButton text={id} view=\"flat-secondary\" size=\"s\" title=\"Copy job id\" />\n <Link\n className={block('id-job-link')}\n routed\n url={`/${cluster}/job/${operationId}/${id}`}\n theme={'primary'}\n >\n {id}\n </Link>\n {is_stale && <StaleJobIcon />}\n </div>\n <div className={block('host', 'elements-monospace')}>\n <span className={block('host-name')}>\n <ClipboardButton\n text={host}\n view=\"flat-secondary\"\n size=\"s\"\n title=\"Copy host\"\n />\n {host}\n </span>\n <span className={block('host-chart-link')}>\n <ChartLink\n url={UIFactory.makeUrlForMonitoringDescriptor(\n cluster,\n {from, to},\n monitoring_descriptor,\n )}\n />\n </span>\n </div>\n {isSpeculativeJob && (\n <Fragment>\n <br />\n <span\n className={block(\n 'speculative-job-label',\n 'elements-monospace elements-ellipsis',\n )}\n >\n Speculative job for {job_competition_id}\n </span>\n </Fragment>\n )}\n </div>\n );\n };\n\n renderErrorAndDebug = (item) => {\n const items = [\n {\n key: 'error',\n value: <JobTemplate.Error error={item.error} />,\n visible: Boolean(item.error),\n },\n {\n key: 'input_paths',\n value: <JobTemplate.InputPaths job={item} />,\n visible: item.areInputPathsPresent(),\n },\n {\n key: 'stderr',\n value: <JobTemplate.DebugInfo job={item} type=\"stderr\" />,\n visible: item.getDebugInfo('stderr').size > 0,\n },\n {\n key: 'fail_context',\n value: <JobTemplate.DebugInfo job={item} type=\"fail_context\" />,\n visible: item.getDebugInfo('fail_context').size > 0,\n },\n {\n key: 'full_input',\n value: <JobTemplate.DebugInfo job={item} type=\"full_input\" />,\n visible: Boolean(item.has_spec),\n },\n ];\n\n return <MetaTable items={items} />;\n };\n\n renderActions = (item) => {\n const {openAttributesModal} = this.props;\n\n const button = (\n <Button view=\"flat-secondary\" title=\"Show actions\">\n <Icon data={EllipsisIcon} size={16} />\n </Button>\n );\n const firstGroup = map_(this.preparedActions, ({action, text}) => ({\n text,\n action: () => action({item}),\n }));\n\n const secondGroup = [\n {\n text: 'Show attributes',\n action: () =>\n openAttributesModal({\n title: item.id,\n attributes: item.attributes,\n }),\n },\n ];\n\n return item.state === 'running' ? (\n <DropdownMenu switcher={button} items={[firstGroup, secondGroup]} />\n ) : (\n <DropdownMenu switcher={button} items={secondGroup} />\n );\n };\n\n settings = {\n css: block(),\n theme: 'light',\n size: 's',\n striped: false,\n virtual: false,\n tableId: OPERATION_JOBS_TABLE_ID,\n computeKey: (item) => item.id,\n columns: {\n items: {\n id_address: {\n name: 'id_address',\n align: 'left',\n caption: 'Id / Address',\n sort: false,\n },\n task_name: {\n name: 'task_name',\n align: 'left',\n caption: 'Task name',\n sort: true,\n },\n start_time: {\n name: 'start_time',\n align: 'left',\n caption: 'Start time',\n sort: true,\n },\n finish_time: {\n name: 'finish_time',\n align: 'left',\n caption: 'Finish time',\n sort: true,\n },\n duration: {\n get(job) {\n return job.duration;\n },\n sort: true,\n name: 'duration',\n align: 'left',\n },\n error: {\n name: 'error',\n align: 'left',\n caption: 'Error / Debug',\n get: (job) => job.error,\n },\n type: {\n name: 'type',\n align: 'left',\n sort: true,\n },\n progress: {\n name: 'progress',\n align: 'left',\n sort: true,\n },\n actions: {\n name: 'actions',\n align: 'right',\n caption: '',\n sort: false,\n },\n },\n sets: {\n default: {\n items: [\n 'id_address',\n 'type',\n 'progress',\n 'error',\n 'start_time',\n 'finish_time',\n 'duration',\n 'actions',\n ],\n },\n withTaskName: {\n items: [\n 'id_address',\n 'type',\n 'progress',\n 'error',\n 'task_name',\n 'start_time',\n 'finish_time',\n 'duration',\n 'actions',\n ],\n },\n },\n mode: this.props.taskNamesNumber > 1 ? 'withTaskName' : 'default',\n },\n templates: {\n id_address: this.renderIdAddress,\n type: this.renderType,\n progress: this.renderProgress,\n error: this.renderErrorAndDebug,\n start_time: this.renderStartTime,\n finish_time: this.renderFinishTime,\n duration: this.renderDuration,\n actions: this.renderActions,\n task_name: this.renderTaskName,\n },\n };\n\n renderTaskName(item) {\n return <div className={block('task-name', 'elements-ellipsis')}>{item.task_name}</div>;\n }\n\n renderProgress(item) {\n const {state, progress, brief_statistics, type, interruption_info} = item;\n\n return (\n <div className={block('state')}>\n <div className={block('state-section', 'elements-ellipsis')}>\n <StatusInfo info={interruption_info} state={state} />\n </div>\n <div className={block('state-section')}>\n <JobTemplate.Progress state={state} progress={progress} />\n </div>\n <JobDetails statistics={brief_statistics} type={type} />\n </div>\n );\n }\n\n renderStartTime(item) {\n return (\n <span className={block('start-time', 'elements-ellipsis')}>\n {hammer.format['DateTime'](item.startTime)}\n </span>\n );\n }\n\n renderFinishTime(item) {\n return item.state === 'running' ? (\n <span className={block('in-progress', 'elements-ellipsis elements-secondary-text')}>\n In progress...\n </span>\n ) : (\n <span className={block('finish-time elements-ellipsis')}>\n {hammer.format['DateTime'](item.finishTime)}\n </span>\n );\n }\n\n renderDuration(item) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['TimeDuration'](item.duration)}\n </span>\n );\n }\n\n renderType(item) {\n return <span>{hammer.format['ReadableField'](item.type)}</span>;\n }\n\n renderInputPathsModal() {\n const {\n inputPaths: {paths, status, error},\n hideInputPaths,\n } = this.props;\n\n if (status === LOADING_STATUS.UNINITIALIZED) {\n return null;\n }\n\n const ysonSettings = unipika.prepareSettings();\n const content =\n status === LOADING_STATUS.ERROR ? (\n <YTErrorBlock {...error} />\n ) : (\n <Yson value={paths} settings={ysonSettings} />\n );\n\n return (\n <SimpleModal\n visible\n onCancel={hideInputPaths}\n loading={status === LOADING_STATUS.LOADING}\n onOutsideClick={hideInputPaths}\n title=\"Input paths\"\n >\n {content}\n </SimpleModal>\n );\n }\n\n render() {\n const {jobs, showCompetitiveJobs, getJobs, isLoading, collapsibleSize} = this.props;\n if (showCompetitiveJobs) {\n const {job, competitiveJobs, getCompetitiveJobs} = this.props;\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={[job].filter(Boolean)}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n {competitiveJobs.length > 0 && (\n <CollapsibleSection\n name=\"All competitive jobs\"\n className={block('competitive-jobs')}\n collapsed={true}\n size={collapsibleSize}\n >\n <ElementsTable\n {...this.settings}\n items={competitiveJobs}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n </CollapsibleSection>\n )}\n </Fragment>\n );\n }\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={jobs}\n onSort={getJobs}\n isLoading={isLoading}\n />\n </Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state, props) {\n const {operations, global} = state;\n const {cluster, login} = global;\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\n const taskNamesNumber = getOperationTasksNames(state)?.length;\n const jobsOperationId = getJobsOperationId(state);\n const operationId = getOperationId(state);\n const {jobs, job, competitiveJobs, inputPaths} = operations.jobs;\n return {\n jobs: operationId !== jobsOperationId ? [] : jobs,\n job,\n competitiveJobs,\n showCompetitiveJobs,\n inputPaths,\n cluster,\n login,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n isLoading: props.isLoading || operationId !== jobsOperationId,\n taskNamesNumber,\n };\n}\n\nconst mapDispatchToProps = {\n openAttributesModal,\n showInputPaths,\n hideInputPaths,\n showErrorModal,\n promptAction,\n getJobs,\n getCompetitiveJobs,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OperationJobsTable);\n","import moment from 'moment';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport hammer from '../../../../../common/hammer';\nimport {getMetrics} from '../../../../../common/utils/metrics';\n\nfunction createTemporaryPath(login) {\n const temporaryPathBase = '//tmp/ui/' + login;\n\n return yt.v3\n .create({\n path: temporaryPathBase,\n type: 'map_node',\n recursive: true,\n ignore_existing: true,\n })\n .then(() => {\n const temporaryPath = '/input_context_' + hammer.format['toBase26'](moment().unix());\n return temporaryPathBase + temporaryPath;\n });\n}\n\nexport function performJobAction({login, name, item}) {\n const parameters = {job_id: item.id};\n\n getMetrics().countEvent('operation_detail_running-jobs_action', name);\n\n let jobActionPromise;\n\n switch (name) {\n case 'abort':\n jobActionPromise = yt.v3.abortJob(parameters);\n break;\n case 'abandon':\n jobActionPromise = yt.v3.abandonJob(parameters);\n break;\n case 'input_context':\n jobActionPromise = createTemporaryPath(login).then((temporaryPath) => {\n return yt.v3\n .dumpJobContext(\n Object.assign({}, parameters, {\n path: temporaryPath,\n }),\n )\n .then(() => temporaryPath);\n });\n break;\n case 'input':\n jobActionPromise = Promise.resolve('foo');\n break;\n }\n\n return jobActionPromise;\n}\n","import {connect} from 'react-redux';\n\nimport {updateListJobsFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getActualValue} from '../../../../../../pages/operations/selectors';\nimport OperationSelectFilter from '../../../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.jobs.filters;\n const {name, states: initialStates, statesProvider} = ownProps;\n const {defaultValue, value, counters} = filters[name];\n\n const states =\n typeof statesProvider === 'function' ? statesProvider(operations) : initialStates;\n\n return {\n value: getActualValue(value, defaultValue),\n states,\n counters,\n };\n}\n\nexport default connect(mapStateToProps, {\n updateFilter: (name, value) => updateListJobsFilter({name, value}),\n})(OperationSelectFilter);\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Pagination from '../../../../../../components/Pagination/Pagination';\nimport {gotoJobsPage} from '../../../../../../store/actions/operations/jobs';\nimport {OPERATIONS_PAGE} from '../../../../../../constants/operations';\n\nclass JobsPaginator extends React.Component {\n static propTypes = {\n disabled: PropTypes.bool,\n firstPageReached: PropTypes.bool.isRequired,\n lastPageReached: PropTypes.bool.isRequired,\n gotoJobsPage: PropTypes.func.isRequired,\n };\n\n gotoFirstPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.FIRST);\n gotoNextPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.NEXT);\n gotoPrevPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.PREV);\n\n render() {\n const {firstPageReached, lastPageReached, disabled} = this.props;\n\n return (\n <Pagination\n size=\"s\"\n first={{\n handler: this.gotoFirstPage,\n disabled: disabled || firstPageReached,\n }}\n previous={{\n handler: this.gotoPrevPage,\n hotkeyHandler: this.gotoPrevPage,\n disabled: disabled || firstPageReached,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n }}\n next={{\n handler: this.gotoNextPage,\n hotkeyHandler: this.gotoNextPage,\n disabled: disabled || lastPageReached,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n }}\n last={{disabled: true}}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {firstPageReached, lastPageReached, limit, offset} = operations.jobs.pagination;\n return {firstPageReached, lastPageReached, limit, offset};\n}\n\nexport default connect(mapStateToProps, {gotoJobsPage})(JobsPaginator);\n","import {connect} from 'react-redux';\n\nimport OperationSuggestFilter from '../../../../../../pages/operations/OperationSuggestFilter/OperationSuggestFilter';\nimport {updateListJobsFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getActualValue} from '../../../../../../pages/operations/selectors';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.jobs.filters;\n const {statesProvider, name} = ownProps;\n const {defaultValue, value, data} = filters[name];\n const states = statesProvider(data);\n\n return {\n value: getActualValue(value, defaultValue),\n states,\n defaultValue,\n placeholder: `Filter ${name}...`,\n };\n}\n\nexport default connect(mapStateToProps, {\n updateFilter: (name, value) => updateListJobsFilter({name, value}),\n})(OperationSuggestFilter);\n","import React, {Fragment, useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport identity_ from 'lodash/identity';\n\nimport Select from '../../../../../../components/Select/Select';\nimport JobsSuggestFilter from './JobsSuggestFilter';\nimport Filter from '../../../../../../components/Filter/Filter';\n\nimport {updateListJobsFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getFilterValue} from '../../../../selectors';\n\nconst block = cn('operation-detail-jobs');\n\nfunction JobsIdFilter({pin}: Pick<React.ComponentProps<typeof Filter>, 'pin'>) {\n const value = useSelector(getFilterValue('jobId'));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: string) => {\n dispatch(updateListJobsFilter({name: 'jobId', value}));\n }, []);\n\n return (\n <Filter\n size=\"m\"\n placeholder=\"Filter id...\"\n onChange={handleChange}\n value={value ?? ''}\n pin={pin}\n />\n );\n}\n\nfunction JobsFilterBy() {\n const filterBy = useSelector(getFilterValue('filterBy'));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: string) => {\n dispatch(updateListJobsFilter({name: 'filterBy', value}));\n }, []);\n\n return (\n <Fragment>\n <div className={block('toolbar-filter-by-select')}>\n <Select\n value={filterBy ? [filterBy] : []}\n items={map_(['address', 'id'], (value) => {\n return {value};\n })}\n onUpdate={(vals) => handleChange(vals[0])}\n pin=\"round-clear\"\n width=\"max\"\n hideFilter\n />\n </div>\n <div className={block('toolbar-filter-by-value')}>\n {filterBy === 'address' && (\n <JobsSuggestFilter\n name=\"address\"\n statesProvider={identity_}\n pin={'brick-round'}\n />\n )}\n {filterBy === 'id' && <JobsIdFilter pin={'brick-round'} />}\n </div>\n </Fragment>\n );\n}\n\nexport default JobsFilterBy;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport Select from '../../../../../../components/Select/Select';\n\nimport {getFilteredAttributes} from '../../../../../../pages/operations/selectors';\nimport {updateFilteredAttributes} from '../../../../../../store/actions/operations/jobs';\nimport {ATTRIBUTE_ITEMS, ATTRIBUTE_ITEM_NAMES} from '../../../../../../store/selectors/operations';\n\nfunction JobsAttributesFilter(props: {disabled: boolean}) {\n const attributes = useSelector(getFilteredAttributes(ATTRIBUTE_ITEM_NAMES));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: Array<string>) => {\n dispatch(\n updateFilteredAttributes(ATTRIBUTE_ITEM_NAMES, value as typeof ATTRIBUTE_ITEM_NAMES),\n );\n }, []);\n\n return (\n <Select\n {...props}\n multiple\n value={attributes}\n label=\"Attributes:\"\n filterable\n items={ATTRIBUTE_ITEMS}\n onUpdate={handleChange}\n />\n );\n}\n\nexport default JobsAttributesFilter;\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {updateJobsOperationIncarnationFilter} from '../../../../../../store/actions/operations/jobs-operation-incarnations';\nimport OperationSelectFilter from '../../../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\nimport {\n getJobsOperationIncarnationsFilter,\n getJobsOperationIncarnationsValues,\n} from '../../../../../../store/selectors/operations/jobs';\n\nimport './JobsOperationsIncarnationsFilter.scss';\n\nconst block = cn('yt-jobs-incarnation-filter');\n\nexport function JobsOperationIncarnationsFilter({\n disabled,\n wrap,\n}: {\n disabled: boolean;\n wrap: (node: React.ReactNode) => React.ReactNode;\n}) {\n const dispatch = useDispatch();\n\n const filter = useSelector(getJobsOperationIncarnationsFilter);\n const values = useSelector(getJobsOperationIncarnationsValues);\n\n return !values?.length\n ? null\n : wrap(\n <OperationSelectFilter\n name=\"incarnation\"\n states={values.map((name) => ({name, caption: name}))}\n disabled={disabled}\n width={'auto'}\n value={filter}\n updateFilter={(_name: unknown, value: string) => {\n dispatch(updateJobsOperationIncarnationFilter(value));\n }}\n hideClear={false}\n hideFilter={false}\n popupClassName={block('popup')}\n />,\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport hammer from '../../../../../../common/hammer';\nimport JobsSelectFilter from './JobsSelectFilter';\nimport JobsPaginator from './JobsPaginator';\nimport JobsFilterBy from './JobsFilterBy';\nimport JobsAttributesFilter from './JobsAttributesFilter';\n\nimport {getShowCompetitiveJobs} from '../../../../../../pages/operations/selectors';\nimport {getOperationTasksNames} from '../../../../../../store/selectors/operations/operation';\n\nimport {JobsOperationIncarnationsFilter} from './JobsOperationsIncarnationsFilter';\nimport './OperationJobsToolbar.scss';\n\nconst block = cn('operation-detail-jobs');\nconst tbBlock = cn('elements-toolbar');\n\n// TODO: make this a selector inside a specific <JobsTypeFilter> component once we start using reselect library\nfunction extractJobTypes(operations) {\n const initialTypes = ['all'];\n\n const typeCounters = operations.jobs.filters.type.counters;\n return hammer.utils.sortInPredefinedOrder(initialTypes, keys_(typeCounters));\n}\n\nconst tbComp = tbBlock('component');\n\nexport default function OperationJobsToolbar() {\n const showCompetitiveJobs = useSelector(getShowCompetitiveJobs);\n\n const taskNames = useSelector(getOperationTasksNames);\n const allTaskNames = React.useMemo(() => {\n return [\n '',\n ...taskNames.map((name) => {\n return {name, caption: name};\n }),\n ];\n }, [taskNames]);\n\n return (\n <div className={block('toolbar')}>\n <div className={tbBlock()}>\n <div className={tbBlock('container')}>\n <div className={block('toolbar-filter-by', tbComp)}>\n <JobsFilterBy />\n </div>\n <div className={block('toolbar-filter-by', tbComp)}>\n <JobsSelectFilter name={'taskName'} states={allTaskNames} width=\"max\" />\n </div>\n <div className={block('toolbar-state', tbComp)}>\n <JobsSelectFilter\n name=\"type\"\n statesProvider={extractJobTypes}\n disabled={showCompetitiveJobs}\n width={200}\n />\n </div>\n <div className={block('toolbar-state', tbComp)}>\n <JobsSelectFilter\n name=\"state\"\n states={['all', 'running', 'completed', 'failed', 'aborted']}\n disabled={showCompetitiveJobs}\n width={200}\n />\n </div>\n <div className={block('toolbar-attributes', tbComp)}>\n <JobsAttributesFilter disabled={showCompetitiveJobs} width={200} />\n </div>\n\n <JobsOperationIncarnationsFilter\n disabled={showCompetitiveJobs}\n wrap={(children) => {\n return (\n <div className={block('toolbar-state', tbComp)}>{children} </div>\n );\n }}\n />\n\n <div className={block('toolbar-pagination', tbComp)}>\n <JobsPaginator disabled={showCompetitiveJobs} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport map_ from 'lodash/map';\nimport cn from 'bem-cn-lite';\n\nimport {useSelector} from 'react-redux';\nimport {getJobsErrors} from '../../../../../../store/selectors/operations/jobs';\nimport {YTErrorBlock} from '../../../../../../components/Error/Error';\n\nimport './OperationJobsErrors.scss';\n\nconst block = cn('operation-jobs-errors');\n\nfunction OperationJobsErrors() {\n const errors = useSelector(getJobsErrors);\n\n return (\n <div className={block()}>\n {map_(errors, (error, index) => {\n return <YTErrorBlock key={index} error={error} />;\n })}\n </div>\n );\n}\n\nexport default React.memo(OperationJobsErrors);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {getJobs} from '../../../../../store/actions/operations/jobs';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport LoadDataHandler from '../../../../../components/LoadDataHandler/LoadDataHandler';\nimport OperationJobsTable from './OperationJobsTable/OperationJobsTable';\nimport OperationJobsToolbar from './OperationJobsToolbar/OperationJobsToolbar';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport {\n getOperationDetailsLoadingStatus,\n getOperationJobsLoadingStatus,\n} from '../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport OperationJobsErrors from './OperationJobsErrors/OperationJobsErrors';\n\nfunction Jobs({className}) {\n const dispatch = useDispatch();\n const loading = useSelector((state) => state.operations.jobs.loading);\n const loaded = useSelector((state) => state.operations.jobs.loaded);\n const error = useSelector((state) => state.operations.jobs.error);\n const errorData = useSelector((state) => state.operations.jobs.errorData);\n\n const updateFn = React.useCallback(() => {\n dispatch(getJobs());\n }, [dispatch]);\n\n useUpdater(updateFn, {timeout: 15 * 1000});\n\n const isLoading = loading && !loaded;\n return (\n <ErrorBoundary>\n <div className={`operation-detail-jobs ${className}`}>\n <OperationJobsToolbar />\n <LoadDataHandler {...{loaded, loading, error, errorData}} alwaysShowError>\n <OperationJobsErrors />\n <OperationJobsTable isLoading={isLoading} />\n </LoadDataHandler>\n </div>\n </ErrorBoundary>\n );\n}\n\nexport default function JobsWithRum(props) {\n const loadState = useSelector(getOperationJobsLoadingStatus);\n /**\n * Selection of this value involves additional rerenders of the component\n * but without it RUM-measures will be wrongly too big it.\n * OperationDetail cannot stop measure for RumMeasureTypes.OPERATION by self,\n * it must be done by nesting tab-content.\n */\n const operationLoadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState, operationLoadState],\n allowStart: ([loadState, operationLoadState]) => {\n return !isFinalLoadingStatus(loadState) || !isFinalLoadingStatus(operationLoadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n stopDeps: [loadState, operationLoadState],\n allowStop: ([loadState, operationLoadState]) => {\n return isFinalLoadingStatus(loadState) && isFinalLoadingStatus(operationLoadState);\n },\n });\n\n return <Jobs {...props} />;\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport min_ from 'lodash/min';\n\nimport moment from 'moment';\nimport {createSelector} from 'reselect';\nimport {RootState} from '../../../store/reducers';\nimport {getOperationId} from './operation';\n\nexport const getJobsMonitorError = (state: RootState) => state.operations.jobsMonitor.error;\nexport const getJobsMonitorOperationId = (state: RootState) =>\n state.operations.jobsMonitor.operation_id;\nexport const getJobsMonitorItems = (state: RootState) => state.operations.jobsMonitor.jobs;\nexport const getJobsMonitorItemsLoading = (state: RootState) =>\n state.operations.jobsMonitor.loading;\nexport const getJobsMonitorItemsLoaded = (state: RootState) => state.operations.jobsMonitor.loaded;\n\nexport const getJobsMonitoringItemsWithDescriptor = createSelector(\n [getJobsMonitorItems],\n (items) => {\n return filter_(items, ({monitoring_descriptor}) => Boolean(monitoring_descriptor));\n },\n);\n\nexport const getJobsMonitorFromTo = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (items) => {\n let from: number | undefined;\n let to: number | undefined;\n forEach_(items, ({start_time, finish_time}) => {\n if (start_time) {\n const start = moment(start_time).valueOf();\n from = min_([start, from]);\n }\n if (finish_time) {\n const finish = moment(finish_time).valueOf();\n to = max_([finish, to]);\n }\n });\n return {from, to};\n },\n);\n\nexport const getJobsMonitorDescriptor = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (jobs) => {\n const tmp = map_(jobs, 'monitoring_descriptor');\n return tmp.join('|');\n },\n);\n\nexport const getJobsMonitorTabVisible = createSelector(\n [getOperationId, getJobsMonitorOperationId, getJobsMonitorDescriptor, getJobsMonitorError],\n (opId, jobMonId, jobsDescriptor, error) => {\n if (opId !== jobMonId) {\n return false;\n }\n if (!isEmpty_(error)) {\n return true;\n }\n\n return Boolean(jobsDescriptor);\n },\n);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Loader from '../../../../../components/Loader/Loader';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {\n getJobsMonitorDescriptor,\n getJobsMonitorError,\n getJobsMonitorFromTo,\n getJobsMonitorItemsLoaded,\n getJobsMonitorItemsLoading,\n} from '../../../../../store/selectors/operations/jobs-monitor';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport UIFactory from '../../../../../UIFactory';\n\nfunction JobsMonitor() {\n const cluster = useSelector(getCluster);\n const job_descriptor = useSelector(getJobsMonitorDescriptor);\n const {from, to} = useSelector(getJobsMonitorFromTo);\n const error = useSelector(getJobsMonitorError);\n const loaded = useSelector(getJobsMonitorItemsLoaded);\n const loading = useSelector(getJobsMonitorItemsLoading);\n\n if (!loaded && loading) {\n return <Loader visible centered />;\n }\n\n if (!job_descriptor && !error) {\n return <NoContent warning={'There are no jobs with \"monitoring_descriptor\"'} />;\n }\n\n const JobMonitorComponent = UIFactory.getMonitorComponentForJob()!;\n\n return (\n <ErrorBoundary>\n {error && <YTErrorBlock error={error} />}\n <JobMonitorComponent {...{cluster, job_descriptor, from, to}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(JobsMonitor);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {\n getOperationDetailsLoadingStatus,\n getOperationId,\n getOperationTypedAttributes,\n} from '../../../../../store/selectors/operations/operation';\nimport Yson from '../../../../../components/Yson/Yson';\nimport {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';\nimport {JobsTimelineState} from '../../reducers/operations/jobs/jobs-timeline-slice';\n\nexport const selectJobs = (state: RootState) => state.operations.jobsTimeline.jobs;\nexport const selectLoading = (state: RootState) => state.operations.jobsTimeline.isLoading;\nexport const selectInterval = (state: RootState) => state.operations.jobsTimeline.interval;\nexport const selectFilter = (state: RootState) => state.operations.jobsTimeline.filter;\nexport const selectActiveJob = (state: RootState) => state.operations.jobsTimeline.selectedJob;\nexport const selectJobsOverloadError = (state: RootState) =>\n state.operations.jobsTimeline.jobsCountError;\nexport const selectError = (state: RootState) => state.operations.jobsTimeline.error;\n\nexport const selectEventsInterval = (state: RootState) => {\n const interval = state.operations.jobsTimeline.eventsInterval;\n return isFinite(interval.from) ? interval : undefined;\n};\n\nexport const selectJobsEmptyError = createSelector(\n [selectJobs, selectLoading],\n (jobs, isLoading) => {\n return jobs.length === 0 && !isLoading;\n },\n);\n\nexport const selectJobsInIntervalByGroup = createSelector([selectJobs], (jobs) => {\n return jobs.reduce<Record<string, JobsTimelineState['jobs']>>((acc, job) => {\n if (job.groupName in acc) {\n acc[job.groupName].push(job);\n } else {\n acc[job.groupName] = [job];\n }\n\n return acc;\n }, {});\n});\n\nexport const selectJobGroupsCount = createSelector([selectJobs], (jobs) => {\n return jobs.reduce<Record<string, number>>((acc, job) => {\n if (job.groupName in acc) {\n acc[job.groupName]++;\n } else {\n acc[job.groupName] = 1;\n }\n return acc;\n }, {});\n});\n\nexport const getSelectedJob = createSelector([selectJobs, selectActiveJob], (jobs, activeJob) => {\n return jobs.find(({id}) => activeJob.id === id) || null;\n});\n\nexport const selectIntervalsIsSame = createSelector(\n [selectInterval, selectEventsInterval],\n (interval, eInterval) => {\n if (interval && eInterval) {\n if (interval.from === eInterval.from && interval.to === eInterval.to) return true;\n }\n\n return !interval && !eInterval;\n },\n);\n","import {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getBatchError} from '../../../utils/utils';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\nimport {Action} from 'redux';\nimport {getOperationId} from '../../selectors/operations/operation';\nimport {RawJob} from '../../../types/operations/job';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {\n JobsTimelineState,\n TimelineJob,\n setError,\n setInterval,\n setJobs,\n setJobsCountError,\n setLoading,\n} from '../../reducers/operations/jobs/jobs-timeline-slice';\nimport dayjs from 'dayjs';\nimport {\n selectEventsInterval,\n selectIntervalsIsSame,\n} from '../../selectors/operations/jobs-timeline';\nimport {MAX_JOBS_COUNT} from '../../../pages/operations/OperationDetail/tabs/JobsTimeline/constants';\n\nconst cancelHelper = new CancelHelper();\n\ntype AsyncAction = ThunkAction<void, RootState, undefined, Action>;\n\nexport const resetInterval = (): AsyncAction => (dispatch, getState) => {\n const interval = selectEventsInterval(getState());\n if (!interval) return;\n\n dispatch(setInterval(interval));\n};\n\ntype OperationJob = RawJob & {\n id: string;\n allocation_id?: string;\n job_cookie: number;\n task_name: string;\n};\n\nexport const getJobsWithEvents =\n (firstRequest?: boolean): AsyncAction =>\n async (dispatch, getState) => {\n const state = getState();\n const operationId = getOperationId(state);\n const sameIntervals = selectIntervalsIsSame(state);\n\n if (firstRequest) {\n dispatch(setLoading(true));\n }\n try {\n dispatch(setError(undefined));\n const listResponse = await ytApiV3Id.listJobs(YTApiId.operationGetJobs, {\n operation_id: operationId,\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const jobs = listResponse.jobs as OperationJob[];\n if (jobs.length > MAX_JOBS_COUNT) {\n dispatch(setJobsCountError(true));\n return;\n }\n\n const requests = jobs.map(({id}) => {\n return {\n command: 'get_job' as const,\n parameters: {\n operation_id: operationId,\n job_id: id,\n },\n };\n });\n\n const response = await ytApiV3Id.executeBatch<OperationJob>(YTApiId.operationGetJobs, {\n parameters: {requests},\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const error = getBatchError(response, 'Get operation jobs error');\n if (error) {\n throw error;\n }\n\n const result = response.reduce<Pick<JobsTimelineState, 'jobs' | 'eventsInterval'>>(\n (acc, {output: job}) => {\n if (!job?.events || !job.events.length) return acc;\n\n const jobEvents = job.events;\n const isRunning = job.state === 'running';\n\n // stretch running job timeline\n const maxTime = isRunning\n ? Date.now()\n : dayjs(jobEvents.at(-1)!.time).valueOf();\n const minTime = dayjs(jobEvents[0].time).valueOf();\n const percent = (maxTime - minTime) / 100;\n\n const timeLineJob: TimelineJob = {\n id: job.job_id,\n cookieId: job.job_cookie,\n allocationId: job.allocation_id,\n groupName: job.task_name || '',\n events: [],\n start_time: job.start_time,\n finish_time: job.finish_time,\n address: job.address,\n };\n\n const eventsCount = jobEvents.length;\n let stateIndex = 0;\n for (let i = 0; i < eventsCount; i++) {\n const event = jobEvents[i];\n\n const startTime = dayjs(event.time).valueOf();\n const prevEvent = timeLineJob['events'][stateIndex];\n if (event.state) {\n timeLineJob['events'].push({\n state: event.state,\n startTime,\n endTime: 0,\n phases: [],\n percent: 0,\n });\n stateIndex = timeLineJob['events'].length - 1;\n } else {\n timeLineJob['events'][stateIndex].phases.push({\n phase: event.phase!,\n startTime,\n });\n }\n\n if (prevEvent) {\n prevEvent.endTime = startTime;\n prevEvent.percent = (startTime - prevEvent.startTime) / percent;\n }\n }\n\n // stretch running job timeline\n if (isRunning) {\n const lastEventIndex = timeLineJob.events.length - 1;\n const {startTime} = timeLineJob.events[lastEventIndex];\n timeLineJob.events[lastEventIndex].endTime = Date.now();\n timeLineJob.events[lastEventIndex].percent =\n (Date.now() - startTime) / percent;\n }\n\n acc.jobs.push(timeLineJob);\n\n // job duration\n acc.eventsInterval = {\n from: Math.min(acc.eventsInterval.from, minTime),\n to: Math.max(acc.eventsInterval.to, maxTime),\n };\n\n return acc;\n },\n {\n jobs: [],\n eventsInterval: {\n from: Infinity,\n to: 0,\n },\n },\n );\n\n dispatch(setJobs(result));\n if (firstRequest || sameIntervals) {\n dispatch(setInterval(result.eventsInterval));\n }\n } catch (e) {\n const error = e as Error;\n\n if (isCancelled(error)) {\n return;\n }\n\n dispatch(setError(error));\n } finally {\n if (firstRequest) {\n dispatch(setLoading(false));\n }\n }\n };\n","export const ROW_HEIGHT = 30;\nexport const TIMELINE_HEIGHT = 12;\nexport const TIMELINE_SELECT_BORDER_WIDTH = 2;\nexport const OFFSET = (ROW_HEIGHT - TIMELINE_HEIGHT) / 2;\nexport const MAX_JOBS_COUNT = 10000;\n","const SvgChevronsExpandToLines = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1.5 2.75a.75.75 0 0 0-1.5 0v10.5a.75.75 0 0 0 1.5 0zm14.5 0a.75.75 0 0 0-1.5 0v10.5a.75.75 0 0 0 1.5 0zM6.53 4.97a.75.75 0 0 1 0 1.06L4.56 8l1.97 1.97a.75.75 0 1 1-1.06 1.06l-2.5-2.5a.75.75 0 0 1 0-1.06l2.5-2.5a.75.75 0 0 1 1.06 0m2.94 1.06a.75.75 0 0 1 1.06-1.06l2.5 2.5a.75.75 0 0 1 0 1.06l-2.5 2.5a.75.75 0 1 1-1.06-1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsExpandToLines;","import React, {FC} from 'react';\nimport {Button, Flex, Icon, TextInput} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport './TimeLineHeader.scss';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n selectFilter,\n selectInterval,\n} from '../../../../../store/selectors/operations/jobs-timeline';\nimport {\n setFilter,\n setInterval,\n} from '../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {dateTimeParse} from '@gravity-ui/date-utils';\nimport {RangeDateSelection} from '@gravity-ui/date-components';\nimport {DateTime} from '@gravity-ui/date-utils/build/typings/dateTime';\nimport ChevronsExpandToLinesIcon from '@gravity-ui/icons/svgs/chevrons-expand-to-lines.svg';\nimport {resetInterval} from '../../../../../store/actions/operations/jobs-timeline';\n\nconst block = cn('yt-timeline-header');\n\ntype Props = {\n className?: string;\n};\n\nexport const TimeLineHeader: FC<Props> = ({className}) => {\n const dispatch = useDispatch();\n const filter = useSelector(selectFilter);\n const interval = useSelector(selectInterval);\n\n const handleFilterChange = (val: string) => {\n dispatch(setFilter(val));\n };\n\n const handleOnUpdate = ({start, end}: {start: DateTime; end: DateTime}) => {\n dispatch(setInterval({from: start.valueOf(), to: end.valueOf()}));\n };\n\n const handleResetInterval = () => {\n dispatch(resetInterval());\n };\n\n if (!interval) return null;\n\n return (\n <div className={block(null, className)}>\n <TextInput\n defaultValue={filter}\n placeholder=\"Search by job ID\"\n onUpdate={handleFilterChange}\n hasClear\n />\n <Flex>\n <Button\n view=\"outlined\"\n pin=\"brick-brick\"\n onClick={handleResetInterval}\n title=\"Reset interval\"\n >\n <Icon data={ChevronsExpandToLinesIcon} size={16} />\n </Button>\n <RangeDateSelection\n className={block('range-selector')}\n value={{\n start: dateTimeParse(interval.from)!,\n end: dateTimeParse(interval.to)!,\n }}\n displayNow\n hasScaleButtons\n onUpdate={handleOnUpdate}\n />\n </Flex>\n </div>\n );\n};\n","export const getPhaseColor = (state: string, phase?: string) => {\n if (!phase) return state;\n\n return state.toLowerCase() === 'running' && phase.toLowerCase() !== 'running'\n ? 'running-prev'\n : state;\n};\n","import React, {FC, ReactNode, useMemo} from 'react';\nimport {JobEvent} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {Table} from '@gravity-ui/uikit';\nimport '../mixin/stateMixin.scss';\nimport './EventsTable.scss';\nimport cn from 'bem-cn-lite';\nimport hammer from '../../../../../../common/hammer';\nimport {getPhaseColor} from '../helpers/getPhaseColor';\n\nconst block = cn('yt-events-table');\n\nconst PhaseNameCell: FC<{state: string; phase: string}> = ({state, phase}) => {\n return (\n <div className={block('row', {state: getPhaseColor(state, phase)})}>\n {hammer.format['ReadableField'](state)}: {hammer.format['ReadableField'](phase)}\n </div>\n );\n};\n\nconst getDateTime = (timestamp: number) =>\n hammer.format['DateTime'](new Date(timestamp).toString());\n\ntype Props = {\n events: JobEvent[];\n};\n\nexport const EventsTable: FC<Props> = ({events}) => {\n const data = useMemo(() => {\n return events.reduce<{phase: ReactNode; duration: string; startTime: string}[]>(\n (acc, event) => {\n acc.push({\n phase: <PhaseNameCell state={event.state} phase=\"—\" />,\n duration: hammer.format['TimeDuration'](event.endTime - event.startTime, {\n format: 'milliseconds',\n }),\n startTime: getDateTime(event.startTime),\n });\n\n let prevTime = event.startTime;\n event.phases.forEach((eventPhase) => {\n acc.push({\n phase: <PhaseNameCell state={event.state} phase={eventPhase.phase} />,\n duration: hammer.format['TimeDuration'](eventPhase.startTime - prevTime, {\n format: 'milliseconds',\n }),\n startTime: getDateTime(eventPhase.startTime),\n });\n prevTime = eventPhase.startTime;\n });\n return acc;\n },\n [],\n );\n }, [events]);\n\n return (\n <Table\n className={block()}\n width=\"max\"\n columns={[\n {id: 'phase', name: 'State: Phase'},\n {id: 'duration', name: 'Duration'},\n {id: 'startTime', name: 'Start time'},\n ]}\n data={data}\n />\n );\n};\n","import React, {FC} from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport {JobLineEvent} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport cn from 'bem-cn-lite';\nimport './MetaData.scss';\nimport ClipboardButton from '../../../../../../components/ClipboardButton/ClipboardButton';\nimport hammer from '../../../../../../common/hammer';\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport relativeTime from 'dayjs/plugin/relativeTime';\n\ndayjs.extend(relativeTime);\ndayjs.extend(duration);\n\nconst block = cn('yt-event-timeline-meta');\n\ntype Props = {\n meta: JobLineEvent['meta'];\n showCopyButton?: boolean;\n className?: string;\n};\n\nexport const MetaData: FC<Props> = ({meta, showCopyButton, className}) => {\n let duration;\n if (meta.endTime && meta.startTime) {\n const start = dayjs(meta.startTime);\n const end = dayjs(meta.endTime);\n const diff = end.diff(start);\n duration = dayjs.duration(diff);\n }\n\n return (\n <div className={block(null, className)}>\n {meta.allocationId && (\n <>\n <Text color=\"secondary\">AllocationId:</Text> <span>{meta.allocationId}</span>\n </>\n )}\n <Text color=\"secondary\">Address:</Text>{' '}\n <span>\n {hammer.format['Address'](meta.address)} \n {showCopyButton && (\n <ClipboardButton view=\"flat-secondary\" text={meta.address} size=\"s\" />\n )}\n </span>\n <Text color=\"secondary\">Start:</Text>{' '}\n <span>{hammer.format['DateTime'](meta.startTime)}</span>\n <Text color=\"secondary\">End:</Text>{' '}\n <span>{meta.endTime ? hammer.format['DateTime'](meta.endTime) : '—'}</span>\n {duration && (\n <>\n <Text color=\"secondary\">Duration:</Text>{' '}\n <span>{hammer.format['TimeDuration'](duration.asMilliseconds())}</span>\n </>\n )}\n </div>\n );\n};\n","import React, {FC, useCallback, useEffect, useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport {\n getSelectedJob,\n selectActiveJob,\n} from '../../../../../../store/selectors/operations/jobs-timeline';\nimport {Button, Flex, Icon, Text} from '@gravity-ui/uikit';\nimport Link from '../../../../../../components/Link/Link';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport cn from 'bem-cn-lite';\nimport {EventsTable} from './EventsTable';\nimport {getCluster} from '../../../../../../store/selectors/global';\nimport {getOperationId} from '../../../../../../store/selectors/operations/operation';\nimport './EventsSidePanel.scss';\nimport {MetaData} from '../EventsTimeline/MetaData';\n\nconst block = cn('yt-events-side-panel');\n\ntype Props = {\n onClose: () => void;\n onOutsideClick?: (e: MouseEvent) => void;\n};\n\nexport const EventsSidePanel: FC<Props> = ({onClose, onOutsideClick}) => {\n const {id} = useSelector(selectActiveJob);\n const job = useSelector(getSelectedJob);\n const cluster = useSelector(getCluster);\n const operationId = useSelector(getOperationId);\n const panelRef = useRef<HTMLDivElement>(null);\n\n const handleDocumentClick = useCallback(\n (e: MouseEvent) => {\n if (panelRef.current && !panelRef.current.contains(e.target as Node)) {\n onOutsideClick?.(e);\n }\n },\n [onOutsideClick],\n );\n\n useEffect(() => {\n document.addEventListener('click', handleDocumentClick);\n\n return () => {\n document.removeEventListener('click', handleDocumentClick);\n };\n }, [handleDocumentClick]);\n\n if (!id || !job) return null;\n\n return (\n <div ref={panelRef} className={block()}>\n <Flex alignItems=\"center\" justifyContent=\"space-between\">\n <Flex alignItems=\"center\" justifyContent=\"center\" gap={1}>\n <Text variant=\"subheader-3\">\n Job id:{' '}\n <Link\n theme=\"primary\"\n url={`/${cluster}/job/${operationId}/${id}`}\n target=\"_blank\"\n >\n {id}\n </Link>\n </Text>\n </Flex>\n <Button view=\"flat\" onClick={onClose}>\n <Icon data={XmarkIcon} size={16} />\n </Button>\n </Flex>\n <MetaData\n className={block('meta')}\n meta={{\n startTime: job.start_time,\n endTime: job.finish_time,\n address: job.address,\n allocationId: job.allocationId,\n }}\n showCopyButton\n />\n <div className={block('separator')} />\n <EventsTable events={job.events} />\n </div>\n );\n};\n","import {getCssColor} from '../../../utils/get-css-color';\n\nexport const getColorByState = (state: string) => {\n switch (state) {\n case 'waiting': {\n return getCssColor('--default-color');\n }\n case 'running': {\n return getCssColor('--info-color');\n }\n case 'aborting': {\n return getCssColor('--g-color-base-misc-heavy');\n }\n case 'aborted': {\n return getCssColor('--g-color-base-misc-heavy');\n }\n case 'completed': {\n return getCssColor('--success-color');\n }\n case 'failed': {\n return getCssColor('--danger-color');\n }\n case 'lost': {\n return getCssColor('--warning-color');\n }\n default: {\n return getCssColor('--g-progress-filled-background-color');\n }\n }\n};\n","export enum EventDisplayMode {\n Selected = 'selected',\n SelectedFound = 'selectedFound',\n Found = 'found',\n Transparent = 'transparent',\n Default = 'default',\n}\n","import {EventDisplayMode} from '../../../../../../components/TimelineBlock/enums';\n\nexport const getTimeLineDisplayMode = ({\n jobId,\n timeLineId,\n filter = '',\n selectedJob = [],\n}: {\n jobId: string;\n timeLineId: string;\n filter?: string;\n selectedJob?: string[];\n}): EventDisplayMode => {\n const hasFilter = Boolean(filter);\n const hasSelectedJobs = selectedJob && Boolean(selectedJob[0]);\n const matchesFilter = hasFilter && jobId.includes(filter);\n const isSelected = selectedJob[0] === timeLineId;\n\n if (matchesFilter && isSelected) {\n return EventDisplayMode.SelectedFound;\n }\n\n if (matchesFilter) {\n return EventDisplayMode.Found;\n }\n\n if (isSelected) {\n return EventDisplayMode.Selected;\n }\n\n if (hasFilter || hasSelectedJobs) {\n return EventDisplayMode.Transparent;\n }\n\n return EventDisplayMode.Default;\n};\n","/**\n * Converts color to RGBA format with specified opacity\n * @param colorString - color string (formats: #RGB, #RRGGBB, rgb(R,G,B), rgba(R,G,B,A))\n * @param opacity - transparency (0-1)\n * @returns string in rgba(R, G, B, A) format\n */\nexport const convertToRGBA = (colorString: string, opacity: number): string => {\n // Validate and normalize input data\n if (opacity < 0 || opacity > 1) {\n throw new Error('Opacity must be between 0 and 1');\n }\n\n let r = 0,\n g = 0,\n b = 0;\n let a = opacity;\n\n // Remove all whitespace and convert to lowercase\n const normalizedColor = colorString.replace(/\\s+/g, '').toLowerCase();\n\n // Handle HEX format (#RGB or #RRGGBB)\n if (normalizedColor.startsWith('#')) {\n const hex = normalizedColor.substring(1);\n\n if (hex.length === 3) {\n // #RGB → #RRGGBB\n r = parseInt(hex[0] + hex[0], 16);\n g = parseInt(hex[1] + hex[1], 16);\n b = parseInt(hex[2] + hex[2], 16);\n } else if (hex.length === 6) {\n // #RRGGBB\n r = parseInt(hex.substring(0, 2), 16);\n g = parseInt(hex.substring(2, 4), 16);\n b = parseInt(hex.substring(4, 6), 16);\n } else {\n throw new Error('Invalid HEX color format');\n }\n }\n // Handle RGB/RGBA format\n else if (normalizedColor.startsWith('rgb(') || normalizedColor.startsWith('rgba(')) {\n const colorValues = normalizedColor.match(/rgba?\\((\\d+),(\\d+),(\\d+)(?:,([\\d.]+))?\\)/i);\n\n if (!colorValues) {\n throw new Error('Invalid RGB/RGBA color format');\n }\n\n r = parseInt(colorValues[1], 10);\n g = parseInt(colorValues[2], 10);\n b = parseInt(colorValues[3], 10);\n\n // If original color has transparency, multiply with new opacity\n if (colorValues[4]) {\n a = parseFloat(colorValues[4]) * opacity;\n }\n } else {\n throw new Error('Unsupported color format');\n }\n\n // Validate color values\n if ([r, g, b].some((v) => v < 0 || v > 255)) {\n throw new Error('Invalid color values (must be 0-255)');\n }\n\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n};\n","import {\n AbstractEventRenderer,\n Hitbox,\n} from '../../../packages/ya-timeline/components/Events/AbstractEventRenderer';\nimport {TimelineEvent, yaTimelineConfig} from '../../../packages/ya-timeline';\nimport {EventDisplayMode} from '../enums';\nimport {convertToRGBA} from '../helpers/convertToRGBA';\nimport {getCssColor} from '../../../utils/get-css-color';\n\nexport type JobPhase = {\n phase: string;\n startTime: number;\n};\n\nexport type JobEvent = {\n percentage: number;\n color: string;\n state: string;\n interval: {\n from: number;\n to: number;\n };\n phases: JobPhase[];\n};\n\nexport type JobLineEvent = TimelineEvent & {\n jobId: string;\n parts: JobEvent[];\n meta: {\n allocationId?: string;\n startTime: string;\n endTime?: string;\n address: string;\n };\n displayMode: EventDisplayMode;\n};\n\nconst MIN_LINE_WIDTH = 8;\nconst DEFAULT_COLOR = '#333';\n\nexport class JobLineRenderer extends AbstractEventRenderer {\n render(\n ctx: CanvasRenderingContext2D,\n event: JobLineEvent,\n isSelected: boolean,\n rawX0: number,\n rawX1: number,\n y: number,\n _: number,\n timeToPosition: (t: number) => number,\n ) {\n const {displayMode, parts} = event;\n const y0 = y - yaTimelineConfig.LINE_HEIGHT / 2;\n const {x1, x0} = this.getFixedXCoordinates(rawX0, rawX1);\n const isTransparent = displayMode === EventDisplayMode.Transparent;\n\n const percent = (x1 - x0) / 100;\n\n if (displayMode === EventDisplayMode.Found) {\n this.renderFilterBackground(ctx, x0, x1, y0);\n }\n\n let startX = x0;\n parts.forEach(({color, percentage, state, phases, interval}) => {\n const width = percentage * percent;\n\n if (state.toLowerCase() === 'running') {\n const phaseCount = phases.length;\n for (let i = 0; i < phaseCount; i++) {\n const startPosition = timeToPosition(phases[i].startTime);\n const endPosition =\n i === phaseCount - 1\n ? timeToPosition(interval.to)\n : timeToPosition(phases[i + 1].startTime);\n const isRunningPhase = phases[i].phase?.toLowerCase() === 'running';\n const lineColor = isRunningPhase ? color : getCssColor('--purple-color');\n\n ctx.beginPath();\n ctx.fillStyle = convertToRGBA(\n lineColor || DEFAULT_COLOR,\n isTransparent ? 0.4 : 0.7,\n );\n ctx.rect(\n startPosition,\n y0,\n endPosition - startPosition,\n yaTimelineConfig.LINE_HEIGHT,\n );\n ctx.fill();\n }\n } else {\n ctx.beginPath();\n ctx.fillStyle = convertToRGBA(color || DEFAULT_COLOR, isTransparent ? 0.4 : 0.7);\n ctx.rect(startX, y0, width, yaTimelineConfig.LINE_HEIGHT);\n ctx.fill();\n }\n startX += width;\n });\n\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x0 + 8, y0 + yaTimelineConfig.LINE_HEIGHT / 2);\n ctx.lineTo(x0, y0 + yaTimelineConfig.LINE_HEIGHT);\n ctx.closePath();\n ctx.fillStyle = 'rgba(0, 0, 0, 0.25)';\n ctx.fill();\n\n ctx.beginPath();\n ctx.moveTo(x1, y0);\n ctx.lineTo(x1 - 8, y0 + yaTimelineConfig.LINE_HEIGHT / 2);\n ctx.lineTo(x1, y0 + yaTimelineConfig.LINE_HEIGHT);\n ctx.closePath();\n ctx.fillStyle = 'rgba(0, 0, 0, 0.25)';\n ctx.fill();\n\n if (isSelected) {\n this.renderSelectedBorder(ctx, x0, x1, y0, displayMode);\n }\n }\n\n renderFilterBackground(ctx: CanvasRenderingContext2D, x0: number, x1: number, y: number) {\n const borderThickness = yaTimelineConfig.SELECTION_OUTLINE_THICKNESS;\n\n ctx.beginPath();\n ctx.rect(\n x0 - borderThickness,\n y - borderThickness,\n x1 - x0 + borderThickness * 2,\n yaTimelineConfig.LINE_HEIGHT + borderThickness * 2,\n );\n ctx.fillStyle = 'rgba(255, 219, 77)';\n ctx.fill();\n }\n\n renderSelectedBorder(\n ctx: CanvasRenderingContext2D,\n x0: number,\n x1: number,\n y: number,\n displayMode: EventDisplayMode,\n ) {\n const borderThickness = yaTimelineConfig.SELECTION_OUTLINE_THICKNESS;\n const borderColor = yaTimelineConfig.resolveCssValue(\n yaTimelineConfig.SELECTION_OUTLINE_COLOR,\n );\n const backgroundColor = yaTimelineConfig.resolveCssValue(\n yaTimelineConfig.PRIMARY_BACKGROUND_COLOR,\n );\n\n const borderX0 = x0 + borderThickness / 2;\n const borderWidth = x1 - x0 - borderThickness;\n const borderY0 = y - borderThickness;\n const borderHeight = yaTimelineConfig.LINE_HEIGHT + borderThickness * 2;\n\n ctx.beginPath();\n ctx.rect(borderX0, borderY0, borderWidth, borderHeight);\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderThickness;\n ctx.stroke();\n\n const innerBorderOffset = 1;\n const innerBorderX0 = borderX0 + innerBorderOffset;\n const innerBorderY0 = y - innerBorderOffset;\n const innerBorderWidth = borderWidth - 2 * innerBorderOffset;\n const innerBorderHeight = yaTimelineConfig.LINE_HEIGHT + 2 * innerBorderOffset;\n\n ctx.beginPath();\n ctx.rect(innerBorderX0, innerBorderY0, innerBorderWidth, innerBorderHeight);\n ctx.strokeStyle =\n displayMode === EventDisplayMode.SelectedFound ? 'rgba(255, 219, 77)' : backgroundColor;\n ctx.lineWidth = innerBorderOffset;\n ctx.stroke();\n }\n\n getHitbox(_event: TimelineEvent, rawX0: number, rawX1: number): Hitbox {\n const {x0, x1} = this.getFixedXCoordinates(rawX0, rawX1);\n this.hitboxResult.left = x0;\n this.hitboxResult.right = x1;\n return this.hitboxResult;\n }\n\n getFixedXCoordinates(x0: number, x1: number) {\n return x1 - x0 < MIN_LINE_WIDTH ? {x0, x1: x0 + MIN_LINE_WIDTH} : {x0, x1};\n }\n}\n","import {TimelineEvent, yaTimelineConfig} from '../../../packages/ya-timeline';\nimport {AbstractEventRenderer} from '../../../packages/ya-timeline/components/Events';\nimport {Hitbox} from '../../../packages/ya-timeline/components/Events/AbstractEventRenderer';\n\nexport type AllocationLineEvent = TimelineEvent & {\n allocationId: string;\n};\n\nconst MIN_LINE_WIDTH = 8;\n\nexport class AllocationLineRenderer extends AbstractEventRenderer {\n render(\n ctx: CanvasRenderingContext2D,\n _: AllocationLineEvent,\n __: boolean,\n rawX0: number,\n rawX1: number,\n y: number,\n ) {\n const y0 = y - yaTimelineConfig.LINE_HEIGHT / 2;\n ctx.beginPath();\n ctx.fillStyle = 'rgba(107, 132, 153, 0.3)';\n ctx.rect(rawX0, y0, rawX1 - rawX0, yaTimelineConfig.LINE_HEIGHT);\n ctx.fill();\n }\n\n getHitbox(_event: TimelineEvent, rawX0: number, rawX1: number): Hitbox {\n const {x0, x1} = this.getFixedXCoordinates(rawX0, rawX1);\n this.hitboxResult.left = x0;\n this.hitboxResult.right = x1;\n return this.hitboxResult;\n }\n\n getFixedXCoordinates(x0: number, x1: number) {\n return x1 - x0 < MIN_LINE_WIDTH ? {x0, x1: x0 + MIN_LINE_WIDTH} : {x0, x1};\n }\n}\n","import React, {FC, PropsWithChildren, useRef} from 'react';\nimport {Popup} from '@gravity-ui/uikit';\nimport './EventTimelineTooltip.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-event-timeline-tooltip');\n\ntype Props = {\n offset: {\n x: number;\n y: number;\n };\n};\n\nexport const EventTimelineTooltip: FC<PropsWithChildren<Props>> = ({children, offset}) => {\n const anchorRef = useRef<HTMLDivElement>(null);\n\n return (\n <div\n className={block()}\n style={{\n top: offset.y,\n left: offset.x,\n }}\n >\n <div ref={anchorRef} className={block('anchor')} />\n <Popup anchorRef={anchorRef} open disablePortal>\n {children}\n </Popup>\n </div>\n );\n};\n","import React, {FC} from 'react';\nimport hammer from '../../../../../../common/hammer';\nimport './EventTimelineTooltipContentRow.scss';\nimport cn from 'bem-cn-lite';\nimport {Flex} from '@gravity-ui/uikit';\nimport {getPhaseColor} from '../helpers/getPhaseColor';\n\nconst block = cn('yt-event-timeline-tooltip-content-row');\n\ntype Props = {\n state: string;\n phase?: string;\n duration: number;\n};\n\nexport const EventTimelineTooltipContentRow: FC<Props> = ({state, phase, duration}) => {\n return (\n <Flex justifyContent=\"space-between\" gap={2} className={block()}>\n <div className={block('title', {state: getPhaseColor(state, phase)})}>\n {hammer.format['ReadableField'](state)}:{' '}\n {phase ? hammer.format['ReadableField'](phase) : <>—</>}\n </div>\n <div>{hammer.format['TimeDuration'](duration, {format: 'milliseconds'})}</div>\n </Flex>\n );\n};\n","import React, {FC, useMemo} from 'react';\nimport {\n JobEvent,\n JobLineEvent,\n} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {Flex, Text} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport './EventTimelineTooltipContent.scss';\nimport {EventTimelineTooltipContentRow} from './EventTimelineTooltipContentRow';\nimport {MetaData} from './MetaData';\n\nconst block = cn('yt-event-timeline-tooltip-content');\ntype Props = {\n events: JobEvent[];\n jobId: string;\n metaData: JobLineEvent['meta'];\n};\n\nexport const EventTimelineTooltipContent: FC<Props> = ({events, jobId, metaData}) => {\n const phaseItems = useMemo(() => {\n if (!events) return [];\n return events.reduce<React.ReactElement[]>((ac, {state, phases, interval}) => {\n const eventDuration = interval.to - interval.from;\n const items = phases.reduce<React.ReactElement[]>((acc, {phase, startTime}, i, arr) => {\n const duration =\n i > 0 ? startTime - arr[i - 1].startTime : startTime - interval.from;\n\n acc.push(\n <EventTimelineTooltipContentRow\n key={`text_${phase}_${startTime}`}\n phase={phase}\n state={state}\n duration={duration}\n />,\n );\n return acc;\n }, []);\n\n return [\n ...ac,\n <EventTimelineTooltipContentRow\n key=\"text_all\"\n state={state}\n duration={eventDuration}\n />,\n ...items,\n ];\n }, []);\n }, [events]);\n\n if (!phaseItems.length) return null;\n\n return (\n <Flex direction=\"column\" gap={3} className={block()}>\n <Text variant=\"subheader-2\">Job id: {jobId}</Text>\n <MetaData meta={metaData} />\n <Flex direction=\"column\" gap={1} className={block('phases')}>\n {phaseItems}\n </Flex>\n </Flex>\n );\n};\n","import {wrapWc} from 'wc-react';\nimport {\n Axes,\n BasicEventsProvider,\n BoundsChangedEvent,\n Events,\n EventsSelectedEvent,\n Grid,\n TimelineAxis,\n TimelineComponent,\n TimelineEvent,\n TimelineMarker,\n YaTimeline,\n yaTimelineConfig,\n} from '../../packages/ya-timeline';\nimport {EventGroup} from '../../pages/query-tracker/Plan/Timeline/TimelineCanvas';\nimport {\n AbstractEventRenderer,\n EventIdentity,\n HoverEvent,\n LeftEvent,\n} from '../../packages/ya-timeline/components/Events';\nimport {getCSSPropertyValue} from '../../utils/get-css-color';\nimport {\n ROW_HEIGHT,\n TIMELINE_HEIGHT,\n TIMELINE_SELECT_BORDER_WIDTH,\n} from '../../pages/operations/OperationDetail/tabs/JobsTimeline/constants';\n\nexport type TimelineRenderer = {\n id: string;\n renderer: AbstractEventRenderer;\n};\n\nexport class EventCanvas<T extends TimelineEvent> extends YaTimeline {\n private renderersList: TimelineRenderer[] = [];\n\n set renderers(value: TimelineRenderer[]) {\n this.renderersList = value;\n this.scheduleTimelineRender();\n }\n\n set events(value: EventGroup[]) {\n this.getComponent(BasicEventsProvider).then((component) => {\n component?.setEvents(value);\n });\n }\n\n set axes(axes: TimelineAxis[]) {\n this.getComponent(BasicEventsProvider).then((component) => {\n if (component) {\n component.axes = axes;\n }\n });\n }\n\n set selectedEvents(events: EventIdentity[]) {\n this.getComponent(BasicEventsProvider).then((component) => {\n if (component) {\n component.setSelectedEvents(events);\n }\n });\n }\n\n set theme(_theme: string) {\n this.setTimelineConfig();\n this.scheduleTimelineRender();\n }\n\n override updateCanvasSize() {\n if (this.offsetHeight) {\n return super.updateCanvasSize();\n }\n\n return () => {};\n }\n\n createComponents(): TimelineComponent[] {\n this.setTimelineConfig();\n const events = new Events(this);\n\n this.renderersList.forEach(({id, renderer}) => {\n events.registerRenderer(id, renderer);\n });\n\n return [new Grid(this), new Axes(this), events, new BasicEventsProvider<T>(this)];\n }\n\n private setTimelineConfig() {\n yaTimelineConfig.OVERLAPPING_THRESHOLD = 0;\n yaTimelineConfig.SKIP_OVERLAPPING = true;\n yaTimelineConfig.PRIMARY_BACKGROUND_COLOR = getCSSPropertyValue(\n '--g-color-base-background',\n );\n yaTimelineConfig.SELECTION_OUTLINE_THICKNESS = TIMELINE_SELECT_BORDER_WIDTH;\n yaTimelineConfig.TRACK_HEIGHT = ROW_HEIGHT;\n yaTimelineConfig.LINE_HEIGHT = TIMELINE_HEIGHT;\n }\n}\n\ncustomElements.define('events-timeline-canvas', EventCanvas);\n\ninterface TimelineProps<T extends TimelineEvent> {\n start: number;\n end: number;\n selectedEvents?: EventIdentity[];\n eventsSelected?: (event: EventsSelectedEvent<T>) => void;\n hoverEvent?: (event: HoverEvent<T>) => void;\n leftEvent?: (event: LeftEvent<T>) => void;\n axes: TimelineAxis[];\n theme: string;\n markers?: TimelineMarker[];\n events?: T[];\n isZoomAllowed?: boolean;\n boundsChanged?: (event: BoundsChangedEvent) => void;\n renderers: TimelineRenderer[];\n}\n\nexport const Timeline = wrapWc<TimelineProps<TimelineEvent>>('events-timeline-canvas') as <\n T extends TimelineEvent,\n>(\n props: TimelineProps<T>,\n) => JSX.Element;\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {Timeline, TimelineRenderer} from './EventCanvas';\nimport {EventsSelectedEvent, HoverEvent} from '../../packages/ya-timeline/components/Events';\nimport cn from 'bem-cn-lite';\nimport {useThemeValue} from '@gravity-ui/uikit';\nimport debounce_ from 'lodash/debounce';\nimport {BoundsChangedEvent, TimelineAxis, TimelineEvent} from '../../packages/ya-timeline';\nimport './EventsTimeline.scss';\n\nconst block = cn('yt-events-timeline');\ntype Interval = {from: number; to: number};\n\nexport type Props<T extends TimelineEvent> = {\n axes: TimelineAxis[];\n timelines: T[];\n selectedJob?: string[];\n interval: Interval;\n rowHeight?: number;\n tooltip: (event?: HoverEvent<T>) => React.ReactNode;\n onTimelineClick: (events: T[]) => void;\n onBoundsChanged: (interval: Interval) => void;\n renderers: TimelineRenderer[];\n};\n\nconst DEFAULT_ROW_HEIGHT = 30;\n\nexport const EventsTimeline = <T extends TimelineEvent>({\n axes,\n timelines,\n selectedJob,\n interval,\n rowHeight,\n tooltip,\n onTimelineClick,\n onBoundsChanged,\n renderers,\n}: Props<T>) => {\n const theme = useThemeValue();\n const [hoverEvent, setHoverEvent] = useState<HoverEvent<T>>();\n\n const debouncedSetHoverEvent = useMemo(\n () =>\n debounce_((event: HoverEvent<T> | undefined) => {\n setHoverEvent(event);\n }, 50),\n [],\n );\n\n const handleLeftEvent = useCallback(() => {\n debouncedSetHoverEvent(undefined);\n }, [debouncedSetHoverEvent]);\n\n const handleHoverEvent = useCallback(\n (event: HoverEvent<T>) => {\n debouncedSetHoverEvent(event);\n },\n [debouncedSetHoverEvent],\n );\n\n const handleEventClick = useCallback(\n (e: EventsSelectedEvent<T>) => {\n const events = e.detail.events;\n if (!events.length) {\n onTimelineClick([]);\n return;\n }\n\n onTimelineClick(events);\n },\n [onTimelineClick],\n );\n\n const scrollTopChanged = useCallback(\n ({detail}: BoundsChangedEvent) => {\n onBoundsChanged({from: detail.start, to: detail.end});\n },\n [onBoundsChanged],\n );\n\n return (\n <div\n className={block()}\n onMouseLeave={handleLeftEvent}\n style={{\n height: `${axes.length * (rowHeight || DEFAULT_ROW_HEIGHT)}px`,\n }}\n >\n {tooltip(hoverEvent)}\n\n <Timeline<T>\n theme={theme}\n start={interval.from}\n end={interval.to}\n axes={axes}\n selectedEvents={selectedJob}\n events={timelines}\n eventsSelected={handleEventClick}\n hoverEvent={handleHoverEvent}\n leftEvent={handleLeftEvent}\n isZoomAllowed\n boundsChanged={scrollTopChanged}\n renderers={renderers}\n />\n </div>\n );\n};\n","import React, {FC, ReactNode} from 'react';\nimport {Flex, Icon, Text} from '@gravity-ui/uikit';\nimport FileIcon from '@gravity-ui/icons/svgs/file.svg';\nimport cn from 'bem-cn-lite';\nimport './TimelineTable.scss';\n\nconst block = cn('yt-timeline-table');\n\nexport type Item = {id: string; content: ReactNode};\n\ntype Props = {\n items: Item[];\n rowHeight: number;\n className?: string;\n};\n\nexport const TimelineTable: FC<Props> = ({items, rowHeight, className}) => {\n return (\n <Flex direction=\"column\" className={block(null, className)}>\n {items.map(({id, content}) => (\n <Flex\n alignItems=\"center\"\n gap={1}\n key={id}\n className={block('item')}\n style={{height: `${rowHeight}px`}}\n >\n <Icon data={FileIcon} size={16} />\n <Text variant=\"body-1\" ellipsis>\n {content}\n </Text>\n </Flex>\n ))}\n </Flex>\n );\n};\n","import React, {FC, PropsWithChildren} from 'react';\nimport {useToggle} from 'react-use';\nimport {Flex, Icon} from '@gravity-ui/uikit';\nimport ChevronDownIcon from '@gravity-ui/icons/svgs/chevron-down.svg';\nimport './GroupCollapse.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-timeline-group-collapse');\n\nexport type Props = {\n title: string;\n open?: boolean;\n};\n\nexport const GroupCollapse: FC<PropsWithChildren<Props>> = ({children, title, open = true}) => {\n const [isOpen, toggleOpen] = useToggle(open);\n\n return (\n <div className={block()}>\n <Flex alignItems=\"center\" gap={2} onClick={toggleOpen} className={block('head')}>\n <Icon data={ChevronDownIcon} className={block('icon', {open: isOpen})} />\n {title}\n </Flex>\n {isOpen && <div className={block('content')}>{children}</div>}\n </div>\n );\n};\n","import React, {FC, PropsWithChildren} from 'react';\nimport {EventsTimeline, Props as EventsTimelineProps} from './EventsTimeline';\nimport {Item, TimelineTable} from './TimelineTable';\nimport {GroupCollapse, Props as GroupCollapseProps} from './GroupCollapse';\nimport {TimelineEvent} from '../../packages/ya-timeline';\n\ntype Props<T extends TimelineEvent> = {\n tableItems: Item[];\n rowHeight: number;\n collapse?: GroupCollapseProps;\n className?: string;\n} & EventsTimelineProps<T>;\n\nconst Wrap: FC<PropsWithChildren<{collapse?: GroupCollapseProps}>> = ({children, collapse}) =>\n collapse ? (\n <GroupCollapse {...collapse}>{children}</GroupCollapse>\n ) : (\n <React.Fragment>{children}</React.Fragment>\n );\n\nexport const TimelineBlock = <T extends TimelineEvent>({\n className,\n timelines,\n axes,\n rowHeight,\n selectedJob,\n interval,\n tableItems,\n collapse,\n tooltip,\n renderers,\n onTimelineClick,\n onBoundsChanged,\n}: Props<T>) => {\n return (\n <Wrap collapse={collapse}>\n <div className={className}>\n <TimelineTable items={tableItems} rowHeight={rowHeight} />\n <EventsTimeline<T>\n timelines={timelines}\n axes={axes}\n selectedJob={selectedJob}\n interval={interval}\n rowHeight={rowHeight}\n onTimelineClick={onTimelineClick}\n onBoundsChanged={onBoundsChanged}\n tooltip={tooltip}\n renderers={renderers}\n />\n </div>\n </Wrap>\n );\n};\n","import React, {FC, useCallback, useEffect, useMemo} from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n selectActiveJob,\n selectFilter,\n selectInterval,\n selectJobGroupsCount,\n selectJobsInIntervalByGroup,\n} from '../../../../../../store/selectors/operations/jobs-timeline';\nimport {\n Interval,\n setInterval,\n setSelectedJob,\n} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport hammer from '../../../../../../common/hammer';\nimport {useSidePanel} from '../../../../../../hooks/use-side-panel';\nimport {EventsSidePanel} from '../EventsSidePanel';\nimport {prepareJobTimeline} from '../helpers/prepareJobTimeline';\nimport {\n JobLineEvent,\n JobLineRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {\n AllocationLineEvent,\n AllocationLineRenderer,\n} from '../../../../../../components/TimelineBlock/renderer/AllocationLineRenderer';\nimport {EventTimelineTooltip} from '../../../../../../components/TimelineBlock/EventTimelineTooltip';\nimport {EventTimelineTooltipContent} from '../EventsTimeline/EventTimelineTooltipContent';\nimport {Item} from '../../../../../../components/TimelineBlock/TimelineTable';\nimport {ROW_HEIGHT} from '../constants';\nimport './JobsGroups.scss';\nimport {TimelineBlock} from '../../../../../../components/TimelineBlock/TimelineBlock';\n\nconst block = cn('yt-timeline-event-group');\n\nexport const JobsGroups: FC = () => {\n const dispatch = useDispatch();\n const jobGroups = useSelector(selectJobsInIntervalByGroup);\n const groupsCount = useSelector(selectJobGroupsCount);\n const interval = useSelector(selectInterval);\n const {timelineId} = useSelector(selectActiveJob);\n const filter = useSelector(selectFilter);\n\n const handleTimeLineClick = useCallback(\n (events: (JobLineEvent | AllocationLineEvent)[]) => {\n const job = events.find((event) => event.renderType === 'jobLine');\n if (!job) return;\n\n dispatch(\n setSelectedJob({\n id: (job as JobLineEvent).jobId,\n timelineId: `jobLine:${job.axisId}:${job.from}-${job.to}`,\n }),\n );\n },\n [dispatch],\n );\n\n const handleBoundsChanged = useCallback(\n (newInterval: Interval) => {\n dispatch(setInterval(newInterval));\n },\n [dispatch],\n );\n\n const handleSidePanelClose = useCallback(\n (onClose: () => void) => () => {\n dispatch(setSelectedJob({id: '', timelineId: ''}));\n onClose();\n },\n [dispatch],\n );\n\n const handleSidePanelOutsideClick = useCallback(\n (onClose: () => void) => (e: MouseEvent) => {\n if (e.target instanceof Element && e.target.localName !== 'events-timeline-canvas') {\n dispatch(setSelectedJob({id: '', timelineId: ''}));\n onClose();\n }\n },\n [dispatch],\n );\n\n const {openWidget, closeWidget, widgetContent} = useSidePanel('JobsTimeline', {\n renderContent({onClose}) {\n return (\n <EventsSidePanel\n onClose={handleSidePanelClose(onClose)}\n onOutsideClick={handleSidePanelOutsideClick(onClose)}\n />\n );\n },\n });\n\n useEffect(() => {\n const operation = timelineId ? openWidget : closeWidget;\n operation();\n }, [closeWidget, openWidget, timelineId]);\n\n const groups = useMemo(() => {\n if (!interval) return [];\n\n const groupNames = Object.keys(jobGroups).sort();\n return groupNames.map((groupName) => {\n const group = jobGroups[groupName].sort(\n (a, b) => Number(a.cookieId) - Number(b.cookieId),\n );\n const readableGroupName = hammer.format['ReadableField'](groupName);\n const title = `${readableGroupName} (${group.length} / ${groupsCount[groupName]})`;\n\n const tableItems = group.reduce<Record<string, Item>>((acc, item) => {\n if (item.cookieId === undefined) return acc;\n\n acc[item.cookieId] = {\n id: `${item.cookieId}: ${item.start_time}-${item.finish_time}`,\n content: `${readableGroupName} ${item.cookieId}`,\n };\n return acc;\n }, {});\n\n const {timelines, axes} = prepareJobTimeline({\n jobs: group,\n selectedJob: [timelineId],\n filter,\n axesRowHeight: ROW_HEIGHT,\n });\n\n return (\n <TimelineBlock<JobLineEvent | AllocationLineEvent>\n key={groupName}\n className={block()}\n collapse={{\n title,\n }}\n tableItems={Object.values(tableItems)}\n timelines={timelines}\n axes={axes}\n selectedJob={[timelineId]}\n interval={interval}\n rowHeight={ROW_HEIGHT}\n onTimelineClick={handleTimeLineClick}\n onBoundsChanged={handleBoundsChanged}\n tooltip={(e) => {\n if (!e) return;\n\n const {offset, events} = e.detail;\n const event = events.find((i) => i.renderType === 'jobLine');\n if (!event) return null;\n\n const jobEvent = event as JobLineEvent;\n\n return (\n <EventTimelineTooltip offset={offset}>\n <EventTimelineTooltipContent\n events={jobEvent.parts}\n jobId={jobEvent.jobId}\n metaData={jobEvent.meta}\n />\n </EventTimelineTooltip>\n );\n }}\n renderers={[\n {id: 'jobLine', renderer: new JobLineRenderer()},\n {id: 'allocationLine', renderer: new AllocationLineRenderer()},\n ]}\n />\n );\n });\n }, [\n filter,\n groupsCount,\n handleBoundsChanged,\n handleTimeLineClick,\n interval,\n jobGroups,\n timelineId,\n ]);\n\n return (\n <>\n <div className={block('wrap')}>{groups}</div>\n <>{widgetContent}</>\n </>\n );\n};\n","import {JobsTimelineState} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {JobLineEvent} from '../../../../../../components/TimelineBlock/renderer/JobLineRenderer';\nimport {getColorByState} from '../../../../../../components/TimelineBlock/helpers/getColorByState';\nimport {AllocationLineEvent} from '../../../../../../components/TimelineBlock/renderer/AllocationLineRenderer';\nimport {getTimeLineDisplayMode} from './getTimeLineDisplayMode';\n\ninterface AllocationData {\n from: number;\n to: number;\n cookieId: string;\n}\n\nexport const prepareJobTimeline = ({\n jobs,\n selectedJob = [],\n filter = '',\n axesRowHeight = 0,\n}: {\n jobs: JobsTimelineState['jobs'];\n selectedJob?: string[];\n filter?: string;\n axesRowHeight: number;\n}) => {\n // Process allocations\n const allocationMap = new Map<string, AllocationData>();\n const validJobs = jobs.filter((job) => job.cookieId !== undefined);\n\n for (const job of validJobs) {\n if (!job.allocationId) continue;\n\n const firstEvent = job.events[0];\n const lastEvent = job.events[job.events.length - 1];\n const jobStartTime = firstEvent.startTime;\n const jobEndTime = lastEvent.endTime;\n const cookieId = job.cookieId.toString();\n\n const existingAllocation = allocationMap.get(job.allocationId);\n\n if (existingAllocation) {\n existingAllocation.from = Math.min(existingAllocation.from, jobStartTime);\n existingAllocation.to = Math.max(existingAllocation.to, jobEndTime);\n } else {\n allocationMap.set(job.allocationId, {\n from: jobStartTime,\n to: jobEndTime,\n cookieId,\n });\n }\n }\n\n // Convert allocations to events\n const allocations: AllocationLineEvent[] = Array.from(allocationMap.entries()).map(\n ([allocationId, allocation]) => ({\n renderType: 'allocationLine' as const,\n allocationId,\n axisId: allocation.cookieId,\n eventsCount: 1,\n trackIndex: 0,\n from: allocation.from,\n to: allocation.to,\n }),\n );\n\n // Process jobs and collect axes\n const axes = new Set<string>();\n const timelines: JobLineEvent[] = [];\n\n for (const job of validJobs) {\n const cookieId = job.cookieId.toString();\n axes.add(cookieId);\n\n const jobEvents = job.events;\n const firstEvent = jobEvents[0];\n const lastEvent = jobEvents[jobEvents.length - 1];\n\n const parts = jobEvents.map((event) => ({\n percentage: event.percent,\n color: getColorByState(event.state),\n state: event.state,\n interval: {\n from: event.startTime,\n to: event.endTime,\n },\n phases: event.phases,\n }));\n\n timelines.push({\n renderType: 'jobLine' as const,\n axisId: cookieId,\n eventsCount: jobEvents.length,\n trackIndex: 0,\n from: firstEvent.startTime,\n to: lastEvent.endTime,\n jobId: job.id,\n parts,\n displayMode: getTimeLineDisplayMode({\n jobId: job.id,\n timeLineId: `jobLine:${cookieId}:${firstEvent.startTime}-${lastEvent.endTime}`,\n filter,\n selectedJob,\n }),\n meta: {\n startTime: job.start_time,\n endTime: job.finish_time,\n address: job.address,\n allocationId: job.allocationId,\n },\n });\n }\n\n // Prepare axis\n const axesArray = Array.from(axes).map((id, index) => ({\n id,\n top: axesRowHeight * index,\n height: axesRowHeight,\n tracksCount: 1,\n }));\n\n return {\n axes: axesArray,\n timelines: [...timelines, ...allocations],\n };\n};\n","import React, {FC, useCallback, useRef} from 'react';\nimport './JobsTimeline.scss';\nimport cn from 'bem-cn-lite';\nimport {Alert, Flex, Loader} from '@gravity-ui/uikit';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n selectError,\n selectEventsInterval,\n selectInterval,\n selectJobsEmptyError,\n selectJobsOverloadError,\n selectLoading,\n} from '../../../../../store/selectors/operations/jobs-timeline';\nimport {getJobsWithEvents} from '../../../../../store/actions/operations/jobs-timeline';\nimport {TimeLineHeader} from './TimeLineHeader';\nimport {JobsGroups} from './JobsGroups';\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport WithStickyToolbar from '../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {MAX_JOBS_COUNT} from './constants';\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\n\nconst block = cn('yt-jobs-timeline');\n\nexport const JobsTimeline: FC = () => {\n const dispatch = useDispatch();\n const firstUpdate = useRef<boolean>(true);\n const eventsRange = useSelector(selectEventsInterval);\n const overloadError = useSelector(selectJobsOverloadError);\n const emptyError = useSelector(selectJobsEmptyError);\n const isLoading = useSelector(selectLoading);\n const interval = useSelector(selectInterval);\n const error = useSelector(selectError);\n\n const handleUpdate = useCallback(async () => {\n await dispatch(getJobsWithEvents(firstUpdate.current));\n firstUpdate.current = false;\n }, [dispatch]);\n\n useUpdater(handleUpdate);\n\n if (error) {\n return <YTErrorBlock error={error} />;\n }\n\n if (overloadError) {\n return (\n <Alert\n theme=\"info\"\n message={`Too many jobs to display. Max number ${MAX_JOBS_COUNT}`}\n />\n );\n }\n\n if (emptyError) {\n return <Alert theme=\"info\" message={`No jobs to display`} />;\n }\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\">\n <Loader />\n </Flex>\n );\n }\n\n if (!interval || !eventsRange) return null;\n\n return (\n <WithStickyToolbar\n toolbar={<TimeLineHeader />}\n content={<JobsGroups />}\n className={block()}\n padding=\"skip-horizontal\"\n />\n );\n};\n","import {match as MatchType, Redirect, Route, Switch} from 'react-router';\nimport React, {Fragment} from 'react';\nimport {ConnectedProps, connect, useDispatch, useSelector} from 'react-redux';\nimport hammer from '../../../common/hammer';\nimport unipika from '../../../common/thor/unipika';\nimport cn from 'bem-cn-lite';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable, {Template, TemplatePools} from '../../../components/MetaTable/MetaTable';\nimport OperationProgress from '../OperationProgress/OperationProgress';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {SubjectCard} from '../../../components/SubjectLink/SubjectLink';\nimport Button from '../../../components/Button/Button';\nimport {Loader} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../../components/Error/Error';\nimport Icon from '../../../components/Icon/Icon';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Yson from '../../../components/Yson/Yson';\nimport StatusLabel from '../../../components/StatusLabel/StatusLabel';\n\nimport PartitionSizes from './tabs/partition-sizes/PartitionSizes/PartitionSizes';\nimport Details from './tabs/details/Details/Details';\nimport Specification from './tabs/specification/Specification';\nimport JobSizes from './tabs/job-sizes/JobSizes/JobSizes';\nimport Statistics from './tabs/statistics/Statistics';\nimport Jobs from './tabs/Jobs/Jobs';\nimport JobsMonitor from './tabs/JobsMonitor/JobsMonitor';\nimport OperationAttributes from './tabs/attributes/OperationAttributes';\n\nimport Placeholder from '../../../pages/components/Placeholder';\n\nimport {\n getDetailsTabsShowSettings,\n operationMonitoringUrl,\n performAction,\n} from '../../../utils/operations/detail';\nimport {DEFAULT_TAB, OperationTabType, Tab} from '../../../constants/operations/detail';\nimport {showEditPoolsWeightsModal} from '../../../store/actions/operations';\nimport {getOperation} from '../../../store/actions/operations/detail';\nimport {isOperationId} from '../../../utils/operations/list';\nimport {promptAction} from '../../../store/actions/actions';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {TabSettings, makeTabProps} from '../../../utils';\nimport {Page} from '../../../constants/index';\nimport {\n getOperationDetailsLoadingStatus,\n getOperationErasedTrees,\n getOperationPerformanceUrlTemplate,\n selectIsOperationInGpuTree,\n} from '../../../store/selectors/operations/operation';\n\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../utils/utils';\n\nimport './OperationDetail.scss';\nimport {updateListJobsFilter} from '../../../store/actions/operations/jobs';\nimport OperationDetailsMonitor from './tabs/monitor/OperationDetailsMonitor';\nimport {getJobsMonitorTabVisible} from '../../../store/selectors/operations/jobs-monitor';\nimport {RuntimeItem} from '../../../store/reducers/operations/detail';\nimport {\n JobState,\n getOperationStatiscsHasData,\n getTotalCpuTimeSpent,\n getTotalJobWallTime,\n} from '../../../store/selectors/operations/statistics-v2';\nimport UIFactory from '../../../UIFactory';\nimport {RootState} from '../../../store/reducers';\nimport {getCurrentCluster} from '../../../store/selectors/thor';\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {OperationPool, OperationStates} from '../selectors';\nimport {JobsTimeline} from './tabs/JobsTimeline';\nimport {getSettingsTimelineTabVisible} from '../../../store/selectors/settings/settings-ts';\n\nconst detailBlock = cn('operation-detail');\n\nconst headingBlock = cn('elements-heading');\n\ntype RouteProps = {match: MatchType<{operationId: string; tab: OperationTabType}>};\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nfunction OperationDetailUpdater({operationId}: {operationId: string}) {\n const dispatch = useDispatch();\n\n const updateFn = React.useCallback(() => {\n dispatch(getOperation(operationId));\n }, [dispatch, operationId]);\n\n useUpdater(updateFn, {timeout: 15 * 1000});\n\n return null;\n}\n\nfunction getSpecialWaitingStatuses(\n pools: OperationPool[],\n state: OperationStates,\n suspended: boolean | undefined,\n runtime: RuntimeItem[] | undefined,\n type: string | undefined,\n isGpuOperation: boolean | undefined,\n) {\n const fairShareRatio = runtime?.[0]?.progress?.fair_share_ratio as number | undefined;\n const usageRatio = runtime?.[0]?.progress?.usage_ratio as number | undefined;\n const demandRatio = runtime?.[0]?.progress?.demand_ratio as number | undefined;\n\n const isSingleTree = new Set(pools?.map((pool) => pool?.tree)).size === 1;\n const isSpecialStatus =\n type === 'vanilla' && isSingleTree && state === 'running' && isGpuOperation && !suspended;\n\n const isWaitingForResources =\n isSpecialStatus && fairShareRatio === usageRatio && fairShareRatio === 0;\n\n const isWaitingForJobs =\n isSpecialStatus &&\n fairShareRatio === demandRatio &&\n usageRatio !== undefined &&\n fairShareRatio !== undefined &&\n usageRatio < fairShareRatio;\n\n return {isWaitingForResources, isWaitingForJobs};\n}\n\nconst waitingForJobsTooltip =\n 'Operation scheduling has started, but not all jobs have been scheduled yet. If the problem persists, contact cluster administrators.';\nconst waitingForResourcesTooltip =\n 'Not enough resources to start operation scheduling. This may happen if the pool has too many operations in the queue or too low resource guarantees.';\n\nfunction SpecialWaitingStatus({type}: {type: 'jobs' | 'resources'}) {\n return (\n <Tooltip content={type === 'jobs' ? waitingForJobsTooltip : waitingForResourcesTooltip}>\n <StatusLabel\n state={'running'}\n iconState={'running'}\n text={`Waiting for ${type}`}\n renderPlaque\n />\n </Tooltip>\n );\n}\n\nclass OperationDetail extends React.Component<ReduxProps & RouteProps> {\n get settings() {\n return unipika.prepareSettings();\n }\n\n handlePoolsEditClick = () => {\n const {operation, showEditPoolsWeightsModal} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderAction = (action: ReduxProps['actions'][0]) => {\n const {promptAction, operation} = this.props;\n\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the operation?\n </span>\n );\n const handler = ({currentOption}: {currentOption?: string}) =>\n performAction({\n ...action,\n operation,\n currentOption,\n }).then(() => {\n return this.props.getOperation(operation.$value);\n });\n\n return (\n <Button\n key={action.name}\n view={action.theme}\n className={detailBlock('action')}\n title={hammer.format['ReadableField'](action.name)}\n onClick={() => promptAction({...action, message, handler})}\n >\n <Icon awesome={action.icon} />\n \n {hammer.format['ReadableField'](action.name)}\n </Button>\n );\n };\n\n renderHeader() {\n const {actions = [], runtime, operation, isGpuOperation} = this.props;\n const {type, user = '', state, suspended, pools, title, $value} = operation;\n\n const {isWaitingForJobs, isWaitingForResources} = getSpecialWaitingStatuses(\n pools,\n state,\n suspended,\n runtime,\n type,\n isGpuOperation,\n );\n\n const label = suspended ? 'suspended' : state;\n\n const mainStatusProps:\n | {label: typeof label}\n | {state: 'unknown'; iconState: 'running'; text: string} =\n isWaitingForJobs || isWaitingForResources\n ? {state: 'unknown', iconState: 'running', text: 'Running'}\n : {label: suspended ? 'suspended' : state};\n\n return (\n <div className={detailBlock('header', 'elements-section')}>\n <div className={detailBlock('header-heading', headingBlock({size: 'l'}))}>\n {hammer.format['ReadableField'](type)} operation by <SubjectCard name={user} />\n  \n <StatusLabel {...mainStatusProps} renderPlaque />\n  \n {isWaitingForJobs && <SpecialWaitingStatus type={'jobs'} />}\n {isWaitingForResources && <SpecialWaitingStatus type={'resources'} />}\n </div>\n <div className={detailBlock('header-title')}>\n <Yson value={title || $value} inline />\n </div>\n\n <div className={detailBlock('actions')}>{actions.map(this.renderAction)}</div>\n </div>\n );\n }\n\n renderOverview() {\n const {operation, cluster, totalJobWallTime, cpuTimeSpent, erasedTrees, isGpuOperation} =\n this.props;\n const {$value, user = '', type, startTime, finishTime, duration, pools, state} = operation;\n\n const isGpuVanillaOperation = isGpuOperation && type === 'vanilla';\n\n const items = [\n [\n {key: 'id', value: <Template.Id id={$value} />},\n {key: 'user', value: <SubjectCard name={user} />},\n {\n key: 'pools',\n value: (\n <TemplatePools\n onEdit={this.handlePoolsEditClick}\n cluster={cluster}\n pools={pools}\n operationRefId={$value}\n state={state}\n erasedTrees={erasedTrees}\n />\n ),\n },\n {key: 'type', value: <Template.Readable value={type} />},\n ],\n [\n {\n key: 'started',\n value: <Template.Time time={startTime} valueFormat=\"DateTime\" />,\n },\n {\n key: 'finished',\n value: <Template.Time time={finishTime} valueFormat=\"DateTime\" />,\n },\n {\n key: 'duration',\n value: <Template.Time time={duration} valueFormat=\"TimeDuration\" />,\n },\n {\n key: 'total job wall time',\n value: <Template.Time time={totalJobWallTime} valueFormat=\"TimeDuration\" />,\n visible: !isGpuVanillaOperation,\n },\n {\n key: 'total cpu time spent',\n value: <Template.Time time={cpuTimeSpent} valueFormat=\"TimeDuration\" />,\n visible: !isGpuVanillaOperation,\n },\n ],\n ];\n\n return (\n <div className={detailBlock('overview')}>\n <div className={detailBlock('general')}>\n <MetaTable items={items} />\n </div>\n\n <div className={detailBlock('progress-wrapper')}>\n <OperationProgress\n operation={operation}\n onLinkClick={this.onProgressLinkClick}\n />\n {operation.state !== 'failed' && (\n <OperationProgress\n operation={operation}\n type=\"failed\"\n onLinkClick={this.onProgressLinkClick}\n />\n )}\n </div>\n </div>\n );\n }\n\n onProgressLinkClick = (jobState: JobState) => {\n const {updateListJobsFilter} = this.props;\n updateListJobsFilter({name: 'state', value: jobState});\n };\n\n renderTabs() {\n const {\n match: {\n params: {operationId, tab: activeTab},\n },\n cluster,\n operation,\n hasStatististicsTab,\n jobsMonitorVisible,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n timelineTabVisible,\n operationPerformanceUrlTemplate,\n pyDLTelemetryTabVisible,\n } = this.props;\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n const showSettings: Record<string, TabSettings> = {\n ...getDetailsTabsShowSettings(operation),\n [Tab.STATISTICS]: {show: hasStatististicsTab},\n [Tab.JOBS_MONITOR]: {show: jobsMonitorVisible || activeTab === Tab.JOBS_MONITOR},\n [Tab.MONITOR]: {show: monitorTabVisible},\n [Tab.JOBS_TIMELINE]: {show: timelineTabVisible},\n [Tab.PYDL_TELEMETRY]: {show: pyDLTelemetryTabVisible, title: 'PyDL Telemetry'},\n [Tab.PERFORMANCE]: {\n show: Boolean(operationPerformanceUrlTemplate),\n external: true,\n url: operationPerformanceUrlTemplate?.url,\n title: operationPerformanceUrlTemplate?.title,\n routed: false,\n },\n };\n\n if (monitorTabUrlTemplate) {\n const monTab = showSettings[Tab.MONITOR];\n monTab.routed = false;\n monTab.external = true;\n\n const firstPoolInfo = operation.pools?.[0] || {};\n monTab.url = operationMonitoringUrl({\n cluster,\n operation,\n ...firstPoolInfo,\n urlTemplate: monitorTabUrlTemplate,\n });\n }\n\n const props = makeTabProps(path, Tab, showSettings, undefined, {\n [Tab.MONITOR]: monitorTabTitle ?? 'Monitoring',\n });\n\n return (\n <div className={detailBlock('tabs')}>\n <Tabs\n {...props}\n active={activeTab}\n routed\n routedPreserveLocation\n size={UI_TAB_SIZE}\n />\n </div>\n );\n }\n\n renderMain() {\n const {\n match,\n cluster,\n monitorTabVisible,\n jobsMonitorIsSupported,\n monitoringComponent,\n timelineTabVisible,\n pyDLTelemetryTabVisible,\n } = this.props;\n const {url, params} = match;\n const {operationId} = params;\n\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n const PyDLTelemetry = UIFactory.PyDLTelemetrySetup?.renderPyDLTelemetry;\n\n // NOTE: <Redirect> has issues with urls which contain '*', and since every operation alias starts with it,\n // we have to redirect to real operation id in those cases\n return !isOperationId(operationId) ? (\n this.renderAlias()\n ) : (\n <div className={detailBlock('main')}>\n <Switch>\n <Route\n path={`${path}/${Tab.ATTRIBUTES}`}\n render={() => <OperationAttributes className={detailBlock('attributes')} />}\n />\n <Route path={`${path}/${Tab.DETAILS}`} component={Details} />\n <Route path={`${path}/${Tab.SPECIFICATION}`} component={Specification} />\n <Route\n path={`${path}/${Tab.STATISTICS}`}\n render={() => <Statistics className={detailBlock('statistics')} />}\n />\n <Route\n path={`${path}/${Tab.JOBS}`}\n render={() => <Jobs className={detailBlock('jobs')} />}\n />\n {timelineTabVisible && (\n <Route\n path={`${path}/${Tab.JOBS_TIMELINE}`}\n render={() => <JobsTimeline />}\n />\n )}\n <Route\n path={`${path}/${Tab.JOB_SIZES}`}\n render={() => <JobSizes className={detailBlock('job-sizes')} />}\n />\n <Route path={`${path}/${Tab.PARTITION_SIZES}`} component={PartitionSizes} />\n {monitorTabVisible && monitoringComponent && (\n <Route\n path={`${path}/${Tab.MONITOR}`}\n render={() => (\n <OperationDetailsMonitor component={monitoringComponent} />\n )}\n />\n )}\n {jobsMonitorIsSupported && (\n <Route path={`${path}/${Tab.JOBS_MONITOR}`} component={JobsMonitor} />\n )}\n {pyDLTelemetryTabVisible && (\n <Route path={`${path}/${Tab.PYDL_TELEMETRY}`} render={PyDLTelemetry} />\n )}\n <Route path={`${path}/:tab`} component={Placeholder} />\n <Redirect from={url} to={`${path}/${DEFAULT_TAB}`} />\n </Switch>\n </div>\n );\n }\n\n renderAlias() {\n const {match, cluster, operation} = this.props;\n const {\n url,\n params: {operationId, tab},\n } = match;\n\n const alias = ypath.getValue(operation, '/@spec/alias');\n if (operationId !== alias) {\n // Just wait until operation data is loaded\n return null;\n }\n\n const redirectPath = `/${cluster}/${Page.OPERATIONS}/${operation.$value}${\n tab ? '/' + tab : ''\n }`;\n return <Redirect from={url} to={redirectPath} />;\n }\n\n renderContent(isFirstLoading: boolean) {\n return isFirstLoading ? (\n <Loader />\n ) : (\n <Fragment>\n {this.renderHeader()}\n {this.renderOverview()}\n {this.renderTabs()}\n {this.renderMain()}\n </Fragment>\n );\n }\n\n renderError() {\n const {errorData} = this.props;\n\n return <YTErrorBlock message={errorData.message} error={errorData.details} />;\n }\n\n render() {\n const {\n error,\n loading,\n loaded,\n match: {\n params: {operationId},\n },\n } = this.props;\n const isFirstLoading = loading && !loaded;\n\n return (\n <ErrorBoundary>\n <OperationDetailUpdater operationId={operationId} />\n <div className={detailBlock({loading: isFirstLoading})}>\n {error && !loaded ? this.renderError() : this.renderContent(isFirstLoading)}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {operation, errorData, loading, loaded, error, actions, details} =\n state.operations.detail;\n const totalJobWallTime = getTotalJobWallTime(state);\n const cpuTimeSpent = getTotalCpuTimeSpent(state);\n const erasedTrees = getOperationErasedTrees(state);\n\n const {runtime} = details;\n\n const {\n component: monitoringComponent,\n urlTemplate: monitorTabUrlTemplate,\n title: monitorTabTitle,\n } = UIFactory.getMonitoringForOperation(operation) || {};\n\n const monitorTabVisible = Boolean(monitoringComponent) || Boolean(monitorTabUrlTemplate);\n\n const pyDLTelemetryTabVisible = Boolean(UIFactory.PyDLTelemetrySetup?.hasTelemtery(operation));\n\n return {\n cluster: getCurrentCluster(state),\n operation,\n errorData,\n loading,\n loaded,\n error,\n actions,\n runtime,\n totalJobWallTime,\n cpuTimeSpent,\n erasedTrees,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n monitoringComponent,\n pyDLTelemetryTabVisible,\n timelineTabVisible: getSettingsTimelineTabVisible(state),\n jobsMonitorIsSupported: Boolean(UIFactory.getMonitorComponentForJob()),\n jobsMonitorVisible: getJobsMonitorTabVisible(state),\n hasStatististicsTab: getOperationStatiscsHasData(state),\n isGpuOperation: selectIsOperationInGpuTree(state),\n operationPerformanceUrlTemplate: getOperationPerformanceUrlTemplate(state),\n };\n};\n\nconst mapDispatchToProps = {\n promptAction,\n getOperation,\n showEditPoolsWeightsModal,\n updateListJobsFilter,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst OperationDetailConnected = connector(OperationDetail);\n\nexport default function OperationDetailsWithRum(props: RouteProps) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n return <OperationDetailConnected {...props} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {Route, Switch, withRouter} from 'react-router';\n\nimport PoolsWeightsEditModal from '../PoolsWeightsEditModal/PoolsWeightsEditModal';\nimport OperationsList from '../OperationsList/OperationsList';\nimport OperationDetail from '../OperationDetail/OperationDetail';\nimport {DASHBOARD_VIEW_CONTEXT} from '../../../constants/index';\n\nconst block = cn('operations');\n\nfunction Operations(props) {\n const {match, viewContext} = props;\n const className = viewContext !== DASHBOARD_VIEW_CONTEXT ? 'elements-main-section' : '';\n\n return (\n <div className={block(null, className)}>\n <PoolsWeightsEditModal />\n <Switch>\n <Route path={match.path} exact render={() => <OperationsList />} />\n <Route path={`${match.path}/:operationId/:tab?`} component={OperationDetail} />\n </Switch>\n </div>\n );\n}\n\nOperations.propTypes = {\n // from parent\n viewContext: PropTypes.string,\n\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default withRouter(Operations);\n","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Text} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './WarningIcon.scss';\n\nconst b = cn('yt-warning-icon');\n\ninterface Props {\n className?: string;\n hoverContent?: React.ReactNode;\n color?: 'warning' | 'danger';\n children?: React.ReactNode;\n}\n\nexport default function WarningIcon(props: Props) {\n const {className, hoverContent, children, color} = props;\n return (\n <span className={b(null, className)}>\n <Tooltip className={b('tooltip')} content={hoverContent}>\n <Icon className={b('icon', {color})} awesome=\"exclamation-triangle\" />\n {children && (\n <Text variant=\"inherit\" color={color}>\n {children}\n </Text>\n )}\n </Tooltip>\n </span>\n );\n}\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport {loadPoolTreesIfNotLoaded} from '../store/actions/global';\nimport {loadDefaultPoolTree} from '../utils/poolTrees';\n\nexport function usePoolTreesLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadPoolTreesIfNotLoaded());\n }, [dispatch]);\n}\n\nexport function PoolTreesLoader() {\n usePoolTreesLoaded();\n return null;\n}\n\nexport function useDefaultPoolTree() {\n const [defaultPoolTree, setDefaultPoolTree] = React.useState<string | undefined>();\n\n React.useEffect(() => {\n loadDefaultPoolTree().then((value) => {\n setDefaultPoolTree(value);\n });\n }, []);\n\n return defaultPoolTree;\n}\n\nexport function WaitForDefaultPoolTree({\n children,\n}: {\n children: ({defaultPoolTree}: {defaultPoolTree: string}) => React.ReactNode;\n}) {\n const defaultPoolTree = useDefaultPoolTree();\n\n return defaultPoolTree ? children({defaultPoolTree}) : null;\n}\n","const SvgCircleQuestion = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 13.5a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.44 4.54c.43-.354.994-.565 1.56-.565 1.217 0 2.34.82 2.34 2.14 0 .377-.078.745-.298 1.1-.208.339-.513.614-.875.867-.217.153-.325.257-.379.328-.038.052-.038.07-.038.089a.75.75 0 0 1-1.5 0c0-.794.544-1.286 1.057-1.645.28-.196.4-.332.458-.426a.54.54 0 0 0 .075-.312c0-.3-.244-.641-.84-.641a1 1 0 0 0-.608.223c-.167.138-.231.287-.231.418a.75.75 0 0 1-1.5 0c0-.674.345-1.22.78-1.577M8 12a1 1 0 1 0 0-2 1 1 0 0 0 0 2\" clipRule=\"evenodd\" /></svg>;\nexport default SvgCircleQuestion;","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\n\nimport './OperationType.scss';\n\nconst block = cn('yt-operation-type');\n\nexport function OperationType({value}: {value?: string}) {\n const text = React.useMemo(() => {\n return format.ReadableField(value);\n }, [value]);\n\n return <span className={block()}>{text}</span>;\n}\n","import React from 'react';\n\nimport cn from 'bem-cn-lite';\n\nimport './ColorCircle.scss';\n\nconst block = cn('yt-color-circle');\n\nexport function ColorCircle({color, marginRight = true}: {color: string; marginRight?: boolean}) {\n return (\n <div className={block({'margin-right': marginRight})} style={{backgroundColor: color}} />\n );\n}\n"],"names":["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","datepickerDefaultProps","columns","state","get","event","phase","caption","formatter","hammer","format","NO_VALUE","concat","progress","duration","initializing","preparing","pending","materializing","running","completing","reviving","reviving_jobs","failed","start_time","time","DEFAULT_MODE","WITH_ACTIONS_MODE","getEventsTableProps","showActions","type","eventsTableProps","striped","virtual","header","computeKey","item","prepareTableColumns","sets","_defineProperty","mode","getEventsGeneralProps","res","PropTypes","odBlock","ElementsTable","compose","withStickyHead","withStickyFooter","ElementsTableBase","getValue","columnName","_columns$columnName","Events","_React$Component","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","Template","Time","settings","valueFormat","finish_time","Event","isFinalState","isNotFinalState","_getValue","_jsxs","Progress","Readable","isEmpty_","ClickableAttributesButton","_this$props","this","events","eventsItems","slice","totalRow","pop","showAttributesColumn","css","footer","templates","defaultProps","module","exports","t","s","n","e","r","o","u","a","h","years","months","days","hours","minutes","seconds","milliseconds","weeks","c","g","f","$l","m","p","l","$","Math","ceil","floor","y","abs","v","negative","$d","$ms","parseFromMilliseconds","keys","forEach","calMilliseconds","match","Number","prototype","reduce","toISOString","round","toJSON","Y","YY","YYYY","M","MM","D","DD","H","HH","mm","ss","SSS","replace","String","as","add","subtract","locale","clone","humanize","fromNow","valueOf","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","$utils","isDuration","bind","b","Placeholder","tab","useRouteMatch","params","StaleJobIcon","WarningIcon","hoverContent","mapDispatchToProps","toggleColumnSortOrder","sortState","tables","Component","_WithStickyHead","WithStickyHead","top","bWrapper","sticky","prepareTableClassName","ElementsTableHeader","renderStickyHead","displayName","getDisplayName","padded","HEADER_HEIGHT","useAppRumMeasureStart","cluster","useSelector","getCluster","useRumMeasureStart","subPage","ElementsTableFooter","_Component","_this","index","itemHeight","itemMods","selectedIndex","cssHover","_this$state","columnSet","columnItems","selected","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","renderRow","_prepareColumnsData","prepareColumnsData","set","_WithStickyFooter","WithStickyFooter","renderStickyFooter","StatusLabel","label","renderPlaque","iconState","mappedState","_states","starting","failing","aborting","suspended","completed","aborted","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","unknown","getIcon","mods","withSplit","_WithSplit","WithSplit","ReactDOM","document","getElementById","SPLIT_PANE_ID","ChartLink","url","hideIcon","face","wrapContent","Link","target","warnAboutPhysicalValues","propName","warn","normalizeSides","side","Table","constructor","super","activeScrollElement","columnsStyles","from","columnHeaderRefs","tableRef","scrollContainerRef","horizontalScrollBarRef","horizontalScrollBarInnerRef","rowIndex","isRowDisabled","onRowClick","onRowMouseEnter","onRowMouseLeave","onRowMouseDown","getRowClassNames","verticalAlign","edgePadding","wordWrap","getRowDescriptor","descriptor","disabled","additionalClassNames","classNames","interactive","onMouseEnter","onMouseLeave","onMouseDown","join","column","colIndex","id","rawAlign","primary","rawSticky","getBodyCellContent","getRowId","handleScrollContainerMouseenter","setState","handleScrollContainerScroll","current","scrollLeft","handleHorizontalScrollBarMouseenter","handleHorizontalScrollBarScroll","indexOf","getHeadCellContent","name","template","placeholder","placeholderValue","includes","getDerivedStateFromProps","componentDidMount","stickyHorizontalScroll","tableResizeObserver","ResizeObserver","entries","_a","contentRect","setProperty","observe","addEventListener","columnsResizeObserver","window","requestAnimationFrame","updateColumnStyles","componentDidUpdate","prevProps","componentWillUnmount","disconnect","removeEventListener","render","withPrimary","some","ref","renderTable","renderHorizontalScrollBar","renderHead","renderBody","renderEmptyRow","emptyMessage","empty","colSpan","stickyHorizontalScrollBreakpoint","bottom","prevState","columnsWidth","getBoundingClientRect","_","getColumnStyles","maxWidth","filteredColumns","start","toaster","Toaster","LoadDataHandler","error","loaded","errorData","autoHiding","showErrorPopup","_this$props2","_this$props2$alwaysSh","alwaysShowError","YTErrorBlock","SidePanelPortal","_ref2","useSidePanel","renderContent","_React$useState","_React$useState2","_slicedToArray","widgetOpened","setWidgetOpened","dispatch","useDispatch","openWidget","splitScreen","mergeScreen","closeWidget","widgetContent","isEmptyStatistics","stats","some_","ypath","hasProgressTasks","operation","TASKS_PREFIX","prepareFile","file","originalPath","executable","getBoolean","prepareMeta","meta","prepared","map_","sortBy_","prepareStartedBy","startedBy","command","fields","filter_","option","prepareTransferTask","task","task_id","UIFactory","makeUrlForTransferTask","prepareLivePreview","isRunning","_operation$getLivePre","getLivePreviewPath","virtualPath","supported","transaction","prepareTableFilters","table","filters","ranges","range","upperLimit","lowerLimit","normalizeTableRanges","prepareTable","typedTable","userTransactionAlive","prepareTransaction","livePreview","append","teleport","foreign","typedFilters","groupTables","currentGroup","group","forEach_","YPath","create","getKey","folder","toSubpath","stringify","groupKey","push","isFolder","err","console","prepareInput","TYPE","typedTables","$typedAttributes","prepareStderr","prepareCoredumps","coreTable","prepareOutput","prepareIntermediate","prepareScriptCaption","substring","prepareScript","_environment","script","environment","jobCount","files","layerPaths","prepareTasks","tasks","keys_","taskName","prepareVisibleItems","filterVisibleItems","itemsCount","_step","result","count","_iterator","_createForOfIteratorHelper","done","formatShare","significantDigits","prepareFaqUrl","docsUrl","docsUrls","OperationSelector","$value","$attributes","pools","RUNNING_STATES","PREPARING_STATES","INTERMEDIATE_STATES","trees","attrsPerPoolTree","poolsIndexes","schedulingInfo","tree","pool","treeData","isEphemeral","isLightweight","slotIndex","weight","_OperationSelector","_toConsumableArray","ListOperationSelector","_OperationSelector2","user","input","output","startTime","finishTime","jobs","completedJobs","runningJobs","failedJobs","totalJobs","completedJobsProgress","runningJobsProgress","jobsProgress","briefSpec","computeIOProperties","computePools","moment","_typeof","total","spec","io","remote","remoteInputUrl","DetailedOperationSelector","_OperationSelector3","typedData","_this2","alias","totalFailedJobs","failedJobsProgress","description","typedSpec","typedProvidedSpec","typedFullSpec","typedUnrecognizedSpec","live_preview","typedAttributes","fullSpec","runtimeAnnotations","hasVirtualPath","hasPath","suffix","basePath","utils","extractFirstByte","makeLivePreview","getActualValue","defaultValue","getFilterValue","_state$operations$job","operations","getShowCompetitiveJobs","createSelector","filterBy","jobId","isOperationId","idSection","RegExp","test","isGotoEnabled","aliasRegexp","getOperationErasedTrees","detail","rawTrees","reduce_","acc","getOperationAlertEvents","details","alert_events","appeared","alert_type","code","getNumberDeprecated","NaN","to","getOperation","getOperationId","getOperationTasks","getOperationTasksNames","sort","getOperationDetailsLoadingStatus","loading","calculateLoadingStatus","getOperationTypedAttributes","getOperationJobsLoadingStatus","monitorChartStates","states","getOperationExperimentAssignments","getOperationMonitoredJobCount","getOperationJobsMonitorTabSettings","jobsCount","maxJobCount","selectIsOperationInGpuTree","treeConfigs","every","config","main_resource","getOperationPerformanceUrlTemplate","getClusterUiConfig","operationId","uiConfig","operationPerformanceUrlTemplate","operation_performance_url_template","formatByParams","url_template","operation_id","cancelHerlper","CancelHelper","operationDetailsRequests","getState","isAlias","include_scheduler","output_format","TYPED_OUTPUT_FORMAT","operation_alias","GET_OPERATION","REQUEST","ytApiV3","parameters","setup","JSONSerializer","then","checkUserTransaction","_ref3","operationAttributes","preparedAttributes","prepareAttributes","dispatchOperationSuccess","prepareActions","specification","network","prepareRemote","transferTask","genNavigationUrl","stderr","intermediate","coredumps","mapper","reducer","reduceCombiner","prepareSpecification","alerts","helpURL","prepareAlerts","prepareError","runtime","treeFairShareInfo","treeName","prepareRuntime","prepareOperationEvents","resources","statistics","estimatedInputStatistics","dataFlow","source_name","target_name","job_data_statistics","teleport_data_statistics","jobStat","teleportStat","tasksIndexMap","task_name","prepareGraphDataByTasks","dataFlowGraph","jobTypeOrder","fromJobType","toJobType","prepareGraphData","prepareCompletedUsage","forEachYTError","_attributes$$value","job_id","dst","_type_tag","href","location","origin","SUCCESS","_getOperationJobsMoni","JOBS_MONITOR","ytApiV3Id","listJobs","YTApiId","listJobs100","limit","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","resource_limits","_x2","apply","inIntermediateState","callback","outputTransaction","LOAD_RESOURCE_USAGE","operationIntermediateResourceUsage","intermediateResources","account","_x","loadIntermediateResourceUsage","isFirstLoading","YTErrors","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","getDefaultFromTime","getListRequestParameters","getFilterParameters","cursor_time","_operations$list$curs","cursor","cursor_direction","include_archive","cancellableRequests","updateCursor","timestamp","firstPageReached","lastPageReached","_ref$resetLoadingStat","resetLoadingStatus","UPDATE_CURSOR","updateOperationsList","updateOperationsByParams","UPDATE_OPERATIONS_REQUEST","rumId","RumWrapper","RumMeasureTypes","OPERATIONS_LIST","fetch","listOperations","response","incomplete","OPERATIONS_CURSOR_DIRECTION","PAST","FUTURE","updatePager","UPDATE_OPERATIONS_SUCCESS","UPDATE_FILTER_COUNTERS","yt","UPDATE_OPERATIONS_CANCELLED","UPDATE_OPERATIONS_FAILURE","resetCursor","updateFilter","UPDATE_FILTER","resetTimeRange","RESET_TIME_RANGE","showArchiveOperations","SET_OPERATIONS_DATA_MODE","toggleSaveFilterPresetDialog","TOGGLE_SAVE_FILTER_PRESET_DIALOG","showEditPoolsWeightsModal","editable","SHOW_EDIT_WEIGHT_POOL_MODAL","preparePoolsState","prepareWeightsState","renderPoolsAndWeights","weights","setPools","setWeights","_ref4","Page","SCHEDULING","Fragment","TextInput","onUpdate","hideEditPoolsWeightsModal","HIDE_EDIT_WEIGHT_POOL_MODAL","setPoolsAndWeights","pathItems","pathname","split","inOperationsList","OPERATIONS","poolTrees","SET_PULLS_AND_WEIGHTS","old","updateOperationParameters","_parameters","scheduling_options_per_pool_tree","_operations$page$edit","page","editWeightModal","_useState","useState","_useState2","_useState3","_useState4","useEffect","Modal","confirmText","onConfirm","onCancel","isConfirmDisabled","isStateCorrect","isWeightCorrect","every_","isNaN","isPoolCorrect","Yson","inline","OperationProgress","onLinkClick","jobsByStateTitle","routed","renderCounter","isPreparing","showState","_this$props2$operatio","renderState","progressBar","stack","renderProgressBar","renderFailedProgressBar","renderJobCounters","renderFailedJobCounters","PathItem","transaction_id","user_transaction_id","activeTransaction","setActiveTransaction","tableTx","isValidTransactionId","isTransactionAlive","ReadableField","OperationIOLink","renderTitle","getTitle","trimEnd_","unipika","decode","renderCopyTitle","ClipboardButton","UserPoolItem","awesomeIcon","Tooltip","allowUnmounted","OperationsListTable","_len","args","_key","inputTx","outputTx","renderUserPool","multiplePools","SubjectCard","renderMultiplePools","TemplatePools","onEdit","compact","allowDetachEditBtn","TemplateWeight","renderActions","promptAction","action","currentOption","performAction","virtualType","getItemLink","default","user_pool","renderType","renderStartTime","renderProgress","initialLoading","emptyDataDescription","isLoading","OperationType","withRouter","global","_operations$list","hasLoaded","tbBlock","OperationsTextFilter","transition","gotoDetails","handleKeyDown","evt","stateValue","propsValue","activePreset","Redirect","Filter","onChange","newValue","debounce","onKeyDown","pin","bForm","DISPLAY_FORMAT","TimePicker","_isAMomentObject","date","handleTimeChange","newTime","isValidFormat","_checkInputTimeValidity","_prepareOutputDate","textTime","isValid","textDate","minDate","newDate","unix","currentDate","year","month","isValidDate","_checkDateValidity","iconRight","renderIcon","controlAttrs","maxLength","nextProps","formBlock","datePickerProps","controlSize","outputFormat","popupClassName","radioButtonTypes","custom","twoHours","day","week","OperationsArchiveFilter","_useSelector","store","_useSelector$timeRang","modalVisible","activeTypeValue","showModal","useCallback","hideModal","CURRENT","applyTimeRange","prepareText","updateDate","dateWithHours","mapValues_","field","_moment$toObject","toObject","updateTime","handleActiveTypeChange","ev","checked","cancelText","cl","CustomRadioButton","values_","Datepicker","newFrom","newTo","renderCustomCancel","SelectButton","OperationSelectFilter","onRadioChange","val","onCheckChange","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","isFinalLoadingStatus","getOperationsListFilterPresets","getSettingsDataRaw","collectionKeys","startsWith","NAMESPACES","OPERATION_PRESETS","OPERATIONS_LIST_RUNNING_PRESET","preconfigured","OPERATIONS_LIST_DEFAULT_FILTERS","createPreconfiguredPresets","collection","NS_SEPARATOR","getOperationsListActivePresets","selectedFilters","presets","presetId","k","_selectedFilters$key","Set","ELEMENT","OperationsFilterPresets","presetName","isPresetDefault","saveFilterPreset","makeRemoveHandler","stopPropagation","removeFilterPreset","isPresetNameEmpty","applyFilterPreset","defaultPreset","search","_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","PoolTreesLoader","failedJobsFilter","OperationsSelectFilter","preparePermissionsPlaceholder","show","StickyContainer","hideShadow","keepWidth","stickyTop","stickyTopClassName","renderTopSection","renderBottomSection","renderWarning_uiissue_2838","OperationsListToolbarHooked","subjects","handleUpdateFilter","handleToggleSaveFilterPresetDialog","OperationListUpdater","useMemoizedIfEqual","updateFn","useUpdater","onlyOnce","isBigTimeRange","dateFrom","diff","OperationsList","prevTimeRange","_this$props$error","inDashboard","renderError","firstTimeError","OperationsListConnected","OperationsListWithRum","isFinalStatus","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","serieData","timeline","genYagrData","graphs","renderOptions","libraryConfig","axes","x","values","_d","scales","tooltip","tooltipData","_renderTooltip","_tooltipData$scales","originalValue","rows","x0","x1","calculateFormatSettings","fmtFn","v2","opts","digits","PartitionSizes","formatX","formatSettings","Bytes","ErrorBoundary","PartitionSizesConnected","chartKitTheme","getTheme","connector","PartitionSizesWithRum","loadState","OPERATION_TAB_PARTITION_SIZES","additionalStartType","row","ClickableText","hideOopsMsg","AlertEvents","allVisible","setAllVisible","all","compareWithUndefined","toggleShowAll","DataTableYT","displayIndices","sortable","useThemeYT","disableRightGap","rowClassName","Description","getYsonSettingsDisableDecode","_unipika$utils$yson","yson","isWithoutTags","hasOwnProperty","call","canRenderAsMap","CollapsableText","MetaTable","METRICS","completedTableProps","withActions","row_count","compressed_data_size","uncompressed_data_size","data_weight","chunk_count","intermediateTableProps","disk_space","node_count","resourceAsBytes","resourceAsNumber","expandKey","prepareState","allowExpand","expandedTasks","inner","DataFlow","self","fromTo","expKey","toggleExpand","columnsMode","getResourceTemplates","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","DetailedJobsCounter","scheduledCounters","scheduled","scheduledItems","nonScheduledCounters","nonScheduled","nonScheduledItems","Scheduled","nonInterruptedItems","nonInterrupted","interruptedCounters","interrupted","Interrupted","renderAborted","abortedStats","renderCompleted","completedStats","secondary","primaryValue","secondaryValue","handleClose","handleShow","modalContent","renderModalContent","renderCount","onOutsideClick","withVisible","sortCounters","reasonA","reasonB","compareVectors","prepareCategoryCounters","category","prepareCompletedStatistics","prepareAbortedStatistics","prepareCounters","tasksTablesProps","job_type","prepareColumns","fieldTreeForEach","vertex","isT","visitorCb","filterFieldTree","predicate","filterT","tmp","fieldTreeSome","getOperationDetailsOperation","getOperationStatisticsV2","isStatisticItem","getOperationStatisticsAvailableValues","_stats$time$total","_stats$time","_construct","getOperationStatisticsActiveFilterValues","jobTypeFilter","poolTreeFilter","filterText","activeJobType","STATISTICS_FILTER_ALL_VALUE","activePoolTree","getOperationStatiscsHasData","getOperationStatisticsFilteredTree","checkByName","_ref3$tags","getOperationStatisticsFiltered","_tree","isLeafNode","level","itemToRow","summary","job_state","sum_","sum","min_","max_","mergeSummary","getTotalJobWallTime","_tree$time","excludeRunningAndCalcSum","_itemToRow","valuesToSum","compact_","CPU_TIME_SPENT_PART_NAMES","getTotalCpuTimeSpent","get_","getOperationDetailTasksData","_stats$time$total2","_stats$time2","_timeStatistics$abort","_timeStatistics$compl","job_counter","jobType","totalCounters","isTotal","prepareDataFromGraphByTasks","countersByType","prepareJobTypeOrder","taskType","jobTypeInfo","prepareDataFromGraph","_itemToRow2","timeStatistics","_excluded2","abortedJobsTime","completedJobsTime","abortedJobsTimeRatio","abortedJobsShare","prepareAbortedJobsTimeRatio","averageReadDataRate","_itemToRow$completed$","_itemToRow$completed","_stats$data","completedInputSize","prepareAverageReadDataRate","averageReadRowRate","_itemToRow$completed$2","_itemToRow$completed2","_stats$data2","completedInputRows","prepareAverageReadRowRate","expandedState","visibleItems","taskInfo","Tasks","allowActions","__default__","_item$abortedStats","_item$completedStats","TaskInfo","_self$state","expandable","_rowIndex","_jobs$items","collapsibleSize","collapsed","CollapsibleSection","marginDirection","_this$props$jobs","measure","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","renderDescription","renderSpecification","renderRuntime","renderResources","renderEvents","renderAlerts","renderJobs","DetailsConnected","UI_COLLAPSIBLE_SIZE","DetailsWithRum","OPERATION_TAB_DETAILS","StarTrackLink","_props$emptyContent","emptyContent","trackerBaseUrl","uiSettings","_Fragment","ExperimentAssignments","ExperimentsItem","ExperimentAssignmentsItem","setCollapsed","onToggleCollapse","CollapsibleSectionStateLess","onToggle","_React$useState3","_React$useState4","effectVisible","setEffectVisibility","_ypath$getValue","effect","fraction","getOperationExperimentsYsonSettings","toggleEffectVisibility","dispatchEvent","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","SET_TREE_STATE","CHANGE_FILTER_TEXT","CHANGE_AGGREGATION","OPERATION_STATISTICS_PARTIAL","operationType","settingsJobTypes","getSettingOperationStatisticsActiveJobTypes","setSettingsStatisticsActiveJobTypes","StatisticsConnected","_state$operations$sta","_getOperationStatisti","OPERATION_TAB_STATISTICS","getJobsErrors","jobsErrors","getJobsOperationIncarnationsFilter","jobsOperationIncarnations","getJobsOperationIncarnationsValues","availableValues","cancelHelper","getJob","clusterConfig","getCurrentClusterConfig","removeAllRequests","getJobRequestParameters","saveCancelToken","job","GET_JOB","getCompetitiveJobs","getCompetitiveJobsRequestParameters","GET_COMPETITIVE_JOBS","getJobsRequestParameters","offset","pagination","OPERATION_JOBS_TABLE_ID","incarnation","address","with_stderr","with_interruption_info","with_fail_context","with_spec","with_competitors","sort_field","sort_order","asc","getJobFilterParameters","EXTRA_JOBS_COUNT","operation_incarnation","job_competition_id","getJobsCanceler","getJobs","showCompetitiveJobs","jobOperaionIncarnationActions","onRequest","onReset","onSuccess","uniq_","fetchOperationIncarnationAvailableItems","GET_JOBS","operationGetJobs","reject","_jobs$output","errors","state_counts","type_counts","stateCounters","typeCounters","setJobsListFilter","JOB_LIST_UPDATE_FILTER","updateListJobsFilter","isStateFilter","changeColumnSortOrder","tableId","RESET_COMPETITIVE_JOBS","gotoJobsPage","showInputPaths","SHOW_INPUT_PATHS","getJobInputPaths","inputPaths","UPDATE_OFFSET","JobTemplate","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","Label","Popup","hasArrow","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","makeUrlForMonitoringDescriptor","renderErrorAndDebug","areInputPathsPresent","has_spec","button","EllipsisIcon","firstGroup","secondGroup","DropdownMenu","switcher","id_address","withTaskName","taskNamesNumber","renderFinishTime","renderDuration","renderTaskName","brief_statistics","interruption_info","_this$props2$inputPat","hideInputPaths","LOADING_STATUS","UNINITIALIZED","ysonSettings","ERROR","SimpleModal","LOADING","competitiveJobs","renderInputPathsModal","onSort","HIDE_INPUT_PATHS","_getOperationTasksNam","jobsOperationId","getJobsOperationId","_operations$jobs","initialStates","statesProvider","JobsPaginator","_operations$jobs$pagi","JobsIdFilter","handleChange","JobsSuggestFilter","identity_","attributeNames","filtersToUpdate","isFiltered","filterable","JobsOperationIncarnationsFilter","_name","setFilter","updateJobsOperationIncarnationFilter","hideClear","extractJobTypes","sortInPredefinedOrder","OperationJobsToolbar","taskNames","allTaskNames","JobsFilterBy","JobsSelectFilter","JobsAttributesFilter","OperationJobsErrors","Jobs","timeout","JobsWithRum","operationLoadState","OPERATION_TAB_JOBS","getJobsMonitorError","jobsMonitor","getJobsMonitorItemsLoading","getJobsMonitorItemsLoaded","getJobsMonitoringItemsWithDescriptor","getJobsMonitorFromTo","finish","getJobsMonitorDescriptor","getJobsMonitorTabVisible","opId","jobMonId","jobsDescriptor","JobsMonitor","job_descriptor","Loader","centered","NoContent","JobMonitorComponent","getMonitorComponentForJob","OperationAttributes","OPERATION_TAB_ATTRIBUTES","OperationDetailsMonitor","OperationMonitor","component","selectJobs","jobsTimeline","selectLoading","selectInterval","interval","selectFilter","selectActiveJob","selectedJob","selectJobsOverloadError","jobsCountError","selectError","selectEventsInterval","eventsInterval","isFinite","selectJobsEmptyError","selectJobsInIntervalByGroup","groupName","selectJobGroupsCount","getSelectedJob","activeJob","selectIntervalsIsSame","eInterval","getJobsWithEvents","firstRequest","sameIntervals","listResponse","_error","setLoading","setError","setJobsCountError","getBatchError","jobEvents","maxTime","Date","now","dayjs","at","minTime","percent","timeLineJob","cookieId","job_cookie","allocationId","allocation_id","eventsCount","stateIndex","prevEvent","endTime","phases","lastEventIndex","Infinity","setJobs","setInterval","t0","TimeLineHeader","ChevronsExpandToLinesIcon","RangeDateSelection","dateTimeParse","end","displayNow","hasScaleButtons","getPhaseColor","PhaseNameCell","getDateTime","toString","EventsTable","useMemo","prevTime","eventPhase","relativeTime","MetaData","showCopyButton","EventsSidePanel","panelRef","handleDocumentClick","contains","XmarkIcon","getColorByState","getCssColor","EventDisplayMode","getTimeLineDisplayMode","timeLineId","_ref$filter","_ref$selectedJob","hasFilter","hasSelectedJobs","matchesFilter","isSelected","SelectedFound","Found","Selected","Transparent","Default","convertToRGBA","colorString","opacity","normalizedColor","hex","parseInt","colorValues","parseFloat","DEFAULT_COLOR","JobLineRenderer","_AbstractEventRendere","ctx","rawX0","rawX1","timeToPosition","displayMode","parts","y0","yaTimelineConfig","LINE_HEIGHT","_this$getFixedXCoordi","getFixedXCoordinates","isTransparent","renderFilterBackground","startX","percentage","phaseCount","_phases$i$phase","startPosition","endPosition","lineColor","beginPath","fillStyle","rect","moveTo","lineTo","closePath","renderSelectedBorder","borderThickness","SELECTION_OUTLINE_THICKNESS","borderColor","resolveCssValue","SELECTION_OUTLINE_COLOR","backgroundColor","PRIMARY_BACKGROUND_COLOR","borderX0","borderWidth","borderY0","borderHeight","strokeStyle","lineWidth","stroke","innerBorderX0","innerBorderY0","innerBorderWidth","innerBorderHeight","_event","_this$getFixedXCoordi2","hitboxResult","left","right","AbstractEventRenderer","AllocationLineRenderer","__","EventTimelineTooltip","disablePortal","EventTimelineTooltipContentRow","EventTimelineTooltipContent","metaData","phaseItems","ac","eventDuration","arr","EventCanvas","_YaTimeline","renderersList","scheduleTimelineRender","getComponent","BasicEventsProvider","setEvents","setSelectedEvents","_theme","setTimelineConfig","offsetHeight","_superPropGet","renderer","registerRenderer","Grid","Axes","OVERLAPPING_THRESHOLD","SKIP_OVERLAPPING","getCSSPropertyValue","TRACK_HEIGHT","YaTimeline","customElements","define","Timeline","wrapWc","EventsTimeline","timelines","rowHeight","onTimelineClick","onBoundsChanged","renderers","useThemeValue","hoverEvent","setHoverEvent","debouncedSetHoverEvent","debounce_","handleLeftEvent","handleHoverEvent","handleEventClick","scrollTopChanged","selectedEvents","eventsSelected","leftEvent","isZoomAllowed","boundsChanged","TimelineTable","FileIcon","ellipsis","GroupCollapse","_ref$open","isOpen","ChevronDownIcon","Wrap","collapse","TimelineBlock","tableItems","JobsGroups","jobGroups","groupsCount","timelineId","handleTimeLineClick","setSelectedJob","axisId","handleBoundsChanged","newInterval","handleSidePanelClose","handleSidePanelOutsideClick","Element","localName","_useSidePanel","groups","readableGroupName","_prepareJobTimeline","_ref$axesRowHeight","axesRowHeight","allocationMap","Map","validJobs","firstEvent","lastEvent","jobStartTime","jobEndTime","existingAllocation","_step2","allocations","allocation","trackIndex","_iterator2","tracksCount","prepareJobTimeline","_e$detail","jobEvent","JobsTimeline","firstUpdate","eventsRange","overloadError","emptyError","handleUpdate","padding","detailBlock","OperationDetailUpdater","SpecialWaitingStatus","OperationDetail","handlePoolsEditClick","renderAction","onProgressLinkClick","jobState","_this$props3$actions","isGpuOperation","_operation$user","_getSpecialWaitingSta","_runtime$","_runtime$2","_runtime$3","fairShareRatio","usageRatio","demandRatio","isSingleTree","isSpecialStatus","isWaitingForResources","isWaitingForJobs","getSpecialWaitingStatuses","mainStatusProps","totalJobWallTime","cpuTimeSpent","erasedTrees","_operation$user2","isGpuVanillaOperation","Id","operationRefId","_this$props5$match$pa","activeTab","hasStatististicsTab","jobsMonitorVisible","monitorTabVisible","monitorTabTitle","monitorTabUrlTemplate","timelineTabVisible","pyDLTelemetryTabVisible","showSettings","getDetailsTabsShowSettings","Tab","STATISTICS","MONITOR","JOBS_TIMELINE","PYDL_TELEMETRY","PERFORMANCE","external","_operation$pools","monTab","firstPoolInfo","operationMonitoringUrl","urlTemplate","makeTabProps","Tabs","routedPreserveLocation","UI_TAB_SIZE","_UIFactory$PyDLTeleme","jobsMonitorIsSupported","monitoringComponent","PyDLTelemetry","PyDLTelemetrySetup","renderPyDLTelemetry","Route","ATTRIBUTES","DETAILS","SPECIFICATION","JOBS","JOB_SIZES","PARTITION_SIZES","DEFAULT_TAB","renderAlias","_match$params","redirectPath","renderHeader","renderOverview","renderTabs","renderMain","_this$props8","_UIFactory$PyDLTeleme2","_state$operations$det","getMonitoringForOperation","hasTelemtery","getCurrentCluster","getSettingsTimelineTabVisible","OperationDetailConnected","OperationDetailsWithRum","viewContext","DASHBOARD_VIEW_CONTEXT","PoolsWeightsEditModal","exact","future","past","hh","dd","yy","fromToBase","$locale","thresholds","rounding","$u","utc","toNow","usePoolTreesLoaded","loadPoolTreesIfNotLoaded","useDefaultPoolTree","defaultPoolTree","setDefaultPoolTree","loadDefaultPoolTree","WaitForDefaultPoolTree","ColorCircle","_ref$marginRight","marginRight"],"sourceRoot":""}
|