@ytsaurus/ui 1.99.0 → 1.99.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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/2093.ce02d871.chunk.js","mappings":"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","sources":["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/AttributesButton/ClickableAttributesButton.tsx","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/./node_modules/@gravity-ui/chartkit/build/libs/chartkit-error/chartkit-error.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/components/ChartLink/ChartLink.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/runtime.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/data-flow.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/specification/specification.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/alerts.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/selectors.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/operation.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-monitor.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/detail.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/error.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/utils.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/index.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Runtime/Runtime.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/PoolsWeightsEditModal/PoolsWeightsEditModal.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationProgress/OperationProgress.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListTable/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/AlertEvents.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Description.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/resources/resourcesTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DataFlow/DataFlow.js","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleTable/CollapsibleTable.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/specification/specificationTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Specification/Specification.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DetailedJobsCounter/JobCounters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DetailedJobsCounter/DetailedJobsCounter.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/tasks.js","webpack://@ytsaurus/ui/./src/ui/common/hammer/field-tree.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/statistics-v2.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Tasks/Tasks.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Details/Details.tsx","webpack://@ytsaurus/ui/./src/ui/components/StarTrackLink/StarTrackLink.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/ExperimentAssignments/ExperimentAssignments.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/specification/Specification.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/job-sizes/JobSizes/JobSizes.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/statistics/statisticsTableProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/statistics/OperationStatisticName.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/statistics/Statistics.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/statistics.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-operation-incarnations.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/JobTemplate.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/JobDetails.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/ellipsis.svg","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/StatusInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/OperationJobsTable.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/utils.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsPaginator.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsSuggestFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsFilterBy.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsAttributesFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/JobsOperationsIncarnationsFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsToolbar/OperationJobsToolbar.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsErrors/OperationJobsErrors.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/Jobs.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs-monitor.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsMonitor/JobsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/attributes/OperationAttributes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs-timeline.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-timeline.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/constants/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-expand-to-lines.svg","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/TimeLineHeader.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getPhaseColor.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsSidePanel/EventsTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/MetaData.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsSidePanel/EventsSidePanel.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/helpers/getColorByState.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/enums/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/getTimeLineDisplayMode.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/helpers/convertToRGBA.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/JobLineRenderer.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/renderer/AllocationLineRenderer.ts","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventTimelineTooltip.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContentRow.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/EventsTimeline/EventTimelineTooltipContent.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventCanvas.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/EventsTimeline.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/TimelineTable.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/GroupCollapse.tsx","webpack://@ytsaurus/ui/./src/ui/components/TimelineBlock/TimelineBlock.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/JobsGroups/JobsGroups.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/helpers/prepareJobTimeline.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsTimeline/JobsTimeline.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/OperationDetail.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/Operations/Operations.js","webpack://@ytsaurus/ui/./src/ui/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/./node_modules/@gravity-ui/chartkit/build/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/mergeSettingStrategy.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/settings.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/eventEmitter.js","webpack://@ytsaurus/ui/./src/ui/components/StatusLabel/StatusLabel.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withSplit.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Table/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Table/Table.js","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/use-side-panel.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/cn.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/./node_modules/@gravity-ui/chartkit/build/utils/common.js","webpack://@ytsaurus/ui/./src/ui/components/OperationType/OperationType.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/react.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ErrorBoundary/ErrorBoundary.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/getErrorMessage.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/Loader/Loader.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ChartKit.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/yagr/index.js","webpack://@ytsaurus/ui/./src/ui/components/YagrChartKit/YagrChartKit.tsx"],"sourcesContent":["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 from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: 'Show attributes'},\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import React, {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)}}}));","export const CHARTKIT_ERROR_CODE = {\n NO_DATA: 'ERR.CK.NO_DATA',\n INVALID_DATA: 'ERR.CK.INVALID_DATA',\n UNKNOWN: 'ERR.CK.UNKNOWN_ERROR',\n UNKNOWN_PLUGIN: 'ERR.CK.UNKNOWN_PLUGIN',\n TOO_MANY_LINES: 'ERR.CK.TOO_MANY_LINES',\n};\nexport class ChartKitError extends Error {\n constructor({ originalError, message, code = CHARTKIT_ERROR_CODE.UNKNOWN, } = {}) {\n super(message);\n this.isCustomError = true;\n this.code = code;\n if (originalError) {\n this.name = originalError.name;\n this.stack = originalError.stack;\n }\n }\n}\nexport const isChartKitError = (error) => {\n return error instanceof Error && 'isCustomError' in error;\n};\n","import 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 React from 'react';\nimport Link, {LinkProps} from '../../components/Link/Link';\n\nimport Icon, {IconProps} from '../Icon/Icon';\n\ninterface Props {\n className?: string;\n theme?: LinkProps['theme'];\n face?: IconProps['face'];\n url?: string;\n title?: string;\n children?: React.ReactNode;\n hideIcon?: boolean;\n wrapContent?: (node: React.ReactNode) => React.ReactNode;\n}\n\nfunction ChartLink(props: Props) {\n const {className, url, title, theme, children, hideIcon, face, wrapContent} = props;\n\n if (!url) {\n return null;\n }\n\n const icon = hideIcon ? null : <Icon awesome=\"chart-bar\" face={face} />;\n const content = children ? (\n <React.Fragment>\n {icon}\n {children}\n </React.Fragment>\n ) : (\n icon\n );\n\n return (\n <Link className={className} target=\"_blank\" theme={theme} url={url} title={title ?? 'View'}>\n {wrapContent ? wrapContent(content) : content}\n </Link>\n );\n}\n\nexport default React.memo(ChartLink);\n","import map_ from 'lodash/map';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\n\nexport function formatShare(value) {\n return hammer.format['SmallNumber'](value, {significantDigits: 4});\n}\n\nexport function prepareRuntime(operation) {\n const progress = ypath.getValue(operation, '/@progress');\n\n if (progress && operation.isRunning()) {\n let trees = ypath.getValue(progress, '/scheduling_info_per_pool_tree');\n\n trees =\n trees &&\n map_(trees, (treeFairShareInfo, treeName) => ({\n progress: treeFairShareInfo,\n name: treeName,\n }));\n\n return trees;\n }\n}\n","import forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\nimport sortBy_ from 'lodash/sortBy';\n\nimport ypath from '../../../../common/thor/ypath';\n\nfunction prepareGraphData(operation) {\n if (hasProgressTasks(operation)) {\n return prepareGraphDataByTasks(operation);\n }\n\n const dataFlowGraph = ypath.getValue(operation, '/@progress/data_flow_graph');\n const jobTypeOrder = ypath.getValue(dataFlowGraph, '/topological_ordering');\n const statistics = ypath.getValue(dataFlowGraph, '/edges');\n\n const data = [];\n\n if (dataFlowGraph) {\n forEach_(jobTypeOrder, (fromJobType) => {\n forEach_(statistics[fromJobType], (value, toJobType) => {\n data.push({\n from: fromJobType,\n to: toJobType,\n value: value.statistics,\n });\n });\n });\n }\n\n return data;\n}\n\nfunction prepareGraphDataByTasks(operation) {\n const dataFlow = ypath.getValue(operation, '/@progress/data_flow');\n const tasks = ypath.getValue(operation, '/@progress/tasks');\n\n const res = reduce_(\n dataFlow,\n (acc, item) => {\n const {\n source_name: from,\n target_name: to,\n job_data_statistics,\n teleport_data_statistics,\n } = item;\n acc.push({\n from,\n to,\n info: item,\n value: keys_(job_data_statistics).reduce((acc, key) => {\n const jobStat = ypath.getValue(job_data_statistics[key]);\n const teleportStat = ypath.getValue(teleport_data_statistics[key]);\n acc[key] = jobStat + teleportStat;\n return acc;\n }, {}),\n job_data_statistics: isEmptyStatistics(job_data_statistics)\n ? null\n : job_data_statistics,\n teleport_data_statistics: isEmptyStatistics(teleport_data_statistics)\n ? null\n : teleport_data_statistics,\n });\n return acc;\n },\n [],\n );\n\n const tasksIndexMap = reduce_(\n tasks,\n (acc, {task_name}, index) => {\n acc[task_name] = index;\n return acc;\n },\n {},\n );\n\n return sortBy_(res, ({from}) => {\n if (from === 'input') {\n return -1;\n }\n return tasksIndexMap[from];\n });\n}\n\nfunction isEmptyStatistics(stats) {\n return !some_(stats, (value) => {\n return Boolean(ypath.getValue(value));\n });\n}\n\nexport function prepareCompletedUsage(operation) {\n const progress = ypath.getValue(operation, '/@progress');\n\n if (progress) {\n let statistics = [];\n\n const estimatedInputStatistics = ypath.getValue(\n operation,\n '/@progress/estimated_input_statistics',\n );\n\n if (estimatedInputStatistics) {\n statistics.push({\n name: 'Estimated input',\n value: estimatedInputStatistics,\n });\n }\n\n statistics = statistics.concat(prepareGraphData(operation));\n\n return statistics;\n }\n}\n\nexport function prepareIntermediateUsage(operation, intermediate) {\n return map_(intermediate, (resources, account) => ({\n ...resources,\n account,\n }));\n}\n\nexport function hasProgressTasks(operation) {\n return ypath.getValue(operation, '/@progress/tasks');\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\n\nimport ypath from '../../../../../common/thor/ypath';\nimport UIFactory from '../../../../../UIFactory';\nimport type {\n DetailedOperationSelector,\n OperationPreviewType,\n} from '../../../../../pages/operations/selectors';\nimport {genNavigationUrl} from '../../../../../utils/navigation/navigation';\n\nconst TASKS_PREFIX = 'tasks/';\n\nfunction prepareFile(file: unknown) {\n return {\n path: ypath.getValue(file),\n originalPath: ypath.getValue(file, '/@original_path'),\n name: ypath.getValue(file, '/@file_name'),\n executable: ypath.getBoolean(file, '/@executable'),\n };\n}\n\nfunction prepareMeta(meta: Record<string, unknown>) {\n const prepared = map_(meta, (value, name) => ({name, value}));\n\n return sortBy_(prepared, 'name');\n}\n\nfunction prepareStartedBy(operation: DetailedOperationSelector) {\n const startedBy = ypath.getValue(operation, '/@spec/started_by');\n const command = ypath.getValue(startedBy, '/command') || [];\n\n const fields = filter_(prepareMeta(startedBy), (option) => option.name !== 'command');\n\n if (fields.length || command.length) {\n return {\n fields: fields,\n command: command,\n };\n }\n\n return undefined;\n}\n\nfunction prepareRemote(operation: DetailedOperationSelector) {\n if (operation.type === 'remote_copy') {\n return {\n cluster: ypath.getValue(operation, '/@spec/cluster_name'),\n network: ypath.getValue(operation, '/@spec/network_name'),\n };\n }\n return undefined;\n}\n\nfunction prepareTransferTask(operation: DetailedOperationSelector) {\n const task = ypath.getValue(operation, '/@spec/transfer_manager');\n\n if (task) {\n return {\n id: task.task_id,\n url: UIFactory.makeUrlForTransferTask(operation),\n };\n }\n return undefined;\n}\n\nfunction prepareTransaction(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n table: unknown,\n userTransactionAlive: boolean,\n) {\n const tableTransaction = ypath.get(table, '/@transaction_id');\n\n if (tableTransaction) {\n return tableTransaction;\n } else if (operation.state === 'running') {\n return ypath.get(\n operation,\n `/@${type === 'stderr' ? 'debug_output' : type}_transaction_id`,\n );\n } else if (userTransactionAlive) {\n return ypath.get(operation, '/@user_transaction_id');\n }\n return undefined;\n}\n\nfunction prepareLivePreview(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n index?: number | string,\n): {path?: string; supported: boolean; transaction?: string} {\n if (operation.isRunning()) {\n const {path, virtualPath} = operation.getLivePreviewPath(type, index);\n\n if (virtualPath) {\n return {path: virtualPath, supported: true};\n } else if (path) {\n const transaction = ypath.getValue(operation, '/@async_scheduler_transaction_id');\n return {path, transaction, supported: true};\n }\n }\n\n return {supported: false};\n}\n\ntype RangeType = {upper_limit?: number; lower_limit?: number};\n\nfunction normalizeTableRanges(table: unknown) {\n let ranges: Array<RangeType> = ypath.getValue(table, '/@ranges');\n\n if (typeof ranges === 'undefined') {\n // Fallback attempt to get ranges from attributes\n // Exact range is only supported in updated ypath\n const upperLimit = ypath.getValue(table, '/@upper_limit');\n const lowerLimit = ypath.getValue(table, '/@lower_limit');\n\n let range: RangeType | undefined;\n\n if (typeof upperLimit !== 'undefined') {\n range = range || {};\n range['upper_limit'] = upperLimit;\n }\n\n if (typeof lowerLimit !== 'undefined') {\n range = range || {};\n range['lower_limit'] = lowerLimit;\n }\n\n if (range) {\n ranges = [range];\n }\n\n if (range) {\n ranges = [range];\n }\n }\n\n return ranges;\n}\n\nfunction prepareTableFilters(table: unknown) {\n const ranges = normalizeTableRanges(table);\n const columns = ypath.getValue(table, '/@columns');\n let filters: {ranges?: typeof ranges; columns?: typeof columns} | undefined;\n\n if (ranges) {\n filters = filters || {};\n filters.ranges = ranges;\n }\n\n if (columns) {\n filters = filters || {};\n filters.columns = columns;\n }\n\n return filters;\n}\n\nfunction prepareTable(\n operation: DetailedOperationSelector,\n type: OperationPreviewType,\n table: unknown,\n typedTable: unknown,\n userTransactionAlive: boolean,\n index?: number | string,\n) {\n const path: string = ypath.getValue(table);\n const cluster: string | undefined = ypath.getValue(table, '/@cluster');\n const originalPath = ypath.getValue(table, '/@original_path');\n const transaction = prepareTransaction(operation, type, table, userTransactionAlive);\n\n return {\n path,\n ...(cluster ? {cluster} : {}),\n originalPath,\n transaction,\n livePreview: prepareLivePreview(operation, type, index),\n append: ypath.getBoolean(table, '/@append'),\n teleport: ypath.getBoolean(table, '/@teleport'),\n primary: ypath.getBoolean(table, '/@primary'),\n foreign: ypath.getBoolean(table, '/@foreign'),\n filters: prepareTableFilters(table),\n typedFilters: prepareTableFilters(typedTable),\n };\n}\n\nfunction groupTables<T extends {path: string; transaction?: string; cluster?: string}>(\n tables: Array<T>,\n) {\n const group: Array<{\n path: string;\n name?: string;\n isFolder?: boolean;\n transaction?: string;\n cluster?: string;\n }> = [];\n let currentGroup: string;\n\n forEach_(tables, (table) => {\n try {\n const {cluster} = table;\n const path = ypath.YPath.create(table.path, 'absolute');\n const name = path.getKey();\n const folder = path.toSubpath(-2).stringify();\n const groupKey: string = cluster ? `${cluster}:${folder}` : folder;\n\n if (currentGroup !== groupKey) {\n currentGroup = groupKey;\n group.push({\n path: folder,\n transaction: table.transaction,\n isFolder: true,\n ...(cluster ? {cluster} : {}),\n });\n }\n\n group.push(Object.assign(table, {name: name}));\n } catch (err) {\n console.error('groupTables error', err);\n }\n });\n\n return group;\n}\n\nfunction prepareRemoteInput<T extends {path: string; transaction?: string}>(\n input: Array<T>,\n cluster: string,\n) {\n if (cluster) {\n return map_(input, (item) => ({\n ...item,\n remote: true,\n url: genNavigationUrl({cluster, ...item}),\n }));\n }\n\n return input;\n}\n\nexport function remoteInputUrl(cluster: string, path: string, transaction?: string) {\n return '/' + cluster + '/navigation?path=' + path + (transaction ? '&t=' + transaction : '');\n}\n\nfunction prepareInput(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'input';\n let tables;\n\n switch (operation.type) {\n case 'remote_copy':\n case 'merge':\n case 'map':\n case 'reduce':\n case 'map_reduce':\n case 'sort':\n case 'join_reduce': {\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n tables = ypath.get(operation, '/@spec/input_table_paths');\n tables = map_(tables, (table, index) =>\n prepareTable(operation, TYPE, table, typedTables[index], userTransactionAlive),\n );\n break;\n }\n case 'erase': {\n const typedTable = ypath.get(operation.$typedAttributes, '/spec/input_table_path');\n\n tables = ypath.get(operation, '/@spec/table_path');\n tables = tables && [\n prepareTable(operation, TYPE, tables, typedTable, userTransactionAlive),\n ];\n break;\n }\n }\n\n return groupTables(tables);\n}\n\nfunction prepareStderr(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'stderr';\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n let tables = ypath.get(operation, '/@spec/stderr_table_path');\n tables = tables && [prepareTable(operation, TYPE, tables, typedTables, userTransactionAlive)];\n\n return groupTables(tables);\n}\n\nfunction prepareCoredumps(operation: DetailedOperationSelector) {\n const coreTable = ypath.get(operation.$typedAttributes, '/spec/core_table_path');\n\n const tables = coreTable ? [prepareTable(operation, 'core', coreTable, [], false)] : [];\n return groupTables(tables);\n}\n\nfunction prepareOutput(operation: DetailedOperationSelector, userTransactionAlive: boolean) {\n const TYPE = 'output';\n let tables;\n\n switch (operation.type) {\n case 'map':\n case 'reduce':\n case 'map_reduce':\n case 'join_reduce': {\n const typedTables = ypath.get(operation.$typedAttributes, '/spec/input_table_paths');\n\n tables = ypath.get(operation, '/@spec/output_table_paths');\n tables = map_(tables, (table, index) =>\n prepareTable(\n operation,\n TYPE,\n table,\n typedTables[index],\n userTransactionAlive,\n index,\n ),\n );\n break;\n }\n case 'merge': // These operations do not have output livePreview\n case 'sort':\n case 'remote_copy': {\n const typedTable = ypath.get(operation.$typedAttributes, '/spec/input_table_path');\n\n tables = ypath.get(operation, '/@spec/output_table_path');\n tables = tables && [\n prepareTable(operation, TYPE, tables, typedTable, userTransactionAlive),\n ];\n break;\n }\n }\n\n return groupTables(tables);\n}\n\nfunction prepareIntermediate(operation: DetailedOperationSelector) {\n let livePreview;\n\n switch (operation.type) {\n case 'map_reduce':\n case 'sort':\n livePreview = prepareLivePreview(operation, 'intermediate');\n break;\n }\n\n if (livePreview && livePreview.supported) {\n return livePreview;\n }\n\n return undefined;\n}\n\nfunction prepareScriptCaption(type: string) {\n return type.indexOf(TASKS_PREFIX) === 0 ? type.substring(TASKS_PREFIX.length) + '_task' : type;\n}\n\nfunction prepareScript(operation: DetailedOperationSelector, type: string) {\n try {\n const script = ypath.getValue(operation, '/@spec/' + type);\n\n let environment = ypath.getValue(script, '/environment');\n environment = prepareMeta(environment);\n\n const command = ypath.getValue(script, '/command');\n const className = ypath.getValue(script, '/class_name');\n const jobCount = ypath.getValue(script, '/job_count');\n const files = map_(ypath.getValue(script, '/file_paths'), prepareFile);\n const layerPaths = ypath.getValue(script, '/layer_paths');\n\n if (command || className || jobCount || files?.length || environment?.length) {\n return {\n type: type,\n caption: prepareScriptCaption(type),\n command,\n className,\n jobCount,\n files,\n environment,\n layerPaths,\n };\n }\n } catch (err) {\n console.error('prepareScript error:', err);\n }\n\n return undefined;\n}\n\nfunction prepareTasks(operation: DetailedOperationSelector) {\n const tasks = ypath.getValue(operation, '/@spec/tasks');\n\n if (tasks) {\n return map_(keys_(tasks), (taskName) => prepareScript(operation, TASKS_PREFIX + taskName));\n }\n\n return undefined;\n}\n\nexport function prepareSpecification(\n operation: DetailedOperationSelector,\n userTransactionAlive: boolean,\n) {\n const remote = prepareRemote(operation);\n\n const specification = {\n startedBy: prepareStartedBy(operation),\n\n // Remote copy\n remote,\n transferTask: prepareTransferTask(operation),\n // Merge\n mode: ypath.getValue(operation, '/@spec/mode'),\n\n // Input/Intermediate/Output/Stderr\n input: prepareRemoteInput(prepareInput(operation, userTransactionAlive), remote?.cluster),\n output: prepareOutput(operation, userTransactionAlive),\n stderr: prepareStderr(operation, userTransactionAlive),\n intermediate: prepareIntermediate(operation),\n coredumps: prepareCoredumps(operation),\n\n // Scripts\n mapper: prepareScript(operation, 'mapper'),\n reducer: prepareScript(operation, 'reducer'),\n reduceCombiner: prepareScript(operation, 'reduce_combiner'),\n\n tasks: prepareTasks(operation),\n };\n\n return specification;\n}\n\nexport function prepareVisibleItems<T extends {isFolder?: boolean}>(items: Array<T>) {\n return filter_(items, (item) => !item.isFolder);\n}\n\nexport function filterVisibleItems<T extends {isFolder?: boolean}>(\n items: Array<T>,\n itemsCount: number,\n) {\n const result = [];\n let count = 0;\n\n for (const item of items) {\n if (!item.isFolder) {\n count++;\n }\n if (count === itemsCount + 1) {\n break;\n }\n\n result.push(item);\n }\n\n return result;\n}\n","import {docsUrl} from '../../../../config';\n\nimport map_ from 'lodash/map';\n\nimport UIFactory from '../../../../UIFactory';\n\nexport function prepareFaqUrl(type: string) {\n return docsUrl(UIFactory.docsUrls['faq'] + '#' + type.replace(/_/g, ''));\n}\n\nexport function prepareAlerts(alerts?: Record<string, unknown>) {\n if (alerts) {\n return map_(alerts, (error, type) => ({\n error: error,\n helpURL: prepareFaqUrl(type),\n }));\n }\n\n return undefined;\n}\n","import map_ from 'lodash/map';\n\nimport moment from 'moment';\n\nimport ypath from '../../common/thor/ypath';\nimport hammer from '../../common/hammer';\nimport {createSelector} from 'reselect';\nimport {remoteInputUrl} from '../../utils/operations/tabs/details/specification/specification';\nimport {FIX_MY_TYPE} from '../../types';\nimport {RootState} from '../../store/reducers';\nimport {JobsState} from '../../store/reducers/operations/jobs/jobs';\n\nexport interface OperationPool {\n tree: string;\n pool: string;\n isEphemeral: boolean;\n slotIndex?: number;\n weight?: number;\n}\n\ntype PreparingStates = 'materializing' | 'initializing' | 'preparing' | 'pending';\ntype RunningStates = 'running' | 'completing' | 'failing' | 'aborting' | 'reviving';\n\nexport type OperationStates = PreparingStates | RunningStates | 'completed' | 'failed' | 'aborted';\n\nexport class OperationSelector implements Record<string, any> {\n static PREPARING_STATES = ['materializing', 'initializing', 'preparing', 'pending'] as const;\n\n static RUNNING_STATES = ['running', 'completing', 'failing', 'aborting', 'reviving'] as const;\n\n static INTERMEDIATE_STATES = [\n ...OperationSelector.RUNNING_STATES,\n ...OperationSelector.PREPARING_STATES,\n ];\n\n id: string;\n $value: string;\n $attributes: any;\n state: OperationStates;\n pools: Array<OperationPool> = [];\n\n constructor(data: any) {\n const {id, ...attributes} = data;\n this.$value = id;\n this.id = id;\n this.$attributes = attributes;\n\n this.state = ypath.getValue(attributes, '/state');\n }\n\n isRunning() {\n return OperationSelector.RUNNING_STATES.indexOf(this.state as any) !== -1;\n }\n\n isPreparing() {\n return OperationSelector.PREPARING_STATES.indexOf(this.state as any) !== -1;\n }\n\n inIntermediateState() {\n return OperationSelector.INTERMEDIATE_STATES.indexOf(this.state as any) !== -1;\n }\n\n successfullyCompleted() {\n return this.state === 'completed';\n }\n\n computePools(attributes: any) {\n const trees = ypath.getValue(\n attributes,\n '/runtime_parameters/scheduling_options_per_pool_tree',\n );\n const attrsPerPoolTree = ypath.getValue(attributes, '/scheduling_attributes_per_pool_tree');\n const poolsIndexes = ypath.getValue(attributes, '/slot_index_per_pool_tree') || {};\n\n this.pools = map_(trees, (schedulingInfo, name) => {\n const tree = name;\n const pool = schedulingInfo.pool;\n const treeData = ypath.getValue(attrsPerPoolTree, `/${tree}`);\n const isEphemeral = ypath.getValue(treeData, '/running_in_ephemeral_pool') || false;\n const isLightweight = ypath.getValue(treeData, '/running_in_lightweight_pool') || false;\n\n return {\n tree,\n pool,\n isEphemeral,\n isLightweight,\n slotIndex: poolsIndexes[name],\n weight: schedulingInfo.weight || 1,\n };\n });\n }\n}\n\nexport type OperationPreviewType = 'input' | 'output' | 'stderr' | 'intermediate' | 'core';\n\nexport class ListOperationSelector extends OperationSelector {\n weight?: number;\n title?: string;\n type?: string;\n user?: string;\n suspended?: boolean;\n\n input?: IOProperties;\n output?: IOProperties;\n\n startTime?: string;\n finishTime?: string;\n duration?: number;\n\n jobs?: any;\n\n completedJobs?: number;\n runningJobs?: number;\n failedJobs?: number;\n totalJobs?: number;\n completedJobsProgress?: number;\n runningJobsProgress?: number;\n jobsProgress?: number;\n\n constructor(data: any) {\n super(data);\n\n const attributes = this.$attributes;\n\n const briefSpec = ypath.getValue(attributes, '/brief_spec');\n\n this.title = ypath.getValue(briefSpec, '/title');\n this.type = ypath.getValue(attributes, '/type');\n this.user = ypath.getValue(attributes, '/authenticated_user');\n this.suspended = ypath.getValue(attributes, '/suspended');\n\n const cluster =\n this.type === 'remote_copy' ? ypath.get(this, '/@brief_spec/cluster_name') : undefined;\n\n this.input = this.computeIOProperties(briefSpec, 'input', cluster);\n this.output = this.computeIOProperties(briefSpec, 'output');\n\n this.computePools(attributes);\n if (this.pools.length === 1) {\n this.weight = this.pools[0].weight;\n }\n\n this.startTime = ypath.getValue(attributes, '/start_time');\n this.finishTime = ypath.getValue(attributes, '/finish_time');\n this.duration = (moment(this.finishTime) as any) - (moment(this.startTime) as any);\n\n const progress = ypath.getValue(attributes, '/brief_progress');\n const jobs = (this.jobs = ypath.getValue(progress, '/jobs'));\n\n if (typeof jobs !== 'undefined') {\n this.completedJobs =\n typeof jobs.completed === 'object' ? jobs.completed.total : jobs.completed;\n this.runningJobs = jobs.running;\n this.failedJobs = jobs.failed;\n this.totalJobs = jobs.total;\n this.completedJobsProgress = (this.completedJobs! / this.totalJobs!) * 100;\n this.runningJobsProgress = (this.runningJobs! / this.totalJobs!) * 100;\n this.jobsProgress = this.completedJobsProgress + this.runningJobsProgress;\n }\n }\n\n computeIOProperties(spec: any, type: string, cluster?: string) {\n const io = ypath.get(spec, '/' + type + '_table_paths');\n\n const res = {\n count: ypath.getValue(io, '/@count'),\n table: ypath.getValue(io, '/0'),\n url: undefined as undefined | string,\n remote: undefined as undefined | boolean,\n };\n\n if (cluster) {\n res.url = remoteInputUrl(cluster, res.table);\n res.remote = true;\n }\n\n return res;\n }\n}\n\nexport interface IOProperties {\n count: number;\n table: string;\n url?: string;\n remote?: boolean;\n}\n\nexport class DetailedOperationSelector extends OperationSelector {\n $typedAttributes: unknown;\n\n alias?: string;\n\n type?: string;\n user?: string;\n suspended?: boolean;\n\n startTime?: string;\n finishTime?: string;\n duration?: number;\n\n jobs?: any;\n\n completedJobs?: number;\n runningJobs?: number;\n failedJobs?: number;\n totalJobs?: number;\n completedJobsProgress?: number;\n runningJobsProgress?: number;\n jobsProgress?: number;\n\n totalFailedJobs?: number;\n failedJobsProgress?: number;\n\n description?: string;\n title?: string;\n\n typedSpec?: any;\n typedProvidedSpec?: any;\n typedFullSpec?: any;\n typedUnrecognizedSpec?: any;\n\n live_preview: unknown;\n\n constructor(data: any, typedData: unknown) {\n super(data);\n\n this.$typedAttributes = typedData;\n\n const attributes = this.$attributes;\n const typedAttributes = this.$typedAttributes;\n\n const spec = ypath.getValue(attributes, '/spec');\n const fullSpec = ypath.getValue(attributes, '/full_spec');\n\n this.alias = ypath.getValue(spec, '/alias');\n\n this.typedSpec = ypath.getValue(typedAttributes, '/spec');\n this.typedProvidedSpec = ypath.getValue(typedAttributes, '/provided_spec');\n this.typedFullSpec = ypath.getValue(typedAttributes, '/full_spec');\n this.typedUnrecognizedSpec = ypath.getValue(typedAttributes, '/unrecognized_spec');\n\n this.title = ypath.getValue(spec, '/title');\n\n const runtimeAnnotations = ypath.getValue(attributes, '/runtime_parameters/annotations');\n this.description = ypath.getValue(runtimeAnnotations, '/description');\n // TODO: get rid of the following string when all cluster are updated to 20.1 version\n this.description = this.description || ypath.getValue(spec, '/description');\n\n this.type =\n ypath.getValue(attributes, '/operation_type') || ypath.getValue(attributes, '/type');\n this.user = ypath.getValue(attributes, '/authenticated_user');\n this.suspended = ypath.getValue(attributes, '/suspended');\n\n this.startTime = ypath.getValue(attributes, '/start_time');\n this.finishTime = ypath.getValue(attributes, '/finish_time');\n\n this.duration = (moment(this.finishTime) as any) - (moment(this.startTime) as any);\n\n this.computePools(attributes);\n\n const progress = ypath.getValue(attributes, '/progress');\n const jobs = (this.jobs = ypath.getValue(progress, '/jobs'));\n\n if (typeof jobs !== 'undefined') {\n this.completedJobs =\n typeof jobs.completed === 'object' ? jobs.completed.total : jobs.completed;\n this.runningJobs = jobs.running;\n this.totalJobs = jobs.total;\n this.completedJobsProgress = (this.completedJobs! / this.totalJobs!) * 100;\n this.runningJobsProgress = (this.runningJobs! / this.totalJobs!) * 100;\n this.jobsProgress = this.completedJobsProgress + this.runningJobsProgress;\n\n this.failedJobs = jobs.failed;\n if (fullSpec) {\n this.totalFailedJobs = ypath.getValue(fullSpec, '/max_failed_job_count');\n }\n this.failedJobsProgress = this.totalFailedJobs\n ? (this.failedJobs! / this.totalFailedJobs) * 100\n : 0;\n }\n\n this.live_preview = ypath.getValue(progress, '/live_preview');\n }\n\n getLivePreviewPath(\n type: OperationPreviewType,\n index?: number | string,\n ): {path?: string; virtualPath?: string} {\n const hasVirtualPath = ypath.getBoolean(\n this.live_preview,\n `/virtual_table_format/${type}_supported`,\n ) as boolean;\n\n const hasPath = hasVirtualPath\n ? false\n : (ypath.getBoolean(this.live_preview, `/${type}_supported`) as boolean);\n\n const suffix = hasVirtualPath ? '/controller_orchid/live_previews' : '';\n const basePath = `//sys/operations/${hammer.utils.extractFirstByte(this.id)}/${\n this.id\n }${suffix}`;\n\n switch (type) {\n case 'output':\n return makeLivePreview(`${basePath}/output_${index || 0}`, hasVirtualPath, hasPath);\n case 'stderr':\n return makeLivePreview(`${basePath}/stderr`, hasVirtualPath, hasPath);\n case 'intermediate':\n return makeLivePreview(`${basePath}/intermediate`, hasVirtualPath, hasPath);\n case 'core':\n return hasVirtualPath\n ? makeLivePreview(`${basePath}/core`, hasVirtualPath, false)\n : {};\n }\n\n return {};\n }\n}\n\nfunction makeLivePreview(path: string, hasVirtualPath: boolean, hasPath: boolean) {\n return hasVirtualPath ? {virtualPath: path} : {path: hasPath ? path : undefined};\n}\n\nexport function getCounters(name: string, states: FIX_MY_TYPE, rawCounters: FIX_MY_TYPE) {\n const counters: FIX_MY_TYPE = ypath.getValue(rawCounters, `/${name}_counts`);\n\n return hammer.filter.countCategoriesNG({\n items: map_(counters, (count, value) => ({count, value})),\n categories: hammer.filter.flattenCategoriesNG(states, 'name'),\n custom: (item: {value: string; count: number}, counters: Record<string, number>) => {\n counters[item.value] += item.count;\n counters['all'] += item.count;\n },\n });\n}\n\nexport function getActualValue<T>(value: T | undefined, defaultValue?: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport function getFilterValue<K extends keyof JobsState['filters']>(name: K) {\n return (state: RootState): JobsState['filters'][K]['value'] | undefined => {\n const {value, defaultValue} = state.operations.jobs.filters[name];\n\n return getActualValue(value, defaultValue);\n };\n}\n\nexport function getFilteredAttributes(attributeNames: Array<keyof JobsState['filters']>) {\n return (state: RootState) => {\n return attributeNames.filter((name) => getFilterValue(name)(state));\n };\n}\n\nexport const getShowCompetitiveJobs = createSelector(\n [getFilterValue('filterBy'), getFilterValue('jobId')],\n (filterBy, jobId) => {\n return filterBy === 'id' && Boolean(jobId);\n },\n);\n","export function isOperationId(value) {\n const idSection = '[0-9a-fA-F]{1,8}';\n const idRegexp = new RegExp(`^${idSection}-${idSection}-${idSection}-${idSection}$`);\n return idRegexp.test(value);\n}\n\nexport function isGotoEnabled(value) {\n const aliasRegexp = new RegExp('^\\\\*[0-9a-zA-Z_-]+$');\n return isOperationId(value) || aliasRegexp.test(value);\n}\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport {RootState} from '../../../store/reducers';\nimport ypath from '../../../common/thor/ypath';\nimport {AlertInfo} from '../../../components/AlertEvents/AlertEvents';\nimport {calculateLoadingStatus} from '../../../utils/utils';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {prepareFaqUrl} from '../../../utils/operations/tabs/details/alerts';\nimport {getClusterUiConfig} from '../global';\nimport {formatByParams} from '../../../utils/format';\n\nconst getOperationErasedTreesRaw = (state: RootState) => {\n return ypath.getValue(state.operations.detail, '/operation/@runtime_parameters/erased_trees');\n};\n\nexport const getOperationErasedTrees = createSelector(\n [getOperationErasedTreesRaw],\n (rawTrees: Array<unknown>) => {\n return reduce_(\n rawTrees,\n (acc, item) => {\n const poolTree = ypath.getValue(item);\n acc[poolTree] = true;\n return acc;\n },\n {} as {[poolTree: string]: boolean},\n );\n },\n);\n\ninterface OperationTask {\n task_name: string;\n}\n\nconst getOperationAlertEventsImpl = (state: RootState) =>\n state.operations.detail.details.alert_events;\n\nexport const getOperationAlertEvents = createSelector([getOperationAlertEventsImpl], (items) => {\n const appeared: Record<string, AlertInfo> = {};\n return reduce_(\n items,\n (acc, item) => {\n const type = ypath.getValue(item.alert_type);\n const code = ypath.getNumberDeprecated(item, '/error/code', NaN);\n if (!code && appeared[type]) {\n const last = appeared[type];\n last.to = ypath.getValue(item.time);\n delete appeared[type];\n } else if (code) {\n acc.push({\n from: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n appeared[type] = acc[acc.length - 1];\n } else {\n acc.push({\n to: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n }\n return acc;\n },\n [] as Array<AlertInfo>,\n );\n});\n\nexport const getOperation = (state: RootState) => state.operations.detail.operation;\nexport const getOperationId = (state: RootState) =>\n ypath.getValue(state.operations.detail.operation);\nexport const getOperationTasks = createSelector(\n [getOperation],\n (operation): Array<OperationTask> | undefined => {\n return ypath.getValue(operation, '/@progress/tasks');\n },\n);\nexport const getOperationTasksNames = createSelector(\n [getOperationTasks],\n (tasks?: Array<{task_name: string}>) => {\n return map_(tasks, 'task_name').sort();\n },\n);\n\nexport const getOperationTreeConfigs = (state: RootState) => state.operations.detail.treeConfigs;\n\nexport const getOperationDetailsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const getOperationTypedAttributes = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).$typedAttributes;\n\nexport const getOperationMonitorChartStates = (state: RootState) =>\n state.operations.detail.monitorChartStates;\n\nexport const getOperationPools = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).pools;\n\nexport const getOperationPoolNames = createSelector([getOperationPools], (pools): Array<string> => {\n return map_(pools, 'pool');\n});\n\nexport const getOperationsMonitorChartStatesFinishedCount = createSelector(\n [getOperationMonitorChartStates],\n (states) => {\n return reduce_(\n states,\n (acc, value) => {\n return value ? acc + 1 : acc;\n },\n 0,\n );\n },\n);\n\nexport const getOperationJobsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport interface OperationExperimentItem {\n experiment: string;\n group: string;\n ticket: string;\n dimension: string;\n effect: unknown;\n}\n\nexport const getOperationExperimentAssignments = createSelector(\n [getOperation],\n (operation): Array<OperationExperimentItem> => {\n return ypath.getValue(operation, '/@experiment_assignments');\n },\n);\n\nconst getOperationMonitoredJobCount = createSelector([getOperation], (operation) => {\n const res = ypath.getNumberDeprecated(\n operation,\n '/@brief_progress/registered_monitoring_descriptor_count',\n );\n return res;\n});\n\nexport const getOperationJobsMonitorTabSettings = createSelector(\n [getOperationMonitoredJobCount],\n (jobsCount) => {\n const maxJobCount = 200;\n return {visible: jobsCount > 0 && jobsCount <= maxJobCount, maxJobCount};\n },\n);\n\nexport const selectIsOperationInGpuTree = createSelector(\n [getOperationTreeConfigs],\n (treeConfigs) => {\n return treeConfigs?.every((item) => item.config.main_resource === 'gpu');\n },\n);\n\nexport const getOperationPerformanceUrlTemplate = createSelector(\n [getOperationId, getClusterUiConfig],\n (operationId, uiConfig) => {\n const operationPerformanceUrlTemplate = uiConfig?.operation_performance_url_template;\n\n if (!operationPerformanceUrlTemplate) return undefined;\n\n return {\n url: formatByParams(operationPerformanceUrlTemplate.url_template, {\n operation_id: operationId,\n }),\n title: operationPerformanceUrlTemplate.title,\n };\n },\n);\n","import {JOBS_MONITOR} from '../../../constants/operations/detail';\nimport {ThunkAction} from 'redux-thunk';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {JobsMonitorAction} from '../../../store/reducers/operations/jobs/jobs-monitor';\nimport {getOperationJobsMonitorTabSettings} from '../../../store/selectors/operations/operation';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\n\ntype JobsMonitorThunkAction = ThunkAction<unknown, RootState, unknown, JobsMonitorAction>;\n\nconst cancelHerlper = new CancelHelper();\n\nexport function getJobsMonitoringDescriptors(operation_id: string): JobsMonitorThunkAction {\n return (dispatch, getState) => {\n const {visible, maxJobCount} = getOperationJobsMonitorTabSettings(getState());\n if (!visible) {\n return undefined;\n }\n\n dispatch({type: JOBS_MONITOR.REQUEST});\n\n return ytApiV3Id\n .listJobs(YTApiId.listJobs100, {\n parameters: {operation_id, limit: maxJobCount, with_monitoring_descriptor: true},\n cancellation: cancelHerlper.removeAllAndSave,\n })\n .then(({jobs}) => {\n dispatch({type: JOBS_MONITOR.SUCCESS, data: {jobs, operation_id}});\n })\n .catch((error) => {\n if (isCancelled(error)) {\n dispatch({type: JOBS_MONITOR.CANCELLED});\n return;\n }\n\n dispatch({type: JOBS_MONITOR.FAILURE, data: {error}});\n });\n };\n}\n","import type {ThunkAction} from 'redux-thunk';\n\nimport {Toaster} from '@gravity-ui/uikit';\n\nimport {USE_CACHE} from '../../../../shared/constants/yt-api';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport {forEachYTError} from '../../../utils/errors';\nimport {\n prepareCompletedUsage,\n prepareIntermediateUsage,\n} from '../../../utils/operations/tabs/details/data-flow';\nimport {prepareSpecification} from '../../../utils/operations/tabs/details/specification/specification';\nimport {prepareOperationEvents} from '../../../utils/operations/tabs/details/events/events';\nimport {prepareRuntime} from '../../../utils/operations/tabs/details/runtime';\nimport {prepareAlerts} from '../../../utils/operations/tabs/details/alerts';\nimport {prepareError} from '../../../utils/operations/tabs/details/error';\n\nimport {\n GET_OPERATION,\n LOAD_RESOURCE_USAGE,\n OPERATION_DETAIL_PARTIAL,\n} from '../../../constants/operations/detail';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\nimport {DetailedOperationSelector} from '../../../pages/operations/selectors';\nimport {checkUserTransaction, prepareActions} from '../../../utils/operations/detail';\nimport {prepareAttributes} from '../../../utils';\nimport {showErrorPopup, wrapApiPromiseByToaster} from '../../../utils/utils';\nimport {isOperationId} from '../../../utils/operations/list';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {YTErrors} from '../../../rum/constants';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getJobsMonitoringDescriptors} from '../../../store/actions/operations/jobs-monitor';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport type {RootState} from './../../../store/reducers';\nimport type {OperationDetailActionType} from '../../reducers/operations/detail';\nimport {JSONSerializer} from '../../../common/yt-api';\n\nconst toaster = new Toaster();\nconst operationDetailsRequests = new CancelHelper();\n\nfunction loadIntermediateResourceUsage(\n operation: unknown,\n callback: () => void,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return async (dispatch) => {\n const outputTransaction = ypath.get(operation, '/@output_transaction_id');\n\n if (outputTransaction && outputTransaction !== '0-0-0-0') {\n dispatch({type: LOAD_RESOURCE_USAGE.REQUEST});\n\n return ytApiV3Id\n .get(YTApiId.operationIntermediateResourceUsage, {\n path: '#' + outputTransaction + '/@resource_usage',\n })\n .then((resources) => {\n callback();\n\n const intermediateResources = prepareIntermediateUsage(operation, resources);\n\n dispatch({\n type: LOAD_RESOURCE_USAGE.SUCCESS,\n data: {resources, intermediateResources},\n });\n })\n .catch(() => {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.FAILURE});\n });\n } else {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.CANCELLED});\n }\n };\n}\n\nexport function getOperation(\n id: string,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return (dispatch, getState) => {\n const isAlias = !isOperationId(id);\n\n const params = Object.assign(\n {\n include_scheduler: true,\n output_format: TYPED_OUTPUT_FORMAT,\n },\n isAlias ? {operation_alias: id} : {operation_id: id},\n );\n\n dispatch({type: GET_OPERATION.REQUEST, data: {isAlias, id}});\n\n return ytApiV3\n .getOperation({parameters: params, setup: {JSONSerializer}}, operationDetailsRequests)\n .then(checkUserTransaction)\n .then(([operationAttributes, userTransactionAlive]) => {\n const preparedAttributes = prepareAttributes(operationAttributes);\n const operation = new DetailedOperationSelector(\n preparedAttributes,\n operationAttributes,\n );\n\n const dispatchOperationSuccess = () => {\n const actions = prepareActions(operation);\n\n const specification = prepareSpecification(operation, userTransactionAlive);\n const alerts = prepareAlerts(ypath.getValue(operation, '/@alerts'));\n const alert_events = ypath.getValue(operation, '/@alert_events');\n const error = prepareError(operation);\n const runtime = prepareRuntime(operation);\n const events = prepareOperationEvents(operation);\n const resources = prepareCompletedUsage(operation);\n\n if (error?.error) {\n forEachYTError([error.error], (item) => {\n const attributes = ypath.getValue(item, '/attributes');\n const job_id = ypath.getValue(attributes, '/job_id');\n\n const dst = attributes.$value ?? attributes;\n if ('string' === typeof job_id) {\n const cluster = getCluster(getState());\n Object.assign(dst, {\n job_id: {\n $attributes: {\n _type_tag: 'url',\n },\n $value: {\n href: `${window.location.origin}/${cluster}/job/${id}/${job_id}`,\n text: job_id,\n },\n },\n });\n }\n });\n }\n\n const details = {\n specification,\n alerts,\n alert_events,\n error,\n runtime,\n events,\n resources,\n };\n\n dispatch({\n type: GET_OPERATION.SUCCESS,\n data: {operation, actions, details},\n });\n\n dispatch(getJobsMonitoringDescriptors(id));\n dispatch(loadOperationPoolTreeConfigs(operation));\n };\n\n if (operation.inIntermediateState()) {\n dispatch(loadIntermediateResourceUsage(operation, dispatchOperationSuccess));\n } else {\n dispatchOperationSuccess();\n }\n })\n .catch((error) => {\n const {operations} = getState();\n const isFirstLoading = !operations.detail.loaded;\n\n if (error.code !== YTErrors.CANCELLED) {\n if (!isFirstLoading) {\n toaster.add({\n name: 'get operation',\n autoHiding: false,\n theme: 'danger',\n title: 'Failed to load operation',\n content: error.message,\n actions: [{label: ' view', onClick: () => showErrorPopup(error)}],\n });\n }\n\n dispatch({\n type: GET_OPERATION.FAILURE,\n data: {\n message: `Error occured when loading operation \"${id}\"`,\n details: error,\n },\n });\n }\n });\n };\n}\n\nexport function loadOperationPoolTreeConfigs({\n pools,\n}: DetailedOperationSelector): ThunkAction<\n Promise<void>,\n RootState,\n unknown,\n OperationDetailActionType\n> {\n return (dispatch) => {\n const treeNames = pools?.map((i) => i.tree);\n return 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 ).then((data) => {\n dispatch({\n type: OPERATION_DETAIL_PARTIAL,\n data: {\n treeConfigs: data.map((item, index) => {\n return {tree: treeNames[index], config: item.output};\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, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport MetaTable, {\n Template,\n TemplateWeight,\n} from '../../../../../../components/MetaTable/MetaTable';\n\nimport {formatShare} from '../../../../../../utils/operations/tabs/details/runtime';\nimport {showEditPoolsWeightsModal} from '../../../../../../store/actions/operations';\nimport hammer from '../../../../../../common/hammer';\nimport {OperationPool} from '../../../../../../components/OperationPool/OperationPool';\nimport ypath from '../../../../../../common/thor/ypath';\n\nconst headingBlock = cn('elements-heading');\nconst runtimeBlock = cn('runtime');\n\nexport const runtimeProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n }),\n);\n\nfunction StarvingStatus({progress}) {\n const {starvation_status} = progress || {};\n const res = starvation_status ? hammer.format.Readable(starvation_status) : undefined;\n return res || null; // returns null to prevent react warning\n}\n\nexport const operationProps = PropTypes.shape({\n $value: PropTypes.string,\n $attributes: PropTypes.object,\n type: PropTypes.string,\n user: PropTypes.string,\n pool: PropTypes.string,\n state: PropTypes.string,\n title: PropTypes.string,\n suspended: PropTypes.bool,\n duration: PropTypes.number,\n startTime: PropTypes.string,\n finishTime: PropTypes.string,\n pools: PropTypes.arrayOf(\n PropTypes.shape({\n tree: PropTypes.string.isRequired,\n pool: PropTypes.string.isRequired,\n }),\n ),\n});\n\nclass Runtime extends Component {\n static propTypes = {\n // from parent component\n runtime: runtimeProps.isRequired,\n operation: operationProps.isRequired,\n cluster: PropTypes.string.isRequired,\n // from connect\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n };\n\n handlePoolEditClick = () => {\n const {showEditPoolsWeightsModal, operation} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderTree({progress, name}) {\n const {cluster, operation, showEditPoolsWeightsModal} = this.props;\n const {state} = operation;\n\n const pool = {\n pool: progress.pool,\n tree: name,\n weight: progress.weight,\n };\n\n const isGang = ypath.getValue(operation, '/@full_spec/is_gang');\n\n return (\n <div className={runtimeBlock('tree')} key={name}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](name)}\n </div>\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 value: (\n <Template.FormattedValue\n value={progress.fifo_index}\n format=\"Number\"\n />\n ),\n },\n {\n key: 'fair_share',\n value: formatShare(progress.fair_share_ratio),\n },\n {\n key: 'usage',\n value: formatShare(progress.usage_ratio),\n },\n {\n key: 'demand',\n value: 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 value: isGang,\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 connect(null, {showEditPoolsWeightsModal})(Runtime);\n","import React, {Fragment, useEffect, useState} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport every_ from 'lodash/every';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {operationProps} from '../../../pages/operations/OperationDetail/tabs/details/Runtime/Runtime';\nimport {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: operationProps,\n\n hideEditPoolsWeightsModal: PropTypes.func.isRequired,\n setPoolsAndWeights: PropTypes.func.isRequired,\n};\n\nconst block = cn('operation-pools-weights');\nconst preparePoolsState = (pools) => {\n return reduce_(\n pools,\n (res, {pool, tree}) => {\n res[tree] = pool;\n return res;\n },\n {},\n );\n};\n\nconst prepareWeightsState = (pools) => {\n return reduce_(\n pools,\n (res, {weight, tree}) => {\n res[tree] = String(weight);\n return res;\n },\n {},\n );\n};\n\nconst renderPoolsAndWeights = ({\n cluster,\n operation,\n editable,\n pools,\n weights,\n setPools,\n setWeights,\n}) => {\n return map_(operation.pools, ({tree}) => {\n const pool = pools[tree];\n const title = `${pool} [${tree}]`;\n const url = `/${cluster}/${Page.SCHEDULING}?tree=${tree}&pool=${pool}&tab=monitor`;\n\n return (\n <Fragment key={tree}>\n <div className={block('pool', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={pool}\n onUpdate={(pool) => {\n setPools({...pools, [tree]: pool});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">\n <Link url={url} title={title}>\n <span className={block('pool-link')}>{pool}</span>\n </Link>\n </span>\n )}\n </div>\n\n <div className={block('tree', 'elements-form_field')}>{tree}</div>\n\n <div className={block('weight', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={weights[tree]}\n onUpdate={(weight) => {\n setWeights({...weights, [tree]: weight});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">{weights[tree]}</span>\n )}\n </div>\n </Fragment>\n );\n });\n};\n\nfunction PoolsWeightsEditModal(props) {\n const {operation, setPoolsAndWeights} = props;\n const [pools, setPools] = useState(preparePoolsState(operation.pools));\n const [weights, setWeights] = useState(prepareWeightsState(operation.pools));\n\n useEffect(() => {\n setPools(preparePoolsState(operation.pools));\n setWeights(prepareWeightsState(operation.pools));\n }, [operation.$value]);\n\n const isConfirmDisabled = () => {\n const state = {operation};\n const isStateCorrect = state !== 'completed' && state !== 'failed' && state !== 'aborted';\n\n const isWeightCorrect = every_(keys_(weights), (tree) => {\n const value = Number(weights[tree]);\n return !isNaN(value) && value > 0;\n });\n\n const isPoolCorrect = every_(keys_(pools), (tree) => {\n const value = pools[tree];\n return Boolean(value);\n });\n\n return !isStateCorrect || !isWeightCorrect || !isPoolCorrect;\n };\n\n const handleConfirm = () => {\n setPoolsAndWeights(operation, pools, weights);\n };\n\n const {loading, error, errorData, visible, editable, hideEditPoolsWeightsModal} = props;\n const title = (\n <div className={block('title')}>{editable ? 'Edit' : 'View'} pools and weights</div>\n );\n\n return (\n <Modal\n size=\"l\"\n title={title}\n loading={loading}\n visible={visible}\n footer={editable}\n confirmText=\"Apply\"\n onConfirm={handleConfirm}\n onCancel={hideEditPoolsWeightsModal}\n isConfirmDisabled={isConfirmDisabled}\n content={\n <Fragment>\n <div className={block('name')}>\n <Yson value={operation.title || operation.$value} inline />\n </div>\n <div className={block()}>\n <div className={block('header')}>Pool</div>\n <div className={block('header')}>Tree</div>\n <div className={block('header')}>Weight</div>\n {renderPoolsAndWeights({\n ...props,\n pools,\n weights,\n setPools,\n setWeights,\n })}\n </div>\n {error && <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 &nbsp; / &nbsp;\n {hammer.format['Number'](total)}\n </span>\n </div>\n );\n }\n\n renderFailedJobCounters() {\n const {operation} = this.props;\n const {failedJobs, totalFailedJobs} = operation;\n\n const className = 'operation-progress__counters';\n\n return (\n typeof totalFailedJobs !== 'undefined' && (\n <div className={className}>\n {this.renderCounter('failed', failedJobs, totalFailedJobs)}\n </div>\n )\n );\n }\n\n renderJobCounters() {\n const {operation} = this.props;\n const {state, totalJobs, failedJobs, completedJobs, runningJobs} = operation;\n\n const className = 'operation-progress__counters';\n\n return operation.isPreparing()\n ? null\n : typeof totalJobs !== 'undefined' && (\n <div className={className}>\n {operation.inIntermediateState() &&\n this.renderCounter('running', runningJobs, totalJobs)}\n {state === 'failed' && this.renderCounter('failed', failedJobs, totalJobs)}\n {this.renderCounter('completed', completedJobs, totalJobs)}\n </div>\n );\n }\n\n renderState() {\n const {\n showState,\n operation: {suspended, state},\n } = this.props;\n\n return !showState ? null : (\n <div className={block('state')}>\n <StatusLabel label={suspended ? 'suspended' : state} />\n </div>\n );\n }\n\n renderFailedProgressBar() {\n const {operation} = this.props;\n const {failedJobsProgress} = operation;\n\n const className = 'operation-progress__bar';\n\n return (\n <div className={className}>\n {this.renderState()}\n <Progress size=\"s\" value={failedJobsProgress || 0} theme=\"danger\" />\n </div>\n );\n }\n\n renderProgressBar() {\n const {operation} = this.props;\n const {state, jobsProgress, completedJobsProgress, runningJobsProgress} = operation;\n\n const RESOLVED_PROGRESS = 100;\n const PENDING_PROGRESS = 0;\n\n let progressBar;\n\n switch (state) {\n case 'running':\n progressBar = operation.inIntermediateState() && (\n <Progress\n size=\"s\"\n value={jobsProgress || 0}\n stack={[\n {\n value: completedJobsProgress || 0,\n theme: 'success',\n },\n {value: runningJobsProgress || 0, theme: 'info'},\n ]}\n />\n );\n break;\n case 'completed':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"success\" />;\n break;\n case 'failed':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"danger\" />;\n break;\n case 'aborted':\n progressBar = <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"default\" />;\n break;\n default:\n progressBar = <Progress size=\"s\" value={PENDING_PROGRESS || 0} />;\n break;\n }\n\n const className = 'operation-progress__bar';\n\n return (\n <div className={className}>\n {this.renderState()}\n {progressBar}\n </div>\n );\n }\n render() {\n const className = 'operation-progress';\n const {type} = this.props;\n return (\n <div className={className}>\n {type === 'running' ? this.renderProgressBar() : this.renderFailedProgressBar()}\n {type === 'running' ? this.renderJobCounters() : this.renderFailedJobCounters()}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n cluster: getCluster(state),\n };\n};\n\nexport default connect(mapStateToProps)(OperationProgress);\n","import React 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 &nbsp;View\n </Button>\n\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title=\"Edit pools and weights\"\n className={block('edit-button')}\n onClick={() => showEditPoolsWeightsModal(item)}\n >\n <Icon awesome=\"pencil\" />\n </Button>\n </span>\n );\n }\n\n renderUserPool = (item) => {\n const {showEditPoolsWeightsModal, cluster} = this.props;\n const {pools, user, state} = item;\n const multiplePools = pools?.length > 1 || false;\n\n return (\n <React.Fragment>\n <UserPoolItem awesomeIcon={'user'} title={'User'}>\n <SubjectCard name={user} />\n </UserPoolItem>\n <UserPoolItem awesomeIcon={'poll-people'} title={'Pool'}>\n {multiplePools ? (\n this.renderMultiplePools(item)\n ) : (\n <TemplatePools\n onEdit={() => showEditPoolsWeightsModal(item)}\n cluster={cluster}\n pools={pools}\n state={state}\n compact\n allowDetachEditBtn\n />\n )}\n </UserPoolItem>\n {!multiplePools && (\n <UserPoolItem awesomeIcon={'weight-hanging'} title={'Weight'}>\n <TemplateWeight\n onEdit={() => showEditPoolsWeightsModal(item)}\n operation={item}\n pool={pools[0]}\n />\n </UserPoolItem>\n )}\n </React.Fragment>\n );\n };\n\n renderActions = (operation) => {\n const {promptAction} = this.props;\n\n const actions = prepareActions(operation);\n\n return (\n <div className={block('actions')}>\n {actions.map((action) => {\n const {icon, name, $value} = action;\n const text = hammer.format['Readable'](name);\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the operation{' '}\n {$value}?\n </span>\n );\n const handler = ({currentOption}) =>\n performAction({\n ...action,\n operation,\n currentOption,\n }).then(() => {\n this.props.updateOperationsList();\n });\n\n return (\n <Button\n withTooltip\n size=\"m\"\n key={name}\n view=\"flat-secondary\"\n tooltipProps={{\n placement: 'bottom',\n content: text,\n }}\n onClick={() => promptAction({...action, message, handler})}\n >\n <Icon awesome={icon} />\n </Button>\n );\n })}\n </div>\n );\n };\n\n settings = {\n css: 'operations-list',\n theme: 'light',\n striped: false,\n virtualType: 'simple',\n getItemLink: (item) => `${this.props.match.url}/${item.$value}`,\n computeKey: (item) => item.$value,\n columns: {\n sets: {\n default: {\n items: ['title', 'type', 'user_pool', 'start_time', 'progress', 'actions'],\n },\n },\n mode: 'default',\n items: {\n title: {\n name: 'title',\n sort: false,\n align: 'left',\n },\n type: {\n name: 'type',\n sort: false,\n align: 'left',\n },\n user: {\n name: 'user',\n sort: false,\n align: 'left',\n },\n pool: {\n name: 'pool',\n sort: false,\n align: 'left',\n },\n user_pool: {\n name: 'user_pool',\n sort: false,\n caption: 'User / Pool',\n align: 'left',\n },\n start_time: {\n name: 'start_time',\n sort: false,\n align: 'left',\n },\n progress: {\n name: 'progress',\n sort: false,\n align: 'left',\n caption: 'State / Progress',\n },\n actions: {\n name: 'actions',\n caption: '',\n sort: false,\n align: 'right',\n },\n },\n },\n templates: {\n title: this.renderTitle,\n user_pool: this.renderUserPool,\n type: OperationsListTable.renderType,\n start_time: OperationsListTable.renderStartTime,\n progress: OperationsListTable.renderProgress,\n actions: this.renderActions,\n },\n };\n\n render() {\n const {operations, initialLoading} = this.props;\n\n return (\n <ElementsTable\n emptyDataDescription=\"Please, change your filtering settings to see search results\"\n isLoading={initialLoading}\n items={operations}\n {...this.settings}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations, global}) {\n const {isLoading, hasLoaded} = operations.list;\n const initialLoading = isLoading && !hasLoaded;\n\n return {\n initialLoading,\n cluster: global.cluster,\n operations: operations.list.operations,\n };\n}\n\nconst mapDispatchToProps = {\n showEditPoolsWeightsModal,\n promptAction,\n updateOperationsList,\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsListTable));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {connect} from 'react-redux';\nimport {Redirect, withRouter} from 'react-router';\n\nimport Filter from '../../../../components/Filter/Filter';\n\nimport {isGotoEnabled} from '../../../../utils/operations/list';\nimport {updateFilter} from '../../../../store/actions/operations';\nimport Button from '../../../../components/Button/Button';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\n\nclass OperationsTextFilter extends Component {\n static propTypes = {\n // from connect\n updateFilter: PropTypes.func.isRequired,\n activePreset: PropTypes.string.isRequired,\n filter: PropTypes.shape({\n type: PropTypes.string.isRequired,\n defaultValue: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n // from react-router\n match: PropTypes.object,\n };\n\n state = {\n transition: false,\n value: '',\n };\n\n get value() {\n const {value: stateValue} = this.state;\n const {value: propsValue} = this.props.filter;\n\n if (stateValue) {\n return stateValue;\n }\n\n return propsValue;\n }\n\n gotoDetails = (value = this.props.filter.value) => {\n if (isGotoEnabled(value)) {\n this.setState({transition: true, value});\n }\n };\n\n handleKeyDown = (evt) => {\n if (evt.key === 'Enter') {\n this.gotoDetails(evt.target.value);\n }\n };\n\n render() {\n const {\n match,\n updateFilter,\n activePreset,\n filter: {value},\n } = this.props;\n const {transition} = this.state;\n\n return transition ? (\n <Redirect to={`${match.url}/${this.value}`} />\n ) : (\n <div className={block('toolbar-text-filter', tbBlock('component'))}>\n <Filter\n key={activePreset}\n placeholder=\"Filter operations...\"\n size=\"m\"\n value={this.value}\n onChange={(newValue) => updateFilter('text', newValue)}\n debounce={500}\n onKeyDown={this.handleKeyDown}\n pin=\"round-brick\"\n />\n <Button\n view=\"action\"\n pin=\"brick-round\"\n onClick={() => this.gotoDetails(value)}\n disabled={!isGotoEnabled(this.value)}\n >\n Go to operation\n </Button>\n </div>\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n return {\n filter: operations.list.filters.text,\n activePreset: operations.list.activePreset,\n };\n}\n\nconst mapDispatchToProps = {updateFilter};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsTextFilter));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport moment from 'moment';\n\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\n\nimport './TimePicker.scss';\n\nconst bForm = cn('elements-form');\nconst block = cn('timepicker');\nconst DISPLAY_FORMAT = 'HH:mm';\nconst invalidTitle = `Time should be specified as HH:MM.\nEstimated start time should be less than estimated finish time.`;\n\nexport const MomentObjectType = PropTypes.shape({\n _isAMomentObject: PropTypes.oneOf([true]),\n});\n\nexport default class TimePicker extends Component {\n static propTypes = {\n date: PropTypes.oneOfType([PropTypes.string, MomentObjectType]).isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n minDate: PropTypes.oneOfType([PropTypes.string, MomentObjectType]),\n };\n\n static defaultProps = {\n minDate: null,\n disabled: false,\n };\n\n state = {\n time: '',\n date: '',\n };\n\n static getDerivedStateFromProps(nextProps, prevState) {\n if (nextProps.date !== prevState.date) {\n return {\n time: moment(nextProps.date).format(DISPLAY_FORMAT),\n date: nextProps.date,\n };\n }\n\n return null;\n }\n\n _checkInputTimeValidity(textTime) {\n return (\n new RegExp('[0-9]{2}:[0-9]{2}').test(textTime) &&\n moment(textTime, DISPLAY_FORMAT).isValid()\n );\n }\n\n _checkDateValidity(textDate) {\n const {minDate} = this.props;\n const newDate = moment(textDate).unix();\n\n return minDate ? newDate > moment(minDate).unix() : true;\n }\n\n _prepareOutputDate(textTime) {\n const {date} = this.state;\n const currentDate = moment(date);\n const newDate = moment(textTime, DISPLAY_FORMAT);\n\n newDate.year(currentDate.year());\n newDate.month(currentDate.month());\n newDate.date(currentDate.date());\n\n return newDate.toISOString();\n }\n\n handleTimeChange = (newTime) => {\n const {onChange} = this.props;\n const isValidFormat = this._checkInputTimeValidity(newTime);\n\n this.setState({time: newTime});\n\n if (isValidFormat) {\n const newDate = this._prepareOutputDate(newTime);\n\n onChange(newDate);\n }\n };\n\n renderIcon(icon) {\n return <Icon awesome={icon} />;\n }\n\n render() {\n const {time} = this.state;\n const {disabled} = this.props;\n const newDate = this._prepareOutputDate(time);\n\n const isValidFormat = this._checkInputTimeValidity(time);\n const isValidDate = this._checkDateValidity(newDate);\n const isValid = isValidFormat && isValidDate;\n\n const title = isValid ? '' : invalidTitle;\n\n return (\n <div className={bForm('field', {theme: isValid ? 'valid' : 'invalid'}, block())}>\n <TextInput\n theme=\"normal\"\n size=\"s\"\n value={time}\n disabled={disabled}\n onUpdate={this.handleTimeChange}\n iconRight={this.renderIcon('clock')}\n controlAttrs={{\n maxLength: 5,\n title,\n }}\n className={block('control')}\n placeholder={'HH:mm'}\n />\n </div>\n );\n }\n}\n","import React, {useCallback, useState} from 'react';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {RootState} from '../../../../store/reducers';\nimport {showArchiveOperations, showCurrentOperations} from '../../../../store/actions/operations';\nimport {OPERATIONS_DATA_MODE} from '../../../../constants/operations';\n\nimport mapValues_ from 'lodash/mapValues';\nimport values_ from 'lodash/values';\n\nimport moment from 'moment';\n\nimport {Button} from '@gravity-ui/uikit';\nimport Icon from '../../../../components/Icon/Icon';\nimport Modal from '../../../../components/Modal/Modal';\nimport TimePicker from '../../../../components/TimePicker/TimePicker';\nimport CustomRadioButton from '../../../../components/RadioButton/RadioButton';\nimport {SelectButton} from '../../../../components/Button/Button';\nimport {Datepicker} from '../../../../components/common/Datepicker';\n\nimport './OperationsArchiveFilter.scss';\nimport {ValueOf} from '../../../../../@types/types';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\nconst formBlock = cn('elements-form');\n\nconst datePickerProps = {\n range: false,\n controlSize: 's',\n format: 'dd-MM-yyyy',\n outputFormat: 'datetime',\n className: 'operations-datepicker-control',\n popupClassName: 'operations-datepicker-popup',\n} as const;\n\nconst radioButtonTypes = {\n custom: {\n text: 'custom',\n value: 'custom',\n },\n twoHours: {\n text: 'last 2 hours',\n value: 'twoHours',\n hours: 2,\n },\n day: {\n text: 'last day',\n value: 'day',\n hours: 24,\n },\n week: {\n text: 'last week',\n value: 'week',\n hours: 168,\n },\n} as const;\n\ninterface State {\n modalVisible: boolean;\n activeTypeValue: ValueOf<typeof radioButtonTypes>['value'];\n from?: string;\n to?: string;\n}\n\nexport default function OperationsArchiveFilter() {\n const {\n dataMode,\n timeRange: {from, to},\n } = useSelector((store: RootState) => store.operations.list);\n\n const dispatch = useDispatch();\n\n const [state, setState] = useState<State>({\n modalVisible: false,\n activeTypeValue: radioButtonTypes.custom.value,\n from: from || moment().subtract(6, 'hours').toISOString(),\n to: to || moment().toISOString(),\n });\n\n const showModal = useCallback(() => {\n setState({\n ...state,\n modalVisible: true,\n });\n }, [state]);\n\n const hideModal = useCallback(() => {\n setState({...state, modalVisible: false});\n }, [state]);\n\n const resetTimeRange = useCallback(() => {\n hideModal();\n dispatch(showCurrentOperations());\n }, [dispatch, hideModal]);\n\n const applyTimeRange = useCallback(() => {\n hideModal();\n if (state.activeTypeValue === 'custom') {\n dispatch(showArchiveOperations(state.from, state.to));\n } else {\n dispatch(\n showArchiveOperations(\n moment()\n .subtract(radioButtonTypes[state.activeTypeValue].hours, 'hours')\n .toISOString(),\n moment().toISOString(),\n ),\n );\n }\n }, [dispatch, hideModal, state]);\n\n const prepareText = useCallback(() => {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n return 'Current operations';\n } else {\n const format = 'DD-MM-YYYY HH:mm';\n const fromPart = moment(from).format(format);\n const toPart = moment(to).format(format);\n return fromPart + ' — ' + toPart;\n }\n }, [dataMode, from, to]);\n\n const updateDate = useCallback(\n (date: Pick<State, 'from' | 'to'>) => {\n const dateWithHours = mapValues_(date, (field, key) => {\n if (field) {\n const {hours, minutes} = moment(state[key as 'from' | 'to']).toObject();\n return moment(field).add({hours, minutes}).toISOString();\n }\n return field;\n });\n setState({...state, ...dateWithHours});\n },\n [state],\n );\n\n const updateTime = useCallback(\n (date: {from?: string; to?: string}) => setState({...state, ...date}),\n [state],\n );\n\n const handleActiveTypeChange = useCallback(\n (ev: React.ChangeEvent<HTMLInputElement>) => {\n const activeTypeValue = ev.target.value as ValueOf<typeof radioButtonTypes>['value'];\n setState({\n ...state,\n activeTypeValue,\n ...(activeTypeValue !== 'custom' && {\n from: moment()\n .subtract(radioButtonTypes[activeTypeValue].hours, 'hours')\n .toISOString(),\n to: moment().toISOString(),\n }),\n });\n },\n [state],\n );\n\n const text = prepareText();\n const checked = dataMode === OPERATIONS_DATA_MODE.ARCHIVE;\n const disabled = state.activeTypeValue !== radioButtonTypes.custom.value;\n\n return (\n <div className={block('archive-range', tbBlock('component'))}>\n <Modal\n title=\"Choose range\"\n size=\"s\"\n confirmText=\"Apply\"\n cancelText=\"Show current\"\n cl={formBlock('time-modal')}\n visible={state.modalVisible}\n content={\n <div className={formBlock(null, 'operations-archive-filter')}>\n <div className={formBlock('button-group')}>\n <CustomRadioButton\n name=\"time-range\"\n items={values_(radioButtonTypes)}\n value={state.activeTypeValue}\n onChange={handleActiveTypeChange}\n />\n </div>\n <div>\n <div className={formBlock('label')}>From</div>\n <div className={formBlock('field-group')}>\n <span className={formBlock('field')}>\n <Datepicker\n {...datePickerProps}\n disabled={disabled}\n from={state.from}\n onUpdate={({from: newFrom}) =>\n newFrom && updateDate({from: newFrom})\n }\n />\n </span>\n <span className={formBlock('field')}>\n {state.from && (\n <TimePicker\n disabled={disabled}\n date={state.from}\n onChange={(newDate: string) =>\n updateTime({from: newDate})\n }\n />\n )}\n </span>\n </div>\n <div className={formBlock('label')}>To</div>\n <div className={formBlock('field-group')}>\n <span className={formBlock('field')}>\n <Datepicker\n {...datePickerProps}\n disabled={disabled}\n to={state.to}\n onUpdate={({from: newTo}) =>\n newTo && updateDate({to: newTo})\n }\n />\n </span>\n <span className={formBlock('field')}>\n {state.to && (\n <TimePicker\n disabled={disabled}\n date={state.to}\n onChange={(newDate: string) =>\n updateTime({to: newDate})\n }\n />\n )}\n </span>\n </div>\n </div>\n </div>\n }\n renderCustomCancel={(className: string | undefined) => (\n <Button title=\"Show current\" className={className} onClick={resetTimeRange}>\n Show current\n </Button>\n )}\n onCancel={hideModal}\n onConfirm={applyTimeRange}\n />\n <SelectButton type=\"submit\" selected={checked} title={text} onClick={showModal}>\n {text}\n <Icon awesome=\"calendar-alt\" />\n </SelectButton>\n </div>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport map_ from 'lodash/map';\n\nimport hammer from '../../../common/hammer';\nimport Select from '../../../components/Select/Select';\nimport {itemsProps} from '../../../components/Suggest/Suggest';\n\nexport default class OperationSelectFilter extends Component {\n static propTypes = {\n // from props\n name: PropTypes.string.isRequired,\n withCounters: PropTypes.bool,\n type: PropTypes.string,\n // from connect\n updateFilter: PropTypes.func.isRequired,\n states: itemsProps,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n counters: PropTypes.object,\n };\n\n static defaultProps = {\n withCounters: true,\n type: 'radio',\n };\n\n get items() {\n const {value, states, counters, withCounters} = this.props;\n\n let found = false;\n const res = map_(states, (state) => {\n const stateName = typeof state === 'string' ? state : state.name;\n const count = counters && (counters[stateName] || 0);\n\n if (stateName === value) {\n found = true;\n }\n\n return {\n value: stateName,\n text: state.caption || hammer.format['ReadableField'](stateName),\n count: withCounters ? count : undefined,\n };\n });\n\n if ('string' === typeof value && !found) {\n res.push({\n value,\n text: hammer.format.ReadableField(value),\n });\n }\n\n return res;\n }\n\n onRadioChange = (val) => this.props.updateFilter(this.props.name, val);\n onCheckChange = (val) => this.props.updateFilter(this.props.name, val);\n\n render() {\n const {name, value, type, placeholder, ...props} = this.props;\n const {multiple} = this.props;\n\n const placeHolder = 'function' === typeof placeholder ? placeholder(value) : placeholder;\n\n const onChange = type === 'radio' ? this.onRadioChange : this.onCheckChange;\n\n return (\n <Select\n 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 &ensp;\n {preset.name}\n </span>\n {!preset.preconfigured && (\n <span\n className={block('preset-remove')}\n onClick={this.makeRemoveHandler(presetId)}\n >\n <Icon face=\"solid\" awesome=\"times\" />\n </span>\n )}\n </span>\n </Button>\n </div>\n );\n })}\n </div>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const {operations} = state;\n\n const getSetting = makeGetSetting(state);\n let defaultPreset = getSetting(DEFAULT_PRESET_SETTING, NAMESPACES.OPERATION);\n const presets = getOperationsListFilterPresets(state);\n\n if (!presets[defaultPreset]) {\n defaultPreset = OPERATIONS_LIST_RUNNING_PRESET;\n }\n\n return {\n presets,\n activePresets: getOperationsListActivePresets(state),\n defaultPreset,\n dialog: operations.list.savePresetDialog,\n };\n}\n\nconst mapDispatchToProps = {\n applyFilterPreset,\n removeFilterPreset,\n saveFilterPreset,\n toggleSaveFilterPresetDialog,\n};\n\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(OperationsFilterPresets));\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\n\nimport filter_ from 'lodash/filter';\n\nimport Suggest, {itemsProps} from '../../../components/Suggest/Suggest';\n\nexport default class OperationSuggestFilter extends Component {\n static propTypes = {\n // from props\n name: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n statesProvider: PropTypes.func,\n // from connect\n updateFilter: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired,\n defaultValue: PropTypes.string.isRequired,\n states: itemsProps,\n pin: PropTypes.string,\n };\n\n static simpleSuggestLoader(items, text) {\n text = text.toLowerCase();\n\n items = filter_(items, (item) => {\n const itemText = typeof item === 'string' ? item : item.value;\n\n return text ? itemText.toLowerCase().indexOf(text) !== -1 : true;\n });\n\n return items;\n }\n\n render() {\n const {states, name, placeholder, updateFilter, value, defaultValue, pin} = this.props;\n\n return (\n <Suggest\n key={value}\n apply={(newValue) => updateFilter(name, newValue || defaultValue)}\n filter={OperationSuggestFilter.simpleSuggestLoader}\n text={value !== defaultValue ? value : ''}\n items={states}\n placeholder={placeholder}\n zIndexGroupLevel={1}\n clear={() => updateFilter(name, defaultValue)}\n pin={pin}\n />\n );\n }\n}\n","import React from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\n\nimport OperationSuggestFilter from '../../../../pages/operations/OperationSuggestFilter/OperationSuggestFilter';\nimport {updateFilter} from '../../../../store/actions/operations/list';\nimport {getActualValue} from '../../../../pages/operations/selectors';\nimport {\n getOperationsListFilters,\n getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838,\n getOperationsPoolSuggestions,\n getOperationsPoolTreeSuggestions,\n getOperationsUserSuggestions,\n} from '../../../../store/selectors/operations';\nimport {RootState} from '../../../../store/reducers';\nimport {OperationsListFilterName} from '../../../../store/reducers/operations/list/list';\nimport UIFactory from '../../../../UIFactory';\n\nconst mapStateToPropsByFilterName = (state: RootState, name: OperationsListFilterName) => {\n const filters = getOperationsListFilters(state);\n const {defaultValue, value} = filters[name];\n\n return {\n name,\n value: getActualValue(value, defaultValue),\n defaultValue,\n };\n};\n\nconst mapPoolTreeStateToProps = (state: RootState) => {\n return {\n ...mapStateToPropsByFilterName(state, 'poolTree'),\n states: getOperationsPoolTreeSuggestions(state),\n placeholder: 'Pool tree...',\n };\n};\n\nexport const OperationsListPoolTreeSuggestFilter = connect(mapPoolTreeStateToProps, {updateFilter})(\n OperationSuggestFilter,\n);\n\nconst mapPoolStateToProps = (state: RootState) => {\n return {\n ...mapStateToPropsByFilterName(state, 'pool'),\n states: getOperationsPoolSuggestions(state),\n placeholder: 'Filter pool...',\n };\n};\nexport const OperationsListPoolSuggestFilter = connect(mapPoolStateToProps, {\n updateFilter,\n})(OperationSuggestFilter);\n\nconst mapUserStateToProps = (state: RootState) => {\n const fixedStartedByFilter = getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838(state);\n\n return {\n ...mapStateToPropsByFilterName(state, 'user'),\n states: getOperationsUserSuggestions(state),\n placeholder: fixedStartedByFilter || 'Started by...',\n };\n};\nexport const OperationsListUserSuggestFilter = connect(mapUserStateToProps, {\n updateFilter,\n})(OperationSuggestFilter);\n\nfunction OperationsAccessibleForFilterImpl() {\n const dispatch = useDispatch();\n const {\n subject: {value},\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 &nbsp; Save filter\n </Button>\n </div>\n </div>\n );\n }\n\n renderWarning_uiissue_2838() {\n return (\n <div className={block('ytfront-2838')}>\n At the moment there is the unresolved performance issue with getting unfiltered list\n of operations from archive,\n <br />\n as a temporary solution UI adds current username to &quot;Started by&quot; filter if\n there are no any other filters specified.\n </div>\n );\n }\n\n render() {\n const {fixedStartedByFilter, 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/use-updater';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../rum/RumUiContext';\nimport {getOperationsListIsFinalState} from '../../../store/selectors/operations/operations-list';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getListRequestParameters} from '../../../store/actions/operations/utils';\n\nconst block = cn('operations-list');\n\nfunction OperationListUpdater({timeRange}) {\n const dispatch = useDispatch();\n\n const cluster = useSelector(getCluster);\n const parameters = useSelector(getListRequestParameters);\n\n const params = useMemoizedIfEqual(cluster, parameters);\n\n const updateFn = React.useCallback(() => {\n dispatch(updateOperationsByParams(...params));\n }, [dispatch, params]);\n\n useUpdater(updateFn, {onlyOnce: isBigTimeRange(timeRange)});\n\n return null;\n}\n\nfunction isBigTimeRange(timeRange) {\n const {from, to} = timeRange;\n if (typeof from === 'string' && typeof to === 'string') {\n const dateFrom = moment(from);\n const dateTo = moment(to);\n const diff = dateTo.diff(dateFrom);\n\n return moment.duration(diff).asDays() >= 1;\n }\n\n return false;\n}\n\nclass OperationsList extends Component {\n static propTypes = {\n // from connect\n isLoading: PropTypes.bool.isRequired,\n hasLoaded: PropTypes.bool.isRequired,\n hasError: PropTypes.bool.isRequired,\n error: PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.object,\n }),\n timeRange: PropTypes.shape({\n from: PropTypes.string,\n to: PropTypes.string,\n }).isRequired,\n // from props\n inDashboard: PropTypes.bool,\n };\n\n static defaultProps = {\n inDashboard: false,\n };\n\n isTimeRangeChanged(prevTimeRange) {\n const {timeRange} = this.props;\n\n return timeRange.from !== prevTimeRange.from || timeRange.to !== prevTimeRange.to;\n }\n\n renderError() {\n const {\n error: {message, details},\n } = this.props;\n return <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 YagrChartKit, {\n RawSerieData,\n YagrWidgetData,\n getSerieColor,\n} from '../YagrChartKit/YagrChartKit';\nimport './YTHistogram.scss';\n\nimport format from '../../common/hammer/format';\n\nconst block = cn('yt-histogram');\n\nexport interface YTHistorgramData {\n min: number;\n max: number;\n count: Array<number>;\n}\n\nexport interface AxisInfo {\n label?: string;\n}\n\nexport interface YTHistogramProps {\n className?: string;\n xLabel?: string;\n yLabel?: string;\n yLogarithmic?: boolean;\n yMin?: number;\n xFormat?: (v?: number | string | null) => string;\n yFormat?: (v?: number | string | null) => string;\n renderTooltip?: (value: string | undefined, xl: string, xr: string) => string;\n data: YTHistorgramData;\n}\n\nfunction YTHistogram({\n className,\n data,\n xLabel,\n yLabel,\n yLogarithmic,\n yMin,\n xFormat = format.Number,\n yFormat = format.Number,\n renderTooltip = renderDefaultTooltip,\n}: YTHistogramProps) {\n const yagrData = React.useMemo(() => {\n const {timeline, serieData, step} = genYagrData(data);\n const graphs: Array<RawSerieData> = [\n {\n type: 'column' as const,\n data: yLogarithmic ? serieData.map((v) => (v === 0 ? NaN : v)) : (serieData as any),\n color: getSerieColor(0),\n formatter: yFormat,\n ...{\n renderOptions: {\n size: [1],\n gap: 1,\n },\n },\n },\n ];\n\n const res: YagrWidgetData = {\n data: {\n timeline,\n graphs,\n },\n libraryConfig: {\n axes: {\n x: {\n label: xLabel,\n values: (_d: unknown, x: Array<any>) => x.map(xFormat),\n },\n y: {\n label: yLabel,\n },\n },\n scales: {\n y: {\n min: yMin,\n type: yLogarithmic ? 'logarithmic' : 'linear',\n },\n },\n tooltip: {\n render: (tooltipData) => {\n const {\n x,\n scales: [\n {\n rows: [row],\n },\n ],\n } = tooltipData;\n\n const {originalValue} = row;\n\n return (\n renderTooltip(\n yFormat(isNaN(originalValue!) ? 0 : originalValue),\n xFormat(x - step / 2),\n xFormat(x + step / 2),\n ) ?? '-'\n );\n },\n },\n },\n };\n return res;\n }, [data, xLabel, yLabel, xFormat, yFormat, renderTooltip, yMin, yLogarithmic]);\n\n return (\n <div className={block(null, className)}>\n <YagrChartKit type={'yagr'} data={yagrData} />\n </div>\n );\n}\n\nexport default React.memo(YTHistogram);\n\nfunction genYagrData({min, max, count}: YTHistorgramData) {\n const step = min === max ? 1 : (max - min) / Math.max(count.length, 1);\n\n const serieData = [undefined, ...count];\n const timeline = [min - step / 2];\n if (count.length > 1) {\n for (let i = 0; i < count.length; ++i) {\n timeline.push(min + i * step + step / 2);\n }\n } else {\n timeline.push(min);\n }\n timeline.push(max + step / 2);\n serieData.push(undefined);\n\n return {timeline, serieData, step: min === max ? 0 : step};\n}\n\nconst renderDefaultTooltip: Required<YTHistogramProps>['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> for range from <b>${x0}</b> to <b>${x1}</b>`;\n};\n\nexport function calculateFormatSettings(\n data: YTHistorgramData | undefined,\n fmtFn: (v: number, opts?: {digits?: number}) => number,\n) {\n const {min, max} = data ?? {};\n if (min === max || min === undefined || max === undefined) {\n return undefined;\n }\n const v2 = min + (max - min) / 10;\n if (fmtFn(min) !== fmtFn(v2)) {\n return undefined;\n }\n for (let i = 0; i < 5; ++i) {\n const opts = {digits: i + 2};\n const s1 = fmtFn(min, opts);\n const s2 = fmtFn(v2, opts);\n if (s1 !== s2) {\n return {digits: i + 3};\n }\n }\n return undefined;\n}\n","import React from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ypath from '../../../../../../common/thor/ypath';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {operationProps} from '../../../../../../pages/operations/OperationDetail/tabs/details/Runtime/Runtime';\nimport {getTheme} from '../../../../../../store/selectors/global';\n\nimport {getOperationDetailsLoadingStatus} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport YTHistogram, {\n YTHistogramProps,\n YTHistorgramData,\n calculateFormatSettings,\n} from '../../../../../../components/YTHistogram/YTHistogram';\nimport {RootState} from '../../../../../../store/reducers';\n\nimport './PartitionSizes.scss';\n\nconst block = cn('operation-detail-partition-sizes');\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\ninterface State {\n formatSettings?: {digits: number};\n data?: YTHistorgramData;\n}\n\nclass PartitionSizes extends React.Component<ReduxProps, State> {\n static propTypes = {\n operation: operationProps.isRequired,\n chartKitTheme: PropTypes.string.isRequired,\n };\n\n static getDerivedStateFromProps(props: ReduxProps) {\n const progress = ypath.getValue(props.operation, '/@progress');\n const data = progress && ypath.getValue(progress, '/partition_size_histogram');\n\n return {\n formatSettings: calculateFormatSettings(data, format.Bytes),\n data,\n };\n }\n\n state: State = {};\n\n render() {\n const {data} = this.state;\n if (!data) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <YTHistogram\n className={block('charts')}\n data={data}\n yLabel={'partition count'}\n xLabel={'partition data weight'}\n xFormat={this.formatX}\n yMin={0.5}\n yLogarithmic\n renderTooltip={this.renderTooltip}\n />\n </div>\n </ErrorBoundary>\n );\n }\n\n formatX = (v?: number | string | null) => {\n const {formatSettings} = this.state;\n return format.Bytes(v, formatSettings) as string;\n };\n\n renderTooltip: YTHistogramProps['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> jobs have estimated input job size from ${x0} to ${x1}`;\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n const chartKitTheme = getTheme(state);\n\n return {operation, chartKitTheme};\n};\n\nconst connector = connect(mapStateToProps);\n\nconst PartitionSizesConnected = connector(PartitionSizes);\n\nexport default function PartitionSizesWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PartitionSizesConnected />;\n}\n","import React from 'react';\nimport {Column} from '@gravity-ui/react-data-table';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport DataTableYT from '../../components/DataTableYT/DataTableYT';\nimport {Template} from '../../components/MetaTable/templates/Template';\n\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\nimport Icon from '../../components/Icon/Icon';\nimport Link from '../../components/Link/Link';\nimport {showErrorPopup} from '../../utils/utils';\nimport {compareWithUndefined} from '../../utils/sort-helpers';\n\nimport './AlertEvents.scss';\n\nconst block = cn('alert-events');\n\ninterface Props {\n className?: string;\n items: Array<AlertInfo>;\n}\n\nexport interface AlertInfo {\n from?: string;\n to?: string;\n type: string;\n error: unknown;\n url?: string;\n}\n\nconst columns: Array<Column<AlertInfo>> = [\n {\n name: 'Type',\n render({row}) {\n return (\n <span>\n {format.Readable(row.type)}\n {Boolean(row.url) && (\n <Link url={row.url} theme={'secondary'}>\n &nbsp;\n <Icon awesome={'question-circle'} />\n </Link>\n )}\n </span>\n );\n },\n },\n {\n name: 'Period',\n render({row}) {\n const {from, to} = row;\n return (\n <React.Fragment>\n <Template.Time\n time={from}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n {' - '}\n {!to ? (\n '...'\n ) : (\n <Template.Time\n time={to}\n settings={{format: 'full'}}\n valueFormat={'DateTime'}\n />\n )}\n </React.Fragment>\n );\n },\n },\n {\n name: '',\n render({row}) {\n return (\n <ClickableText\n onClick={() => {\n showErrorPopup(row.error as any, {\n type: 'alert',\n hideOopsMsg: true,\n helpURL: row.url,\n });\n }}\n >\n Details\n </ClickableText>\n );\n },\n },\n];\n\nconst VISIBLE_COUNT = 5;\n\nfunction AlertEvents({className, items}: Props) {\n const [allVisible, setAllVisible] = React.useState(false);\n const all = React.useMemo(() => {\n return items.sort((l, r) => {\n return (\n compareWithUndefined(l.to, r.to, -1, -1) ||\n compareWithUndefined(l.from, r.from, -1, 1)\n );\n });\n }, [items]);\n\n const data = React.useMemo(() => {\n return allVisible ? all : all.slice(0, VISIBLE_COUNT);\n }, [allVisible, all]);\n\n const toggleShowAll = React.useCallback(() => {\n setAllVisible(!allVisible);\n }, [allVisible, setAllVisible]);\n\n return (\n <div className={className}>\n <DataTableYT\n className={block()}\n columns={columns}\n data={data}\n settings={{displayIndices: false, sortable: false}}\n useThemeYT\n disableRightGap\n rowClassName={(row) => {\n return block('row', {current: !row.to});\n }}\n />\n {all.length > VISIBLE_COUNT ? (\n <ClickableText onClick={toggleShowAll}>\n {allVisible ? 'Less' : 'More'}\n </ClickableText>\n ) : null}\n </div>\n );\n}\n\nexport default React.memo(AlertEvents);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport unipika from '../../../../../common/thor/unipika';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\n\nimport CollapsableText from '../../../../../components/CollapsableText/CollapsableText';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport Yson from '../../../../../components/Yson/Yson';\n\nexport default class Description extends Component {\n static propTypes = {\n description: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n };\n\n get settings() {\n return {...unipika.prepareSettings(), escapeWhitespace: false};\n }\n\n // TODO support getting correct type in UNIPIKA (e.g. account for tagged type)\n renderAsMap(value) {\n const {\n utils: {\n yson: {attributes, type},\n },\n } = unipika;\n const isWithoutTags = !Object.hasOwnProperty.call(attributes(value), '_type_tag');\n const isMap = type(value) === 'object';\n\n return isMap && isWithoutTags;\n }\n\n renderAsYSON(value) {\n return <Yson settings={this.settings} value={value} />;\n }\n\n renderMetaTable(description) {\n const value = ypath.getValue(description);\n const keys = keys_(value).sort();\n const items = map_(keys, (key) => ({\n key,\n value: <CollapsableText settings={this.settings} value={value[key]} />,\n }));\n\n return <MetaTable items={items} />;\n }\n\n render() {\n const {description} = this.props;\n\n return this.renderAsMap(description)\n ? this.renderMetaTable(description)\n : this.renderAsYSON(description);\n }\n}\n","import {prepareTableColumns} from '../../../../../utils/index';\n\nconst METRICS = [\n 'row_count',\n 'compressed_data_size',\n 'uncompressed_data_size',\n 'data_weight',\n 'chunk_count',\n];\n\nconst props = {\n theme: 'light',\n size: 'm',\n striped: false,\n virtual: false,\n};\n\nexport const completedTableProps = {\n ...props,\n columns: {\n sets: {\n default: {\n items: ['name', ...METRICS],\n },\n withActions: {\n items: ['name', ...METRICS, 'actions'],\n },\n },\n items: prepareTableColumns({\n name: {\n sort: false,\n align: 'left',\n },\n row_count: {\n sort: false,\n align: 'right',\n },\n compressed_data_size: {\n sort: false,\n align: 'right',\n caption: 'Compressed',\n },\n uncompressed_data_size: {\n sort: false,\n align: 'right',\n caption: 'Uncompressed',\n },\n data_weight: {\n sort: false,\n align: 'right',\n },\n chunk_count: {\n sort: false,\n align: 'right',\n caption: 'Slices',\n },\n actions: {\n sort: false,\n caption: '',\n },\n }),\n mode: 'default',\n },\n};\n\nexport const intermediateTableProps = {\n ...props,\n columns: {\n sets: {\n default: {\n items: ['account', 'node_count', 'disk_space', 'chunk_count'],\n },\n },\n items: prepareTableColumns({\n account: {\n sort: false,\n align: 'left',\n },\n disk_space: {\n sort: false,\n align: 'right',\n },\n chunk_count: {\n sort: false,\n align: 'right',\n caption: 'Slices',\n },\n node_count: {\n sort: false,\n align: 'right',\n },\n }),\n mode: 'default',\n },\n templates: {\n key: 'operations/detail/resources/intermediate',\n },\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../../../../../common/hammer';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\n\nimport {\n completedTableProps,\n intermediateTableProps,\n} from '../../../../../../utils/operations/tabs/details/resources/resourcesTablesProps';\nimport {operationProps} from '../Runtime/Runtime';\n\nimport {hasProgressTasks} from '../../../../../../utils/operations/tabs/details/data-flow';\n\nimport './DataFlow.scss';\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ExpandIcon from '../../../../../../components/ExpandIcon/ExpandIcon';\nconst block = cn('resources');\n\nexport const resourcesProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n value: PropTypes.object,\n from: PropTypes.string,\n to: PropTypes.string,\n }),\n);\nexport const intermediateResourcesProps = PropTypes.array;\n\nfunction resourceAsBytes(item, columnName) {\n return hammer.format['Bytes'](item.value[columnName]);\n}\n\nfunction resourceAsNumber(item, columnName) {\n return hammer.format['Number'](item.value[columnName]);\n}\n\nfunction expandKey(from, to) {\n return `${from}->${to}`;\n}\n\nfunction prepareState(allowExpand, resources, expandedTasks) {\n return {\n allowExpand,\n resources: !allowExpand\n ? resources\n : reduce_(\n resources,\n (acc, item) => {\n const {from, to} = item;\n const expanded = expandedTasks[expandKey(from, to)];\n acc.push(item);\n if (expanded) {\n const {job_data_statistics, teleport_data_statistics} = item;\n if (job_data_statistics) {\n acc.push({\n inner: 'processed by jobs',\n value: job_data_statistics,\n });\n }\n if (teleport_data_statistics) {\n acc.push({\n inner: 'teleported',\n value: teleport_data_statistics,\n });\n }\n }\n return acc;\n },\n [],\n ),\n };\n}\n\nclass DataFlow extends React.Component {\n static getDerivedStateFromProps(props, state) {\n if (props === state.prevProps) {\n return null;\n }\n\n const {operation, resources} = props;\n const allowExpand = hasProgressTasks(operation);\n return {\n allowExpand,\n ...prepareState(allowExpand, resources, state.expandedTasks),\n };\n }\n\n state = {\n prevProps: undefined,\n expandedTasks: {},\n\n resources: [],\n allowExpand: false,\n };\n\n toggleExpand(key) {\n const expandedTasks = {...this.state.expandedTasks};\n if (expandedTasks[key]) {\n delete expandedTasks[key];\n } else {\n expandedTasks[key] = true;\n }\n\n const {allowExpand} = this.state;\n const {resources} = this.props;\n this.setState({\n expandedTasks,\n ...prepareState(allowExpand, resources, expandedTasks),\n });\n }\n\n getResourceTemplates() {\n const {expandedTasks, allowExpand} = this.state;\n const self = this;\n return {\n name(item) {\n const {name, from, to, inner} = item;\n if (name) {\n return name;\n }\n if (inner) {\n return <span className={block('inner')}>{inner}</span>;\n }\n const fromTo = (\n <span>\n {from} -&gt; {to}\n </span>\n );\n if (!allowExpand) {\n return fromTo;\n } else {\n const expKey = expandKey(from, to);\n const expanded = expandedTasks[expKey];\n const onClick = () => {\n self.toggleExpand(expKey);\n };\n return (\n <React.Fragment>\n <ExpandIcon expanded={expanded} onClick={onClick} visible />\n <span onClick={onClick} className={block('name')}>\n {fromTo}\n </span>\n </React.Fragment>\n );\n }\n },\n chunk_count(item, columnName) {\n return resourceAsNumber.call(this, item, columnName);\n },\n row_count: resourceAsNumber,\n data_weight: resourceAsBytes,\n compressed_data_size: resourceAsBytes,\n uncompressed_data_size: resourceAsBytes,\n actions({info, from, to}) {\n if (!info) {\n return null;\n }\n return (\n <ClickableAttributesButton\n title={`Data flow: ${from} -> ${to}`}\n attributes={info}\n />\n );\n },\n };\n }\n\n rowClassName = (data) => {\n if (data.name) {\n return block('named-row');\n }\n return data.inner ? block('inner-row') : null;\n };\n\n render() {\n const {operation, intermediateResources} = this.props;\n const {resources, allowExpand} = this.state;\n return (\n <div className={block()}>\n <div className={block('table', 'elements-section')}>\n <ElementsTable\n {...completedTableProps}\n columnsMode={allowExpand ? 'withActions' : undefined}\n css={block()}\n items={resources}\n templates={this.getResourceTemplates()}\n rowClassName={this.rowClassName}\n />\n </div>\n\n {operation.isRunning() && intermediateResources && (\n <div className={block('table', 'elements-section')}>\n <div className=\"elements-heading elements-heading_size_s\">Uncommitted</div>\n\n <ElementsTable\n {...intermediateTableProps}\n css={block()}\n items={intermediateResources}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nDataFlow.propTypes = {\n operation: operationProps.isRequired,\n resources: resourcesProps.isRequired,\n intermediateResources: intermediateResourcesProps,\n};\n\nexport default DataFlow;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ElementsTable from '../../components/ElementsTable/ElementsTable';\nimport withCollapsible from '../../hocs/withCollapsible';\n\nimport hammer from '../../common/hammer';\n\nimport './CollapsibleTable.scss';\n\nconst headingBlock = cn('elements-heading');\nconst block = cn('collapsible-table');\n\nclass CollapsibleTable extends Component {\n static propTypes = {\n allItemsCount: PropTypes.number.isRequired,\n renderToggler: PropTypes.func.isRequired,\n heading: PropTypes.string.isRequired,\n className: PropTypes.string,\n };\n\n renderHeading() {\n const {heading, allItemsCount} = this.props;\n\n return (\n <div className={headingBlock({size: 's'})}>\n <span className={block('heading')}>{hammer.format['ReadableField'](heading)}</span>\n <span className={block('size')}>{allItemsCount}</span>\n </div>\n );\n }\n\n render() {\n const {className, renderToggler, ...rest} = this.props;\n\n return (\n <div className={block(null, className)}>\n {this.renderHeading()}\n <ElementsTable {...rest} />\n {renderToggler()}\n </div>\n );\n }\n}\n\nexport default withCollapsible(CollapsibleTable);\n","const tableProps = {\n theme: 'light',\n size: 's',\n striped: false,\n virtual: false,\n templates: {\n key: 'operations/detail/specification/io',\n data: {},\n },\n columns: {\n sets: {\n input: {\n items: ['name', 'filters', 'tags'],\n },\n output: {\n items: ['name', 'live_preview', 'tags'],\n },\n stderr: {\n items: ['name', 'live_preview', 'tags'],\n },\n },\n items: {\n name: {\n sort: false,\n align: 'left',\n name: 'name',\n },\n live_preview: {\n sort: false,\n align: 'left',\n name: 'live_preview',\n },\n filters: {\n sort: false,\n align: 'left',\n name: 'filters',\n },\n tags: {\n sort: false,\n align: 'left',\n name: 'tags',\n },\n },\n },\n};\n\nexport const inputTableProps = {\n ...tableProps,\n columns: {\n ...tableProps.columns,\n mode: 'input',\n },\n};\n\nexport const outputTableProps = {\n ...tableProps,\n columns: {\n ...tableProps.columns,\n mode: 'output',\n },\n};\n\nexport const stderrTableProps = {\n ...tableProps,\n columns: {\n ...tableProps.columns,\n mode: 'stderr',\n },\n};\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable, {\n TemplateCommand,\n TemplateEnvironment,\n TemplateFiles,\n 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 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 &nbsp;({hammer.format['Number'](secondary)})\n </span>\n ) : (\n <span>{hammer.format['Number'](primary + secondary)}</span>\n );\n }\n\n render() {\n const {primaryValue, secondaryValue, handleClose, handleShow, visible, type, item} =\n this.props;\n\n const title = `${hammer.format['ReadableField'](type)} statistics: ${item.caption}`;\n const modalContent = this.renderModalContent(type);\n\n return (\n <Flex className={block()} gap={1}>\n <Link theme=\"ghost\" size=\"xs\" onClick={handleShow}>\n View{' '}\n </Link>\n {this.renderCount(type, primaryValue, secondaryValue)}\n <Modal\n onOutsideClick={handleClose}\n onCancel={handleClose}\n content={modalContent}\n visible={visible}\n footer={false}\n title={title}\n />\n </Flex>\n );\n }\n}\n\nDetailedJobsCounter.propTypes = {\n primaryValue: PropTypes.number.isRequired,\n secondaryValue: PropTypes.number.isRequired,\n visible: PropTypes.bool.isRequired,\n handleShow: PropTypes.func.isRequired,\n handleClose: PropTypes.func.isRequired,\n type: PropTypes.oneOf(['aborted', 'completed']),\n item: PropTypes.shape({\n caption: PropTypes.string.isRequired,\n }),\n};\n\nexport default withVisible(DetailedJobsCounter);\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\nimport {hasProgressTasks} from './data-flow';\nimport {prepareTableColumns} from '../../../../utils/index';\n\nfunction sortCounters(reasonA, reasonB) {\n return hammer.utils.compareVectors(\n [reasonA.key === 'other' ? 1 : -1, reasonA.key],\n [reasonB.key === 'other' ? 1 : -1, reasonB.key],\n 'asc',\n );\n}\n\nfunction prepareCategoryCounters(counters, category) {\n if (typeof counters[category] === 'object') {\n const prepared = reduce_(\n counters[category],\n (statistics, count, key) => {\n statistics.counters.push({\n value: count,\n key: key,\n });\n statistics.total += count;\n\n return statistics;\n },\n {\n counters: [],\n total: 0,\n },\n );\n\n prepared.counters.sort(sortCounters);\n\n return prepared;\n } else {\n return {\n total: counters[category],\n };\n }\n}\n\nfunction prepareCompletedStatistics(counters) {\n const completed = counters.completed;\n\n return {\n interrupted: prepareCategoryCounters(completed, 'interrupted'),\n nonInterrupted: prepareCategoryCounters(completed, 'non-interrupted'), // XXX API NAMING BUG\n total: completed['total'],\n };\n}\n\nfunction prepareAbortedStatistics(counters) {\n const aborted = counters.aborted;\n\n return {\n scheduled: prepareCategoryCounters(aborted, 'scheduled'),\n nonScheduled: prepareCategoryCounters(aborted, 'non_scheduled'),\n total: aborted['total'],\n };\n}\n\nfunction prepareJobTypeOrder(jobTypeOrder) {\n const SOURCE = 'source';\n const SINK = 'sink';\n\n // REMOVE source, sink\n jobTypeOrder = filter_(jobTypeOrder, (jobType) => {\n const type = String(jobType).toLowerCase();\n return type !== SOURCE && type !== SINK;\n });\n // ADD total\n jobTypeOrder.push('total');\n\n return jobTypeOrder;\n}\n\nexport function prepareDataFromGraph(operation) {\n if (hasProgressTasks(operation)) {\n return prepareDataFromGraphByTasks(operation);\n }\n\n const dataFlowGraph = ypath.getValue(operation, '/@progress/data_flow_graph');\n let jobTypeOrder = ypath.getValue(dataFlowGraph, '/topological_ordering');\n const countersByType = ypath.getValue(dataFlowGraph, '/vertices');\n let data = [];\n\n if (dataFlowGraph) {\n jobTypeOrder = prepareJobTypeOrder(jobTypeOrder);\n\n // In case of inconsistent graph data\n jobTypeOrder = filter_(jobTypeOrder, (jobType) => {\n return typeof countersByType[jobType] !== 'undefined';\n });\n\n data = map_(jobTypeOrder, (taskType) => {\n return {\n type: taskType,\n jobType: taskType === 'total' ? taskType : countersByType[taskType].job_type,\n counters: countersByType[taskType].job_counter,\n };\n });\n\n data = map_(data, (jobTypeInfo) => {\n const type = jobTypeInfo.type;\n const counters = jobTypeInfo.counters;\n return {\n type: type,\n caption: type,\n jobType: jobTypeInfo.jobType,\n ...prepareCounters(counters),\n };\n });\n }\n\n return data;\n}\n\nfunction prepareDataFromGraphByTasks(operation) {\n const tasks = ypath.getValue(operation, '/@progress/tasks');\n\n const res = map_(tasks, (task) => {\n const {task_name, job_type, job_counter} = task;\n return {\n type: task_name,\n caption: task_name,\n jobType: job_type,\n ...prepareCounters(job_counter),\n info: task,\n };\n });\n\n const totalCounters = ypath.getValue(operation, '/@progress/total_job_counter');\n res.push({\n type: 'total',\n caption: 'total',\n jobType: 'total',\n ...prepareCounters(totalCounters),\n info: totalCounters,\n isTotal: true,\n });\n\n return res;\n}\n\nfunction prepareCounters(counters) {\n return {\n counters,\n abortedStats: prepareAbortedStatistics(counters),\n completedStats: prepareCompletedStatistics(counters),\n };\n}\n\nfunction prepareColumns() {\n const states = ['total', 'pending', 'running', 'completed', 'failed', 'aborted', 'lost'];\n\n const columns = {\n job_type: {\n sort: false,\n align: 'left',\n caption: 'Task',\n },\n };\n\n forEach_(states, (state) => {\n columns[state] = {\n sort: false,\n align: 'right',\n };\n });\n\n columns.actions = {\n name: 'actions',\n sort: 'false',\n caption: '',\n };\n\n return {\n items: prepareTableColumns(columns),\n sets: {\n default: {\n items: ['job_type'].concat(states),\n },\n withActions: {\n items: map_(columns, (_x, name) => name),\n },\n },\n mode: 'default',\n };\n}\n\nexport const tasksTablesProps = {\n theme: 'light',\n striped: false,\n virtual: false,\n size: 'm',\n columns: prepareColumns(),\n computeKey(item) {\n return item.type;\n },\n};\n","import {ValueOf} from '../../../@types/types';\n\nexport interface FieldTree<T = unknown> extends Record<string, FieldTree<T> | T> {}\n\nexport type FieldTreePredicate<T, R> = (path: Array<string>, tree?: FieldTree<T>, item?: T) => R;\n\nexport function fieldTreeForEach<T>(\n vertex: ValueOf<FieldTree<T>>,\n isT: (v: typeof vertex) => v is T,\n visitorCb: FieldTreePredicate<T, void>,\n path: Array<string> = [],\n) {\n if (isT(vertex)) {\n visitorCb(path, undefined, vertex);\n } else {\n if (!vertex) {\n return;\n }\n if (path.length) {\n visitorCb(path, vertex, undefined);\n }\n Object.keys(vertex ?? {}).forEach((k) => {\n path.push(k);\n fieldTreeForEach(vertex[k], isT, visitorCb, path);\n path.pop();\n });\n }\n}\n\nexport function filterFieldTree<T>(\n vertex: FieldTree<T>,\n isT: (v: FieldTree<T> | T) => v is T,\n predicate: FieldTreePredicate<T, boolean | undefined>,\n filterT?: (item: T) => T | undefined,\n path: Array<string> = [],\n): FieldTree<T> | undefined {\n let empty = true;\n const res: typeof vertex = {};\n Object.keys(vertex).forEach((k) => {\n path.push(k);\n const item = vertex[k];\n if (isT(item)) {\n if (predicate(path, undefined, item)) {\n const tmp = filterT ? filterT(item) : item;\n if (tmp !== undefined) {\n res[k] = tmp;\n empty = false;\n }\n }\n } else if (predicate(path, item, undefined)) {\n const tmp = filterFieldTree(item, isT, predicate, filterT, path);\n if (tmp !== undefined) {\n res[k] = tmp;\n empty = false;\n }\n }\n\n path.pop();\n });\n return empty ? undefined : res;\n}\n\nexport function fieldTreeSome<T>(\n vertex: FieldTree<T>,\n isT: (v: FieldTree<T> | T) => v is T,\n predicate: FieldTreePredicate<T, boolean | undefined>,\n path: Array<string> = [],\n): boolean {\n return Object.keys(vertex).some((k) => {\n path.push(k);\n const item = vertex[k];\n if (isT(item)) {\n if (predicate(path, undefined, item)) {\n return true;\n }\n } else if (predicate(path, item, undefined)) {\n return true;\n } else if (fieldTreeSome(item, isT, predicate, path)) {\n return true;\n }\n\n path.pop();\n return false;\n });\n}\n","import {createSelector} from 'reselect';\nimport compact_ from 'lodash/compact';\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport get_ from 'lodash/get';\nimport isEmpty_ from 'lodash/isEmpty';\nimport min_ from 'lodash/min';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport reduce_ from 'lodash/reduce';\nimport sum_ from 'lodash/sum';\n\nimport {\n FieldTree,\n fieldTreeForEach,\n fieldTreeSome,\n filterFieldTree,\n} from '../../../common/hammer/field-tree';\nimport format from '../../../common/hammer/format';\n\nimport ypath from '../../../common/thor/ypath';\nimport {STATISTICS_FILTER_ALL_VALUE} from '../../../constants/operations/statistics';\nimport {RootState} from '../../../store/reducers';\nimport {ValueOf} from '../../../../@types/types';\nimport {prepareDataFromGraph} from '../../../utils/operations/tabs/details/tasks';\n\nconst getJobTypeFilter = (state: RootState) => state.operations.statistics.jobTypeFilter;\nconst getPoolTreeFilter = (state: RootState) => state.operations.statistics.poolTreeFilter;\nconst getFilterText = (state: RootState) => state.operations.statistics.filterText;\n\nconst getOperationDetailsOperation = (state: RootState) => state.operations.detail.operation;\n\nexport const getOperationStatisticsV2 = createSelector(\n [getOperationDetailsOperation],\n (operation) => {\n return ypath.getValue(operation, '/@progress/job_statistics_v2') as\n | StatisticTreeRoot\n | undefined;\n },\n);\n\ninterface StatisticItem {\n summary: StatisticItemSummary;\n tags: StatisticItemTags;\n}\n\nexport interface StatisticItemSummary {\n min: number;\n max: number;\n sum: number;\n count: number;\n}\n\ninterface StatisticItemTags {\n job_state: JobState;\n job_type: string;\n pool_tree: string;\n}\n\nexport type JobState = 'completed' | 'running' | 'aborted' | 'failed' | 'lost';\n\ntype StatisticTree = FieldTree<Array<StatisticItem>>;\n\ntype StatisticTreeRoot = StatisticTree & {\n time?: StatisticTree & {total?: Array<StatisticItem>};\n data?: {\n input?: {\n data_weight?: Array<StatisticItem>;\n row_count?: Array<StatisticItem>;\n };\n };\n};\n\nexport function isStatisticItem(v?: ValueOf<StatisticTree>): v is Array<StatisticItem> {\n return Array.isArray(v);\n}\n\nexport const getOperationStatisticsAvailableValues = createSelector(\n [getOperationStatisticsV2],\n (stats) => {\n const total = stats?.time?.total ?? [];\n const tmp = reduce_(\n total,\n (acc, item) => {\n forEach_(item.tags, (v, k) => {\n const key = k as keyof typeof acc;\n if (v) {\n if (!acc[key]) {\n acc[key] = new Set();\n }\n acc[key].add(v);\n }\n });\n return acc;\n },\n {} as Record<keyof Partial<Omit<StatisticItemTags, 'job_state'>>, Set<string>>,\n );\n return reduce_(\n tmp,\n (acc, v, k) => {\n const key = k as keyof typeof acc;\n acc[key] = new Array(...v.values());\n return acc;\n },\n {} as Record<keyof typeof tmp, Array<string>>,\n );\n },\n);\n\nexport const getOperationStatisticsActiveFilterValues = createSelector(\n [getJobTypeFilter, getPoolTreeFilter, getFilterText, getOperationStatisticsAvailableValues],\n (jobTypeFilter, poolTreeFilter, filterText, {job_type, pool_tree}) => {\n return {\n activeJobType:\n -1 === job_type.indexOf(jobTypeFilter)\n ? STATISTICS_FILTER_ALL_VALUE\n : jobTypeFilter,\n activePoolTree:\n -1 === pool_tree.indexOf(poolTreeFilter)\n ? STATISTICS_FILTER_ALL_VALUE\n : poolTreeFilter,\n filterText,\n };\n },\n);\n\nexport const getOperationStatiscsHasData = (state: RootState) => {\n return !isEmpty_(getOperationStatisticsV2(state));\n};\n\nexport const getOperationStatisticsFilteredTree = createSelector(\n [getOperationStatisticsActiveFilterValues, getOperationStatisticsV2],\n ({activeJobType, activePoolTree, filterText}, tree) => {\n if (!activeJobType && !activePoolTree && !filterText) {\n return tree;\n }\n\n const checkByName = !filterText.length\n ? () => true\n : (path: Array<string>) => {\n const pathText = path.join('/');\n return -1 !== pathText.indexOf(filterText);\n };\n\n return filterFieldTree(\n tree ?? {},\n isStatisticItem,\n (path, tree) => {\n if (checkByName(path)) {\n return true;\n }\n return tree && fieldTreeSome(tree, isStatisticItem, checkByName, path.slice());\n },\n (items) => {\n return filter_(items, ({tags: {job_type, pool_tree}}) => {\n if (activeJobType && job_type !== activeJobType) {\n return false;\n }\n if (activePoolTree && pool_tree !== activePoolTree) {\n return false;\n }\n return true;\n });\n },\n );\n },\n);\n\nexport const getOperationStatisticsFiltered = createSelector(\n [getOperationStatisticsFilteredTree],\n (tree) => {\n const res: Array<{\n name: string;\n title: string;\n level: number;\n data?: Partial<Record<JobState, StatisticItemSummary>>;\n isLeafNode?: boolean;\n }> = [];\n fieldTreeForEach(tree ?? {}, isStatisticItem, (path, _tree, item) => {\n const isLeafNode = Boolean(item);\n res.push({\n title: path[path.length - 1],\n level: path.length - 1,\n data: item ? itemToRow(item) : undefined,\n isLeafNode,\n name: path.join('/'),\n });\n });\n return res;\n },\n);\n\nfunction itemToRow(items: Array<StatisticItem>) {\n const res: Partial<Record<JobState, StatisticItemSummary>> = {};\n forEach_(items, ({summary, tags: {job_state}}) => {\n res[job_state] = mergeSummary(summary, res[job_state]);\n });\n return res;\n}\n\nfunction mergeSummary(summary: StatisticItemSummary, current?: StatisticItemSummary) {\n if (!current) {\n return summary;\n }\n\n const c = sum_([summary.count, current.count])!;\n const s = sum_([summary.sum, current?.sum]);\n return {\n min: min_([summary.min, current.min])!,\n max: max_([summary.max, current.max])!,\n count: c,\n sum: s,\n };\n}\n\nexport const getTotalJobWallTime = createSelector(getOperationStatisticsV2, (tree) => {\n const item = tree?.time?.total;\n return excludeRunningAndCalcSum(item);\n});\n\nfunction excludeRunningAndCalcSum(item?: Array<StatisticItem>) {\n const {running: _tmp, ...rest} = itemToRow(item ?? []);\n const valuesToSum = compact_(map_(rest, 'sum'));\n return !valuesToSum.length ? format.NO_VALUE : sum_(valuesToSum);\n}\n\nconst CPU_TIME_SPENT_PART_NAMES = [\n 'job_proxy.cpu.user',\n 'job_proxy.cpu.system',\n 'user_job.cpu.user',\n 'user_job.cpu.system',\n];\n\nexport const getTotalCpuTimeSpent = createSelector([getOperationStatisticsV2], (tree) => {\n const items = reduce_(\n CPU_TIME_SPENT_PART_NAMES,\n (acc, path) => {\n const item = get_(tree, path);\n if (isStatisticItem(item)) {\n const value = excludeRunningAndCalcSum(item);\n if (value !== undefined) {\n acc.push(value);\n }\n }\n return acc;\n },\n [] as Array<number>,\n );\n return items.length ? sum_(items) : format.NO_VALUE;\n});\n\nexport const getOperationDetailTasksData = createSelector(\n [getOperationDetailsOperation, getOperationStatisticsV2],\n (operation, stats) => {\n const items = prepareDataFromGraph(operation);\n\n const {running: _r, ...timeStatistics} = itemToRow(stats?.time?.total ?? []);\n\n const abortedJobsTime = timeStatistics.aborted?.sum;\n const completedJobsTime = timeStatistics.completed?.sum;\n\n const abortedJobsTimeRatio = prepareAbortedJobsTimeRatio(\n abortedJobsTime,\n completedJobsTime,\n );\n\n const averageReadDataRate = prepareAverageReadDataRate(stats || {}, completedJobsTime);\n const averageReadRowRate = prepareAverageReadRowRate(stats || {}, completedJobsTime);\n\n if (\n !timeStatistics &&\n !abortedJobsTime &&\n !completedJobsTime &&\n !abortedJobsTimeRatio &&\n !averageReadDataRate &&\n !averageReadDataRate &&\n items.length === 0\n ) {\n return {items: []};\n }\n\n return {\n items,\n abortedJobsTime,\n completedJobsTime,\n abortedJobsTimeRatio,\n averageReadDataRate,\n averageReadRowRate,\n };\n },\n);\n\nfunction prepareAbortedJobsTimeRatio(abortedJobsTime?: number, completedJobsTime?: number) {\n let abortedJobsShare;\n\n if (typeof completedJobsTime !== 'undefined' && typeof abortedJobsTime !== 'undefined') {\n if (abortedJobsTime > 0 && completedJobsTime > 0) {\n abortedJobsShare = (abortedJobsTime / completedJobsTime) * 100;\n } else if (abortedJobsTime > 0) {\n abortedJobsShare = 100;\n } else if (completedJobsTime > 0) {\n abortedJobsShare = 0;\n }\n }\n\n return abortedJobsShare;\n}\n\nfunction prepareAverageReadDataRate(stats: StatisticTreeRoot, completedJobsTime = NaN) {\n const completedInputSize = itemToRow(stats?.data?.input?.data_weight || []).completed?.sum ?? 0;\n\n return completedInputSize > 0 ? completedInputSize / (completedJobsTime / 1000) : undefined;\n}\n\nfunction prepareAverageReadRowRate(stats: StatisticTreeRoot, completedJobsTime = NaN) {\n const completedInputRows = itemToRow(stats?.data?.input?.row_count || []).completed?.sum ?? 0;\n\n return completedJobsTime > 0 ? completedInputRows / (completedJobsTime / 1000) : undefined;\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\nimport MetaTable, {Template} from '../../../../../../components/MetaTable/MetaTable';\n\nimport hammer from '../../../../../../common/hammer';\nimport ypath from '../../../../../../common/thor/ypath';\n\nimport './Tasks.scss';\nimport DetailedJobsCounter from '../DetailedJobsCounter/DetailedJobsCounter';\nimport {tasksTablesProps} from '../../../../../../utils/operations/tabs/details/tasks';\nimport {hasProgressTasks} from '../../../../../../utils/operations/tabs/details/data-flow';\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ExpandIcon from '../../../../../../components/ExpandIcon/ExpandIcon';\nimport {RootState} from '../../../../../../store/reducers';\nimport {getOperationDetailTasksData} from '../../../../../../store/selectors/operations/statistics-v2';\n\nconst block = cn('jobs');\n\nfunction prepareVisibleItems(items: Array<Item> = [], expandedState: Record<string, boolean>) {\n const visibleItems: typeof items = [];\n forEach_(items, (item) => {\n visibleItems.push(item);\n const {caption} = item;\n if (expandedState[caption!]) {\n visibleItems.push({taskInfo: item.info});\n }\n });\n return {\n items,\n visibleItems,\n };\n}\n\ninterface Item {\n type?: string;\n caption?: string;\n jobType?: string;\n info?: ItemTaskInfo;\n taskInfo?: Item['info'];\n counters?: Record<string, unknown>;\n abortedStats?: AbortedStats;\n completedStats?: CompletedStats;\n isTotal?: boolean;\n}\n\ninterface AbortedStats {\n scheduled: {total: number};\n nonScheduled: {total: number};\n}\n\ninterface CompletedStats {\n interrupted: {total: number};\n nonInterrupted: {total: number};\n}\n\ninterface OwnProps {\n className?: string;\n collapsibleSize?: 'ss';\n collapsed?: boolean;\n}\n\ntype Props = OwnProps & ConnectedProps<typeof connector>;\n\ninterface State {\n allowActions: boolean;\n expandedState: Record<string, boolean>;\n visibleItems: Array<Item>;\n items: Array<Item>;\n operation: unknown;\n}\n\nclass Tasks extends React.Component<Props, State> {\n static getDerivedStateFromProps(props: Props, state: State) {\n const {\n operation,\n jobs: {items},\n } = props;\n const {operation: prevOperation, items: prevItems, expandedState} = state;\n const res = {};\n if (operation !== prevOperation) {\n Object.assign(res, {\n operation,\n allowActions: hasProgressTasks(operation),\n });\n }\n\n if (items !== prevItems) {\n Object.assign(res, {\n ...prepareVisibleItems(items, expandedState),\n });\n }\n\n return isEmpty_(res) ? null : res;\n }\n\n state: State = {\n allowActions: false,\n expandedState: {},\n\n visibleItems: [],\n\n items: [],\n operation: undefined,\n };\n\n private templates: Record<\n string | '__default__',\n (item: Item, column: string) => React.ReactNode\n >;\n\n constructor(props: Props) {\n super(props);\n\n const self = this;\n this.templates = {\n __default__(item, column) {\n if (!item.counters) {\n return null;\n }\n return <span>{hammer.format['Number'](item.counters[column])}</span>;\n },\n aborted(item) {\n if (!item?.abortedStats) {\n return null;\n }\n const {scheduled, nonScheduled} = item.abortedStats;\n\n return (\n <DetailedJobsCounter\n title={`Aborted statistics: ${item.caption}`}\n secondaryValue={nonScheduled.total}\n primaryValue={scheduled.total}\n type=\"aborted\"\n item={item}\n />\n );\n },\n completed(item) {\n if (!item?.completedStats) {\n return null;\n }\n const {nonInterrupted, interrupted} = item.completedStats;\n\n return (\n <DetailedJobsCounter\n title={`Completed statistics: ${item.caption}`}\n secondaryValue={interrupted.total}\n primaryValue={nonInterrupted.total}\n type=\"completed\"\n item={item}\n />\n );\n },\n job_type(item) {\n const {caption, jobType, taskInfo, isTotal} = item;\n if (taskInfo) {\n return <TaskInfo {...taskInfo} />;\n }\n\n const {expandedState, allowActions} = self.state;\n const expandable = !isTotal && allowActions && caption;\n\n const expanded = expandedState[caption!];\n const onClick = !expandable ? undefined : () => self.toggleExpand(caption);\n\n return (\n <div className={block('job-type')}>\n <div>\n {Boolean(caption) && (\n <ExpandIcon\n visible={Boolean(onClick)}\n expanded={Boolean(expanded)}\n onClick={onClick}\n />\n )}\n </div>\n <div\n onClick={onClick}\n className={block('name', {\n clickable: Boolean(expandable),\n })}\n >\n <span title={`Task ${caption}`}>{caption}</span>\n {!isTotal && (\n <React.Fragment>\n <br />\n {typeof item.jobType !== 'undefined' && (\n <span\n className={'elements-secondary-text'}\n title={`Job type ${jobType}`}\n >\n {jobType}\n </span>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n );\n },\n actions({info, caption}) {\n if (!info) {\n return null;\n }\n return <ClickableAttributesButton title={`Tasks: ${caption}`} attributes={info} />;\n },\n };\n }\n\n // eslint-disable-next-line react/sort-comp\n toggleExpand(name: string) {\n const expandedState = {...this.state.expandedState};\n if (expandedState[name]) {\n delete expandedState[name];\n } else {\n expandedState[name] = true;\n }\n\n this.setState({\n expandedState,\n ...prepareVisibleItems(this.state.items, expandedState),\n });\n }\n\n rowClassName(item: Item) {\n if (item.taskInfo) {\n return block('row-task-info');\n }\n return item.isTotal ? block('row-total') : undefined;\n }\n\n colSpan(item: Item, _rowIndex: number, colIndex: number) {\n if (item.taskInfo && colIndex === 0) {\n return 8;\n }\n return undefined;\n }\n\n render() {\n const {className, jobs, collapsibleSize, collapsed} = this.props;\n return !jobs?.items?.length ? null : (\n <CollapsibleSection\n name=\"Tasks\"\n className={className}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n collapsed={collapsed}\n >\n {this.renderContent()}\n </CollapsibleSection>\n );\n }\n\n renderContent() {\n const {\n abortedJobsTimeRatio,\n abortedJobsTime,\n completedJobsTime,\n averageReadDataRate,\n averageReadRowRate,\n items,\n } = this.props.jobs;\n const rowRateFormat = (value: number) =>\n hammer.format['NumberPerSecond'](value, {measure: 'rows'});\n const {allowActions, visibleItems} = this.state;\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n [\n {\n key: 'aborted_jobs_time_ratio',\n value: (\n <Template.FormattedValue\n value={abortedJobsTimeRatio}\n format=\"Percent\"\n />\n ),\n },\n {\n key: 'aborted_jobs_time',\n value: (\n <Template.FormattedValue\n value={abortedJobsTime}\n format=\"TimeDuration\"\n />\n ),\n },\n {\n key: 'completed_jobs_time',\n value: (\n <Template.FormattedValue\n value={completedJobsTime}\n format=\"TimeDuration\"\n />\n ),\n },\n ],\n [\n {\n key: 'average_read_data_rate',\n value: (\n <Template.FormattedValue\n value={averageReadDataRate}\n format=\"BytesPerSecond\"\n />\n ),\n },\n {\n key: 'average_read_row_rate',\n value: (\n <Template.FormattedValue\n value={averageReadRowRate}\n format={rowRateFormat}\n />\n ),\n },\n ],\n ]}\n />\n\n <div className={block('table-container')}>\n {items.length > 0 && (\n <ElementsTable\n {...tasksTablesProps}\n columnsMode={allowActions ? 'withActions' : undefined}\n items={visibleItems}\n css={block()}\n templates={this.templates}\n rowClassName={this.rowClassName}\n colSpan={this.colSpan}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\ninterface ItemTaskInfo {\n job_type: string;\n has_user_job: boolean;\n input_finished: boolean;\n completed: boolean;\n user_job_memory_reserve_factor: number;\n start_time: string;\n completion_time: string;\n ready_time: string;\n exhaust_time: string;\n}\n\nfunction TaskInfo(props: ItemTaskInfo) {\n const {\n job_type,\n has_user_job,\n input_finished,\n completed,\n user_job_memory_reserve_factor,\n start_time,\n completion_time,\n ready_time,\n exhaust_time,\n } = props;\n\n const readyTime = ypath.getValue(ready_time);\n const exhaustTime = ypath.getValue(exhaust_time);\n\n const timeSum = readyTime + exhaustTime;\n\n return (\n <MetaTable\n className={block('info-meta')}\n items={[\n [\n {\n key: 'job_type',\n value: <Template.Value value={ypath.getValue(job_type)} />,\n },\n {\n key: 'has_user_job',\n value: <Template.Readable value={String(ypath.getValue(has_user_job))} />,\n },\n {\n key: 'input_finished',\n value: <Template.Readable value={String(ypath.getValue(input_finished))} />,\n },\n {\n key: 'completed',\n value: <Template.Readable value={String(ypath.getValue(completed))} />,\n },\n {\n key: 'user_job_memory_reserve_factor',\n value: (\n <Template.Number\n value={ypath.getValue(user_job_memory_reserve_factor)}\n />\n ),\n },\n {\n key: 'start_time',\n value: <Template.Time time={ypath.getValue(start_time)} />,\n },\n {\n key: 'completion_time',\n value: <Template.Time time={ypath.getValue(completion_time)} />,\n },\n ],\n [\n {\n key: 'ready_time',\n value: (\n <Template.Time\n time={readyTime}\n valueFormat={'TimeDuration'}\n settings={{format: 'milliseconds'}}\n />\n ),\n },\n {\n key: 'exhaust_time',\n value: (\n <Template.Time\n time={exhaustTime}\n valueFormat={'TimeDuration'}\n settings={{format: 'milliseconds'}}\n />\n ),\n },\n {\n key: 'tail_time_fraction',\n value:\n timeSum === 0 ? (\n 'n/a'\n ) : (\n <Template.FormattedValue\n value={(exhaustTime / timeSum) * 100}\n format={'Percent'}\n settings={{digits: 1}}\n />\n ),\n },\n ],\n ]}\n />\n );\n}\n\nconst connector = connect((state: RootState) => {\n const taskData = getOperationDetailTasksData(state);\n return {jobs: taskData, operation: state.operations.detail.operation};\n});\n\nexport default connector(Tasks);\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport AlertEvents from '../../../../../../components/AlertEvents/AlertEvents';\nimport OperationDescription from '../../../../../../pages/operations/OperationDetail/tabs/details/Description';\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\nimport Button from '../../../../../../components/Button/Button';\nimport {YTErrorBlock} from '../../../../../../components/Error/Error';\nimport Icon from '../../../../../../components/Icon/Icon';\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, {operationProps, runtimeProps} from '../Runtime/Runtime';\nimport Events, {eventsProps} from '../Events/Events';\nimport Tasks from '../Tasks/Tasks';\nexport {operationProps} from '../Runtime/Runtime';\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: operationProps.isRequired,\n cluster: PropTypes.string.isRequired,\n result: PropTypes.shape({\n error: PropTypes.object.isRequired,\n }),\n runtime: runtimeProps,\n events: eventsProps,\n resources: resourcesProps,\n intermediateResources: intermediateResourcesProps,\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n };\n\n handleEditClick = () => {\n const {operation, showEditPoolsWeightsModal} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderDescription() {\n const {collapsibleSize} = this.props;\n const {description} = this.props.operation;\n\n return (\n description && (\n <CollapsibleSection\n name=\"Description\"\n className={block('description')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <OperationDescription description={description} />\n </CollapsibleSection>\n )\n );\n }\n\n renderSpecification() {\n const {specification, cluster, collapsibleSize} = this.props;\n\n return (\n <CollapsibleSection\n name=\"Specification\"\n className={block('specification')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Specification specification={specification} cluster={cluster} />\n </CollapsibleSection>\n );\n }\n\n renderAlerts() {\n const {alertEvents, collapsibleSize, isVanillaGpuOperation} = this.props;\n return !alertEvents?.length ? null : (\n <CollapsibleSection\n name=\"Alerts\"\n size={collapsibleSize}\n marginDirection=\"bottom\"\n collapsed={isVanillaGpuOperation}\n >\n <AlertEvents items={alertEvents} />\n </CollapsibleSection>\n );\n }\n\n renderError() {\n const {error} = this.props;\n\n return (\n error && (\n <div className={block('result')}>\n <YTErrorBlock {...error} disableLogger />\n </div>\n )\n );\n }\n\n renderRuntimeOverview() {\n return (\n <Button\n size=\"s\"\n onClick={this.handleEditClick}\n title=\"Edit pools and weights\"\n className={block('edit-button')}\n >\n <Icon awesome=\"pencil\" />\n &nbsp;Edit\n </Button>\n );\n }\n\n renderRuntime() {\n const {runtime, operation, cluster, collapsibleSize} = 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 <Runtime runtime={runtime} operation={operation} cluster={cluster} />\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 ...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';\n\nimport keys_ from 'lodash/keys';\nimport throttle_ from 'lodash/throttle';\n\nimport cn from 'bem-cn-lite';\n\nimport {CollapsibleSectionStateLess} from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport Yson from '../../../../../components/Yson/Yson';\n\nimport {operationProps} from '../../../../../pages/operations/OperationDetail/tabs/details/Details/Details';\n\nimport {\n getOperationDetailsLoadingStatus,\n getOperationId,\n} from '../../../../../store/selectors/operations/operation';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nimport './Specification.scss';\nimport ExperimentAssignments from '../../ExperimentAssignments/ExperimentAssignments';\nimport {docsUrl} from '../../../../../config';\nimport UIFactory from '../../../../../UIFactory';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../constants/global';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\n\nconst block = cn('operation-specification');\n\nconst onResize = throttle_(\n () => {\n window.dispatchEvent(new Event('resize'));\n },\n 100,\n {leading: false},\n);\n\nfunction Specification({operation, operationId}) {\n const helpUrl = UIFactory.docsUrls['operations:operations_options'];\n\n const providedSpec = operation.typedProvidedSpec || operation.typedSpec;\n\n const unrecognizedSpec = operation.typedUnrecognizedSpec || {};\n const fullSpec = operation.typedFullSpec;\n\n const hasUnrecognized = keys_(unrecognizedSpec).length > 0;\n\n const [collapsed, setCollapsed] = React.useState({\n provided: hasUnrecognized,\n unrecognized: false,\n resulting: true,\n });\n\n const onToggleProvided = React.useCallback((provided) => {\n setCollapsed({unrecognized: true, resulting: true, provided});\n onResize();\n });\n\n const onToggleUnrecognized = React.useCallback((unrecognized) => {\n setCollapsed({unrecognized, provided: true, resulting: true});\n onResize();\n });\n\n const onToggleResulting = React.useCallback((resulting) => {\n setCollapsed({unrecognized: true, resulting, provided: true});\n onResize();\n });\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n {docsUrl(\n <div className={block('help', 'elements-section')}>\n <HelpLink url={helpUrl} />\n </div>,\n )}\n\n <CollapsibleSectionStateLess\n name=\"Provided specification\"\n onToggle={onToggleProvided}\n collapsed={collapsed.provided}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={providedSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={providedSpec}\n settings={unipika.prepareSettings()}\n name={`provider_specification_${operationId}`}\n />\n }\n />\n </CollapsibleSectionStateLess>\n\n <ExperimentAssignments />\n\n {hasUnrecognized && (\n <CollapsibleSectionStateLess\n name=\"Unrecognized specification\"\n onToggle={onToggleUnrecognized}\n collapsed={collapsed.unrecognized}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={unrecognizedSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={unrecognizedSpec}\n settings={unipika.prepareSettings()}\n name={`unrecognized_specification_${operationId}`}\n />\n }\n />\n </CollapsibleSectionStateLess>\n )}\n\n {fullSpec && (\n <CollapsibleSectionStateLess\n name=\"Resulting specification\"\n onToggle={onToggleResulting}\n collapsed={collapsed.resulting}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={fullSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={fullSpec}\n settings={unipika.prepareSettings()}\n name={`resulting_specification_${operationId}`}\n />\n }\n />\n </CollapsibleSectionStateLess>\n )}\n </div>\n </ErrorBoundary>\n );\n}\n\nSpecification.propTypes = {\n // from connect\n operation: operationProps.isRequired,\n};\n\nconst mapStateToProps = (state) => ({\n operation: state.operations.detail.operation,\n operationId: getOperationId(state),\n});\n\nconst SpecificationConnected = connect(mapStateToProps)(Specification);\n\nexport default function SpecificationWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_SPECIFICATION,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_SPECIFICATION,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <SpecificationConnected />;\n}\n","import React from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ypath from '../../../../../../common/thor/ypath';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {operationProps} from '../../details/Runtime/Runtime';\nimport {getTheme} from '../../../../../../store/selectors/global';\n\nimport WithStickyToolbar from '../../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {hasTaskHistograms} from '../../../../../../utils/operations/jobs';\nimport {getOperationDetailsLoadingStatus} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport {RootState} from '../../../../../../store/reducers';\nimport YTHistogram, {\n YTHistogramProps,\n YTHistorgramData,\n calculateFormatSettings,\n} from '../../../../../../components/YTHistogram/YTHistogram';\n\nimport './JobSizes.scss';\n\nconst block = cn('operation-detail-job-sizes');\n\ntype Props = ConnectedProps<typeof connector> & {\n className?: string;\n};\n\ninterface State {\n formatSettings?: {digits: number};\n data?: YTHistorgramData;\n showEstimated: boolean;\n}\n\nclass JobSizes extends React.Component<Props, State> {\n static propTypes = {\n operation: operationProps.isRequired,\n chartKitTheme: PropTypes.string.isRequired,\n };\n\n static getDerivedStateFromProps(props: Props) {\n const progress = ypath.getValue(props.operation, '/@progress');\n const data = progress && ypath.getValue(progress, '/partition_size_histogram');\n\n return {\n formatSettings: calculateFormatSettings(data, format.Bytes),\n data,\n };\n }\n\n state: State = {\n showEstimated: false,\n };\n\n render() {\n const {className} = this.props;\n return (\n <WithStickyToolbar\n className={className}\n content={this.renderContent()}\n toolbar={\n <Toolbar\n itemsToWrap={[\n {\n name: 'showEstimated',\n node: (\n <Checkbox\n size=\"l\"\n onUpdate={this.toggleEstimated}\n checked={this.state.showEstimated}\n >\n Show estimated\n </Checkbox>\n ),\n },\n ]}\n />\n }\n />\n );\n }\n\n prepareJobSizes() {\n const {operation} = this.props;\n const progress = ypath.getValue(operation, '/@progress');\n\n return progress\n ? {\n estimatedJobSizeHistogram: ypath.getValue(\n progress,\n '/estimated_input_data_size_histogram',\n ),\n jobSizeHistogram: ypath.getValue(progress, '/input_data_size_histogram'),\n }\n : {};\n }\n\n renderChart(data: YTHistorgramData, title: string) {\n if (!data) {\n return null;\n }\n\n return (\n <div className={block('chart-section')}>\n <div className=\"elements-heading elements-heading_size_m\">{title}</div>\n <YTHistogram\n className={block('charts')}\n data={data}\n yLabel={'job count'}\n xLabel={'job input data weight'}\n xFormat={this.formatX}\n yMin={0.5}\n yLogarithmic\n renderTooltip={this.renderTooltip}\n />\n </div>\n );\n }\n\n formatX = (v?: number | string | null) => {\n const {formatSettings} = this.state;\n return format.Bytes(v, formatSettings) as string;\n };\n\n renderTooltip: YTHistogramProps['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> jobs have estimated input job size from <b>${x0}</b> to <b>${x1}</b>`;\n };\n\n renderPerTaskCharts(tasks: any) {\n const {showEstimated} = this.state;\n return map_(\n tasks,\n ({task_name, estimated_input_data_weight_histogram, input_data_weight_histogram}) => {\n return (\n <div className={block('task-cell', {'per-task': true})} key={task_name}>\n {this.renderChart(\n input_data_weight_histogram,\n `Task \"${task_name}\" actual data weight`,\n )}\n {showEstimated &&\n this.renderChart(\n estimated_input_data_weight_histogram,\n `Task \"${task_name}\" estimated data weight`,\n )}\n </div>\n );\n },\n );\n }\n\n renderCommon() {\n const {showEstimated} = this.state;\n const {jobSizeHistogram, estimatedJobSizeHistogram} = this.prepareJobSizes();\n return (\n <div className={block('task-cell')}>\n {this.renderChart(jobSizeHistogram, 'Input')}\n {showEstimated && this.renderChart(estimatedJobSizeHistogram, 'Estimated input')}\n </div>\n );\n }\n\n renderContent() {\n const {operation} = this.props;\n const tasks = ypath.getValue(this.props.operation, '/@progress/tasks');\n return (\n <ErrorBoundary>\n <div className={block()}>\n {hasTaskHistograms(operation)\n ? this.renderPerTaskCharts(tasks)\n : this.renderCommon()}\n </div>\n </ErrorBoundary>\n );\n }\n\n toggleEstimated = () => {\n const {showEstimated} = this.state;\n this.setState({showEstimated: !showEstimated});\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n const chartKitTheme = getTheme(state);\n\n return {operation, chartKitTheme};\n};\n\nconst connector = connect(mapStateToProps);\n\nconst JobSizesConnected = connector(JobSizes);\n\nexport default function JobSizesWithRum(props: {className?: string}) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_JOB_SIZES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_JOB_SIZES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <JobSizesConnected {...props} />;\n}\n","const completedHintText =\n 'Completed jobs — those which have finished successfully (i.e. consumed entire input and exited with zero exit code). Please note that due to hardware failures some jobs may be run more than once.';\nconst abortedHintText =\n 'Aborted jobs — those with soft failure (i.e. resource overdraft or preemption). Please note that some of aborted jobs may be excluded from statistics.';\nconst failedHintText =\n 'Failed jobs — those with hard failure (i.e. exited with non-zero exit code). Please note that some of failed jobs may be excluded from statistics.';\nconst lostHintText =\n 'Lost jobs — those which have finished successfully but whose results were lost (typically due to hardware failures).';\n\nexport const STATISTIC_STATE = {\n completed: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: completedHintText},\n },\n aborted: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: abortedHintText},\n },\n failed: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: failedHintText},\n },\n lost: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: lostHintText},\n },\n};\n\nexport const statisticsTableProps = {\n theme: 'light',\n size: 's',\n striped: false,\n computeKey(item) {\n return `<Root>/${item.name}`;\n },\n tree: true,\n columns: {\n sets: {\n default: {\n items: ['metric'].concat(Object.keys(STATISTIC_STATE)),\n },\n },\n items: {...STATISTIC_STATE, metric: {sort: false, align: 'left'}},\n mode: 'default',\n },\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {Flex} from '@gravity-ui/uikit';\n\nimport {getOperationStatisticsDescription} from '../../../../../store/selectors/global/supported-features';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport format from '../../../../../common/hammer/format';\nimport {StatisticName, formatByUnit} from '../../../../../components/StatisticTable';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\n\nfunction useStatisticInfo(name: string) {\n const {getStatisticInfo} = useSelector(getOperationStatisticsDescription);\n return getStatisticInfo(name);\n}\n\nfunction OperationStatisticNameImpl({name, title}: {name: string; title: string}) {\n const info = useStatisticInfo(name);\n\n return <StatisticName title={title} info={info} />;\n}\n\nfunction OperationStatisticValueImpl({\n name,\n settings,\n value,\n}: {\n value?: number;\n name: string;\n settings?: {significantDigits: number};\n}) {\n const info = useStatisticInfo(name);\n const asStr = formatByUnit(value, info?.unit, settings);\n const asNumber = format.Number(value, settings);\n\n return asStr !== undefined ? (\n <Tooltip\n placement={['right', 'left']}\n content={\n <Flex gap={1}>\n <span> {asNumber}</span>\n {!isNaN(value!) && (\n <ClipboardButton text={`${value}`} inlineMargins view=\"flat-outlined\" />\n )}\n </Flex>\n }\n >\n {asStr}\n </Tooltip>\n ) : (\n asNumber\n );\n}\n\nexport const OperationStatisticValue = React.memo(OperationStatisticValueImpl);\nexport const OperationStatisticName = React.memo(OperationStatisticNameImpl);\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport Button from '../../../../../components/Button/Button';\nimport Filter from '../../../../../components/Filter/Filter';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n AGGREGATOR_RADIO_ITEMS,\n DEBOUNCE_DELAY,\n TREE_STATE,\n} from '../../../../../constants/operations/statistics';\nimport {\n changeAggregation,\n changeFilterText,\n changeJobType,\n changePoolTreeFilter,\n setTreeState,\n} from '../../../../../store/actions/operations/statistics';\nimport {statisticsTableProps} from '../../../../../utils/operations/tabs/statistics/statisticsTableProps';\nimport {makeRadioButtonProps} from '../../../../../utils';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getOperationDetailsLoadingStatus} from '../../../../../store/selectors/operations/operation';\nimport {\n getOperationStatisticsActiveFilterValues,\n getOperationStatisticsAvailableValues,\n getOperationStatisticsFiltered,\n} from '../../../../../store/selectors/operations/statistics-v2';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {docsUrl} from '../../../../../config';\nimport UIFactory from '../../../../../UIFactory';\nimport {WaitForFont} from '../../../../../containers/WaitForFont/WaitForFont';\n\nimport {OperationStatisticName, OperationStatisticValue} from './OperationStatisticName';\nimport './Statistics.scss';\n\nconst statisticsBlock = cn('operation-statistics');\nconst toolbarBlock = cn('elements-toolbar');\n\ntype ItemType = ReturnType<typeof getOperationStatisticsFiltered>[0];\n\ninterface ItemState {\n collapsed?: boolean;\n empty?: boolean;\n}\n\ntype Props = {className?: string} & ConnectedProps<typeof connector>;\n\nexport class Statistics extends Component<Props> {\n componentWillUnmount() {\n this.expandTable();\n }\n\n // eslint-disable-next-line react/sort-comp\n get template() {\n const {setTreeState, activeAggregation = 'avg'} = this.props;\n\n return {\n metric(\n item: ItemType,\n _columnName: 'metric',\n toggleItemState: (...args: Array<unknown>) => void,\n itemState: ItemState,\n ) {\n const OFFSET = 40;\n const offsetStyle = {paddingLeft: item.level * OFFSET};\n\n if (item.isLeafNode) {\n return (\n <span className={statisticsBlock('metric')} style={offsetStyle}>\n <Icon className={statisticsBlock('metric-icon')} awesome=\"chart-line\" />\n <OperationStatisticName name={item.name} title={item.title} />\n </span>\n );\n } else {\n const togglerIconName =\n itemState.collapsed || itemState.empty ? 'angle-down' : 'angle-up';\n const itemIconName =\n itemState.collapsed || itemState.empty ? 'folder' : 'folder-open';\n\n const toggleItemAndTreeState = (...rest: Array<unknown>) => {\n if (!itemState.empty) {\n toggleItemState(...rest);\n setTreeState('mixed');\n }\n };\n\n return (\n <span\n className={statisticsBlock('group')}\n style={offsetStyle}\n onClick={toggleItemAndTreeState}\n >\n <Icon\n className={statisticsBlock('group-icon-toggler')}\n awesome={togglerIconName}\n />\n <Icon\n className={statisticsBlock('group-icon')}\n awesome={itemIconName}\n />\n <span>{item.title}</span>\n </span>\n );\n }\n },\n __default__(item: ItemType, columnName: keyof Required<typeof item>['data']) {\n if (item.isLeafNode) {\n const metric = item.data?.[columnName];\n\n let value;\n let settings;\n\n if (activeAggregation === 'avg') {\n value = metric && metric.count && metric.sum / metric.count;\n\n if (value! < 1) {\n settings = {\n significantDigits: 6,\n };\n }\n } else {\n value = metric && metric[activeAggregation];\n }\n\n if (activeAggregation === 'count') {\n return format['Number'](value, settings);\n }\n\n return (\n <OperationStatisticValue\n value={value!}\n settings={settings}\n name={item.name}\n />\n );\n }\n return null;\n },\n };\n }\n\n collapseTable = () => this.props.setTreeState(TREE_STATE.COLLAPSED);\n expandTable = () => this.props.setTreeState(TREE_STATE.EXPANDED);\n\n renderToolbar() {\n const {filterText, activeAggregation, jobTypes, poolTrees, activeJobType, activePoolTree} =\n this.props;\n\n return (\n <div className={toolbarBlock(null, statisticsBlock('toolbar'))}>\n <div className={toolbarBlock('container')}>\n <div className={toolbarBlock('component', statisticsBlock('filter'))}>\n <Filter\n size=\"m\"\n value={filterText}\n debounce={DEBOUNCE_DELAY}\n onChange={this.props.changeFilterText}\n />\n </div>\n\n {poolTrees.length > 1 && (\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activePoolTree ?? ''}\n onUpdate={this.props.changePoolTreeFilter}\n items={makeRadioButtonProps(poolTrees, '')}\n name=\"operation-statistics-pool-tree\"\n />\n </div>\n )}\n\n {jobTypes.length > 1 && (\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activeJobType ?? ''}\n onUpdate={this.props.changeJobType}\n items={makeRadioButtonProps(jobTypes, '')}\n name=\"operation-statistics-job-type\"\n />\n </div>\n )}\n\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activeAggregation}\n onChange={this.props.changeAggregation}\n items={AGGREGATOR_RADIO_ITEMS}\n name=\"operation-statistics-aggregator\"\n />\n </div>\n\n <div className={toolbarBlock('component', statisticsBlock('expand-collapse'))}>\n <span className={statisticsBlock('expand-metrics')}>\n <Button size=\"m\" title=\"Expand All\" onClick={this.expandTable}>\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n </span>\n\n <span className={statisticsBlock('collapse-metrics')}>\n <Button size=\"m\" title=\"Collapse All\" onClick={this.collapseTable}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </span>\n </div>\n {docsUrl(\n <div className={toolbarBlock('component', statisticsBlock('help'))}>\n <HelpLink url={UIFactory.docsUrls['problems:jobstatistics']} />\n </div>,\n )}\n </div>\n </div>\n );\n }\n\n render() {\n const {className, treeState, items} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={statisticsBlock(null, className)}>\n {this.renderToolbar()}\n <WaitForFont>\n <ElementsTable\n {...statisticsTableProps}\n templates={this.template}\n css={statisticsBlock()}\n treeState={treeState}\n items={items}\n />\n </WaitForFont>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {treeState, activeAggregation} = state.operations.statistics;\n\n const {job_type: jobTypes, pool_tree: poolTrees} = getOperationStatisticsAvailableValues(state);\n\n return {\n items: getOperationStatisticsFiltered(state),\n treeState,\n activeAggregation,\n jobTypes,\n poolTrees,\n ...getOperationStatisticsActiveFilterValues(state),\n };\n};\n\nconst mapDispatchToProps = {\n setTreeState,\n changeFilterText,\n changeAggregation,\n changeJobType,\n changePoolTreeFilter,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst StatisticsConnected = connector(Statistics);\n\nexport default function SpecificationWithRum(props: {className: string}) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_STATISTICS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_STATISTICS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <StatisticsConnected {...props} />;\n}\n","import {\n CHANGE_AGGREGATION,\n CHANGE_FILTER_TEXT,\n OPERATION_STATISTICS_PARTIAL,\n SET_TREE_STATE,\n} from '../../../constants/operations/statistics';\nimport {getOperation} from '../../../store/selectors/operations/operation';\nimport {getSettingOperationStatisticsActiveJobTypes} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsStatisticsActiveJobTypes} from '../../../store/actions/settings/settings';\n\nexport function setTreeState(treeState) {\n return {\n type: SET_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changeFilterText(filterText) {\n return {\n type: CHANGE_FILTER_TEXT,\n data: {filterText},\n };\n}\n\nexport function changeAggregation({target}) {\n return {\n type: CHANGE_AGGREGATION,\n data: {activeAggregation: target.value},\n };\n}\n\nexport function changeJobType(jobType) {\n return (dispatch, getState) => {\n dispatch({\n type: OPERATION_STATISTICS_PARTIAL,\n data: {jobTypeFilter: jobType},\n });\n\n const state = getState();\n const operationType = getOperation(state).type;\n const settingsJobTypes = getSettingOperationStatisticsActiveJobTypes(state);\n\n if (settingsJobTypes && settingsJobTypes[operationType] !== jobType) {\n dispatch(\n setSettingsStatisticsActiveJobTypes({\n ...settingsJobTypes,\n [operationType]: jobType,\n }),\n );\n }\n };\n}\n\nexport function changePoolTreeFilter(poolTreeFilter) {\n return (dispatch) => {\n dispatch({type: OPERATION_STATISTICS_PARTIAL, data: {poolTreeFilter}});\n };\n}\n","import {RootState} from '../../reducers';\n\nexport const getJobsErrors = (state: RootState) => state.operations.jobs.jobsErrors;\nexport const getJobsOperationId = (state: RootState) => state.operations.jobs.operationId;\n\nexport const getJobsOperationIncarnationsFilter = (state: RootState) =>\n state.operations.jobsOperationIncarnations.filter;\nexport const getJobsOperationIncarnationsValues = (state: RootState) =>\n state.operations.jobsOperationIncarnations.availableValues;\n","import {ThunkAction} from 'redux-thunk';\nimport compact_ from 'lodash/compact';\nimport uniq_ from 'lodash/uniq';\n\nimport {RootState} from '../../../store/reducers';\nimport {jobOperaionIncarnationActions} from '../../../store/reducers/operations/jobs/jobs-operation-incarnations';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {ListJobsResponse} from '../../../../shared/yt-types';\nimport {getJobs} from './jobs';\n\ntype OperationIncarnationThunkAction<T = void> = ThunkAction<T, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function fetchOperationIncarnationAvailableItems(operation: {\n id: string;\n type: string;\n}): OperationIncarnationThunkAction {\n return (dispatch) => {\n cancelHelper.removeAllRequests();\n dispatch(jobOperaionIncarnationActions.onRequest({operationId: operation.id}));\n\n if (operation.type !== 'vanilla') {\n return dispatch(jobOperaionIncarnationActions.onReset());\n }\n\n return ytApiV3Id\n .listJobs(YTApiId.jobsOperationIncarnations, {\n parameters: {\n operation_id: operation.id,\n /**\n * It is supposed that vanilla operations don't have much jobs\n * and `limit: 1000` allows to load all jobs\n */\n limit: 1000,\n },\n cancellation: cancelHelper.removeAllAndSave,\n })\n .then((data: ListJobsResponse) => {\n dispatch(\n jobOperaionIncarnationActions.onSuccess({\n availableValues: uniq_(\n compact_(data.jobs.map((item) => item.operation_incarnation)),\n ),\n }),\n );\n });\n };\n}\n\nexport function updateJobsOperationIncarnationFilter(\n filter: string | undefined,\n): OperationIncarnationThunkAction {\n return (dispatch) => {\n dispatch(jobOperaionIncarnationActions.setFilter({filter}));\n dispatch(getJobs());\n };\n}\n","// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {ThunkAction} from 'redux-thunk';\n\nimport {\n EXTRA_JOBS_COUNT,\n GET_COMPETITIVE_JOBS,\n GET_JOB,\n GET_JOBS,\n HIDE_INPUT_PATHS,\n JOB_LIST_UPDATE_FILTER,\n OPERATION_JOBS_TABLE_ID,\n RESET_COMPETITIVE_JOBS,\n SHOW_INPUT_PATHS,\n UPDATE_FILTER_COUNTERS,\n UPDATE_OFFSET,\n} from '../../../constants/operations/jobs';\nimport {changeColumnSortOrder} from '../../../store/actions/tables';\nimport {OPERATIONS_PAGE} from '../../../constants/operations/list';\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\n\nimport {getShowCompetitiveJobs} from '../../../pages/operations/selectors';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {\n JobsListAction,\n JobsState,\n UpdateFilterData,\n} from '../../../store/reducers/operations/jobs/jobs';\nimport {OldSortState} from '../../../types';\nimport {ListJobsParameters} from '../../../../shared/yt-types';\nimport {KeysByType} from '../../../../@types/types';\nimport {TablesSortOrderAction} from '../../../store/reducers/tables';\nimport {getJobsOperationIncarnationsFilter} from '../../../store/selectors/operations/jobs';\nimport {fetchOperationIncarnationAvailableItems} from './jobs-operation-incarnations';\n\nconst requests = new CancelHelper();\n\nconst getOperation = (state: RootState) => state.operations.detail.operation;\n\ntype JobsListThunkAction = ThunkAction<\n void | Promise<void>,\n RootState,\n unknown,\n JobsListAction | TablesSortOrderAction\n>;\n\nexport function getJob(): JobsListThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const clusterConfig = getCurrentClusterConfig(state);\n\n requests.removeAllRequests();\n return ytApiV3\n .getJob({\n parameters: getJobRequestParameters(state),\n cancellation: requests.saveCancelToken,\n })\n .then((job) => {\n dispatch({\n type: GET_JOB.SUCCESS,\n data: {\n job,\n clusterConfig,\n operationId: getOperation(state).$value,\n },\n });\n dispatch(getCompetitiveJobs());\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_JOB.CANCELLED});\n } else {\n dispatch({\n type: GET_JOB.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nfunction getJobRequestParameters(state: RootState) {\n const {operation} = state.operations.detail;\n const {filters} = state.operations.jobs;\n return {\n operation_id: operation.$value,\n job_id: filters.jobId.value,\n };\n}\n\nexport function getCompetitiveJobs(): JobsListThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const clusterConfig = getCurrentClusterConfig(state);\n\n return ytApiV3\n .listJobs({\n parameters: getCompetitiveJobsRequestParameters(state),\n cancellation: requests.removeAllAndSave,\n })\n .then(({jobs}) => {\n dispatch({\n type: GET_COMPETITIVE_JOBS.SUCCESS,\n data: {\n jobs,\n clusterConfig,\n operationId: getOperation(state).$value,\n },\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_COMPETITIVE_JOBS.CANCELLED});\n } else {\n dispatch({\n type: GET_COMPETITIVE_JOBS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nfunction getJobsRequestParameters(state: RootState): ListJobsParameters {\n const {operation} = state.operations.detail;\n const {filters, pagination} = state.operations.jobs;\n const sortState = state.tables[OPERATION_JOBS_TABLE_ID];\n\n const incarnation = getJobsOperationIncarnationsFilter(state);\n\n return {\n operation_id: operation.$value,\n /*\n include_archive: true,\n include_cypress: true,\n include_runtime: true\n */\n // prepareSortQuery(),\n ...getJobFilterParameters(filters, sortState),\n ...preparePaginationQuery(pagination),\n operation_incarnation: incarnation || undefined,\n };\n}\n\n// Operation Jobs\n\nfunction getJobFilterParameters(filters: JobsState['filters'], sortState: OldSortState) {\n const filterBy = filters.filterBy.value || filters.filterBy.defaultValue;\n return {\n state: getValueIfNotDefault(filters, 'state'),\n type: getValueIfNotDefault(filters, 'type'),\n address: filterBy === 'address' ? getValueIfNotDefault(filters, 'address') : undefined,\n with_stderr: getValueIfNotDefault(filters, 'withStderr'),\n with_monitoring_descriptor: getValueIfNotDefault(filters, 'withMonitoringDescriptor'),\n with_interruption_info: getValueIfNotDefault(filters, 'withInterruptionInfo'),\n with_fail_context: getValueIfNotDefault(filters, 'withFailContext'),\n with_spec: getValueIfNotDefault(filters, 'withSpec'),\n with_competitors: getValueIfNotDefault(filters, 'withCompetitors'),\n sort_field: sortState.field || 'none',\n sort_order: sortState.asc ? ('ascending' as const) : ('descending' as const),\n task_name: getValueIfNotDefault(filters, 'taskName'),\n };\n}\n\nfunction getCompetitiveJobsRequestParameters(state: RootState) {\n const {operation} = state.operations.detail;\n const {job} = state.operations.jobs;\n const sortState = state.tables[OPERATION_JOBS_TABLE_ID];\n return {\n operation_id: operation.$value,\n job_competition_id: job?.attributes.job_competition_id,\n sort_field: sortState.field || 'none',\n sort_order: sortState.asc ? ('ascending' as const) : ('descending' as const),\n };\n}\n\nfunction getValueIfNotDefault<K extends keyof JobsState['filters']>(\n filters: JobsState['filters'],\n name: K,\n): JobsState['filters'][K]['value'] | undefined {\n const filter = filters[name];\n return filter.value === filter.defaultValue ? undefined : filter.value;\n}\n\nfunction preparePaginationQuery({offset, limit}: {offset: number; limit: number}) {\n return {\n offset: Math.max(0, offset),\n limit: limit + EXTRA_JOBS_COUNT,\n };\n}\n\nconst getJobsCanceler = new CancelHelper();\n\nexport function getJobs(): JobsListThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\n\n const operation = getOperation(state);\n dispatch(\n fetchOperationIncarnationAvailableItems({id: operation.id, type: operation.type!}),\n );\n\n if (showCompetitiveJobs) {\n return dispatch(getJob());\n }\n\n dispatch({\n type: GET_JOBS.REQUEST,\n });\n\n const requests = [\n {\n command: 'list_jobs' as const,\n parameters: getJobsRequestParameters(state),\n },\n ];\n\n const clusterConfig = getCurrentClusterConfig(state);\n\n return ytApiV3Id\n .executeBatch(YTApiId.operationGetJobs, {\n parameters: {requests},\n cancellation: getJobsCanceler.removeAllAndSave,\n })\n .then(([jobs]) => {\n if (jobs.error) {\n return Promise.reject(jobs.error);\n }\n\n const {jobs: items, errors, state_counts, type_counts} = jobs.output;\n\n dispatch({\n type: GET_JOBS.SUCCESS,\n data: {\n jobs: items,\n jobsErrors: errors,\n operationId: operation.id,\n clusterConfig,\n },\n });\n\n dispatch({\n type: UPDATE_FILTER_COUNTERS,\n data: {\n stateCounters: state_counts,\n typeCounters: type_counts,\n },\n });\n\n return undefined;\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: GET_JOBS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nfunction setJobsListFilter(data: UpdateFilterData): JobsListAction {\n return {type: JOB_LIST_UPDATE_FILTER, data};\n}\n\nexport function resetCompetitiveJobs() {\n return {\n type: RESET_COMPETITIVE_JOBS,\n };\n}\n\nexport function updateFilteredAttributes<\n K extends KeysByType<JobsState['filters'], {value: boolean}>,\n>(filtersToUpdate: Array<K>, selected: Array<K>): JobsListThunkAction {\n return (dispatch) => {\n filtersToUpdate.forEach((name) => {\n const isFiltered = selected.indexOf(name) !== -1;\n dispatch(setJobsListFilter({name, value: isFiltered}));\n });\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function updateListJobsFilter(data: UpdateFilterData): JobsListThunkAction {\n return (dispatch) => {\n const {name, value} = data;\n const isStateFilter = name === 'state';\n const useFinishTime = value === 'completed' || value === 'failed' || value === 'aborted';\n const useStartTime = value === 'all' || value === 'running';\n\n if (isStateFilter && useFinishTime) {\n dispatch(\n changeColumnSortOrder({\n tableId: OPERATION_JOBS_TABLE_ID,\n columnName: 'finish_time',\n asc: false,\n }),\n );\n } else if (isStateFilter && useStartTime) {\n dispatch(\n changeColumnSortOrder({\n tableId: OPERATION_JOBS_TABLE_ID,\n columnName: 'start_time',\n asc: true,\n }),\n );\n }\n\n if (name === 'jobId' && !value) {\n dispatch(resetCompetitiveJobs());\n }\n\n dispatch(setJobsListFilter(data));\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function showInputPaths(job: {id: string}): JobsListThunkAction {\n return (dispatch) => {\n const {id: jobId} = job;\n\n dispatch({\n type: SHOW_INPUT_PATHS.REQUEST,\n });\n\n ytApiV3\n .getJobInputPaths({\n job_id: jobId,\n output_format: TYPED_OUTPUT_FORMAT,\n })\n .then((inputPaths) => {\n dispatch({\n type: SHOW_INPUT_PATHS.SUCCESS,\n data: inputPaths,\n });\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: SHOW_INPUT_PATHS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function hideInputPaths() {\n return {\n type: HIDE_INPUT_PATHS,\n };\n}\n\nexport function gotoJobsPage(where: 'first' | 'next' | 'prev'): JobsListThunkAction {\n return (dispatch, getState) => {\n const {limit, offset} = getState().operations.jobs.pagination;\n\n let data = null;\n switch (where) {\n case OPERATIONS_PAGE.FIRST:\n data = 0;\n break;\n case OPERATIONS_PAGE.NEXT:\n data = offset + limit;\n break;\n case OPERATIONS_PAGE.PREV:\n data = Math.max(0, offset - limit);\n if (data === offset) {\n return;\n }\n break;\n default:\n return;\n }\n\n dispatch({\n type: UPDATE_OFFSET,\n data,\n });\n dispatch(getJobs());\n };\n}\n","import React from 'react';\nimport {Progress} from '@gravity-ui/uikit';\nimport Link from '../../../../../../components/Link/Link';\nimport {Template} from '../../../../../../components/MetaTable/templates/Template';\nimport {showErrorModal} from '../../../../../../store/actions/actions';\nimport {showInputPaths} from '../../../../../../store/actions/operations/jobs';\nimport {useDispatch} from 'react-redux';\nimport {Job} from '../job-selector';\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobError({error}: {error: Error}) {\n const dispatch = useDispatch();\n return (\n <div>\n <Template.Error error={error} onClick={() => dispatch(showErrorModal(error))} />\n </div>\n );\n}\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobInputPaths({job}: {job: Job}) {\n const dispatch = useDispatch();\n return (\n <Link theme=\"ghost\" onClick={() => dispatch(showInputPaths(job))}>\n View\n </Link>\n );\n}\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobDebugInfo({type, job}: {type: 'stderr' | 'fail_context' | 'full_input'; job: Job}) {\n const {size, url} = job.getDebugInfo(type)!;\n return <Template.DownloadLink url={url} size={size} />;\n}\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nexport type JobProgressState = 'running' | 'completed' | 'failed' | 'aborted';\nfunction JobProgress({state, progress}: {state: JobProgressState; progress: number}) {\n const RESOLVED_PROGRESS = 100;\n const PENDING_PROGRESS = 0;\n\n switch (state) {\n case 'running':\n return <Progress size=\"s\" value={progress * 100} theme=\"info\" />;\n case 'completed':\n return <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"success\" />;\n case 'failed':\n return <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"danger\" />;\n case 'aborted':\n return <Progress size=\"s\" value={RESOLVED_PROGRESS} theme=\"default\" />;\n default:\n return <Progress size=\"s\" value={PENDING_PROGRESS} />;\n }\n}\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nexport default function JobTemplate() {}\n\nJobTemplate.Error = JobError;\nJobTemplate.InputPaths = JobInputPaths;\nJobTemplate.DebugInfo = JobDebugInfo;\nJobTemplate.Progress = JobProgress;\n","import React, {FC} from 'react';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport ypath from '../../../../../../common/thor/ypath';\nimport hammer from '../../../../../../common/hammer';\nimport {Flex, Icon} from '@gravity-ui/uikit';\nimport CircleQuestionIcon from '@gravity-ui/icons/svgs/circle-question.svg';\nimport map_ from 'lodash/map';\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport {RawJob} from '../../../../../../types/operations/job';\n\ntype Props = {\n statistics: RawJob['statistics'];\n type: string;\n};\n\nconst prepareStatistics = (statistics: RawJob['statistics']) => {\n return map_(ypath.getValue(statistics), (value, key: string) => {\n let result = hammer.format.Number(value);\n\n if (key.endsWith('_data_size') || key.endsWith('_data_weight')) {\n result = hammer.format.Bytes(value);\n } else if (key.endsWith('_time')) {\n result = hammer.format.TimeDuration(value, {format: 'milliseconds'});\n }\n\n return {\n key: hammer.format.Readable(key),\n value: <div style={{textAlign: 'right'}}>{result}</div>,\n };\n });\n};\n\nexport const JobDetails: FC<Props> = ({statistics, type}) => {\n if (!statistics || type === 'vanilla') return null;\n\n const [rowCount, dataSize] = ypath.getValues(statistics, [\n '/processed_input_row_count',\n '/processed_input_uncompressed_data_size',\n ]);\n\n if (!rowCount && !dataSize) return null;\n\n return (\n <Tooltip content={<MetaTable items={prepareStatistics(statistics)} />}>\n <Flex gap={2} alignItems=\"center\" wrap>\n <span>{hammer.format['Number'](rowCount)}</span>\n <span>({hammer.format['Bytes'](dataSize)})</span>\n <Icon data={CircleQuestionIcon} size={16} />\n </Flex>\n </Tooltip>\n );\n};\n","const SvgEllipsis = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3M9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m5 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgEllipsis;","import React, {FC, useRef} from 'react';\nimport {RawJob} from '../../../../../../types/operations/job';\nimport hammer from '../../../../../../common/hammer';\nimport {ClipboardButton, Flex, Label, Popup} from '@gravity-ui/uikit';\nimport {useToggle} from 'react-use';\nimport './StatusInfo.scss';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('yt-job-status-info');\n\ntype Props = {\n state: RawJob['state'];\n info: RawJob['interruption_info'];\n};\n\nexport const StatusInfo: FC<Props> = ({state, info}) => {\n const [open, toggleOpen] = useToggle(false);\n const anchorRef = useRef<HTMLDivElement>(null);\n const reason = hammer.format['ReadableField'](\n info?.preemption_reason || info?.interruption_reason,\n );\n\n return (\n <Flex alignItems=\"center\" gap={1} className={block()}>\n {hammer.format['ReadableField'](state)}\n {Boolean(reason) && (\n <>\n <div onMouseEnter={toggleOpen}>\n <Label theme=\"warning\" ref={anchorRef}>\n Interrupted\n </Label>\n </div>\n\n <Popup open={open} hasArrow anchorRef={anchorRef} onMouseLeave={toggleOpen}>\n <div className={block('popup')}>\n <div>{reason}</div>\n <ClipboardButton\n title=\"Copy reason\"\n view=\"flat-secondary\"\n size=\"s\"\n text={reason}\n />\n </div>\n </Popup>\n </>\n )}\n </Flex>\n );\n};\n","import React, {Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport {Button, DropdownMenu, Icon} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport ypath from '../../../../../../common/thor/ypath';\nimport unipika from '../../../../../../common/thor/unipika';\nimport hammer from '../../../../../../common/hammer';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\nimport {OPERATION_JOBS_TABLE_ID} from '../../../../../../constants/operations/jobs';\nimport SimpleModal from '../../../../../../components/Modal/SimpleModal';\nimport {YTErrorBlock} from '../../../../../../components/Error/Error';\n\nimport ClipboardButton from '../../../../../../components/ClipboardButton/ClipboardButton';\nimport ChartLink from '../../../../../../components/ChartLink/ChartLink';\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport Yson from '../../../../../../components/Yson/Yson';\nimport Link from '../../../../../../components/Link/Link';\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\n\nimport {\n getCompetitiveJobs,\n getJobs,\n hideInputPaths,\n showInputPaths,\n} from '../../../../../../store/actions/operations/jobs';\nimport {openAttributesModal} from '../../../../../../store/actions/modals/attributes-modal';\nimport {promptAction, showErrorModal} from '../../../../../../store/actions/actions';\nimport {performJobAction} from '../utils';\nimport {LOADING_STATUS} from '../../../../../../constants/index';\nimport {PLEASE_PROCEED_TEXT} from '../../../../../../utils/actions';\nimport {getShowCompetitiveJobs} from '../../../../../../pages/operations/selectors';\nimport {getJobsOperationId} from '../../../../../../store/selectors/operations/jobs';\nimport {\n getOperationId,\n getOperationTasksNames,\n} from '../../../../../../store/selectors/operations/operation';\nimport UIFactory from '../../../../../../UIFactory';\nimport {StaleJobIcon} from '../StaleJobIcon';\n\nimport JobTemplate from './JobTemplate';\nimport './OperationJobsTable.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../../constants/global';\nimport {JobDetails} from './JobDetails';\nimport EllipsisIcon from '@gravity-ui/icons/svgs/ellipsis.svg';\nimport {StatusInfo} from './StatusInfo';\n\nconst block = cn('operation-detail-jobs');\n\nclass OperationJobsTable extends React.Component {\n static propTypes = {\n isLoading: PropTypes.bool.isRequired,\n // from connect\n jobs: PropTypes.arrayOf(PropTypes.object),\n job: PropTypes.object,\n showCompetitiveJobs: PropTypes.bool.isRequired,\n competitiveJobs: PropTypes.arrayOf(PropTypes.object),\n cluster: PropTypes.string.isRequired,\n login: PropTypes.string.isRequired,\n inputPaths: PropTypes.shape({\n status: PropTypes.oneOf(Object.values(LOADING_STATUS)).isRequired,\n paths: PropTypes.arrayOf(PropTypes.string),\n error: PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.object,\n }),\n }),\n\n openAttributesModal: PropTypes.func.isRequired,\n showErrorModal: PropTypes.func.isRequired,\n showInputPaths: PropTypes.func.isRequired,\n hideInputPaths: PropTypes.func.isRequired,\n promptAction: PropTypes.func.isRequired,\n getJobs: PropTypes.func.isRequired,\n getCompetitiveJobs: PropTypes.func.isRequired,\n taskNamesNumber: PropTypes.number,\n };\n\n actions = [\n {\n name: 'abort',\n modalKey: 'job_abort',\n successMessage: 'Successfully aborted the job.',\n errorMessage: 'Could not abort the job.',\n text: 'Abort',\n message:\n 'Aborting job will cause losing its progress, are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n },\n {\n name: 'abandon',\n modalKey: 'job_abandon',\n successMessage: 'Successfully abandoned the job.',\n errorMessage: 'Could not abandon the job.',\n text: 'Abandon',\n message:\n 'Abandoning job will cause losing its progress, are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n },\n {\n name: 'input_context',\n modalKey: 'job_input_context',\n message: (\n <span>\n You are about to <strong>dump input context</strong> of the job\n </span>\n ),\n text: 'Dump input context',\n successMessageTemplate: (data) => {\n const url = `/${this.props.cluster}/navigation?path=${data}`;\n return (\n <span>\n Successfully dumped the job input context <Link url={url}>here</Link>\n </span>\n );\n },\n errorMessage: 'Could not dump the job input context.',\n },\n ];\n\n prepareJobAction = ({text, ...settings}) => {\n const {login, promptAction} = this.props;\n const message = settings.message || (\n <span>\n You are about to <strong>{settings.name}</strong> a job.\n </span>\n );\n\n return {\n text: text,\n action: (params) =>\n promptAction({\n ...settings,\n message,\n handler: ({currentOption}) => {\n const finalParams = {\n ...params,\n name: settings.name,\n currentOption,\n login,\n };\n return performJobAction(finalParams);\n },\n }),\n };\n };\n\n preparedActions = map_(this.actions, this.prepareJobAction);\n\n renderIdAddress = (item) => {\n const {cluster} = this.props;\n const {id, address, job_competition_id, operationId, is_stale, attributes} = item;\n const host = hammer.format['Address'](address);\n\n const from = ypath.getValue(attributes, '/start_time');\n const to = ypath.getValue(attributes, '/finish_time');\n const monitoring_descriptor = ypath.getValue(attributes, '/monitoring_descriptor');\n\n const isSpeculativeJob = job_competition_id && job_competition_id !== id;\n\n return (\n <div>\n <div className={block('id', 'elements-monospace')}>\n <ClipboardButton text={id} view=\"flat-secondary\" size=\"s\" title=\"Copy job id\" />\n <Link\n className={block('id-job-link')}\n routed\n url={`/${cluster}/job/${operationId}/${id}`}\n theme={'primary'}\n >\n {id}\n </Link>\n {is_stale && <StaleJobIcon />}\n </div>\n <div className={block('host', 'elements-monospace')}>\n <span className={block('host-name')}>\n <ClipboardButton\n text={host}\n view=\"flat-secondary\"\n size=\"s\"\n title=\"Copy host\"\n />\n {host}\n </span>\n <span className={block('host-chart-link')}>\n <ChartLink\n url={UIFactory.makeUrlForMonitoringDescriptor(\n cluster,\n {from, to},\n monitoring_descriptor,\n )}\n />\n </span>\n </div>\n {isSpeculativeJob && (\n <Fragment>\n <br />\n <span\n className={block(\n 'speculative-job-label',\n 'elements-monospace elements-ellipsis',\n )}\n >\n Speculative job for {job_competition_id}\n </span>\n </Fragment>\n )}\n </div>\n );\n };\n\n renderErrorAndDebug = (item) => {\n const items = [\n {\n key: 'error',\n value: <JobTemplate.Error error={item.error} />,\n visible: Boolean(item.error),\n },\n {\n key: 'input_paths',\n value: <JobTemplate.InputPaths job={item} />,\n visible: item.areInputPathsPresent(),\n },\n {\n key: 'stderr',\n value: <JobTemplate.DebugInfo job={item} type=\"stderr\" />,\n visible: item.getDebugInfo('stderr').size > 0,\n },\n {\n key: 'fail_context',\n value: <JobTemplate.DebugInfo job={item} type=\"fail_context\" />,\n visible: item.getDebugInfo('fail_context').size > 0,\n },\n {\n key: 'full_input',\n value: <JobTemplate.DebugInfo job={item} type=\"full_input\" />,\n visible: Boolean(item.has_spec),\n },\n ];\n\n return <MetaTable items={items} />;\n };\n\n renderActions = (item) => {\n const {openAttributesModal} = this.props;\n\n const button = (\n <Button view=\"flat-secondary\" title=\"Show actions\">\n <Icon data={EllipsisIcon} size={16} />\n </Button>\n );\n const firstGroup = map_(this.preparedActions, ({action, text}) => ({\n text,\n action: () => action({item}),\n }));\n\n const secondGroup = [\n {\n text: 'Show attributes',\n action: () =>\n openAttributesModal({\n title: item.id,\n attributes: item.attributes,\n }),\n },\n ];\n\n return item.state === 'running' ? (\n <DropdownMenu switcher={button} items={[firstGroup, secondGroup]} />\n ) : (\n <DropdownMenu switcher={button} items={secondGroup} />\n );\n };\n\n settings = {\n css: block(),\n theme: 'light',\n size: 's',\n striped: false,\n virtual: false,\n tableId: OPERATION_JOBS_TABLE_ID,\n computeKey: (item) => item.id,\n columns: {\n items: {\n id_address: {\n name: 'id_address',\n align: 'left',\n caption: 'Id / Address',\n sort: false,\n },\n task_name: {\n name: 'task_name',\n align: 'left',\n caption: 'Task name',\n sort: true,\n },\n start_time: {\n name: 'start_time',\n align: 'left',\n caption: 'Start time',\n sort: true,\n },\n finish_time: {\n name: 'finish_time',\n align: 'left',\n caption: 'Finish time',\n sort: true,\n },\n duration: {\n get(job) {\n return job.duration;\n },\n sort: true,\n name: 'duration',\n align: 'left',\n },\n error: {\n name: 'error',\n align: 'left',\n caption: 'Error / Debug',\n get: (job) => job.error,\n },\n type: {\n name: 'type',\n align: 'left',\n sort: true,\n },\n progress: {\n name: 'progress',\n align: 'left',\n sort: true,\n },\n actions: {\n name: 'actions',\n align: 'right',\n caption: '',\n sort: false,\n },\n },\n sets: {\n default: {\n items: [\n 'id_address',\n 'type',\n 'progress',\n 'error',\n 'start_time',\n 'finish_time',\n 'duration',\n 'actions',\n ],\n },\n withTaskName: {\n items: [\n 'id_address',\n 'type',\n 'progress',\n 'error',\n 'task_name',\n 'start_time',\n 'finish_time',\n 'duration',\n 'actions',\n ],\n },\n },\n mode: this.props.taskNamesNumber > 1 ? 'withTaskName' : 'default',\n },\n templates: {\n id_address: this.renderIdAddress,\n type: this.renderType,\n progress: this.renderProgress,\n error: this.renderErrorAndDebug,\n start_time: this.renderStartTime,\n finish_time: this.renderFinishTime,\n duration: this.renderDuration,\n actions: this.renderActions,\n task_name: this.renderTaskName,\n },\n };\n\n renderTaskName(item) {\n return <div className={block('task-name', 'elements-ellipsis')}>{item.task_name}</div>;\n }\n\n renderProgress(item) {\n const {state, progress, brief_statistics, type, interruption_info} = item;\n\n return (\n <div className={block('state')}>\n <div className={block('state-section', 'elements-ellipsis')}>\n <StatusInfo info={interruption_info} state={state} />\n </div>\n <div className={block('state-section')}>\n <JobTemplate.Progress state={state} progress={progress} />\n </div>\n <JobDetails statistics={brief_statistics} type={type} />\n </div>\n );\n }\n\n renderStartTime(item) {\n return (\n <span className={block('start-time', 'elements-ellipsis')}>\n {hammer.format['DateTime'](item.startTime)}\n </span>\n );\n }\n\n renderFinishTime(item) {\n return item.state === 'running' ? (\n <span className={block('in-progress', 'elements-ellipsis elements-secondary-text')}>\n In progress...\n </span>\n ) : (\n <span className={block('finish-time elements-ellipsis')}>\n {hammer.format['DateTime'](item.finishTime)}\n </span>\n );\n }\n\n renderDuration(item) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['TimeDuration'](item.duration)}\n </span>\n );\n }\n\n renderType(item) {\n return <span>{hammer.format['ReadableField'](item.type)}</span>;\n }\n\n renderInputPathsModal() {\n const {\n inputPaths: {paths, status, error},\n hideInputPaths,\n } = this.props;\n\n if (status === LOADING_STATUS.UNINITIALIZED) {\n return null;\n }\n\n const ysonSettings = unipika.prepareSettings();\n const content =\n status === LOADING_STATUS.ERROR ? (\n <YTErrorBlock {...error} />\n ) : (\n <Yson value={paths} settings={ysonSettings} />\n );\n\n return (\n <SimpleModal\n visible\n onCancel={hideInputPaths}\n loading={status === LOADING_STATUS.LOADING}\n onOutsideClick={hideInputPaths}\n title=\"Input paths\"\n >\n {content}\n </SimpleModal>\n );\n }\n\n render() {\n const {jobs, showCompetitiveJobs, getJobs, isLoading, collapsibleSize} = this.props;\n if (showCompetitiveJobs) {\n const {job, competitiveJobs, getCompetitiveJobs} = this.props;\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={[job].filter(Boolean)}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n {competitiveJobs.length > 0 && (\n <CollapsibleSection\n name=\"All competitive jobs\"\n className={block('competitive-jobs')}\n collapsed={true}\n size={collapsibleSize}\n >\n <ElementsTable\n {...this.settings}\n items={competitiveJobs}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n </CollapsibleSection>\n )}\n </Fragment>\n );\n }\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={jobs}\n onSort={getJobs}\n isLoading={isLoading}\n />\n </Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state, props) {\n const {operations, global} = state;\n const {cluster, login} = global;\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\n const taskNamesNumber = getOperationTasksNames(state)?.length;\n const jobsOperationId = getJobsOperationId(state);\n const operationId = getOperationId(state);\n const {jobs, job, competitiveJobs, inputPaths} = operations.jobs;\n return {\n jobs: operationId !== jobsOperationId ? [] : jobs,\n job,\n competitiveJobs,\n showCompetitiveJobs,\n inputPaths,\n cluster,\n login,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n isLoading: props.isLoading || operationId !== jobsOperationId,\n taskNamesNumber,\n };\n}\n\nconst mapDispatchToProps = {\n openAttributesModal,\n showInputPaths,\n hideInputPaths,\n showErrorModal,\n promptAction,\n getJobs,\n getCompetitiveJobs,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OperationJobsTable);\n","import moment from 'moment';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport hammer from '../../../../../common/hammer';\nimport {getMetrics} from '../../../../../common/utils/metrics';\n\nfunction createTemporaryPath(login) {\n const temporaryPathBase = '//tmp/ui/' + login;\n\n return yt.v3\n .create({\n path: temporaryPathBase,\n type: 'map_node',\n recursive: true,\n ignore_existing: true,\n })\n .then(() => {\n const temporaryPath = '/input_context_' + hammer.format['toBase26'](moment().unix());\n return temporaryPathBase + temporaryPath;\n });\n}\n\nexport function performJobAction({login, name, item}) {\n const parameters = {job_id: item.id};\n\n getMetrics().countEvent('operation_detail_running-jobs_action', name);\n\n let jobActionPromise;\n\n switch (name) {\n case 'abort':\n jobActionPromise = yt.v3.abortJob(parameters);\n break;\n case 'abandon':\n jobActionPromise = yt.v3.abandonJob(parameters);\n break;\n case 'input_context':\n jobActionPromise = createTemporaryPath(login).then((temporaryPath) => {\n return yt.v3\n .dumpJobContext(\n Object.assign({}, parameters, {\n path: temporaryPath,\n }),\n )\n .then(() => temporaryPath);\n });\n break;\n case 'input':\n jobActionPromise = Promise.resolve('foo');\n break;\n }\n\n return jobActionPromise;\n}\n","import {connect} from 'react-redux';\n\nimport {updateListJobsFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getActualValue} from '../../../../../../pages/operations/selectors';\nimport OperationSelectFilter from '../../../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.jobs.filters;\n const {name, states: initialStates, statesProvider} = ownProps;\n const {defaultValue, value, counters} = filters[name];\n\n const states =\n typeof statesProvider === 'function' ? statesProvider(operations) : initialStates;\n\n return {\n value: getActualValue(value, defaultValue),\n states,\n counters,\n };\n}\n\nexport default connect(mapStateToProps, {\n updateFilter: (name, value) => updateListJobsFilter({name, value}),\n})(OperationSelectFilter);\n","import React from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Pagination from '../../../../../../components/Pagination/Pagination';\nimport {gotoJobsPage} from '../../../../../../store/actions/operations/jobs';\nimport {OPERATIONS_PAGE} from '../../../../../../constants/operations';\n\nclass JobsPaginator extends React.Component {\n static propTypes = {\n disabled: PropTypes.bool,\n firstPageReached: PropTypes.bool.isRequired,\n lastPageReached: PropTypes.bool.isRequired,\n gotoJobsPage: PropTypes.func.isRequired,\n };\n\n gotoFirstPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.FIRST);\n gotoNextPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.NEXT);\n gotoPrevPage = () => this.props.gotoJobsPage(OPERATIONS_PAGE.PREV);\n\n render() {\n const {firstPageReached, lastPageReached, disabled} = this.props;\n\n return (\n <Pagination\n size=\"s\"\n first={{\n handler: this.gotoFirstPage,\n disabled: disabled || firstPageReached,\n }}\n previous={{\n handler: this.gotoPrevPage,\n hotkeyHandler: this.gotoPrevPage,\n disabled: disabled || firstPageReached,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n }}\n next={{\n handler: this.gotoNextPage,\n hotkeyHandler: this.gotoNextPage,\n disabled: disabled || lastPageReached,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n }}\n last={{disabled: true}}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {firstPageReached, lastPageReached, limit, offset} = operations.jobs.pagination;\n return {firstPageReached, lastPageReached, limit, offset};\n}\n\nexport default connect(mapStateToProps, {gotoJobsPage})(JobsPaginator);\n","import {connect} from 'react-redux';\n\nimport OperationSuggestFilter from '../../../../../../pages/operations/OperationSuggestFilter/OperationSuggestFilter';\nimport {updateListJobsFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getActualValue} from '../../../../../../pages/operations/selectors';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.jobs.filters;\n const {statesProvider, name} = ownProps;\n const {defaultValue, value, data} = filters[name];\n const states = statesProvider(data);\n\n return {\n value: getActualValue(value, defaultValue),\n states,\n defaultValue,\n placeholder: `Filter ${name}...`,\n };\n}\n\nexport default connect(mapStateToProps, {\n updateFilter: (name, value) => updateListJobsFilter({name, value}),\n})(OperationSuggestFilter);\n","import React, {Fragment, useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport identity_ from 'lodash/identity';\n\nimport Select from '../../../../../../components/Select/Select';\nimport JobsSuggestFilter from './JobsSuggestFilter';\nimport Filter from '../../../../../../components/Filter/Filter';\n\nimport {updateListJobsFilter} from '../../../../../../store/actions/operations/jobs';\nimport {getFilterValue} from '../../../../selectors';\n\nconst block = cn('operation-detail-jobs');\n\nfunction JobsIdFilter({pin}: Pick<React.ComponentProps<typeof Filter>, 'pin'>) {\n const value = useSelector(getFilterValue('jobId'));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: string) => {\n dispatch(updateListJobsFilter({name: 'jobId', value}));\n }, []);\n\n return (\n <Filter\n size=\"m\"\n placeholder=\"Filter id...\"\n onChange={handleChange}\n value={value ?? ''}\n pin={pin}\n />\n );\n}\n\nfunction JobsFilterBy() {\n const filterBy = useSelector(getFilterValue('filterBy'));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: string) => {\n dispatch(updateListJobsFilter({name: 'filterBy', value}));\n }, []);\n\n return (\n <Fragment>\n <div className={block('toolbar-filter-by-select')}>\n <Select\n value={filterBy ? [filterBy] : []}\n items={map_(['address', 'id'], (value) => {\n return {value};\n })}\n onUpdate={(vals) => handleChange(vals[0])}\n pin=\"round-clear\"\n width=\"max\"\n hideFilter\n />\n </div>\n <div className={block('toolbar-filter-by-value')}>\n {filterBy === 'address' && (\n <JobsSuggestFilter\n name=\"address\"\n statesProvider={identity_}\n pin={'brick-round'}\n />\n )}\n {filterBy === 'id' && <JobsIdFilter pin={'brick-round'} />}\n </div>\n </Fragment>\n );\n}\n\nexport default JobsFilterBy;\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport Select from '../../../../../../components/Select/Select';\n\nimport {getFilteredAttributes} from '../../../../../../pages/operations/selectors';\nimport {updateFilteredAttributes} from '../../../../../../store/actions/operations/jobs';\nimport {ATTRIBUTE_ITEMS, ATTRIBUTE_ITEM_NAMES} from '../../../../../../store/selectors/operations';\n\nfunction JobsAttributesFilter(props: {disabled: boolean}) {\n const attributes = useSelector(getFilteredAttributes(ATTRIBUTE_ITEM_NAMES));\n const dispatch = useDispatch();\n const handleChange = useCallback((value: Array<string>) => {\n dispatch(\n updateFilteredAttributes(ATTRIBUTE_ITEM_NAMES, value as typeof ATTRIBUTE_ITEM_NAMES),\n );\n }, []);\n\n return (\n <Select\n {...props}\n multiple\n value={attributes}\n label=\"Attributes:\"\n filterable\n items={ATTRIBUTE_ITEMS}\n onUpdate={handleChange}\n />\n );\n}\n\nexport default JobsAttributesFilter;\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {updateJobsOperationIncarnationFilter} from '../../../../../../store/actions/operations/jobs-operation-incarnations';\nimport OperationSelectFilter from '../../../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\nimport {\n getJobsOperationIncarnationsFilter,\n getJobsOperationIncarnationsValues,\n} from '../../../../../../store/selectors/operations/jobs';\n\nimport './JobsOperationsIncarnationsFilter.scss';\n\nconst block = cn('yt-jobs-incarnation-filter');\n\nexport function JobsOperationIncarnationsFilter({\n disabled,\n wrap,\n}: {\n disabled: boolean;\n wrap: (node: React.ReactNode) => React.ReactNode;\n}) {\n const dispatch = useDispatch();\n\n const filter = useSelector(getJobsOperationIncarnationsFilter);\n const values = useSelector(getJobsOperationIncarnationsValues);\n\n return !values?.length\n ? null\n : wrap(\n <OperationSelectFilter\n name=\"incarnation\"\n states={values.map((name) => ({name, caption: name}))}\n disabled={disabled}\n width={'auto'}\n value={filter}\n updateFilter={(_name: unknown, value: string) => {\n dispatch(updateJobsOperationIncarnationFilter(value));\n }}\n hideClear={false}\n hideFilter={false}\n popupClassName={block('popup')}\n />,\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport keys_ from 'lodash/keys';\n\nimport hammer from '../../../../../../common/hammer';\nimport JobsSelectFilter from './JobsSelectFilter';\nimport JobsPaginator from './JobsPaginator';\nimport JobsFilterBy from './JobsFilterBy';\nimport JobsAttributesFilter from './JobsAttributesFilter';\n\nimport {getShowCompetitiveJobs} from '../../../../../../pages/operations/selectors';\nimport {getOperationTasksNames} from '../../../../../../store/selectors/operations/operation';\n\nimport {JobsOperationIncarnationsFilter} from './JobsOperationsIncarnationsFilter';\nimport './OperationJobsToolbar.scss';\n\nconst block = cn('operation-detail-jobs');\nconst tbBlock = cn('elements-toolbar');\n\n// TODO: make this a selector inside a specific <JobsTypeFilter> component once we start using reselect library\nfunction extractJobTypes(operations) {\n const initialTypes = ['all'];\n\n const typeCounters = operations.jobs.filters.type.counters;\n return hammer.utils.sortInPredefinedOrder(initialTypes, keys_(typeCounters));\n}\n\nconst tbComp = tbBlock('component');\n\nexport default function OperationJobsToolbar() {\n const showCompetitiveJobs = useSelector(getShowCompetitiveJobs);\n\n const taskNames = useSelector(getOperationTasksNames);\n const allTaskNames = React.useMemo(() => {\n return [\n '',\n ...taskNames.map((name) => {\n return {name, caption: name};\n }),\n ];\n }, [taskNames]);\n\n return (\n <div className={block('toolbar')}>\n <div className={tbBlock()}>\n <div className={tbBlock('container')}>\n <div className={block('toolbar-filter-by', tbComp)}>\n <JobsFilterBy />\n </div>\n <div className={block('toolbar-filter-by', tbComp)}>\n <JobsSelectFilter name={'taskName'} states={allTaskNames} width=\"max\" />\n </div>\n <div className={block('toolbar-state', tbComp)}>\n <JobsSelectFilter\n name=\"type\"\n statesProvider={extractJobTypes}\n disabled={showCompetitiveJobs}\n width={200}\n />\n </div>\n <div className={block('toolbar-state', tbComp)}>\n <JobsSelectFilter\n name=\"state\"\n states={['all', 'running', 'completed', 'failed', 'aborted']}\n disabled={showCompetitiveJobs}\n width={200}\n />\n </div>\n <div className={block('toolbar-attributes', tbComp)}>\n <JobsAttributesFilter disabled={showCompetitiveJobs} width={200} />\n </div>\n\n <JobsOperationIncarnationsFilter\n disabled={showCompetitiveJobs}\n wrap={(children) => {\n return (\n <div className={block('toolbar-state', tbComp)}>{children} </div>\n );\n }}\n />\n\n <div className={block('toolbar-pagination', tbComp)}>\n <JobsPaginator disabled={showCompetitiveJobs} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport map_ from 'lodash/map';\nimport cn from 'bem-cn-lite';\n\nimport {useSelector} from 'react-redux';\nimport {getJobsErrors} from '../../../../../../store/selectors/operations/jobs';\nimport {YTErrorBlock} from '../../../../../../components/Error/Error';\n\nimport './OperationJobsErrors.scss';\n\nconst block = cn('operation-jobs-errors');\n\nfunction OperationJobsErrors() {\n const errors = useSelector(getJobsErrors);\n\n return (\n <div className={block()}>\n {map_(errors, (error, index) => {\n return <YTErrorBlock key={index} error={error} />;\n })}\n </div>\n );\n}\n\nexport default React.memo(OperationJobsErrors);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {getJobs} from '../../../../../store/actions/operations/jobs';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport LoadDataHandler from '../../../../../components/LoadDataHandler/LoadDataHandler';\nimport OperationJobsTable from './OperationJobsTable/OperationJobsTable';\nimport OperationJobsToolbar from './OperationJobsToolbar/OperationJobsToolbar';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport {\n getOperationDetailsLoadingStatus,\n getOperationJobsLoadingStatus,\n} from '../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport OperationJobsErrors from './OperationJobsErrors/OperationJobsErrors';\n\nfunction Jobs({className}) {\n const dispatch = useDispatch();\n const loading = useSelector((state) => state.operations.jobs.loading);\n const loaded = useSelector((state) => state.operations.jobs.loaded);\n const error = useSelector((state) => state.operations.jobs.error);\n const errorData = useSelector((state) => state.operations.jobs.errorData);\n\n const updateFn = React.useCallback(() => {\n dispatch(getJobs());\n }, [dispatch]);\n\n useUpdater(updateFn, {timeout: 15 * 1000});\n\n const isLoading = loading && !loaded;\n return (\n <ErrorBoundary>\n <div className={`operation-detail-jobs ${className}`}>\n <OperationJobsToolbar />\n <LoadDataHandler {...{loaded, loading, error, errorData}} alwaysShowError>\n <OperationJobsErrors />\n <OperationJobsTable isLoading={isLoading} />\n </LoadDataHandler>\n </div>\n </ErrorBoundary>\n );\n}\n\nexport default function JobsWithRum(props) {\n const loadState = useSelector(getOperationJobsLoadingStatus);\n /**\n * Selection of this value involves additional rerenders of the component\n * but without it RUM-measures will be wrongly too big it.\n * OperationDetail cannot stop measure for RumMeasureTypes.OPERATION by self,\n * it must be done by nesting tab-content.\n */\n const operationLoadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState, operationLoadState],\n allowStart: ([loadState, operationLoadState]) => {\n return !isFinalLoadingStatus(loadState) || !isFinalLoadingStatus(operationLoadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n stopDeps: [loadState, operationLoadState],\n allowStop: ([loadState, operationLoadState]) => {\n return isFinalLoadingStatus(loadState) && isFinalLoadingStatus(operationLoadState);\n },\n });\n\n return <Jobs {...props} />;\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport min_ from 'lodash/min';\n\nimport moment from 'moment';\nimport {createSelector} from 'reselect';\nimport {RootState} from '../../../store/reducers';\nimport {getOperationId} from './operation';\n\nexport const getJobsMonitorError = (state: RootState) => state.operations.jobsMonitor.error;\nexport const getJobsMonitorOperationId = (state: RootState) =>\n state.operations.jobsMonitor.operation_id;\nexport const getJobsMonitorItems = (state: RootState) => state.operations.jobsMonitor.jobs;\nexport const getJobsMonitorItemsLoading = (state: RootState) =>\n state.operations.jobsMonitor.loading;\nexport const getJobsMonitorItemsLoaded = (state: RootState) => state.operations.jobsMonitor.loaded;\n\nexport const getJobsMonitoringItemsWithDescriptor = createSelector(\n [getJobsMonitorItems],\n (items) => {\n return filter_(items, ({monitoring_descriptor}) => Boolean(monitoring_descriptor));\n },\n);\n\nexport const getJobsMonitorFromTo = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (items) => {\n let from: number | undefined;\n let to: number | undefined;\n forEach_(items, ({start_time, finish_time}) => {\n if (start_time) {\n const start = moment(start_time).valueOf();\n from = min_([start, from]);\n }\n if (finish_time) {\n const finish = moment(finish_time).valueOf();\n to = max_([finish, to]);\n }\n });\n return {from, to};\n },\n);\n\nexport const getJobsMonitorDescriptor = createSelector(\n [getJobsMonitoringItemsWithDescriptor],\n (jobs) => {\n const tmp = map_(jobs, 'monitoring_descriptor');\n return tmp.join('|');\n },\n);\n\nexport const getJobsMonitorTabVisible = createSelector(\n [getOperationId, getJobsMonitorOperationId, getJobsMonitorDescriptor, getJobsMonitorError],\n (opId, jobMonId, jobsDescriptor, error) => {\n if (opId !== jobMonId) {\n return false;\n }\n if (!isEmpty_(error)) {\n return true;\n }\n\n return Boolean(jobsDescriptor);\n },\n);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Loader from '../../../../../components/Loader/Loader';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {\n getJobsMonitorDescriptor,\n getJobsMonitorError,\n getJobsMonitorFromTo,\n getJobsMonitorItemsLoaded,\n getJobsMonitorItemsLoading,\n} from '../../../../../store/selectors/operations/jobs-monitor';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport UIFactory from '../../../../../UIFactory';\n\nfunction JobsMonitor() {\n const cluster = useSelector(getCluster);\n const job_descriptor = useSelector(getJobsMonitorDescriptor);\n const {from, to} = useSelector(getJobsMonitorFromTo);\n const error = useSelector(getJobsMonitorError);\n const loaded = useSelector(getJobsMonitorItemsLoaded);\n const loading = useSelector(getJobsMonitorItemsLoading);\n\n if (!loaded && loading) {\n return <Loader visible centered />;\n }\n\n if (!job_descriptor && !error) {\n return <NoContent warning={'There are no jobs with \"monitoring_descriptor\"'} />;\n }\n\n const JobMonitorComponent = UIFactory.getMonitorComponentForJob()!;\n\n return (\n <ErrorBoundary>\n {error && <YTErrorBlock error={error} />}\n <JobMonitorComponent {...{cluster, job_descriptor, from, to}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(JobsMonitor);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {\n getOperationDetailsLoadingStatus,\n getOperationId,\n getOperationTypedAttributes,\n} from '../../../../../store/selectors/operations/operation';\nimport Yson from '../../../../../components/Yson/Yson';\nimport {getOperationAttributesYsonSettings} from '../../../../../store/selectors/thor/unipika';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\n\nfunction useOperationAttributesRumMesures() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_ATTRIBUTES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_ATTRIBUTES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n}\n\nfunction OperationAttributes({className}: {className: string}) {\n const typedAttributes = useSelector(getOperationTypedAttributes);\n const settings = useSelector(getOperationAttributesYsonSettings);\n const id = useSelector(getOperationId);\n\n useOperationAttributesRumMesures();\n\n return (\n <Yson\n className={className}\n value={typedAttributes}\n settings={settings}\n extraTools={\n <YsonDownloadButton\n value={typedAttributes}\n settings={settings}\n name={`operation_attributes_${id}`}\n />\n }\n folding\n />\n );\n}\n\nexport default React.memo(OperationAttributes);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {getOperation} from '../../../../../store/selectors/operations/operation';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {OperationMonitoringTabProps} from '../../../../../UIFactory';\n\nfunction OperationDetailsMonitor(props: {\n component: React.ComponentType<OperationMonitoringTabProps>;\n}) {\n const {component: OperationMonitor} = props;\n const operation = useSelector(getOperation);\n const cluster = useSelector(getCluster);\n\n return (\n <ErrorBoundary>\n <OperationMonitor {...{cluster, operation}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(OperationDetailsMonitor);\n","import {RootState} from '../../reducers';\nimport {createSelector} from 'reselect';\nimport {JobsTimelineState} from '../../reducers/operations/jobs/jobs-timeline-slice';\n\nexport const selectJobs = (state: RootState) => state.operations.jobsTimeline.jobs;\nexport const selectLoading = (state: RootState) => state.operations.jobsTimeline.isLoading;\nexport const selectInterval = (state: RootState) => state.operations.jobsTimeline.interval;\nexport const selectFilter = (state: RootState) => state.operations.jobsTimeline.filter;\nexport const selectActiveJob = (state: RootState) => state.operations.jobsTimeline.selectedJob;\nexport const selectJobsOverloadError = (state: RootState) =>\n state.operations.jobsTimeline.jobsCountError;\nexport const selectError = (state: RootState) => state.operations.jobsTimeline.error;\n\nexport const selectEventsInterval = (state: RootState) => {\n const interval = state.operations.jobsTimeline.eventsInterval;\n return isFinite(interval.from) ? interval : undefined;\n};\n\nexport const selectJobsEmptyError = createSelector(\n [selectJobs, selectLoading],\n (jobs, isLoading) => {\n return jobs.length === 0 && !isLoading;\n },\n);\n\nexport const selectJobsInIntervalByGroup = createSelector([selectJobs], (jobs) => {\n return jobs.reduce<Record<string, JobsTimelineState['jobs']>>((acc, job) => {\n if (job.groupName in acc) {\n acc[job.groupName].push(job);\n } else {\n acc[job.groupName] = [job];\n }\n\n return acc;\n }, {});\n});\n\nexport const selectJobGroupsCount = createSelector([selectJobs], (jobs) => {\n return jobs.reduce<Record<string, number>>((acc, job) => {\n if (job.groupName in acc) {\n acc[job.groupName]++;\n } else {\n acc[job.groupName] = 1;\n }\n return acc;\n }, {});\n});\n\nexport const getSelectedJob = createSelector([selectJobs, selectActiveJob], (jobs, activeJob) => {\n return jobs.find(({id}) => activeJob.id === id) || null;\n});\n\nexport const selectIntervalsIsSame = createSelector(\n [selectInterval, selectEventsInterval],\n (interval, eInterval) => {\n if (interval && eInterval) {\n if (interval.from === eInterval.from && interval.to === eInterval.to) return true;\n }\n\n return !interval && !eInterval;\n },\n);\n","import {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getBatchError} from '../../../utils/utils';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../reducers';\nimport {Action} from 'redux';\nimport {getOperationId} from '../../selectors/operations/operation';\nimport {RawJob} from '../../../types/operations/job';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {\n JobsTimelineState,\n TimelineJob,\n setError,\n setInterval,\n setJobs,\n setJobsCountError,\n setLoading,\n} from '../../reducers/operations/jobs/jobs-timeline-slice';\nimport dayjs from 'dayjs';\nimport {\n selectEventsInterval,\n selectIntervalsIsSame,\n} from '../../selectors/operations/jobs-timeline';\nimport {MAX_JOBS_COUNT} from '../../../pages/operations/OperationDetail/tabs/JobsTimeline/constants';\n\nconst cancelHelper = new CancelHelper();\n\ntype AsyncAction = ThunkAction<void, RootState, undefined, Action>;\n\nexport const resetInterval = (): AsyncAction => (dispatch, getState) => {\n const interval = selectEventsInterval(getState());\n if (!interval) return;\n\n dispatch(setInterval(interval));\n};\n\ntype OperationJob = RawJob & {\n id: string;\n allocation_id?: string;\n job_cookie: number;\n task_name: string;\n};\n\nexport const getJobsWithEvents =\n (firstRequest?: boolean): AsyncAction =>\n async (dispatch, getState) => {\n const state = getState();\n const operationId = getOperationId(state);\n const sameIntervals = selectIntervalsIsSame(state);\n\n if (firstRequest) {\n dispatch(setLoading(true));\n }\n try {\n dispatch(setError(undefined));\n const listResponse = await ytApiV3Id.listJobs(YTApiId.operationGetJobs, {\n operation_id: operationId,\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const jobs = listResponse.jobs as OperationJob[];\n if (jobs.length > MAX_JOBS_COUNT) {\n dispatch(setJobsCountError(true));\n return;\n }\n\n const requests = jobs.map(({id}) => {\n return {\n command: 'get_job' as const,\n parameters: {\n operation_id: operationId,\n job_id: id,\n },\n };\n });\n\n const response = await ytApiV3Id.executeBatch<OperationJob>(YTApiId.operationGetJobs, {\n parameters: {requests},\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const error = getBatchError(response, 'Get operation jobs error');\n if (error) {\n throw error;\n }\n\n const result = response.reduce<Pick<JobsTimelineState, 'jobs' | 'eventsInterval'>>(\n (acc, {output: job}) => {\n if (!job?.events || !job.events.length) return acc;\n\n const jobEvents = job.events;\n const isRunning = job.state === 'running';\n\n // stretch running job timeline\n const maxTime = isRunning\n ? Date.now()\n : dayjs(jobEvents.at(-1)!.time).valueOf();\n const minTime = dayjs(jobEvents[0].time).valueOf();\n const percent = (maxTime - minTime) / 100;\n\n const timeLineJob: TimelineJob = {\n id: job.job_id,\n cookieId: job.job_cookie,\n allocationId: job.allocation_id,\n groupName: job.task_name || '',\n events: [],\n start_time: job.start_time,\n finish_time: job.finish_time,\n address: job.address,\n };\n\n const eventsCount = jobEvents.length;\n let stateIndex = 0;\n for (let i = 0; i < eventsCount; i++) {\n const event = jobEvents[i];\n\n const startTime = dayjs(event.time).valueOf();\n const prevEvent = timeLineJob['events'][stateIndex];\n if (event.state) {\n timeLineJob['events'].push({\n state: event.state,\n startTime,\n endTime: 0,\n phases: [],\n percent: 0,\n });\n stateIndex = timeLineJob['events'].length - 1;\n } else {\n timeLineJob['events'][stateIndex].phases.push({\n phase: event.phase!,\n startTime,\n });\n }\n\n if (prevEvent) {\n prevEvent.endTime = startTime;\n prevEvent.percent = (startTime - prevEvent.startTime) / percent;\n }\n }\n\n // stretch running job timeline\n if (isRunning) {\n const lastEventIndex = timeLineJob.events.length - 1;\n const {startTime} = timeLineJob.events[lastEventIndex];\n timeLineJob.events[lastEventIndex].endTime = Date.now();\n timeLineJob.events[lastEventIndex].percent =\n (Date.now() - startTime) / percent;\n }\n\n acc.jobs.push(timeLineJob);\n\n // job duration\n acc.eventsInterval = {\n from: Math.min(acc.eventsInterval.from, minTime),\n to: Math.max(acc.eventsInterval.to, maxTime),\n };\n\n return acc;\n },\n {\n jobs: [],\n eventsInterval: {\n from: Infinity,\n to: 0,\n },\n },\n );\n\n dispatch(setJobs(result));\n if (firstRequest || sameIntervals) {\n dispatch(setInterval(result.eventsInterval));\n }\n } catch (e) {\n const error = e as Error;\n\n if (isCancelled(error)) {\n return;\n }\n\n dispatch(setError(error));\n } finally {\n if (firstRequest) {\n dispatch(setLoading(false));\n }\n }\n };\n","export const ROW_HEIGHT = 30;\nexport const TIMELINE_HEIGHT = 12;\nexport const TIMELINE_SELECT_BORDER_WIDTH = 2;\nexport const OFFSET = (ROW_HEIGHT - TIMELINE_HEIGHT) / 2;\nexport const MAX_JOBS_COUNT = 10000;\n","const SvgChevronsExpandToLines = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1.5 2.75a.75.75 0 0 0-1.5 0v10.5a.75.75 0 0 0 1.5 0zm14.5 0a.75.75 0 0 0-1.5 0v10.5a.75.75 0 0 0 1.5 0zM6.53 4.97a.75.75 0 0 1 0 1.06L4.56 8l1.97 1.97a.75.75 0 1 1-1.06 1.06l-2.5-2.5a.75.75 0 0 1 0-1.06l2.5-2.5a.75.75 0 0 1 1.06 0m2.94 1.06a.75.75 0 0 1 1.06-1.06l2.5 2.5a.75.75 0 0 1 0 1.06l-2.5 2.5a.75.75 0 1 1-1.06-1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsExpandToLines;","import React, {FC} from 'react';\nimport {Button, Flex, Icon, TextInput} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\nimport './TimeLineHeader.scss';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n selectFilter,\n selectInterval,\n} from '../../../../../store/selectors/operations/jobs-timeline';\nimport {\n setFilter,\n setInterval,\n} from '../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {dateTimeParse} from '@gravity-ui/date-utils';\nimport {RangeDateSelection} from '@gravity-ui/date-components';\nimport {DateTime} from '@gravity-ui/date-utils/build/typings/dateTime';\nimport ChevronsExpandToLinesIcon from '@gravity-ui/icons/svgs/chevrons-expand-to-lines.svg';\nimport {resetInterval} from '../../../../../store/actions/operations/jobs-timeline';\n\nconst block = cn('yt-timeline-header');\n\ntype Props = {\n className?: string;\n};\n\nexport const TimeLineHeader: FC<Props> = ({className}) => {\n const dispatch = useDispatch();\n const filter = useSelector(selectFilter);\n const interval = useSelector(selectInterval);\n\n const handleFilterChange = (val: string) => {\n dispatch(setFilter(val));\n };\n\n const handleOnUpdate = ({start, end}: {start: DateTime; end: DateTime}) => {\n dispatch(setInterval({from: start.valueOf(), to: end.valueOf()}));\n };\n\n const handleResetInterval = () => {\n dispatch(resetInterval());\n };\n\n if (!interval) return null;\n\n return (\n <div className={block(null, className)}>\n <TextInput\n defaultValue={filter}\n placeholder=\"Search by job ID\"\n onUpdate={handleFilterChange}\n hasClear\n />\n <Flex>\n <Button\n view=\"outlined\"\n pin=\"brick-brick\"\n onClick={handleResetInterval}\n title=\"Reset interval\"\n >\n <Icon data={ChevronsExpandToLinesIcon} size={16} />\n </Button>\n <RangeDateSelection\n className={block('range-selector')}\n value={{\n start: dateTimeParse(interval.from)!,\n end: dateTimeParse(interval.to)!,\n }}\n displayNow\n hasScaleButtons\n onUpdate={handleOnUpdate}\n />\n </Flex>\n </div>\n );\n};\n","export const getPhaseColor = (state: string, phase?: string) => {\n if (!phase) return state;\n\n return state.toLowerCase() === 'running' && phase.toLowerCase() !== 'running'\n ? 'running-prev'\n : state;\n};\n","import React, {FC, ReactNode, useMemo} from 'react';\nimport {JobEvent} from '../../../../../../store/reducers/operations/jobs/jobs-timeline-slice';\nimport {Table} from '@gravity-ui/uikit';\nimport '../mixin/stateMixin.scss';\nimport './EventsTable.scss';\nimport cn from 'bem-cn-lite';\nimport hammer from '../../../../../../common/hammer';\nimport {getPhaseColor} from '../helpers/getPhaseColor';\n\nconst block = cn('yt-events-table');\n\nconst PhaseNameCell: FC<{state: string; phase: string}> = ({state, phase}) => {\n return (\n <div className={block('row', {state: getPhaseColor(state, phase)})}>\n {hammer.format['ReadableField'](state)}: {hammer.format['ReadableField'](phase)}\n </div>\n );\n};\n\nconst getDateTime = (timestamp: number) =>\n hammer.format['DateTime'](new Date(timestamp).toString());\n\ntype Props = {\n events: JobEvent[];\n};\n\nexport const EventsTable: FC<Props> = ({events}) => {\n const data = useMemo(() => {\n return events.reduce<{phase: ReactNode; duration: string; startTime: string}[]>(\n (acc, event) => {\n acc.push({\n phase: <PhaseNameCell state={event.state} phase=\"&mdash;\" />,\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)} &nbsp;\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) : <>&mdash;</>}\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 &nbsp;\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 &ensp;\n <StatusLabel {...mainStatusProps} renderPlaque />\n &ensp;\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},\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(\n UIFactory.PyDLTelemetrySetup?.hasTelemtery(operation) &&\n ['completed', 'failed', 'aborted'].includes(operation?.state),\n );\n\n return {\n cluster: getCurrentCluster(state),\n operation,\n errorData,\n loading,\n loaded,\n error,\n actions,\n runtime,\n totalJobWallTime,\n cpuTimeSpent,\n erasedTrees,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n monitoringComponent,\n pyDLTelemetryTabVisible,\n timelineTabVisible: getSettingsTimelineTabVisible(state),\n jobsMonitorIsSupported: Boolean(UIFactory.getMonitorComponentForJob()),\n jobsMonitorVisible: getJobsMonitorTabVisible(state),\n hasStatististicsTab: getOperationStatiscsHasData(state),\n isGpuOperation: selectIsOperationInGpuTree(state),\n operationPerformanceUrlTemplate: getOperationPerformanceUrlTemplate(state),\n };\n};\n\nconst mapDispatchToProps = {\n promptAction,\n getOperation,\n showEditPoolsWeightsModal,\n updateListJobsFilter,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst OperationDetailConnected = connector(OperationDetail);\n\nexport default function OperationDetailsWithRum(props: RouteProps) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n return <OperationDetailConnected {...props} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {Route, Switch, withRouter} from 'react-router';\n\nimport PoolsWeightsEditModal from '../PoolsWeightsEditModal/PoolsWeightsEditModal';\nimport OperationsList from '../OperationsList/OperationsList';\nimport OperationDetail from '../OperationDetail/OperationDetail';\nimport {DASHBOARD_VIEW_CONTEXT} from '../../../constants/index';\n\nconst block = cn('operations');\n\nfunction Operations(props) {\n const {match, viewContext} = props;\n const className = viewContext !== DASHBOARD_VIEW_CONTEXT ? 'elements-main-section' : '';\n\n return (\n <div className={block(null, className)}>\n <PoolsWeightsEditModal />\n <Switch>\n <Route path={match.path} exact render={() => <OperationsList />} />\n <Route path={`${match.path}/:operationId/:tab?`} component={OperationDetail} />\n </Switch>\n </div>\n );\n}\n\nOperations.propTypes = {\n // from parent\n viewContext: PropTypes.string,\n\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default withRouter(Operations);\n","import {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 { I18N } from '@gravity-ui/i18n';\nimport en from './keysets/en.json';\nimport ru from './keysets/ru.json';\nconst i18nFactory = new I18N();\nconst EN = 'en';\nconst RU = 'ru';\ni18nFactory.registerKeysets(EN, en);\ni18nFactory.registerKeysets(RU, ru);\nconst i18n = i18nFactory.i18n.bind(i18nFactory);\nexport { i18nFactory, i18n };\n","import isObject from 'lodash/isObject';\nimport mergeWith from 'lodash/mergeWith';\n// @ts-ignore\nexport function mergeSettingStrategy(objValue, srcValue, key) {\n if (key === 'plugins') {\n const currentPlugins = [...objValue];\n const newPlugins = [...srcValue];\n // modify existing plugins\n let newSettingsPlugins = currentPlugins.map((currentPlugin) => {\n const newPluginIndex = newPlugins.findIndex(({ type }) => type === currentPlugin.type);\n if (newPluginIndex !== -1) {\n const newPlugin = newPlugins[newPluginIndex];\n newPlugins.splice(newPluginIndex, 1);\n return {\n type: currentPlugin.type,\n renderer: newPlugin.renderer,\n };\n }\n return currentPlugin;\n });\n // add new plugins if it exist after modified\n if (newPlugins.length > 0) {\n newSettingsPlugins = [...newSettingsPlugins, ...newPlugins];\n }\n return newSettingsPlugins;\n }\n if (isObject(objValue)) {\n return mergeWith(objValue, srcValue, mergeSettingStrategy);\n }\n return srcValue;\n}\n","import { configure } from '@gravity-ui/uikit';\nimport get from 'lodash/get';\nimport mergeWith from 'lodash/mergeWith';\nimport { i18nFactory } from '../../i18n';\nimport { EventEmitter } from './eventEmitter';\nimport { mergeSettingStrategy } from './mergeSettingStrategy';\nexport const settingsEventEmitter = new EventEmitter();\nconst removeUndefinedValues = (data) => {\n return Object.entries(data).reduce((acc, [key, value]) => {\n if (typeof value !== 'undefined') {\n acc[key] = value;\n }\n return acc;\n }, {});\n};\nconst updateLang = (lang) => {\n configure({ lang });\n i18nFactory.setLang(lang);\n};\nclass ChartKitSettings {\n constructor() {\n this.settings = {\n plugins: [],\n lang: 'en',\n };\n updateLang(this.get('lang'));\n }\n get(key) {\n return get(this.settings, key);\n }\n set(updates) {\n const filteredUpdates = removeUndefinedValues(updates);\n this.settings = mergeWith(this.settings, filteredUpdates, mergeSettingStrategy);\n if (filteredUpdates.lang) {\n const lang = filteredUpdates.lang || this.get('lang');\n updateLang(lang);\n settingsEventEmitter.dispatch('change-lang', lang);\n }\n }\n}\nexport const settings = new ChartKitSettings();\n","export class EventEmitter {\n constructor() {\n this.events = {};\n }\n on(type, event) {\n if (this.events[type]) {\n this.events[type].push(event);\n }\n else {\n this.events[type] = [event];\n }\n }\n off(type, eventId) {\n if (this.events[type]) {\n this.events[type] = this.events[type].filter(({ id }) => id !== eventId);\n }\n }\n dispatch(type, args) {\n if (this.events[type]) {\n this.events[type].forEach(({ action }) => {\n action(args);\n });\n }\n }\n}\n","import 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 React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\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 { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'chartkit-';\nexport const cn = withNaming({ e: '__', m: '_' });\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });\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;","export const randomString = (length, chars) => {\n let result = '';\n for (let i = length; i > 0; --i) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n};\nexport const getRandomCKId = () => `ck.${randomString(10, '0123456789abcdefghijklmnopqrstuvwxyz')}`;\n","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// For some reason React.memo drops the generic prop type and creates a regular union type\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-542793243\nexport const typedMemo = React.memo;\n","import React from 'react';\nimport { CHARTKIT_ERROR_CODE } from '../../libs';\nimport { getErrorMessage } from '../../utils/getErrorMessage';\nexport class ErrorBoundary extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n error: undefined,\n };\n this.resetError = () => {\n if (this.state.error) {\n this.setState({ error: undefined });\n }\n };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch() {\n var _a, _b;\n const { error } = this.state;\n if (error) {\n (_b = (_a = this.props).onError) === null || _b === void 0 ? void 0 : _b.call(_a, { error });\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.data !== this.props.data) {\n const { error } = this.state;\n if (error && 'code' in error && error.code === CHARTKIT_ERROR_CODE.NO_DATA) {\n this.resetError();\n }\n }\n }\n render() {\n const { error } = this.state;\n if (error) {\n const message = getErrorMessage(error);\n if (this.props.renderError) {\n return this.props.renderError({\n error,\n message,\n resetError: this.resetError,\n });\n }\n return React.createElement(\"div\", null, message);\n }\n return this.props.children;\n }\n}\n","import { i18n } from '../i18n';\nexport function getErrorMessage(error) {\n const code = 'code' in error && error.code;\n return (error.message || code || i18n('error', 'label_unknown-error')).toString();\n}\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { Loader as BaseLoader } from '@gravity-ui/uikit';\nimport { block } from '../../utils/cn';\nimport './Loader.css';\nconst b = block('loader');\nexport const Loader = (_a) => {\n var { renderPluginLoader } = _a, props = __rest(_a, [\"renderPluginLoader\"]);\n const pluginLoader = renderPluginLoader === null || renderPluginLoader === void 0 ? void 0 : renderPluginLoader();\n // React.Suspense complains about possible undefined in \"fallback\" property\n if (typeof pluginLoader !== 'undefined') {\n return pluginLoader;\n }\n return (React.createElement(\"div\", { className: b() },\n React.createElement(BaseLoader, Object.assign({}, props))));\n};\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { i18n } from '../i18n';\nimport { CHARTKIT_ERROR_CODE, ChartKitError, settings } from '../libs';\nimport { getRandomCKId, typedMemo } from '../utils';\nimport { cn } from '../utils/cn';\nimport { ErrorBoundary } from './ErrorBoundary/ErrorBoundary';\nimport { Loader } from './Loader/Loader';\nimport './ChartKit.css';\nconst b = cn('chartkit');\nconst ChartKitComponent = (props) => {\n const widgetRef = React.useRef();\n const { instanceRef, id: propsId, type, isMobile, renderPluginLoader } = props, restProps = __rest(props, [\"instanceRef\", \"id\", \"type\", \"isMobile\", \"renderPluginLoader\"]);\n const ckId = React.useMemo(() => getRandomCKId(), []);\n const id = propsId || ckId;\n const lang = settings.get('lang');\n const plugins = settings.get('plugins');\n const plugin = plugins.find((iteratedPlugin) => iteratedPlugin.type === type);\n if (!plugin) {\n throw new ChartKitError({\n code: CHARTKIT_ERROR_CODE.UNKNOWN_PLUGIN,\n message: i18n('error', 'label_unknown-plugin', { type }),\n });\n }\n const ChartComponent = plugin.renderer;\n React.useImperativeHandle(instanceRef, () => ({\n reflow(details) {\n var _a;\n if ((_a = widgetRef.current) === null || _a === void 0 ? void 0 : _a.reflow) {\n widgetRef.current.reflow(details);\n }\n },\n }), []);\n return (React.createElement(React.Suspense, { fallback: React.createElement(Loader, { renderPluginLoader: renderPluginLoader }) },\n React.createElement(\"div\", { className: b({ mobile: isMobile }, 'chartkit-theme_common') },\n React.createElement(ChartComponent, Object.assign({ ref: widgetRef, id: id, lang: lang }, restProps)))));\n};\nconst ChartKitComponentWithErrorBoundary = React.forwardRef(function ChartKitComponentWithErrorBoundary(props, ref) {\n return (React.createElement(ErrorBoundary, { onError: props.onError, data: props.data, renderError: props.renderError },\n React.createElement(ChartKitComponent, Object.assign({ instanceRef: ref }, props))));\n}) /* https://stackoverflow.com/a/58473012 */;\nexport const ChartKit = typedMemo(ChartKitComponentWithErrorBoundary);\n","import { ChartKit } from './components/ChartKit';\nimport { settings } from './libs';\nexport * from './types/widget-data';\nexport * from './libs/chartkit-error/chartkit-error';\nexport { settings };\nexport default ChartKit;\n","import React from 'react';\nexport * from './types';\nexport const YagrPlugin = {\n type: 'yagr',\n renderer: React.lazy(() => import('./renderer/YagrWidget')),\n};\n","import ChartKit, {settings} from '@gravity-ui/chartkit';\nimport {YagrPlugin} from '@gravity-ui/chartkit/yagr';\nexport type {RawSerieData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';\n\nimport '@gravity-ui/yagr/dist/index.css';\n\nsettings.set({plugins: [YagrPlugin]});\n\nconst COLORS = ['rgb(77, 162, 241)', 'rgb(255, 61, 100)'];\n\nexport function getSerieColor(serieIndex: number) {\n return COLORS[serieIndex % COLORS.length];\n}\n\nexport default ChartKit;\n"],"names":["block","cn","ExpandIcon","_ref","className","data","expanded","visible","onClick","icon","onClickCb","React","_jsx","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","en","Alert","theme","message","corners","style","onClose","align","qa","Card","spacing","py","px","Flex","gap","alignItems","direction","grow","justifyContent","title","Title","text","Array","isArray","actions","Actions","items","extraProps","i18n","I","Xmark","size","colorText","color","iconByTheme","Text","variant","minContent","wrap","map","handler","i","Action","connect","openAttributesModal","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","rest","_objectWithoutProperties","_excluded","AttributesButton","_objectSpread","pathProps","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","CHARTKIT_ERROR_CODE","NO_DATA","INVALID_DATA","UNKNOWN","UNKNOWN_PLUGIN","TOO_MANY_LINES","ChartKitError","constructor","originalError","code","super","isCustomError","name","stack","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","ChartLink","url","hideIcon","face","wrapContent","Link","target","formatShare","significantDigits","isEmptyStatistics","stats","some_","ypath","hasProgressTasks","operation","TASKS_PREFIX","prepareFile","file","originalPath","executable","getBoolean","prepareMeta","meta","prepared","map_","sortBy_","prepareStartedBy","startedBy","command","fields","filter_","option","length","prepareTransferTask","task","id","task_id","UIFactory","makeUrlForTransferTask","prepareLivePreview","index","isRunning","_operation$getLivePre","getLivePreviewPath","virtualPath","supported","transaction","prepareTableFilters","table","filters","ranges","range","upperLimit","lowerLimit","normalizeTableRanges","prepareTable","typedTable","userTransactionAlive","cluster","prepareTransaction","livePreview","append","teleport","primary","foreign","typedFilters","groupTables","currentGroup","group","forEach_","YPath","create","getKey","folder","toSubpath","stringify","groupKey","push","isFolder","err","console","error","prepareInput","TYPE","typedTables","$typedAttributes","prepareStderr","prepareCoredumps","coreTable","prepareOutput","prepareIntermediate","prepareScriptCaption","indexOf","substring","prepareScript","_environment","script","environment","jobCount","files","layerPaths","prepareTasks","tasks","keys_","taskName","prepareVisibleItems","filterVisibleItems","itemsCount","_step","result","count","_iterator","_createForOfIteratorHelper","done","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","_this","user","suspended","input","output","startTime","finishTime","jobs","completedJobs","runningJobs","failedJobs","totalJobs","completedJobsProgress","runningJobsProgress","jobsProgress","briefSpec","computeIOProperties","computePools","moment","_typeof","completed","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","getNumberDeprecated","NaN","to","from","getOperation","getOperationId","getOperationTasks","getOperationTasksNames","sort","getOperationDetailsLoadingStatus","loading","loaded","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","toaster","Toaster","operationDetailsRequests","dispatch","getState","isAlias","include_scheduler","output_format","TYPED_OUTPUT_FORMAT","operation_alias","GET_OPERATION","REQUEST","ytApiV3","parameters","setup","JSONSerializer","then","checkUserTransaction","_ref2","_ref3","_slicedToArray","operationAttributes","preparedAttributes","prepareAttributes","dispatchOperationSuccess","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","getCluster","_type_tag","href","window","location","origin","SUCCESS","_getOperationJobsMoni","JOBS_MONITOR","ytApiV3Id","listJobs","YTApiId","listJobs100","limit","with_monitoring_descriptor","cancellation","removeAllAndSave","isCancelled","CANCELLED","FAILURE","treeNames","wrapApiPromiseByToaster","executeBatch","operationTreeConfigs","requests","USE_CACHE","toasterName","skipSuccessToast","batchType","errorTitle","OPERATION_DETAIL_PARTIAL","inIntermediateState","callback","_asyncToGenerator","_regeneratorRuntime","mark","_callee","outputTransaction","_context","prev","next","LOAD_RESOURCE_USAGE","abrupt","operationIntermediateResourceUsage","intermediateResources","account","stop","_x","apply","loadIntermediateResourceUsage","isFirstLoading","YTErrors","autoHiding","label","showErrorPopup","getOperationsListFilters","list","getOperationsPoolTreeRawCounters","_state$operations$lis","poolTree","counters","pool_tree_counts","getOperationsPoolRawCounters","_getOperationsPoolFil","getOperationsPoolFilterData","pool_counts","getOperationsUserRawCounter","_getOperationsUserFil","getOperationsUserFilterData","user_counts","getOperationsPoolTreeCountersItems","convertCountersToItems","getOperationsPoolTreeItemsWithoutCounter","getAllPoolTreeNames","calculateItemsWithoutCounter","getOperationsPoolTreeSuggestions","concat_","getOperationsPoolCountersItems","getOperationsPoolItemsWithoutCounter","getAllPoolNames","getOperationsPoolSuggestions","getOperationsUserCountersItems","getOperationsUserItemsWithoutCounter","getAllUserNames","getOperationsUserSuggestions","counter","allNames","countersMap","ATTRIBUTE_ITEMS","ATTRIBUTE_ITEM_NAMES","getOperationsListFilterParameters","subject","permissions","actualSubject","getValueIfNotDefault","actualPermissions","access","filter","pool_tree","with_failed_jobs","getOperationsListTimeRange","_state$operations$lis2","timeRange","to_time","from_time","getOperationsListFiltersParameters_FOR_YTFRONT_2838","getCurrentUserName","login","_clusterConfig$operat","getClusterConfigByName","operationPageSettings","disableOptimizationForYTFRONT2838","getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838","fixedFilters","isEqual_","getDefaultToTime","currentTime","dataMode","OPERATIONS_DATA_MODE","ARCHIVE","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","headingBlock","runtimeBlock","StarvingStatus","starvation_status","isRequired","Runtime","_Component","_len","args","_key","handlePoolEditClick","_progress$partitions","_progress$partitions2","_this$props2","isGang","MetaTable","OperationPool","onEdit","compact","TemplateWeight","FormattedValue","fifo_index","fair_share_ratio","usage_ratio","demand_ratio","dominant_resource","scheduling_status","scheduling_segment","partitions","renderTree","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","errorData","_useState","useState","_useState2","_useState3","_useState4","useEffect","Modal","confirmText","onConfirm","onCancel","isConfirmDisabled","isStateCorrect","isWeightCorrect","every_","isNaN","isPoolCorrect","Yson","inline","YTErrorBlock","OperationProgress","onLinkClick","jobsByStateTitle","routed","renderCounter","isPreparing","showState","_this$props2$operatio","StatusLabel","renderState","progressBar","renderProgressBar","renderFailedProgressBar","renderJobCounters","renderFailedJobCounters","PathItem","transaction_id","user_transaction_id","_React$useState","_React$useState2","activeTransaction","setActiveTransaction","tableTx","isValidTransactionId","isTransactionAlive","ReadableField","OperationIOLink","renderTitle","getTitle","trimEnd_","unipika","decode","renderCopyTitle","ClipboardButton","UserPoolItem","awesomeIcon","Tooltip","allowUnmounted","OperationsListTable","inputTx","outputTx","renderUserPool","multiplePools","SubjectCard","renderMultiplePools","TemplatePools","allowDetachEditBtn","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","setState","handleKeyDown","evt","stateValue","propsValue","activePreset","Redirect","Filter","placeholder","onChange","newValue","debounce","onKeyDown","pin","disabled","bForm","DISPLAY_FORMAT","TimePicker","_isAMomentObject","date","handleTimeChange","newTime","isValidFormat","_checkInputTimeValidity","_prepareOutputDate","textTime","isValid","textDate","minDate","newDate","unix","currentDate","year","month","isValidDate","_checkDateValidity","iconRight","renderIcon","controlAttrs","maxLength","nextProps","prevState","formBlock","datePickerProps","controlSize","outputFormat","popupClassName","radioButtonTypes","custom","twoHours","day","week","OperationsArchiveFilter","_useSelector","useSelector","store","_useSelector$timeRang","useDispatch","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","selected","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","_this$state","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","join","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","useAppRumMeasureStart","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","_ref5","YTHistogram","xLabel","yLabel","yLogarithmic","yMin","_ref$xFormat","xFormat","_ref$yFormat","yFormat","_ref$renderTooltip","renderTooltip","renderDefaultTooltip","yagrData","_genYagrData","min","max","step","serieData","timeline","genYagrData","graphs","getSerieColor","renderOptions","libraryConfig","axes","x","values","_d","scales","tooltip","render","tooltipData","_renderTooltip","_tooltipData$scales","originalValue","rows","YagrChartKit","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","current","Description","prepareSettings","escapeWhitespace","_unipika$utils$yson","yson","isWithoutTags","hasOwnProperty","call","CollapsableText","renderAsMap","renderMetaTable","renderAsYSON","METRICS","completedTableProps","withActions","row_count","compressed_data_size","uncompressed_data_size","data_weight","chunk_count","intermediateTableProps","disk_space","node_count","resourceAsBytes","resourceAsNumber","expandKey","prepareState","allowExpand","expandedTasks","inner","DataFlow","prevProps","self","fromTo","expKey","toggleExpand","columnsMode","getResourceTemplates","CollapsibleTable","heading","allItemsCount","renderToggler","renderHeading","withCollapsible","tableProps","tags","inputTableProps","outputTableProps","stderrTableProps","specificationBlock","scriptProps","Specification","TemplateTransferTask","_ref3$fields","TemplateCommand","lineCount","TemplateEnvironment","environments","TemplateFiles","TemplateLayerPaths","paths","TemplateLivePreivew","renderScript","_this$props$specifica","renderTransferTask","renderRemote","renderStartedBy","renderIO","renderIntermediate","renderTasks","JobCounters","helpUrl","allowHideEmpty","hideEmpty","setHideEmpty","JobCoutnersSection","filterValues","DetailedJobsCounter","scheduledCounters","scheduled","scheduledItems","nonScheduledCounters","nonScheduled","nonScheduledItems","Scheduled","nonInterruptedItems","nonInterrupted","interruptedCounters","interrupted","Interrupted","renderAborted","abortedStats","renderCompleted","completedStats","secondary","primaryValue","secondaryValue","handleClose","handleShow","modalContent","renderModalContent","renderCount","onOutsideClick","withVisible","sortCounters","reasonA","reasonB","compareVectors","prepareCategoryCounters","category","prepareCompletedStatistics","prepareAbortedStatistics","aborted","prepareCounters","tasksTablesProps","job_type","prepareColumns","fieldTreeForEach","vertex","isT","visitorCb","filterFieldTree","predicate","filterT","empty","tmp","fieldTreeSome","some","getOperationDetailsOperation","getOperationStatisticsV2","isStatisticItem","getOperationStatisticsAvailableValues","_stats$time$total","_stats$time","_construct","getOperationStatisticsActiveFilterValues","jobTypeFilter","poolTreeFilter","filterText","activeJobType","STATISTICS_FILTER_ALL_VALUE","activePoolTree","getOperationStatiscsHasData","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__","column","_item$abortedStats","_item$completedStats","TaskInfo","_self$state","expandable","_rowIndex","colIndex","_jobs$items","collapsibleSize","collapsed","CollapsibleSection","marginDirection","renderContent","_this$props$jobs","measure","colSpan","prevOperation","prevItems","has_user_job","input_finished","user_job_memory_reserve_factor","completion_time","ready_time","exhaust_time","readyTime","exhaustTime","timeSum","Value","Details","handleEditClick","OperationDescription","alertEvents","isVanillaGpuOperation","disableLogger","overview","renderRuntimeOverview","_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","SpecificationWithRum","OPERATION_TAB_SPECIFICATION","JobSizes","showEstimated","toggleEstimated","WithStickyToolbar","toolbar","Toolbar","itemsToWrap","node","estimatedJobSizeHistogram","jobSizeHistogram","estimated_input_data_weight_histogram","input_data_weight_histogram","renderChart","_this$prepareJobSizes","prepareJobSizes","hasTaskHistograms","renderPerTaskCharts","renderCommon","JobSizesConnected","JobSizesWithRum","OPERATION_TAB_JOB_SIZES","STATISTIC_STATE","lost","statisticsTableProps","metric","useStatisticInfo","getStatisticInfo","getOperationStatisticsDescription","OperationStatisticNameImpl","StatisticName","OperationStatisticValueImpl","asStr","formatByUnit","unit","asNumber","inlineMargins","OperationStatisticValue","OperationStatisticName","statisticsBlock","toolbarBlock","Statistics","collapseTable","setTreeState","TREE_STATE","COLLAPSED","expandTable","EXPANDED","_this$props$activeAgg","activeAggregation","_columnName","toggleItemState","itemState","offsetStyle","paddingLeft","togglerIconName","itemIconName","_item$data","jobTypes","DEBOUNCE_DELAY","changeFilterText","RadioButton","changePoolTreeFilter","makeRadioButtonProps","changeJobType","changeAggregation","AGGREGATOR_RADIO_ITEMS","treeState","renderToolbar","WaitForFont","template","SET_TREE_STATE","CHANGE_FILTER_TEXT","CHANGE_AGGREGATION","OPERATION_STATISTICS_PARTIAL","operationType","settingsJobTypes","getSettingOperationStatisticsActiveJobTypes","setSettingsStatisticsActiveJobTypes","StatisticsConnected","_state$operations$sta","_getOperationStatisti","OPERATION_TAB_STATISTICS","getJobsErrors","jobsErrors","getJobsOperationIncarnationsFilter","jobsOperationIncarnations","getJobsOperationIncarnationsValues","availableValues","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","CircleQuestionIcon","StatusInfo","_useToggle","useToggle","_useToggle2","open","toggleOpen","anchorRef","useRef","reason","preemption_reason","interruption_reason","onMouseEnter","Label","ref","Popup","hasArrow","onMouseLeave","OperationJobsTable","modalKey","successMessage","errorMessage","confirmationText","PLEASE_PROCEED_TEXT","successMessageTemplate","prepareJobAction","jobActionPromise","getMetrics","countEvent","abortJob","abandonJob","temporaryPathBase","recursive","ignore_existing","temporaryPath","createTemporaryPath","dumpJobContext","performJobAction","preparedActions","renderIdAddress","is_stale","host","monitoring_descriptor","isSpeculativeJob","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","LoadDataHandler","alwaysShowError","JobsWithRum","operationLoadState","OPERATION_TAB_JOBS","getJobsMonitorError","jobsMonitor","getJobsMonitorItemsLoading","getJobsMonitorItemsLoaded","getJobsMonitoringItemsWithDescriptor","getJobsMonitorFromTo","start","finish","getJobsMonitorDescriptor","getJobsMonitorTabVisible","opId","jobMonId","jobsDescriptor","JobsMonitor","job_descriptor","Loader","centered","NoContent","JobMonitorComponent","getMonitorComponentForJob","OperationAttributes","getOperationAttributesYsonSettings","OPERATION_TAB_ATTRIBUTES","OperationDetailsMonitor","OperationMonitor","component","selectJobs","jobsTimeline","selectLoading","selectInterval","interval","selectFilter","selectActiveJob","selectedJob","selectJobsOverloadError","jobsCountError","selectError","selectEventsInterval","eventsInterval","isFinite","selectJobsEmptyError","selectJobsInIntervalByGroup","groupName","selectJobGroupsCount","getSelectedJob","activeJob","find","selectIntervalsIsSame","eInterval","getJobsWithEvents","firstRequest","sameIntervals","listResponse","_error","setLoading","setError","sent","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","_x2","TimeLineHeader","ChevronsExpandToLinesIcon","RangeDateSelection","dateTimeParse","end","displayNow","hasScaleButtons","getPhaseColor","PhaseNameCell","getDateTime","toString","EventsTable","useMemo","prevTime","eventPhase","Table","relativeTime","MetaData","showCopyButton","EventsSidePanel","panelRef","handleDocumentClick","contains","document","addEventListener","removeEventListener","XmarkIcon","getColorByState","getCssColor","EventDisplayMode","getTimeLineDisplayMode","timeLineId","_ref$filter","_ref$selectedJob","hasFilter","hasSelectedJobs","matchesFilter","includes","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","set","scheduleTimelineRender","getComponent","BasicEventsProvider","setEvents","setSelectedEvents","_theme","setTimelineConfig","offsetHeight","_superPropGet","renderer","registerRenderer","Grid","Axes","OVERLAPPING_THRESHOLD","SKIP_OVERLAPPING","getCSSPropertyValue","TRACK_HEIGHT","YaTimeline","customElements","define","Timeline","wrapWc","EventsTimeline","timelines","rowHeight","onTimelineClick","onBoundsChanged","renderers","useThemeValue","hoverEvent","setHoverEvent","debouncedSetHoverEvent","debounce_","handleLeftEvent","handleHoverEvent","handleEventClick","scrollTopChanged","selectedEvents","eventsSelected","leftEvent","isZoomAllowed","boundsChanged","TimelineTable","FileIcon","ellipsis","GroupCollapse","_ref$open","isOpen","ChevronDownIcon","Wrap","collapse","TimelineBlock","tableItems","JobsGroups","jobGroups","groupsCount","timelineId","handleTimeLineClick","setSelectedJob","axisId","handleBoundsChanged","newInterval","handleSidePanelClose","handleSidePanelOutsideClick","Element","localName","_useSidePanel","useSidePanel","openWidget","closeWidget","widgetContent","groups","readableGroupName","_prepareJobTimeline","_ref$axesRowHeight","axesRowHeight","allocationMap","Map","validJobs","firstEvent","lastEvent","jobStartTime","jobEndTime","existingAllocation","_step2","allocations","entries","allocation","trackIndex","_iterator2","tracksCount","prepareJobTimeline","_e$detail","jobEvent","JobsTimeline","firstUpdate","eventsRange","overloadError","emptyError","handleUpdate","padding","detailBlock","OperationDetailUpdater","SpecialWaitingStatus","iconState","renderPlaque","OperationDetail","handlePoolsEditClick","renderAction","onProgressLinkClick","jobState","_this$props3$actions","isGpuOperation","_operation$user","_getSpecialWaitingSta","_runtime$","_runtime$2","_runtime$3","fairShareRatio","usageRatio","demandRatio","isSingleTree","isSpecialStatus","isWaitingForResources","isWaitingForJobs","getSpecialWaitingStatuses","mainStatusProps","totalJobWallTime","cpuTimeSpent","erasedTrees","_operation$user2","isGpuVanillaOperation","Id","operationRefId","_this$props5$match$pa","activeTab","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","Switch","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","useRumMeasureStart","subPage","ElementsTableFooter","itemHeight","itemMods","selectedIndex","cssHover","columnSet","columnItems","currentKey","ElementsTableRow","bFooter","ELEMENTS_TABLE","renderRow","_prepareColumnsData","prepareColumnsData","_WithStickyFooter","WithStickyFooter","renderStickyFooter","i18nFactory","registerKeysets","mergeSettingStrategy","objValue","srcValue","currentPlugins","newPlugins","newSettingsPlugins","currentPlugin","newPluginIndex","findIndex","newPlugin","splice","settingsEventEmitter","on","off","eventId","updateLang","lang","configure","setLang","plugins","updates","filteredUpdates","mappedState","_states","starting","failing","aborting","Unknown","Stopped","Paused","Working","Draining","Pausing","Completed","getViewState","unknown","getIcon","mods","withSplit","_WithSplit","WithSplit","ReactDOM","getElementById","SPLIT_PANE_ID","ICON_BY_TYPE","SortIcon","order","allowUnordered","withUndefined","nextSortOrderValue","hidden","warnAboutPhysicalValues","propName","warn","normalizeSides","side","activeScrollElement","columnsStyles","columnHeaderRefs","tableRef","scrollContainerRef","horizontalScrollBarRef","horizontalScrollBarInnerRef","rowIndex","isRowDisabled","onRowClick","onRowMouseEnter","onRowMouseLeave","onRowMouseDown","getRowClassNames","verticalAlign","edgePadding","wordWrap","getRowDescriptor","descriptor","additionalClassNames","classNames","interactive","onMouseDown","rawAlign","rawSticky","getBodyCellContent","getRowId","handleScrollContainerMouseenter","handleScrollContainerScroll","scrollLeft","handleHorizontalScrollBarMouseenter","handleHorizontalScrollBarScroll","getHeadCellContent","placeholderValue","getDerivedStateFromProps","componentDidMount","stickyHorizontalScroll","tableResizeObserver","ResizeObserver","_a","contentRect","setProperty","observe","columnsResizeObserver","requestAnimationFrame","updateColumnStyles","componentDidUpdate","componentWillUnmount","disconnect","withPrimary","renderTable","renderHorizontalScrollBar","renderHead","renderBody","renderEmptyRow","emptyMessage","stickyHorizontalScrollBreakpoint","bottom","columnsWidth","getBoundingClientRect","getColumnStyles","maxWidth","filteredColumns","_this$props2$alwaysSh","SidePanelPortal","widgetOpened","setWidgetOpened","splitScreen","mergeScreen","withNaming","future","past","hh","dd","yy","fromToBase","$locale","thresholds","rounding","$u","utc","toNow","usePoolTreesLoaded","loadPoolTreesIfNotLoaded","useDefaultPoolTree","defaultPoolTree","setDefaultPoolTree","loadDefaultPoolTree","WaitForDefaultPoolTree","getRandomCKId","chars","random","randomString","typedMemo","resetError","getDerivedStateFromError","componentDidCatch","_b","onError","getErrorMessage","renderPluginLoader","pluginLoader","ChartKitComponent","widgetRef","instanceRef","propsId","isMobile","restProps","ckId","plugin","iteratedPlugin","ChartComponent","reflow","fallback","mobile","YagrPlugin","COLORS","serieIndex"],"sourceRoot":""}