@ytsaurus/ui 1.75.1 → 1.77.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/public/build/assets-manifest.json +75 -75
  2. package/dist/public/build/css/{job.c7c99207.chunk.css → job.9757ff68.chunk.css} +2 -2
  3. package/dist/public/build/css/job.9757ff68.chunk.css.map +1 -0
  4. package/dist/public/build/css/main.0efa9da5.css +10 -0
  5. package/dist/public/build/css/main.0efa9da5.css.map +1 -0
  6. package/dist/public/build/css/navigation.c199c4f2.chunk.css +2 -0
  7. package/dist/public/build/css/navigation.c199c4f2.chunk.css.map +1 -0
  8. package/dist/public/build/js/{1260.534f3f75.chunk.js → 1260.a1e22005.chunk.js} +2 -2
  9. package/dist/public/build/js/{1260.534f3f75.chunk.js.map → 1260.a1e22005.chunk.js.map} +1 -1
  10. package/dist/public/build/js/{1879.23423388.chunk.js → 1879.3975650a.chunk.js} +3 -3
  11. package/dist/public/build/js/{1879.23423388.chunk.js.map → 1879.3975650a.chunk.js.map} +1 -1
  12. package/dist/public/build/js/{1983.666923be.chunk.js → 1983.64a2e22f.chunk.js} +2 -2
  13. package/dist/public/build/js/{1983.666923be.chunk.js.map → 1983.64a2e22f.chunk.js.map} +1 -1
  14. package/dist/public/build/js/{2447.b2877275.chunk.js → 2447.eb8fde89.chunk.js} +2 -2
  15. package/dist/public/build/js/{2447.b2877275.chunk.js.map → 2447.eb8fde89.chunk.js.map} +1 -1
  16. package/dist/public/build/js/3724.3e5848f0.chunk.js +2 -0
  17. package/dist/public/build/js/{3724.425d01ec.chunk.js.map → 3724.3e5848f0.chunk.js.map} +1 -1
  18. package/dist/public/build/js/6729.39d7cf60.chunk.js +2 -0
  19. package/dist/public/build/js/6729.39d7cf60.chunk.js.map +1 -0
  20. package/dist/public/build/js/{7959.95ebd185.chunk.js → 7959.faac2ff8.chunk.js} +2 -2
  21. package/dist/public/build/js/{7959.95ebd185.chunk.js.map → 7959.faac2ff8.chunk.js.map} +1 -1
  22. package/dist/public/build/js/{8390.83f4531a.chunk.js → 8390.c3d2de6a.chunk.js} +2 -2
  23. package/dist/public/build/js/{8390.83f4531a.chunk.js.map → 8390.c3d2de6a.chunk.js.map} +1 -1
  24. package/dist/public/build/js/{8460.2d4d237e.chunk.js → 8460.fc8e2238.chunk.js} +2 -2
  25. package/dist/public/build/js/{8460.2d4d237e.chunk.js.map → 8460.fc8e2238.chunk.js.map} +1 -1
  26. package/dist/public/build/js/{8778.e18e655b.chunk.js → 8778.f3ea089f.chunk.js} +2 -2
  27. package/dist/public/build/js/{8778.e18e655b.chunk.js.map → 8778.f3ea089f.chunk.js.map} +1 -1
  28. package/dist/public/build/js/{9558.a6ea64c9.chunk.js → 9558.6a4bf9a9.chunk.js} +2 -2
  29. package/dist/public/build/js/{9558.a6ea64c9.chunk.js.map → 9558.6a4bf9a9.chunk.js.map} +1 -1
  30. package/dist/public/build/js/9569.aac48f3b.chunk.js +2 -0
  31. package/dist/public/build/js/9569.aac48f3b.chunk.js.map +1 -0
  32. package/dist/public/build/js/{accounts.2ba221c2.chunk.js → accounts.aa7ed73f.chunk.js} +2 -2
  33. package/dist/public/build/js/accounts.aa7ed73f.chunk.js.map +1 -0
  34. package/dist/public/build/js/{acl.c948c339.chunk.js → acl.4cd54663.chunk.js} +2 -2
  35. package/dist/public/build/js/{acl.c948c339.chunk.js.map → acl.4cd54663.chunk.js.map} +1 -1
  36. package/dist/public/build/js/{app-navigation.b062662b.chunk.js → app-navigation.13c65573.chunk.js} +2 -2
  37. package/dist/public/build/js/app-navigation.13c65573.chunk.js.map +1 -0
  38. package/dist/public/build/js/chyt.0ee6bfa2.chunk.js +2 -0
  39. package/dist/public/build/js/chyt.0ee6bfa2.chunk.js.map +1 -0
  40. package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js +2 -0
  41. package/dist/public/build/js/cluster-page-wrapper.bdc8607f.chunk.js.map +1 -0
  42. package/dist/public/build/js/{components.bbe331cb.chunk.js → components.b39828bc.chunk.js} +2 -2
  43. package/dist/public/build/js/components.b39828bc.chunk.js.map +1 -0
  44. package/dist/public/build/js/job.ea2ba82d.chunk.js +2 -0
  45. package/dist/public/build/js/job.ea2ba82d.chunk.js.map +1 -0
  46. package/dist/public/build/js/main.6375dbc6.js +3 -0
  47. package/dist/public/build/js/main.6375dbc6.js.map +1 -0
  48. package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js +2 -0
  49. package/dist/public/build/js/manage-tokens.e1e791fc.chunk.js.map +1 -0
  50. package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js → navigation-flow.6d67215a.chunk.js} +2 -2
  51. package/dist/public/build/js/{navigation-flow.eeb01518.chunk.js.map → navigation-flow.6d67215a.chunk.js.map} +1 -1
  52. package/dist/public/build/js/navigation.529208de.chunk.js +2 -0
  53. package/dist/public/build/js/navigation.529208de.chunk.js.map +1 -0
  54. package/dist/public/build/js/odin.c4c4ef6f.chunk.js +2 -0
  55. package/dist/public/build/js/odin.c4c4ef6f.chunk.js.map +1 -0
  56. package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js → path-viewer.c091d9f4.chunk.js} +2 -2
  57. package/dist/public/build/js/{path-viewer.b1b3328d.chunk.js.map → path-viewer.c091d9f4.chunk.js.map} +1 -1
  58. package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js → query-navigation.b1574290.chunk.js} +2 -2
  59. package/dist/public/build/js/{query-navigation.9964bfcf.chunk.js.map → query-navigation.b1574290.chunk.js.map} +1 -1
  60. package/dist/public/build/js/{query-results.733b1795.chunk.js → query-results.0a05cc41.chunk.js} +2 -2
  61. package/dist/public/build/js/{query-results.733b1795.chunk.js.map → query-results.0a05cc41.chunk.js.map} +1 -1
  62. package/dist/public/build/js/query-tracker.515069f6.chunk.js +2 -0
  63. package/dist/public/build/js/query-tracker.515069f6.chunk.js.map +1 -0
  64. package/dist/public/build/js/{runtime.481a6d3a.js → runtime.09217c31.js} +2 -2
  65. package/dist/public/build/js/{runtime.481a6d3a.js.map → runtime.09217c31.js.map} +1 -1
  66. package/dist/public/build/js/{scheduling.b70d4627.chunk.js → scheduling.6448eabd.chunk.js} +2 -2
  67. package/dist/public/build/js/{scheduling.b70d4627.chunk.js.map → scheduling.6448eabd.chunk.js.map} +1 -1
  68. package/dist/public/build/js/system.1114aa96.chunk.js +2 -0
  69. package/dist/public/build/js/system.1114aa96.chunk.js.map +1 -0
  70. package/dist/public/build/js/{yt-df-dialog.9ddda260.chunk.js → yt-df-dialog.4ad719bf.chunk.js} +2 -2
  71. package/dist/public/build/js/yt-df-dialog.4ad719bf.chunk.js.map +1 -0
  72. package/dist/public/build/manifest.json +70 -70
  73. package/dist/shared/constants/settings-types.d.ts +1 -0
  74. package/package.json +3 -2
  75. package/dist/public/build/css/job.c7c99207.chunk.css.map +0 -1
  76. package/dist/public/build/css/main.2d3cbfcd.css +0 -10
  77. package/dist/public/build/css/main.2d3cbfcd.css.map +0 -1
  78. package/dist/public/build/css/navigation.0a9042b3.chunk.css +0 -2
  79. package/dist/public/build/css/navigation.0a9042b3.chunk.css.map +0 -1
  80. package/dist/public/build/js/3724.425d01ec.chunk.js +0 -2
  81. package/dist/public/build/js/5177.b4cec253.chunk.js +0 -2
  82. package/dist/public/build/js/5177.b4cec253.chunk.js.map +0 -1
  83. package/dist/public/build/js/6729.da9aa02f.chunk.js +0 -2
  84. package/dist/public/build/js/6729.da9aa02f.chunk.js.map +0 -1
  85. package/dist/public/build/js/accounts.2ba221c2.chunk.js.map +0 -1
  86. package/dist/public/build/js/app-navigation.b062662b.chunk.js.map +0 -1
  87. package/dist/public/build/js/chyt.7f99f87d.chunk.js +0 -2
  88. package/dist/public/build/js/chyt.7f99f87d.chunk.js.map +0 -1
  89. package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js +0 -2
  90. package/dist/public/build/js/cluster-page-wrapper.894fbacc.chunk.js.map +0 -1
  91. package/dist/public/build/js/components.bbe331cb.chunk.js.map +0 -1
  92. package/dist/public/build/js/job.4fc50056.chunk.js +0 -2
  93. package/dist/public/build/js/job.4fc50056.chunk.js.map +0 -1
  94. package/dist/public/build/js/main.7981a440.js +0 -3
  95. package/dist/public/build/js/main.7981a440.js.map +0 -1
  96. package/dist/public/build/js/manage-tokens.286a4da9.chunk.js +0 -2
  97. package/dist/public/build/js/manage-tokens.286a4da9.chunk.js.map +0 -1
  98. package/dist/public/build/js/navigation.d891266d.chunk.js +0 -2
  99. package/dist/public/build/js/navigation.d891266d.chunk.js.map +0 -1
  100. package/dist/public/build/js/odin.df1cfe56.chunk.js +0 -2
  101. package/dist/public/build/js/odin.df1cfe56.chunk.js.map +0 -1
  102. package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js +0 -2
  103. package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js.map +0 -1
  104. package/dist/public/build/js/system.f759d3f0.chunk.js +0 -2
  105. package/dist/public/build/js/system.f759d3f0.chunk.js.map +0 -1
  106. package/dist/public/build/js/yt-df-dialog.9ddda260.chunk.js.map +0 -1
  107. /package/dist/public/build/js/{1879.23423388.chunk.js.LICENSE.txt → 1879.3975650a.chunk.js.LICENSE.txt} +0 -0
  108. /package/dist/public/build/js/{main.7981a440.js.LICENSE.txt → main.6375dbc6.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/6729.39d7cf60.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/ExpandIcon/ExpandIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/Pagination/Pagination.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/react.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ErrorBoundary/ErrorBoundary.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/getErrorMessage.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/Loader/Loader.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ChartKit.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/yagr/index.js","webpack://@ytsaurus/ui/./src/ui/components/YagrChartKit/YagrChartKit.tsx","webpack://@ytsaurus/ui/./src/ui/components/common/Datepicker/index.tsx","webpack://@ytsaurus/ui/./src/ui/containers/WaitForFont/WaitForFont.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/global-pool-trees.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/runtime.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/data-flow.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/specification/specification.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/alerts.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/selectors.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/operation.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs-monitor.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/detail.ts","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/error.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/index.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/utils.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/list.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/index.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Runtime/Runtime.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/PoolsWeightsEditModal/PoolsWeightsEditModal.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationProgress/OperationProgress.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListTable/OperationsListTable.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsTextFilter.js","webpack://@ytsaurus/ui/./src/ui/components/TimePicker/TimePicker.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsArchiveFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationSelectFilter/OperationSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsSelectFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListPaginator.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/operations-list.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsFilterPresets.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationSuggestFilter/OperationSuggestFilter.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListSuggestFilters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsListToolbar/OperationsListToolbar.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationsList/OperationsList.js","webpack://@ytsaurus/ui/./src/ui/components/YTHistogram/YTHistogram.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/partition-sizes/PartitionSizes/PartitionSizes.tsx","webpack://@ytsaurus/ui/./src/ui/components/AlertEvents/AlertEvents.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Description.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/resources/resourcesTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DataFlow/DataFlow.js","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleTable/CollapsibleTable.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/specification/specificationTablesProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Specification/Specification.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/DetailedJobsCounter/DetailedJobsCounter.js","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/details/tasks.js","webpack://@ytsaurus/ui/./src/ui/common/hammer/field-tree.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/statistics-v2.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Tasks/Tasks.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/details/Details/Details.js","webpack://@ytsaurus/ui/./src/ui/components/StarTrackLink/StarTrackLink.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/ExperimentAssignments/ExperimentAssignments.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/specification/Specification.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/job-sizes/JobSizes/JobSizes.tsx","webpack://@ytsaurus/ui/./src/ui/utils/operations/tabs/statistics/statisticsTableProps.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/statistics/OperationStatisticName.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/statistics/Statistics.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/statistics.js","webpack://@ytsaurus/ui/./src/ui/store/actions/operations/jobs.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsTable/JobTemplate.js","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/OperationJobsToolbar.js","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/OperationJobsErrors/OperationJobsErrors.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/Jobs/Jobs.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/operations/jobs-monitor.ts","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/JobsMonitor/JobsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/attributes/OperationAttributes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/tabs/monitor/OperationDetailsMonitor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/OperationDetail/OperationDetail.tsx","webpack://@ytsaurus/ui/./src/ui/pages/operations/Operations/Operations.js","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/global/fonts.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/chartkit-error/chartkit-error.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/mergeSettingStrategy.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/settings.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/eventEmitter.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/common.js","webpack://@ytsaurus/ui/./node_modules/fontfaceobserver/fontfaceobserver.standalone.js"],"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 React from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Pagination.scss';\nimport Button from '../Button/Button';\n\nconst paginationControlComponent = PropTypes.shape({\n handler: PropTypes.func,\n target: PropTypes.func,\n disabled: PropTypes.bool,\n hotkey: PropTypes.string,\n hotkeyScope: PropTypes.string,\n hotkeyHandler: PropTypes.func,\n}).isRequired;\n\nconst supportedSizes = ['s', 'm', 'l'];\nconst block = cn('elements-pagination');\n\nexport default class Pagination extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(supportedSizes),\n first: paginationControlComponent,\n previous: paginationControlComponent,\n next: paginationControlComponent,\n last: paginationControlComponent,\n tooltip: PropTypes.string,\n showInput: PropTypes.bool,\n inputValue: PropTypes.string,\n onChange: PropTypes.func,\n };\n static defaultProps = {\n size: 'm',\n showInput: false,\n };\n\n renderComponent(name, control) {\n const handler = control.handler;\n\n const disabled = typeof control.disabled === 'boolean' ? control.disabled : false;\n\n const {size, tooltip} = this.props;\n const hotkeySettings = [\n {\n keys: control.hotkey,\n scope: control.hotkeyScope,\n handler: control.hotkeyHandler,\n },\n ];\n\n return (\n <span title={tooltip}>\n <Button\n size={size}\n onClick={handler}\n disabled={disabled}\n className={block('control', {name})}\n title={\n {\n first: 'First page',\n previous: 'Previous page',\n next: 'Next page',\n last: 'Last page',\n }[name]\n }\n pin={\n {\n first: 'round-brick',\n previous: 'clear-brick',\n next: 'brick-clear',\n last: 'brick-round',\n }[name]\n }\n >\n <Icon\n awesome={\n {\n first: 'angle-double-left',\n previous: 'angle-left',\n next: 'angle-right',\n last: 'angle-double-right',\n }[name]\n }\n />\n </Button>\n {typeof control.hotkeyHandler !== 'undefined' && (\n <Hotkey settings={hotkeySettings} />\n )}\n </span>\n );\n }\n renderInput() {\n const {showInput, inputValue, onChange, size} = this.props;\n\n return showInput ? (\n <TextInput\n qa=\"yt-pagination_input\"\n size={size}\n type=\"text\"\n value={inputValue}\n onUpdate={onChange}\n pin={'clear-clear'}\n />\n ) : null;\n }\n render() {\n const {first, previous, next, last, className} = this.props;\n\n return (\n <div className={block(null, className)}>\n {this.renderComponent('first', first)}\n {this.renderComponent('previous', previous)}\n {this.renderInput()}\n {this.renderComponent('next', next)}\n {this.renderComponent('last', last)}\n </div>\n );\n }\n}\n","import React from 'react';\n// For some reason React.memo drops the generic prop type and creates a regular union type\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-542793243\nexport const typedMemo = React.memo;\n","import React from 'react';\nimport { CHARTKIT_ERROR_CODE } from '../../libs';\nimport { getErrorMessage } from '../../utils/getErrorMessage';\nexport class ErrorBoundary extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n error: undefined,\n };\n this.resetError = () => {\n if (this.state.error) {\n this.setState({ error: undefined });\n }\n };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch() {\n var _a, _b;\n const { error } = this.state;\n if (error) {\n (_b = (_a = this.props).onError) === null || _b === void 0 ? void 0 : _b.call(_a, { error });\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.data !== this.props.data) {\n const { error } = this.state;\n if (error && 'code' in error && error.code === CHARTKIT_ERROR_CODE.NO_DATA) {\n this.resetError();\n }\n }\n }\n render() {\n const { error } = this.state;\n if (error) {\n const message = getErrorMessage(error);\n if (this.props.renderError) {\n return this.props.renderError({\n error,\n message,\n resetError: this.resetError,\n });\n }\n return React.createElement(\"div\", null, message);\n }\n return this.props.children;\n }\n}\n","import { i18n } from '../i18n';\nexport function getErrorMessage(error) {\n const code = 'code' in error && error.code;\n return (error.message || code || i18n('error', 'label_unknown-error')).toString();\n}\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { Loader as BaseLoader } from '@gravity-ui/uikit';\nimport { block } from '../../utils/cn';\nimport './Loader.css';\nconst b = block('loader');\nexport const Loader = (_a) => {\n var { renderPluginLoader } = _a, props = __rest(_a, [\"renderPluginLoader\"]);\n const pluginLoader = renderPluginLoader === null || renderPluginLoader === void 0 ? void 0 : renderPluginLoader();\n // React.Suspense complains about possible undefined in \"fallback\" property\n if (typeof pluginLoader !== 'undefined') {\n return pluginLoader;\n }\n return (React.createElement(\"div\", { className: b() },\n React.createElement(BaseLoader, Object.assign({}, props))));\n};\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { i18n } from '../i18n';\nimport { CHARTKIT_ERROR_CODE, ChartKitError, settings } from '../libs';\nimport { getRandomCKId, typedMemo } from '../utils';\nimport { cn } from '../utils/cn';\nimport { ErrorBoundary } from './ErrorBoundary/ErrorBoundary';\nimport { Loader } from './Loader/Loader';\nimport './ChartKit.css';\nconst b = cn('chartkit');\nconst ChartKitComponent = (props) => {\n const widgetRef = React.useRef();\n const { instanceRef, id: propsId, type, isMobile, renderPluginLoader } = props, restProps = __rest(props, [\"instanceRef\", \"id\", \"type\", \"isMobile\", \"renderPluginLoader\"]);\n const ckId = React.useMemo(() => getRandomCKId(), []);\n const id = propsId || ckId;\n const lang = settings.get('lang');\n const plugins = settings.get('plugins');\n const plugin = plugins.find((iteratedPlugin) => iteratedPlugin.type === type);\n if (!plugin) {\n throw new ChartKitError({\n code: CHARTKIT_ERROR_CODE.UNKNOWN_PLUGIN,\n message: i18n('error', 'label_unknown-plugin', { type }),\n });\n }\n const ChartComponent = plugin.renderer;\n React.useImperativeHandle(instanceRef, () => ({\n reflow(details) {\n var _a;\n if ((_a = widgetRef.current) === null || _a === void 0 ? void 0 : _a.reflow) {\n widgetRef.current.reflow(details);\n }\n },\n }), []);\n return (React.createElement(React.Suspense, { fallback: React.createElement(Loader, { renderPluginLoader: renderPluginLoader }) },\n React.createElement(\"div\", { className: b({ mobile: isMobile }, 'chartkit-theme_common') },\n React.createElement(ChartComponent, Object.assign({ ref: widgetRef, id: id, lang: lang }, restProps)))));\n};\nconst ChartKitComponentWithErrorBoundary = React.forwardRef(function ChartKitComponentWithErrorBoundary(props, ref) {\n return (React.createElement(ErrorBoundary, { onError: props.onError, data: props.data, renderError: props.renderError },\n React.createElement(ChartKitComponent, Object.assign({ instanceRef: ref }, props))));\n}) /* https://stackoverflow.com/a/58473012 */;\nexport const ChartKit = typedMemo(ChartKitComponentWithErrorBoundary);\n","import { ChartKit } from './components/ChartKit';\nimport { settings } from './libs';\nexport * from './types/widget-data';\nexport * from './libs/chartkit-error/chartkit-error';\nexport { settings };\nexport default ChartKit;\n","import React from 'react';\nexport * from './types';\nexport const YagrPlugin = {\n type: 'yagr',\n renderer: React.lazy(() => import('./renderer/YagrWidget')),\n};\n","import ChartKit, {settings} from '@gravity-ui/chartkit';\nimport {YagrPlugin} from '@gravity-ui/chartkit/yagr';\nexport type {RawSerieData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';\n\nimport '@gravity-ui/yagr/dist/index.css';\n\nsettings.set({plugins: [YagrPlugin]});\n\nconst COLORS = ['rgb(77, 162, 241)', 'rgb(255, 61, 100)'];\n\nexport function getSerieColor(serieIndex: number) {\n return COLORS[serieIndex % COLORS.length];\n}\n\nexport default ChartKit;\n","import React, {FC} from 'react';\nimport {Datepicker, DatepickerProps, datepickerDefaultProps} from './Datepicker';\n\nexport * from './Datepicker';\n\nexport const DatePickerWrapper: FC<DatepickerProps> = (props) => <Datepicker {...props} />;\nDatePickerWrapper.defaultProps = datepickerDefaultProps;\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getFontFamilies} from '../../store/selectors/global/fonts';\nimport {waitForFontFamily} from '../../store/actions/global/fonts';\n\nexport function WaitForFont({children}: {children: React.ReactNode}) {\n const {regular, monospace} = useSelector(getFontFamilies);\n const [ready, setReady] = React.useState(false);\n React.useEffect(() => {\n Promise.all([waitForFontFamily(regular), waitForFontFamily(monospace)]).then(() =>\n setReady(true),\n );\n }, [regular, monospace]);\n\n return ready ? children : null;\n}\n","import React from 'react';\nimport {useDispatch} from 'react-redux';\n\nimport {loadPoolTreesIfNotLoaded} from '../store/actions/global';\nimport {loadDefaultPoolTree} from '../utils/poolTrees';\n\nexport function usePoolTreesLoaded() {\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n dispatch(loadPoolTreesIfNotLoaded());\n }, [dispatch]);\n}\n\nexport function PoolTreesLoader() {\n usePoolTreesLoaded();\n return null;\n}\n\nexport function useDefaultPoolTree() {\n const [defaultPoolTree, setDefaultPoolTree] = React.useState<string | undefined>();\n\n React.useEffect(() => {\n loadDefaultPoolTree().then((value) => {\n setDefaultPoolTree(value);\n });\n }, []);\n\n return defaultPoolTree;\n}\n\nexport function WaitForDefaultPoolTree({\n children,\n}: {\n children: ({defaultPoolTree}: {defaultPoolTree: string}) => React.ReactNode;\n}) {\n const defaultPoolTree = useDefaultPoolTree();\n\n return defaultPoolTree ? children({defaultPoolTree}) : null;\n}\n","import 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\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 };\n }\n } catch (err) {\n console.error('prepareScript error:', err);\n }\n\n return undefined;\n}\n\nfunction prepareTasks(operation: DetailedOperationSelector) {\n const tasks = ypath.getValue(operation, '/@spec/tasks');\n\n if (tasks) {\n return map_(keys_(tasks), (taskName) => prepareScript(operation, TASKS_PREFIX + taskName));\n }\n\n return undefined;\n}\n\nexport function prepareSpecification(\n operation: DetailedOperationSelector,\n userTransactionAlive: boolean,\n) {\n const remote = prepareRemote(operation);\n\n const specification = {\n startedBy: prepareStartedBy(operation),\n\n // Remote copy\n remote,\n transferTask: prepareTransferTask(operation),\n // Merge\n mode: ypath.getValue(operation, '/@spec/mode'),\n\n // Input/Intermediate/Output/Stderr\n input: prepareRemoteInput(prepareInput(operation, userTransactionAlive), remote?.cluster),\n output: prepareOutput(operation, userTransactionAlive),\n stderr: prepareStderr(operation, userTransactionAlive),\n intermediate: prepareIntermediate(operation),\n coredumps: prepareCoredumps(operation),\n\n // Scripts\n mapper: prepareScript(operation, 'mapper'),\n reducer: prepareScript(operation, 'reducer'),\n reduceCombiner: prepareScript(operation, 'reduce_combiner'),\n\n tasks: prepareTasks(operation),\n };\n\n return specification;\n}\n\nexport function prepareVisibleItems<T extends {isFolder?: boolean}>(items: Array<T>) {\n return filter_(items, (item) => !item.isFolder);\n}\n\nexport function filterVisibleItems<T extends {isFolder?: boolean}>(\n items: Array<T>,\n itemsCount: number,\n) {\n const result = [];\n let count = 0;\n\n for (const item of items) {\n if (!item.isFolder) {\n count++;\n }\n if (count === itemsCount + 1) {\n break;\n }\n\n result.push(item);\n }\n\n return result;\n}\n","import {docsUrl} from '../../../../config';\n\nimport map_ from 'lodash/map';\n\nimport UIFactory from '../../../../UIFactory';\n\nexport function prepareFaqUrl(type: string) {\n return docsUrl(UIFactory.docsUrls['faq:alert_type'] + type.replace(/_/g, ''));\n}\n\nexport function prepareAlerts(alerts?: Record<string, unknown>) {\n if (alerts) {\n return map_(alerts, (error, type) => ({\n error: error,\n helpURL: prepareFaqUrl(type),\n }));\n }\n\n return undefined;\n}\n","import map_ from 'lodash/map';\n\nimport moment from 'moment';\n\nimport ypath from '../../common/thor/ypath';\nimport hammer from '../../common/hammer';\nimport {createSelector} from 'reselect';\nimport {remoteInputUrl} from '../../utils/operations/tabs/details/specification/specification';\nimport {FIX_MY_TYPE} from '../../types';\nimport {RootState} from '../../store/reducers';\n\ninterface OperationPool {\n tree: string;\n pool: string;\n isEphemeral: boolean;\n slotIndex?: number;\n weight?: number;\n}\n\nexport class OperationSelector implements Record<string, any> {\n static PREPARING_STATES = ['materializing', 'initializing', 'preparing', 'pending'] as const;\n\n static RUNNING_STATES = ['running', 'completing', 'failing', 'aborting', 'reviving'] as const;\n\n static INTERMEDIATE_STATES = [\n ...OperationSelector.RUNNING_STATES,\n ...OperationSelector.PREPARING_STATES,\n ];\n\n id: string;\n $value: string;\n $attributes: any;\n state: (typeof OperationSelector.INTERMEDIATE_STATES)[0] | 'completed' | 'failed' | 'aborted';\n pools: Array<OperationPool> = [];\n\n constructor(data: any) {\n const {id, ...attributes} = data;\n this.$value = id;\n this.id = id;\n this.$attributes = attributes;\n\n this.state = ypath.getValue(attributes, '/state');\n }\n\n isRunning() {\n return OperationSelector.RUNNING_STATES.indexOf(this.state as any) !== -1;\n }\n\n isPreparing() {\n return OperationSelector.PREPARING_STATES.indexOf(this.state as any) !== -1;\n }\n\n inIntermediateState() {\n return OperationSelector.INTERMEDIATE_STATES.indexOf(this.state as any) !== -1;\n }\n\n successfullyCompleted() {\n return this.state === 'completed';\n }\n\n computePools(attributes: any, orchidAttributes?: any) {\n const trees = ypath.getValue(\n attributes,\n '/runtime_parameters/scheduling_options_per_pool_tree',\n );\n const poolsIndexes = ypath.getValue(attributes, '/slot_index_per_pool_tree') || {};\n\n this.pools = map_(trees, (schedulingInfo, name) => {\n const tree = name;\n const pool = schedulingInfo.pool;\n const isEphemeral = orchidAttributes?.[tree]?.[pool]?.isEphemeral || false;\n\n return {\n tree,\n pool,\n isEphemeral,\n slotIndex: poolsIndexes[name],\n weight: schedulingInfo.weight || 1,\n };\n });\n }\n}\n\nexport type OperationPreviewType = 'input' | 'output' | 'stderr' | 'intermediate' | 'core';\n\nexport class ListOperationSelector extends OperationSelector {\n weight?: number;\n title?: string;\n type?: string;\n user?: string;\n suspended?: boolean;\n\n input?: IOProperties;\n output?: IOProperties;\n\n startTime?: string;\n finishTime?: string;\n duration?: number;\n\n jobs?: any;\n\n completedJobs?: number;\n runningJobs?: number;\n failedJobs?: number;\n totalJobs?: number;\n completedJobsProgress?: number;\n runningJobsProgress?: number;\n jobsProgress?: number;\n\n constructor(data: any) {\n super(data);\n\n const attributes = this.$attributes;\n\n const briefSpec = ypath.getValue(attributes, '/brief_spec');\n\n this.title = ypath.getValue(briefSpec, '/title');\n this.type = ypath.getValue(attributes, '/type');\n this.user = ypath.getValue(attributes, '/authenticated_user');\n this.suspended = ypath.getValue(attributes, '/suspended');\n\n const cluster =\n this.type === 'remote_copy' ? ypath.get(this, '/@brief_spec/cluster_name') : undefined;\n\n this.input = this.computeIOProperties(briefSpec, 'input', cluster);\n this.output = this.computeIOProperties(briefSpec, 'output');\n\n this.computePools(attributes);\n if (this.pools.length === 1) {\n this.weight = this.pools[0].weight;\n }\n\n this.startTime = ypath.getValue(attributes, '/start_time');\n this.finishTime = ypath.getValue(attributes, '/finish_time');\n this.duration = (moment(this.finishTime) as any) - (moment(this.startTime) as any);\n\n const progress = ypath.getValue(attributes, '/brief_progress');\n const jobs = (this.jobs = ypath.getValue(progress, '/jobs'));\n\n if (typeof jobs !== 'undefined') {\n this.completedJobs =\n typeof jobs.completed === 'object' ? jobs.completed.total : jobs.completed;\n this.runningJobs = jobs.running;\n this.failedJobs = jobs.failed;\n this.totalJobs = jobs.total;\n this.completedJobsProgress = (this.completedJobs! / this.totalJobs!) * 100;\n this.runningJobsProgress = (this.runningJobs! / this.totalJobs!) * 100;\n this.jobsProgress = this.completedJobsProgress + this.runningJobsProgress;\n }\n }\n\n computeIOProperties(spec: any, type: string, cluster?: string) {\n const io = ypath.get(spec, '/' + type + '_table_paths');\n\n const res = {\n count: ypath.getValue(io, '/@count'),\n table: ypath.getValue(io, '/0'),\n url: undefined as undefined | string,\n remote: undefined as undefined | boolean,\n };\n\n if (cluster) {\n res.url = remoteInputUrl(cluster, res.table);\n res.remote = true;\n }\n\n return res;\n }\n}\n\nexport interface IOProperties {\n count: number;\n table: string;\n url?: string;\n remote?: boolean;\n}\n\nexport class DetailedOperationSelector extends OperationSelector {\n $typedAttributes: unknown;\n $orchidAttributes: unknown;\n\n alias?: string;\n\n type?: string;\n user?: string;\n suspended?: boolean;\n\n startTime?: string;\n finishTime?: string;\n duration?: number;\n\n jobs?: any;\n\n completedJobs?: number;\n runningJobs?: number;\n failedJobs?: number;\n totalJobs?: number;\n completedJobsProgress?: number;\n runningJobsProgress?: number;\n jobsProgress?: number;\n\n totalFailedJobs?: number;\n failedJobsProgress?: number;\n\n description?: string;\n title?: string;\n\n typedSpec?: any;\n typedProvidedSpec?: any;\n typedFullSpec?: any;\n typedUnrecognizedSpec?: any;\n\n live_preview: unknown;\n\n constructor(data: any, typedData: unknown, orchidData: unknown) {\n super(data);\n\n this.$typedAttributes = typedData;\n this.$orchidAttributes = orchidData;\n\n const attributes = this.$attributes;\n const typedAttributes = this.$typedAttributes;\n const orchidAttributes = this.$orchidAttributes;\n\n const spec = ypath.getValue(attributes, '/spec');\n const fullSpec = ypath.getValue(attributes, '/full_spec');\n\n this.alias = ypath.getValue(spec, '/alias');\n\n this.typedSpec = ypath.getValue(typedAttributes, '/spec');\n this.typedProvidedSpec = ypath.getValue(typedAttributes, '/provided_spec');\n this.typedFullSpec = ypath.getValue(typedAttributes, '/full_spec');\n this.typedUnrecognizedSpec = ypath.getValue(typedAttributes, '/unrecognized_spec');\n\n this.title = ypath.getValue(spec, '/title');\n\n const runtimeAnnotations = ypath.getValue(attributes, '/runtime_parameters/annotations');\n this.description = ypath.getValue(runtimeAnnotations, '/description');\n // TODO: get rid of the following string when all cluster are updated to 20.1 version\n this.description = this.description || ypath.getValue(spec, '/description');\n\n this.type =\n ypath.getValue(attributes, '/operation_type') || ypath.getValue(attributes, '/type');\n this.user = ypath.getValue(attributes, '/authenticated_user');\n this.suspended = ypath.getValue(attributes, '/suspended');\n\n this.startTime = ypath.getValue(attributes, '/start_time');\n this.finishTime = ypath.getValue(attributes, '/finish_time');\n\n this.duration = (moment(this.finishTime) as any) - (moment(this.startTime) as any);\n\n this.computePools(attributes, orchidAttributes);\n\n const progress = ypath.getValue(attributes, '/progress');\n const jobs = (this.jobs = ypath.getValue(progress, '/jobs'));\n\n if (typeof jobs !== 'undefined') {\n this.completedJobs =\n typeof jobs.completed === 'object' ? jobs.completed.total : jobs.completed;\n this.runningJobs = jobs.running;\n this.totalJobs = jobs.total;\n this.completedJobsProgress = (this.completedJobs! / this.totalJobs!) * 100;\n this.runningJobsProgress = (this.runningJobs! / this.totalJobs!) * 100;\n this.jobsProgress = this.completedJobsProgress + this.runningJobsProgress;\n\n this.failedJobs = jobs.failed;\n if (fullSpec) {\n this.totalFailedJobs = ypath.getValue(fullSpec, '/max_failed_job_count');\n }\n this.failedJobsProgress = this.totalFailedJobs\n ? (this.failedJobs! / this.totalFailedJobs) * 100\n : 0;\n }\n\n this.live_preview = ypath.getValue(progress, '/live_preview');\n }\n\n getLivePreviewPath(\n type: OperationPreviewType,\n index?: number | string,\n ): {path?: string; virtualPath?: string} {\n const hasVirtualPath = ypath.getBoolean(\n this.live_preview,\n `/virtual_table_format/${type}_supported`,\n ) as boolean;\n\n const hasPath = hasVirtualPath\n ? false\n : (ypath.getBoolean(this.live_preview, `/${type}_supported`) as boolean);\n\n const suffix = hasVirtualPath ? '/controller_orchid/live_previews' : '';\n const basePath = `//sys/operations/${hammer.utils.extractFirstByte(this.id)}/${\n this.id\n }${suffix}`;\n\n switch (type) {\n case 'output':\n return makeLivePreview(`${basePath}/output_${index || 0}`, hasVirtualPath, hasPath);\n case 'stderr':\n return makeLivePreview(`${basePath}/stderr`, hasVirtualPath, hasPath);\n case 'intermediate':\n return makeLivePreview(`${basePath}/intermediate`, hasVirtualPath, hasPath);\n case 'core':\n return hasVirtualPath\n ? makeLivePreview(`${basePath}/core`, hasVirtualPath, false)\n : {};\n }\n\n return {};\n }\n}\n\nfunction makeLivePreview(path: string, hasVirtualPath: boolean, hasPath: boolean) {\n return hasVirtualPath ? {virtualPath: path} : {path: hasPath ? path : undefined};\n}\n\nexport function getCounters(name: string, states: FIX_MY_TYPE, rawCounters: FIX_MY_TYPE) {\n const counters: FIX_MY_TYPE = ypath.getValue(rawCounters, `/${name}_counts`);\n\n return hammer.filter.countCategoriesNG({\n items: map_(counters, (count, value) => ({count, value})),\n categories: hammer.filter.flattenCategoriesNG(states, 'name'),\n custom: (item: {value: string; count: number}, counters: Record<string, number>) => {\n counters[item.value] += item.count;\n counters['all'] += item.count;\n },\n });\n}\n\nexport function getActualValue<T>(value: T | undefined, defaultValue?: T) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport function getFilterValue(name: string) {\n return (state: RootState) => {\n const {value, defaultValue} = state.operations.jobs.filters[name];\n\n return getActualValue(value, defaultValue);\n };\n}\n\nexport function getFilteredAttributes(attributeNames: Array<string>) {\n return (state: RootState) => {\n return attributeNames.filter((name) => getFilterValue(name)(state));\n };\n}\n\nexport const getShowCompetitiveJobs = createSelector(\n [getFilterValue('filterBy'), getFilterValue('jobId')],\n (filterBy, jobId) => {\n return filterBy === 'id' && Boolean(jobId);\n },\n);\n","export function isOperationId(value) {\n const idSection = '[0-9a-fA-F]{1,8}';\n const idRegexp = new RegExp(`^${idSection}-${idSection}-${idSection}-${idSection}$`);\n return idRegexp.test(value);\n}\n\nexport function isGotoEnabled(value) {\n const aliasRegexp = new RegExp('^\\\\*[0-9a-zA-Z_-]+$');\n return isOperationId(value) || aliasRegexp.test(value);\n}\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport {RootState} from '../../../store/reducers';\nimport ypath from '../../../common/thor/ypath';\nimport {AlertInfo} from '../../../components/AlertEvents/AlertEvents';\nimport {calculateLoadingStatus} from '../../../utils/utils';\nimport {FIX_MY_TYPE} from '../../../types';\nimport {prepareFaqUrl} from '../../../utils/operations/tabs/details/alerts';\n\nconst getOperationErasedTreesRaw = (state: RootState) => {\n return ypath.getValue(state.operations.detail, '/operation/@runtime_parameters/erased_trees');\n};\n\nexport const getOperationErasedTrees = createSelector(\n [getOperationErasedTreesRaw],\n (rawTrees: Array<unknown>) => {\n return reduce_(\n rawTrees,\n (acc, item) => {\n const poolTree = ypath.getValue(item);\n acc[poolTree] = true;\n return acc;\n },\n {} as {[poolTree: string]: boolean},\n );\n },\n);\n\ninterface OperationTask {\n task_name: string;\n}\n\nconst getOperationAlertEventsImpl = (state: RootState) =>\n state.operations.detail.details.alert_events;\n\nexport const getOperationAlertEvents = createSelector([getOperationAlertEventsImpl], (items) => {\n const appeared: Record<string, AlertInfo> = {};\n return reduce_(\n items,\n (acc, item) => {\n const type = ypath.getValue(item.alert_type);\n const code = ypath.getNumberDeprecated(item, '/error/code', NaN);\n if (!code && appeared[type]) {\n const last = appeared[type];\n last.to = ypath.getValue(item.time);\n delete appeared[type];\n } else if (code) {\n acc.push({\n from: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n appeared[type] = acc[acc.length - 1];\n } else {\n acc.push({\n to: ypath.getValue(item.time),\n type,\n error: item.error,\n url: prepareFaqUrl(type),\n });\n }\n return acc;\n },\n [] as Array<AlertInfo>,\n );\n});\n\nexport const getOperation = (state: RootState) => state.operations.detail.operation;\nexport const getOperationId = (state: RootState) =>\n ypath.getValue(state.operations.detail.operation);\nexport const getOperationTasks = createSelector(\n [getOperation],\n (operation): Array<OperationTask> | undefined => {\n return ypath.getValue(operation, '/@progress/tasks');\n },\n);\nexport const getOperationTasksNames = createSelector(\n [getOperationTasks],\n (tasks?: Array<{task_name: string}>) => {\n return map_(tasks, 'task_name').sort();\n },\n);\n\nexport const getOperationDetailsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.detail as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const getOperationTypedAttributes = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).$typedAttributes;\n\nexport const getOperationMonitorChartStates = (state: RootState) =>\n state.operations.detail.monitorChartStates;\n\nexport const getOperationPools = (state: RootState) =>\n (state.operations.detail.operation as FIX_MY_TYPE).pools;\n\nexport const getOperationPoolNames = createSelector([getOperationPools], (pools): Array<string> => {\n return map_(pools, 'pool');\n});\n\nexport const getOperationsMonitorChartStatesFinishedCount = createSelector(\n [getOperationMonitorChartStates],\n (states) => {\n return reduce_(\n states,\n (acc, value) => {\n return value ? acc + 1 : acc;\n },\n 0,\n );\n },\n);\n\nexport const getOperationJobsLoadingStatus = createSelector(\n [\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loading,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).loaded,\n (state: RootState) => (state.operations.jobs as FIX_MY_TYPE).error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport interface OperationExperimentItem {\n experiment: string;\n group: string;\n ticket: string;\n dimension: string;\n effect: unknown;\n}\n\nexport const getOperationExperimentAssignments = createSelector(\n [getOperation],\n (operation): Array<OperationExperimentItem> => {\n return ypath.getValue(operation, '/@experiment_assignments');\n },\n);\n\nconst getOperationMonitoredJobCount = createSelector([getOperation], (operation) => {\n const res = ypath.getNumberDeprecated(\n operation,\n '/@brief_progress/registered_monitoring_descriptor_count',\n );\n return res;\n});\n\nexport const getOperationJobsMonitorTabSettings = createSelector(\n [getOperationMonitoredJobCount],\n (jobsCount) => {\n const maxJobCount = 200;\n return {visible: jobsCount > 0 && jobsCount <= maxJobCount, maxJobCount};\n },\n);\n","import {JOBS_MONITOR} from '../../../constants/operations/detail';\nimport {ThunkAction} from 'redux-thunk';\nimport {YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RootState} from '../../../store/reducers';\nimport {JobsMonitorAction} from '../../../store/reducers/operations/jobs/jobs-monitor';\nimport {getOperationJobsMonitorTabSettings} from '../../../store/selectors/operations/operation';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\n\ntype JobsMonitorThunkAction = ThunkAction<unknown, RootState, unknown, JobsMonitorAction>;\n\nconst cancelHerlper = new CancelHelper();\n\nexport function getJobsMonitoringDescriptors(operation_id: string): JobsMonitorThunkAction {\n return (dispatch, getState) => {\n const {visible, maxJobCount} = getOperationJobsMonitorTabSettings(getState());\n if (!visible) {\n return undefined;\n }\n\n dispatch({type: JOBS_MONITOR.REQUEST});\n\n return ytApiV3Id\n .listJobs(YTApiId.listJobs100, {\n parameters: {operation_id, limit: maxJobCount, with_monitoring_descriptor: true},\n cancellation: cancelHerlper.removeAllAndSave,\n })\n .then(({jobs}) => {\n dispatch({type: JOBS_MONITOR.SUCCESS, data: {jobs, operation_id}});\n })\n .catch((error) => {\n if (isCancelled(error)) {\n dispatch({type: JOBS_MONITOR.CANCELLED});\n return;\n }\n\n dispatch({type: JOBS_MONITOR.FAILURE, data: {error}});\n });\n };\n}\n","import mapValues_ from 'lodash/mapValues';\nimport ypath from '../../../common/thor/ypath';\n\nimport {\n prepareCompletedUsage,\n prepareIntermediateUsage,\n} from '../../../utils/operations/tabs/details/data-flow';\nimport {prepareSpecification} from '../../../utils/operations/tabs/details/specification/specification';\nimport {prepareOperationEvents} from '../../../utils/operations/tabs/details/events/events';\nimport {prepareRuntime} from '../../../utils/operations/tabs/details/runtime';\nimport {prepareAlerts} from '../../../utils/operations/tabs/details/alerts';\nimport {prepareError} from '../../../utils/operations/tabs/details/error';\n\nimport {GET_OPERATION, LOAD_RESOURCE_USAGE} from '../../../constants/operations/detail';\nimport {DetailedOperationSelector} from '../../../pages/operations/selectors';\nimport {checkUserTransaction, prepareActions} from '../../../utils/operations/detail';\nimport {prepareAttributes} from '../../../utils';\nimport {showErrorPopup} from '../../../utils/utils';\nimport {isOperationId} from '../../../utils/operations/list';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\nimport {Toaster} from '@gravity-ui/uikit';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {YTErrors} from '../../../rum/constants';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {getJobsMonitoringDescriptors} from '../../../store/actions/operations/jobs-monitor';\n\nimport type {RootState} from './../../../store/reducers';\nimport type {ThunkAction} from 'redux-thunk';\nimport type {OperationDetailActionType} from '../../reducers/operations/detail';\n\nconst toaster = new Toaster();\nconst operationDetailsRequests = new CancelHelper();\n\nfunction getIsEphemeral([operationAttributes, userTransactionAlive]: Awaited<\n ReturnType<typeof checkUserTransaction>\n>) {\n const treesInfo = ypath.get(\n operationAttributes,\n '/runtime_parameters/scheduling_options_per_pool_tree',\n );\n const trees = Object.keys(treesInfo);\n const poolPaths = Object.values(\n mapValues_(\n treesInfo,\n (infoPerTree, tree) =>\n `${tree}/pools/${ypath.getValue(infoPerTree, '/pool')}/is_ephemeral`,\n ),\n );\n const requests = poolPaths.map((path) => {\n return {\n command: 'get' as const,\n parameters: {\n path: '//sys/scheduler/orchid/scheduler/pool_trees/' + path,\n },\n };\n });\n const orchidAttributes = ytApiV3Id\n .executeBatch(YTApiId.operationIsEphemeral, {requests})\n .then((data) =>\n data.map(({error, output}) =>\n error\n ? ypath.getNumberDeprecated(error.code) === YTErrors.NODE_DOES_NOT_EXIST\n : output,\n ),\n )\n .then((res) =>\n res.reduce(\n (acc, poolInfo, index) => {\n const tree = trees[index];\n const pool = ypath.getValue(treesInfo[tree], '/pool');\n const isEphemeral = ypath.getBoolean(poolInfo);\n\n acc[tree] = {\n [pool]: {isEphemeral},\n };\n\n return acc;\n },\n {} as Record<string, {isEphemeral: boolean}>,\n ),\n );\n\n return Promise.all([operationAttributes, userTransactionAlive, orchidAttributes]);\n}\n\nfunction loadIntermediateResourceUsage(\n operation: unknown,\n callback: () => void,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return async (dispatch) => {\n const outputTransaction = ypath.get(operation, '/@output_transaction_id');\n\n if (outputTransaction && outputTransaction !== '0-0-0-0') {\n dispatch({type: LOAD_RESOURCE_USAGE.REQUEST});\n\n return ytApiV3Id\n .get(YTApiId.operationIntermediateResourceUsage, {\n path: '#' + outputTransaction + '/@resource_usage',\n })\n .then((resources) => {\n callback();\n\n const intermediateResources = prepareIntermediateUsage(operation, resources);\n\n dispatch({\n type: LOAD_RESOURCE_USAGE.SUCCESS,\n data: {resources, intermediateResources},\n });\n })\n .catch(() => {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.FAILURE});\n });\n } else {\n callback();\n dispatch({type: LOAD_RESOURCE_USAGE.CANCELLED});\n }\n };\n}\n\nexport function getOperation(\n id: string,\n): ThunkAction<Promise<void>, RootState, unknown, OperationDetailActionType> {\n return (dispatch, getState) => {\n const isAlias = !isOperationId(id);\n\n const params = Object.assign(\n {include_scheduler: true, output_format: TYPED_OUTPUT_FORMAT},\n isAlias ? {operation_alias: id} : {operation_id: id},\n );\n\n dispatch({type: GET_OPERATION.REQUEST, data: {isAlias, id}});\n\n return ytApiV3\n .getOperation(params, operationDetailsRequests)\n .then(checkUserTransaction)\n .then(getIsEphemeral)\n .then(([operationAttributes, userTransactionAlive, orchidAttributes]) => {\n const preparedAttributes = prepareAttributes(operationAttributes);\n const operation = new DetailedOperationSelector(\n preparedAttributes,\n operationAttributes,\n orchidAttributes,\n );\n\n const dispatchOperationSuccess = () => {\n const actions = prepareActions(operation);\n\n const specification = prepareSpecification(operation, userTransactionAlive);\n const alerts = prepareAlerts(ypath.getValue(operation, '/@alerts'));\n const alert_events = ypath.getValue(operation, '/@alert_events');\n const error = prepareError(operation);\n const runtime = prepareRuntime(operation);\n const events = prepareOperationEvents(operation);\n const resources = prepareCompletedUsage(operation);\n\n const details = {\n specification,\n alerts,\n alert_events,\n error,\n runtime,\n events,\n resources,\n };\n\n dispatch({\n type: GET_OPERATION.SUCCESS,\n data: {operation, actions, details},\n });\n\n dispatch(getJobsMonitoringDescriptors(id));\n };\n\n if (operation.inIntermediateState()) {\n dispatch(loadIntermediateResourceUsage(operation, dispatchOperationSuccess));\n } else {\n dispatchOperationSuccess();\n }\n })\n .catch((error) => {\n const {operations} = getState();\n const isFirstLoading = !operations.detail.loaded;\n\n if (error.code !== YTErrors.CANCELLED) {\n if (!isFirstLoading) {\n toaster.add({\n name: 'get operation',\n autoHiding: false,\n theme: 'danger',\n title: 'Failed to load operation',\n content: error.message,\n actions: [{label: ' view', onClick: () => showErrorPopup(error)}],\n });\n }\n\n dispatch({\n type: GET_OPERATION.FAILURE,\n data: {\n message: `Error occured when loading operation \"${id}\"`,\n details: error,\n },\n });\n }\n });\n };\n}\n","import ypath from '../../../../common/thor/ypath';\n\nexport function prepareError(operation) {\n if (operation.state === 'aborted' || operation.state === 'failed') {\n return ypath.getValue(operation, '/@result');\n }\n}\n","import {createSelector} from 'reselect';\nimport {\n getAllPoolNames,\n getAllPoolTreeNames,\n getAllUserNames,\n getCluster,\n getClusterConfigByName,\n getCurrentUserName,\n} from '../../../store/selectors/global';\n\nimport concat_ from 'lodash/concat';\nimport filter_ from 'lodash/filter';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport some_ from 'lodash/some';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {RootState} from '../../reducers';\nimport {OperationsListFilterValue} from '../../reducers/operations/list/list';\n\nexport const getOperationsListFilters = (state: RootState) => state.operations.list.filters;\nexport const getOperationsPoolFilterData = (state: RootState) =>\n getOperationsListFilters(state)['pool'];\nexport const getOperationsUserFilterData = (state: RootState) =>\n getOperationsListFilters(state)['user'];\nexport const getOperationsPoolTreeRawCounters = (state: RootState) =>\n state.operations.list.filters.poolTree.counters?.pool_tree_counts || {};\nexport const getOperationsPoolRawCounters = (state: RootState) =>\n getOperationsPoolFilterData(state).counters?.pool_counts || {};\nexport const getOperationsUserRawCounter = (state: RootState) =>\n getOperationsUserFilterData(state).counters?.user_counts || {};\n\nexport const getOperationsPoolTreeCountersItems = createSelector(\n [getOperationsPoolTreeRawCounters],\n convertCountersToItems,\n);\n\nexport const getOperationsPoolTreeItemsWithoutCounter = createSelector(\n [getAllPoolTreeNames, getOperationsPoolTreeRawCounters],\n (f, s) => {\n return calculateItemsWithoutCounter(f, s);\n },\n);\n\nexport const getOperationsPoolTreeSuggestions = createSelector(\n [getOperationsPoolTreeCountersItems, getOperationsPoolTreeItemsWithoutCounter],\n concat_,\n);\n\nexport const getOperationsPoolCountersItems = createSelector(\n [getOperationsPoolRawCounters],\n convertCountersToItems,\n);\n\nexport const getOperationsPoolItemsWithoutCounter = createSelector(\n [getAllPoolNames, getOperationsPoolRawCounters],\n calculateItemsWithoutCounter,\n);\n\nexport const getOperationsPoolSuggestions = createSelector(\n [getOperationsPoolCountersItems, getOperationsPoolItemsWithoutCounter],\n concat_,\n);\n\nexport const getOperationsUserCountersItems = createSelector(\n [getOperationsUserRawCounter],\n convertCountersToItems,\n);\n\nexport const getOperationsUserItemsWithoutCounter = createSelector(\n [getAllUserNames, getOperationsUserRawCounter],\n calculateItemsWithoutCounter,\n);\n\nexport const getOperationsUserSuggestions = createSelector(\n [getOperationsUserCountersItems, getOperationsUserItemsWithoutCounter],\n concat_,\n);\n\nfunction convertCountersToItems(counters: Record<string, number>) {\n return sortBy_(\n map_(counters, (count, pool) => ({\n value: pool,\n text: pool,\n counter: count,\n })),\n 'text',\n );\n}\n\nfunction calculateItemsWithoutCounter(\n allNames: Array<string>,\n countersMap: Record<string, number>,\n) {\n return sortBy_(\n map_(\n filter_(allNames, (name) => countersMap[name] === undefined),\n (name) => ({value: name, text: name}),\n ),\n 'text',\n );\n}\n\nexport const ATTRIBUTE_ITEMS = [\n {\n value: 'withStderr',\n text: 'With stderr',\n },\n {\n value: 'withFailContext',\n text: 'With fail context',\n },\n {\n value: 'withSpec',\n text: 'With full input',\n },\n {\n value: 'withCompetitors',\n text: 'With competitive jobs',\n },\n {\n value: 'withMonitoringDescriptor',\n text: 'With monitoring descriptor',\n },\n];\nexport const ATTRIBUTE_ITEM_NAMES = map_(ATTRIBUTE_ITEMS, ({value}) => value);\n\nexport const getOperationsListFilterParameters = createSelector(\n [getOperationsListFilters],\n (filters) => {\n const {text, user, subject, permissions, pool, poolTree, state, type, failedJobs} = filters;\n\n const actualSubject = getValueIfNotDefault(subject);\n const actualPermissions = getValueIfNotDefault(permissions) as string;\n const access =\n actualSubject || actualPermissions?.length > 0\n ? {subject: actualSubject, permissions: actualPermissions || []}\n : undefined;\n\n const res = {\n filter: getValueIfNotDefault(text),\n user: getValueIfNotDefault(user),\n pool: getValueIfNotDefault(pool),\n pool_tree: getValueIfNotDefault(poolTree),\n type: getValueIfNotDefault(type),\n with_failed_jobs: getValueIfNotDefault(failedJobs),\n access,\n };\n return {\n state: getValueIfNotDefault(state),\n ...res,\n };\n },\n);\n\nexport function getOperationsListTimeRange(state: RootState) {\n const {from, to} = state.operations.list.timeRange;\n\n return {\n to_time: to,\n from_time: from,\n };\n}\n\nexport const getOperationsListFiltersParameters_FOR_YTFRONT_2838 = createSelector(\n [getOperationsListFilterParameters, getCurrentUserName, getOperationsListTimeRange, getCluster],\n (filters, login, {from_time, to_time}, cluster) => {\n const clusterConfig = getClusterConfigByName(cluster);\n\n if (clusterConfig.operationPageSettings?.disableOptimizationForYTFRONT2838) {\n return filters;\n }\n\n const {state, ...rest} = filters;\n if (Boolean(from_time || to_time) && !some_(rest, Boolean)) {\n rest.user = login;\n }\n return {\n state,\n ...rest,\n };\n },\n);\n\nexport const getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838 = createSelector(\n [getOperationsListFilterParameters, getOperationsListFiltersParameters_FOR_YTFRONT_2838],\n (filters, fixedFilters) => {\n if (isEqual_(filters, fixedFilters)) {\n return undefined;\n }\n return fixedFilters.user;\n },\n);\n\nexport function getValueIfNotDefault(filter: OperationsListFilterValue) {\n return filter.value === filter.defaultValue ? undefined : filter.value;\n}\n","import moment from 'moment';\n\nimport {EXTRA_JOBS_COUNT, OPERATION_JOBS_TABLE_ID} from '../../../constants/operations/jobs';\nimport {OPERATIONS_DATA_MODE} from '../../../constants/operations';\nimport {\n getOperationsListFiltersParameters_FOR_YTFRONT_2838,\n getOperationsListTimeRange,\n getValueIfNotDefault,\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\n// Operation Jobs\n\nfunction getJobFilterParameters(filters, sortState) {\n const filterBy = filters.filterBy.value || filters.filterBy.defaultValue;\n return {\n state: getValueIfNotDefault(filters.state),\n type: getValueIfNotDefault(filters.type),\n address: filterBy === 'address' ? getValueIfNotDefault(filters.address) : undefined,\n with_stderr: getValueIfNotDefault(filters.withStderr),\n with_monitoring_descriptor: getValueIfNotDefault(filters.withMonitoringDescriptor),\n with_fail_context: getValueIfNotDefault(filters.withFailContext),\n with_spec: getValueIfNotDefault(filters.withSpec),\n with_competitors: getValueIfNotDefault(filters.withCompetitors),\n sort_field: sortState.field || 'none',\n sort_order: sortState.asc ? 'ascending' : 'descending',\n task_name: getValueIfNotDefault(filters.taskName),\n };\n}\n\nfunction preparePaginationQuery({offset, limit}) {\n return {\n offset: Math.max(0, offset),\n limit: limit + EXTRA_JOBS_COUNT,\n };\n}\n\nexport function getJobRequestParameters({operations}) {\n const {operation} = operations.detail;\n const {filters} = operations.jobs;\n return {\n operation_id: operation.$value,\n job_id: filters.jobId.value,\n };\n}\nexport function getCompetitiveJobsRequestParameters({operations, tables}) {\n const {operation} = operations.detail;\n const {job} = operations.jobs;\n const sortState = tables[OPERATION_JOBS_TABLE_ID];\n return {\n operation_id: operation.$value,\n job_competition_id: job.jobCompetitionId,\n sort_field: sortState.field || 'none',\n sort_order: sortState.asc ? 'ascending' : 'descending',\n };\n}\n\nexport function getJobsRequestParameters({operations, tables}) {\n const {operation} = operations.detail;\n const {filters, pagination} = operations.jobs;\n const sortState = tables[OPERATION_JOBS_TABLE_ID];\n\n return {\n operation_id: operation.$value,\n data_source: filters.dataSource.value,\n // following options have no use unless dataSource is 'manual' which we don't support yet\n /*\n include_archive: true,\n include_cypress: true,\n include_runtime: true\n */\n // prepareSortQuery(),\n ...getJobFilterParameters(filters, sortState),\n ...preparePaginationQuery(pagination),\n };\n}\n","import map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport moment from 'moment';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../common/thor/ypath';\nimport hammer from '../../../common/hammer';\nimport {\n APPLY_FILTER_PRESET,\n DEFAULT_PRESET_SETTING,\n OPERATIONS_CURSOR_DIRECTION,\n OPERATIONS_DATA_MODE,\n OPERATIONS_PAGE,\n RESET_TIME_RANGE,\n SET_OPERATIONS_DATA_MODE,\n TOGGLE_SAVE_FILTER_PRESET_DIALOG,\n UPDATE_CURSOR,\n UPDATE_FILTER,\n UPDATE_FILTER_COUNTERS,\n UPDATE_OPERATIONS_CANCELLED,\n UPDATE_OPERATIONS_FAILURE,\n UPDATE_OPERATIONS_REQUEST,\n UPDATE_OPERATIONS_SUCCESS,\n UPDATE_SAVE_FILTER_PRESET_DIALOG,\n} from '../../../constants/operations';\nimport {ListOperationSelector} from '../../../pages/operations/selectors';\nimport {removeSetting, setSetting} from '../../../store/actions/settings';\nimport {\n getDefaultFromTime,\n getDefaultToTime,\n getListRequestParameters,\n} from '../../../store/actions/operations/utils';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\nimport {RumWrapper, YTApiId, ytApiV3Id} from '../../../rum/rum-wrap-api';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {getCluster} from '../../../store/selectors/global';\n\nconst cancellableRequests = new CancelHelper();\n\n// selectors\nfunction updateCursor({\n timestamp,\n direction,\n firstPageReached,\n lastPageReached,\n resetLoadingStatus = true,\n}) {\n return {\n type: UPDATE_CURSOR,\n data: {\n timestamp,\n direction,\n firstPageReached,\n lastPageReached,\n resetLoadingStatus,\n },\n };\n}\n\nexport function updatePager(incomplete) {\n return (dispatch, getState) => {\n const direction = getState().operations.list.cursor.direction;\n\n if (direction === OPERATIONS_CURSOR_DIRECTION.PAST) {\n dispatch(\n updateCursor({\n lastPageReached: !incomplete,\n resetLoadingStatus: false,\n }),\n );\n } else if (direction === OPERATIONS_CURSOR_DIRECTION.FUTURE) {\n dispatch(\n updateCursor({\n firstPageReached: !incomplete,\n resetLoadingStatus: false,\n }),\n );\n }\n };\n}\n\nexport function updateOperationsList() {\n return (dispatch, getState) => {\n const state = getState();\n const cluster = getCluster(state);\n const parameters = getListRequestParameters(state);\n\n return dispatch(updateOperationsByParams(cluster, parameters));\n };\n}\n\nexport function updateOperationsByParams(cluster, parameters) {\n return (dispatch) => {\n dispatch({\n type: UPDATE_OPERATIONS_REQUEST,\n });\n\n const rumId = new RumWrapper(cluster, RumMeasureTypes.OPERATIONS_LIST);\n return rumId\n .fetch(\n YTApiId.listOperations,\n ytApiV3Id.listOperations(YTApiId.listOperations, {\n parameters,\n cancellation: cancellableRequests.removeAllAndSave,\n }),\n )\n .then((response) => {\n const {operations, incomplete, ...counters} = response;\n\n dispatch(updatePager(incomplete));\n dispatch({\n type: UPDATE_OPERATIONS_SUCCESS,\n data: rumId.wrap('parse', () => {\n return map_(operations, (data) => new ListOperationSelector(data));\n }),\n });\n dispatch({\n type: UPDATE_FILTER_COUNTERS,\n data: counters,\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: UPDATE_OPERATIONS_CANCELLED,\n });\n } else {\n dispatch({\n type: UPDATE_OPERATIONS_FAILURE,\n data: {\n message: 'Could not load operations.',\n details: error,\n },\n });\n }\n });\n };\n}\n\nfunction resetCursor() {\n return updateCursor({\n timestamp: null,\n direction: OPERATIONS_CURSOR_DIRECTION.PAST,\n firstPageReached: true,\n lastPageReached: false,\n });\n}\n\nexport function updateFilter(name, value) {\n return (dispatch) => {\n dispatch({\n type: UPDATE_FILTER,\n data: {name, value},\n });\n dispatch(resetCursor());\n };\n}\n\nfunction resetTimeRange() {\n return (dispatch, getState) => {\n const dataMode = getState().operations.list.dataMode;\n const currentTime = moment();\n\n dispatch({\n type: RESET_TIME_RANGE,\n data: {\n from: getDefaultFromTime(currentTime, dataMode),\n to: getDefaultToTime(currentTime, dataMode),\n },\n });\n };\n}\n\nexport function showArchiveOperations(from, to) {\n return (dispatch) => {\n dispatch({\n type: SET_OPERATIONS_DATA_MODE,\n data: {dataMode: OPERATIONS_DATA_MODE.ARCHIVE, from, to},\n });\n dispatch(resetCursor());\n };\n}\n\nexport function showCurrentOperations() {\n return (dispatch) => {\n dispatch({\n type: SET_OPERATIONS_DATA_MODE,\n data: {dataMode: OPERATIONS_DATA_MODE.CURRENT},\n });\n dispatch(resetCursor());\n };\n}\n\nexport function gotoOperationsPage(where) {\n return (dispatch, getState) => {\n const {dataMode, timeRange, cursor, operations} = getState().operations.list;\n\n switch (where) {\n case OPERATIONS_PAGE.FIRST:\n dispatch(resetCursor());\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n break;\n\n case OPERATIONS_PAGE.LAST:\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n // WARNING fromTime is changed in reset timeRange\n dispatch(\n updateCursor({\n timestamp: timeRange.from,\n direction: OPERATIONS_CURSOR_DIRECTION.FUTURE,\n firstPageReached: false,\n lastPageReached: true,\n }),\n );\n break;\n\n case OPERATIONS_PAGE.NEXT:\n if (!cursor.lastPageReached) {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n\n dispatch(\n updateCursor({\n timestamp: ypath.getValue(\n operations[operations.length - 1],\n '/@start_time',\n ),\n direction: OPERATIONS_CURSOR_DIRECTION.PAST,\n firstPageReached: false,\n }),\n );\n }\n break;\n\n case OPERATIONS_PAGE.PREV:\n if (!cursor.firstPageReached) {\n if (dataMode === OPERATIONS_DATA_MODE.CURRENT) {\n dispatch(resetTimeRange());\n }\n\n dispatch(\n updateCursor({\n timestamp: ypath.getValue(operations[0], '/@start_time'),\n direction: OPERATIONS_CURSOR_DIRECTION.FUTURE,\n lastPageReached: false,\n }),\n );\n }\n break;\n }\n };\n}\n\nexport function applyFilterPreset(preset, reload = true) {\n return (dispatch) => {\n dispatch({\n type: APPLY_FILTER_PRESET,\n data: {preset},\n });\n\n if (reload) {\n dispatch(resetCursor());\n }\n };\n}\n\nexport function removeFilterPreset(presetId) {\n return (dispatch) => {\n dispatch(removeSetting(presetId, NAMESPACES.OPERATION_PRESETS));\n };\n}\n\nexport function toggleSaveFilterPresetDialog() {\n return {\n type: TOGGLE_SAVE_FILTER_PRESET_DIALOG,\n };\n}\n\nexport function updateSaveFilterPresetDialog({name, value}) {\n return {\n type: UPDATE_SAVE_FILTER_PRESET_DIALOG,\n data: {fieldName: name, fieldValue: value},\n };\n}\n\nfunction selectActualFilters(state) {\n const currentFilters = state.operations.list.filters;\n return reduce_(\n currentFilters,\n (filters, {value}, key) => {\n return {...filters, [key]: value};\n },\n {},\n );\n}\n\nexport function saveFilterPreset(name, isDefault) {\n return (dispatch, getState) => {\n let promise = Promise.resolve();\n const presetId = hammer.guid();\n\n if (isDefault) {\n promise = dispatch(setSetting(DEFAULT_PRESET_SETTING, NAMESPACES.OPERATION, presetId));\n }\n return promise.then(() => {\n dispatch(\n setSetting(presetId, NAMESPACES.OPERATION_PRESETS, {\n name,\n filters: selectActualFilters(getState()),\n }),\n );\n });\n };\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport reduce_ from 'lodash/reduce';\n\nimport {getOperation} from '../../../store/actions/operations/detail';\nimport {updateOperationsList} from '../../../store/actions/operations/list';\nimport {\n HIDE_EDIT_WEIGHT_POOL_MODAL,\n SET_PULLS_AND_WEIGHTS,\n SHOW_EDIT_WEIGHT_POOL_MODAL,\n} from '../../../constants/operations';\nimport {Page} from '../../../constants';\n\nexport * from '../../../store/actions/operations/list';\n\nexport function showEditPoolsWeightsModal(operation, editable = true) {\n return {\n type: SHOW_EDIT_WEIGHT_POOL_MODAL,\n data: {operation, editable},\n };\n}\n\nexport function hideEditPoolsWeightsModal() {\n return {\n type: HIDE_EDIT_WEIGHT_POOL_MODAL,\n };\n}\n\nexport function setPoolsAndWeights(operation, pools, weights) {\n const pathItems = window.location.pathname.split('/');\n const inOperationsList = pathItems.length === 3 && pathItems[2] === Page.OPERATIONS;\n const operationId = operation.$value;\n\n const poolTrees = reduce_(\n operation.pools,\n (acc, item) => {\n const {tree} = item;\n acc[tree] = item;\n return acc;\n },\n {},\n );\n\n return (dispatch) => {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.REQUEST,\n });\n\n const params = reduce_(\n pools,\n (res, pool, tree) => {\n const old = poolTrees[tree];\n if (weights[tree] && old.weight !== Number(weights[tree])) {\n res[tree] = Object.assign({}, {weight: Number(weights[tree])});\n }\n if (old.pool !== pools[tree]) {\n res[tree] = Object.assign(res[tree] || {}, {\n pool: pools[tree],\n });\n }\n return res;\n },\n {},\n );\n\n return yt.v3\n .updateOperationParameters({\n operation_id: operationId,\n _parameters: {\n scheduling_options_per_pool_tree: params,\n },\n })\n .then(() => {\n if (inOperationsList) {\n dispatch(updateOperationsList());\n } else {\n dispatch(getOperation(operationId));\n }\n\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.SUCCESS,\n });\n dispatch({\n type: HIDE_EDIT_WEIGHT_POOL_MODAL,\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.CANCELLED,\n });\n } else {\n dispatch({\n type: SET_PULLS_AND_WEIGHTS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport MetaTable, {\n Template,\n TemplateWeight,\n} from '../../../../../../components/MetaTable/MetaTable';\n\nimport {formatShare} from '../../../../../../utils/operations/tabs/details/runtime';\nimport {showEditPoolsWeightsModal} from '../../../../../../store/actions/operations';\nimport hammer from '../../../../../../common/hammer';\nimport {OperationPool} from '../../../../../../components/OperationPool/OperationPool';\n\nconst headingBlock = cn('elements-heading');\nconst runtimeBlock = cn('runtime');\n\nexport const runtimeProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n progress: PropTypes.object.isRequired,\n }),\n);\n\nfunction StarvingStatus({progress}) {\n const {starvation_status} = progress || {};\n const res = starvation_status ? hammer.format.Readable(starvation_status) : undefined;\n return res || null; // returns null to prevent react warning\n}\n\nexport const operationProps = PropTypes.shape({\n $value: PropTypes.string,\n $attributes: PropTypes.object,\n type: PropTypes.string,\n user: PropTypes.string,\n pool: PropTypes.string,\n state: PropTypes.string,\n title: PropTypes.string,\n suspended: PropTypes.bool,\n duration: PropTypes.number,\n startTime: PropTypes.string,\n finishTime: PropTypes.string,\n description: PropTypes.object,\n pools: PropTypes.arrayOf(\n PropTypes.shape({\n tree: PropTypes.string.isRequired,\n pool: PropTypes.string.isRequired,\n }),\n ),\n});\n\nclass Runtime extends Component {\n static propTypes = {\n // from parent component\n runtime: runtimeProps.isRequired,\n operation: operationProps.isRequired,\n cluster: PropTypes.string.isRequired,\n // from connect\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n };\n\n handlePoolEditClick = () => {\n const {showEditPoolsWeightsModal, operation} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderTree({progress, name}) {\n const {cluster, operation, showEditPoolsWeightsModal} = this.props;\n const {state} = operation;\n\n const pool = {\n pool: progress.pool,\n tree: name,\n weight: progress.weight,\n };\n\n return (\n <div className={runtimeBlock('tree')} key={name}>\n <div className={headingBlock({size: 's'})}>\n {hammer.format['ReadableField'](name)}\n </div>\n\n <MetaTable\n items={[\n [\n {\n key: 'pool',\n value: (\n <OperationPool\n onEdit={this.handlePoolEditClick}\n cluster={cluster}\n state={state}\n pool={pool}\n compact\n />\n ),\n },\n {\n key: 'weight',\n value: (\n <TemplateWeight\n operation={operation}\n pool={pool}\n onEdit={() => showEditPoolsWeightsModal(operation)}\n />\n ),\n },\n {\n key: 'min_share',\n value:\n formatShare(progress.min_share_ratio) +\n ' / ' +\n formatShare(progress.adjusted_min_share_ratio),\n },\n {\n key: 'fair_share_ratio',\n value: formatShare(progress.fair_share_ratio),\n },\n {\n key: 'usage_ratio',\n value: formatShare(progress.usage_ratio),\n },\n {\n key: 'demand_ratio',\n value: formatShare(progress.demand_ratio),\n },\n ],\n [\n {\n key: 'Starvation status',\n value: <StarvingStatus progress={progress} />,\n },\n {\n key: 'partitions',\n value:\n progress.partitions?.completed +\n ' / ' +\n progress.partitions?.total,\n visible: Boolean(progress.partitions),\n },\n {\n key: 'scheduling_status',\n value: hammer.format.Readable(progress.scheduling_status),\n },\n {\n key: 'dominant_resource',\n value: hammer.format.Readable(progress.dominant_resource),\n },\n {\n key: 'preemptable_job_count',\n value: (\n <Template.FormattedValue\n value={progress.preemptable_job_count}\n format=\"Number\"\n />\n ),\n },\n {\n key: 'memory_size_per_jobs',\n value: (\n <Template.FormattedValue\n // eslint-disable-next-line camelcase\n value={\n progress.resource_demand?.memory /\n progress.resource_demand?.user_slots\n }\n format=\"Bytes\"\n />\n ),\n visible: Boolean(progress.resource_demand),\n },\n ],\n ]}\n />\n </div>\n );\n }\n\n render() {\n const {runtime} = this.props;\n\n return (\n <div className={runtimeBlock()}>{map_(runtime, (tree) => this.renderTree(tree))}</div>\n );\n }\n}\n\nexport default connect(null, {showEditPoolsWeightsModal})(Runtime);\n","import React, {Fragment, useEffect, useState} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport every_ from 'lodash/every';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {operationProps} from '../../../pages/operations/OperationDetail/tabs/details/Runtime/Runtime';\nimport Error from '../../../components/Error/Error';\nimport Modal from '../../../components/Modal/Modal';\nimport Link from '../../../components/Link/Link';\nimport Yson from '../../../components/Yson/Yson';\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport {hideEditPoolsWeightsModal, setPoolsAndWeights} from '../../../store/actions/operations';\nimport {Page} from '../../../constants/index';\n\nimport './PoolsWeightsEditModal.scss';\nimport {getCluster} from '../../../store/selectors/global';\n\nPoolsWeightsEditModal.propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n visible: PropTypes.bool.isRequired,\n editable: PropTypes.bool.isRequired,\n cluster: PropTypes.string.isRequired,\n operation: operationProps,\n\n hideEditPoolsWeightsModal: PropTypes.func.isRequired,\n setPoolsAndWeights: PropTypes.func.isRequired,\n};\n\nconst block = cn('operation-pools-weights');\nconst preparePoolsState = (pools) => {\n return reduce_(\n pools,\n (res, {pool, tree}) => {\n res[tree] = pool;\n return res;\n },\n {},\n );\n};\n\nconst prepareWeightsState = (pools) => {\n return reduce_(\n pools,\n (res, {weight, tree}) => {\n res[tree] = String(weight);\n return res;\n },\n {},\n );\n};\n\nconst renderPoolsAndWeights = ({\n cluster,\n operation,\n editable,\n pools,\n weights,\n setPools,\n setWeights,\n}) => {\n return map_(operation.pools, ({tree}) => {\n const pool = pools[tree];\n const title = `${pool} [${tree}]`;\n const url = `/${cluster}/${Page.SCHEDULING}?tree=${tree}&pool=${pool}&tab=monitor`;\n\n return (\n <Fragment key={tree}>\n <div className={block('pool', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={pool}\n onUpdate={(pool) => {\n setPools({...pools, [tree]: pool});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">\n <Link url={url} title={title}>\n <span className={block('pool-link')}>{pool}</span>\n </Link>\n </span>\n )}\n </div>\n\n <div className={block('tree', 'elements-form_field')}>{tree}</div>\n\n <div className={block('weight', 'elements-form_field')}>\n {editable ? (\n <TextInput\n value={weights[tree]}\n onUpdate={(weight) => {\n setWeights({...weights, [tree]: weight});\n }}\n />\n ) : (\n <span className=\"elements-ellipsis\">{weights[tree]}</span>\n )}\n </div>\n </Fragment>\n );\n });\n};\n\nfunction PoolsWeightsEditModal(props) {\n const {operation, setPoolsAndWeights} = props;\n const [pools, setPools] = useState(preparePoolsState(operation.pools));\n const [weights, setWeights] = useState(prepareWeightsState(operation.pools));\n\n useEffect(() => {\n setPools(preparePoolsState(operation.pools));\n setWeights(prepareWeightsState(operation.pools));\n }, [operation.$value]);\n\n const isConfirmDisabled = () => {\n const state = {operation};\n const isStateCorrect = state !== 'completed' && state !== 'failed' && state !== 'aborted';\n\n const isWeightCorrect = every_(keys_(weights), (tree) => {\n const value = Number(weights[tree]);\n return !isNaN(value) && value > 0;\n });\n\n const isPoolCorrect = every_(keys_(pools), (tree) => {\n const value = pools[tree];\n return Boolean(value);\n });\n\n return !isStateCorrect || !isWeightCorrect || !isPoolCorrect;\n };\n\n const handleConfirm = () => {\n setPoolsAndWeights(operation, pools, weights);\n };\n\n const {loading, error, errorData, visible, editable, hideEditPoolsWeightsModal} = props;\n const title = (\n <div className={block('title')}>{editable ? 'Edit' : 'View'} pools and weights</div>\n );\n\n return (\n <Modal\n size=\"l\"\n title={title}\n loading={loading}\n visible={visible}\n footer={editable}\n confirmText=\"Apply\"\n onConfirm={handleConfirm}\n onCancel={hideEditPoolsWeightsModal}\n isConfirmDisabled={isConfirmDisabled}\n content={\n <Fragment>\n <div className={block('name')}>\n <Yson value={operation.title || operation.$value} inline />\n </div>\n <div className={block()}>\n <div className={block('header')}>Pool</div>\n <div className={block('header')}>Tree</div>\n <div className={block('header')}>Weight</div>\n {renderPoolsAndWeights({\n ...props,\n pools,\n weights,\n setPools,\n setWeights,\n })}\n </div>\n {error && <Error className={block('error')} error={errorData} />}\n </Fragment>\n }\n />\n );\n}\n\nfunction mapStateToProps(state) {\n const {operations} = state;\n const {loading, loaded, error, errorData, visible, editable, operation} =\n operations.page.editWeightModal;\n\n return {\n loading,\n loaded,\n error,\n errorData,\n visible,\n editable,\n operation,\n cluster: getCluster(state),\n };\n}\n\nconst mapDispatchToProps = {\n hideEditPoolsWeightsModal,\n setPoolsAndWeights,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PoolsWeightsEditModal);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport {Progress} from '@gravity-ui/uikit';\nimport Link from '../../../components/Link/Link';\n\nimport hammer from '../../../common/hammer';\nimport StatusLabel from '../../../components/StatusLabel/StatusLabel';\n\nimport './OperationProgress.scss';\nimport {getCluster} from '../../../store/selectors/global';\n\nconst block = cn('operation-progress');\n\nclass OperationProgress extends Component {\n static propTypes = {\n // from parent\n operation: PropTypes.object.isRequired,\n type: PropTypes.oneOf(['running', 'failed']),\n cluster: PropTypes.string.isRequired,\n showState: PropTypes.bool,\n\n onLinkClick: PropTypes.func,\n };\n\n static defaultProps = {\n type: 'running',\n };\n\n renderCounter(state, count, total) {\n const {cluster, onLinkClick} = this.props;\n\n const className = 'operation-progress__counter';\n const stateClassName = 'operation-progress__counter-state';\n const valueClassName = 'operation-progress__counter-value';\n\n const {\n operation: {$value},\n } = this.props;\n const url = `/${cluster}/operations/${$value}/jobs?state=${state}`;\n\n const jobsByStateTitle = `View ${state} jobs`;\n\n return (\n <div className={className}>\n <span className={stateClassName}>\n <Link\n theme=\"ghost\"\n title={jobsByStateTitle}\n url={url}\n routed\n onClick={\n !onLinkClick\n ? undefined\n : () => {\n onLinkClick(state);\n }\n }\n >\n {hammer.format['ReadableField'](state)}\n </Link>\n </span>\n <span className={valueClassName}>\n {hammer.format['Number'](count)}\n &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, {Component} from 'react';\nimport {withRouter} from 'react-router';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport trimEnd_ from 'lodash/trimEnd';\n\nimport unipika from '../../../../common/thor/unipika';\nimport OperationProgress from '../../../../pages/operations/OperationProgress/OperationProgress';\nimport {TemplatePools, TemplateWeight} from '../../../../components/MetaTable/MetaTable';\nimport templates, {renderText} from '../../../../components/templates/utils';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport {SubjectCard} from '../../../../components/SubjectLink/SubjectLink';\nimport Button from '../../../../components/Button/Button';\nimport Link from '../../../../components/Link/Link';\nimport Icon from '../../../../components/Icon/Icon';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\n\nimport {\n showEditPoolsWeightsModal,\n updateOperationsList,\n} from '../../../../store/actions/operations';\nimport {performAction, prepareActions} from '../../../../utils/operations/detail';\nimport {promptAction} from '../../../../store/actions/actions';\nimport '../../../../components/templates/meta';\nimport OperationIOLink from '../../OperationIOLink/OperationIOLink';\n\nimport './OperationsListTable.scss';\n\nconst BLOCK_NAME = 'operations-list';\nconst block = cn(BLOCK_NAME);\n\nfunction renderIO(io) {\n const className = block('item-io');\n\n return (\n <span className={className}>\n {renderText(io.count, {\n mix: {block: BLOCK_NAME, elem: 'item-io-count'},\n })}\n {\n <OperationIOLink\n path={io.table}\n {...io}\n theme={'ghost'}\n className={block('item-io-table')}\n />\n }\n </span>\n );\n}\n\nfunction getTitle(item) {\n return typeof item.title !== 'undefined' ? item.title : item.$value;\n}\n\nfunction renderTitle(item, url) {\n const title = getTitle(item);\n return (\n <Link\n routed\n className=\"elements-ellipsis\"\n url={`${trimEnd_(url, '/')}/${item.$value}`}\n theme=\"primary\"\n >\n <span>{unipika.decode(title)}</span>\n </Link>\n );\n}\n\nfunction renderCopyTitle(item) {\n return (\n <ClipboardButton\n text={item.$value}\n view=\"flat-secondary\"\n size=\"s\"\n title={'Copy operation id'}\n className={block('item-title-copy')}\n />\n );\n}\n\nfunction UserPoolItem({awesomeIcon, children, title}) {\n return (\n <div className={block('user-pool-item')}>\n <div className={block('user-pool-item-icon')}>\n <Tooltip content={title} to={'left'} allowUnmounted>\n <Icon face={'solid'} awesome={awesomeIcon} />\n </Tooltip>\n </div>\n <div className={block('user-pool-item-name')}>{children}</div>\n </div>\n );\n}\n\nconst metaItem = templates.get('elements/meta').item;\n\nclass OperationsListTable extends Component {\n static propTypes = {\n // from connect\n operations: PropTypes.arrayOf(PropTypes.object).isRequired,\n initialLoading: PropTypes.bool.isRequired,\n cluster: PropTypes.string.isRequired,\n\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n promptAction: PropTypes.func.isRequired,\n updateOperationsList: PropTypes.func.isRequired,\n // from react-router\n match: PropTypes.shape({\n url: PropTypes.string.isRequired,\n }),\n };\n\n static renderType(item) {\n return (\n <span className={block('item-type')}>{hammer.format['ReadableField'](item.type)}</span>\n );\n }\n\n static renderStartTime(item) {\n return (\n <div className={block('item-start-time')}>\n <div className={block('item-start-time-human')}>\n {hammer.format['DateTime'](item.startTime, {\n format: 'human',\n })}\n </div>\n <div className={block('item-start-time-default')}>\n {hammer.format['DateTime'](item.startTime)}\n </div>\n <div className={block('item-duration')} title=\"Duration\">\n {hammer.format['TimeDuration'](item.duration)}\n </div>\n </div>\n );\n }\n\n static renderProgress(item) {\n return <OperationProgress operation={item} showState />;\n }\n\n renderTitle = (item) => {\n const {url} = this.props.match;\n\n return (\n <div>\n <div className={block('item-title')}>\n {renderCopyTitle(item)}\n {renderTitle(item, url)}\n </div>\n <div className={block('item-io')}>\n {item.input.count > 0 &&\n metaItem({\n key: 'in',\n valueTemplate: renderIO,\n value: item.input,\n })}\n {item.output.count > 0 &&\n metaItem({\n key: 'out',\n valueTemplate: renderIO,\n value: item.output,\n })}\n </div>\n </div>\n );\n };\n\n renderMultiplePools(item) {\n const {showEditPoolsWeightsModal} = this.props;\n\n return (\n <span className={block('multiply-pools')}>\n {item.pools.length}\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title=\"Show pools and weights\"\n className={block('view-button')}\n onClick={() => showEditPoolsWeightsModal(item, false)}\n >\n <Icon awesome=\"eye\" />\n &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 {...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 hideFilter={true}\n />\n );\n }\n}\n","import {connect} from 'react-redux';\n\nimport OperationSelectFilter from '../../../../pages/operations/OperationSelectFilter/OperationSelectFilter';\nimport {updateFilter} from '../../../../store/actions/operations/list';\nimport {getActualValue, getCounters} from '../../../../pages/operations/selectors';\n\nfunction mapStateToProps({operations}, ownProps) {\n const filters = operations.list.filters;\n const {name, states} = ownProps;\n const {defaultValue, value, counters: rawCounters} = filters[name];\n\n const counters = getCounters(name, states, rawCounters);\n\n return {\n value: getActualValue(value, defaultValue),\n defaultValue,\n counters,\n };\n}\n\nexport default connect(mapStateToProps, {updateFilter})(OperationSelectFilter);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Pagination from '../../../../components/Pagination/Pagination';\nimport {gotoOperationsPage} from '../../../../store/actions/operations';\nimport {OPERATIONS_PAGE} from '../../../../constants/operations';\n\nclass OperationsListPaginator extends Component {\n static propTypes = {\n // from connect\n gotoOperationsPage: PropTypes.func.isRequired,\n firstPageReached: PropTypes.bool.isRequired,\n lastPageReached: PropTypes.bool.isRequired,\n };\n\n gotoFirstPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.FIRST);\n };\n gotoLastPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.LAST);\n };\n gotoNextPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.NEXT);\n };\n gotoPrevPage = () => {\n this.props.gotoOperationsPage(OPERATIONS_PAGE.PREV);\n };\n\n render() {\n const {firstPageReached, lastPageReached} = this.props;\n\n return (\n <Pagination\n size=\"s\"\n first={{\n handler: this.gotoFirstPage,\n disabled: firstPageReached,\n }}\n previous={{\n handler: this.gotoPrevPage,\n hotkeyHandler: this.gotoPrevPage,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n }}\n next={{\n handler: this.gotoNextPage,\n hotkeyHandler: this.gotoNextPage,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n }}\n last={{\n handler: this.gotoLastPage,\n disabled: lastPageReached,\n }}\n />\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {firstPageReached, lastPageReached} = operations.list.cursor;\n return {firstPageReached, lastPageReached};\n}\n\nconst mapDispatchToProps = {\n gotoOperationsPage,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OperationsListPaginator);\n","import {createSelector} from 'reselect';\nimport filter_ from 'lodash/filter';\nimport reduce_ from 'lodash/reduce';\nimport every_ from 'lodash/every';\nimport isEqual_ from 'lodash/isEqual';\n\nimport {RootState} from '../../../store/reducers';\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../utils/utils';\nimport {getSettingsDataRaw} from '../../../store/selectors/settings/settings-ts';\nimport {NAMESPACES} from '../../../../shared/constants/settings';\nimport {NS_SEPARATOR} from '../../../../shared/utils/settings';\nimport {\n OPERATIONS_LIST_DEFAULT_FILTERS,\n OPERATIONS_LIST_RUNNING_PRESET,\n} from '../../../constants/operations/list';\nimport {getCurrentUserName} from '../global';\nimport {getOperationsListFilters} from '.';\n\nexport const getOperationsListIsFinalState = createSelector(\n [\n (state: RootState) => state.operations.list.isLoading,\n (state: RootState) => state.operations.list.hasLoaded,\n (state: RootState) => state.operations.list.hasError,\n ],\n (loading, loaded, error) => {\n const status = calculateLoadingStatus(loading, loaded, error);\n return isFinalLoadingStatus(status);\n },\n);\n\ninterface PresetItem {\n name: string;\n filters: Record<string, any>;\n}\n\n/**\n * \n * \n \n\n \n\n * \n * @param login \n * @returns \n */\n\nfunction createPreconfiguredPresets(login: string) {\n return {\n [OPERATIONS_LIST_RUNNING_PRESET]: {\n name: 'My/Running',\n preconfigured: true,\n filters: {\n ...OPERATIONS_LIST_DEFAULT_FILTERS,\n user: login,\n state: 'running',\n },\n },\n ['failed']: {\n name: 'My/Failed',\n preconfigured: true,\n filters: {\n ...OPERATIONS_LIST_DEFAULT_FILTERS,\n user: login,\n state: 'failed',\n },\n },\n };\n}\n\nexport const getOperationsListFilterPresets = createSelector(\n [getSettingsDataRaw, getCurrentUserName],\n (data, login) => {\n const collectionKeys = filter_(Object.keys(data), (path) =>\n path.startsWith(NAMESPACES.OPERATION_PRESETS.value),\n );\n return {\n ...createPreconfiguredPresets(login),\n ...reduce_(\n collectionKeys,\n (collection, path) => {\n const settingName = path.slice(\n (NAMESPACES.OPERATION_PRESETS.value + NS_SEPARATOR).length,\n );\n collection[settingName] = {...(data as Record<string, PresetItem>)[path]};\n return collection;\n },\n {} as Record<string, PresetItem>,\n ),\n };\n },\n);\n\nexport const getOperationsListActivePresets = createSelector(\n [getOperationsListFilters, getOperationsListFilterPresets],\n (selectedFilters, presets) => {\n return reduce_(\n presets,\n (acc, {filters}, presetId) => {\n const active = every_(filters, (value, k) => {\n const key: keyof typeof selectedFilters = k as any;\n return isEqual_(selectedFilters[key]?.value, value);\n });\n if (active) {\n acc.add(presetId);\n }\n return acc;\n },\n new Set<string>(),\n );\n },\n);\n","import React, {Component} from 'react';\nimport {withRouter} from 'react-router';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, Checkbox, TextInput} from '@gravity-ui/uikit';\n\nimport {NAMESPACES} from '../../../../../shared/constants/settings';\nimport {\n applyFilterPreset,\n removeFilterPreset,\n saveFilterPreset,\n toggleSaveFilterPresetDialog,\n} from '../../../../store/actions/operations';\nimport {DEFAULT_PRESET_SETTING} from '../../../../constants/operations';\nimport {OPERATIONS_LIST_RUNNING_PRESET} from '../../../../constants/operations/list';\n\nimport {makeGetSetting} from '../../../../store/selectors/settings';\nimport {\n getOperationsListActivePresets,\n getOperationsListFilterPresets,\n} from '../../../../store/selectors/operations/operations-list';\nimport Modal from '../../../../components/Modal/Modal';\nimport Icon from '../../../../components/Icon/Icon';\n\nimport './OperationsFilterPresets.scss';\n\nconst ELEMENT = 'toolbar-presets';\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\n\nclass OperationsFilterPresets extends Component {\n static propTypes = {\n // from connect\n applyFilterPreset: PropTypes.func.isRequired,\n removeFilterPreset: PropTypes.func.isRequired,\n saveFilterPreset: PropTypes.func.isRequired,\n toggleSaveFilterPresetDialog: PropTypes.func.isRequired,\n presets: PropTypes.objectOf(\n PropTypes.shape({\n failedJobs: PropTypes.bool,\n pool: PropTypes.string,\n state: PropTypes.string,\n text: PropTypes.string,\n type: PropTypes.string,\n user: PropTypes.string,\n }),\n ).isRequired,\n defaultPreset: PropTypes.string,\n dialog: PropTypes.shape({\n isSaving: PropTypes.bool.isRequired,\n name: PropTypes.string.isRequired,\n isDefault: PropTypes.bool.isRequired,\n }).isRequired,\n // from react-router\n location: PropTypes.shape({\n search: PropTypes.string.isRequired,\n }).isRequired,\n };\n\n state = {\n presetName: '',\n isPresetDefault: false,\n };\n\n componentDidMount() {\n const {applyFilterPreset, defaultPreset, presets, location} = this.props;\n\n if (location.search.length <= 1) {\n applyFilterPreset(presets[defaultPreset], false);\n }\n }\n\n onConfirm = () => {\n const {saveFilterPreset, toggleSaveFilterPresetDialog} = this.props;\n const {presetName, isPresetDefault} = this.state;\n saveFilterPreset(presetName, isPresetDefault).then(() => {\n this.setState({\n presetName: '',\n isPresetDefault: false,\n });\n toggleSaveFilterPresetDialog();\n });\n };\n\n makeRemoveHandler = (presetId) => {\n return (event) => {\n event.stopPropagation();\n this.props.removeFilterPreset(presetId);\n };\n };\n\n isPresetNameEmpty = () => !this.state.presetName;\n\n renderSavePresetDialog() {\n const {dialog, toggleSaveFilterPresetDialog} = this.props;\n const {presetName, isPresetDefault} = this.state;\n\n const block = cn('elements-form');\n const INPUT_ID = 'save-preset-filter';\n\n return (\n <Modal\n title=\"Save filter\"\n confirmText=\"Save\"\n visible={dialog.isSaving}\n onCancel={toggleSaveFilterPresetDialog}\n onConfirm={this.onConfirm}\n isConfirmDisabled={this.isPresetNameEmpty}\n content={\n <React.Fragment>\n <div className={block('field')}>\n <label\n htmlFor={INPUT_ID}\n className={block('label')}\n title=\"Filter name\"\n >\n Filter name\n </label>\n <TextInput\n id={INPUT_ID}\n value={presetName}\n onUpdate={(presetName) => this.setState({presetName})}\n autoFocus\n />\n </div>\n <div className={block('field')}>\n <Checkbox\n checked={isPresetDefault}\n onChange={(isPresetDefault) => this.setState({isPresetDefault})}\n >\n Default filter\n </Checkbox>\n </div>\n </React.Fragment>\n }\n />\n );\n }\n\n render() {\n const {defaultPreset, presets, applyFilterPreset, activePresets} = this.props;\n\n return (\n <div className={block(ELEMENT, tbBlock('container'))}>\n {this.renderSavePresetDialog()}\n {map_(presets, (preset, presetId) => {\n const active = activePresets.has(presetId);\n return (\n <div className={block(ELEMENT, tbBlock('component'))} key={presetId}>\n <Button\n className={block('preset', {active})}\n onClick={() => applyFilterPreset(preset)}\n role=\"button\"\n selected={active}\n >\n <span className={block('preset-content')}>\n <span className={block('preset-name')}>\n {defaultPreset === presetId && <Icon awesome=\"star-alt\" />}\n &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, defaultValue},\n } = useSelector(getOperationsListFilters);\n\n const actualValue = getActualValue(value, defaultValue);\n\n return (\n <div>\n {UIFactory.renderUserSuggest({\n value: typeof actualValue === 'string' && actualValue ? [actualValue] : [],\n onUpdate: ([first] = []) => {\n dispatch(updateFilter('subject', first));\n },\n width: 'max',\n pin: 'round-clear',\n })}\n </div>\n );\n}\n\nexport const OperationsAccessibleForFilter = React.memo(OperationsAccessibleForFilterImpl);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {getAllUserNames} from '../../../../store/selectors/global';\nimport OperationsTextFilter from './OperationsTextFilter';\nimport OperationsArchiveFilter from './OperationsArchiveFilter';\nimport OperationsSelectFilter from './OperationsSelectFilter';\n\nimport OperationsListPaginator from './OperationsListPaginator';\nimport OperationsFilterPresets from './OperationsFilterPresets';\nimport {\n toggleSaveFilterPresetDialog,\n updateFilter,\n} from '../../../../store/actions/operations/list';\n\nimport {\n OperationsAccessibleForFilter,\n OperationsListPoolSuggestFilter,\n OperationsListPoolTreeSuggestFilter,\n OperationsListUserSuggestFilter,\n} from '../../../../pages/operations/OperationsList/OperationsListToolbar/OperationsListSuggestFilters';\nimport {getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838} from '../../../../store/selectors/operations';\nimport Button, {SelectButton} from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport {PoolTreesLoader} from '../../../../hooks/global-pool-trees';\n\nimport './OperationsListToolbar.scss';\n\nconst block = cn('operations-list');\nconst tbBlock = cn('elements-toolbar');\nconst tbComp = tbBlock('component');\n\nclass OperationsListToolbar extends React.PureComponent {\n static propTypes = {\n // from connect\n updateFilter: PropTypes.func.isRequired,\n toggleSaveFilterPresetDialog: PropTypes.func.isRequired,\n failedJobsFilter: PropTypes.shape({\n type: PropTypes.string.isRequired,\n defaultValue: PropTypes.bool.isRequired,\n value: PropTypes.bool,\n }).isRequired,\n subjects: PropTypes.arrayOf(PropTypes.string).isRequired,\n // from props\n inDashboard: PropTypes.bool,\n };\n\n preparePermissionsPlaceholder(permissions) {\n if (permissions.length === 0) {\n return 'Select...';\n }\n\n const labels = map_(permissions, (permission) => permission[0].toUpperCase());\n\n return labels.join(', ');\n }\n\n renderTopSection() {\n return (\n <div className={tbBlock('container')}>\n <OperationsTextFilter />\n\n <div className={block('toolbar-pool-filter', tbComp)}>\n <PoolTreesLoader />\n <OperationsListPoolTreeSuggestFilter pin=\"round-clear\" />\n <OperationsListPoolSuggestFilter pin=\"brick-round\" />\n </div>\n\n <OperationsArchiveFilter />\n\n <div className={block('toolbar-pagination', tbComp)}>\n <OperationsListPaginator />\n </div>\n </div>\n );\n }\n\n renderBottomSection() {\n const {failedJobsFilter, updateFilter, toggleSaveFilterPresetDialog} = this.props;\n\n return (\n <div className={tbBlock('container')}>\n <div className={block('toolbar-user-filter', tbComp)}>\n <OperationsListUserSuggestFilter />\n </div>\n\n <div className={block('toolbar-access-filters', tbComp)}>\n <OperationsAccessibleForFilter pin=\"round-clear\" />\n <OperationsSelectFilter\n type=\"check\"\n name=\"permissions\"\n withCounters={false}\n placeholder={this.preparePermissionsPlaceholder}\n states={[\n {\n name: 'read',\n show: true,\n },\n {\n name: 'manage',\n show: true,\n },\n ]}\n width={170}\n multiple\n pin=\"brick-round\"\n />\n </div>\n\n <div className={block('toolbar-state-filter', tbComp)}>\n <OperationsSelectFilter\n name=\"state\"\n states={[\n {\n name: 'all',\n caption: 'All states',\n show: true,\n },\n {\n name: 'pending',\n show: true,\n },\n {\n name: 'running',\n show: true,\n },\n {\n name: 'completed',\n show: true,\n },\n {\n name: 'failed',\n show: true,\n },\n {\n name: 'aborted',\n show: true,\n },\n ]}\n width={200}\n />\n </div>\n\n <div className={block('toolbar-type-filter', tbComp)}>\n <OperationsSelectFilter\n name=\"type\"\n states={[\n {\n name: 'all',\n caption: 'All types',\n show: true,\n },\n {\n name: 'map',\n show: true,\n },\n {\n name: 'reduce',\n show: true,\n },\n {\n name: 'map_reduce',\n show: true,\n },\n {\n name: 'join_reduce',\n show: true,\n },\n {\n name: 'merge',\n show: true,\n },\n {\n name: 'sort',\n show: true,\n },\n {\n name: 'erase',\n show: true,\n },\n {\n name: 'remote_copy',\n show: true,\n },\n {\n name: 'vanilla',\n show: true,\n },\n ]}\n width={200}\n />\n </div>\n\n <div className={block('failed-jobs', tbComp)}>\n <SelectButton\n selected={failedJobsFilter.value}\n onClick={() => updateFilter('failedJobs', !failedJobsFilter.value)}\n >\n Only ops with failed jobs:{' '}\n <span className={block('only-jobs-with-failed-counter')}>\n {failedJobsFilter.counter}\n </span>\n </SelectButton>\n </div>\n\n <div className={block('toolbar-save-preset', tbComp)}>\n <Button\n title=\"Save filter\"\n onClick={toggleSaveFilterPresetDialog}\n className={block('save-preset')}\n >\n <Icon awesome={'save'} face={'regular'} />\n &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} = this.props;\n\n return (\n <div className={block('toolbar', tbBlock())}>\n {this.renderTopSection()}\n {this.renderBottomSection()}\n {fixedStartedByFilter && this.renderWarning_uiissue_2838()}\n <OperationsFilterPresets />\n </div>\n );\n }\n}\n\nfunction OperationsListToolbarHooked() {\n const subjects = useSelector(getAllUserNames);\n const {failedJobs} = useSelector((state) => state.operations.list.filters) || {};\n const fixedStartedByFilter = useSelector(\n getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838,\n );\n\n const dispatch = useDispatch();\n const handleUpdateFilter = React.useCallback(\n (...args) => {\n dispatch(updateFilter(...args));\n },\n [dispatch],\n );\n\n const handleToggleSaveFilterPresetDialog = React.useCallback(\n (...args) => {\n dispatch(toggleSaveFilterPresetDialog(...args));\n },\n [dispatch],\n );\n\n return (\n <OperationsListToolbar\n {...{\n subjects,\n failedJobsFilter: failedJobs,\n fixedStartedByFilter,\n }}\n updateFilter={handleUpdateFilter}\n toggleSaveFilterPresetDialog={handleToggleSaveFilterPresetDialog}\n />\n );\n}\n\nexport default React.memo(OperationsListToolbarHooked);\n","import React, {Component} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport moment from 'moment';\n\nimport Error from '../../../components/Error/Error';\n\nimport OperationsListTable from './OperationsListTable/OperationsListTable';\nimport OperationsListToolbar from './OperationsListToolbar/OperationsListToolbar';\nimport {updateOperationsByParams} from '../../../store/actions/operations/list';\nimport {useMemoizedIfEqual, useUpdater} from '../../../hooks/use-updater';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../rum/RumUiContext';\nimport {getOperationsListIsFinalState} from '../../../store/selectors/operations/operations-list';\nimport {getCluster} from '../../../store/selectors/global';\nimport {getListRequestParameters} from '../../../store/actions/operations/utils';\n\nconst block = cn('operations-list');\n\nfunction OperationListUpdater({timeRange}) {\n const dispatch = useDispatch();\n\n const cluster = useSelector(getCluster);\n const parameters = useSelector(getListRequestParameters);\n\n const params = useMemoizedIfEqual(cluster, parameters);\n\n const updateFn = React.useCallback(() => {\n dispatch(updateOperationsByParams(...params));\n }, [dispatch, params]);\n\n useUpdater(updateFn, {onlyOnce: isBigTimeRange(timeRange)});\n\n return null;\n}\n\nfunction isBigTimeRange(timeRange) {\n const {from, to} = timeRange;\n if (typeof from === 'string' && typeof to === 'string') {\n const dateFrom = moment(from);\n const dateTo = moment(to);\n const diff = dateTo.diff(dateFrom);\n\n return moment.duration(diff).asDays() >= 1;\n }\n\n return false;\n}\n\nclass OperationsList extends Component {\n static propTypes = {\n // from connect\n isLoading: PropTypes.bool.isRequired,\n hasLoaded: PropTypes.bool.isRequired,\n hasError: PropTypes.bool.isRequired,\n error: PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.object,\n }),\n timeRange: PropTypes.shape({\n from: PropTypes.string,\n to: PropTypes.string,\n }).isRequired,\n // from props\n inDashboard: PropTypes.bool,\n };\n\n static defaultProps = {\n inDashboard: false,\n };\n\n isTimeRangeChanged(prevTimeRange) {\n const {timeRange} = this.props;\n\n return timeRange.from !== prevTimeRange.from || timeRange.to !== prevTimeRange.to;\n }\n\n renderError() {\n const {\n error: {message, details},\n } = this.props;\n return <Error message={message} error={details} />;\n }\n\n firstTimeError() {\n const {hasLoaded, hasError} = this.props;\n return hasError && !hasLoaded;\n }\n\n render() {\n const {hasError, inDashboard, timeRange} = this.props;\n\n return (\n <div className={block()}>\n <OperationListUpdater timeRange={timeRange} />\n {inDashboard && (\n <div className={cn('elements-heading')({size: 'l'})}>Operations</div>\n )}\n <OperationsListToolbar />\n {hasError && this.renderError()}\n {!this.firstTimeError() && <OperationsListTable />}\n </div>\n );\n }\n}\n\nfunction mapStateToProps({operations}) {\n const {isLoading, hasLoaded, hasError, error, timeRange} = operations.list;\n\n return {\n timeRange,\n isLoading,\n hasLoaded,\n hasError,\n error,\n };\n}\n\nconst OperationsListConnected = connect(mapStateToProps)(OperationsList);\n\nfunction OperationsListWithRum() {\n const isFinalStatus = useSelector(getOperationsListIsFinalState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATIONS_LIST,\n startDeps: [isFinalStatus],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATIONS_LIST,\n stopDeps: [isFinalStatus],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <OperationsListConnected />;\n}\n\nexport default React.memo(OperationsListWithRum);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport YagrChartKit, {\n RawSerieData,\n YagrWidgetData,\n getSerieColor,\n} from '../YagrChartKit/YagrChartKit';\nimport './YTHistogram.scss';\n\nimport format from '../../common/hammer/format';\n\nconst block = cn('yt-histogram');\n\nexport interface YTHistorgramData {\n min: number;\n max: number;\n count: Array<number>;\n}\n\nexport interface AxisInfo {\n label?: string;\n}\n\nexport interface YTHistogramProps {\n className?: string;\n xLabel?: string;\n yLabel?: string;\n yLogarithmic?: boolean;\n yMin?: number;\n xFormat?: (v?: number | string | null) => string;\n yFormat?: (v?: number | string | null) => string;\n renderTooltip?: (value: string | undefined, xl: string, xr: string) => string;\n data: YTHistorgramData;\n}\n\nfunction YTHistogram({\n className,\n data,\n xLabel,\n yLabel,\n yLogarithmic,\n yMin,\n xFormat = format.Number,\n yFormat = format.Number,\n renderTooltip = renderDefaultTooltip,\n}: YTHistogramProps) {\n const yagrData = React.useMemo(() => {\n const {timeline, serieData, step} = genYagrData(data);\n const graphs: Array<RawSerieData> = [\n {\n type: 'column' as const,\n data: yLogarithmic ? serieData.map((v) => (v === 0 ? NaN : v)) : (serieData as any),\n color: getSerieColor(0),\n formatter: yFormat,\n ...{\n renderOptions: {\n size: [1],\n gap: 1,\n },\n },\n },\n ];\n\n const res: YagrWidgetData = {\n data: {\n timeline,\n graphs,\n },\n libraryConfig: {\n axes: {\n x: {\n label: xLabel,\n values: (_d: unknown, x: Array<any>) => x.map(xFormat),\n },\n y: {\n label: yLabel,\n },\n },\n scales: {\n y: {\n min: yMin,\n type: yLogarithmic ? 'logarithmic' : 'linear',\n },\n },\n tooltip: {\n render: (tooltipData) => {\n const {\n x,\n scales: [\n {\n rows: [row],\n },\n ],\n } = tooltipData;\n\n const {originalValue} = row;\n\n return (\n renderTooltip(\n yFormat(isNaN(originalValue!) ? 0 : originalValue),\n xFormat(x - step / 2),\n xFormat(x + step / 2),\n ) ?? '-'\n );\n },\n },\n },\n };\n return res;\n }, [data, xLabel, yLabel, xFormat, yFormat, renderTooltip, yMin, yLogarithmic]);\n\n return (\n <div className={block(null, className)}>\n <YagrChartKit type={'yagr'} data={yagrData} />\n </div>\n );\n}\n\nexport default React.memo(YTHistogram);\n\nfunction genYagrData({min, max, count}: YTHistorgramData) {\n const step = min === max ? 1 : (max - min) / Math.max(count.length, 1);\n\n const serieData = [undefined, ...count];\n const timeline = [min - step / 2];\n if (count.length > 1) {\n for (let i = 0; i < count.length; ++i) {\n timeline.push(min + i * step + step / 2);\n }\n } else {\n timeline.push(min);\n }\n timeline.push(max + step / 2);\n serieData.push(undefined);\n\n return {timeline, serieData, step: min === max ? 0 : step};\n}\n\nconst renderDefaultTooltip: Required<YTHistogramProps>['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> for range from <b>${x0}</b> to <b>${x1}</b>`;\n};\n\nexport function calculateFormatSettings(\n data: YTHistorgramData | undefined,\n fmtFn: (v: number, opts?: {digits?: number}) => number,\n) {\n const {min, max} = data ?? {};\n if (min === max || min === undefined || max === undefined) {\n return undefined;\n }\n const v2 = min + (max - min) / 10;\n if (fmtFn(min) !== fmtFn(v2)) {\n return undefined;\n }\n for (let i = 0; i < 5; ++i) {\n const opts = {digits: i + 2};\n const s1 = fmtFn(min, opts);\n const s2 = fmtFn(v2, opts);\n if (s1 !== s2) {\n return {digits: i + 3};\n }\n }\n return undefined;\n}\n","import React from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ypath from '../../../../../../common/thor/ypath';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {operationProps} from '../../../../../../pages/operations/OperationDetail/tabs/details/Runtime/Runtime';\nimport {getTheme} from '../../../../../../store/selectors/global';\n\nimport {getOperationDetailsLoadingStatus} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport YTHistogram, {\n YTHistogramProps,\n YTHistorgramData,\n calculateFormatSettings,\n} from '../../../../../../components/YTHistogram/YTHistogram';\nimport {RootState} from '../../../../../../store/reducers';\n\nimport './PartitionSizes.scss';\n\nconst block = cn('operation-detail-partition-sizes');\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\ninterface State {\n formatSettings?: {digits: number};\n data?: YTHistorgramData;\n}\n\nclass PartitionSizes extends React.Component<ReduxProps, State> {\n static propTypes = {\n operation: operationProps.isRequired,\n chartKitTheme: PropTypes.string.isRequired,\n };\n\n static getDerivedStateFromProps(props: ReduxProps) {\n const progress = ypath.getValue(props.operation, '/@progress');\n const data = progress && ypath.getValue(progress, '/partition_size_histogram');\n\n return {\n formatSettings: calculateFormatSettings(data, format.Bytes),\n data,\n };\n }\n\n state: State = {};\n\n render() {\n const {data} = this.state;\n if (!data) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <YTHistogram\n className={block('charts')}\n data={data}\n yLabel={'partition count'}\n xLabel={'partition data weight'}\n xFormat={this.formatX}\n yMin={0.5}\n yLogarithmic\n renderTooltip={this.renderTooltip}\n />\n </div>\n </ErrorBoundary>\n );\n }\n\n formatX = (v?: number | string | null) => {\n const {formatSettings} = this.state;\n return format.Bytes(v, formatSettings) as string;\n };\n\n renderTooltip: YTHistogramProps['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> jobs have estimated input job size from ${x0} to ${x1}`;\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n const chartKitTheme = getTheme(state);\n\n return {operation, chartKitTheme};\n};\n\nconst connector = connect(mapStateToProps);\n\nconst PartitionSizesConnected = connector(PartitionSizes);\n\nexport default function PartitionSizesWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_PARTITION_SIZES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <PartitionSizesConnected />;\n}\n","import React from 'react';\nimport {Column} from '@gravity-ui/react-data-table';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport DataTableYT from '../../components/DataTableYT/DataTableYT';\nimport {Template} from '../../components/MetaTable/templates/Template';\n\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\nimport Icon from '../../components/Icon/Icon';\nimport Link from '../../components/Link/Link';\nimport {showErrorPopup} from '../../utils/utils';\nimport {compareWithUndefined} from '../../utils/sort-helpers';\n\nimport './AlertEvents.scss';\n\nconst block = cn('alert-events');\n\ninterface Props {\n className?: string;\n items: Array<AlertInfo>;\n}\n\nexport interface AlertInfo {\n from?: string;\n to?: string;\n type: string;\n error: unknown;\n url?: string;\n}\n\nconst columns: Array<Column<AlertInfo>> = [\n {\n name: 'Type',\n render({row}) {\n return (\n <span>\n {format.Readable(row.type)}\n {Boolean(row.url) && (\n <Link url={row.url} theme={'secondary'}>\n &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 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}) {\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 />\n </div>\n );\n }\n\n renderIO(type, items, tableProps) {\n return (\n <CollapsibleTable\n {...tableProps}\n prepareVisibleItems={prepareVisibleItems}\n filterVisibleItems={filterVisibleItems}\n className={specificationBlock(type)}\n css={specificationBlock('io')}\n heading={type}\n items={items}\n />\n );\n }\n\n renderIntermediate(intermediate, title) {\n const {cluster} = this.props;\n\n return (\n <div className={specificationBlock('intermediate')}>\n <div className={headingBlock({size: 's'})}>{title}</div>\n\n <TemplateLivePreivew {...intermediate} cluster={cluster} />\n </div>\n );\n }\n\n renderTasks(tasks = []) {\n return tasks.map((task) => task && this.renderScript(task));\n }\n\n render() {\n const {\n mode,\n transferTask,\n remote,\n startedBy,\n mapper,\n reducer,\n reduceCombiner,\n input,\n intermediate,\n output,\n stderr,\n tasks,\n coredumps,\n } = this.props.specification;\n\n return (\n <div className={specificationBlock()}>\n {(transferTask || mode) && this.renderTransferTask({...transferTask, mode})}\n\n {remote && this.renderRemote(remote)}\n {startedBy && this.renderStartedBy(startedBy)}\n\n {input?.length > 0 && this.renderIO('input', input, inputTableProps)}\n {intermediate && this.renderIntermediate(intermediate, 'Intermediate')}\n {output?.length > 0 && this.renderIO('output', output, outputTableProps)}\n {stderr?.length > 0 && this.renderIO('stderr', stderr, stderrTableProps)}\n {coredumps?.length > 0 && this.renderIO('core', coredumps, stderrTableProps)}\n\n {mapper && this.renderScript(mapper)}\n {reducer && this.renderScript(reducer)}\n {reduceCombiner && this.renderScript(reduceCombiner)}\n\n {tasks && this.renderTasks(tasks)}\n </div>\n );\n }\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport Modal from '../../../../../../components/Modal/Modal';\nimport Link from '../../../../../../components/Link/Link';\nimport Icon from '../../../../../../components/Icon/Icon';\n\nimport withVisible from '../../../../../../hocs/withVisible';\nimport hammer from '../../../../../../common/hammer';\n\nimport {docsUrl} from '../../../../../../config';\n\nimport './DetailedJobsCounter.scss';\nimport UIFactory from '../../../../../../UIFactory';\n\nconst block = cn('operation-jobs-detailed');\n\nclass DetailedJobsCounter extends Component {\n renderSection(name, items) {\n return (\n <div className=\"elements-section\">\n <div className=\"elements-heading elements-heading_size_s\">{name}</div>\n\n <MetaTable items={items} />\n </div>\n );\n }\n\n renderHelpLink(helpUrl) {\n return docsUrl(\n <div className=\"elements-section\">\n <Link url={helpUrl}>\n <Icon awesome=\"book\" /> Help\n </Link>\n </div>,\n );\n }\n\n renderAborted(item) {\n const scheduledCounters = item.scheduled.counters;\n const scheduledTotal = {key: 'total', value: item.scheduled.total};\n const scheduledItems = [scheduledTotal, ...scheduledCounters];\n\n const nonScheduledCounters = item.nonScheduled.counters;\n const nonScheduledTotal = {\n key: 'total',\n value: item.nonScheduled.total,\n };\n const nonScheduledItems = [nonScheduledTotal, ...nonScheduledCounters];\n\n const helpUrl = UIFactory.docsUrls['operations:overview#aborted_jobs'];\n\n return (\n <div className=\"pretty-scroll\">\n {this.renderSection('Scheduled', scheduledItems)}\n\n {this.renderSection('Non scheduled', nonScheduledItems)}\n\n {this.renderHelpLink(helpUrl)}\n </div>\n );\n }\n\n renderCompleted(item) {\n const nonInterruptedItems = [{key: 'total', value: item.nonInterrupted.total}];\n\n const interruptedCounters = item.interrupted.counters;\n const interruptedTotal = {\n key: 'total',\n value: item.interrupted.total,\n };\n const nonScheduledItems = [interruptedTotal, ...interruptedCounters];\n\n const helpUrl = UIFactory.docsUrls['operations:overview#completed_jobs'];\n\n return (\n <div className=\"pretty-scroll\">\n {this.renderSection('Non interrupted', nonInterruptedItems)}\n\n {this.renderSection('Interrupted', nonScheduledItems)}\n\n {this.renderHelpLink(helpUrl)}\n </div>\n );\n }\n\n renderModalContent(type) {\n const {item} = this.props;\n\n return type === 'aborted'\n ? this.renderAborted(item.abortedStats)\n : this.renderCompleted(item.completedStats);\n }\n\n renderCount(type, primary, secondary) {\n return type === 'aborted' ? (\n <span>\n {hammer.format['Number'](primary)}\n &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 <div className={block()}>\n <Link theme=\"ghost\" size=\"xs\" onClick={handleShow}>\n View\n </Link>\n\n {this.renderCount(type, primaryValue, secondaryValue)}\n\n <Modal\n onOutsideClick={handleClose}\n onCancel={handleClose}\n content={modalContent}\n visible={visible}\n footer={false}\n title={title}\n />\n </div>\n );\n }\n}\n\nDetailedJobsCounter.propTypes = {\n primaryValue: PropTypes.number.isRequired,\n secondaryValue: PropTypes.number.isRequired,\n visible: PropTypes.bool.isRequired,\n handleShow: PropTypes.func.isRequired,\n handleClose: PropTypes.func.isRequired,\n type: PropTypes.oneOf(['aborted', 'completed']),\n item: PropTypes.shape({\n caption: PropTypes.string.isRequired,\n }),\n};\n\nexport default withVisible(DetailedJobsCounter);\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\nimport {hasProgressTasks} from './data-flow';\nimport {prepareTableColumns} from '../../../../utils/index';\n\nfunction sortCounters(reasonA, reasonB) {\n return hammer.utils.compareVectors(\n [reasonA.key === 'other' ? 1 : -1, reasonA.key],\n [reasonB.key === 'other' ? 1 : -1, reasonB.key],\n 'asc',\n );\n}\n\nfunction prepareCategoryCounters(counters, category) {\n if (typeof counters[category] === 'object') {\n const prepared = reduce_(\n counters[category],\n (statistics, count, key) => {\n statistics.counters.push({\n value: count,\n key: key,\n });\n statistics.total += count;\n\n return statistics;\n },\n {\n counters: [],\n total: 0,\n },\n );\n\n prepared.counters.sort(sortCounters);\n\n return prepared;\n } else {\n return {\n total: counters[category],\n };\n }\n}\n\nfunction prepareCompletedStatistics(counters) {\n const completed = counters.completed;\n\n return {\n interrupted: prepareCategoryCounters(completed, 'interrupted'),\n nonInterrupted: prepareCategoryCounters(completed, 'non-interrupted'), // XXX API NAMING BUG\n total: completed['total'],\n };\n}\n\nfunction prepareAbortedStatistics(counters) {\n const aborted = counters.aborted;\n\n return {\n scheduled: prepareCategoryCounters(aborted, 'scheduled'),\n nonScheduled: prepareCategoryCounters(aborted, 'non_scheduled'),\n total: aborted['total'],\n };\n}\n\nfunction prepareJobTypeOrder(jobTypeOrder) {\n const SOURCE = 'source';\n const SINK = 'sink';\n\n // REMOVE source, sink\n jobTypeOrder = filter_(jobTypeOrder, (jobType) => {\n const type = String(jobType).toLowerCase();\n return type !== SOURCE && type !== SINK;\n });\n // ADD total\n jobTypeOrder.push('total');\n\n return jobTypeOrder;\n}\n\nexport function prepareDataFromGraph(operation) {\n if (hasProgressTasks(operation)) {\n return prepareDataFromGraphByTasks(operation);\n }\n\n const dataFlowGraph = ypath.getValue(operation, '/@progress/data_flow_graph');\n let jobTypeOrder = ypath.getValue(dataFlowGraph, '/topological_ordering');\n const countersByType = ypath.getValue(dataFlowGraph, '/vertices');\n let data = [];\n\n if (dataFlowGraph) {\n jobTypeOrder = prepareJobTypeOrder(jobTypeOrder);\n\n // In case of inconsistent graph data\n jobTypeOrder = filter_(jobTypeOrder, (jobType) => {\n return typeof countersByType[jobType] !== 'undefined';\n });\n\n data = map_(jobTypeOrder, (taskType) => {\n return {\n type: taskType,\n jobType: taskType === 'total' ? taskType : countersByType[taskType].job_type,\n counters: countersByType[taskType].job_counter,\n };\n });\n\n data = map_(data, (jobTypeInfo) => {\n const type = jobTypeInfo.type;\n const counters = jobTypeInfo.counters;\n return {\n type: type,\n caption: type,\n jobType: jobTypeInfo.jobType,\n ...prepareCounters(counters),\n };\n });\n }\n\n return data;\n}\n\nfunction prepareDataFromGraphByTasks(operation) {\n const tasks = ypath.getValue(operation, '/@progress/tasks');\n\n const res = map_(tasks, (task) => {\n const {task_name, job_type, job_counter} = task;\n return {\n type: task_name,\n caption: task_name,\n jobType: job_type,\n ...prepareCounters(job_counter),\n info: task,\n };\n });\n\n const totalCounters = ypath.getValue(operation, '/@progress/total_job_counter');\n res.push({\n type: 'total',\n caption: 'total',\n jobType: 'total',\n ...prepareCounters(totalCounters),\n info: totalCounters,\n isTotal: true,\n });\n\n return res;\n}\n\nfunction prepareCounters(counters) {\n return {\n counters,\n abortedStats: prepareAbortedStatistics(counters),\n completedStats: prepareCompletedStatistics(counters),\n };\n}\n\nfunction prepareColumns() {\n const states = ['total', 'pending', 'running', 'completed', 'failed', 'aborted', 'lost'];\n\n const columns = {\n job_type: {\n sort: false,\n align: 'left',\n caption: 'Task',\n },\n };\n\n forEach_(states, (state) => {\n columns[state] = {\n sort: false,\n align: 'right',\n };\n });\n\n columns.actions = {\n name: 'actions',\n sort: 'false',\n caption: '',\n };\n\n return {\n items: prepareTableColumns(columns),\n sets: {\n default: {\n items: ['job_type'].concat(states),\n },\n withActions: {\n items: map_(columns, (_x, name) => name),\n },\n },\n mode: 'default',\n };\n}\n\nexport const tasksTablesProps = {\n theme: 'light',\n striped: false,\n virtual: false,\n size: 'm',\n columns: prepareColumns(),\n computeKey(item) {\n return item.type;\n },\n};\n","import {ValueOf} from '../../../@types/types';\n\nexport interface FieldTree<T = unknown> extends Record<string, FieldTree<T> | T> {}\n\nexport type FieldTreePredicate<T, R> = (path: Array<string>, tree?: FieldTree<T>, item?: T) => R;\n\nexport function fieldTreeForEach<T>(\n vertex: ValueOf<FieldTree<T>>,\n isT: (v: typeof vertex) => v is T,\n visitorCb: FieldTreePredicate<T, void>,\n path: Array<string> = [],\n) {\n if (isT(vertex)) {\n visitorCb(path, undefined, vertex);\n } else {\n if (!vertex) {\n return;\n }\n if (path.length) {\n visitorCb(path, vertex, undefined);\n }\n Object.keys(vertex ?? {}).forEach((k) => {\n path.push(k);\n fieldTreeForEach(vertex[k], isT, visitorCb, path);\n path.pop();\n });\n }\n}\n\nexport function filterFieldTree<T>(\n vertex: FieldTree<T>,\n isT: (v: FieldTree<T> | T) => v is T,\n predicate: FieldTreePredicate<T, boolean | undefined>,\n filterT?: (item: T) => T | undefined,\n path: Array<string> = [],\n): FieldTree<T> | undefined {\n let empty = true;\n const res: typeof vertex = {};\n Object.keys(vertex).forEach((k) => {\n path.push(k);\n const item = vertex[k];\n if (isT(item)) {\n if (predicate(path, undefined, item)) {\n const tmp = filterT ? filterT(item) : item;\n if (tmp !== undefined) {\n res[k] = tmp;\n empty = false;\n }\n }\n } else if (predicate(path, item, undefined)) {\n const tmp = filterFieldTree(item, isT, predicate, filterT, path);\n if (tmp !== undefined) {\n res[k] = tmp;\n empty = false;\n }\n }\n\n path.pop();\n });\n return empty ? undefined : res;\n}\n\nexport function fieldTreeSome<T>(\n vertex: FieldTree<T>,\n isT: (v: FieldTree<T> | T) => v is T,\n predicate: FieldTreePredicate<T, boolean | undefined>,\n path: Array<string> = [],\n): boolean {\n return Object.keys(vertex).some((k) => {\n path.push(k);\n const item = vertex[k];\n if (isT(item)) {\n if (predicate(path, undefined, item)) {\n return true;\n }\n } else if (predicate(path, item, undefined)) {\n return true;\n } else if (fieldTreeSome(item, isT, predicate, path)) {\n return true;\n }\n\n path.pop();\n return false;\n });\n}\n","import {createSelector} from 'reselect';\nimport compact_ from 'lodash/compact';\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport get_ from 'lodash/get';\nimport isEmpty_ from 'lodash/isEmpty';\nimport min_ from 'lodash/min';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport reduce_ from 'lodash/reduce';\nimport sum_ from 'lodash/sum';\n\nimport {\n FieldTree,\n fieldTreeForEach,\n fieldTreeSome,\n filterFieldTree,\n} from '../../../common/hammer/field-tree';\nimport format from '../../../common/hammer/format';\n\nimport ypath from '../../../common/thor/ypath';\nimport {STATISTICS_FILTER_ALL_VALUE} from '../../../constants/operations/statistics';\nimport {RootState} from '../../../store/reducers';\nimport {ValueOf} from '../../../../@types/types';\nimport {prepareDataFromGraph} from '../../../utils/operations/tabs/details/tasks';\n\nconst getJobTypeFilter = (state: RootState) => state.operations.statistics.jobTypeFilter;\nconst getPoolTreeFilter = (state: RootState) => state.operations.statistics.poolTreeFilter;\nconst getFilterText = (state: RootState) => state.operations.statistics.filterText;\n\nconst getOperationDetailsOperation = (state: RootState) => state.operations.detail.operation;\n\nexport const getOperationStatisticsV2 = createSelector(\n [getOperationDetailsOperation],\n (operation) => {\n return ypath.getValue(operation, '/@progress/job_statistics_v2') as\n | StatisticTreeRoot\n | undefined;\n },\n);\n\ninterface StatisticItem {\n summary: StatisticItemSummary;\n tags: StatisticItemTags;\n}\n\nexport interface StatisticItemSummary {\n min: number;\n max: number;\n sum: number;\n count: number;\n}\n\ninterface StatisticItemTags {\n job_state: JobState;\n job_type: string;\n pool_tree: string;\n}\n\nexport type JobState = 'completed' | 'running' | 'aborted' | 'failed' | 'lost';\n\ntype StatisticTree = FieldTree<Array<StatisticItem>>;\n\ntype StatisticTreeRoot = StatisticTree & {\n time?: StatisticTree & {total?: Array<StatisticItem>};\n data?: {\n input?: {\n data_weight?: Array<StatisticItem>;\n row_count?: Array<StatisticItem>;\n };\n };\n};\n\nexport function isStatisticItem(v?: ValueOf<StatisticTree>): v is Array<StatisticItem> {\n return Array.isArray(v);\n}\n\nexport const getOperationStatisticsAvailableValues = createSelector(\n [getOperationStatisticsV2],\n (stats) => {\n const total = stats?.time?.total ?? [];\n const tmp = reduce_(\n total,\n (acc, item) => {\n forEach_(item.tags, (v, k) => {\n const key = k as keyof typeof acc;\n if (v) {\n if (!acc[key]) {\n acc[key] = new Set();\n }\n acc[key].add(v);\n }\n });\n return acc;\n },\n {} as Record<keyof Partial<Omit<StatisticItemTags, 'job_state'>>, Set<string>>,\n );\n return reduce_(\n tmp,\n (acc, v, k) => {\n const key = k as keyof typeof acc;\n acc[key] = new Array(...v.values());\n return acc;\n },\n {} as Record<keyof typeof tmp, Array<string>>,\n );\n },\n);\n\nexport const getOperationStatisticsActiveFilterValues = createSelector(\n [getJobTypeFilter, getPoolTreeFilter, getFilterText, getOperationStatisticsAvailableValues],\n (jobTypeFilter, poolTreeFilter, filterText, {job_type, pool_tree}) => {\n return {\n activeJobType:\n -1 === job_type.indexOf(jobTypeFilter)\n ? STATISTICS_FILTER_ALL_VALUE\n : jobTypeFilter,\n activePoolTree:\n -1 === pool_tree.indexOf(poolTreeFilter)\n ? STATISTICS_FILTER_ALL_VALUE\n : poolTreeFilter,\n filterText,\n };\n },\n);\n\nexport const getOperationStatiscsHasData = (state: RootState) => {\n return !isEmpty_(getOperationStatisticsV2(state));\n};\n\nexport const getOperationStatisticsFilteredTree = createSelector(\n [getOperationStatisticsActiveFilterValues, getOperationStatisticsV2],\n ({activeJobType, activePoolTree, filterText}, tree) => {\n if (!activeJobType && !activePoolTree && !filterText) {\n return tree;\n }\n\n const checkByName = !filterText.length\n ? () => true\n : (path: Array<string>) => {\n const pathText = path.join('/');\n return -1 !== pathText.indexOf(filterText);\n };\n\n return filterFieldTree(\n tree ?? {},\n isStatisticItem,\n (path, tree) => {\n if (checkByName(path)) {\n return true;\n }\n return tree && fieldTreeSome(tree, isStatisticItem, checkByName, path.slice());\n },\n (items) => {\n return filter_(items, ({tags: {job_type, pool_tree}}) => {\n if (activeJobType && job_type !== activeJobType) {\n return false;\n }\n if (activePoolTree && pool_tree !== activePoolTree) {\n return false;\n }\n return true;\n });\n },\n );\n },\n);\n\nexport const getOperationStatisticsFiltered = createSelector(\n [getOperationStatisticsFilteredTree],\n (tree) => {\n const res: Array<{\n name: string;\n title: string;\n level: number;\n data?: Partial<Record<JobState, StatisticItemSummary>>;\n isLeafNode?: boolean;\n }> = [];\n fieldTreeForEach(tree ?? {}, isStatisticItem, (path, _tree, item) => {\n const isLeafNode = Boolean(item);\n res.push({\n title: path[path.length - 1],\n level: path.length - 1,\n data: item ? itemToRow(item) : undefined,\n isLeafNode,\n name: path.join('/'),\n });\n });\n return res;\n },\n);\n\nfunction itemToRow(items: Array<StatisticItem>) {\n const res: Partial<Record<JobState, StatisticItemSummary>> = {};\n forEach_(items, ({summary, tags: {job_state}}) => {\n res[job_state] = mergeSummary(summary, res[job_state]);\n });\n return res;\n}\n\nfunction mergeSummary(summary: StatisticItemSummary, current?: StatisticItemSummary) {\n if (!current) {\n return summary;\n }\n\n const c = sum_([summary.count, current.count])!;\n const s = sum_([summary.sum, current?.sum]);\n return {\n min: min_([summary.min, current.min])!,\n max: max_([summary.max, current.max])!,\n count: c,\n sum: s,\n };\n}\n\nexport const getTotalJobWallTime = createSelector(getOperationStatisticsV2, (tree) => {\n const item = tree?.time?.total;\n return excludeRunningAndCalcSum(item);\n});\n\nfunction excludeRunningAndCalcSum(item?: Array<StatisticItem>) {\n const {running: _tmp, ...rest} = itemToRow(item ?? []);\n const valuesToSum = compact_(map_(rest, 'sum'));\n return !valuesToSum.length ? format.NO_VALUE : sum_(valuesToSum);\n}\n\nconst CPU_TIME_SPENT_PART_NAMES = [\n 'job_proxy.cpu.user',\n 'job_proxy.cpu.system',\n 'user_job.cpu.user',\n 'user_job.cpu.system',\n];\n\nexport const getTotalCpuTimeSpent = createSelector([getOperationStatisticsV2], (tree) => {\n const items = reduce_(\n CPU_TIME_SPENT_PART_NAMES,\n (acc, path) => {\n const item = get_(tree, path);\n if (isStatisticItem(item)) {\n const value = excludeRunningAndCalcSum(item);\n if (value !== undefined) {\n acc.push(value);\n }\n }\n return acc;\n },\n [] as Array<number>,\n );\n return items.length ? sum_(items) : format.NO_VALUE;\n});\n\nexport const getOperationDetailTasksData = createSelector(\n [getOperationDetailsOperation, getOperationStatisticsV2],\n (operation, stats) => {\n const items = prepareDataFromGraph(operation);\n\n const {running: _r, ...timeStatistics} = itemToRow(stats?.time?.total ?? []);\n\n const abortedJobsTime = timeStatistics.aborted?.sum;\n const completedJobsTime = timeStatistics.completed?.sum;\n\n const abortedJobsTimeRatio = prepareAbortedJobsTimeRatio(\n abortedJobsTime,\n completedJobsTime,\n );\n\n const averageReadDataRate = prepareAverageReadDataRate(stats || {}, completedJobsTime);\n const averageReadRowRate = prepareAverageReadRowRate(stats || {}, completedJobsTime);\n\n if (\n !timeStatistics &&\n !abortedJobsTime &&\n !completedJobsTime &&\n !abortedJobsTimeRatio &&\n !averageReadDataRate &&\n !averageReadDataRate &&\n items.length === 0\n ) {\n return {items: []};\n }\n\n return {\n items,\n abortedJobsTime,\n completedJobsTime,\n abortedJobsTimeRatio,\n averageReadDataRate,\n averageReadRowRate,\n };\n },\n);\n\nfunction prepareAbortedJobsTimeRatio(abortedJobsTime?: number, completedJobsTime?: number) {\n let abortedJobsShare;\n\n if (typeof completedJobsTime !== 'undefined' && typeof abortedJobsTime !== 'undefined') {\n if (abortedJobsTime > 0 && completedJobsTime > 0) {\n abortedJobsShare = (abortedJobsTime / completedJobsTime) * 100;\n } else if (abortedJobsTime > 0) {\n abortedJobsShare = 100;\n } else if (completedJobsTime > 0) {\n abortedJobsShare = 0;\n }\n }\n\n return abortedJobsShare;\n}\n\nfunction prepareAverageReadDataRate(stats: StatisticTreeRoot, completedJobsTime = NaN) {\n const completedInputSize = itemToRow(stats?.data?.input?.data_weight || []).completed?.sum ?? 0;\n\n return completedInputSize > 0 ? completedInputSize / (completedJobsTime / 1000) : undefined;\n}\n\nfunction prepareAverageReadRowRate(stats: StatisticTreeRoot, completedJobsTime = NaN) {\n const completedInputRows = itemToRow(stats?.data?.input?.row_count || []).completed?.sum ?? 0;\n\n return completedJobsTime > 0 ? completedInputRows / (completedJobsTime / 1000) : undefined;\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\nimport MetaTable, {Template} from '../../../../../../components/MetaTable/MetaTable';\n\nimport hammer from '../../../../../../common/hammer';\nimport ypath from '../../../../../../common/thor/ypath';\n\nimport './Tasks.scss';\nimport DetailedJobsCounter from '../DetailedJobsCounter/DetailedJobsCounter';\nimport {tasksTablesProps} from '../../../../../../utils/operations/tabs/details/tasks';\nimport {hasProgressTasks} from '../../../../../../utils/operations/tabs/details/data-flow';\nimport ClickableAttributesButton from '../../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ExpandIcon from '../../../../../../components/ExpandIcon/ExpandIcon';\nimport {RootState} from '../../../../../../store/reducers';\nimport {getOperationDetailTasksData} from '../../../../../../store/selectors/operations/statistics-v2';\n\nconst block = cn('jobs');\n\nfunction prepareVisibleItems(items: Array<Item> = [], expandedState: Record<string, boolean>) {\n const visibleItems: typeof items = [];\n forEach_(items, (item) => {\n visibleItems.push(item);\n const {caption} = item;\n if (expandedState[caption!]) {\n visibleItems.push({taskInfo: item.info});\n }\n });\n return {\n items,\n visibleItems,\n };\n}\n\ninterface Item {\n type?: string;\n caption?: string;\n jobType?: string;\n info?: ItemTaskInfo;\n taskInfo?: Item['info'];\n counters?: Record<string, unknown>;\n abortedStats?: AbortedStats;\n completedStats?: CompletedStats;\n isTotal?: boolean;\n}\n\ninterface AbortedStats {\n scheduled: {total: number};\n nonScheduled: {total: number};\n}\n\ninterface CompletedStats {\n interrupted: {total: number};\n nonInterrupted: {total: number};\n}\n\ninterface OwnProps {\n className?: string;\n collapsibleSize?: 'ss';\n}\n\ntype Props = OwnProps & ConnectedProps<typeof connector>;\n\ninterface State {\n allowActions: boolean;\n expandedState: Record<string, boolean>;\n visibleItems: Array<Item>;\n items: Array<Item>;\n operation: unknown;\n}\n\nclass Tasks extends React.Component<Props, State> {\n static getDerivedStateFromProps(props: Props, state: State) {\n const {\n operation,\n jobs: {items},\n } = props;\n const {operation: prevOperation, items: prevItems, expandedState} = state;\n const res = {};\n if (operation !== prevOperation) {\n Object.assign(res, {\n operation,\n allowActions: hasProgressTasks(operation),\n });\n }\n\n if (items !== prevItems) {\n Object.assign(res, {\n ...prepareVisibleItems(items, expandedState),\n });\n }\n\n return isEmpty_(res) ? null : res;\n }\n\n state: State = {\n allowActions: false,\n expandedState: {},\n\n visibleItems: [],\n\n items: [],\n operation: undefined,\n };\n\n private templates: Record<\n string | '__default__',\n (item: Item, column: string) => React.ReactNode\n >;\n\n constructor(props: Props) {\n super(props);\n\n const self = this;\n this.templates = {\n __default__(item, column) {\n if (!item.counters) {\n return null;\n }\n return <span>{hammer.format['Number'](item.counters[column])}</span>;\n },\n aborted(item) {\n if (!item?.abortedStats) {\n return null;\n }\n const {scheduled, nonScheduled} = item.abortedStats;\n\n return (\n <DetailedJobsCounter\n title={`Aborted statistics: ${item.caption}`}\n secondaryValue={nonScheduled.total}\n primaryValue={scheduled.total}\n type=\"aborted\"\n item={item}\n />\n );\n },\n completed(item) {\n if (!item?.completedStats) {\n return null;\n }\n const {nonInterrupted, interrupted} = item.completedStats;\n\n return (\n <DetailedJobsCounter\n title={`Completed statistics: ${item.caption}`}\n secondaryValue={interrupted.total}\n primaryValue={nonInterrupted.total}\n type=\"completed\"\n item={item}\n />\n );\n },\n job_type(item) {\n const {caption, jobType, taskInfo, isTotal} = item;\n if (taskInfo) {\n return <TaskInfo {...taskInfo} />;\n }\n\n const {expandedState, allowActions} = self.state;\n const expandable = !isTotal && allowActions && caption;\n\n const expanded = expandedState[caption!];\n const onClick = !expandable ? undefined : () => self.toggleExpand(caption);\n\n return (\n <div className={block('job-type')}>\n <div>\n {Boolean(caption) && (\n <ExpandIcon\n visible={Boolean(onClick)}\n expanded={Boolean(expanded)}\n onClick={onClick}\n />\n )}\n </div>\n <div\n onClick={onClick}\n className={block('name', {\n clickable: Boolean(expandable),\n })}\n >\n <span title={`Task ${caption}`}>{caption}</span>\n {!isTotal && (\n <React.Fragment>\n <br />\n {typeof item.jobType !== 'undefined' && (\n <span\n className={'elements-secondary-text'}\n title={`Job type ${jobType}`}\n >\n {jobType}\n </span>\n )}\n </React.Fragment>\n )}\n </div>\n </div>\n );\n },\n actions({info, caption}) {\n if (!info) {\n return null;\n }\n return <ClickableAttributesButton title={`Tasks: ${caption}`} attributes={info} />;\n },\n };\n }\n\n // eslint-disable-next-line react/sort-comp\n toggleExpand(name: string) {\n const expandedState = {...this.state.expandedState};\n if (expandedState[name]) {\n delete expandedState[name];\n } else {\n expandedState[name] = true;\n }\n\n this.setState({\n expandedState,\n ...prepareVisibleItems(this.state.items, expandedState),\n });\n }\n\n rowClassName(item: Item) {\n if (item.taskInfo) {\n return block('row-task-info');\n }\n return item.isTotal ? block('row-total') : undefined;\n }\n\n colSpan(item: Item, _rowIndex: number, colIndex: number) {\n if (item.taskInfo && colIndex === 0) {\n return 8;\n }\n return undefined;\n }\n\n render() {\n const {className, jobs, collapsibleSize} = this.props;\n return !jobs?.items?.length ? null : (\n <CollapsibleSection\n name=\"Tasks\"\n className={className}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n {this.renderContent()}\n </CollapsibleSection>\n );\n }\n\n renderContent() {\n const {\n abortedJobsTimeRatio,\n abortedJobsTime,\n completedJobsTime,\n averageReadDataRate,\n averageReadRowRate,\n items,\n } = this.props.jobs;\n const rowRateFormat = (value: number) =>\n hammer.format['NumberPerSecond'](value, {measure: 'rows'});\n const {allowActions, visibleItems} = this.state;\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n [\n {\n key: 'aborted_jobs_time_ratio',\n value: (\n <Template.FormattedValue\n value={abortedJobsTimeRatio}\n format=\"Percent\"\n />\n ),\n },\n {\n key: 'aborted_jobs_time',\n value: (\n <Template.FormattedValue\n value={abortedJobsTime}\n format=\"TimeDuration\"\n />\n ),\n },\n {\n key: 'completed_jobs_time',\n value: (\n <Template.FormattedValue\n value={completedJobsTime}\n format=\"TimeDuration\"\n />\n ),\n },\n ],\n [\n {\n key: 'average_read_data_rate',\n value: (\n <Template.FormattedValue\n value={averageReadDataRate}\n format=\"BytesPerSecond\"\n />\n ),\n },\n {\n key: 'average_read_row_rate',\n value: (\n <Template.FormattedValue\n value={averageReadRowRate}\n format={rowRateFormat}\n />\n ),\n },\n ],\n ]}\n />\n\n <div className={block('table-container')}>\n {items.length > 0 && (\n <ElementsTable\n {...tasksTablesProps}\n columnsMode={allowActions ? 'withActions' : undefined}\n items={visibleItems}\n css={block()}\n templates={this.templates}\n rowClassName={this.rowClassName}\n colSpan={this.colSpan}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\ninterface ItemTaskInfo {\n job_type: string;\n has_user_job: boolean;\n input_finished: boolean;\n completed: boolean;\n user_job_memory_reserve_factor: number;\n start_time: string;\n completion_time: string;\n ready_time: string;\n exhaust_time: string;\n}\n\nfunction TaskInfo(props: ItemTaskInfo) {\n const {\n job_type,\n has_user_job,\n input_finished,\n completed,\n user_job_memory_reserve_factor,\n start_time,\n completion_time,\n ready_time,\n exhaust_time,\n } = props;\n\n const readyTime = ypath.getValue(ready_time);\n const exhaustTime = ypath.getValue(exhaust_time);\n\n const timeSum = readyTime + exhaustTime;\n\n return (\n <MetaTable\n className={block('info-meta')}\n items={[\n [\n {\n key: 'job_type',\n value: <Template.Value value={ypath.getValue(job_type)} />,\n },\n {\n key: 'has_user_job',\n value: <Template.Readable value={String(ypath.getValue(has_user_job))} />,\n },\n {\n key: 'input_finished',\n value: <Template.Readable value={String(ypath.getValue(input_finished))} />,\n },\n {\n key: 'completed',\n value: <Template.Readable value={String(ypath.getValue(completed))} />,\n },\n {\n key: 'user_job_memory_reserve_factor',\n value: (\n <Template.Number\n value={ypath.getValue(user_job_memory_reserve_factor)}\n />\n ),\n },\n {\n key: 'start_time',\n value: <Template.Time time={ypath.getValue(start_time)} />,\n },\n {\n key: 'completion_time',\n value: <Template.Time time={ypath.getValue(completion_time)} />,\n },\n ],\n [\n {\n key: 'ready_time',\n value: (\n <Template.Time\n time={readyTime}\n valueFormat={'TimeDuration'}\n settings={{format: 'milliseconds'}}\n />\n ),\n },\n {\n key: 'exhaust_time',\n value: (\n <Template.Time\n time={exhaustTime}\n valueFormat={'TimeDuration'}\n settings={{format: 'milliseconds'}}\n />\n ),\n },\n {\n key: 'tail_time_fraction',\n value:\n timeSum === 0 ? (\n 'n/a'\n ) : (\n <Template.FormattedValue\n value={(exhaustTime / timeSum) * 100}\n format={'Percent'}\n settings={{digits: 1}}\n />\n ),\n },\n ],\n ]}\n />\n );\n}\n\nconst connector = connect((state: RootState) => {\n const taskData = getOperationDetailTasksData(state);\n return {jobs: taskData, operation: state.operations.detail.operation};\n});\n\nexport default connector(Tasks);\n","import React, {Component} from 'react';\nimport {connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport AlertEvents from '../../../../../../components/AlertEvents/AlertEvents';\nimport OperationDescription from '../../../../../../pages/operations/OperationDetail/tabs/details/Description';\nimport CollapsibleSection from '../../../../../../components/CollapsibleSection/CollapsibleSection';\nimport Button from '../../../../../../components/Button/Button';\nimport Error from '../../../../../../components/Error/Error';\nimport Icon from '../../../../../../components/Icon/Icon';\n\nimport DataFlow, {intermediateResourcesProps, resourcesProps} from '../DataFlow/DataFlow';\nimport Specification, {specificationProps} from '../Specification/Specification';\nimport Runtime, {operationProps, runtimeProps} from '../Runtime/Runtime';\nimport Events, {eventsProps} from '../Events/Events';\nimport Tasks from '../Tasks/Tasks';\n\nimport {showEditPoolsWeightsModal} from '../../../../../../store/actions/operations';\n\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {\n getOperationAlertEvents,\n getOperationDetailsLoadingStatus,\n} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\n\nimport './Details.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../../constants/global';\n\nexport {operationProps} from '../Runtime/Runtime';\n\nconst block = cn('operation-details');\n\nclass Details extends Component {\n static propTypes = {\n error: PropTypes.object,\n specification: specificationProps.isRequired,\n operation: operationProps.isRequired,\n cluster: PropTypes.string.isRequired,\n result: PropTypes.shape({\n error: PropTypes.object.isRequired,\n }),\n runtime: runtimeProps,\n events: eventsProps,\n resources: resourcesProps,\n intermediateResources: intermediateResourcesProps,\n showEditPoolsWeightsModal: PropTypes.func.isRequired,\n };\n\n handleEditClick = () => {\n const {operation, showEditPoolsWeightsModal} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderDescription() {\n const {description, collapsibleSize} = this.props.operation;\n\n return (\n description && (\n <CollapsibleSection\n name=\"Description\"\n className={block('description')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <OperationDescription description={description} />\n </CollapsibleSection>\n )\n );\n }\n\n renderSpecification() {\n const {specification, cluster, collapsibleSize} = this.props;\n\n return (\n <CollapsibleSection\n name=\"Specification\"\n className={block('specification')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Specification specification={specification} cluster={cluster} />\n </CollapsibleSection>\n );\n }\n\n renderAlerts() {\n const {alertEvents, collapsibleSize} = this.props;\n return !alertEvents?.length ? null : (\n <CollapsibleSection name=\"Alerts\" size={collapsibleSize} marginDirection=\"bottom\">\n <AlertEvents items={alertEvents} />\n </CollapsibleSection>\n );\n }\n\n renderError() {\n const {error} = this.props;\n\n return (\n error && (\n <div className={block('result')}>\n <Error {...error} />\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?.length > 0 && (\n <CollapsibleSection\n name=\"Runtime\"\n className={block('runtime')}\n overview={this.renderRuntimeOverview()}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Runtime runtime={runtime} operation={operation} cluster={cluster} />\n </CollapsibleSection>\n )\n );\n }\n\n renderJobs() {\n const {collapsibleSize} = this.props;\n return <Tasks className={block('jobs')} size={collapsibleSize} />;\n }\n\n renderResources() {\n const {resources, intermediateResources, operation, collapsibleSize} = this.props;\n\n return (\n resources && (\n <CollapsibleSection\n name=\"Data flow\"\n className={block('resources')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <DataFlow\n operation={operation}\n resources={resources}\n intermediateResources={intermediateResources}\n />\n </CollapsibleSection>\n )\n );\n }\n\n renderEvents() {\n const {events, collapsibleSize} = this.props;\n\n return (\n events && (\n <CollapsibleSection\n name=\"Events\"\n className={block('events')}\n size={collapsibleSize}\n marginDirection=\"bottom\"\n >\n <Events events={events} />\n </CollapsibleSection>\n )\n );\n }\n\n render() {\n return (\n <div className={block()}>\n <div className={block('section')}>\n {this.renderDescription()}\n {this.renderSpecification()}\n </div>\n\n <div className={block('section')}>\n {this.renderAlerts()}\n {this.renderError()}\n {this.renderRuntime()}\n {this.renderJobs()}\n {this.renderResources()}\n {this.renderEvents()}\n </div>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {operations, global} = state;\n\n const {cluster} = global;\n const {operation} = operations.detail;\n\n return {\n cluster,\n operation,\n ...operations.detail.details,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n alertEvents: getOperationAlertEvents(state),\n };\n};\n\nconst mapDispatchToProps = {\n showEditPoolsWeightsModal,\n};\n\nconst DetailsConnected = connect(mapStateToProps, mapDispatchToProps)(Details);\n\nexport default function DetailsWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_DETAILS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_DETAILS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <DetailsConnected />;\n}\n","import React from 'react';\nimport Link from '../Link/Link';\nimport {uiSettings} from '../../config/ui-settings';\n\nfunction StarTrackLink(props: {id: string; emptyContent?: React.ReactNode}) {\n const {id, emptyContent = null, ...rest} = props;\n\n const {trackerBaseUrl} = uiSettings;\n const url = `${trackerBaseUrl}/${id}`;\n return !id ? (\n <>{emptyContent}</>\n ) : (\n <Link {...rest} url={trackerBaseUrl ? url : undefined}>\n {id}\n </Link>\n );\n}\n\nexport default React.memo(StarTrackLink);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useSelector} from 'react-redux';\n\nimport map_ from 'lodash/map';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {CollapsibleSectionStateLess} from '../../../../components/CollapsibleSection/CollapsibleSection';\nimport {\n OperationExperimentItem,\n getOperationExperimentAssignments,\n getOperationId,\n} from '../../../../store/selectors/operations/operation';\nimport {ClickableText} from '../../../../components/ClickableText/ClickableText';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport StarTrackLink from '../../../../components/StarTrackLink/StarTrackLink';\nimport Yson from '../../../../components/Yson/Yson';\nimport {getOperationExperimentsYsonSettings} from '../../../../store/selectors/thor/unipika';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\nimport {YsonDownloadButton} from '../../../../components/DownloadAttributesButton';\n\nconst block = cn('experiment-assignments');\n\nexport default React.memo(ExperimentAssignments);\n\nconst ExperimentsItem = React.memo(ExperimentAssignmentsItem);\n\nfunction ExperimentAssignments({className}: {className: string}) {\n const items = useSelector(getOperationExperimentAssignments);\n const operationId = useSelector(getOperationId);\n const [collapsed, setCollapsed] = React.useState(true);\n\n const onToggleCollapse = React.useCallback(() => {\n setCollapsed(!collapsed);\n }, [collapsed, setCollapsed]);\n\n return !items?.length ? null : (\n <CollapsibleSectionStateLess\n className={block(null, className)}\n name=\"Experiments\"\n onToggle={onToggleCollapse}\n collapsed={collapsed}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n {map_(items, (item, index) => (\n <ExperimentsItem key={index} data={item} operationId={operationId} />\n ))}\n </CollapsibleSectionStateLess>\n );\n}\n\ninterface ItemProps {\n data: OperationExperimentItem;\n operationId: string;\n}\n\nfunction ExperimentAssignmentsItem(props: ItemProps) {\n const {data, operationId} = props;\n const [effectVisible, setEffectVisibility] = React.useState(false);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {fraction: _fr, ...effect} = ypath.getValue(data, '/effect');\n\n const settings = useSelector(getOperationExperimentsYsonSettings);\n\n const toggleEffectVisibility = React.useCallback(() => {\n setEffectVisibility(!effectVisible);\n window.dispatchEvent(new Event('resize'));\n }, [effectVisible, setEffectVisibility]);\n\n return (\n <div>\n <MetaTable\n items={[\n [\n {\n key: 'Experiment',\n value: ypath.getValue(data, '/experiment'),\n },\n {\n key: 'Group',\n value: ypath.getValue(data, '/group'),\n },\n ],\n [\n {\n key: 'Ticket',\n value: <StarTrackLink id={ypath.getValue(data, '/ticket')} />,\n },\n {\n key: 'Dimension',\n value: ypath.getValue(data, '/dimension'),\n },\n ],\n [\n {\n key: 'Effect',\n value: (\n <ClickableText onClick={toggleEffectVisibility}>\n {effectVisible ? 'Hide' : 'Show'}\n </ClickableText>\n ),\n },\n ],\n ]}\n />\n {effectVisible && (\n <Yson\n value={effect}\n settings={settings}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={effect}\n settings={settings}\n name={`experiment_assignments_${operationId}`}\n />\n }\n />\n )}\n </div>\n );\n}\n","import React from 'react';\nimport {connect, useSelector} from 'react-redux';\nimport unipika from '../../../../../common/thor/unipika';\n\nimport keys_ from 'lodash/keys';\nimport throttle_ from 'lodash/throttle';\n\nimport cn from 'bem-cn-lite';\n\nimport {CollapsibleSectionStateLess} from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport Yson from '../../../../../components/Yson/Yson';\n\nimport {operationProps} from '../../../../../pages/operations/OperationDetail/tabs/details/Details/Details';\n\nimport {\n getOperationDetailsLoadingStatus,\n getOperationId,\n} from '../../../../../store/selectors/operations/operation';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\n\nimport './Specification.scss';\nimport ExperimentAssignments from '../../ExperimentAssignments/ExperimentAssignments';\nimport {docsUrl} from '../../../../../config';\nimport UIFactory from '../../../../../UIFactory';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../constants/global';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\n\nconst block = cn('operation-specification');\n\nconst onResize = throttle_(\n () => {\n window.dispatchEvent(new Event('resize'));\n },\n 100,\n {leading: false},\n);\n\nfunction Specification({operation, operationId}) {\n const helpUrl = UIFactory.docsUrls['operations:operations_options'];\n\n const providedSpec = operation.typedProvidedSpec || operation.typedSpec;\n\n const unrecognizedSpec = operation.typedUnrecognizedSpec || {};\n const fullSpec = operation.typedFullSpec;\n\n const hasUnrecognized = keys_(unrecognizedSpec).length > 0;\n\n const [collapsed, setCollapsed] = React.useState({\n provided: hasUnrecognized,\n unrecognized: false,\n resulting: true,\n });\n\n const onToggleProvided = React.useCallback((provided) => {\n setCollapsed({unrecognized: true, resulting: true, provided});\n onResize();\n });\n\n const onToggleUnrecognized = React.useCallback((unrecognized) => {\n setCollapsed({unrecognized, provided: true, resulting: true});\n onResize();\n });\n\n const onToggleResulting = React.useCallback((resulting) => {\n setCollapsed({unrecognized: true, resulting, provided: true});\n onResize();\n });\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n {docsUrl(\n <div className={block('help', 'elements-section')}>\n <HelpLink url={helpUrl} />\n </div>,\n )}\n\n <CollapsibleSectionStateLess\n name=\"Provided specification\"\n onToggle={onToggleProvided}\n collapsed={collapsed.provided}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={providedSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={providedSpec}\n settings={unipika.prepareSettings()}\n name={`provider_specification_${operationId}`}\n />\n }\n />\n </CollapsibleSectionStateLess>\n\n <ExperimentAssignments />\n\n {hasUnrecognized && (\n <CollapsibleSectionStateLess\n name=\"Unrecognized specification\"\n onToggle={onToggleUnrecognized}\n collapsed={collapsed.unrecognized}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={unrecognizedSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={unrecognizedSpec}\n settings={unipika.prepareSettings()}\n name={`unrecognized_specification_${operationId}`}\n />\n }\n />\n </CollapsibleSectionStateLess>\n )}\n\n {fullSpec && (\n <CollapsibleSectionStateLess\n name=\"Resulting specification\"\n onToggle={onToggleResulting}\n collapsed={collapsed.resulting}\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection=\"bottom\"\n >\n <Yson\n value={fullSpec}\n settings={unipika.prepareSettings()}\n folding\n virtualized\n extraTools={\n <YsonDownloadButton\n value={fullSpec}\n settings={unipika.prepareSettings()}\n name={`resulting_specification_${operationId}`}\n />\n }\n />\n </CollapsibleSectionStateLess>\n )}\n </div>\n </ErrorBoundary>\n );\n}\n\nSpecification.propTypes = {\n // from connect\n operation: operationProps.isRequired,\n};\n\nconst mapStateToProps = (state) => ({\n operation: state.operations.detail.operation,\n operationId: getOperationId(state),\n});\n\nconst SpecificationConnected = connect(mapStateToProps)(Specification);\n\nexport default function SpecificationWithRum() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_SPECIFICATION,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_SPECIFICATION,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <SpecificationConnected />;\n}\n","import React from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ypath from '../../../../../../common/thor/ypath';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport format from '../../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\n\nimport {operationProps} from '../../details/Runtime/Runtime';\nimport {getTheme} from '../../../../../../store/selectors/global';\n\nimport WithStickyToolbar from '../../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {hasTaskHistograms} from '../../../../../../utils/operations/jobs';\nimport {getOperationDetailsLoadingStatus} from '../../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../../rum/RumUiContext';\nimport {RootState} from '../../../../../../store/reducers';\nimport YTHistogram, {\n YTHistogramProps,\n YTHistorgramData,\n calculateFormatSettings,\n} from '../../../../../../components/YTHistogram/YTHistogram';\n\nimport './JobSizes.scss';\n\nconst block = cn('operation-detail-job-sizes');\n\ntype Props = ConnectedProps<typeof connector> & {\n className?: string;\n};\n\ninterface State {\n formatSettings?: {digits: number};\n data?: YTHistorgramData;\n showEstimated: boolean;\n}\n\nclass JobSizes extends React.Component<Props, State> {\n static propTypes = {\n operation: operationProps.isRequired,\n chartKitTheme: PropTypes.string.isRequired,\n };\n\n static getDerivedStateFromProps(props: Props) {\n const progress = ypath.getValue(props.operation, '/@progress');\n const data = progress && ypath.getValue(progress, '/partition_size_histogram');\n\n return {\n formatSettings: calculateFormatSettings(data, format.Bytes),\n data,\n };\n }\n\n state: State = {\n showEstimated: false,\n };\n\n render() {\n const {className} = this.props;\n return (\n <WithStickyToolbar\n className={className}\n content={this.renderContent()}\n toolbar={\n <Toolbar\n itemsToWrap={[\n {\n name: 'showEstimated',\n node: (\n <Checkbox\n size=\"l\"\n onUpdate={this.toggleEstimated}\n checked={this.state.showEstimated}\n >\n Show estimated\n </Checkbox>\n ),\n },\n ]}\n />\n }\n />\n );\n }\n\n prepareJobSizes() {\n const {operation} = this.props;\n const progress = ypath.getValue(operation, '/@progress');\n\n return progress\n ? {\n estimatedJobSizeHistogram: ypath.getValue(\n progress,\n '/estimated_input_data_size_histogram',\n ),\n jobSizeHistogram: ypath.getValue(progress, '/input_data_size_histogram'),\n }\n : {};\n }\n\n renderChart(data: YTHistorgramData, title: string) {\n if (!data) {\n return null;\n }\n\n return (\n <div className={block('chart-section')}>\n <div className=\"elements-heading elements-heading_size_m\">{title}</div>\n <YTHistogram\n className={block('charts')}\n data={data}\n yLabel={'job count'}\n xLabel={'job input data weight'}\n xFormat={this.formatX}\n yMin={0.5}\n yLogarithmic\n renderTooltip={this.renderTooltip}\n />\n </div>\n );\n }\n\n formatX = (v?: number | string | null) => {\n const {formatSettings} = this.state;\n return format.Bytes(v, formatSettings) as string;\n };\n\n renderTooltip: YTHistogramProps['renderTooltip'] = (y, x0, x1) => {\n return `<b>${y}</b> jobs have estimated input job size from <b>${x0}</b> to <b>${x1}</b>`;\n };\n\n renderPerTaskCharts(tasks: any) {\n const {showEstimated} = this.state;\n return map_(\n tasks,\n ({task_name, estimated_input_data_weight_histogram, input_data_weight_histogram}) => {\n return (\n <div className={block('task-cell', {'per-task': true})} key={task_name}>\n {this.renderChart(\n input_data_weight_histogram,\n `Task \"${task_name}\" actual data weight`,\n )}\n {showEstimated &&\n this.renderChart(\n estimated_input_data_weight_histogram,\n `Task \"${task_name}\" estimated data weight`,\n )}\n </div>\n );\n },\n );\n }\n\n renderCommon() {\n const {showEstimated} = this.state;\n const {jobSizeHistogram, estimatedJobSizeHistogram} = this.prepareJobSizes();\n return (\n <div className={block('task-cell')}>\n {this.renderChart(jobSizeHistogram, 'Input')}\n {showEstimated && this.renderChart(estimatedJobSizeHistogram, 'Estimated input')}\n </div>\n );\n }\n\n renderContent() {\n const {operation} = this.props;\n const tasks = ypath.getValue(this.props.operation, '/@progress/tasks');\n return (\n <ErrorBoundary>\n <div className={block()}>\n {hasTaskHistograms(operation)\n ? this.renderPerTaskCharts(tasks)\n : this.renderCommon()}\n </div>\n </ErrorBoundary>\n );\n }\n\n toggleEstimated = () => {\n const {showEstimated} = this.state;\n this.setState({showEstimated: !showEstimated});\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const operation = state.operations.detail.operation;\n const chartKitTheme = getTheme(state);\n\n return {operation, chartKitTheme};\n};\n\nconst connector = connect(mapStateToProps);\n\nconst JobSizesConnected = connector(JobSizes);\n\nexport default function JobSizesWithRum(props: {className?: string}) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_JOB_SIZES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_JOB_SIZES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <JobSizesConnected {...props} />;\n}\n","const completedHintText =\n 'Completed jobs — those which have finished successfully (i.e. consumed entire input and exited with zero exit code). Please note that due to hardware failures some jobs may be run more than once.';\nconst abortedHintText =\n 'Aborted jobs — those with soft failure (i.e. resource overdraft or preemption). Please note that some of aborted jobs may be excluded from statistics.';\nconst failedHintText =\n 'Failed jobs — those with hard failure (i.e. exited with non-zero exit code). Please note that some of failed jobs may be excluded from statistics.';\nconst lostHintText =\n 'Lost jobs — those which have finished successfully but whose results were lost (typically due to hardware failures).';\n\nexport const STATISTIC_STATE = {\n completed: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: completedHintText},\n },\n aborted: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: abortedHintText},\n },\n failed: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: failedHintText},\n },\n lost: {\n sort: false,\n align: 'right',\n tooltipProps: {placement: 'bottom', content: lostHintText},\n },\n};\n\nexport const statisticsTableProps = {\n theme: 'light',\n size: 's',\n striped: false,\n computeKey(item) {\n return `<Root>/${item.name}`;\n },\n tree: true,\n columns: {\n sets: {\n default: {\n items: ['metric'].concat(Object.keys(STATISTIC_STATE)),\n },\n },\n items: {...STATISTIC_STATE, metric: {sort: false, align: 'left'}},\n mode: 'default',\n },\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport find_ from 'lodash/find';\nimport cn from 'bem-cn-lite';\n\nimport {getOperationStatisticsDescription} from '../../../../../store/selectors/global/supported-features';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport Icon from '../../../../../components/Icon/Icon';\nimport {Secondary} from '../../../../../components/Text/Text';\nimport format from '../../../../../common/hammer/format';\n\nimport './OperationStatisticName.scss';\n\nconst block = cn('operation-statistc-name');\n\nfunction useStatisticInfo(name: string) {\n const {byName, byRegexp} = useSelector(getOperationStatisticsDescription);\n\n const info = React.useMemo(() => {\n const key = name.startsWith('<Root>/') ? name.substring('<Root>/'.length) : name;\n const res = key.endsWith('/$$') ? byName[key.substring(0, key.length - 3)] : byName[key];\n if (res) {\n return res;\n }\n\n return find_(byRegexp, ({regexp}) => {\n return regexp.test(key);\n });\n }, [name, byName, byRegexp]);\n\n return info;\n}\n\nfunction OperationStatisticNameImpl({name, title}: {name: string; title: string}) {\n const info = useStatisticInfo(name);\n const emptyInfo = !info?.description && !info?.unit;\n\n return (\n <Tooltip\n content={\n emptyInfo ? null : (\n <MetaTable\n items={[\n {\n key: 'Description',\n value: info.description,\n visible: Boolean(info.description),\n className: block('description'),\n },\n {\n key: 'Unit',\n value: info.unit,\n visible: Boolean(info.unit),\n },\n ]}\n />\n )\n }\n >\n {title}{' '}\n {!emptyInfo && (\n <Secondary>\n <Icon awesome={'question-circle'} />\n </Secondary>\n )}\n </Tooltip>\n );\n}\n\nconst UNIT_TO_FORMATTER: Record<string, (v?: number, settings?: object) => string> = {\n ['ms']: (v, settings) =>\n format.TimeDuration(Math.round(v!), {format: 'milliseconds', ...settings}),\n ['bytes']: (v, settings) => formatBytes(v, settings),\n ['bytes * sec']: (v, settings) => formatBytes(v, settings, ' * sec'),\n ['ms * bytes']: (v, settings) => formatBytes(v, settings, ' * ms'),\n ['Mb*sec']: (v, settings) => formatBytes(v! * 1024 * 1024, settings, ' * sec'),\n};\n\nfunction formatBytes(v?: number, settings?: object, suffix = '') {\n return isNaN(v!) ? format.NO_VALUE : format.Bytes(Math.round(v!), settings) + suffix;\n}\n\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 formatFn = UNIT_TO_FORMATTER[info?.unit || ''];\n\n const asNumber = format.Number(value, settings);\n\n return formatFn ? <Tooltip content={asNumber}>{formatFn(value, settings)}</Tooltip> : asNumber;\n}\n\nexport const OperationStatisticValue = React.memo(OperationStatisticValueImpl);\nexport const OperationStatisticName = React.memo(OperationStatisticNameImpl);\n","import React, {Component} from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../common/hammer/format';\n\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport ElementsTable from '../../../../../components/ElementsTable/ElementsTable';\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport Button from '../../../../../components/Button/Button';\nimport Filter from '../../../../../components/Filter/Filter';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n AGGREGATOR_RADIO_ITEMS,\n DEBOUNCE_DELAY,\n TREE_STATE,\n} from '../../../../../constants/operations/statistics';\nimport {\n changeAggregation,\n changeFilterText,\n changeJobType,\n changePoolTreeFilter,\n setTreeState,\n} from '../../../../../store/actions/operations/statistics';\nimport {statisticsTableProps} from '../../../../../utils/operations/tabs/statistics/statisticsTableProps';\nimport {makeRadioButtonProps} from '../../../../../utils';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getOperationDetailsLoadingStatus} from '../../../../../store/selectors/operations/operation';\nimport {\n getOperationStatisticsActiveFilterValues,\n getOperationStatisticsAvailableValues,\n getOperationStatisticsFiltered,\n} from '../../../../../store/selectors/operations/statistics-v2';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {docsUrl} from '../../../../../config';\nimport UIFactory from '../../../../../UIFactory';\nimport {WaitForFont} from '../../../../../containers/WaitForFont/WaitForFont';\n\nimport {OperationStatisticName, OperationStatisticValue} from './OperationStatisticName';\nimport './Statistics.scss';\n\nconst statisticsBlock = cn('operation-statistics');\nconst toolbarBlock = cn('elements-toolbar');\n\ntype ItemType = ReturnType<typeof getOperationStatisticsFiltered>[0];\n\ninterface ItemState {\n collapsed?: boolean;\n empty?: boolean;\n}\n\ntype Props = {className?: string} & ConnectedProps<typeof connector>;\n\nexport class Statistics extends Component<Props> {\n componentWillUnmount() {\n this.expandTable();\n }\n\n // eslint-disable-next-line react/sort-comp\n get template() {\n const {setTreeState, activeAggregation} = this.props;\n\n return {\n metric(\n item: ItemType,\n _columnName: 'metric',\n toggleItemState: (...args: Array<unknown>) => void,\n itemState: ItemState,\n ) {\n const OFFSET = 40;\n const offsetStyle = {paddingLeft: item.level * OFFSET};\n\n if (item.isLeafNode) {\n return (\n <span className={statisticsBlock('metric')} style={offsetStyle}>\n <Icon className={statisticsBlock('metric-icon')} awesome=\"chart-line\" />\n <OperationStatisticName name={item.name} title={item.title} />\n </span>\n );\n } else {\n const togglerIconName =\n itemState.collapsed || itemState.empty ? 'angle-down' : 'angle-up';\n const itemIconName =\n itemState.collapsed || itemState.empty ? 'folder' : 'folder-open';\n\n const toggleItemAndTreeState = (...rest: Array<unknown>) => {\n if (!itemState.empty) {\n toggleItemState(...rest);\n setTreeState('mixed');\n }\n };\n\n return (\n <span\n className={statisticsBlock('group')}\n style={offsetStyle}\n onClick={toggleItemAndTreeState}\n >\n <Icon\n className={statisticsBlock('group-icon-toggler')}\n awesome={togglerIconName}\n />\n <Icon\n className={statisticsBlock('group-icon')}\n awesome={itemIconName}\n />\n <span>{item.title}</span>\n </span>\n );\n }\n },\n __default__(item: ItemType, columnName: keyof Required<typeof item>['data']) {\n if (item.isLeafNode) {\n const metric = item.data?.[columnName];\n\n let value;\n let settings;\n\n if (activeAggregation === 'avg') {\n value = metric && metric.count && metric.sum / metric.count;\n\n if (value! < 1) {\n settings = {\n significantDigits: 6,\n };\n }\n } else {\n value = metric && metric[activeAggregation];\n }\n\n if (activeAggregation === 'count') {\n return format['Number'](value, settings);\n }\n\n return (\n <OperationStatisticValue\n value={value!}\n settings={settings}\n name={item.name}\n />\n );\n }\n return null;\n },\n };\n }\n\n collapseTable = () => this.props.setTreeState(TREE_STATE.COLLAPSED);\n expandTable = () => this.props.setTreeState(TREE_STATE.EXPANDED);\n\n renderToolbar() {\n const {filterText, activeAggregation, jobTypes, poolTrees, activeJobType, activePoolTree} =\n this.props;\n\n return (\n <div className={toolbarBlock(null, statisticsBlock('toolbar'))}>\n <div className={toolbarBlock('container')}>\n <div className={toolbarBlock('component', statisticsBlock('filter'))}>\n <Filter\n size=\"m\"\n value={filterText}\n debounce={DEBOUNCE_DELAY}\n onChange={this.props.changeFilterText}\n />\n </div>\n\n {poolTrees.length > 1 && (\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activePoolTree ?? ''}\n onUpdate={this.props.changePoolTreeFilter}\n items={makeRadioButtonProps(poolTrees, '')}\n name=\"operation-statistics-pool-tree\"\n />\n </div>\n )}\n\n {jobTypes.length > 1 && (\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activeJobType ?? ''}\n onUpdate={this.props.changeJobType}\n items={makeRadioButtonProps(jobTypes, '')}\n name=\"operation-statistics-job-type\"\n />\n </div>\n )}\n\n <div className={toolbarBlock('component')}>\n <RadioButton\n size=\"m\"\n value={activeAggregation}\n onChange={this.props.changeAggregation}\n items={AGGREGATOR_RADIO_ITEMS}\n name=\"operation-statistics-aggregator\"\n />\n </div>\n\n <div className={toolbarBlock('component', statisticsBlock('expand-collapse'))}>\n <span className={statisticsBlock('expand-metrics')}>\n <Button size=\"m\" title=\"Expand All\" onClick={this.expandTable}>\n <Icon awesome=\"arrow-to-bottom\" />\n </Button>\n </span>\n\n <span className={statisticsBlock('collapse-metrics')}>\n <Button size=\"m\" title=\"Collapse All\" onClick={this.collapseTable}>\n <Icon awesome=\"arrow-to-top\" />\n </Button>\n </span>\n </div>\n {docsUrl(\n <div className={toolbarBlock('component', statisticsBlock('help'))}>\n <HelpLink url={UIFactory.docsUrls['problems:jobstatistics']} />\n </div>,\n )}\n </div>\n </div>\n );\n }\n\n render() {\n const {className, treeState, items} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={statisticsBlock(null, className)}>\n {this.renderToolbar()}\n <WaitForFont>\n <ElementsTable\n {...statisticsTableProps}\n templates={this.template}\n css={statisticsBlock()}\n treeState={treeState}\n items={items}\n />\n </WaitForFont>\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {treeState, activeAggregation} = state.operations.statistics;\n\n const {job_type: jobTypes, pool_tree: poolTrees} = getOperationStatisticsAvailableValues(state);\n\n return {\n items: getOperationStatisticsFiltered(state),\n treeState,\n activeAggregation,\n jobTypes,\n poolTrees,\n ...getOperationStatisticsActiveFilterValues(state),\n };\n};\n\nconst mapDispatchToProps = {\n setTreeState,\n changeFilterText,\n changeAggregation,\n changeJobType,\n changePoolTreeFilter,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst StatisticsConnected = connector(Statistics);\n\nexport default function SpecificationWithRum(props: {className: string}) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_STATISTICS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_STATISTICS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <StatisticsConnected {...props} />;\n}\n","import {\n CHANGE_AGGREGATION,\n CHANGE_FILTER_TEXT,\n OPERATION_STATISTICS_PARTIAL,\n SET_TREE_STATE,\n} from '../../../constants/operations/statistics';\nimport {getOperation} from '../../../store/selectors/operations/operation';\nimport {getSettingOperationStatisticsActiveJobTypes} from '../../../store/selectors/settings/settings-ts';\nimport {setSettingsStatisticsActiveJobTypes} from '../../../store/actions/settings/settings';\n\nexport function setTreeState(treeState) {\n return {\n type: SET_TREE_STATE,\n data: {treeState},\n };\n}\n\nexport function changeFilterText(filterText) {\n return {\n type: CHANGE_FILTER_TEXT,\n data: {filterText},\n };\n}\n\nexport function changeAggregation({target}) {\n return {\n type: CHANGE_AGGREGATION,\n data: {activeAggregation: target.value},\n };\n}\n\nexport function changeJobType(jobType) {\n return (dispatch, getState) => {\n dispatch({\n type: OPERATION_STATISTICS_PARTIAL,\n data: {jobTypeFilter: jobType},\n });\n\n const state = getState();\n const operationType = getOperation(state).type;\n const settingsJobTypes = getSettingOperationStatisticsActiveJobTypes(state);\n\n if (settingsJobTypes && settingsJobTypes[operationType] !== jobType) {\n dispatch(\n setSettingsStatisticsActiveJobTypes({\n ...settingsJobTypes,\n [operationType]: jobType,\n }),\n );\n }\n };\n}\n\nexport function changePoolTreeFilter(poolTreeFilter) {\n return (dispatch) => {\n dispatch({type: OPERATION_STATISTICS_PARTIAL, data: {poolTreeFilter}});\n };\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../common/thor/ypath';\nimport {\n GET_COMPETITIVE_JOBS,\n GET_JOB,\n GET_JOBS,\n HIDE_INPUT_PATHS,\n OPERATION_JOBS_TABLE_ID,\n RESET_COMPETITIVE_JOBS,\n SHOW_INPUT_PATHS,\n UPDATE_FILTER,\n UPDATE_FILTER_COUNTERS,\n UPDATE_OFFSET,\n} from '../../../constants/operations/jobs';\nimport {changeColumnSortOrder} from '../../../store/actions/tables';\nimport {\n getCompetitiveJobsRequestParameters,\n getJobRequestParameters,\n getJobsRequestParameters,\n} from '../../../store/actions/operations/utils';\nimport {OPERATIONS_PAGE} from '../../../constants/operations/list';\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {TYPED_OUTPUT_FORMAT} from '../../../constants/index';\nimport {USE_CACHE, USE_MAX_SIZE} from '../../../../shared/constants/yt-api';\n\nimport {getShowCompetitiveJobs} from '../../../pages/operations/selectors';\nimport CancelHelper, {isCancelled} from '../../../utils/cancel-helper';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../rum/rum-wrap-api';\n\nconst requests = new CancelHelper();\n\nconst getOperation = (state) => state.operations.detail.operation;\n\nexport function getJob() {\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\nexport function getCompetitiveJobs() {\n return (dispatch, getState) => {\n const state = getState();\n const clusterConfig = getCurrentClusterConfig(state);\n\n requests.removeAllRequests();\n return ytApiV3\n .listJobs({\n parameters: getCompetitiveJobsRequestParameters(state),\n cancellation: requests.saveCancelToken,\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\nconst getJobsCanceler = new CancelHelper();\n\nexport function getJobs() {\n return (dispatch, getState) => {\n const state = getState();\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\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',\n parameters: getJobsRequestParameters(state),\n },\n {\n command: 'list',\n parameters: {\n path: '//sys/cluster_nodes',\n ...USE_CACHE,\n ...USE_MAX_SIZE,\n },\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, addresses]) => {\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 addresses: ypath.getValue(addresses.output),\n operationId: getOperation(state).$value,\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 .catch((error) => {\n if (!isCancelled(error)) {\n dispatch({\n type: GET_JOBS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function setFilter(name, value) {\n return {\n type: UPDATE_FILTER,\n data: {name, value},\n };\n}\n\nexport function resetCompetitiveJobs() {\n return {\n type: RESET_COMPETITIVE_JOBS,\n };\n}\n\nexport function updateFilteredAttributes(attributeNames, filtered) {\n return (dispatch) => {\n attributeNames.forEach((name) => {\n const isFiltered = filtered.indexOf(name) !== -1;\n dispatch(setFilter(name, isFiltered));\n });\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function updateFilter(name, value) {\n return (dispatch) => {\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(setFilter(name, value));\n dispatch(gotoJobsPage(OPERATIONS_PAGE.FIRST));\n };\n}\n\nexport function showInputPaths(job) {\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) {\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 {RootState} from '../../reducers';\n\nexport const getJobsErrors = (state: RootState) => state.operations.jobs.jobsErrors;\nexport const getJobsOperationId = (state: RootState) => state.operations.jobs.operationId;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../../../common/hammer';\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';\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobError({error}) {\n const dispatch = useDispatch();\n return (\n <div>\n <Template.Error error={error} onClick={() => dispatch(showErrorModal(error))} />\n </div>\n );\n}\n\nJobError.propTypes = {\n error: PropTypes.object,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobInputPaths({job}) {\n const dispatch = useDispatch();\n return (\n <Link theme=\"ghost\" onClick={() => dispatch(showInputPaths(job))}>\n View\n </Link>\n );\n}\n\nJobInputPaths.propTypes = {\n job: PropTypes.object.isRequired,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobDebugInfo({type, job}) {\n const {size, url} = job.getDebugInfo(type);\n return <Template.DownloadLink url={url} size={size} />;\n}\n\nJobDebugInfo.propTypes = {\n type: PropTypes.oneOf(['stderr', 'fail_context', 'full_input']).isRequired,\n job: PropTypes.object.isRequired,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction JobProgress({state, progress}) {\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\nJobProgress.propTypes = {\n state: PropTypes.string,\n progress: PropTypes.number,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nfunction renderStatistics(state, statistics) {\n const [rowCount, dataSize] = ypath.getValues(statistics, [\n '/processed_input_row_count',\n '/processed_input_uncompressed_data_size',\n ]);\n return (\n (state === 'running' || state === 'completed') &&\n `${hammer.format['Number'](rowCount)} (${hammer.format['Bytes'](dataSize)})`\n );\n}\n\nfunction JobStatistics({state, statistics}) {\n return statistics ? renderStatistics(state, statistics) : null;\n}\n\nJobStatistics.propTypes = {\n state: PropTypes.string,\n statistics: PropTypes.object,\n};\n\n/* ----------------------------------------------------------------------------------------------------------------- */\n\nexport default function JobTemplate() {}\n\nJobTemplate.Error = JobError;\nJobTemplate.InputPaths = JobInputPaths;\nJobTemplate.DebugInfo = JobDebugInfo;\nJobTemplate.Progress = JobProgress;\nJobTemplate.Statistics = JobStatistics;\n","import React, {Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport {Button, DropdownMenu} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport ypath from '../../../../../../common/thor/ypath';\nimport unipika from '../../../../../../common/thor/unipika';\nimport hammer from '../../../../../../common/hammer';\nimport ElementsTable from '../../../../../../components/ElementsTable/ElementsTable';\nimport {OPERATION_JOBS_TABLE_ID} from '../../../../../../constants/operations/jobs';\nimport SimpleModal from '../../../../../../components/Modal/SimpleModal';\nimport Error from '../../../../../../components/Error/Error';\n\nimport ClipboardButton from '../../../../../../components/ClipboardButton/ClipboardButton';\nimport ChartLink from '../../../../../../components/ChartLink/ChartLink';\nimport MetaTable from '../../../../../../components/MetaTable/MetaTable';\nimport Yson from '../../../../../../components/Yson/Yson';\nimport Icon from '../../../../../../components/Icon/Icon';\nimport Link from '../../../../../../components/Link/Link';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\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';\n\nconst block = cn('operation-detail-jobs');\n\nconst BriefStatisticsDetailsMemo = React.memo(BriefStatisticsDetails);\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: 'Aborting job will cause losing its data, 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: 'Abandoning job will cause losing its data, 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, jobCompetitionId, 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 = jobCompetitionId && jobCompetitionId !== 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 {jobCompetitionId}\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.hasSpec),\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 awesome=\"ellipsis-h\" />\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: statistics} = item;\n\n return (\n <div className={block('state')}>\n <div className={block('state-section', 'elements-ellipsis')}>\n {hammer.format['ReadableField'](state)}\n </div>\n <div className={block('state-section')}>\n <JobTemplate.Progress state={state} progress={progress} />\n </div>\n <Tooltip\n className={block('state-section', 'elements-ellipsis')}\n content={<BriefStatisticsDetailsMemo data={item.brief_statistics} />}\n >\n <span>\n <JobTemplate.Statistics state={state} statistics={statistics} />\n </span>\n <Icon className={block('state-icon')} awesome={'question-circle'} />\n </Tooltip>\n </div>\n );\n }\n\n renderStartTime(item) {\n return (\n <span className={block('start-time', 'elements-ellipsis')}>\n {hammer.format['DateTime'](item.startTime)}\n </span>\n );\n }\n\n renderFinishTime(item) {\n return item.state === 'running' ? (\n <span className={block('in-progress', 'elements-ellipsis elements-secondary-text')}>\n In progress...\n </span>\n ) : (\n <span className={block('finish-time elements-ellipsis')}>\n {hammer.format['DateTime'](item.finishTime)}\n </span>\n );\n }\n\n renderDuration(item) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['TimeDuration'](item.duration)}\n </span>\n );\n }\n\n renderType(item) {\n return <span>{hammer.format['ReadableField'](item.type)}</span>;\n }\n\n renderInputPathsModal() {\n const {\n inputPaths: {paths, status, error},\n hideInputPaths,\n } = this.props;\n\n if (status === LOADING_STATUS.UNINITIALIZED) {\n return null;\n }\n\n const ysonSettings = unipika.prepareSettings();\n const content =\n status === LOADING_STATUS.ERROR ? (\n <Error {...error} />\n ) : (\n <Yson value={paths} settings={ysonSettings} />\n );\n\n return (\n <SimpleModal\n visible\n onCancel={hideInputPaths}\n loading={status === LOADING_STATUS.LOADING}\n title=\"Input paths\"\n >\n {content}\n </SimpleModal>\n );\n }\n\n render() {\n const {jobs, showCompetitiveJobs, getJobs, isLoading, collapsibleSize} = this.props;\n if (showCompetitiveJobs) {\n const {job, competitiveJobs, getCompetitiveJobs} = this.props;\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={[job].filter(Boolean)}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n {competitiveJobs.length > 0 && (\n <CollapsibleSection\n name=\"All competitive jobs\"\n className={block('competitive-jobs')}\n collapsed={true}\n size={collapsibleSize}\n >\n <ElementsTable\n {...this.settings}\n items={competitiveJobs}\n onSort={getCompetitiveJobs}\n isLoading={isLoading}\n />\n </CollapsibleSection>\n )}\n </Fragment>\n );\n }\n return (\n <Fragment>\n {this.renderInputPathsModal()}\n <ElementsTable\n {...this.settings}\n items={jobs}\n onSort={getJobs}\n isLoading={isLoading}\n />\n </Fragment>\n );\n }\n}\n\nfunction mapStateToProps(state, props) {\n const {operations, global} = state;\n const {cluster, login} = global;\n const showCompetitiveJobs = getShowCompetitiveJobs(state);\n const taskNamesNumber = getOperationTasksNames(state)?.length;\n const jobsOperationId = getJobsOperationId(state);\n const operationId = getOperationId(state);\n const {jobs, job, competitiveJobs, inputPaths} = operations.jobs;\n return {\n jobs: operationId !== jobsOperationId ? [] : jobs,\n job,\n competitiveJobs,\n showCompetitiveJobs,\n inputPaths,\n cluster,\n login,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n isLoading: props.isLoading || operationId !== jobsOperationId,\n taskNamesNumber,\n };\n}\n\nconst mapDispatchToProps = {\n openAttributesModal,\n showInputPaths,\n hideInputPaths,\n showErrorModal,\n promptAction,\n getJobs,\n getCompetitiveJobs,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OperationJobsTable);\n\nfunction BriefStatisticsDetails({data}) {\n const items = React.useMemo(\n () =>\n map_(ypath.getValue(data), (value, key) => {\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 className={block('state-value')}>{result}</div>,\n };\n }),\n [data],\n );\n\n return <MetaTable items={items} />;\n}\n","import moment from 'moment';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport hammer from '../../../../../common/hammer';\nimport metrics from '../../../../../common/utils/metrics';\n\nfunction createTemporaryPath(login) {\n const temporaryPathBase = '//tmp/ui/' + login;\n\n return yt.v3\n .create({\n path: temporaryPathBase,\n type: 'map_node',\n recursive: true,\n ignore_existing: true,\n })\n .then(() => {\n const temporaryPath = '/input_context_' + hammer.format['toBase26'](moment().unix());\n return temporaryPathBase + temporaryPath;\n });\n}\n\nexport function performJobAction({login, name, item}) {\n const parameters = {job_id: item.id};\n\n metrics.countEvent({\n 'operation_detail_running-jobs_action': name,\n });\n\n let jobActionPromise;\n\n switch (name) {\n case 'abort':\n jobActionPromise = yt.v3.abortJob(parameters);\n break;\n case 'abandon':\n jobActionPromise = yt.v3.abandonJob(parameters);\n break;\n case 'input_context':\n jobActionPromise = createTemporaryPath(login).then((temporaryPath) => {\n return yt.v3\n .dumpJobContext(\n Object.assign({}, parameters, {\n path: temporaryPath,\n }),\n )\n .then(() => temporaryPath);\n });\n break;\n case 'input':\n jobActionPromise = Promise.resolve('foo');\n break;\n }\n\n return jobActionPromise;\n}\n","import {connect} from 'react-redux';\n\nimport {updateFilter} 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, {updateFilter})(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 {updateFilter} 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, {updateFilter})(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 {updateFilter} 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(updateFilter('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(updateFilter('filterBy', value));\n }, []);\n\n return (\n <Fragment>\n <div className={block('toolbar-filter-by-select')}>\n <Select\n value={[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(updateFilteredAttributes(ATTRIBUTE_ITEM_NAMES, value));\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 {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 './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=\"dataSource\"\n states={['auto', 'runtime', 'archive']}\n disabled={showCompetitiveJobs}\n />\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 <div className={block('toolbar-pagination', tbComp)}>\n <JobsPaginator disabled={showCompetitiveJobs} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport map_ from 'lodash/map';\nimport cn from 'bem-cn-lite';\n\nimport {useSelector} from 'react-redux';\nimport {getJobsErrors} from '../../../../../../store/selectors/operations/jobs';\nimport ErrorBlock from '../../../../../../components/Error/Error';\n\nimport './OperationJobsErrors.scss';\n\nconst block = cn('operation-jobs-errors');\n\nfunction OperationJobsErrors() {\n const errors = useSelector(getJobsErrors);\n\n return (\n <div className={block()}>\n {map_(errors, (error, index) => {\n return <ErrorBlock key={index} error={error} />;\n })}\n </div>\n );\n}\n\nexport default React.memo(OperationJobsErrors);\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {getJobs} from '../../../../../store/actions/operations/jobs';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport LoadDataHandler from '../../../../../components/LoadDataHandler/LoadDataHandler';\nimport OperationJobsTable from './OperationJobsTable/OperationJobsTable';\nimport OperationJobsToolbar from './OperationJobsToolbar/OperationJobsToolbar';\n\nimport {useUpdater} from '../../../../../hooks/use-updater';\nimport {\n getOperationDetailsLoadingStatus,\n getOperationJobsLoadingStatus,\n} from '../../../../../store/selectors/operations/operation';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport OperationJobsErrors from './OperationJobsErrors/OperationJobsErrors';\n\nfunction Jobs({className}) {\n const dispatch = useDispatch();\n const loading = useSelector((state) => state.operations.jobs.loading);\n const loaded = useSelector((state) => state.operations.jobs.loaded);\n const error = useSelector((state) => state.operations.jobs.error);\n const errorData = useSelector((state) => state.operations.jobs.errorData);\n\n const updateFn = React.useCallback(() => {\n dispatch(getJobs());\n }, [dispatch]);\n\n useUpdater(updateFn, {timeout: 15 * 1000});\n\n const isLoading = loading && !loaded;\n return (\n <ErrorBoundary>\n <div className={`operation-detail-jobs ${className}`}>\n <OperationJobsToolbar />\n <LoadDataHandler {...{loaded, loading, error, errorData}} alwaysShowError>\n <OperationJobsErrors />\n <OperationJobsTable isLoading={isLoading} />\n </LoadDataHandler>\n </div>\n </ErrorBoundary>\n );\n}\n\nexport default function JobsWithRum(props) {\n const loadState = useSelector(getOperationJobsLoadingStatus);\n /**\n * Selection of this value involves additional rerenders of the component\n * but without it RUM-measures will be wrongly too big it.\n * OperationDetail cannot stop measure for RumMeasureTypes.OPERATION by self,\n * it must be done by nesting tab-content.\n */\n const operationLoadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState, operationLoadState],\n allowStart: ([loadState, operationLoadState]) => {\n return !isFinalLoadingStatus(loadState) || !isFinalLoadingStatus(operationLoadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_JOBS,\n stopDeps: [loadState, operationLoadState],\n allowStop: ([loadState, operationLoadState]) => {\n return isFinalLoadingStatus(loadState) && isFinalLoadingStatus(operationLoadState);\n },\n });\n\n return <Jobs {...props} />;\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport min_ from 'lodash/min';\n\nimport moment from 'moment';\nimport {createSelector} from 'reselect';\nimport {RootState} from '../../../store/reducers';\nimport {getOperationId} from './operation';\n\nexport const getJobsMonitorError = (state: RootState) => state.operations.jobsMonitor.error;\nexport const getJobsMonitorOperationId = (state: RootState) =>\n state.operations.jobsMonitor.operation_id;\nexport const getJobsMonitorItems = (state: RootState) => state.operations.jobsMonitor.jobs;\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';\nimport {\n getJobsMonitorDescriptor,\n getJobsMonitorFromTo,\n} from '../../../../../store/selectors/operations/jobs-monitor';\nimport {NoContent} from '../../../../../components/NoContent/NoContent';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\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\n if (!job_descriptor) {\n return <NoContent warning={'There are no jobs with \"monitoring_descriptor\"'} />;\n }\n\n const JobMonitorComponent = UIFactory.getMonitorComponentForJob()!;\n\n return (\n <ErrorBoundary>\n <JobMonitorComponent {...{cluster, job_descriptor, from, to}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(JobsMonitor);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {\n getOperationDetailsLoadingStatus,\n getOperationId,\n getOperationTypedAttributes,\n} from '../../../../../store/selectors/operations/operation';\nimport Yson from '../../../../../components/Yson/Yson';\nimport {getOperationAttributesYsonSettings} from '../../../../../store/selectors/thor/unipika';\nimport {useRumMeasureStop} from '../../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../../rum/rum-app-measures';\nimport {YsonDownloadButton} from '../../../../../components/DownloadAttributesButton';\n\nfunction useOperationAttributesRumMesures() {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION_TAB_ATTRIBUTES,\n additionalStartType: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.OPERATION_TAB_ATTRIBUTES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n}\n\nfunction OperationAttributes({className}: {className: string}) {\n const typedAttributes = useSelector(getOperationTypedAttributes);\n const settings = useSelector(getOperationAttributesYsonSettings);\n const id = useSelector(getOperationId);\n\n useOperationAttributesRumMesures();\n\n return (\n <Yson\n className={className}\n value={typedAttributes}\n settings={settings}\n extraTools={\n <YsonDownloadButton\n value={typedAttributes}\n settings={settings}\n name={`operation_attributes_${id}`}\n />\n }\n folding\n />\n );\n}\n\nexport default React.memo(OperationAttributes);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {getOperation} from '../../../../../store/selectors/operations/operation';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {OperationMonitoringTabProps} from '../../../../../UIFactory';\n\nfunction OperationDetailsMonitor(props: {\n component: React.ComponentType<OperationMonitoringTabProps>;\n}) {\n const {component: OperationMonitor} = props;\n const operation = useSelector(getOperation);\n const cluster = useSelector(getCluster);\n\n return (\n <ErrorBoundary>\n <OperationMonitor {...{cluster, operation}} />\n </ErrorBoundary>\n );\n}\n\nexport default React.memo(OperationDetailsMonitor);\n","import {match as MatchType, Redirect, Route, Switch} from 'react-router';\nimport React, {Fragment} from 'react';\nimport {ConnectedProps, connect, useDispatch, useSelector} from 'react-redux';\nimport hammer from '../../../common/hammer';\nimport unipika from '../../../common/thor/unipika';\nimport cn from 'bem-cn-lite';\n\nimport ypath from '../../../common/thor/ypath';\n\nimport MetaTable, {Template, TemplatePools} from '../../../components/MetaTable/MetaTable';\nimport OperationProgress from '../OperationProgress/OperationProgress';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {SubjectCard} from '../../../components/SubjectLink/SubjectLink';\nimport StatusLabel from '../../../components/StatusLabel/StatusLabel';\nimport Button from '../../../components/Button/Button';\nimport {Loader} from '@gravity-ui/uikit';\nimport Error from '../../../components/Error/Error';\nimport Icon from '../../../components/Icon/Icon';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport Yson from '../../../components/Yson/Yson';\n\nimport PartitionSizes from './tabs/partition-sizes/PartitionSizes/PartitionSizes';\nimport Details from './tabs/details/Details/Details';\nimport Specification from './tabs/specification/Specification';\nimport JobSizes from './tabs/job-sizes/JobSizes/JobSizes';\nimport Statistics from './tabs/statistics/Statistics';\nimport Jobs from './tabs/Jobs/Jobs';\nimport JobsMonitor from './tabs/JobsMonitor/JobsMonitor';\nimport OperationAttributes from './tabs/attributes/OperationAttributes';\n\nimport Placeholder from '../../../pages/components/Placeholder';\n\nimport {\n getDetailsTabsShowSettings,\n operationMonitoringUrl,\n performAction,\n} from '../../../utils/operations/detail';\nimport {DEFAULT_TAB, OperationTabType, Tab} from '../../../constants/operations/detail';\nimport {showEditPoolsWeightsModal} from '../../../store/actions/operations';\nimport {getOperation} from '../../../store/actions/operations/detail';\nimport {isOperationId} from '../../../utils/operations/list';\nimport {promptAction} from '../../../store/actions/actions';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {TabSettings, makeTabProps} from '../../../utils';\nimport {Page} from '../../../constants/index';\nimport {\n getOperationDetailsLoadingStatus,\n getOperationErasedTrees,\n} from '../../../store/selectors/operations/operation';\n\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../utils/utils';\n\nimport './OperationDetail.scss';\nimport {updateFilter} from '../../../store/actions/operations/jobs';\nimport OperationDetailsMonitor from './tabs/monitor/OperationDetailsMonitor';\nimport {getJobsMonitorTabVisible} from '../../../store/selectors/operations/jobs-monitor';\nimport {\n JobState,\n getOperationStatiscsHasData,\n getTotalCpuTimeSpent,\n getTotalJobWallTime,\n} from '../../../store/selectors/operations/statistics-v2';\nimport UIFactory from '../../../UIFactory';\nimport {RootState} from '../../../store/reducers';\nimport {getCurrentCluster} from '../../../store/selectors/thor';\nimport {UI_TAB_SIZE} from '../../../constants/global';\n\nconst detailBlock = cn('operation-detail');\n\nconst headingBlock = cn('elements-heading');\n\ntype RouteProps = {match: MatchType<{operationId: string; tab: OperationTabType}>};\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nfunction OperationDetailUpdater({operationId}: {operationId: string}) {\n const dispatch = useDispatch();\n\n const updateFn = React.useCallback(() => {\n dispatch(getOperation(operationId));\n }, [dispatch, operationId]);\n\n useUpdater(updateFn, {timeout: 15 * 1000});\n\n return null;\n}\n\nclass OperationDetail extends React.Component<ReduxProps & RouteProps> {\n get settings() {\n return unipika.prepareSettings();\n }\n\n handlePoolsEditClick = () => {\n const {operation, showEditPoolsWeightsModal} = this.props;\n showEditPoolsWeightsModal(operation);\n };\n\n renderAction = (action: ReduxProps['actions'][0]) => {\n const {promptAction, operation} = this.props;\n\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the operation?\n </span>\n );\n const handler = ({currentOption}: {currentOption?: string}) =>\n performAction({\n ...action,\n operation,\n currentOption,\n }).then(() => {\n return this.props.getOperation(operation.$value);\n });\n\n return (\n <Button\n key={action.name}\n view={action.theme}\n className={detailBlock('action')}\n title={hammer.format['ReadableField'](action.name)}\n onClick={() => promptAction({...action, message, handler})}\n >\n <Icon awesome={action.icon} />\n &nbsp;\n {hammer.format['ReadableField'](action.name)}\n </Button>\n );\n };\n\n renderHeader() {\n const {actions = []} = this.props;\n const {type, user = '', state, suspended, title, $value} = this.props.operation;\n const label = suspended ? 'suspended' : state;\n\n return (\n <div className={detailBlock('header', 'elements-section')}>\n <div className={detailBlock('header-heading', headingBlock({size: 'l'}))}>\n {hammer.format['ReadableField'](type)} operation by <SubjectCard name={user} />\n &ensp;\n <StatusLabel label={label} renderPlaque />\n </div>\n\n <div className={detailBlock('header-title')}>\n <Yson value={title || $value} inline />\n </div>\n\n <div className={detailBlock('actions')}>{actions.map(this.renderAction)}</div>\n </div>\n );\n }\n\n renderOverview() {\n const {operation, cluster, totalJobWallTime, cpuTimeSpent, erasedTrees} = this.props;\n const {$value, user = '', type, startTime, finishTime, duration, pools, state} = operation;\n\n const items = [\n [\n {key: 'id', value: <Template.Id id={$value} />},\n {key: 'user', value: <SubjectCard name={user} />},\n {\n key: 'pools',\n value: (\n <TemplatePools\n onEdit={this.handlePoolsEditClick}\n cluster={cluster}\n pools={pools}\n state={state}\n erasedTrees={erasedTrees}\n />\n ),\n },\n {key: 'type', value: <Template.Readable value={type} />},\n ],\n [\n {\n key: 'started',\n value: <Template.Time time={startTime} valueFormat=\"DateTime\" />,\n },\n {\n key: 'finished',\n value: <Template.Time time={finishTime} valueFormat=\"DateTime\" />,\n },\n {\n key: 'duration',\n value: <Template.Time time={duration} valueFormat=\"TimeDuration\" />,\n },\n {\n key: 'total job wall time',\n value: <Template.Time time={totalJobWallTime} valueFormat=\"TimeDuration\" />,\n },\n {\n key: 'total cpu time spent',\n value: <Template.Time time={cpuTimeSpent} valueFormat=\"TimeDuration\" />,\n },\n ],\n ];\n\n return (\n <div className={detailBlock('overview')}>\n <div className={detailBlock('general')}>\n <MetaTable items={items} />\n </div>\n\n <div className={detailBlock('progress-wrapper')}>\n <OperationProgress\n operation={operation}\n onLinkClick={this.onProgressLinkClick}\n />\n {operation.state !== 'failed' && (\n <OperationProgress\n operation={operation}\n type=\"failed\"\n onLinkClick={this.onProgressLinkClick}\n />\n )}\n </div>\n </div>\n );\n }\n\n onProgressLinkClick = (jobState: JobState) => {\n const {updateFilter} = this.props;\n updateFilter('state', jobState);\n };\n\n renderTabs() {\n const {\n match: {\n params: {operationId},\n },\n cluster,\n operation,\n hasStatististicsTab,\n jobsMonitorVisible,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n } = this.props;\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n const showSettings: Record<string, TabSettings> = {\n ...getDetailsTabsShowSettings(operation),\n [Tab.STATISTICS]: {show: hasStatististicsTab},\n [Tab.JOBS_MONITOR]: {show: jobsMonitorVisible},\n [Tab.MONITOR]: {show: monitorTabVisible},\n };\n\n if (monitorTabUrlTemplate) {\n const monTab = showSettings[Tab.MONITOR];\n monTab.routed = false;\n monTab.external = true;\n\n const firstPoolInfo = operation.pools?.[0] || {};\n monTab.url = operationMonitoringUrl({\n cluster,\n operation,\n ...firstPoolInfo,\n urlTemplate: monitorTabUrlTemplate,\n });\n }\n\n const props = makeTabProps(path, Tab, showSettings, undefined, {\n [Tab.MONITOR]: monitorTabTitle ?? 'Monitoring',\n });\n\n return (\n <div className={detailBlock('tabs')}>\n <Tabs\n {...props}\n active={DEFAULT_TAB}\n routed\n routedPreserveLocation\n size={UI_TAB_SIZE}\n />\n </div>\n );\n }\n\n renderMain() {\n const {match, cluster, monitorTabVisible, jobsMonitorVisible, monitoringComponent} =\n this.props;\n const {url, params} = match;\n const {operationId} = params;\n\n const path = `/${cluster}/${Page.OPERATIONS}/${operationId}`;\n\n // NOTE: <Redirect> has issues with urls which contain '*', and since every operation alias starts with it,\n // we have to redirect to real operation id in those cases\n return !isOperationId(operationId) ? (\n this.renderAlias()\n ) : (\n <div className={detailBlock('main')}>\n <Switch>\n <Route\n path={`${path}/${Tab.ATTRIBUTES}`}\n render={() => <OperationAttributes className={detailBlock('attributes')} />}\n />\n <Route path={`${path}/${Tab.DETAILS}`} component={Details} />\n <Route path={`${path}/${Tab.SPECIFICATION}`} component={Specification} />\n <Route\n path={`${path}/${Tab.STATISTICS}`}\n render={() => <Statistics className={detailBlock('statistics')} />}\n />\n <Route\n path={`${path}/${Tab.JOBS}`}\n render={() => <Jobs className={detailBlock('jobs')} />}\n />\n <Route\n path={`${path}/${Tab.JOB_SIZES}`}\n render={() => <JobSizes className={detailBlock('job-sizes')} />}\n />\n <Route path={`${path}/${Tab.PARTITION_SIZES}`} component={PartitionSizes} />\n {monitorTabVisible && monitoringComponent && (\n <Route\n path={`${path}/${Tab.MONITOR}`}\n render={() => (\n <OperationDetailsMonitor component={monitoringComponent} />\n )}\n />\n )}\n {jobsMonitorVisible && (\n <Route path={`${path}/${Tab.JOBS_MONITOR}`} component={JobsMonitor} />\n )}\n <Route path={`${path}/:tab`} component={Placeholder} />\n <Redirect from={url} to={`${path}/${DEFAULT_TAB}`} />\n </Switch>\n </div>\n );\n }\n\n renderAlias() {\n const {match, cluster, operation} = this.props;\n const {\n url,\n params: {operationId, tab},\n } = match;\n\n const alias = ypath.getValue(operation, '/@spec/alias');\n if (operationId !== alias) {\n // Just wait until operation data is loaded\n return null;\n }\n\n const redirectPath = `/${cluster}/${Page.OPERATIONS}/${operation.$value}${\n tab ? '/' + tab : ''\n }`;\n return <Redirect from={url} to={redirectPath} />;\n }\n\n renderContent(isFirstLoading: boolean) {\n return isFirstLoading ? (\n <Loader />\n ) : (\n <Fragment>\n {this.renderHeader()}\n {this.renderOverview()}\n {this.renderTabs()}\n {this.renderMain()}\n </Fragment>\n );\n }\n\n renderError() {\n const {errorData} = this.props;\n\n return <Error message={errorData.message} error={errorData.details} />;\n }\n\n render() {\n const {\n error,\n loading,\n loaded,\n match: {\n params: {operationId},\n },\n } = this.props;\n const isFirstLoading = loading && !loaded;\n\n return (\n <ErrorBoundary>\n <OperationDetailUpdater operationId={operationId} />\n <div className={detailBlock({loading: isFirstLoading})}>\n {error && !loaded ? this.renderError() : this.renderContent(isFirstLoading)}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {operation, errorData, loading, loaded, error, actions} = state.operations.detail;\n const totalJobWallTime = getTotalJobWallTime(state);\n const cpuTimeSpent = getTotalCpuTimeSpent(state);\n const erasedTrees = getOperationErasedTrees(state);\n\n const {\n component: monitoringComponent,\n urlTemplate: monitorTabUrlTemplate,\n title: monitorTabTitle,\n } = UIFactory.getMonitoringForOperation(operation) || {};\n\n const monitorTabVisible = Boolean(monitoringComponent) || Boolean(monitorTabUrlTemplate);\n\n return {\n cluster: getCurrentCluster(state),\n operation,\n errorData,\n loading,\n loaded,\n error,\n actions,\n totalJobWallTime,\n cpuTimeSpent,\n erasedTrees,\n monitorTabVisible,\n monitorTabTitle,\n monitorTabUrlTemplate,\n monitoringComponent,\n jobsMonitorVisible:\n Boolean(UIFactory.getMonitorComponentForJob()) && getJobsMonitorTabVisible(state),\n hasStatististicsTab: getOperationStatiscsHasData(state),\n };\n};\n\nconst mapDispatchToProps = {\n promptAction,\n getOperation,\n showEditPoolsWeightsModal,\n updateFilter,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst OperationDetailConnected = connector(OperationDetail);\n\nexport default function OperationDetailsWithRum(props: RouteProps) {\n const loadState = useSelector(getOperationDetailsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.OPERATION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n return <OperationDetailConnected {...props} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {Route, Switch, withRouter} from 'react-router';\n\nimport PoolsWeightsEditModal from '../PoolsWeightsEditModal/PoolsWeightsEditModal';\nimport OperationsList from '../OperationsList/OperationsList';\nimport OperationDetail from '../OperationDetail/OperationDetail';\nimport {DASHBOARD_VIEW_CONTEXT} from '../../../constants/index';\n\nconst block = cn('operations');\n\nfunction Operations(props) {\n const {match, viewContext} = props;\n const className = viewContext !== DASHBOARD_VIEW_CONTEXT ? 'elements-main-section' : '';\n\n return (\n <div className={block(null, className)}>\n <PoolsWeightsEditModal />\n <Switch>\n <Route path={match.path} exact render={() => <OperationsList />} />\n <Route path={`${match.path}/:operationId/:tab?`} component={OperationDetail} />\n </Switch>\n </div>\n );\n}\n\nOperations.propTypes = {\n // from parent\n viewContext: PropTypes.string,\n\n // from react-router\n match: PropTypes.shape({\n path: PropTypes.string.isRequired,\n }).isRequired,\n};\n\nexport default withRouter(Operations);\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import {ThunkAction} from 'redux-thunk';\nimport FontFaceObserver from 'fontfaceobserver';\nimport {getFontFamilies} from '../../../store/selectors/global/fonts';\nimport {RootState} from '../../../store/reducers';\n\n// TODO: consider switching back for <link rel=\"preload\"> once it's supported in all major browsers\nexport function waitForFontFamily(fontFamily: string) {\n return new FontFaceObserver(fontFamily).load(null, 10000);\n}\n\nexport function waitForFontFamilies<T>(\n promiseToWrap: T,\n): ThunkAction<Promise<T>, RootState, unknown, any> {\n return (_dispatch, getState) => {\n const fontFamilies = getFontFamilies(getState());\n return Promise.all([\n waitForFontFamily(fontFamilies.regular),\n waitForFontFamily(fontFamilies.monospace),\n ]).then(() => {\n return promiseToWrap;\n });\n };\n}\n","import { I18N } from '@gravity-ui/i18n';\nimport en from './keysets/en.json';\nimport ru from './keysets/ru.json';\nconst i18nFactory = new I18N();\nconst EN = 'en';\nconst RU = 'ru';\ni18nFactory.registerKeysets(EN, en);\ni18nFactory.registerKeysets(RU, ru);\nconst i18n = i18nFactory.i18n.bind(i18nFactory);\nexport { i18nFactory, i18n };\n","export const CHARTKIT_ERROR_CODE = {\n NO_DATA: 'ERR.CK.NO_DATA',\n INVALID_DATA: 'ERR.CK.INVALID_DATA',\n UNKNOWN: 'ERR.CK.UNKNOWN_ERROR',\n UNKNOWN_PLUGIN: 'ERR.CK.UNKNOWN_PLUGIN',\n TOO_MANY_LINES: 'ERR.CK.TOO_MANY_LINES',\n};\nexport class ChartKitError extends Error {\n constructor({ originalError, message, code = CHARTKIT_ERROR_CODE.UNKNOWN, } = {}) {\n super(message);\n this.isCustomError = true;\n this.code = code;\n if (originalError) {\n this.name = originalError.name;\n this.stack = originalError.stack;\n }\n }\n}\nexport const isChartKitError = (error) => {\n return error instanceof Error && 'isCustomError' in error;\n};\n","import isObject from 'lodash/isObject';\nimport mergeWith from 'lodash/mergeWith';\n// @ts-ignore\nexport function mergeSettingStrategy(objValue, srcValue, key) {\n if (key === 'plugins') {\n const currentPlugins = [...objValue];\n const newPlugins = [...srcValue];\n // modify existing plugins\n let newSettingsPlugins = currentPlugins.map((currentPlugin) => {\n const newPluginIndex = newPlugins.findIndex(({ type }) => type === currentPlugin.type);\n if (newPluginIndex !== -1) {\n const newPlugin = newPlugins[newPluginIndex];\n newPlugins.splice(newPluginIndex, 1);\n return {\n type: currentPlugin.type,\n renderer: newPlugin.renderer,\n };\n }\n return currentPlugin;\n });\n // add new plugins if it exist after modified\n if (newPlugins.length > 0) {\n newSettingsPlugins = [...newSettingsPlugins, ...newPlugins];\n }\n return newSettingsPlugins;\n }\n if (isObject(objValue)) {\n return mergeWith(objValue, srcValue, mergeSettingStrategy);\n }\n return srcValue;\n}\n","import { configure } from '@gravity-ui/uikit';\nimport get from 'lodash/get';\nimport mergeWith from 'lodash/mergeWith';\nimport { i18nFactory } from '../../i18n';\nimport { EventEmitter } from './eventEmitter';\nimport { mergeSettingStrategy } from './mergeSettingStrategy';\nexport const settingsEventEmitter = new EventEmitter();\nconst removeUndefinedValues = (data) => {\n return Object.entries(data).reduce((acc, [key, value]) => {\n if (typeof value !== 'undefined') {\n acc[key] = value;\n }\n return acc;\n }, {});\n};\nconst updateLang = (lang) => {\n configure({ lang });\n i18nFactory.setLang(lang);\n};\nclass ChartKitSettings {\n constructor() {\n this.settings = {\n plugins: [],\n lang: 'en',\n };\n updateLang(this.get('lang'));\n }\n get(key) {\n return get(this.settings, key);\n }\n set(updates) {\n const filteredUpdates = removeUndefinedValues(updates);\n this.settings = mergeWith(this.settings, filteredUpdates, mergeSettingStrategy);\n if (filteredUpdates.lang) {\n const lang = filteredUpdates.lang || this.get('lang');\n updateLang(lang);\n settingsEventEmitter.dispatch('change-lang', lang);\n }\n }\n}\nexport const settings = new ChartKitSettings();\n","export class EventEmitter {\n constructor() {\n this.events = {};\n }\n on(type, event) {\n if (this.events[type]) {\n this.events[type].push(event);\n }\n else {\n this.events[type] = [event];\n }\n }\n off(type, eventId) {\n if (this.events[type]) {\n this.events[type] = this.events[type].filter(({ id }) => id !== eventId);\n }\n }\n dispatch(type, args) {\n if (this.events[type]) {\n this.events[type].forEach(({ action }) => {\n action(args);\n });\n }\n }\n}\n","import { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'chartkit-';\nexport const cn = withNaming({ e: '__', m: '_' });\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });\n","export const randomString = (length, chars) => {\n let result = '';\n for (let i = length; i > 0; --i) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n};\nexport const getRandomCKId = () => `ck.${randomString(10, '0123456789abcdefghijklmnopqrstuvwxyz')}`;\n","/* Font Face Observer v2.3.0 - © Bram Stein. License: BSD-3-Clause */(function(){function p(a,c){document.addEventListener?a.addEventListener(\"scroll\",c,!1):a.attachEvent(\"scroll\",c)}function u(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function b(){document.removeEventListener(\"DOMContentLoaded\",b);a()}):document.attachEvent(\"onreadystatechange\",function g(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",g),a()})};function w(a){this.g=document.createElement(\"div\");this.g.setAttribute(\"aria-hidden\",\"true\");this.g.appendChild(document.createTextNode(a));this.h=document.createElement(\"span\");this.i=document.createElement(\"span\");this.m=document.createElement(\"span\");this.j=document.createElement(\"span\");this.l=-1;this.h.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.i.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\nthis.j.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.m.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.h.appendChild(this.m);this.i.appendChild(this.j);this.g.appendChild(this.h);this.g.appendChild(this.i)}\nfunction x(a,c){a.g.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:\"+c+\";\"}function B(a){var c=a.g.offsetWidth,b=c+100;a.j.style.width=b+\"px\";a.i.scrollLeft=b;a.h.scrollLeft=a.h.scrollWidth+100;return a.l!==c?(a.l=c,!0):!1}function C(a,c){function b(){var e=g;B(e)&&null!==e.g.parentNode&&c(e.l)}var g=a;p(a.h,b);p(a.i,b);B(a)};function D(a,c,b){c=c||{};b=b||window;this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\";this.context=b}var E=null,F=null,G=null,H=null;function I(a){null===F&&(M(a)&&/Apple/.test(window.navigator.vendor)?(a=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))(?:\\.([0-9]+))/.exec(window.navigator.userAgent),F=!!a&&603>parseInt(a[1],10)):F=!1);return F}function M(a){null===H&&(H=!!a.document.fonts);return H}\nfunction N(a,c){var b=a.style,g=a.weight;if(null===G){var e=document.createElement(\"div\");try{e.style.font=\"condensed 100px sans-serif\"}catch(q){}G=\"\"!==e.style.font}return[b,g,G?a.stretch:\"\",\"100px\",c].join(\" \")}\nD.prototype.load=function(a,c){var b=this,g=a||\"BESbswy\",e=0,q=c||3E3,J=(new Date).getTime();return new Promise(function(K,L){if(M(b.context)&&!I(b.context)){var O=new Promise(function(r,t){function h(){(new Date).getTime()-J>=q?t(Error(\"\"+q+\"ms timeout exceeded\")):b.context.document.fonts.load(N(b,'\"'+b.family+'\"'),g).then(function(n){1<=n.length?r():setTimeout(h,25)},t)}h()}),P=new Promise(function(r,t){e=setTimeout(function(){t(Error(\"\"+q+\"ms timeout exceeded\"))},q)});Promise.race([P,O]).then(function(){clearTimeout(e);\nK(b)},L)}else u(function(){function r(){var d;if(d=-1!=k&&-1!=l||-1!=k&&-1!=m||-1!=l&&-1!=m)(d=k!=l&&k!=m&&l!=m)||(null===E&&(d=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),E=!!d&&(536>parseInt(d[1],10)||536===parseInt(d[1],10)&&11>=parseInt(d[2],10))),d=E&&(k==y&&l==y&&m==y||k==z&&l==z&&m==z||k==A&&l==A&&m==A)),d=!d;d&&(null!==f.parentNode&&f.parentNode.removeChild(f),clearTimeout(e),K(b))}function t(){if((new Date).getTime()-J>=q)null!==f.parentNode&&f.parentNode.removeChild(f),\nL(Error(\"\"+q+\"ms timeout exceeded\"));else{var d=b.context.document.hidden;if(!0===d||void 0===d)k=h.g.offsetWidth,l=n.g.offsetWidth,m=v.g.offsetWidth,r();e=setTimeout(t,50)}}var h=new w(g),n=new w(g),v=new w(g),k=-1,l=-1,m=-1,y=-1,z=-1,A=-1,f=document.createElement(\"div\");f.dir=\"ltr\";x(h,N(b,\"sans-serif\"));x(n,N(b,\"serif\"));x(v,N(b,\"monospace\"));f.appendChild(h.g);f.appendChild(n.g);f.appendChild(v.g);b.context.document.body.appendChild(f);y=h.g.offsetWidth;z=n.g.offsetWidth;A=v.g.offsetWidth;t();\nC(h,function(d){k=d;r()});x(h,N(b,'\"'+b.family+'\",sans-serif'));C(n,function(d){l=d;r()});x(n,N(b,'\"'+b.family+'\",serif'));C(v,function(d){m=d;r()});x(v,N(b,'\"'+b.family+'\",monospace'))})})};\"object\"===typeof module?module.exports=D:(window.FontFaceObserver=D,window.FontFaceObserver.prototype.load=D.prototype.load);}());\n"],"names":["block","cn","ExpandIcon","_ref","className","data","expanded","visible","onClick","icon","onClickCb","React","_jsx","Boolean","clickable","undefined","children","Icon","awesome","Pagination","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","name","control","handler","disabled","_this$props","this","props","size","tooltip","hotkeySettings","keys","hotkey","scope","hotkeyScope","hotkeyHandler","_jsxs","title","Button","first","previous","next","last","pin","Hotkey","settings","_this$props2","showInput","inputValue","onChange","TextInput","qa","type","onUpdate","_this$props3","renderComponent","renderInput","defaultProps","typedMemo","ErrorBoundary","constructor","super","state","error","resetError","setState","getDerivedStateFromError","componentDidCatch","_a","_b","onError","call","componentDidUpdate","prevProps","code","NO_DATA","render","message","i18n","toString","getErrorMessage","renderError","b","renderPluginLoader","pluginLoader","Object","assign","ChartKitComponent","widgetRef","instanceRef","id","propsId","isMobile","restProps","ckId","lang","get","plugin","find","iteratedPlugin","UNKNOWN_PLUGIN","ChartComponent","renderer","reflow","details","current","fallback","mobile","ref","YagrPlugin","set","plugins","COLORS","getSerieColor","serieIndex","length","datepickerDefaultProps","WaitForFont","_useSelector","useSelector","getFontFamilies","regular","monospace","_React$useState","_React$useState2","_slicedToArray","ready","setReady","Promise","all","waitForFontFamily","then","usePoolTreesLoaded","dispatch","useDispatch","loadPoolTreesIfNotLoaded","PoolTreesLoader","useDefaultPoolTree","defaultPoolTree","setDefaultPoolTree","loadDefaultPoolTree","WaitForDefaultPoolTree","formatShare","hammer","format","significantDigits","isEmptyStatistics","stats","some_","ypath","getValue","hasProgressTasks","operation","TASKS_PREFIX","prepareFile","file","path","originalPath","executable","getBoolean","prepareMeta","meta","prepared","map_","sortBy_","prepareStartedBy","startedBy","command","fields","filter_","option","prepareTransferTask","task","task_id","url","UIFactory","makeUrlForTransferTask","prepareLivePreview","index","isRunning","_operation$getLivePre","getLivePreviewPath","virtualPath","supported","transaction","prepareTableFilters","table","filters","ranges","range","upperLimit","lowerLimit","normalizeTableRanges","columns","prepareTable","typedTable","userTransactionAlive","cluster","concat","prepareTransaction","_objectSpread","livePreview","append","teleport","primary","foreign","typedFilters","groupTables","tables","currentGroup","group","forEach_","YPath","create","getKey","folder","toSubpath","stringify","groupKey","push","isFolder","err","console","prepareInput","TYPE","typedTables","$typedAttributes","prepareStderr","prepareCoredumps","coreTable","prepareOutput","prepareIntermediate","prepareScriptCaption","indexOf","substring","prepareScript","_environment","script","environment","jobCount","files","caption","prepareTasks","tasks","keys_","taskName","prepareVisibleItems","items","item","filterVisibleItems","itemsCount","_step","result","count","_iterator","_createForOfIteratorHelper","s","n","done","e","f","prepareFaqUrl","docsUrl","docsUrls","replace","OperationSelector","$value","$attributes","pools","attributes","_objectWithoutProperties","_excluded","RUNNING_STATES","PREPARING_STATES","INTERMEDIATE_STATES","orchidAttributes","trees","poolsIndexes","schedulingInfo","_orchidAttributes$tre","tree","pool","isEphemeral","slotIndex","weight","_OperationSelector","_toConsumableArray","ListOperationSelector","_OperationSelector2","_this","user","suspended","input","output","startTime","finishTime","duration","jobs","completedJobs","runningJobs","failedJobs","totalJobs","completedJobsProgress","runningJobsProgress","jobsProgress","briefSpec","_assertThisInitialized","computeIOProperties","computePools","moment","progress","_typeof","completed","total","running","failed","spec","io","res","remote","remoteInputUrl","DetailedOperationSelector","_OperationSelector3","_super2","typedData","orchidData","_this2","$orchidAttributes","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","alert_events","appeared","alert_type","getNumberDeprecated","NaN","to","time","from","getOperation","getOperationId","getOperationTasks","getOperationTasksNames","sort","getOperationDetailsLoadingStatus","loading","loaded","calculateLoadingStatus","getOperationTypedAttributes","getOperationJobsLoadingStatus","monitorChartStates","states","getOperationExperimentAssignments","getOperationMonitoredJobCount","getOperationJobsMonitorTabSettings","jobsCount","maxJobCount","cancelHerlper","CancelHelper","toaster","Toaster","operationDetailsRequests","getIsEphemeral","_ref2","operationAttributes","treesInfo","requests","values","mapValues_","infoPerTree","map","parameters","ytApiV3Id","executeBatch","YTApiId","operationIsEphemeral","_ref3","YTErrors","NODE_DOES_NOT_EXIST","reduce","poolInfo","_defineProperty","getState","isAlias","params","include_scheduler","output_format","TYPED_OUTPUT_FORMAT","operation_alias","operation_id","GET_OPERATION","REQUEST","ytApiV3","checkUserTransaction","_ref5","_ref6","preparedAttributes","prepareAttributes","dispatchOperationSuccess","actions","prepareActions","specification","network","prepareRemote","transferTask","mode","genNavigationUrl","stderr","intermediate","coredumps","mapper","reducer","reduceCombiner","prepareSpecification","alerts","helpURL","prepareAlerts","prepareError","runtime","treeFairShareInfo","treeName","prepareRuntime","events","prepareOperationEvents","resources","statistics","estimatedInputStatistics","dataFlow","source_name","target_name","job_data_statistics","teleport_data_statistics","info","jobStat","teleportStat","tasksIndexMap","task_name","prepareGraphDataByTasks","dataFlowGraph","jobTypeOrder","fromJobType","toJobType","prepareGraphData","prepareCompletedUsage","SUCCESS","_getOperationJobsMoni","JOBS_MONITOR","listJobs","listJobs100","limit","with_monitoring_descriptor","cancellation","removeAllAndSave","isCancelled","CANCELLED","FAILURE","inIntermediateState","callback","_ref4","_asyncToGenerator","_regeneratorRuntime","_callee","outputTransaction","_context","prev","LOAD_RESOURCE_USAGE","abrupt","operationIntermediateResourceUsage","intermediateResources","account","stop","_x","loadIntermediateResourceUsage","isFirstLoading","add","autoHiding","theme","content","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","text","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","getCluster","login","_clusterConfig$operat","getClusterConfigByName","operationPageSettings","disableOptimizationForYTFRONT2838","rest","getOperationsListFixedStartedByFilter_FOR_YTFRONT_2838","fixedFilters","isEqual_","getDefaultToTime","currentTime","dataMode","OPERATIONS_DATA_MODE","ARCHIVE","toISOString","getDefaultFromTime","subtract","getListRequestParameters","getFilterParameters","cursor_time","_operations$list$curs","cursor","cursor_direction","direction","include_archive","USE_CACHE","getCompetitiveJobsRequestParameters","job","sortState","OPERATION_JOBS_TABLE_ID","job_competition_id","jobCompetitionId","sort_field","field","sort_order","asc","getJobsRequestParameters","offset","_operations$jobs","pagination","data_source","dataSource","address","with_stderr","withStderr","withMonitoringDescriptor","with_fail_context","withFailContext","with_spec","withSpec","with_competitors","withCompetitors","getJobFilterParameters","Math","max","EXTRA_JOBS_COUNT","cancellableRequests","updateCursor","timestamp","firstPageReached","lastPageReached","_ref$resetLoadingStat","resetLoadingStatus","UPDATE_CURSOR","updateOperationsList","updateOperationsByParams","UPDATE_OPERATIONS_REQUEST","rumId","RumWrapper","RumMeasureTypes","OPERATIONS_LIST","fetch","listOperations","response","incomplete","OPERATIONS_CURSOR_DIRECTION","PAST","FUTURE","updatePager","UPDATE_OPERATIONS_SUCCESS","wrap","UPDATE_FILTER_COUNTERS","yt","UPDATE_OPERATIONS_CANCELLED","UPDATE_OPERATIONS_FAILURE","resetCursor","updateFilter","UPDATE_FILTER","resetTimeRange","RESET_TIME_RANGE","showArchiveOperations","SET_OPERATIONS_DATA_MODE","toggleSaveFilterPresetDialog","TOGGLE_SAVE_FILTER_PRESET_DIALOG","showEditPoolsWeightsModal","editable","SHOW_EDIT_WEIGHT_POOL_MODAL","headingBlock","runtimeBlock","StarvingStatus","starvation_status","Readable","PropTypes","isRequired","Runtime","_Component","_len","args","Array","_key","handlePoolEditClick","_progress$partitions","_progress$partitions2","_progress$resource_de","_progress$resource_de2","MetaTable","OperationPool","onEdit","compact","TemplateWeight","min_share_ratio","adjusted_min_share_ratio","fair_share_ratio","usage_ratio","demand_ratio","partitions","scheduling_status","dominant_resource","Template","FormattedValue","preemptable_job_count","resource_demand","memory","user_slots","renderTree","Component","connect","preparePoolsState","prepareWeightsState","String","renderPoolsAndWeights","weights","setPools","setWeights","Page","SCHEDULING","Fragment","Link","mapDispatchToProps","hideEditPoolsWeightsModal","HIDE_EDIT_WEIGHT_POOL_MODAL","setPoolsAndWeights","pathItems","window","location","pathname","split","inOperationsList","OPERATIONS","operationId","poolTrees","SET_PULLS_AND_WEIGHTS","old","Number","updateOperationParameters","_parameters","scheduling_options_per_pool_tree","_operations$page$edit","page","editWeightModal","errorData","_useState","useState","_useState2","_useState3","_useState4","useEffect","Modal","footer","confirmText","onConfirm","onCancel","isConfirmDisabled","isStateCorrect","isWeightCorrect","every_","isNaN","isPoolCorrect","Yson","inline","Error","OperationProgress","onLinkClick","jobsByStateTitle","routed","renderCounter","isPreparing","showState","_this$props2$operatio","StatusLabel","renderState","Progress","progressBar","stack","renderProgressBar","renderFailedProgressBar","renderJobCounters","renderFailedJobCounters","BLOCK_NAME","renderIO","renderText","mix","elem","OperationIOLink","renderTitle","getTitle","trimEnd_","unipika","decode","renderCopyTitle","ClipboardButton","view","UserPoolItem","awesomeIcon","Tooltip","allowUnmounted","face","metaItem","templates","OperationsListTable","match","valueTemplate","renderUserPool","multiplePools","SubjectCard","renderMultiplePools","TemplatePools","allowDetachEditBtn","renderActions","promptAction","action","currentOption","performAction","withTooltip","tooltipProps","placement","css","striped","virtualType","getItemLink","computeKey","sets","default","align","user_pool","start_time","renderType","renderStartTime","renderProgress","initialLoading","ElementsTable","emptyDataDescription","isLoading","withRouter","global","_operations$list","hasLoaded","tbBlock","OperationsTextFilter","transition","gotoDetails","handleKeyDown","evt","target","stateValue","propsValue","activePreset","Redirect","Filter","placeholder","newValue","debounce","onKeyDown","bForm","DISPLAY_FORMAT","TimePicker","_isAMomentObject","date","handleTimeChange","newTime","isValidFormat","_checkInputTimeValidity","_prepareOutputDate","textTime","isValid","textDate","minDate","newDate","unix","currentDate","year","month","isValidDate","_checkDateValidity","iconRight","renderIcon","controlAttrs","maxLength","nextProps","prevState","formBlock","datePickerProps","controlSize","outputFormat","popupClassName","radioButtonTypes","custom","twoHours","hours","day","week","OperationsArchiveFilter","store","_useSelector$timeRang","modalVisible","activeTypeValue","showModal","useCallback","hideModal","CURRENT","applyTimeRange","prepareText","updateDate","dateWithHours","_moment$toObject","toObject","minutes","updateTime","handleActiveTypeChange","ev","checked","cancelText","cl","CustomRadioButton","values_","Datepicker","newFrom","newTo","renderCustomCancel","SelectButton","selected","OperationSelectFilter","onRadioChange","val","onCheckChange","withCounters","found","stateName","ReadableField","multiple","placeHolder","Select","isArray","vals","hideFilter","ownProps","_filters$name","rawCounters","countCategoriesNG","categories","flattenCategoriesNG","getCounters","OperationsListPaginator","gotoFirstPage","gotoOperationsPage","OPERATIONS_PAGE","FIRST","gotoLastPage","LAST","gotoNextPage","NEXT","gotoPrevPage","PREV","where","_getState$operations$","getOperationsListIsFinalState","hasError","status","isFinalLoadingStatus","getOperationsListFilterPresets","getSettingsDataRaw","collectionKeys","startsWith","NAMESPACES","OPERATION_PRESETS","OPERATIONS_LIST_RUNNING_PRESET","preconfigured","OPERATIONS_LIST_DEFAULT_FILTERS","createPreconfiguredPresets","collection","slice","NS_SEPARATOR","getOperationsListActivePresets","selectedFilters","presets","presetId","k","_selectedFilters$key","Set","ELEMENT","OperationsFilterPresets","presetName","isPresetDefault","saveFilterPreset","_this$state","makeRemoveHandler","event","stopPropagation","removeFilterPreset","isPresetNameEmpty","applyFilterPreset","defaultPreset","search","dialog","_this$state2","INPUT_ID","isSaving","htmlFor","autoFocus","Checkbox","_this3","_this$props4","activePresets","renderSavePresetDialog","preset","active","has","role","reload","APPLY_FILTER_PRESET","removeSetting","isDefault","promise","resolve","guid","setSetting","DEFAULT_PRESET_SETTING","OPERATION","currentFilters","makeGetSetting","getSetting","savePresetDialog","OperationSuggestFilter","Suggest","simpleSuggestLoader","zIndexGroupLevel","clear","toLowerCase","itemText","mapStateToPropsByFilterName","OperationsListPoolTreeSuggestFilter","OperationsListPoolSuggestFilter","OperationsListUserSuggestFilter","fixedStartedByFilter","OperationsAccessibleForFilterImpl","_useSelector$subject","actualValue","renderUserSuggest","width","OperationsAccessibleForFilter","tbComp","OperationsListToolbar","_React$PureComponent","permission","toUpperCase","join","failedJobsFilter","OperationsSelectFilter","preparePermissionsPlaceholder","show","renderTopSection","renderBottomSection","renderWarning_uiissue_2838","OperationsListToolbarHooked","subjects","handleUpdateFilter","handleToggleSaveFilterPresetDialog","OperationListUpdater","useMemoizedIfEqual","updateFn","useUpdater","onlyOnce","isBigTimeRange","dateFrom","diff","asDays","OperationsList","prevTimeRange","_this$props$error","inDashboard","firstTimeError","OperationsListConnected","OperationsListWithRum","isFinalStatus","useAppRumMeasureStart","startDeps","allowStart","useRumMeasureStop","stopDeps","allowStop","YTHistogram","xLabel","yLabel","yLogarithmic","yMin","_ref$xFormat","xFormat","_ref$yFormat","yFormat","_ref$renderTooltip","renderTooltip","renderDefaultTooltip","yagrData","_genYagrData","min","step","serieData","timeline","i","genYagrData","graphs","v","color","formatter","renderOptions","gap","libraryConfig","axes","x","_d","y","scales","tooltipData","_renderTooltip","_tooltipData$scales","originalValue","rows","YagrChartKit","x0","x1","calculateFormatSettings","fmtFn","v2","opts","digits","PartitionSizes","formatX","formatSettings","Bytes","PartitionSizesConnected","chartKitTheme","getTheme","connector","PartitionSizesWithRum","loadState","OPERATION_TAB_PARTITION_SIZES","additionalStartType","row","Time","valueFormat","ClickableText","hideOopsMsg","AlertEvents","allVisible","setAllVisible","l","r","compareWithUndefined","toggleShowAll","DataTableYT","displayIndices","sortable","useThemeYT","disableRightGap","rowClassName","Description","prepareSettings","escapeWhitespace","_unipika$utils$yson","yson","isWithoutTags","hasOwnProperty","CollapsableText","renderAsMap","renderMetaTable","renderAsYSON","METRICS","virtual","completedTableProps","withActions","prepareTableColumns","row_count","compressed_data_size","uncompressed_data_size","data_weight","chunk_count","intermediateTableProps","disk_space","node_count","resourceAsBytes","columnName","resourceAsNumber","expandKey","prepareState","allowExpand","expandedTasks","inner","DataFlow","self","fromTo","expKey","toggleExpand","ClickableAttributesButton","columnsMode","getResourceTemplates","CollapsibleTable","heading","allItemsCount","renderToggler","renderHeading","withCollapsible","tableProps","tags","inputTableProps","outputTableProps","stderrTableProps","specificationBlock","scriptProps","Specification","TemplateTransferTask","_ref3$fields","TemplateCommand","lineCount","TemplateEnvironment","environments","TemplateFiles","TemplateLivePreivew","renderScript","_this$props$specifica","renderTransferTask","renderRemote","renderStartedBy","renderIntermediate","renderTasks","DetailedJobsCounter","helpUrl","scheduledCounters","scheduled","scheduledItems","nonScheduledCounters","nonScheduled","nonScheduledItems","renderSection","renderHelpLink","nonInterruptedItems","nonInterrupted","interruptedCounters","interrupted","renderAborted","abortedStats","renderCompleted","completedStats","secondary","primaryValue","secondaryValue","handleClose","handleShow","modalContent","renderModalContent","renderCount","onOutsideClick","withVisible","sortCounters","reasonA","reasonB","compareVectors","prepareCategoryCounters","category","prepareCompletedStatistics","prepareAbortedStatistics","aborted","prepareCounters","tasksTablesProps","job_type","prepareColumns","fieldTreeForEach","vertex","isT","visitorCb","forEach","pop","filterFieldTree","predicate","filterT","empty","tmp","fieldTreeSome","some","getOperationDetailsOperation","getOperationStatisticsV2","isStatisticItem","getOperationStatisticsAvailableValues","_stats$time$total","_stats$time","_construct","getOperationStatisticsActiveFilterValues","jobTypeFilter","poolTreeFilter","filterText","activeJobType","STATISTICS_FILTER_ALL_VALUE","activePoolTree","getOperationStatiscsHasData","isEmpty_","getOperationStatisticsFilteredTree","checkByName","_ref3$tags","getOperationStatisticsFiltered","_tree","isLeafNode","level","itemToRow","summary","job_state","c","sum_","sum","min_","max_","mergeSummary","getTotalJobWallTime","_tree$time","excludeRunningAndCalcSum","_itemToRow","valuesToSum","compact_","NO_VALUE","CPU_TIME_SPENT_PART_NAMES","getTotalCpuTimeSpent","get_","getOperationDetailTasksData","_stats$time$total2","_stats$time2","_timeStatistics$abort","_timeStatistics$compl","job_counter","jobType","totalCounters","isTotal","prepareDataFromGraphByTasks","countersByType","prepareJobTypeOrder","taskType","jobTypeInfo","prepareDataFromGraph","_itemToRow2","timeStatistics","_excluded2","abortedJobsTime","completedJobsTime","abortedJobsTimeRatio","abortedJobsShare","prepareAbortedJobsTimeRatio","averageReadDataRate","_itemToRow$completed$","_itemToRow$completed","_stats$data","completedInputSize","prepareAverageReadDataRate","averageReadRowRate","_itemToRow$completed$2","_itemToRow$completed2","_stats$data2","completedInputRows","prepareAverageReadRowRate","expandedState","visibleItems","taskInfo","Tasks","allowActions","__default__","column","_item$abortedStats","_item$completedStats","TaskInfo","_self$state","expandable","_rowIndex","colIndex","_jobs$items","collapsibleSize","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","_this$props$operation","OperationDescription","alertEvents","overview","renderRuntimeOverview","_this$props5","_this$props6","Events","renderDescription","renderSpecification","renderAlerts","renderRuntime","renderJobs","renderResources","renderEvents","DetailsConnected","UI_COLLAPSIBLE_SIZE","DetailsWithRum","OPERATION_TAB_DETAILS","StarTrackLink","_props$emptyContent","emptyContent","trackerBaseUrl","uiSettings","_Fragment","ExperimentAssignments","ExperimentsItem","ExperimentAssignmentsItem","collapsed","setCollapsed","onToggleCollapse","CollapsibleSectionStateLess","onToggle","_React$useState3","_React$useState4","effectVisible","setEffectVisibility","_ypath$getValue","effect","fraction","getOperationExperimentsYsonSettings","toggleEffectVisibility","dispatchEvent","Event","folding","virtualized","extraTools","YsonDownloadButton","onResize","throttle_","leading","SpecificationConnected","providedSpec","unrecognizedSpec","hasUnrecognized","provided","unrecognized","resulting","onToggleProvided","onToggleUnrecognized","onToggleResulting","HelpLink","SpecificationWithRum","OPERATION_TAB_SPECIFICATION","JobSizes","showEstimated","toggleEstimated","WithStickyToolbar","toolbar","Toolbar","itemsToWrap","node","estimatedJobSizeHistogram","jobSizeHistogram","estimated_input_data_weight_histogram","input_data_weight_histogram","renderChart","_this$prepareJobSizes","prepareJobSizes","hasTaskHistograms","renderPerTaskCharts","renderCommon","JobSizesConnected","JobSizesWithRum","OPERATION_TAB_JOB_SIZES","STATISTIC_STATE","lost","statisticsTableProps","metric","useStatisticInfo","getOperationStatisticsDescription","byName","byRegexp","endsWith","find_","regexp","OperationStatisticNameImpl","emptyInfo","unit","Secondary","UNIT_TO_FORMATTER","_UNIT_TO_FORMATTER","TimeDuration","round","formatBytes","OperationStatisticValueImpl","formatFn","asNumber","OperationStatisticValue","OperationStatisticName","statisticsBlock","toolbarBlock","Statistics","collapseTable","setTreeState","TREE_STATE","COLLAPSED","expandTable","EXPANDED","activeAggregation","_columnName","toggleItemState","itemState","offsetStyle","paddingLeft","style","togglerIconName","itemIconName","_item$data","jobTypes","DEBOUNCE_DELAY","changeFilterText","RadioButton","changePoolTreeFilter","makeRadioButtonProps","changeJobType","changeAggregation","AGGREGATOR_RADIO_ITEMS","treeState","renderToolbar","template","SET_TREE_STATE","CHANGE_FILTER_TEXT","CHANGE_AGGREGATION","OPERATION_STATISTICS_PARTIAL","operationType","settingsJobTypes","getSettingOperationStatisticsActiveJobTypes","setSettingsStatisticsActiveJobTypes","StatisticsConnected","_state$operations$sta","_getOperationStatisti","OPERATION_TAB_STATISTICS","getJob","clusterConfig","getCurrentClusterConfig","removeAllRequests","job_id","saveCancelToken","GET_JOB","getCompetitiveJobs","GET_COMPETITIVE_JOBS","getJobsCanceler","getJobs","GET_JOBS","USE_MAX_SIZE","operationGetJobs","addresses","reject","_jobs$output","errors","state_counts","type_counts","jobsErrors","stateCounters","typeCounters","setFilter","isStateFilter","changeColumnSortOrder","tableId","RESET_COMPETITIVE_JOBS","gotoJobsPage","showInputPaths","SHOW_INPUT_PATHS","getJobInputPaths","inputPaths","UPDATE_OFFSET","getJobsErrors","JobStatistics","_ypath$getValues","_ypath$getValues2","rowCount","dataSize","renderStatistics","JobTemplate","propTypes","showErrorModal","InputPaths","DebugInfo","_job$getDebugInfo","getDebugInfo","DownloadLink","BriefStatisticsDetailsMemo","BriefStatisticsDetails","OperationJobsTable","modalKey","successMessage","errorMessage","confirmationText","PLEASE_PROCEED_TEXT","successMessageTemplate","prepareJobAction","jobActionPromise","metrics","countEvent","abortJob","abandonJob","temporaryPathBase","recursive","ignore_existing","temporaryPath","createTemporaryPath","dumpJobContext","performJobAction","preparedActions","renderIdAddress","is_stale","host","monitoring_descriptor","isSpeculativeJob","StaleJobIcon","ChartLink","makeUrlForMonitoringDescriptor","renderErrorAndDebug","areInputPathsPresent","hasSpec","openAttributesModal","button","firstGroup","secondGroup","DropdownMenu","switcher","id_address","finish_time","withTaskName","taskNamesNumber","renderFinishTime","renderDuration","renderTaskName","brief_statistics","_this$props2$inputPat","paths","hideInputPaths","LOADING_STATUS","UNINITIALIZED","ysonSettings","ERROR","SimpleModal","LOADING","showCompetitiveJobs","competitiveJobs","renderInputPathsModal","onSort","HIDE_INPUT_PATHS","_getOperationTasksNam","jobsOperationId","getJobsOperationId","initialStates","statesProvider","JobsPaginator","_operations$jobs$pagi","JobsIdFilter","handleChange","JobsSuggestFilter","identity_","attributeNames","filtered","isFiltered","updateFilteredAttributes","filterable","extractJobTypes","sortInPredefinedOrder","OperationJobsToolbar","taskNames","allTaskNames","JobsFilterBy","JobsSelectFilter","JobsAttributesFilter","OperationJobsErrors","ErrorBlock","Jobs","timeout","LoadDataHandler","alwaysShowError","JobsWithRum","operationLoadState","OPERATION_TAB_JOBS","getJobsMonitoringItemsWithDescriptor","jobsMonitor","getJobsMonitorFromTo","start","valueOf","finish","getJobsMonitorDescriptor","getJobsMonitorTabVisible","opId","jobMonId","jobsDescriptor","JobsMonitor","job_descriptor","NoContent","warning","JobMonitorComponent","getMonitorComponentForJob","OperationAttributes","getOperationAttributesYsonSettings","OPERATION_TAB_ATTRIBUTES","OperationDetailsMonitor","OperationMonitor","component","detailBlock","OperationDetailUpdater","OperationDetail","handlePoolsEditClick","renderAction","onProgressLinkClick","jobState","_this$props$actions","_this$props$operation2","renderPlaque","totalJobWallTime","cpuTimeSpent","erasedTrees","_operation$user","Id","_objectSpread2","hasStatististicsTab","jobsMonitorVisible","monitorTabVisible","monitorTabTitle","monitorTabUrlTemplate","showSettings","getDetailsTabsShowSettings","Tab","STATISTICS","MONITOR","_operation$pools","monTab","external","firstPoolInfo","operationMonitoringUrl","urlTemplate","makeTabProps","Tabs","DEFAULT_TAB","routedPreserveLocation","UI_TAB_SIZE","monitoringComponent","Switch","Route","ATTRIBUTES","DETAILS","SPECIFICATION","JOBS","JOB_SIZES","PARTITION_SIZES","Placeholder","renderAlias","_match$params","tab","redirectPath","Loader","renderHeader","renderOverview","renderTabs","renderMain","_this$props7","_state$operations$det","getMonitoringForOperation","getCurrentCluster","OperationDetailConnected","OperationDetailsWithRum","viewContext","DASHBOARD_VIEW_CONTEXT","PoolsWeightsEditModal","exact","useRumMeasureStart","subPage","fontFamily","FontFaceObserver","load","waitForFontFamilies","promiseToWrap","_dispatch","fontFamilies","i18nFactory","registerKeysets","bind","CHARTKIT_ERROR_CODE","INVALID_DATA","UNKNOWN","TOO_MANY_LINES","ChartKitError","originalError","isCustomError","mergeSettingStrategy","objValue","srcValue","currentPlugins","newPlugins","newSettingsPlugins","currentPlugin","newPluginIndex","findIndex","newPlugin","splice","settingsEventEmitter","on","off","eventId","updateLang","configure","setLang","updates","filteredUpdates","entries","withNaming","m","getRandomCKId","chars","floor","random","randomString","p","a","document","addEventListener","attachEvent","w","g","createElement","setAttribute","appendChild","createTextNode","h","j","cssText","B","offsetWidth","scrollLeft","scrollWidth","C","parentNode","D","family","stretch","context","E","F","G","H","M","fonts","N","font","q","prototype","J","Date","getTime","K","L","navigator","vendor","exec","userAgent","parseInt","I","O","t","setTimeout","P","race","clearTimeout","body","removeEventListener","readyState","detachEvent","u","d","z","A","removeChild","dir","hidden","module","exports"],"sourceRoot":""}