@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,2 @@
1
+ "use strict";(self.webpackChunk_ytsaurus_ui=self.webpackChunk_ytsaurus_ui||[]).push([[5684],{97536:(e,t,n)=>{n.d(t,{A:()=>u});var a=n(40319),s=n(18801),r=(n(77810),n(2211)),o=n(60620),i=n(64922),l=["view","size"];function u(e){var t=e.view,n=void 0===t?"flat-secondary":t,u=e.size,c=void 0===u?"m":u,d=(0,s.A)(e,l);return(0,i.jsx)(r.A,(0,a.A)((0,a.A)({view:n,size:c},d),{},{children:(0,i.jsx)(o.A,{awesome:"at"})}))}},97931:(e,t,n)=>{n.d(t,{A:()=>i}),n(77810);var a=n(76872),s=n(60620),r=n(64922),o=(0,a.A)("error-message");const i=function(e){var t=e.message,n=e.className;return(0,r.jsxs)("div",{className:o(null,n),children:[(0,r.jsx)(s.A,{awesome:"exclamation-circle"}),(0,r.jsx)("span",{className:o("message-text"),children:t})]})}},78466:(e,t,n)=>{n.d(t,{L:()=>c}),n(77810);var a=n(92423),s=n(72679),r=n(39702),o=n(40319),i=n(64922);const l=function(e){return(0,i.jsx)("svg",(0,o.A)((0,o.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,i.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z",clipRule:"evenodd"})}))};var u=(0,n(76872).A)("yt-expanded-button"),c=function(e){var t=e.className,n=e.expanded,o=e.inline,c=e.toggleExpanded,d=e.all,m=e.showText,p=e.qa,h=d?"Collapse All":"Collapse",f=d?"Expand All":"Expand";return(0,i.jsxs)(a.$,{className:u({inline:o},t),view:"flat-secondary",title:n?h:f,onClick:c,qa:p,children:[m&&(n?h:f)+" ",(0,i.jsx)(s.I,{className:u("expand",{expanded:n}),data:d?l:r.A,size:16})]})}},38226:(e,t,n)=>{n.d(t,{A:()=>j});var a,s=n(29121),r=n(12937),o=n(10785),i=n(26718),l=n(68175),u=n(77810),c=n(76872),d=n(64772),m=n(60620),p=n(34380),h=n(44458),f=n(64922),v=(0,c.A)("sort-icon"),g=(a={},(0,l.A)(a,"","sort"),(0,l.A)(a,"asc","sort-up"),(0,l.A)(a,"desc","sort-down"),(0,l.A)(a,"asc-undefined","arrow-to-bottom"),(0,l.A)(a,"desc-undefined","arrow-from-bottom"),(0,l.A)(a,"undefined-asc","arrow-from-top"),(0,l.A)(a,"undefined-desc","arrow-to-top"),a),j=function(e){(0,o.A)(n,e);var t=(0,i.A)(n);function n(){var e;(0,s.A)(this,n);for(var a=arguments.length,r=new Array(a),o=0;o<a;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))).onClick=function(){var t=e.props,n=t.order,a=t.onChange,s=t.allowUnordered,r=t.withUndefined;a&&a((0,h.$N)(n,s,r))},e}return(0,r.A)(n,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.label,a=e.order,s=e.hidden,r=g[a||""];return(0,f.jsxs)("span",{className:v({hidden:s},t),onClick:this.onClick,children:[n&&(0,f.jsx)("span",{className:v("label"),children:n}),(0,f.jsx)(p.m,{className:v("icon"),content:a?d.A.ReadableField(a):"Unordered",children:(0,f.jsx)(m.A,{awesome:r,face:"solid"})})]})}}]),n}(u.Component)},82564:(e,t,n)=>{n.d(t,{DC:()=>O});var a=n(40319),s=n(13322),r=n(9736),o=n(77810),i=n(15647),l=n(76872),u=n(60620),c=n(73822),d=n(69835),m=n(11394),p=n(11843),h=n(84162),f=n(30008),v=n(78466),g=n(64922),j=(0,l.A)("elements-toolbar"),b=(0,l.A)("job-statistics");function x(e){var t=o.useCallback((function(){return e.onTreeStateChange("collapsed")}),[e.onTreeStateChange]),n=o.useCallback((function(){return e.onTreeStateChange("expanded")}),[e.onTreeStateChange]),a=(0,i.wA)(),s=(0,o.useCallback)((function(t){return a(e.onFilterChange(t))}),[a]),r="expanded"===e.treeState||"mixed"===e.treeState;return(0,g.jsx)("div",{className:j(null,b("toolbar")),children:(0,g.jsxs)("div",{className:j("container"),children:[(0,g.jsx)("div",{className:j("component",b("filter")),children:(0,g.jsx)(h.A,{size:"m",debounce:500,value:"",onChange:s})}),(0,g.jsx)("div",{className:j("component",b("expand-collapse")),children:(0,g.jsx)("span",{className:b("expand-metrics"),children:(0,g.jsx)(v.L,{expanded:r,toggleExpanded:r?t:n})})}),e.helpUrl&&(0,g.jsx)("div",{className:j("component",b("help")),children:(0,g.jsx)(f.A,{url:e.helpUrl})})]})})}var A=n(70353);function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=e.measureText(t).width;return Math.max(1,Math.ceil(n))}var _=n(74360),C=n(39760),k=n.n(C),N=n(30002),w=n.n(N),S="<Root>";function I(e,t){return{name:t,prefix:e,path:e+"/"+t}}function D(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:S,a=t||{children:{},leaves:{}};return k()(e,(function(e,t){if("object"===(0,_.A)(w()(e)[0])){var s=I(n,t);a.children[s.path]=s,a=D(e,a,s.path)}else{var r=function(e,t,n){var a=I(e,t);return a.value=n,a}(n,t,e);a.leaves[r.path]=r}})),a}var T=function(e){return t=D(e),n=c.A.treeList.prepareTree(t.children,(function(e){return e.prefix})),(n=c.A.treeList.attachTreeLeaves(n,t.leaves,(function(e){return e.prefix})))[S];var t,n},E=(0,l.A)("job-statistics"),z=40;function F(e){var t=e.item.attributes.value;if(t&&t.count&&t.sum){var n=t.sum/t.count;return n<1?c.A.format.Number(n,{significantDigits:6}):c.A.format.Number(n)}return c.A.format.NO_VALUE}function M(e){var t,n=e.item,a=e.aggregation;return n.isLeafNode&&Boolean(n.attributes.value)?"avg"===a?(0,g.jsx)(F,{item:n}):c.A.format.Number(null===(t=n.attributes)||void 0===t||null===(t=t.value)||void 0===t?void 0:t[a]):c.A.format.NO_VALUE}function L(e){var t=e.item,n=e.itemState,a=e.toggleItemState,s=e.minWidth,r=void 0===s?void 0:s,i=e.renderValue,l=o.useMemo((function(){return{minWidth:r,paddingLeft:((null==t?void 0:t.level)||0)*z}}),[t.level,r]),c=o.useCallback((function(){n.empty||a()}),[n,a]);return t.isLeafNode?(0,g.jsxs)("span",{className:E("metric"),style:l,children:[(0,g.jsx)(u.A,{awesome:"chart-line",className:E("metric-icon")}),(0,g.jsx)("span",{children:i(t)})]}):(0,g.jsxs)("span",{className:E("group"),style:l,onClick:c,children:[(0,g.jsx)(v.L,{expanded:!(n.collapsed||n.empty),toggleExpanded:function(){}}),(0,g.jsx)(u.A,{awesome:n.collapsed||n.empty?"folder":"folder-open",className:E("group-icon")}),(0,g.jsx)("span",{children:i(t)})]})}var B=function(e){var t=e.visibleColumns.reduce((function(e,t){return e[t]={sort:!1,align:"right"},e}),{name:{sort:!1,align:"left"}});return{theme:"light",size:"s",striped:!1,computeKey:function(e){return e.name},tree:!0,columns:{sets:{default:{items:Object.keys(t)}},items:t,mode:"default"}}},R=function(e){var t=e.statistic,n=e.fontFamilies,a=o.useState(""),s=(0,r.A)(a,2),i=s[0],l=s[1],u=o.useState("expanded"),d=(0,r.A)(u,2),m=d[0],p=d[1],h=o.useMemo((function(){return T(t)}),[t]),f=o.useMemo((function(){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(!e)return[];var n=c.A.treeList.filterTree(e,(function(e){return-1!==e.name.indexOf(t)}),!0),a=c.A.treeList.sortTree(n,{field:"name",asc:!0},{name:{get:function(e){return e.name}}});return c.A.treeList.flattenTree(a)}(h,i)}),[h,i]);return{minWidth:o.useMemo((function(){return function(e,t){var n,a=300,s=function(e){var t=document.createElement("canvas").getContext("2d");return t.font=e,t}('14px / 20.02px "'.concat(t.regular,'", "Helvetica Neue", Arial, Helvetica, sans-serif')),r=(0,A.A)(e);try{for(r.s();!(n=r.n()).done;){var o=n.value,i=o.isLeafNode?20:40,l=y(s,o.attributes.name);a=Math.max(a,l+i+o.level*z)}}catch(e){r.e(e)}finally{r.f()}return Math.round(1.05*a)}(f,n)}),[n,f]),items:f,treeState:m,setTreeState:p,onFilterChange:function(e){return l(e)}}};function O(e){var t=e.helpUrl,n=e.virtual,r=e.visibleColumns,l=e.fixedHeader,u=e.statistic,c=(0,i.d4)(p.Y),h=R({statistic:u,fontFamilies:c}),f=h.items,v=h.minWidth,j=h.treeState,b=h.setTreeState,A=h.onFilterChange,y=o.useMemo((function(){return{name:function(e,t,n,a){return(0,g.jsx)(L,{item:e,minWidth:v,toggleItemState:n,itemState:a,renderValue:function(e){var t;return null==e||null===(t=e.attributes)||void 0===t?void 0:t.name}})},__default__:function(e,t){return e.isLeafNode?(0,g.jsx)(M,{item:e,aggregation:t}):null}}}),[v]),_=o.useMemo((function(){return B({visibleColumns:r})}),(0,s.A)(r));return(0,g.jsx)(d.A,{children:(0,g.jsxs)("div",{className:E(),children:[(0,g.jsx)(x,{helpUrl:t,onFilterChange:A,onTreeStateChange:b,treeState:j}),(0,g.jsx)("div",{className:E("table-container"),children:(0,g.jsx)(m.A,(0,a.A)((0,a.A)({},_),{},{virtual:n,treeState:j,templates:y,items:f,css:E(),headerClassName:E("header",{fixed:l})}))})]})})}},29241:(e,t,n)=>{n.d(t,{K$:()=>f,i:()=>g,Ay:()=>j,WS:()=>v,A4:()=>p,bU:()=>h,FF:()=>m,S5:()=>d});var a=n(74360),s=n(40319),r=(n(77810),n(3659)),o=n(76872),i=n(76426),l=n(73822),u=n(48971),c=n(64922);function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=(0,o.A)("elements-text");n=t.mix?n(!1,(0,o.A)(t.mix.block)(t.mix.elem,(0,s.A)({},t.mix.mods))):n();var a=function(e,t){var n={};return t?n.dangerouslySetInnerHTML={__html:e}:n.children=r.A.decode(String(e)),n}(e,t.asHTML),i=t.title||e;return(0,c.jsx)("span",(0,s.A)((0,s.A)({},a),{},{title:i,className:n}))}function m(e,t){var n=this.getColumn(t);return l.A.format.TimeDuration(n.get(e),{format:"milliseconds"})}function p(e,t){var n=this.getColumn(t);return(0,c.jsx)("span",{className:"elements-ellipsis",children:l.A.format.ReadableField(n.get(e))})}function h(e,t){var n=null!=this&&this.getColumn?this.getColumn(t).get(e):e[t];return(0,c.jsx)(f,{value:n})}function f(e){var t=e.value;return(0,c.jsx)("span",{className:"elements-ellipsis",children:l.A.format.DateTime(t,{format:"full"})})}function v(e){return"object"===(0,a.A)(e)?(0,c.jsx)(i.A,{theme:"ghost",onClick:function(){(0,u.eW)(e,{hideOopsMsg:!0})},children:"View"}):l.A.format.NO_VALUE}function g(e,t){return l.A.format.Number(e[t])}const j={__default__:function(e,t){return String(l.A.format.ValueOrDefault(e[t]))},_templates:{},add:function(e,t){this._templates[e]=function(e){return Object.keys(e).reduce((function(t,n){return t[n]=e[n],t}),{})}(t)},get:function(e){return this._templates[e]||{}}}},19845:(e,t,n)=>{n.d(t,{A:()=>I});var a=n(29121),s=n(12937),r=n(10785),o=n(26718),i=n(77810),l=n(15647),u=n(25147),c=n.n(u),d=n(76872),m=n(65573),p=n(24503),h=n.n(p),f=n(34455),v=n.n(f),g=n(96843),j=n.n(g),b=n(65692),x=n(55740),A=n(60620),y=n(97931),_=n(36554),C=n(17790),k=n(26264),N=n(64922),w=(0,d.A)("path-editor"),S=function(e){(0,r.A)(n,e);var t=(0,o.A)(n);function n(e){var s,r;return(0,a.A)(this,n),(r=t.call(this,e)).state=void 0,r.suggestionsList=i.createRef(),r.input=i.createRef(),r.prevScope="",r.hideSuggestions=function(){r.setState({inputFocus:!1,selectedIndex:-1})},r.handleInputChange=function(e){r.setState({path:e,selectedIndex:-1,inputChange:!0}),r.debounceLoading(e)},r.handleInputFocus=function(e){var t=r.props.onFocus,n=r.state.path;m.A.setScope("path-editor"),r.setState({inputFocus:!0}),null==t||t(e,{path:n})},r.handleInputBlur=function(){var e=r.props.onBlur,t=r.state.path;m.A.setScope(r.prevScope),r.hideSuggestions(),r.callCallback(e,t)},r.handleKeyDown=function(e){switch(e.keyCode){case k.DD.ARROW_DOWN:r.selectNextSuggestion();break;case k.DD.ARROW_UP:r.selectPrevSuggestion();break;case k.DD.ENTER:r.handleEnterClick(e);break;case k.DD.ESCAPE:r.handleEscClick();break;case k.DD.TAB:r.handleTabClick(e)}},r.renderItem=function(e,t){var n=r.state,a=n.selectedIndex,s=n.actualSuggestions[e],o=s.type,i=s.dynamic,l="table"===o&&i?"table_dynamic":o,u=(0,_.DC)(s),c=e===a?"yes":"no",d=(0,_.c5)(l,s.targetPathBroken);return(0,N.jsxs)("div",{onMouseDown:function(e){r.handleInputChange(u),e.preventDefault()},className:w("item",{selected:c}),children:[(0,N.jsx)(A.A,{awesome:d}),(0,N.jsx)("span",{className:w("item-path"),children:s.path})]},t)},r.debounceLoading=h()(r.debounceLoading,300),r.state={path:null!==(s=e.defaultPath)&&void 0!==s?s:"",actualSuggestions:[],inputFocus:!1,inputChange:!1,selectedIndex:-1},r}return(0,s.A)(n,[{key:"componentDidMount",value:function(){var e=this.props,t=e.loadSuggestionsList,n=e.customFilter,a=e.autoFocus,s=this.state.path;this.prevScope=m.A.getScope(),s&&t(s,n),a&&this._setFocus()}},{key:"componentDidUpdate",value:function(e){e.disabled&&!this.props.disabled&&this.input.current&&this._setFocus()}},{key:"componentWillUnmount",value:function(){this.props.removeActiveRequests()}},{key:"_setFocus",value:function(){var e;null===(e=this.input.current)||void 0===e||e.focus()}},{key:"inputWidth",get:function(){return this.input.current&&this.input.current.offsetWidth-2}},{key:"callCallback",value:function(e){if("function"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return e.apply(void 0,n)}}},{key:"debounceLoading",value:function(e){var t=this.props,n=t.loadSuggestionsList,a=t.customFilter,s=t.onChange;n(e,a),this.callCallback(s,e)}},{key:"selectPrevSuggestion",value:function(){var e=this.state,t=e.selectedIndex,n=e.actualSuggestions,a=(0,_.F_)(n,t);this.setState({selectedIndex:a})}},{key:"selectNextSuggestion",value:function(){var e=this.state,t=e.selectedIndex,n=e.actualSuggestions,a=(0,_.$F)(n,t);this.setState({selectedIndex:a})}},{key:"handleEnterClick",value:function(e){e.preventDefault();var t=this.state,n=t.selectedIndex,a=t.actualSuggestions,s=this.props.onApply,r=e.currentTarget.value;if(-1===n)this.setState({path:r,selectedIndex:-1}),this.callCallback(s,r);else{var o=v()(a,(function(e,t){return t===n})),i=(0,_.DC)(o);this.handleInputChange(i)}}},{key:"handleEscClick",value:function(){var e,t=this.props.onCancel;null===(e=this.input.current)||void 0===e||e.blur(),this.callCallback(t)}},{key:"handleTabClick",value:function(e){e.preventDefault();var t=this.state.actualSuggestions;if(1===t.length){var n=(0,_.DC)(t[0]);this.handleInputChange(n)}else t.length>1&&this.selectNextSuggestion()}},{key:"renderInput",value:function(){var e=this.props,t=e.placeholder,n=e.autoFocus,a=e.hasClear,s=e.disabled,r=this.state.path;return(0,N.jsx)(b.k,{onKeyDown:this.handleKeyDown,onUpdate:this.handleInputChange,onFocus:this.handleInputFocus,onBlur:this.handleInputBlur,placeholder:t,hasClear:a,autoFocus:n,disabled:s,controlRef:this.input,value:r})}},{key:"renderSuggestions",value:function(){var e=this.state.actualSuggestions;return e.length?(0,N.jsx)(c(),{itemRenderer:this.renderItem,length:e.length,type:"simple"}):null}},{key:"renderError",value:function(){var e=this.props.errorMessage;if(e)return(0,N.jsx)(y.A,{className:w("item",{error:!0}),message:e})}},{key:"renderPopup",value:function(){var e=this.props,t=e.suggestionsError,n=e.showErrors,a=this.state,s=a.actualSuggestions,r=a.inputFocus,o=this.inputWidth||0,i=Boolean((s.length||t&&n)&&r),l=t&&n?this.renderError():this.renderSuggestions();return(0,N.jsx)(x.z,{className:w("popup"),placement:["bottom-start","top-start"],onClose:this.hideSuggestions,anchorRef:this.input,open:i,offset:[0,0],children:(0,N.jsx)("div",{className:w("items"),style:{width:o},ref:this.suggestionsList,children:l})})}},{key:"render",value:function(){return(0,N.jsxs)("div",{className:w(null,this.props.className),children:[this.renderInput(),this.renderPopup()]})}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n={};return t.inputFocus&&t.inputChange&&Object.assign(n,{actualSuggestions:e.suggestions.length?(0,_.aA)(t.path,e.suggestions):[]}),void 0===t.path&&void 0!==e.defaultPath&&Object.assign(n,{path:e.defaultPath}),j()(n)?null:n}}]),n}(i.Component);S.defaultProps={errorMessage:"Oops, something went wrong",placeholder:"Enter the path...",suggestionsError:!1,autoFocus:!1,showErrors:!0,defaultPath:void 0,disabled:!1,hasClear:!1};const I=(0,l.Ng)((function(e){var t=e.navigation;return{suggestions:t.pathEditor.suggestions,suggestionsError:t.pathEditor.suggestionsError,errorMessage:t.pathEditor.errorMessage}}),{loadSuggestionsList:function(e,t){return function(n,a){var s,r=a().navigation.pathEditor,o=r.suggestionsPath,i=r.suggestionsLoaded;try{s=(0,_.$A)(e)}catch(e){return n({type:C.v.FAILURE,data:{message:e.message}})}if(o!==s||!i)return n({type:C.v.REQUEST}),(0,_._X)(e,t).then((function(t){n({type:C.v.SUCCESS,data:{suggestions:t,path:e,currentParentPath:s}})})).catch((function(e){n({type:C.v.FAILURE,data:{message:e.message}})}))}},removeActiveRequests:function(){return function(e){_.nH.removeAllRequests(),e({type:C.v.CANCELLED})}}})(S)},47393:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Wt});var a=n(77810),s=n(64965),r=n(69835),o=n(15647),i=n(76872),l=n(63588),u=n(40319),c=n(13322),d=n(64196),m=n(90826),p=n(16413),h=n(91326),f=n(6736),v=n(9736),g=n(84092),j=n.n(g),b=n(29746),x=n(52699),A=n(76365),y=new A.A;function _(e){return function(t,n){var a=n().job.specification,s=a.omitNodeDirectory,r=a.omitInputTableSpecs,o=a.omitOutputTableSpecs;return t({type:x.lG}),j().v4.getJobSpec({parameters:{job_id:e,omit_node_directory:s,omit_input_table_specs:r,omit_output_table_specs:o},cancellation:y.saveCancelToken}).then((function(e){var n=b.Ay.getValues(e,["/scheduler_job_spec_ext","/job_spec_ext"]),a=(0,v.A)(n,2),s=a[0],r=a[1];t({type:x.Jv,data:{specification:null!=r?r:s}})})).catch((function(e){e.code===j().codes.CANCELLED?t({type:x.NF}):t({type:x.E4,data:{error:e}})}))}}function C(){return function(e){y.removeAllRequests(),e({type:x.NF})}}var k=n(4386),N=n(88358),w=n(18801),S=n(18472),I=n(4176),D=n.n(I),T=n(36146),E=n.n(T),z=n(27528),F=n.n(z),M=n(95668),L=n.n(M),B=n(30002),R=n.n(B),O=n(33497),P=["total"],U=function(e,t,n){return(0,u.A)({table:void 0!==n?"".concat(t,":").concat(n):t},E()(e,(function(e){return e.sum})))},V=function(e){return e.job.general.job},W=(0,S.Mz)(V,(function(e){return b.Ay.getValue(e,"/statistics/user_job/pipes")||{}})),J=(0,S.Mz)(W,(function(e){var t=e.input,n=e.output;return{read:null==t?void 0:t.idle_time.sum,write:L()(R()(n),(function(e){return e.busy_time.sum}))}})),q=(0,S.Mz)(W,(function(e){var t=e.input,n=e.output,a=n.total,s=(0,w.A)(n,P),r={input:[U(t,"input",0)],output:R()(s).map((function(e,t){return U(e,"output",t)}))};if(a){var o=U(a,"Total");o.isTotal=!0,r.output.push(o)}return r})),H=(0,S.Mz)(V,(function(e){return b.Ay.getNumberDeprecated(e,"/statistics/user_job/cpu/user/sum")})),K=(0,S.Mz)(V,(function(e){return b.Ay.getNumberDeprecated(e,"/statistics/user_job/cpu/wait/sum")})),Y=(0,S.Mz)(V,(function(e){return b.Ay.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_utilization_gpu/sum")})),$=(0,S.Mz)(V,(function(e){return b.Ay.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_power/sum")})),Q=(0,S.Mz)(V,(function(e){return b.Ay.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_memory/sum")})),X=(0,S.Mz)(V,(function(e){return b.Ay.getNumberDeprecated(e,"/statistics/time/exec/sum")})),G=(0,S.Mz)([H,X],(function(e,t){return e/t})),Z=(0,S.Mz)([K,X],(function(e,t){return e/t})),ee=(0,S.Mz)(V,(function(e){return b.Ay.getNumberDeprecated(e,"/exec_attributes/gpu_devices/length")})),te=(0,S.Mz)([Y,X],(function(e,t){return e/t})),ne=(0,S.Mz)([$,X],(function(e,t){return e/t})),ae=(0,S.Mz)([Q,X],(function(e,t){return e/t})),se=(0,S.Mz)([function(e){return e.job.specification.specification}],(function(e){var t=b.Ay.getValue(e,"/input_table_specs");return D()(F()(t,(function(e){var t=b.Ay.getValue(e,"/chunk_specs");return F()(t,(function(e){var t=b.Ay.getValue(e,"/chunk_id"),n=F()(b.Ay.getValue(e,"/lower_limit/key"),(function(e){return b.Ay.getValue(e)})),a=[b.Ay.getValue(e,"/lower_limit/row_index")],s=n&&0!==n.length?n:a,r=F()(b.Ay.getValue(e,"/upper_limit/key"),(function(e){return b.Ay.getValue(e)})),o=[b.Ay.getValue(e,"/upper_limit/row_index")];return{id:t,from:s,to:r&&0!==r.length?r:o}}))})))})),re=(0,S.Mz)(V,(function(e){var t=[],n=e.state;return"completed"!==n&&"failed"!==n&&"aborted"!==n&&(t.push({modalKey:"abort",name:"abort",successMessage:"Job was successfully aborted. Please wait",icon:"redo",message:"Job will be immediately aborted. Are you sure you want to proceed?",confirmationText:O.e}),t.push({modalKey:"interrupt",name:"interrupt",successMessage:"Job was successfully aborted. Please wait",icon:"hand-paper",message:"Job will be immediately interrupted. Are you sure you want to proceed?",confirmationText:O.e,optionMessage:"Interruption timeout",optionValue:1e4,optionType:"input",options:[{data:{parameters:{interrupt_timeout:1e4}},value:"timeout",text:"timeout"}]})),"running"===n&&t.push({modalKey:"abandon",name:"abandon",successMessage:"Job was successfully aborted. Please wait",icon:"trash-bin",message:"Job will be aborted, but considered as completed, output data of job will be lost. Do you want to proceed?",confirmationText:O.e}),t})),oe=n(64922),ie=(0,i.A)("job-specification");function le(e){var t=e.jobID,n=(0,o.wA)(),s=(0,o.d4)((function(e){return e.job.specification})),r=s.omitNodeDirectory,i=s.omitInputTableSpecs,l=s.omitOutputTableSpecs,u=(0,a.useCallback)((function(e){n(function(e){return function(t){y.removeAllRequests(),t({type:x.Mz}),t(_(e))}}(t)),ue(e)}),[n,t]),c=(0,a.useCallback)((function(e){n(function(e){return function(t){y.removeAllRequests(),t({type:x.Bx}),t(_(e))}}(t)),ue(e)}),[n,t]),d=(0,a.useCallback)((function(e){n(function(e){return function(t){y.removeAllRequests(),t({type:x.iw}),t(_(e))}}(t)),ue(e)}),[n,t]);return(0,oe.jsxs)("div",{className:ie("toolbar"),children:[(0,oe.jsx)(p.S,{className:ie("checkbox"),size:"l",content:"Omit node directory",checked:r,onChange:u}),(0,oe.jsx)(p.S,{className:ie("checkbox"),size:"l",content:"Omit input table specs",checked:i,onChange:c}),(0,oe.jsx)(p.S,{className:ie("checkbox"),size:"l",content:"Omit output table specs",checked:l,onChange:d})]})}function ue(e){e.target.blur()}function ce(e){var t=e.className,n=e.jobID,s=(0,o.wA)(),i=(0,o.d4)((function(e){return e.job.specification})),u=i.loading,c=i.loaded,d=i.error,p=i.errorData,v=i.specification,g=(0,o.d4)(V).id;(0,a.useEffect)((function(){return s(_(n)),function(){s(C())}}),[s,n]);var j=u&&!c,b=(0,o.d4)(k.lD);return(0,oe.jsx)(r.A,{children:(0,oe.jsx)("div",{className:ie(null,t),children:(0,oe.jsx)("div",{className:ie("content",{loading:j}),children:j?(0,oe.jsx)(h.a,{}):(0,oe.jsx)(l.A,{loaded:c,error:d,errorData:p,children:(0,oe.jsx)(m.A,{folding:!0,settings:b,value:v,extraTools:(0,oe.jsxs)(f.s,{alignItems:"center",gap:2,children:[(0,oe.jsx)(N.O,{value:v,settings:b,name:"specification_job_".concat(g)}),(0,oe.jsx)(le,{jobID:n})]})})})})})})}var de=n(35074),me=function(e){return e.job.general.job.statistics},pe=n(82564),he=n(29081),fe=n(7787);function ve(){var e=(0,o.d4)(me);return(0,oe.jsx)(pe.DC,{helpUrl:(0,he.cK)()?fe.Ay.docsUrls["problems:jobstatistics"]:void 0,statistic:e,visibleColumns:["min","max","last","sum","count"]})}var ge=n(28640),je=n(65692),be=n(2211),xe=n(60620),Ae=n(27497),ye=n(26264),_e=(0,i.A)("job-breadcrumbs");function Ce(e){var t=e.id,n=e.className,i=(0,s.W5)(),l=(0,o.d4)(Ae.dB),c=(0,s.W6)(),d=(0,a.useState)(!1),m=(0,v.A)(d,2),p=m[0],h=m[1],f=(0,a.useState)(i.params.jobID),g=(0,v.A)(f,2),j=g[0],b=g[1],x=i.params.operationID,A="".concat(x,"/").concat(j),y=(0,a.useCallback)((function(){return h(!0)}),[]),_=(0,a.useCallback)((function(e){return b(e)}),[]),C=(0,a.useCallback)((function(){return h(!1)}),[]),k=(0,a.useCallback)((function(e){e.keyCode===ye.DD.ENTER&&(h(!1),c.push("/".concat(l,"/").concat(ye.YW.JOB,"/").concat(A)))}),[A,c,l]),N={onBlur:C};return(0,oe.jsx)(r.A,{children:(0,oe.jsx)("div",{className:_e(null,n),children:p?(0,oe.jsx)("div",{className:_e("input"),children:(0,oe.jsx)(je.k,(0,u.A)((0,u.A)({},N),{},{autoFocus:!0,size:"m",value:j,onUpdate:_,onKeyDown:k}))}):(0,oe.jsxs)("div",{className:_e("id"),children:[(0,oe.jsx)("span",{className:"elements-ellipsis",children:t})," ",(0,oe.jsx)(ge.A,{view:"flat-secondary",text:t,size:"m"})," ",(0,oe.jsx)(be.A,{view:"flat-secondary",size:"m",onClick:y,children:(0,oe.jsx)(xe.A,{awesome:"pencil"})})]})})})}var ke=n(80545),Ne=n(36161),we=n(65193),Se=n.n(we),Ie=n(82060),De=n(11394),Te=n(3659),Ee=(0,i.A)("job-pivot-keys"),ze=De.A,Fe=function(){return{items:{id:{name:"id",caption:"Chunk ID",align:"left"},from:{name:"from",align:"left"},to:{name:"to",align:"left"}},sets:{default:{items:["id","from","to"]}},mode:"default"}},Me=function(){var e=function(e,t){var n=Te.A.prettyprint(e[t],{break:!1,indent:0,asHTML:!1}),a=n.split(",").join(",\n");return(0,oe.jsxs)("div",{className:"unipika",children:["[",(0,oe.jsx)("span",{title:a,className:"uint64 elements-ellipsis",children:n.slice(1,-1)}),"]"]})};return{from:function(t){return e(t,"from")},to:function(t){return e(t,"to")}}};function Le(){var e=(0,o.wA)(),t=(0,o.d4)((function(e){return e.job.general})).job,n=(0,o.d4)((function(e){return e.job.specification})),s=n.loading,r=n.loaded,i=n.error,u=n.errorData,c=(0,o.d4)(se);(0,a.useEffect)((function(){return e(_(t.id)),function(){e(C())}}),[e,t.id]);var d=(0,a.useMemo)(Fe,[]),m=(0,a.useMemo)(Me,[]);return(0,oe.jsx)("div",{className:Ee({loading:s}),children:(0,oe.jsx)(l.A,{loaded:r,error:i,errorData:u,children:(0,oe.jsx)(ze,{size:"s",theme:"light",css:Ee(),virtual:!1,striped:!1,columns:d,isLoading:s,templates:m,items:c})})})}var Be=n(76426),Re=n(73822),Oe=n(78894),Pe=new A.A,Ue=new Oe.I,Ve=n(34121),We=(0,i.A)("job-competitors"),Je=De.A;function qe(e){var t=e.job,n=e.operationId,s=(0,o.d4)(Ae.dB),r=b.Ay.getValues(t,["/id","/address","/job_competition_id"]),i=(0,v.A)(r,3),l=i[0],u=i[1],c=i[2],d=Re.A.format.Address(u),m=c&&c!==l;return(0,oe.jsxs)("div",{children:[(0,oe.jsxs)("span",{className:We("id","elements-monospace elements-ellipsis"),children:[(0,oe.jsx)(ge.A,{text:l,theme:"flat-secondary",size:"s",title:"Copy job id"}),(0,oe.jsx)(Be.A,{routed:!0,url:"/".concat(s,"/job/").concat(n,"/").concat(l),theme:"primary",children:l})]}),(0,oe.jsx)("br",{}),(0,oe.jsxs)("span",{className:We("host","elements-monospace elements-ellipsis"),children:[(0,oe.jsx)(ge.A,{text:d,view:"flat-secondary",size:"s",title:"Copy host"}),d]}),m&&(0,oe.jsxs)(a.Fragment,{children:[(0,oe.jsx)("br",{}),(0,oe.jsx)("span",{className:We("speculative-job-label","elements-monospace elements-ellipsis"),children:"Speculative job"})]})]})}var He=function(){return{items:{id_address:{name:"id_address",align:"left",caption:"Id / Address",sort:!1},state:{name:"type",align:"right",sort:!0},type:{name:"type",align:"right",sort:!0}},sets:{default:{items:["id_address","type","state"]}},mode:"default"}},Ke=function(e){return{id_address:function(t){return(0,oe.jsx)(qe,{job:t,operationId:e})},state:function(e){return(0,oe.jsx)(ke.A,{label:e.state})}}};function Ye(){var e=(0,o.wA)(),t=(0,a.useCallback)((function(e){return e.id}),[]),n=(0,o.d4)((function(e){return e.job.general})).job,s=(0,o.d4)((function(e){return e.job.competitors})),i=s.loading,u=s.loaded,c=s.error,d=s.errorData,m=s.competitors,p=n.jobCompetitionId,h=n.operationId;if(!p||!h)throw new Error("Unexpected behavior: jobCompetitionId or operationId is not defined");var f=(0,a.useMemo)(He,[]),v=(0,a.useMemo)((function(){return Ke(h)}),[h]);return(0,a.useEffect)((function(){var t,n;e((t=h,n=p,function(e){return e({type:x.vm}),j().v3.listJobs({parameters:{operation_id:t,job_competition_id:n},cancellation:Pe.saveCancelToken}).then((function(t){e({type:x.vp,data:{competitors:t.jobs}})})).catch((function(t){t.code===j().codes.CANCELLED?e({type:x.Pr}):(Ue.add({theme:"danger",name:"job competitors",autoHiding:1e4,content:(null==t?void 0:t.message)||"Oops, something went wrong",title:"Failed to load job's competitors"}),e({type:x._I,data:{error:t}}))}))}))}),[e,h,p]),(0,oe.jsx)(r.A,{children:(0,oe.jsx)("div",{className:We({loading:i}),children:(0,oe.jsx)(l.A,{loaded:u,error:c,errorData:d,children:(0,oe.jsx)(Je,{size:"s",theme:"light",css:We(),virtual:!1,striped:!1,columns:f,isLoading:i,items:m,templates:v,computeKey:t,tableId:Ve.MV})})})})}var $e=n(29347),Qe=n.n($e),Xe=n(73831),Ge=n.n(Xe),Ze=(0,i.A)("job-statistics-io"),et=(0,i.A)("elements-heading"),tt=De.A,nt=function(){return{items:{table:{caption:"Table",align:"left"},busy_time:{caption:"Busy time",align:"right"},bytes:{caption:"Bytes",align:"right"},idle_time:{caption:"Idle time",align:"right"}},sets:{default:{items:["table","busy_time","bytes","idle_time"]}},mode:"default"}},at=function(){var e=function(e,t){return Re.A.format["bytes"===t?"Bytes":"TimeDuration"](e[t])};return{busy_time:function(t){return e(t,"busy_time")},bytes:function(t){return e(t,"bytes")},idle_time:function(t){return e(t,"idle_time")}}},st=(0,S.Mz)([J,G,Z,ee,te,ne,ae],(function(e,t,n,a,s,r,o){var i=e.read,l=e.write;return Qe()([{key:"total time waiting to read data",value:Re.A.format.TimeDuration(i)},{key:"total time waiting to write data",value:Re.A.format.TimeDuration(l)},Ge()(t)&&{key:"average user cpu time per second",value:Re.A.format.Number(t,{digits:3})},Ge()(n)&&{key:"average wait cpu time per second",value:Re.A.format.Number(n,{digits:3})},{key:"gpu devices",value:Re.A.format.Number(a)},Ge()(s)&&{key:"average gpu utilization",value:Re.A.format.Percent(100*s)},Ge()(r)&&{key:"average gpu power",value:Re.A.format.Number(r,{digits:3})},Ge()(o)&&{key:"average gpu memory usage",value:Re.A.format.Bytes(o)}])}));function rt(){var e=(0,o.d4)(q),t=e.input,n=e.output,s=(0,o.d4)(st),r=(0,a.useMemo)(nt,[]),i=(0,a.useMemo)((function(){return at()}),[]);return(0,oe.jsxs)("div",{className:Ze(),children:[(0,oe.jsx)(de.Ay,{className:Ze("meta"),items:s}),(0,oe.jsx)("div",{className:et({size:"m"},Ze("heading")),children:"Input"}),(0,oe.jsx)(tt,{size:"s",theme:"light",css:Ze(),items:t,virtual:!1,striped:!1,columns:r,templates:i}),n.length>0&&(0,oe.jsxs)(a.Fragment,{children:[(0,oe.jsx)("div",{className:et({size:"m"},Ze("heading")),children:"Output"}),(0,oe.jsx)(tt,{size:"s",theme:"light",css:Ze(),items:n,virtual:!1,striped:!1,columns:r,templates:i,rowClassName:function(e){return e.isTotal?Ze("row-total"):void 0}})]})]})}var ot=n(70917),it=n(70436),lt=n(62250),ut=(0,i.A)("job-details");function ct(e,t){return e?(0,oe.jsx)(it.A,{name:"Events",className:ut("events"),size:t,children:(0,oe.jsx)(ot.A,{events:e,type:"phase"})}):null}function dt(e,t){return e?(0,oe.jsx)(it.A,{collapsed:!0,name:"Competitive jobs",className:ut("speculative-jobs"),size:t,children:(0,oe.jsx)(Ye,{})}):null}function mt(e,t){return Se()(["reduce","join_reduce","sorted_merge"],e)?(0,oe.jsx)(it.A,{collapsed:!0,name:"Pivot keys",className:ut("pivot-keys"),size:t,children:(0,oe.jsx)(Le,{})}):null}function pt(){var e,t,n,a=(0,o.d4)((function(e){return e.job.general})),s=a.details,i=a.job,l=s.events;return(0,oe.jsx)(r.A,{children:(0,oe.jsxs)("div",{className:ut(),children:[(null==l?void 0:l.length)>0&&(0,oe.jsx)("div",{className:ut("section"),children:ct(s.events,lt.Y1)}),(0,oe.jsxs)("div",{className:ut("section"),children:[(n=i.error,n?(0,oe.jsx)("div",{className:ut("result"),children:(0,oe.jsx)(Ie.A,{error:n})}):null),(e=i.statistics,t=lt.Y1,b.Ay.getValue(e,"/user_job/pipes")?(0,oe.jsx)(it.A,{name:"Statistics",className:ut("statistics"),size:t,children:(0,oe.jsx)(rt,{})}):null),mt(i.type,lt.Y1),dt(Boolean(i.hasCompetitors),lt.Y1)]})]})})}var ht=n(623),ft=n.n(ht),vt=n(55695),gt=n(50073),jt=n(19845),bt=new A.A;function xt(e,t){return function(n,a){n({type:x.M1});var s=(0,Ae.Si)(a());return j().v3.getJob({parameters:{operation_id:e,job_id:t},cancellation:bt.saveCancelToken}).then((function(e){n({type:x.s8,data:{job:e,clusterConfig:s}})})).catch((function(e){e.code===j().codes.CANCELLED?n({type:x.E}):n({type:x.V3,data:{error:e}})}))}}var At=n(7313),yt=n(48971),_t=new Oe.I,Ct=(0,i.A)("job-actions"),kt=(0,i.A)("elements-code"),Nt=function(e,t,n){var a=[{action:function(){window.open(e.prepareCommandURL("get_job_input"))},text:"get_job_input"},{action:function(){window.open(e.prepareCommandURL("get_job_stderr"))},text:"get_job_stderr"}];return"failed"===e.state?a.push({action:function(){window.open(e.prepareCommandURL("get_job_fail_context"))},text:"get_job_fail_context"}):a.push({action:n,text:"dump_job_context"}),[a,[{action:t,text:"job shell"}]]},wt=function(e){var t=e.currentOption,n=e.name,a=e.id,s=function(e){return{interrupt:j().v4.abortJob,abort:j().v4.abortJob,abandon:j().v4.abandonJob}[e]}(n),r={job_id:a};return t&&(r=(0,u.A)((0,u.A)({},r),{},{interrupt_timeout:t})),s(r)},St=function(e,t,n){var a={job_id:e,path:t};return j().v3.dumpJobContext(a).then((function(){_t.add({theme:"success",autoHiding:!1,name:"dump job context",title:"Job context has been dumped.",content:(0,oe.jsx)(Be.A,{url:"/".concat(n,"/navigation?path=").concat(t),children:t})})})).catch((function(e){_t.add({theme:"danger",autoHiding:!1,name:"dump job context",title:"Could not dump job context.",content:(null==e?void 0:e.message)||"Oops, something went wrong",actions:[{label:" view",onClick:function(){return(0,yt.eW)(e)}}]})}))};function It(e){var t=(0,o.wA)(),n=e.message||(0,oe.jsxs)("span",{children:["Are you sure you want to ",(0,oe.jsx)("strong",{children:e.name})," the job?"]}),s=(0,o.d4)((function(e){return e.job.general})).job,r=s.id,i=s.operationId,l=(0,a.useCallback)((function(){setTimeout((function(){return t(xt(i,r))}),5e3)}),[t,i,r]),c=(0,a.useCallback)((function(e){return t((0,At.Jm)(e))}),[t]),d=(0,a.useCallback)((function(t){var n=t.currentOption,a=(0,u.A)((0,u.A)({},e),{},{currentOption:n,id:r});return wt(a).then(l)}),[r,e,l]),m=(0,a.useCallback)((function(){return t(c((0,u.A)((0,u.A)({},e),{},{message:n,handler:d})))}),[t,c,e,n,d]);return(0,oe.jsxs)(be.A,{size:"m",onClick:m,view:e.theme||"outlined",className:Ct("action"),title:Re.A.format.ReadableField(e.name),children:[(0,oe.jsx)(xe.A,{awesome:e.icon})," ",Re.A.format.ReadableField(e.name)]},e.name)}function Dt(e){var t=e.className,n=(0,o.d4)(V),s=(0,o.d4)((function(e){return e.job.general})).loaded,i=(0,o.d4)(Ae.dB),l=n.id,c="yt run-job-shell ".concat(l),d=(0,a.useState)(!1),m=(0,v.A)(d,2),p=m[0],h=m[1],f=(0,a.useCallback)((function(){return h(!0)}),[h]),g=(0,a.useCallback)((function(){return h(!1)}),[h]),j=(0,a.useCallback)((function(){ft()(c),g()}),[c,g]),b="//home",x=(0,a.useState)(b),A=(0,v.A)(x,2),y=A[0],_=A[1],C=(0,a.useState)(!1),k=(0,v.A)(C,2),N=k[0],w=k[1],S=(0,a.useCallback)((function(e){return _(e)}),[_]),I=(0,a.useCallback)((function(){return w(!0)}),[w]),D=(0,a.useCallback)((function(){return w(!1)}),[w]),T=(0,a.useCallback)((function(){St(l,y,i),D()}),[l,y,i,D]),E=(0,o.d4)(re),z=(0,a.useMemo)((function(){return Nt(n,f,I)}),[n,f,I]);return s?(0,oe.jsx)(r.A,{children:(0,oe.jsxs)("div",{className:Ct(null,t),children:[F()(E,(function(e,t){return(0,oe.jsx)(It,(0,u.A)({},e),t)})),(0,oe.jsx)(vt.r,{items:z}),(0,oe.jsxs)(gt.l,{size:"m",open:p,onClose:g,children:[(0,oe.jsx)(gt.l.Header,{caption:"Job shell"}),(0,oe.jsx)(gt.l.Body,{children:(0,oe.jsx)("div",{className:Ct("code"),children:(0,oe.jsx)("div",{className:kt({theme:"default"}),children:c})})}),(0,oe.jsx)(gt.l.Footer,{onClickButtonCancel:g,onClickButtonApply:j,textButtonCancel:"Cancel",textButtonApply:"Copy",showError:!1,preset:"success",listenKeyEnter:!0})]}),(0,oe.jsxs)(gt.l,{size:"m",open:N,onClose:D,children:[(0,oe.jsx)(gt.l.Header,{caption:"Dump job context"}),(0,oe.jsx)(gt.l.Body,{children:(0,oe.jsx)("div",{className:Ct("dump-context"),children:(0,oe.jsx)(jt.A,{hasClear:!0,defaultPath:b,onChange:S})})}),(0,oe.jsx)(gt.l.Footer,{onClickButtonCancel:D,onClickButtonApply:T,textButtonCancel:"Cancel",textButtonApply:"Confirm",showError:!1,preset:"success",listenKeyEnter:!0})]})]})}):null}var Tt=n(81970),Et=n(83611),zt=n(53332),Ft=n(35441),Mt=n(93209),Lt=n(42324),Bt=n(40860),Rt=(0,i.A)("job-general");function Ot(){var e,t=(0,o.d4)(Ae.dB),n=(0,s.W5)(),i=(0,o.d4)(k.cm),l=(0,o.d4)(V),p=(0,o.d4)((function(e){return e.job.general})),h=p.loaded,f=function(e){var t=e.operationId,n=e.jobId,s=e.pool_tree,r=e.has_trace,i=e.cluster,l=(0,o.d4)(Ae.jU).job_trace_url_template,u=void 0===l?{}:l,c=u.url_template,d=u.title,m=void 0===d?"Open trace":d,p=u.enforce_for_trees;return a.useMemo((function(){return(r||0<=(null==p?void 0:p.indexOf(s)))&&i&&t&&n&&c?{url:(0,Ft.j)(c,{operationId:t,jobId:n,cluster:i}),title:m}:{}}),[i,t,n,c,m,p,s,r])}({operationId:null==l?void 0:l.operationId,jobId:null==l?void 0:l.id,has_trace:null==l||null===(e=l.archive_features)||void 0===e?void 0:e.has_trace,pool_tree:null==l?void 0:l.pool_tree,cluster:t}),v=f.url,g=f.title;if(!h)return null;var j=n.url,b=n.params,A=b.operationID,y=b.jobID,_=l.operationId,C=l.attributes,w=l.finishTime,S=l.startTime,I=l.duration,D=l.address,T=l.state,E=l.type,z=l.id,F=l.jobCompetitionId,M=l.monitoring_descriptor,L=l.pool_tree,B=l.is_stale,R="/".concat(t,"/").concat(ye.YW.OPERATIONS,"/").concat(A,"/jobs?jobId=").concat(y),O="/".concat(t,"/").concat(ye.YW.JOB,"/").concat(A,"/").concat(y),P=(0,zt._4)(O,x.oz),U=F&&F!==z,W="yt --proxy ".concat(t," run-job-shell ").concat(z);return(0,oe.jsx)(r.A,{children:(0,oe.jsxs)("div",{className:Rt(null,"elements-section"),children:[(0,oe.jsxs)("div",{className:Rt("header"),children:[(0,oe.jsxs)("span",{className:Rt("heading"),children:[Re.A.format.ReadableField(E)," job"]}),(0,oe.jsx)(ke.A,{label:T,renderPlaque:!0}),(0,oe.jsx)(Dt,{className:Rt("actions")})]}),U&&(0,oe.jsx)(Tt.A,{className:Rt("speculative-label"),text:"Speculative job",theme:"warning",type:"text"}),(0,oe.jsx)(de.Ay,{className:Rt("meta"),items:[[{key:"operation id",value:(0,oe.jsx)(de.Bj.Link,{url:R,text:_,withClipboard:!0})},{key:"job id",value:(0,oe.jsx)(Ce,{id:z,className:Rt("meta-breadcrumbs")})},{key:"host",value:(0,oe.jsxs)("span",{className:Rt("meta-host"),children:[(0,oe.jsx)(de.Bj.Id,{id:null==D?void 0:D.split(":")[0]}),(0,oe.jsx)(Lt.A,{url:fe.Ay.makeUrlForNodeIO(t,D)})]})},{key:"type",value:(0,oe.jsx)(de.Bj.Value,{value:E})},{key:"Monitoring descriptor",value:(0,oe.jsxs)("span",{className:Rt("meta-host"),children:[(0,oe.jsx)(de.Bj.Id,{id:M}),(0,oe.jsx)(Lt.A,{url:fe.Ay.makeUrlForMonitoringDescriptor(t,{from:S,to:w},M)})]}),visible:Boolean(M)},{key:"Pool tree",value:L,visible:Boolean(L)}],[{key:"started",value:(0,oe.jsx)(de.Bj.Time,{time:S,valueFormat:"DateTime"})},{key:"finished",value:(0,oe.jsx)(de.Bj.Time,{time:w,valueFormat:"DateTime"})},{key:"duration",value:(0,oe.jsx)(de.Bj.Time,{time:I,valueFormat:"TimeDuration"})},{key:"Stale",value:(0,oe.jsxs)(oe.Fragment,{children:[Boolean("is_stale").toString()+" ",(0,oe.jsx)(Bt.q,{})]}),visible:B}],[{key:"job_input",value:(0,oe.jsx)(Mt.S,{onClick:function(){return window.open(l.prepareCommandURL("get_job_input"))},children:"get_job_input"})},{key:"job_error",value:(0,oe.jsx)(Mt.S,{onClick:function(){return window.open(l.prepareCommandURL("get_job_stderr"))},children:"get_job_stderr"})}].concat((0,c.A)("failed"!==(null==l?void 0:l.state)?[]:[{key:"fail_context",value:(0,oe.jsx)(Mt.S,{onClick:function(){return window.open(l.prepareCommandURL("get_job_fail_context"))},children:"get_job_fail_context"})}]),(0,c.A)(null!=l&&l.finishTime?[]:[{key:"Job ssh",value:(0,oe.jsxs)("span",{className:Rt("meta-ssh"),children:[(0,oe.jsx)("span",{className:Rt("meta-ssh-cmd"),title:W,children:W}),(0,oe.jsx)(ge.A,{view:"flat-secondary",text:W,size:"s"})]})}]),[{key:"Job trace",value:(0,oe.jsx)(d.N,{target:"_blank",href:v,children:g}),visible:Boolean(v)}])]}),(0,oe.jsx)("div",{className:Rt("tabs"),children:(0,oe.jsx)(Et.A,(0,u.A)((0,u.A)({},P),{},{active:x._N,routed:!0,size:lt.jr}))}),(0,oe.jsxs)(s.dO,{children:[(0,oe.jsx)(s.qh,{path:"".concat(O,"/").concat(x.oz.ATTRIBUTES),children:(0,oe.jsx)(m.A,{className:Rt("attributes"),value:C,settings:i,folding:!0,extraTools:(0,oe.jsx)(N.O,{value:C,settings:i,name:"attributes_job_".concat(z)})})}),(0,oe.jsx)(s.qh,{path:"".concat(O,"/").concat(x.oz.DETAILS),children:(0,oe.jsx)(pt,{})}),(0,oe.jsx)(s.qh,{path:"".concat(O,"/").concat(x.oz.STATISTICS),children:(0,oe.jsx)(ve,{})}),(0,oe.jsx)(s.qh,{path:"".concat(O,"/").concat(x.oz.SPECIFICATION),children:(0,oe.jsx)(ce,{className:Rt("specification"),jobID:y})}),(0,oe.jsx)(s.qh,{path:"".concat(O,"/:tab"),children:(0,oe.jsx)(Ne.A,{})}),(0,oe.jsx)(s.rd,{from:j,to:"".concat(O,"/").concat(x._N)})]})]})})}var Pt=n(13685),Ut=(0,i.A)("job-detail");function Vt(){var e=(0,s.W5)(),t=(0,o.wA)(),n=e.params,i=n.operationID,u=n.jobID,c=(0,o.d4)((function(e){return e.job.general})),d=c.loading,m=c.loaded,p=c.error,f=c.errorData,v=d&&!m,g=a.useMemo((function(){return{updateFn:function(){return t(xt(i,u))},destructFn:function(){return t((function(e){bt.removeAllRequests(),e({type:x.E})}))}}}),[t,i,u]),j=g.updateFn,b=g.destructFn;return(0,Pt.Tt)(j,{destructFn:b}),(0,oe.jsx)(r.A,{children:(0,oe.jsx)("div",{className:Ut(),children:(0,oe.jsx)("div",{className:Ut("content",{loading:v}),children:v?(0,oe.jsx)(h.a,{}):(0,oe.jsx)(l.A,{loaded:m,error:p,errorData:f,children:(0,oe.jsx)(Ot,{})})})})})}function Wt(){var e=(0,s.W5)();return(0,oe.jsx)("div",{className:"elements-main-section",children:(0,oe.jsx)(r.A,{children:(0,oe.jsx)(s.dO,{children:(0,oe.jsx)(s.qh,{path:"".concat(e.path,"/:operationID/:jobID"),children:(0,oe.jsx)(Vt,{})})})})})}},36554:(e,t,n)=>{n.d(t,{$A:()=>h,$F:()=>g,DC:()=>b,F_:()=>j,_X:()=>f,aA:()=>v,c5:()=>x,nH:()=>p});var a=n(49214),s=n.n(a),r=n(27528),o=n.n(r),i=n(63281),l=n.n(i),u=n(3659),c=n(29746),d=n(76365),m=n(64714),p=new d.A;function h(e){return c.Ay.YPath.create(e,"absolute").toSubpath(-2).stringify()}function f(e,t){var n=h(e);return m.Qq.list(m.Vu.pathEditorLoadSuggestions,{parameters:{path:n,attributes:["type","dynamic"]},cancellation:p.saveCancelToken}).then(c.Ay.getValue).then((function(e){return function(e,t,n){var a=o()(n,(function(e){var n={};return n.parentPath=t,n.childPath="/"+u.A.decode(c.Ay.getValue(e)),n.path=n.parentPath+n.childPath,n.type=c.Ay.getValue(e,"/@type"),n.dynamic=c.Ay.getValue(e,"/@dynamic"),n.targetPathBroken=c.Ay.getValue(e,"/@broken"),n}));return l()(a,"childPath")}(0,n,e)})).then((function(e){return t?t(e):e}))}function v(e,t){var n=e.toLowerCase();return s()(t,(function(e){var t=e.path.startsWith(n),a=e.path!==n||"map_node"===e.type;return t&&a}))}function g(e,t){return-1===t||t===e.length-1?0:t+1}function j(e,t){return-1===t||0===t?e.length-1:t-1}function b(e){return"map_node"===e.type?e.path+"/":e.path}function x(e,t){var n={document:"file-alt",string_node:"file-alt",int64_node:"file-alt",uint64_node:"file-alt",double_node:"file-alt",boolean_node:"file-alt",map_node:"folder",scheduler_pool_tree_map:"folder-tree",scheduler_pool:"tasks",tablet_cell:"th",journal:"book",table:"th",table_dynamic:"dyn-th",replicated_table:"th",chaos_replicated_table:"chaos-replicated-table",replication_log_table:"replication-log-table",file:"file",topmost_transaction_map:"folder",transaction_map:"folder",transaction:"code-branch",nested_transaction:"code-branch",link:c.Ay.getBoolean(t)?"unlink":"link",rootstock:"link",portal_entrance:"link",cell_node:"circle",cell_node_map:"far circle",sys_node:"cog",access_control_object_namespace_map:"acl-namespace-map",access_control_object_namespace:"acl-namespace",access_control_object:"acl-object"};return e?n[e]||"not-suported":"eye-slash"}},39702:(e,t,n)=>{n.d(t,{A:()=>r});var a=n(40319),s=n(64922);const r=function(e){return(0,s.jsx)("svg",(0,a.A)((0,a.A)({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 16 16"},e),{},{children:(0,s.jsx)("path",{fill:"currentColor",fillRule:"evenodd",d:"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0",clipRule:"evenodd"})}))}}}]);
2
+ //# sourceMappingURL=job.ea2ba82d.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/job.ea2ba82d.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/ErrorMessage/ErrorMessage.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevrons-right.svg","webpack://@ytsaurus/ui/./src/ui/components/ExpandButton/ExpandButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/Toolbar.tsx","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/get-min-width.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/prepare-statistic.ts.ts","webpack://@ytsaurus/ui/./src/ui/components/StatisticTable/StatisticTable.tsx","webpack://@ytsaurus/ui/./src/ui/components/templates/utils.js","webpack://@ytsaurus/ui/./src/ui/containers/PathEditor/PathEditor.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/path-editor/path-editor.js","webpack://@ytsaurus/ui/./src/ui/store/actions/job/specification.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/job/detail.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Specification/Specification.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/job/statistics.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Statistics/Statistics.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/JobBreadcrumbs/JobBreadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/PivotKeys/PivotKeys.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/job/competitors.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Speculative/Speculative.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/StatisticsIO/StatisticsIO.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/tabs/Details/Details.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/job/general.ts","webpack://@ytsaurus/ui/./src/ui/pages/job/JobActions/JobActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/JobGeneral/JobGeneral.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/JobDetails/JobDetails.tsx","webpack://@ytsaurus/ui/./src/ui/pages/job/Job.tsx","webpack://@ytsaurus/ui/./src/ui/utils/navigation/path-editor.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/chevron-right.svg"],"sourcesContent":["import React from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nexport interface AttributesButtonProps extends ButtonProps {}\n\nexport default function AttributesButton({\n view = 'flat-secondary',\n size = 'm',\n ...rest\n}: AttributesButtonProps) {\n return (\n <Button view={view} size={size} {...rest}>\n <Icon awesome=\"at\" />\n </Button>\n );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport Icon from '../Icon/Icon';\n\nimport './ErrorMessage.scss';\n\nconst b = block('error-message');\n\nfunction ErrorMessage({message, className}) {\n return (\n <div className={b(null, className)}>\n <Icon awesome=\"exclamation-circle\" />\n\n <span className={b('message-text')}>{message}</span>\n </div>\n );\n}\n\nErrorMessage.propTypes = {\n message: PropTypes.string.isRequired,\n className: PropTypes.string,\n};\n\nexport default ErrorMessage;\n","const SvgChevronsRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.47 10.97a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L6.44 8zm5 0a.75.75 0 1 0 1.06 1.06l3.5-3.5a.75.75 0 0 0 0-1.06l-3.5-3.5a.75.75 0 0 0-1.06 1.06L11.44 8z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronsRight;","import React, {FC} from 'react';\nimport {Button, ButtonProps, Icon} from '@gravity-ui/uikit';\nimport shevronRightSvg from '@gravity-ui/icons/svgs/chevron-right.svg';\nimport doubleShevronRightSvg from '@gravity-ui/icons/svgs/chevrons-right.svg';\nimport cn from 'bem-cn-lite';\nimport './ExpandButton.scss';\n\nconst block = cn('yt-expanded-button');\n\ntype Props = {\n className?: string;\n expanded: boolean;\n toggleExpanded: () => void;\n inline?: boolean;\n all?: boolean;\n showText?: boolean;\n qa?: ButtonProps['qa'];\n};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\n qa,\n}) => {\n const titleExpanded = all ? 'Collapse All' : 'Collapse';\n const titleCollapsed = all ? 'Expand All' : 'Expand';\n return (\n <Button\n className={block({inline}, className)}\n view=\"flat-secondary\"\n title={expanded ? titleExpanded : titleCollapsed}\n onClick={toggleExpanded}\n qa={qa}\n >\n {showText && (expanded ? titleExpanded : titleCollapsed) + ' '}\n <Icon\n className={block('expand', {expanded})}\n data={all ? doubleShevronRightSvg : shevronRightSvg}\n size={16}\n />\n </Button>\n );\n};\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React, {useCallback} from 'react';\nimport {useDispatch} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Filter from '../Filter/Filter';\nimport HelpLink from '../HelpLink/HelpLink';\n\nimport {ExpandButton} from '../ExpandButton';\nimport {TreeState} from './types';\n\nconst toolbarBlock = cn('elements-toolbar');\n\nconst block = cn('job-statistics');\n\nexport default function Toolbar(props: {\n helpUrl?: string;\n treeState: TreeState;\n onFilterChange: (value: string) => void;\n onTreeStateChange: (state: TreeState) => void;\n}) {\n const collapseTable = React.useCallback(\n () => props.onTreeStateChange('collapsed'),\n [props.onTreeStateChange],\n );\n const expandTable = React.useCallback(\n () => props.onTreeStateChange('expanded'),\n [props.onTreeStateChange],\n );\n\n const dispatch = useDispatch();\n\n const handleFilterChange = useCallback(\n (val: string) => dispatch(props.onFilterChange(val)),\n [dispatch],\n );\n\n const isExpanded = props.treeState === 'expanded' || props.treeState === 'mixed';\n\n return (\n <div className={toolbarBlock(null, block('toolbar'))}>\n <div className={toolbarBlock('container')}>\n <div className={toolbarBlock('component', block('filter'))}>\n <Filter size=\"m\" debounce={500} value={''} onChange={handleFilterChange} />\n </div>\n <div className={toolbarBlock('component', block('expand-collapse'))}>\n <span className={block('expand-metrics')}>\n <ExpandButton\n expanded={isExpanded}\n toggleExpanded={isExpanded ? collapseTable : expandTable}\n />\n </span>\n </div>\n {props.helpUrl && (\n <div className={toolbarBlock('component', block('help'))}>\n <HelpLink url={props.helpUrl} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","import {LEVEL_OFFSET} from './StatisticTable';\n\nexport function createCanvasContext(font: string) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n ctx!.font = font;\n return ctx!;\n}\n\nexport function mesureRowWidth(ctx: CanvasRenderingContext2D, text = '') {\n const {width} = ctx.measureText(text);\n return Math.max(1, Math.ceil(width));\n}\n\nexport const getMinWidth = (items: any[], fontFamilies: {regular: string; monospace: string}) => {\n let res = 300;\n const ctx = createCanvasContext(\n `14px / 20.02px \"${fontFamilies.regular}\", \"Helvetica Neue\", Arial, Helvetica, sans-serif`,\n );\n\n for (const item of items) {\n const iconsWidth = item.isLeafNode ? 20 : 20 * 2;\n const width = mesureRowWidth(ctx, item.attributes.name);\n res = Math.max(res, width + iconsWidth + item.level * LEVEL_OFFSET);\n }\n return Math.round(res * 1.05);\n};\n","import forEach_ from 'lodash/forEach';\nimport values_ from 'lodash/values';\n\nimport hammer from '../../common/hammer';\nimport {\n MetricsEntry,\n MetricsEntryLeaf,\n MetricsList,\n Statistic,\n StatisticTree,\n StatisticTreeInner,\n} from './types';\n\nconst TREE_ROOT_NAME = '<Root>';\n\nfunction createMetricsEntry(prefix: string, name: string): MetricsEntry {\n return {\n name: name,\n prefix: prefix,\n path: prefix + '/' + name,\n };\n}\n\nfunction createMetricsEntryLeaf(\n prefix: string,\n name: string,\n statistics: Statistic,\n): MetricsEntryLeaf {\n const entry: Partial<MetricsEntryLeaf> = createMetricsEntry(prefix, name);\n entry.value = statistics;\n\n return entry as MetricsEntryLeaf;\n}\n\nfunction prepareMetricsList(\n statistics: object,\n list?: MetricsList,\n prefix: string = TREE_ROOT_NAME,\n): MetricsList {\n let preparedList: MetricsList = list || {children: {}, leaves: {}};\n\n forEach_(statistics, (statistic: object | Statistic, name: string) => {\n if (typeof values_(statistic)[0] === 'object') {\n const metricsChild: MetricsEntry = createMetricsEntry(prefix, name);\n\n preparedList.children[metricsChild.path] = metricsChild;\n\n preparedList = prepareMetricsList(statistic, preparedList, metricsChild.path);\n } else {\n const metricsLeaf: MetricsEntryLeaf = createMetricsEntryLeaf(\n prefix,\n name,\n statistic as Statistic,\n );\n\n preparedList.leaves[metricsLeaf.path] = metricsLeaf;\n }\n });\n\n return preparedList;\n}\n\nexport function prepareMetricsTree(statistics: StatisticTree): StatisticTreeInner {\n const metricsList: MetricsList = prepareMetricsList(statistics);\n\n let metricsTree = hammer.treeList.prepareTree(\n metricsList.children,\n (entry: MetricsEntry) => entry.prefix,\n );\n\n metricsTree = hammer.treeList.attachTreeLeaves(\n metricsTree,\n metricsList.leaves,\n (leafEntry: MetricsEntryLeaf) => leafEntry.prefix,\n );\n\n return metricsTree[TREE_ROOT_NAME];\n}\n\nexport function filterStatisticTree(tree?: StatisticTreeInner, currentFilter = '') {\n if (!tree) {\n return [];\n }\n\n const filteredTree = hammer.treeList.filterTree(\n tree,\n (entry: MetricsEntry) => entry.name.indexOf(currentFilter) !== -1,\n true,\n );\n\n const sortedTree = hammer.treeList.sortTree(\n filteredTree,\n {field: 'name', asc: true},\n {\n name: {\n get: function (entry: MetricsEntry) {\n return entry.name;\n },\n },\n },\n );\n\n return hammer.treeList.flattenTree(sortedTree);\n}\n\nexport const prepareStatisticTs = (statistic: StatisticTree) => {\n return prepareMetricsTree(statistic);\n};\n","import * as React from 'react';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../Icon/Icon';\nimport hammer from '../../common/hammer';\nimport ErrorBoundary from '../ErrorBoundary/ErrorBoundary';\nimport ElementsTableRow from '../ElementsTable/ElementsTable';\nimport {getFontFamilies} from '../../store/selectors/global/fonts';\n\nimport Toolbar from './Toolbar';\nimport {getMinWidth} from './get-min-width';\nimport {filterStatisticTree, prepareStatisticTs} from './prepare-statistic.ts';\nimport {Statistic, StatisticTree, TreeState} from './types';\nimport {ExpandButton} from '../ExpandButton';\n\nimport './Statistics.scss';\n\nconst block = cn('job-statistics');\n\nexport const LEVEL_OFFSET = 40;\n\ninterface TreeItem {\n name: string;\n level: number;\n attributes: {\n name: string;\n path: string;\n prefix: string;\n value?: Statistic;\n };\n isLeafNode?: boolean;\n}\n\ninterface AvgProps {\n item: TreeItem;\n}\n\nfunction Avg({item}: AvgProps) {\n const statistic: Statistic = item.attributes.value as Statistic;\n\n if (statistic && statistic.count && statistic.sum) {\n const result: number = statistic.sum / statistic.count;\n\n if (result < 1) {\n return hammer.format['Number'](result, {significantDigits: 6});\n } else {\n return hammer.format.Number(result);\n }\n }\n\n return hammer.format.NO_VALUE;\n}\n\ninterface StatisticProps {\n item: TreeItem;\n aggregation: 'avg' | 'min' | 'max' | 'sum' | 'count' | 'last';\n}\n\nfunction StatisticTableStaticCell({item, aggregation}: StatisticProps) {\n if (item.isLeafNode && Boolean(item.attributes.value)) {\n if (aggregation === 'avg') {\n return <Avg item={item} />;\n } else {\n return hammer.format['Number'](item.attributes?.value?.[aggregation]);\n }\n }\n\n return hammer.format.NO_VALUE;\n}\n\ninterface ItemState {\n empty: boolean;\n collapsed: boolean;\n visible: boolean;\n}\n\ninterface MetricProps {\n item: TreeItem;\n itemState: ItemState;\n toggleItemState: Function;\n renderValue: (item: TreeItem) => React.ReactChild;\n minWidth?: number;\n}\n\nexport function ExpandedCell({\n item,\n itemState,\n toggleItemState,\n minWidth = undefined,\n renderValue,\n}: MetricProps) {\n const offsetStyle = React.useMemo(() => {\n return {minWidth, paddingLeft: (item?.level || 0) * LEVEL_OFFSET};\n }, [item.level, minWidth]);\n\n const toggleItemAndTreeState = React.useCallback(() => {\n if (!itemState.empty) {\n toggleItemState();\n }\n }, [itemState, toggleItemState]);\n\n if (item.isLeafNode) {\n return (\n <span className={block('metric')} style={offsetStyle}>\n <Icon awesome=\"chart-line\" className={block('metric-icon')} />\n\n <span>{renderValue(item)}</span>\n </span>\n );\n } else {\n return (\n <span className={block('group')} style={offsetStyle} onClick={toggleItemAndTreeState}>\n <ExpandButton\n expanded={!(itemState.collapsed || itemState.empty)}\n toggleExpanded={() => {}}\n />\n <Icon\n awesome={itemState.collapsed || itemState.empty ? 'folder' : 'folder-open'}\n className={block('group-icon')}\n />\n <span>{renderValue(item)}</span>\n </span>\n );\n }\n}\n\ntype StatisticTableTemplate<Item extends Partial<TreeItem>> = {\n [name: string]: (\n item: Item,\n colName: string,\n toggleItemState: Function,\n itemState: ItemState,\n ) => React.ReactChild | null;\n};\n\ntype ColumnName = 'avg' | 'min' | 'max' | 'sum' | 'count' | 'last';\ntype VisibleColumns = Array<ColumnName>;\n\nconst prepareTableProps = ({visibleColumns}: {visibleColumns: VisibleColumns}) => {\n const columns = visibleColumns.reduce(\n (ret, col) => {\n ret[col] = {\n sort: false,\n align: 'right',\n };\n\n return ret;\n },\n {\n name: {\n sort: false,\n align: 'left',\n },\n } as Record<ColumnName | 'name', {sort: boolean; align: 'left' | 'right'}>,\n );\n\n return {\n theme: 'light',\n size: 's',\n striped: false,\n computeKey(item: TreeItem) {\n return item.name;\n },\n tree: true,\n columns: {\n sets: {\n default: {\n items: Object.keys(columns),\n },\n },\n items: columns,\n mode: 'default',\n },\n };\n};\n\nconst useJobStatisticTable = ({\n statistic,\n fontFamilies,\n}: {\n statistic: StatisticTree;\n fontFamilies: {regular: string; monospace: string};\n}) => {\n const [filter, setFilter] = React.useState('');\n const [treeState, setTreeState] = React.useState<TreeState>('expanded');\n\n const tree = React.useMemo(() => prepareStatisticTs(statistic), [statistic]);\n const items = React.useMemo(() => filterStatisticTree(tree, filter), [tree, filter]);\n const minWidth = React.useMemo(() => getMinWidth(items, fontFamilies), [fontFamilies, items]);\n const onFilterChange = (value: string) => setFilter(value);\n\n return {\n minWidth,\n items,\n treeState,\n setTreeState,\n onFilterChange,\n };\n};\n\nexport function StatisticTable({\n helpUrl,\n virtual,\n visibleColumns,\n fixedHeader,\n statistic,\n}: {\n helpUrl?: string;\n virtual?: boolean;\n fixedHeader?: boolean;\n statistic: StatisticTree;\n visibleColumns: Array<'avg' | 'min' | 'max' | 'sum' | 'count' | 'last'>;\n}) {\n const fontFamilies = useSelector(getFontFamilies);\n const {items, minWidth, treeState, setTreeState, onFilterChange} = useJobStatisticTable({\n statistic,\n fontFamilies,\n });\n\n const templates = React.useMemo(\n () =>\n ({\n name(item, _, toggleItemState, itemState) {\n return (\n <ExpandedCell\n item={item}\n minWidth={minWidth}\n toggleItemState={toggleItemState}\n itemState={itemState}\n renderValue={(item) => item?.attributes?.name}\n />\n );\n },\n __default__(item, columnName: ColumnName) {\n if (item.isLeafNode) {\n return <StatisticTableStaticCell item={item} aggregation={columnName} />;\n }\n\n return null;\n },\n }) as StatisticTableTemplate<TreeItem>,\n [minWidth],\n );\n const tableProps = React.useMemo(() => {\n return prepareTableProps({\n visibleColumns,\n });\n }, [...visibleColumns]);\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <Toolbar\n helpUrl={helpUrl}\n onFilterChange={onFilterChange}\n onTreeStateChange={setTreeState}\n treeState={treeState}\n />\n <div className={block('table-container')}>\n <ElementsTableRow\n {...tableProps}\n virtual={virtual}\n treeState={treeState}\n templates={templates}\n items={items}\n css={block()}\n headerClassName={block('header', {fixed: fixedHeader})}\n />\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport unipika from '../../common/thor/unipika';\nimport block from 'bem-cn-lite';\n\nimport Link from '../../components/Link/Link';\n\nimport hammer from '../../common/hammer';\nimport {showErrorPopup} from '../../utils/utils';\n\nimport './utils.scss';\n\nfunction wrapRenderMethods(templates) {\n return Object.keys(templates).reduce((newTemplates, key) => {\n newTemplates[key] = templates[key];\n\n return newTemplates;\n }, {});\n}\n\n/**\n * Template must be a scoped function, because they are bound to elements-table component instance\n * @param {ViewModel} item\n * @param {String} columnName\n */\nfunction defaultTemplate(item, columnName) {\n return String(hammer.format['ValueOrDefault'](item[columnName]));\n}\n\nfunction prepareTextProps(text, asHTML) {\n const props = {};\n\n if (asHTML) {\n // Need to render html strings\n props.dangerouslySetInnerHTML = {__html: text};\n } else {\n props.children = unipika.decode(String(text));\n }\n\n return props;\n}\n\nexport function renderText(text, settings = {}) {\n let className = block('elements-text');\n\n if (settings.mix) {\n className = className(\n false,\n block(settings.mix.block)(settings.mix.elem, {\n ...settings.mix.mods,\n }),\n );\n } else {\n className = className();\n }\n\n const textProps = prepareTextProps(text, settings.asHTML);\n\n const title = settings.title || text;\n\n return <span {...textProps} title={title} className={className} />;\n}\n\nexport function printColumnAsBytes(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Bytes'](column.get(item));\n}\n\nexport function printColumnAsNumber(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['Number'](column.get(item));\n}\n\nexport function printColumnAsTimeDurationWithMs(item, columnName) {\n const column = this.getColumn(columnName);\n return hammer.format['TimeDuration'](column.get(item), {\n format: 'milliseconds',\n });\n}\n\nexport function printColumnAsReadableField(item, columnName) {\n const column = this.getColumn(columnName);\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['ReadableField'](column.get(item))}\n </span>\n );\n}\n\nexport function printColumnAsTime(item, columnName) {\n const value = this?.getColumn ? this.getColumn(columnName).get(item) : item[columnName];\n return <ColumnAsTime value={value} />;\n}\n\nexport function ColumnAsTime({value}) {\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['DateTime'](value, {format: 'full'})}\n </span>\n );\n}\n\nexport function printColumnAsError(error) {\n const showError = () => {\n showErrorPopup(error, {hideOopsMsg: true});\n };\n return typeof error === 'object' ? (\n <Link theme=\"ghost\" onClick={showError}>\n View\n </Link>\n ) : (\n hammer.format.NO_VALUE\n );\n}\n\n// Using prepared table data\nexport function asBytes(item, columnName) {\n return hammer.format['Bytes'](item[columnName]);\n}\n\nexport function asNumber(item, columnName) {\n return hammer.format['Number'](item[columnName]);\n}\n\nexport default {\n __default__: defaultTemplate,\n _templates: {},\n add: function (templateId, templates) {\n this._templates[templateId] = wrapRenderMethods(templates);\n },\n get: function (templateId) {\n return this._templates[templateId] || {};\n },\n};\n","import React, {Component, FocusEvent, Key, KeyboardEvent, MouseEvent} from 'react';\nimport {connect} from 'react-redux';\nimport ReactList from 'react-list';\nimport block from 'bem-cn-lite';\nimport key from 'hotkeys-js';\n\nimport debounce_ from 'lodash/debounce';\nimport find_ from 'lodash/find';\nimport isEmpty_ from 'lodash/isEmpty';\n\nimport {Popup, TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport ErrorMessage from '../../components/ErrorMessage/ErrorMessage';\n\nimport {\n filterByCurrentPath,\n getCompletedPath,\n getIconNameForType,\n getNextSelectedIndex,\n getPrevSelectedIndex,\n} from '../../utils/navigation/path-editor';\nimport {\n loadSuggestionsList,\n removeActiveRequests,\n} from '../../store/actions/navigation/path-editor/path-editor';\nimport {RootState} from '../../store/reducers';\nimport {KeyCode} from '../../constants/index';\n\nimport './PathEditor.scss';\n\ninterface Suggestion {\n parentPath: string;\n childPath: string;\n path: string;\n targetPathBroken?: boolean;\n type?: string;\n dynamic?: unknown;\n}\n\ntype SuggestionFilter = (suggestions: Suggestion[]) => Suggestion[];\n\nexport interface EventPayload {\n path: string;\n}\n\nexport interface PathEditorProps {\n suggestions: Suggestion[];\n suggestionsError?: boolean;\n errorMessage?: string;\n loadSuggestionsList: (path: string, customFilter?: SuggestionFilter) => void;\n removeActiveRequests: () => void;\n // from parent component\n className?: string;\n placeholder?: string;\n defaultPath?: string;\n disabled?: boolean;\n autoFocus?: boolean;\n hasClear?: boolean;\n showErrors?: boolean;\n customFilter?: SuggestionFilter;\n onChange?: (newPath: string) => void;\n onFocus?: (e: FocusEvent<HTMLInputElement>, payload: EventPayload) => void;\n onBlur?: (path: string) => void;\n onApply?: (newPath: string) => void;\n onCancel?: () => void;\n}\n\ninterface PathEditorState {\n path: string;\n actualSuggestions: Suggestion[];\n inputFocus: boolean;\n inputChange: boolean;\n selectedIndex: number;\n}\n\nconst debounceTime = 300;\nconst b = block('path-editor');\n\nexport class PathEditor extends Component<PathEditorProps, PathEditorState> {\n static defaultProps: Partial<PathEditorProps> = {\n errorMessage: 'Oops, something went wrong',\n placeholder: 'Enter the path...',\n suggestionsError: false,\n autoFocus: false,\n showErrors: true,\n defaultPath: undefined,\n disabled: false,\n hasClear: false,\n };\n\n static getDerivedStateFromProps(props: PathEditorProps, state: PathEditorState) {\n const res = {};\n if (state.inputFocus && state.inputChange) {\n Object.assign(res, {\n actualSuggestions: props.suggestions.length\n ? filterByCurrentPath(state.path, props.suggestions)\n : [],\n });\n }\n\n if (state.path === undefined && props.defaultPath !== undefined) {\n Object.assign(res, {\n path: props.defaultPath,\n });\n }\n\n return isEmpty_(res) ? null : res;\n }\n\n state: PathEditorState;\n\n private suggestionsList = React.createRef<HTMLDivElement>();\n private input = React.createRef<HTMLInputElement>();\n private prevScope = '';\n\n constructor(props: PathEditorProps) {\n super(props);\n\n this.debounceLoading = debounce_(this.debounceLoading, debounceTime);\n\n this.state = {\n path: props.defaultPath ?? '',\n actualSuggestions: [],\n inputFocus: false,\n inputChange: false,\n selectedIndex: -1,\n };\n }\n\n componentDidMount() {\n const {loadSuggestionsList, customFilter, autoFocus} = this.props;\n const {path} = this.state;\n\n this.prevScope = key.getScope();\n if (path) {\n loadSuggestionsList(path, customFilter);\n }\n if (autoFocus) {\n this._setFocus();\n }\n }\n\n componentDidUpdate(prevProps: PathEditorProps) {\n if (prevProps.disabled && !this.props.disabled && this.input.current) {\n this._setFocus();\n }\n }\n\n componentWillUnmount() {\n this.props.removeActiveRequests();\n }\n\n _setFocus() {\n this.input.current?.focus();\n }\n\n get inputWidth() {\n // Is there a way to avoid using private _control property?\n return this.input.current && this.input.current.offsetWidth - 2;\n }\n\n /**\n * @deprecated Please replace usages of it to direct call.\\\n * For example: use `onFocus?.(event, payload)` instead `callCallback(onFocus, [event, payload])`.\\\n * Also, pass event as first agument of callback.\n */\n callCallback<T extends unknown[] = unknown[]>(\n cb: undefined | ((...args: T) => unknown),\n ...params: T\n ) {\n if (typeof cb === 'function') {\n return cb(...params);\n }\n\n return undefined;\n }\n\n debounceLoading(path: string) {\n const {loadSuggestionsList, customFilter, onChange} = this.props;\n\n loadSuggestionsList(path, customFilter);\n this.callCallback(onChange, path);\n }\n\n hideSuggestions = () => {\n this.setState({inputFocus: false, selectedIndex: -1});\n };\n\n selectPrevSuggestion() {\n const {selectedIndex, actualSuggestions} = this.state;\n\n const prevIndex = getPrevSelectedIndex(actualSuggestions, selectedIndex);\n this.setState({selectedIndex: prevIndex});\n }\n\n selectNextSuggestion() {\n const {selectedIndex, actualSuggestions} = this.state;\n\n const nextIndex = getNextSelectedIndex(actualSuggestions, selectedIndex);\n this.setState({selectedIndex: nextIndex});\n }\n\n handleInputChange = (path: string) => {\n this.setState({path, selectedIndex: -1, inputChange: true});\n this.debounceLoading(path);\n };\n\n handleInputFocus = (e: FocusEvent<HTMLInputElement>) => {\n const {onFocus} = this.props;\n const {path} = this.state;\n\n key.setScope('path-editor');\n this.setState({inputFocus: true});\n onFocus?.(e, {path});\n };\n\n handleInputBlur = () => {\n const {onBlur} = this.props;\n const {path} = this.state;\n\n key.setScope(this.prevScope);\n this.hideSuggestions();\n this.callCallback(onBlur, path);\n };\n\n handleEnterClick(event: KeyboardEvent<HTMLInputElement>) {\n event.preventDefault();\n\n const {selectedIndex, actualSuggestions} = this.state;\n const {onApply} = this.props;\n const inputPath = event.currentTarget.value;\n\n if (selectedIndex === -1) {\n this.setState({path: inputPath, selectedIndex: -1});\n this.callCallback(onApply, inputPath);\n } else {\n const suggestion = find_(actualSuggestions, (_, index) => index === selectedIndex);\n const completedPath = getCompletedPath(suggestion);\n\n this.handleInputChange(completedPath);\n }\n }\n\n handleEscClick() {\n const {onCancel} = this.props;\n\n this.input.current?.blur();\n this.callCallback(onCancel);\n }\n\n handleTabClick(event: KeyboardEvent<HTMLInputElement>) {\n event.preventDefault();\n const {actualSuggestions} = this.state;\n\n if (actualSuggestions.length === 1) {\n const completedPath = getCompletedPath(actualSuggestions[0]);\n\n this.handleInputChange(completedPath);\n } else if (actualSuggestions.length > 1) {\n this.selectNextSuggestion();\n }\n }\n\n handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n const key = event.keyCode;\n\n switch (key) {\n case KeyCode.ARROW_DOWN:\n this.selectNextSuggestion();\n break;\n case KeyCode.ARROW_UP:\n this.selectPrevSuggestion();\n break;\n case KeyCode.ENTER:\n this.handleEnterClick(event);\n break;\n case KeyCode.ESCAPE:\n this.handleEscClick();\n break;\n case KeyCode.TAB:\n this.handleTabClick(event);\n break;\n }\n };\n\n renderInput() {\n const {placeholder, autoFocus, hasClear, disabled} = this.props;\n const {path} = this.state;\n\n return (\n <TextInput\n onKeyDown={this.handleKeyDown}\n onUpdate={this.handleInputChange}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n placeholder={placeholder}\n hasClear={hasClear}\n autoFocus={autoFocus}\n disabled={disabled}\n controlRef={this.input}\n value={path}\n />\n );\n }\n\n renderItem = (index: number, key: Key) => {\n const {selectedIndex, actualSuggestions} = this.state;\n\n const item = actualSuggestions[index];\n const {type, dynamic} = item;\n const iconType = type === 'table' && dynamic ? 'table_dynamic' : type;\n const completedPath = getCompletedPath(item);\n const isSelected = index === selectedIndex ? 'yes' : 'no';\n const iconName = getIconNameForType(iconType, item.targetPathBroken);\n\n const mouseDownHandler = (event: MouseEvent<HTMLDivElement>) => {\n this.handleInputChange(completedPath);\n event.preventDefault();\n };\n\n return (\n <div\n key={key}\n onMouseDown={mouseDownHandler}\n className={b('item', {selected: isSelected})}\n >\n <Icon awesome={iconName} />\n\n <span className={b('item-path')}>{item.path}</span>\n </div>\n );\n };\n\n renderSuggestions() {\n const {actualSuggestions} = this.state;\n\n return actualSuggestions.length ? (\n <ReactList\n itemRenderer={this.renderItem}\n length={actualSuggestions.length}\n type=\"simple\"\n />\n ) : null;\n }\n\n renderError() {\n const {errorMessage} = this.props;\n\n if (!errorMessage) {\n return;\n }\n\n return <ErrorMessage className={b('item', {error: true})} message={errorMessage} />;\n }\n\n renderPopup() {\n const {suggestionsError, showErrors} = this.props;\n const {actualSuggestions, inputFocus} = this.state;\n\n const width = this.inputWidth || 0;\n const isVisible = Boolean(\n (actualSuggestions.length || (suggestionsError && showErrors)) && inputFocus,\n );\n const content =\n suggestionsError && showErrors ? this.renderError() : this.renderSuggestions();\n\n return (\n <Popup\n className={b('popup')}\n placement={['bottom-start', 'top-start']}\n onClose={this.hideSuggestions}\n anchorRef={this.input}\n open={isVisible}\n offset={[0, 0]}\n >\n <div className={b('items')} style={{width}} ref={this.suggestionsList}>\n {content}\n </div>\n </Popup>\n );\n }\n\n render() {\n return (\n <div className={b(null, this.props.className)}>\n {this.renderInput()}\n {this.renderPopup()}\n </div>\n );\n }\n}\n\nconst mapStateToProps = ({navigation}: RootState) => ({\n suggestions: navigation.pathEditor.suggestions,\n suggestionsError: navigation.pathEditor.suggestionsError,\n errorMessage: navigation.pathEditor.errorMessage,\n});\n\nexport default connect(mapStateToProps, {\n loadSuggestionsList,\n removeActiveRequests,\n})(PathEditor);\n","import {FETCH_SUGGESTIONS} from '../../../../constants/navigation/path-editor';\nimport {\n loadSuggestions,\n pathEditorRequests,\n preparePath,\n} from '../../../../utils/navigation/path-editor';\n\nexport function loadSuggestionsList(path, customFilter) {\n return (dispatch, getState) => {\n const {suggestionsPath, suggestionsLoaded} = getState().navigation.pathEditor;\n let currentParentPath;\n\n try {\n currentParentPath = preparePath(path);\n } catch (error) {\n return dispatch({\n type: FETCH_SUGGESTIONS.FAILURE,\n data: {message: error.message},\n });\n }\n\n if (suggestionsPath === currentParentPath && suggestionsLoaded) {\n return;\n }\n dispatch({type: FETCH_SUGGESTIONS.REQUEST});\n\n return loadSuggestions(path, customFilter)\n .then((suggestions) => {\n dispatch({\n type: FETCH_SUGGESTIONS.SUCCESS,\n data: {suggestions, path, currentParentPath},\n });\n })\n .catch((error) => {\n dispatch({\n type: FETCH_SUGGESTIONS.FAILURE,\n data: {message: error.message},\n });\n });\n };\n}\n\nexport function removeActiveRequests() {\n return (dispatch) => {\n pathEditorRequests.removeAllRequests();\n dispatch({type: FETCH_SUGGESTIONS.CANCELLED});\n };\n}\n","// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {Action} from 'redux';\nimport {YTError} from '../../../types';\nimport ypath from '../../../common/thor/ypath';\nimport * as JOB from '../../../constants/job';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../../store/reducers';\nimport {JobSpecification} from '../../../types/operations/job';\n\ninterface JobSpecRequest {\n type: number;\n version: number;\n scheduler_job_spec_ext: JobSpecification;\n}\n\ninterface LoadJobSpecificationRequestAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_REQUEST;\n}\n\ninterface LoadJobSpecificationSuccessAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_SUCCESS;\n data: {\n specification: JobSpecification;\n };\n}\n\ninterface LoadJobSpecificationFailureAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_FAILURE;\n data: {\n error: YTError;\n };\n}\n\ntype LoadJobSpecificationAction =\n | LoadJobSpecificationRequestAction\n | LoadJobSpecificationSuccessAction\n | LoadJobSpecificationFailureAction;\n\ninterface AbortAndResetAction {\n type: typeof JOB.LOAD_JOB_SPECIFICATION_CANCELLED;\n}\n\ninterface ChangeOmitNodeDirectoryAction {\n type: typeof JOB.CHANGE_OMIT_NODE_DIRECTORY;\n}\n\ninterface ChangeOmitInputTableSpecsAction {\n type: typeof JOB.CHANGE_OMIT_INPUT_TABLES_SPECS;\n}\n\ninterface ChangeOmitOutputTableSpecsAction {\n type: typeof JOB.CHANGE_OMIT_OUTPUT_TABLES_SPECS;\n}\n\ntype CheckboxAction =\n | ChangeOmitNodeDirectoryAction\n | ChangeOmitInputTableSpecsAction\n | ChangeOmitOutputTableSpecsAction;\n\nexport type SpecificationActionType =\n | LoadJobSpecificationAction\n | AbortAndResetAction\n | CheckboxAction;\n\nconst requests = new CancelHelper();\n\nexport function loadJobSpecification(\n jobID: string,\n): ThunkAction<Promise<void>, RootState, unknown, Action<string>> {\n return (dispatch, getState) => {\n const {omitNodeDirectory, omitInputTableSpecs, omitOutputTableSpecs} =\n getState().job.specification;\n\n dispatch({type: JOB.LOAD_JOB_SPECIFICATION_REQUEST});\n\n return yt.v4\n .getJobSpec({\n parameters: {\n job_id: jobID,\n omit_node_directory: omitNodeDirectory,\n omit_input_table_specs: omitInputTableSpecs,\n omit_output_table_specs: omitOutputTableSpecs,\n },\n cancellation: requests.saveCancelToken,\n })\n .then((req: JobSpecRequest) => {\n // @ts-ignore\n const [scheduler_job_spec_ext, job_spec_ext]: JobSpecification = ypath.getValues(\n req,\n ['/scheduler_job_spec_ext', '/job_spec_ext'],\n );\n\n dispatch({\n type: JOB.LOAD_JOB_SPECIFICATION_SUCCESS,\n data: {specification: job_spec_ext ?? scheduler_job_spec_ext},\n });\n })\n .catch((error: YTError) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: JOB.LOAD_JOB_SPECIFICATION_CANCELLED});\n } else {\n dispatch({\n type: JOB.LOAD_JOB_SPECIFICATION_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function abortAndReset(): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.LOAD_JOB_SPECIFICATION_CANCELLED});\n };\n}\n\nexport function changeOmitNodeDirectory(\n jobID: string,\n): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.CHANGE_OMIT_NODE_DIRECTORY});\n dispatch(loadJobSpecification(jobID));\n };\n}\n\nexport function changeOmitInputTableSpecs(\n jobID: string,\n): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.CHANGE_OMIT_INPUT_TABLES_SPECS});\n dispatch(loadJobSpecification(jobID));\n };\n}\n\nexport function changeOmitOutputTableSpecs(\n jobID: string,\n): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.CHANGE_OMIT_OUTPUT_TABLES_SPECS});\n dispatch(loadJobSpecification(jobID));\n };\n}\n","import {createSelector} from 'reselect';\nimport ypath from '../../../common/thor/ypath';\n\nimport flatten_ from 'lodash/flatten';\nimport mapValues_ from 'lodash/mapValues';\nimport map_ from 'lodash/map';\nimport sumBy_ from 'lodash/sumBy';\nimport values_ from 'lodash/values';\n\nimport {PLEASE_PROCEED_TEXT} from '../../../utils/actions';\nimport {\n JobPipes,\n JobSpecification,\n PipesIO,\n PreparedJob,\n StatisticsIO,\n} from '../../../types/operations/job';\nimport {Action as JobAction} from '../../../pages/job/JobActions/JobActions';\n\ninterface State {\n job: {\n general: {\n job: PreparedJob;\n };\n specification: {\n specification: JobSpecification;\n };\n };\n}\n\nconst prepareStatisticsIO = (obj: PipesIO, type: string, index?: number): StatisticsIO => {\n return {\n table: index !== undefined ? `${type}:${index}` : type,\n ...mapValues_(obj, (value) => value.sum),\n };\n};\n\nexport const getJob = (state: State) => state.job.general.job;\nconst getJobSpecification = (state: State) => state.job.specification.specification;\n\nconst getPipesIO = createSelector(getJob, (job: PreparedJob): JobPipes => {\n return ypath.getValue(job, '/statistics/user_job/pipes') || {};\n});\n\nexport const getTotalTimeIO = createSelector(getPipesIO, ({input, output}: JobPipes) => {\n return {\n read: input?.['idle_time'].sum,\n write: sumBy_(values_(output), (statistics) => statistics['busy_time'].sum),\n };\n});\n\nexport const getJobStatisticsIO = createSelector(\n getPipesIO,\n ({input, output: {total, ...output}}: JobPipes) => {\n const res = {\n input: [prepareStatisticsIO(input, 'input', 0)],\n output: values_(output).map((outputStatistics: PipesIO, index) =>\n prepareStatisticsIO(outputStatistics, 'output', index),\n ),\n };\n if (total) {\n const last = prepareStatisticsIO(total, 'Total');\n last.isTotal = true;\n res.output.push(last);\n }\n return res;\n },\n);\n\nconst getUserCpuTimeSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/cpu/user/sum'),\n);\nconst getWaitCpuTimeSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/cpu/wait/sum'),\n);\n\nconst getGpuUtilizationSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/gpu/cumulative_utilization_gpu/sum'),\n);\nconst getGpuPowerSum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/gpu/cumulative_power/sum'),\n);\nconst getGpuMemorySum = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/user_job/gpu/cumulative_memory/sum'),\n);\n\nconst getTimeExec = createSelector(getJob, (job: PreparedJob): number =>\n ypath.getNumberDeprecated(job, '/statistics/time/exec/sum'),\n);\n\nexport const getAverageUserCpuTime = createSelector(\n [getUserCpuTimeSum, getTimeExec],\n (userCpuTimeSum, timeExec) => userCpuTimeSum / timeExec,\n);\nexport const getAverageWaitCpuTime = createSelector(\n [getWaitCpuTimeSum, getTimeExec],\n (waitCpuTimeSum, timeExec) => waitCpuTimeSum / timeExec,\n);\n\nexport const getGpuDevices = createSelector(getJob, (job: PreparedJob) =>\n ypath.getNumberDeprecated(job, '/exec_attributes/gpu_devices/length'),\n);\nexport const getAverageGpuUtilization = createSelector(\n [getGpuUtilizationSum, getTimeExec],\n (gpuUtilizationSum, timeExec) => gpuUtilizationSum / timeExec,\n);\nexport const getAverageGpuPower = createSelector(\n [getGpuPowerSum, getTimeExec],\n (gpuPowerSum, timeExec) => gpuPowerSum / timeExec,\n);\nexport const getAverageGpuMemory = createSelector(\n [getGpuMemorySum, getTimeExec],\n (gpuMemorySum, timeExec) => gpuMemorySum / timeExec,\n);\n\nexport const getJobPivotKeysData = createSelector([getJobSpecification], (specification) => {\n const inputTableSpecs = ypath.getValue(specification, '/input_table_specs');\n\n return flatten_(\n map_(inputTableSpecs, (tableSpec) => {\n const chunkSpecs = ypath.getValue(tableSpec, '/chunk_specs');\n\n return map_(chunkSpecs, (chunkSpec) => {\n const id = ypath.getValue(chunkSpec, '/chunk_id');\n\n const fromKey = map_(ypath.getValue(chunkSpec, '/lower_limit/key'), (key) =>\n ypath.getValue(key),\n );\n const fromIndex = [ypath.getValue(chunkSpec, '/lower_limit/row_index')];\n const from = !fromKey || fromKey.length === 0 ? fromIndex : fromKey;\n\n const toKey = map_(ypath.getValue(chunkSpec, '/upper_limit/key'), (key) =>\n ypath.getValue(key),\n );\n const toIndex = [ypath.getValue(chunkSpec, '/upper_limit/row_index')];\n const to = !toKey || toKey.length === 0 ? toIndex : toKey;\n\n return {id, from, to};\n });\n }),\n );\n});\n\nexport const getJobActions = createSelector(getJob, (job: PreparedJob) => {\n const actions: JobAction[] = [];\n const state = job.state;\n\n if (state !== 'completed' && state !== 'failed' && state !== 'aborted') {\n actions.push({\n modalKey: 'abort',\n name: 'abort',\n successMessage: 'Job was successfully aborted. Please wait',\n icon: 'redo',\n message: 'Job will be immediately aborted. Are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n });\n\n actions.push({\n modalKey: 'interrupt',\n name: 'interrupt',\n successMessage: 'Job was successfully aborted. Please wait',\n icon: 'hand-paper',\n message: 'Job will be immediately interrupted. Are you sure you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n optionMessage: 'Interruption timeout',\n optionValue: 10000,\n optionType: 'input',\n options: [\n {\n data: {\n parameters: {interrupt_timeout: 10000},\n },\n value: 'timeout',\n text: 'timeout',\n },\n ],\n });\n }\n\n if (state === 'running') {\n actions.push({\n modalKey: 'abandon',\n name: 'abandon',\n successMessage: 'Job was successfully aborted. Please wait',\n icon: 'trash-bin',\n message:\n 'Job will be aborted, but considered as completed, output data of job will be lost. Do you want to proceed?',\n confirmationText: PLEASE_PROCEED_TEXT,\n });\n }\n\n return actions;\n});\n","import React, {useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Yson from '../../../../components/Yson/Yson';\nimport {Checkbox, Flex, Loader} from '@gravity-ui/uikit';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\n\nimport {RootState} from '../../../../store/reducers';\nimport {\n abortAndReset,\n changeOmitInputTableSpecs,\n changeOmitNodeDirectory,\n changeOmitOutputTableSpecs,\n loadJobSpecification,\n} from '../../../../store/actions/job/specification';\n\nimport './Specification.scss';\nimport {getJobSpecificationYsonSettings} from '../../../../store/selectors/thor/unipika';\nimport {YsonDownloadButton} from '../../../../components/DownloadAttributesButton';\nimport {getJob} from '../../../../store/selectors/job/detail';\n\ninterface SpecificationProps {\n className?: string;\n jobID: string;\n}\n\nconst block = cn('job-specification');\n\nfunction Toolbar({jobID}: SpecificationProps) {\n const dispatch = useDispatch();\n\n const {omitNodeDirectory, omitInputTableSpecs, omitOutputTableSpecs} = useSelector(\n (state: RootState) => state.job.specification,\n );\n\n const handleNodeDirectoryChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(changeOmitNodeDirectory(jobID));\n blurByEvent(e);\n },\n [dispatch, jobID],\n );\n\n const handleInputTableSpecsChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(changeOmitInputTableSpecs(jobID));\n blurByEvent(e);\n },\n [dispatch, jobID],\n );\n\n const handleOutputTableSpecsChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n dispatch(changeOmitOutputTableSpecs(jobID));\n blurByEvent(e);\n },\n [dispatch, jobID],\n );\n\n return (\n <div className={block('toolbar')}>\n <Checkbox\n className={block('checkbox')}\n size=\"l\"\n content=\"Omit node directory\"\n checked={omitNodeDirectory}\n onChange={handleNodeDirectoryChange}\n />\n\n <Checkbox\n className={block('checkbox')}\n size=\"l\"\n content=\"Omit input table specs\"\n checked={omitInputTableSpecs}\n onChange={handleInputTableSpecsChange}\n />\n\n <Checkbox\n className={block('checkbox')}\n size=\"l\"\n content=\"Omit output table specs\"\n checked={omitOutputTableSpecs}\n onChange={handleOutputTableSpecsChange}\n />\n </div>\n );\n}\n\nfunction blurByEvent(e: React.ChangeEvent<HTMLInputElement>) {\n (e.target as HTMLInputElement).blur();\n}\n\nexport default function Specification({className, jobID}: SpecificationProps) {\n const dispatch = useDispatch();\n\n const {loading, loaded, error, errorData, specification} = useSelector(\n (state: RootState) => state.job.specification,\n );\n const {id} = useSelector(getJob);\n\n useEffect(() => {\n dispatch(loadJobSpecification(jobID));\n\n return () => {\n dispatch(abortAndReset());\n };\n }, [dispatch, jobID]);\n\n const initialLoading = loading && !loaded;\n const settings = useSelector(getJobSpecificationYsonSettings);\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n <div className={block('content', {loading: initialLoading})}>\n {initialLoading ? (\n <Loader />\n ) : (\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <Yson\n folding={true}\n settings={settings}\n value={specification}\n extraTools={\n <Flex alignItems=\"center\" gap={2}>\n <YsonDownloadButton\n value={specification}\n settings={settings}\n name={`specification_job_${id}`}\n />\n <Toolbar jobID={jobID} />\n </Flex>\n }\n />\n </LoadDataHandler>\n )}\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import {RootState} from '../../reducers';\n\nexport const getRawStatistic = (state: RootState) => state.job.general.job.statistics;\n","import * as React from 'react';\nimport {useSelector} from 'react-redux';\nimport {getRawStatistic} from '../../../../store/selectors/job/statistics';\nimport {StatisticTable, StatisticTree} from '../../../../components/StatisticTable';\nimport {isDocsAllowed} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\n\nexport default function Statistics() {\n const statistic = useSelector(getRawStatistic);\n return (\n <StatisticTable\n helpUrl={isDocsAllowed() ? UIFactory.docsUrls['problems:jobstatistics'] : undefined}\n statistic={statistic as unknown as StatisticTree}\n visibleColumns={['min', 'max', 'last', 'sum', 'count']}\n />\n );\n}\n","import React, {useCallback, useState} from 'react';\nimport {useHistory, useRouteMatch} from 'react-router';\nimport {useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport {TextInput} from '@gravity-ui/uikit';\nimport Button from '../../../components/Button/Button';\nimport Icon from '../../../components/Icon/Icon';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport {KeyCode, Page} from '../../../constants/index';\nimport {RouteInfo} from '../../../pages/job/Job';\n\nimport './JobBreadcrumbs.scss';\n\nconst block = cn('job-breadcrumbs');\n\ninterface JobBreadcrumbsProps {\n id?: string;\n className?: string;\n}\n\nexport default function JobBreadcrumbs({id, className}: JobBreadcrumbsProps) {\n const match = useRouteMatch<RouteInfo>();\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const [editMode, changeEditMode] = useState(false);\n const [jobID, changeJobID] = useState(match.params.jobID);\n\n const {operationID} = match.params;\n const path = `${operationID}/${jobID}`;\n\n const handleEditClick = useCallback(() => changeEditMode(true), []);\n const handleInputChange = useCallback((val: string) => changeJobID(val), []);\n const handleInputBlur = useCallback(() => changeEditMode(false), []);\n const handleInputKeyDown = useCallback(\n (evt: React.KeyboardEvent) => {\n if (evt.keyCode === KeyCode.ENTER) {\n changeEditMode(false);\n history.push(`/${cluster}/${Page.JOB}/${path}`);\n }\n },\n [path, history, cluster],\n );\n\n const other = {\n onBlur: handleInputBlur,\n };\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n {editMode ? (\n <div className={block('input')}>\n <TextInput\n {...other}\n autoFocus\n size=\"m\"\n value={jobID}\n onUpdate={handleInputChange}\n onKeyDown={handleInputKeyDown}\n />\n </div>\n ) : (\n <div className={block('id')}>\n <span className=\"elements-ellipsis\">{id}</span>\n &nbsp;\n <ClipboardButton view=\"flat-secondary\" text={id} size=\"m\" />\n &nbsp;\n <Button view=\"flat-secondary\" size=\"m\" onClick={handleEditClick}>\n <Icon awesome=\"pencil\" />\n </Button>\n </div>\n )}\n </div>\n </ErrorBoundary>\n );\n}\n","import React, {useEffect, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport ElementsTableRaw from '../../../../components/ElementsTable/ElementsTable';\n\nimport {abortAndReset, loadJobSpecification} from '../../../../store/actions/job/specification';\nimport {getJobPivotKeysData} from '../../../../store/selectors/job/detail';\nimport {RootState} from '../../../../store/reducers';\nimport unipika from '../../../../common/thor/unipika';\n\nconst block = cn('job-pivot-keys');\nconst ElementsTable: any = ElementsTableRaw;\n\ninterface PivotKey {\n id: string;\n from: string[];\n to: string[];\n}\n\nconst getTableColumns = () => {\n return {\n items: {\n id: {\n name: 'id',\n caption: 'Chunk ID',\n align: 'left',\n },\n from: {\n name: 'from',\n align: 'left',\n },\n to: {\n name: 'to',\n align: 'left',\n },\n },\n sets: {\n default: {\n items: ['id', 'from', 'to'],\n },\n },\n mode: 'default',\n };\n};\n\nconst getTableTemplates = () => {\n const renderKey = (item: PivotKey, key: 'from' | 'to') => {\n // @ts-ignore\n const text = unipika.prettyprint(item[key], {\n break: false,\n indent: 0,\n asHTML: false,\n });\n const title = text.split(',').join(',\\n');\n\n return (\n <div className=\"unipika\">\n [\n <span title={title} className=\"uint64 elements-ellipsis\">\n {text.slice(1, -1)}\n </span>\n ]\n </div>\n );\n };\n\n return {\n from(item: PivotKey) {\n return renderKey(item, 'from');\n },\n to(item: PivotKey) {\n return renderKey(item, 'to');\n },\n };\n};\n\nexport default function PivotKeys() {\n const dispatch = useDispatch();\n\n const {job} = useSelector((state: RootState) => state.job.general);\n const {loading, loaded, error, errorData} = useSelector(\n (state: RootState) => state.job.specification,\n );\n const pivotKeysItems = useSelector(getJobPivotKeysData);\n\n useEffect(() => {\n dispatch(loadJobSpecification(job.id as string));\n\n return () => {\n dispatch(abortAndReset());\n };\n }, [dispatch, job.id]);\n\n const columns = useMemo(getTableColumns, []);\n const templates = useMemo(getTableTemplates, []);\n\n return (\n <div className={block({loading})}>\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n virtual={false}\n striped={false}\n columns={columns}\n isLoading={loading}\n templates={templates}\n items={pivotKeysItems}\n />\n </LoadDataHandler>\n </div>\n );\n}\n","import {Toaster} from '@gravity-ui/uikit';\nimport {ThunkAction} from 'redux-thunk';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {CompetitiveJobs, RawJob} from '../../../types/operations/job';\nimport {RootState} from '../../../store/reducers';\nimport CancelHelper from '../../../utils/cancel-helper';\nimport * as JOB from '../../../constants/job';\nimport {YTError} from '../../../types';\nimport {Action} from 'redux';\n\nconst requests = new CancelHelper();\nconst toaster = new Toaster();\n\ninterface LoadJobCompetitionRequestAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_REQUEST;\n}\n\ninterface LoadJobCompetitionSuccessAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_SUCCESS;\n data: {\n competitors: RawJob[];\n };\n}\n\ninterface LoadJobCompetitionFailureAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_FAILURE;\n data: {\n error?: YTError;\n };\n}\n\nexport type LoadCompetitorsAction =\n | LoadJobCompetitionRequestAction\n | LoadJobCompetitionSuccessAction\n | LoadJobCompetitionFailureAction;\n\nexport function loadCompetitors(\n operationID: string,\n jobCompetitionID: string,\n): ThunkAction<Promise<void>, RootState, unknown, Action<string>> {\n return (dispatch) => {\n dispatch({type: JOB.LOAD_JOB_COMPETITORS_REQUEST});\n\n return yt.v3\n .listJobs({\n parameters: {\n operation_id: operationID,\n job_competition_id: jobCompetitionID,\n },\n cancellation: requests.saveCancelToken,\n })\n .then((competitors: CompetitiveJobs) => {\n dispatch({\n type: JOB.LOAD_JOB_COMPETITORS_SUCCESS,\n data: {competitors: competitors.jobs},\n });\n })\n .catch((error: YTError) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: JOB.LOAD_JOB_COMPETITORS_CANCELLED});\n } else {\n toaster.add({\n theme: 'danger',\n name: 'job competitors',\n autoHiding: 10000,\n content: error?.message || 'Oops, something went wrong',\n title: \"Failed to load job's competitors\",\n });\n\n dispatch({\n type: JOB.LOAD_JOB_COMPETITORS_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\ninterface AbortAndResetAction {\n type: typeof JOB.LOAD_JOB_COMPETITORS_CANCELLED;\n}\n\nexport function abortAndReset(): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.LOAD_JOB_COMPETITORS_CANCELLED});\n };\n}\n\nexport type CompetitorsActionType = LoadCompetitorsAction | AbortAndResetAction;\n","/* eslint-disable camelcase */\nimport React, {useCallback, useEffect, useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ElementsTableRaw from '../../../../components/ElementsTable/ElementsTable';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport Statuslabel from '../../../../components/StatusLabel/StatusLabel';\nimport Link from '../../../../components/Link/Link';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {PreparedJob, RawJob} from '../../../../types/operations/job';\nimport hammer from '../../../../common/hammer';\nimport {RootState} from '../../../../store/reducers';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {loadCompetitors} from '../../../../store/actions/job/competitors';\nimport {OPERATION_JOBS_TABLE_ID} from '../../../../constants/operations/jobs';\n\nimport './Speculative.scss';\n\nconst block = cn('job-competitors');\nconst ElementsTable: any = ElementsTableRaw;\n\ninterface IdAddressProps {\n job: RawJob;\n operationId: string;\n}\n\nfunction IdAddress({job, operationId}: IdAddressProps) {\n const cluster = useSelector(getCluster);\n\n // @ts-ignore\n const [id, address, jobCompetitionId] = ypath.getValues(job, [\n '/id',\n '/address',\n '/job_competition_id',\n ]);\n const host = hammer.format['Address'](address);\n const isSpeculativeJob = jobCompetitionId && jobCompetitionId !== id;\n\n return (\n <div>\n <span className={block('id', 'elements-monospace elements-ellipsis')}>\n <ClipboardButton text={id} theme=\"flat-secondary\" size=\"s\" title=\"Copy job id\" />\n <Link routed url={`/${cluster}/job/${operationId}/${id}`} theme={'primary'}>\n {id}\n </Link>\n </span>\n <br />\n <span className={block('host', 'elements-monospace elements-ellipsis')}>\n <ClipboardButton text={host} view=\"flat-secondary\" size=\"s\" title=\"Copy host\" />\n {host}\n </span>\n {isSpeculativeJob && (\n <React.Fragment>\n <br />\n <span\n className={block(\n 'speculative-job-label',\n 'elements-monospace elements-ellipsis',\n )}\n >\n Speculative job\n </span>\n </React.Fragment>\n )}\n </div>\n );\n}\n\nconst getTableColumns = () => {\n return {\n items: {\n id_address: {\n name: 'id_address',\n align: 'left',\n caption: 'Id / Address',\n sort: false,\n },\n state: {\n name: 'type',\n align: 'right',\n sort: true,\n },\n type: {\n name: 'type',\n align: 'right',\n sort: true,\n },\n },\n sets: {\n default: {\n items: ['id_address', 'type', 'state'],\n },\n },\n mode: 'default',\n };\n};\n\ninterface SpeculativeJobsTemplates {\n id_address: (el: RawJob) => JSX.Element;\n state: (el: RawJob) => JSX.Element;\n}\n\nconst getTableTemplates = (operationId: string): SpeculativeJobsTemplates => {\n return {\n id_address(item: RawJob) {\n return <IdAddress job={item} operationId={operationId} />;\n },\n state(item: RawJob) {\n return <Statuslabel label={item.state} />;\n },\n };\n};\n\nexport default function Competitors() {\n const dispatch = useDispatch();\n const computeKey = useCallback((item: PreparedJob) => item.id, []);\n const {job} = useSelector((state: RootState) => state.job.general);\n const {loading, loaded, error, errorData, competitors} = useSelector(\n (state: RootState) => state.job.competitors,\n );\n\n const {jobCompetitionId, operationId} = job;\n if (!jobCompetitionId || !operationId) {\n throw new Error('Unexpected behavior: jobCompetitionId or operationId is not defined');\n }\n\n const columns = useMemo(getTableColumns, []);\n const templates = useMemo(() => getTableTemplates(operationId), [operationId]);\n\n useEffect(() => {\n dispatch(loadCompetitors(operationId, jobCompetitionId));\n }, [dispatch, operationId, jobCompetitionId]);\n\n return (\n <ErrorBoundary>\n <div className={block({loading})}>\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n virtual={false}\n striped={false}\n columns={columns}\n isLoading={loading}\n items={competitors}\n templates={templates}\n computeKey={computeKey}\n tableId={OPERATION_JOBS_TABLE_ID}\n />\n </LoadDataHandler>\n </div>\n </ErrorBoundary>\n );\n}\n","import React, {useMemo} from 'react';\nimport {useSelector} from 'react-redux';\nimport {createSelector} from 'reselect';\nimport cn from 'bem-cn-lite';\n\nimport compact_ from 'lodash/compact';\nimport isFinite_ from 'lodash/isFinite';\n\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport ElementsTableRaw from '../../../../components/ElementsTable/ElementsTable';\n\nimport hammer from '../../../../common/hammer';\nimport {StatisticsIO as IStatisticsIO} from '../../../../types/operations/job';\nimport {\n getAverageGpuMemory,\n getAverageGpuPower,\n getAverageGpuUtilization,\n getAverageUserCpuTime,\n getAverageWaitCpuTime,\n getGpuDevices,\n getJobStatisticsIO,\n getTotalTimeIO,\n} from '../../../../store/selectors/job/detail';\n\nimport './StatisticsIO.scss';\n\nconst block = cn('job-statistics-io');\nconst headingBlock = cn('elements-heading');\nconst ElementsTable: any = ElementsTableRaw;\n\nconst getTableColumns = () => {\n return {\n items: {\n table: {\n caption: 'Table',\n align: 'left',\n },\n busy_time: {\n caption: 'Busy time',\n align: 'right',\n },\n bytes: {\n caption: 'Bytes',\n align: 'right',\n },\n idle_time: {\n caption: 'Idle time',\n align: 'right',\n },\n },\n sets: {\n default: {\n items: ['table', 'busy_time', 'bytes', 'idle_time'],\n },\n },\n mode: 'default',\n };\n};\n\nconst getTableTemplates = () => {\n const prepareStatistic = (item: Record<string, any>, key: string): string => {\n return hammer.format[key === 'bytes' ? 'Bytes' : 'TimeDuration'](item[key]);\n };\n\n return {\n busy_time(item: IStatisticsIO) {\n return prepareStatistic(item, 'busy_time');\n },\n bytes(item: IStatisticsIO) {\n return prepareStatistic(item, 'bytes');\n },\n idle_time(item: IStatisticsIO) {\n return prepareStatistic(item, 'idle_time');\n },\n };\n};\n\nconst selectItems = createSelector(\n [\n getTotalTimeIO,\n getAverageUserCpuTime,\n getAverageWaitCpuTime,\n getGpuDevices,\n getAverageGpuUtilization,\n getAverageGpuPower,\n getAverageGpuMemory,\n ],\n (\n {read, write},\n averageUserCpuTime,\n averageWaitCpuTime,\n gpuDevices,\n averageGpuUtilization,\n averageGpuPower,\n averageGpuMemory,\n ) =>\n compact_([\n {key: 'total time waiting to read data', value: hammer.format['TimeDuration'](read)},\n {key: 'total time waiting to write data', value: hammer.format['TimeDuration'](write)},\n isFinite_(averageUserCpuTime) && {\n key: 'average user cpu time per second',\n value: hammer.format['Number'](averageUserCpuTime, {digits: 3}),\n },\n isFinite_(averageWaitCpuTime) && {\n key: 'average wait cpu time per second',\n value: hammer.format['Number'](averageWaitCpuTime, {digits: 3}),\n },\n {key: 'gpu devices', value: hammer.format['Number'](gpuDevices)},\n isFinite_(averageGpuUtilization) && {\n key: 'average gpu utilization',\n value: hammer.format['Percent'](averageGpuUtilization * 100),\n },\n isFinite_(averageGpuPower) && {\n key: 'average gpu power',\n value: hammer.format['Number'](averageGpuPower, {digits: 3}),\n },\n isFinite_(averageGpuMemory) && {\n key: 'average gpu memory usage',\n value: hammer.format['Bytes'](averageGpuMemory),\n },\n ]),\n);\n\nexport default function StatisticsIO() {\n const {input, output} = useSelector(getJobStatisticsIO);\n const items = useSelector(selectItems);\n\n const columns = useMemo(getTableColumns, []);\n const templates = useMemo(() => getTableTemplates(), []);\n\n return (\n <div className={block()}>\n <MetaTable className={block('meta')} items={items} />\n\n <div className={headingBlock({size: 'm'}, block('heading'))}>Input</div>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n items={input}\n virtual={false}\n striped={false}\n columns={columns}\n templates={templates}\n />\n\n {output.length > 0 && (\n <React.Fragment>\n <div className={headingBlock({size: 'm'}, block('heading'))}>Output</div>\n <ElementsTable\n size=\"s\"\n theme=\"light\"\n css={block()}\n items={output}\n virtual={false}\n striped={false}\n columns={columns}\n templates={templates}\n rowClassName={({isTotal}: {isTotal?: boolean}) => {\n return isTotal ? block('row-total') : undefined;\n }}\n />\n </React.Fragment>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport includes_ from 'lodash/includes';\n\nimport Error from '../../../../components/Error/Error';\nimport PivotKeys from '../PivotKeys/PivotKeys';\nimport Speculative from '../Speculative/Speculative';\nimport StatisticsIO from '../StatisticsIO/StatisticsIO';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport Events from '../../../../pages/operations/OperationDetail/tabs/details/Events/Events';\nimport CollapsibleSection from '../../../../components/CollapsibleSection/CollapsibleSection';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {RootState} from '../../../../store/reducers';\nimport {useSelector} from 'react-redux';\nimport {JobError, JobEvents, JobStatistic} from '../../../../types/operations/job';\n\nimport './Details.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\n\nconst block = cn('job-details');\n\nfunction renderEvents(events: JobEvents, collapsibleSize: 'm' | 'ss') {\n return events ? (\n <CollapsibleSection name=\"Events\" className={block('events')} size={collapsibleSize}>\n <Events events={events} type=\"phase\" />\n </CollapsibleSection>\n ) : null;\n}\n\nfunction renderError(error: JobError) {\n return error ? (\n <div className={block('result')}>\n <Error error={error} />\n </div>\n ) : null;\n}\n\nfunction renderCompetitors(hasCompetitors: boolean, collapsibleSize: 'm' | 'ss') {\n return hasCompetitors ? (\n <CollapsibleSection\n collapsed\n name=\"Competitive jobs\"\n className={block('speculative-jobs')}\n size={collapsibleSize}\n >\n <Speculative />\n </CollapsibleSection>\n ) : null;\n}\n\nfunction renderStatistics(statistics: JobStatistic, collapsibleSize: 'm' | 'ss') {\n // @ts-ignore\n const hasPipes = ypath.getValue(statistics, '/user_job/pipes');\n\n return hasPipes ? (\n <CollapsibleSection\n name=\"Statistics\"\n className={block('statistics')}\n size={collapsibleSize}\n >\n <StatisticsIO />\n </CollapsibleSection>\n ) : null;\n}\n\nfunction renderPivotKeys(type: string | undefined, collapsibleSize: 'm' | 'ss') {\n const correctTypes = ['reduce', 'join_reduce', 'sorted_merge'];\n\n return includes_(correctTypes, type) ? (\n <CollapsibleSection\n collapsed\n name=\"Pivot keys\"\n className={block('pivot-keys')}\n size={collapsibleSize}\n >\n <PivotKeys />\n </CollapsibleSection>\n ) : null;\n}\n\nexport default function Details() {\n const {details, job} = useSelector((state: RootState) => state.job.general);\n const {events} = details;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n {events?.length! > 0 && (\n <div className={block('section')}>\n {renderEvents(details.events, UI_COLLAPSIBLE_SIZE)}\n </div>\n )}\n\n <div className={block('section')}>\n {renderError(job.error)}\n {renderStatistics(job.statistics as JobStatistic, UI_COLLAPSIBLE_SIZE)}\n {renderPivotKeys(job.type, UI_COLLAPSIBLE_SIZE)}\n {renderCompetitors(Boolean(job.hasCompetitors), UI_COLLAPSIBLE_SIZE)}\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import * as JOB from '../../../constants/job';\nimport CancelHelper from '../../../utils/cancel-helper';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {getCurrentClusterConfig} from '../../../store/selectors/global';\nimport {RawJob} from '../../../types/operations/job';\nimport {RootState} from '../../../store/reducers';\nimport {ThunkAction} from 'redux-thunk';\nimport {YTError} from '../../../types';\nimport {Action} from 'redux';\n\nconst requests = new CancelHelper();\n\ninterface LoadJobDataRequestAction {\n type: typeof JOB.LOAD_JOB_DATA_REQUEST;\n}\n\ninterface LoadJobDataSuccessAction {\n type: typeof JOB.LOAD_JOB_DATA_SUCCESS;\n data: {\n job: RawJob;\n clusterConfig: {id: string; proxy: string; externalProxy?: string};\n };\n}\n\ninterface LoadJobDataFailureAction {\n type: typeof JOB.LOAD_JOB_DATA_FAILURE;\n data: {\n error: YTError;\n };\n}\n\ntype LoadJobDataAction =\n | LoadJobDataRequestAction\n | LoadJobDataSuccessAction\n | LoadJobDataFailureAction;\n\nexport function loadJobData(\n operationID: string,\n jobID: string,\n): ThunkAction<Promise<void>, RootState, unknown, GeneralActionType> {\n return (dispatch, getState) => {\n dispatch({type: JOB.LOAD_JOB_DATA_REQUEST});\n\n const clusterConfig = getCurrentClusterConfig(getState());\n\n return yt.v3\n .getJob({\n parameters: {\n operation_id: operationID,\n job_id: jobID,\n },\n cancellation: requests.saveCancelToken,\n })\n .then((job: RawJob) => {\n dispatch({\n type: JOB.LOAD_JOB_DATA_SUCCESS,\n data: {job, clusterConfig},\n });\n })\n .catch((error: YTError) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: JOB.LOAD_JOB_DATA_CANCELLED});\n } else {\n dispatch({\n type: JOB.LOAD_JOB_DATA_FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\ninterface AbortAndResetAction {\n type: typeof JOB.LOAD_JOB_DATA_CANCELLED;\n}\n\nexport function abortAndReset(): ThunkAction<void, RootState, unknown, Action<string>> {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: JOB.LOAD_JOB_DATA_CANCELLED});\n };\n}\n\nexport type GeneralActionType = LoadJobDataAction | AbortAndResetAction;\n","import React, {useCallback, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport copy from 'copy-to-clipboard';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {ButtonProps, Dialog, DropdownMenu, Toaster} from '@gravity-ui/uikit';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport PathEditor from '../../../containers/PathEditor/PathEditor';\nimport Button from '../../../components/Button/Button';\nimport Link from '../../../components/Link/Link';\nimport Icon, {IconName} from '../../../components/Icon/Icon';\n\nimport {getJob, getJobActions} from '../../../store/selectors/job/detail';\nimport {loadJobData} from '../../../store/actions/job/general';\nimport {promptAction} from '../../../store/actions/actions';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RootState} from '../../../store/reducers';\nimport {PreparedJob} from '../../../types/operations/job';\nimport {showErrorPopup} from '../../../utils/utils';\nimport hammer from '../../../common/hammer';\nimport {YTError} from '../../../types';\n\nimport './JobActions.scss';\n\ntype ActionName = 'interrupt' | 'abort' | 'abandon';\n\ninterface OptionAction {\n value: string;\n text: string;\n data: Record<string, any>;\n}\n\nexport interface Action {\n icon: IconName;\n modalKey: string;\n name: ActionName;\n successMessage: string;\n confirmationText?: string;\n theme?: ButtonProps['view'];\n message?: string | JSX.Element;\n\n optionMessage?: string;\n optionValue?: string | number;\n optionType?: string;\n options?: OptionAction[];\n}\n\ninterface IntermediateAction extends Action {\n message: string | JSX.Element;\n handler: ({currentOption}: Record<string, any>) => void;\n}\n\nconst toaster = new Toaster();\nconst block = cn('job-actions');\nconst codeBlock = cn('elements-code');\n\nconst getAdditionalActions = (\n job: PreparedJob,\n openJobShellModal: () => void,\n openDumpContextModal: () => void,\n) => {\n const infoActions = [\n {\n action: () => {\n window.open(job.prepareCommandURL('get_job_input'));\n },\n text: 'get_job_input',\n },\n {\n action: () => {\n window.open(job.prepareCommandURL('get_job_stderr'));\n },\n text: 'get_job_stderr',\n },\n ];\n\n if (job.state === 'failed') {\n infoActions.push({\n action: () => {\n window.open(job.prepareCommandURL('get_job_fail_context'));\n },\n text: 'get_job_fail_context',\n });\n } else {\n infoActions.push({\n action: openDumpContextModal,\n text: 'dump_job_context',\n });\n }\n\n const jobShallAction = [\n {\n action: openJobShellModal,\n text: 'job shell',\n },\n ];\n\n return [infoActions, jobShallAction];\n};\n\ninterface PerformAction {\n currentOption?: number;\n name: ActionName;\n id: string;\n}\n\ninterface YTParameters {\n job_id: string;\n interrupt_timeout?: number;\n path?: string;\n}\n\nconst getActionAction = (name: ActionName) => {\n const mapper = {\n interrupt: yt.v4.abortJob,\n abort: yt.v4.abortJob,\n abandon: yt.v4.abandonJob,\n };\n\n return mapper[name];\n};\n\nconst performAction = ({currentOption, name, id}: PerformAction) => {\n const actionAction = getActionAction(name);\n let parameters: YTParameters = {job_id: id};\n if (currentOption) {\n parameters = {\n ...parameters,\n interrupt_timeout: currentOption,\n };\n }\n\n return actionAction(parameters);\n};\n\nconst dumpJobContext = (id: string, path: string, cluster: string) => {\n const parameters: YTParameters = {job_id: id, path};\n\n return yt.v3\n .dumpJobContext(parameters)\n .then(() => {\n toaster.add({\n theme: 'success',\n autoHiding: false,\n name: 'dump job context',\n title: 'Job context has been dumped.',\n content: <Link url={`/${cluster}/navigation?path=${path}`}>{path}</Link>,\n });\n })\n .catch((err: YTError) => {\n toaster.add({\n theme: 'danger',\n autoHiding: false,\n name: 'dump job context',\n title: 'Could not dump job context.',\n content: err?.message || 'Oops, something went wrong',\n actions: [{label: ' view', onClick: () => showErrorPopup(err)}],\n });\n });\n};\n\nfunction ActionBlock(action: Action) {\n const dispatch = useDispatch();\n\n const message = action.message || (\n <span>\n Are you sure you want to <strong>{action.name}</strong> the job?\n </span>\n );\n const {job} = useSelector((state: RootState) => state.job.general);\n const {id, operationId} = job as PreparedJob;\n\n const update = useCallback(() => {\n const reset = () => dispatch(loadJobData(operationId, id));\n setTimeout(reset, 5000);\n }, [dispatch, operationId, id]);\n const intermediateAction = useCallback(\n (data: IntermediateAction) => dispatch(promptAction(data)),\n [dispatch],\n );\n const handler = useCallback(\n ({currentOption}: Record<string, number>) => {\n const data = {...action, currentOption, id};\n return performAction(data).then(update);\n },\n [id, action, update],\n );\n const onClick = useCallback(\n () => dispatch(intermediateAction({...action, message, handler})),\n [dispatch, intermediateAction, action, message, handler],\n );\n\n return (\n <Button\n size=\"m\"\n key={action.name}\n onClick={onClick}\n view={action.theme || 'outlined'}\n className={block('action')}\n title={hammer.format['ReadableField'](action.name)}\n >\n <Icon awesome={action.icon} />\n &nbsp;\n {hammer.format['ReadableField'](action.name)}\n </Button>\n );\n}\n\nexport default function JobActions({className}: {className?: string}) {\n const job = useSelector(getJob);\n const {loaded} = useSelector((state: RootState) => state.job.general);\n const cluster = useSelector(getCluster);\n const jobId = (job as PreparedJob).id;\n\n const jobShellCommand = `yt run-job-shell ${jobId}`;\n const [jobShellVisible, setJobShellVisible] = useState(false);\n const openJobShellModal = useCallback(() => setJobShellVisible(true), [setJobShellVisible]);\n const closeJobShellModal = useCallback(() => setJobShellVisible(false), [setJobShellVisible]);\n const onCopyClick = useCallback(() => {\n copy(jobShellCommand);\n closeJobShellModal();\n }, [jobShellCommand, closeJobShellModal]);\n\n const defaultPath = '//home';\n const [dumpContextPath, setDumpContextPath] = useState(defaultPath);\n const [dumpContextVisible, setDumpContextVisible] = useState(false);\n const onPathEditorChange = useCallback(\n (path: string) => setDumpContextPath(path),\n [setDumpContextPath],\n );\n const openDumpContextModal = useCallback(\n () => setDumpContextVisible(true),\n [setDumpContextVisible],\n );\n const closeDumpContextModal = useCallback(\n () => setDumpContextVisible(false),\n [setDumpContextVisible],\n );\n const onDumpContextConfirm = useCallback(() => {\n dumpJobContext(jobId, dumpContextPath, cluster);\n closeDumpContextModal();\n }, [jobId, dumpContextPath, cluster, closeDumpContextModal]);\n\n const actions = useSelector(getJobActions);\n const additionalActions = useMemo(\n () => getAdditionalActions(job, openJobShellModal, openDumpContextModal),\n [job, openJobShellModal, openDumpContextModal],\n );\n\n if (!loaded) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n {map_(actions, (action: Action, index) => (\n <ActionBlock key={index} {...action} />\n ))}\n <DropdownMenu items={additionalActions} />\n\n <Dialog size=\"m\" open={jobShellVisible} onClose={closeJobShellModal}>\n <Dialog.Header caption=\"Job shell\" />\n <Dialog.Body>\n <div className={block('code')}>\n <div className={codeBlock({theme: 'default'})}>{jobShellCommand}</div>\n </div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonCancel={closeJobShellModal}\n onClickButtonApply={onCopyClick}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Copy\"\n showError={false}\n preset=\"success\"\n listenKeyEnter\n />\n </Dialog>\n\n <Dialog size=\"m\" open={dumpContextVisible} onClose={closeDumpContextModal}>\n <Dialog.Header caption=\"Dump job context\" />\n <Dialog.Body>\n <div className={block('dump-context')}>\n <PathEditor\n hasClear\n defaultPath={defaultPath}\n onChange={onPathEditorChange}\n />\n </div>\n </Dialog.Body>\n <Dialog.Footer\n onClickButtonCancel={closeDumpContextModal}\n onClickButtonApply={onDumpContextConfirm}\n textButtonCancel=\"Cancel\"\n textButtonApply=\"Confirm\"\n showError={false}\n preset=\"success\"\n listenKeyEnter\n />\n </Dialog>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useSelector} from 'react-redux';\nimport {Redirect, Route, Switch, useRouteMatch} from 'react-router';\n\nimport {Link} from '@gravity-ui/uikit';\n\nimport Specification from '../../../pages/job/tabs/Specification/Specification';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport MetaTable, {Template} from '../../../components/MetaTable/MetaTable';\nimport Statistics from '../../../pages/job/tabs/Statistics/Statistics';\nimport JobBreadcrumbs from '../JobBreadcrumbs/JobBreadcrumbs';\nimport Statuslabel from '../../../components/StatusLabel/StatusLabel';\nimport Placeholder from '../../../pages/components/Placeholder';\nimport Details from '../../../pages/job/tabs/Details/Details';\nimport JobActions from '../JobActions/JobActions';\nimport Label from '../../../components/Label/Label';\nimport Yson from '../../../components/Yson/Yson';\nimport Tabs from '../../../components/Tabs/Tabs';\n\nimport {getJobGeneralYsonSettings} from '../../../store/selectors/thor/unipika';\nimport {DEFAULT_TAB, Tab} from '../../../constants/job';\nimport {RootState} from '../../../store/reducers';\nimport {Page} from '../../../constants/index';\nimport {makeTabProps} from '../../../utils';\nimport {formatByParams} from '../../../utils/format';\nimport hammer from '../../../common/hammer';\nimport {RouteInfo} from '../Job';\n\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\nimport ChartLink from '../../../components/ChartLink/ChartLink';\nimport {getJob} from '../../../store/selectors/job/detail';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {getCluster, getClusterUiConfig} from '../../../store/selectors/global';\nimport UIFactory from '../../../UIFactory';\nimport {StaleJobIcon} from '../../../pages/operations/OperationDetail/tabs/Jobs/StaleJobIcon';\n\nimport './JobGeneral.scss';\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {YsonDownloadButton} from '../../../components/DownloadAttributesButton';\n\nconst block = cn('job-general');\n\nexport default function JobGeneral() {\n const cluster = useSelector(getCluster);\n const match = useRouteMatch<RouteInfo>();\n const settings = useSelector(getJobGeneralYsonSettings);\n const job = useSelector(getJob);\n const {loaded} = useSelector((state: RootState) => state.job.general);\n\n const {url: traceUrl, title: traceTitle} = useJobProfilingUrl({\n operationId: job?.operationId,\n jobId: job?.id,\n has_trace: job?.archive_features?.has_trace,\n pool_tree: job?.pool_tree,\n cluster,\n });\n\n if (!loaded) {\n return null;\n }\n\n const {url, params} = match;\n const {operationID, jobID} = params;\n const {\n operationId,\n attributes,\n finishTime,\n startTime,\n duration,\n address,\n state,\n type,\n id,\n jobCompetitionId,\n monitoring_descriptor,\n pool_tree,\n is_stale,\n } = job;\n const operationUrl = `/${cluster}/${Page.OPERATIONS}/${operationID}/jobs?jobId=${jobID}`;\n const path = `/${cluster}/${Page.JOB}/${operationID}/${jobID}`;\n const tabsProps = makeTabProps(path, Tab);\n\n const isSpeculativeJob = jobCompetitionId && jobCompetitionId !== id;\n\n const jobShellCommand = `yt --proxy ${cluster} run-job-shell ${id}`;\n\n return (\n <ErrorBoundary>\n <div className={block(null, 'elements-section')}>\n <div className={block('header')}>\n <span className={block('heading')}>\n {hammer.format['ReadableField'](type)} job\n </span>\n\n <Statuslabel label={state} renderPlaque />\n\n <JobActions className={block('actions')} />\n </div>\n\n {isSpeculativeJob && (\n <Label\n className={block('speculative-label')}\n text=\"Speculative job\"\n theme=\"warning\"\n type=\"text\"\n />\n )}\n\n <MetaTable\n className={block('meta')}\n items={[\n [\n {\n key: 'operation id',\n value: (\n <Template.Link\n url={operationUrl}\n text={operationId}\n withClipboard\n />\n ),\n },\n {\n key: 'job id',\n value: (\n <JobBreadcrumbs id={id} className={block('meta-breadcrumbs')} />\n ),\n },\n {\n key: 'host',\n value: (\n <span className={block('meta-host')}>\n <Template.Id id={address?.split(':')[0]} />\n <ChartLink\n url={UIFactory.makeUrlForNodeIO(cluster, address)}\n />\n </span>\n ),\n },\n {\n key: 'type',\n value: <Template.Value value={type} />,\n },\n {\n key: 'Monitoring descriptor',\n value: (\n <span className={block('meta-host')}>\n <Template.Id id={monitoring_descriptor} />\n <ChartLink\n url={UIFactory.makeUrlForMonitoringDescriptor(\n cluster,\n {\n from: startTime,\n to: finishTime,\n },\n monitoring_descriptor,\n )}\n />\n </span>\n ),\n visible: Boolean(monitoring_descriptor),\n },\n {\n key: 'Pool tree',\n value: pool_tree,\n visible: Boolean(pool_tree),\n },\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: 'Stale',\n value: (\n <>\n {Boolean('is_stale').toString() + ' '}\n <StaleJobIcon />\n </>\n ),\n visible: is_stale,\n },\n ],\n [\n {\n key: 'job_input',\n value: (\n <ClickableText\n onClick={() =>\n window.open(job.prepareCommandURL('get_job_input'))\n }\n >\n get_job_input\n </ClickableText>\n ),\n },\n {\n key: 'job_error',\n value: (\n <ClickableText\n onClick={() =>\n window.open(job.prepareCommandURL('get_job_stderr'))\n }\n >\n get_job_stderr\n </ClickableText>\n ),\n },\n ...(job?.state !== 'failed'\n ? []\n : [\n {\n key: 'fail_context',\n value: (\n <ClickableText\n onClick={() =>\n window.open(\n job.prepareCommandURL(\n 'get_job_fail_context',\n ),\n )\n }\n >\n get_job_fail_context\n </ClickableText>\n ),\n },\n ]),\n ...(job?.finishTime\n ? []\n : [\n {\n key: 'Job ssh',\n value: (\n <span className={block('meta-ssh')}>\n <span\n className={block('meta-ssh-cmd')}\n title={jobShellCommand}\n >\n {jobShellCommand}\n </span>\n <ClipboardButton\n view={'flat-secondary'}\n text={jobShellCommand}\n size={'s'}\n />\n </span>\n ),\n },\n ]),\n {\n key: 'Job trace',\n value: (\n <Link target=\"_blank\" href={traceUrl!}>\n {traceTitle}\n </Link>\n ),\n visible: Boolean(traceUrl),\n },\n ],\n ]}\n />\n\n <div className={block('tabs')}>\n <Tabs {...tabsProps} active={DEFAULT_TAB} routed size={UI_TAB_SIZE} />\n </div>\n\n <Switch>\n <Route path={`${path}/${Tab.ATTRIBUTES}`}>\n <Yson\n className={block('attributes')}\n value={attributes}\n settings={settings}\n folding\n extraTools={\n <YsonDownloadButton\n value={attributes}\n settings={settings}\n name={`attributes_job_${id}`}\n />\n }\n />\n </Route>\n <Route path={`${path}/${Tab.DETAILS}`}>\n <Details />\n </Route>\n <Route path={`${path}/${Tab.STATISTICS}`}>\n <Statistics />\n </Route>\n <Route path={`${path}/${Tab.SPECIFICATION}`}>\n <Specification className={block('specification')} jobID={jobID} />\n </Route>\n <Route path={`${path}/:tab`}>\n <Placeholder />\n </Route>\n <Redirect from={url} to={`${path}/${DEFAULT_TAB}`} />\n </Switch>\n </div>\n </ErrorBoundary>\n );\n}\n\nfunction useJobProfilingUrl({\n operationId,\n jobId,\n pool_tree,\n has_trace,\n cluster,\n}: {\n operationId?: string;\n jobId?: string;\n cluster: string;\n has_trace?: boolean;\n pool_tree?: string;\n}) {\n const {job_trace_url_template: {url_template, title = 'Open trace', enforce_for_trees} = {}} =\n useSelector(getClusterUiConfig);\n return React.useMemo(() => {\n const allowTrace = has_trace || 0 <= enforce_for_trees?.indexOf(pool_tree!)!;\n\n if (!allowTrace || !cluster || !operationId || !jobId || !url_template) {\n return {};\n }\n return {\n url: formatByParams(url_template, {\n operationId,\n jobId,\n cluster,\n }),\n title,\n };\n }, [cluster, operationId, jobId, url_template, title, enforce_for_trees, pool_tree, has_trace]);\n}\n","import {useDispatch, useSelector} from 'react-redux';\nimport {useRouteMatch} from 'react-router';\nimport React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../components/LoadDataHandler/LoadDataHandler';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport JobGeneral from '../../../pages/job/JobGeneral/JobGeneral';\nimport {Loader} from '@gravity-ui/uikit';\n\nimport {abortAndReset, loadJobData} from '../../../store/actions/job/general';\nimport {useUpdater} from '../../../hooks/use-updater';\nimport {RootState} from '../../../store/reducers';\nimport {RouteInfo} from '../../../pages/job/Job';\n\nimport './JobDetails.scss';\n\nconst block = cn('job-detail');\n\nexport default function JobDetails() {\n const match = useRouteMatch<RouteInfo>();\n const dispatch = useDispatch();\n\n const {operationID, jobID} = match.params;\n const {loading, loaded, error, errorData} = useSelector(\n (state: RootState) => state.job.general,\n );\n const initialLoading = loading && !loaded;\n\n const {updateFn, destructFn} = React.useMemo(() => {\n return {\n updateFn: () => dispatch(loadJobData(operationID, jobID)),\n destructFn: () => dispatch(abortAndReset()),\n };\n }, [dispatch, operationID, jobID]);\n\n useUpdater(updateFn, {destructFn});\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <div className={block('content', {loading: initialLoading})}>\n {initialLoading ? (\n <Loader />\n ) : (\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <JobGeneral />\n </LoadDataHandler>\n )}\n </div>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport {Route, Switch, useRouteMatch} from 'react-router';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\nimport JobDetails from '../../pages/job/JobDetails/JobDetails';\n\nexport interface RouteInfo {\n operationID: string;\n jobID: string;\n}\n\nexport default function Job() {\n const match = useRouteMatch<RouteInfo>();\n\n return (\n <div className=\"elements-main-section\">\n <ErrorBoundary>\n <Switch>\n <Route path={`${match.path}/:operationID/:jobID`}>\n <JobDetails />\n </Route>\n </Switch>\n </ErrorBoundary>\n </div>\n );\n}\n","import filter_ from 'lodash/filter';\nimport map_ from 'lodash/map';\nimport sortBy_ from 'lodash/sortBy';\n\nimport unipika from '../../common/thor/unipika';\nimport ypath from '../../common/thor/ypath';\n\nimport CancelHelper from '../cancel-helper';\nimport {YTApiId, ytApiV3Id} from '../../rum/rum-wrap-api';\n\nexport const pathEditorRequests = new CancelHelper();\n\nfunction prepareSuggestions(initialPath, parentPath, children) {\n let suggestions = map_(children, (child) => {\n const prepared = {};\n\n prepared.parentPath = parentPath;\n prepared.childPath = '/' + unipika.decode(ypath.getValue(child));\n prepared.path = prepared.parentPath + prepared.childPath;\n prepared.type = ypath.getValue(child, '/@type');\n prepared.dynamic = ypath.getValue(child, '/@dynamic');\n prepared.targetPathBroken = ypath.getValue(child, '/@broken');\n\n return prepared;\n });\n\n suggestions = sortBy_(suggestions, 'childPath');\n\n return suggestions;\n}\n\nexport function preparePath(currentPath) {\n return ypath.YPath.create(currentPath, 'absolute').toSubpath(-2).stringify();\n}\n\nexport function loadSuggestions(path, customFilter) {\n const parentPath = preparePath(path);\n\n return ytApiV3Id\n .list(YTApiId.pathEditorLoadSuggestions, {\n parameters: {path: parentPath, attributes: ['type', 'dynamic']},\n cancellation: pathEditorRequests.saveCancelToken,\n })\n .then(ypath.getValue)\n .then((nodes) => prepareSuggestions(path, parentPath, nodes))\n .then((suggestions) => (customFilter ? customFilter(suggestions) : suggestions));\n}\n\nexport function filterByCurrentPath(currentPath, suggestions) {\n const path = currentPath.toLowerCase();\n\n return filter_(suggestions, (child) => {\n const hasPartOfPath = child.path.startsWith(path);\n const isShowCurrentChild = child.path !== path || child.type === 'map_node';\n\n return hasPartOfPath && isShowCurrentChild;\n });\n}\n\nexport function getNextSelectedIndex(suggestion, selectedIndex) {\n if (selectedIndex === -1 || selectedIndex === suggestion.length - 1) {\n return 0;\n }\n\n return selectedIndex + 1;\n}\n\nexport function getPrevSelectedIndex(suggestions, selectedIndex) {\n if (selectedIndex === -1 || selectedIndex === 0) {\n return suggestions.length - 1;\n }\n\n return selectedIndex - 1;\n}\n\nexport function getCompletedPath(suggestion) {\n return suggestion.type === 'map_node' ? suggestion.path + '/' : suggestion.path;\n}\n\nexport function getIconNameForType(type, targetPathBroken) {\n const icons = {\n document: 'file-alt',\n string_node: 'file-alt',\n int64_node: 'file-alt',\n uint64_node: 'file-alt',\n double_node: 'file-alt',\n boolean_node: 'file-alt',\n map_node: 'folder',\n scheduler_pool_tree_map: 'folder-tree',\n scheduler_pool: 'tasks',\n tablet_cell: 'th',\n journal: 'book',\n table: 'th',\n table_dynamic: 'dyn-th',\n replicated_table: 'th',\n chaos_replicated_table: 'chaos-replicated-table',\n replication_log_table: 'replication-log-table',\n file: 'file',\n topmost_transaction_map: 'folder',\n transaction_map: 'folder',\n transaction: 'code-branch',\n nested_transaction: 'code-branch',\n link: ypath.getBoolean(targetPathBroken) ? 'unlink' : 'link',\n rootstock: 'link',\n portal_entrance: 'link',\n cell_node: 'circle',\n cell_node_map: 'far circle',\n sys_node: 'cog',\n access_control_object_namespace_map: 'acl-namespace-map',\n access_control_object_namespace: 'acl-namespace',\n access_control_object: 'acl-object',\n };\n\n const icon = type ? icons[type] || 'not-suported' : 'eye-slash';\n\n return icon;\n}\n","const SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M5.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0\" clipRule=\"evenodd\" /></svg>;\nexport default SvgChevronRight;"],"names":["AttributesButton","_ref","_ref$view","view","_ref$size","size","rest","_objectWithoutProperties","_excluded","_jsx","Button","_objectSpread","children","Icon","awesome","b","block","message","className","_jsxs","props","xmlns","fill","viewBox","fillRule","d","clipRule","cn","ExpandButton","expanded","inline","toggleExpanded","all","showText","qa","titleExpanded","titleCollapsed","title","onClick","data","doubleShevronRightSvg","shevronRightSvg","ICON_BY_TYPE","_ICON_BY_TYPE","_defineProperty","SortIcon","_React$Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","concat","_this$props","order","onChange","allowUnordered","withUndefined","nextSortOrderValue","_createClass","key","value","_this$props2","this","label","hidden","icon","Tooltip","content","format","ReadableField","face","React","toolbarBlock","Toolbar","collapseTable","onTreeStateChange","expandTable","dispatch","useDispatch","handleFilterChange","useCallback","val","onFilterChange","isExpanded","treeState","Filter","debounce","helpUrl","HelpLink","url","mesureRowWidth","ctx","text","undefined","width","measureText","Math","max","ceil","TREE_ROOT_NAME","createMetricsEntry","prefix","name","path","prepareMetricsList","statistics","list","preparedList","leaves","forEach_","statistic","_typeof","values_","metricsChild","metricsLeaf","entry","createMetricsEntryLeaf","prepareStatisticTs","metricsList","metricsTree","hammer","treeList","prepareTree","attachTreeLeaves","leafEntry","LEVEL_OFFSET","Avg","item","attributes","count","sum","result","significantDigits","Number","NO_VALUE","StatisticTableStaticCell","_ref2","_item$attributes","aggregation","isLeafNode","Boolean","ExpandedCell","_ref3","itemState","toggleItemState","_ref3$minWidth","minWidth","renderValue","offsetStyle","paddingLeft","level","toggleItemAndTreeState","empty","style","collapsed","prepareTableProps","_ref4","columns","visibleColumns","reduce","ret","col","sort","align","theme","striped","computeKey","tree","sets","default","items","Object","keys","mode","useJobStatisticTable","_ref5","fontFamilies","_React$useState","_React$useState2","_slicedToArray","filter","setFilter","_React$useState3","_React$useState4","setTreeState","currentFilter","filteredTree","filterTree","indexOf","sortedTree","sortTree","field","asc","get","flattenTree","filterStatisticTree","_step","res","font","document","createElement","getContext","createCanvasContext","regular","_iterator","_createForOfIteratorHelper","s","n","done","iconsWidth","err","e","f","round","getMinWidth","StatisticTable","_ref6","virtual","fixedHeader","useSelector","getFontFamilies","_useJobStatisticTable","templates","_","_item$attributes2","__default__","columnName","tableProps","_toConsumableArray","ErrorBoundary","ElementsTableRow","css","headerClassName","fixed","renderText","settings","mix","elem","mods","textProps","asHTML","dangerouslySetInnerHTML","__html","unipika","decode","String","prepareTextProps","printColumnAsTimeDurationWithMs","column","getColumn","printColumnAsReadableField","printColumnAsTime","ColumnAsTime","printColumnAsError","error","Link","showErrorPopup","hideOopsMsg","asNumber","_templates","add","templateId","newTemplates","wrapRenderMethods","PathEditor","_Component","_props$defaultPath","state","suggestionsList","input","prevScope","hideSuggestions","setState","inputFocus","selectedIndex","handleInputChange","inputChange","debounceLoading","handleInputFocus","onFocus","setScope","handleInputBlur","onBlur","callCallback","handleKeyDown","event","keyCode","KeyCode","ARROW_DOWN","selectNextSuggestion","ARROW_UP","selectPrevSuggestion","ENTER","handleEnterClick","ESCAPE","handleEscClick","TAB","handleTabClick","renderItem","index","_this$state","actualSuggestions","type","dynamic","iconType","completedPath","getCompletedPath","isSelected","iconName","getIconNameForType","targetPathBroken","onMouseDown","preventDefault","selected","debounce_","defaultPath","loadSuggestionsList","customFilter","autoFocus","getScope","_setFocus","prevProps","disabled","current","removeActiveRequests","_this$input$current","focus","offsetWidth","cb","params","_this$state2","prevIndex","getPrevSelectedIndex","_this$state3","nextIndex","getNextSelectedIndex","_this$state4","onApply","inputPath","currentTarget","suggestion","find_","_this$input$current2","onCancel","blur","_this$props3","placeholder","hasClear","TextInput","onKeyDown","onUpdate","controlRef","ReactList","itemRenderer","errorMessage","ErrorMessage","_this$props4","suggestionsError","showErrors","_this$state5","inputWidth","isVisible","renderError","renderSuggestions","Popup","placement","onClose","anchorRef","open","offset","ref","renderInput","renderPopup","assign","suggestions","filterByCurrentPath","isEmpty_","Component","defaultProps","connect","navigation","pathEditor","getState","currentParentPath","_getState$navigation$","suggestionsPath","suggestionsLoaded","preparePath","FETCH_SUGGESTIONS","FAILURE","REQUEST","loadSuggestions","then","SUCCESS","pathEditorRequests","removeAllRequests","CANCELLED","requests","CancelHelper","loadJobSpecification","jobID","_getState$job$specifi","job","specification","omitNodeDirectory","omitInputTableSpecs","omitOutputTableSpecs","JOB","yt","getJobSpec","parameters","job_id","omit_node_directory","omit_input_table_specs","omit_output_table_specs","cancellation","saveCancelToken","req","_ypath$getValues","ypath","getValues","_ypath$getValues2","scheduler_job_spec_ext","job_spec_ext","code","abortAndReset","prepareStatisticsIO","obj","table","mapValues_","getJob","general","getPipesIO","createSelector","getValue","getTotalTimeIO","output","read","write","sumBy_","getJobStatisticsIO","_ref2$output","total","map","outputStatistics","last","isTotal","push","getUserCpuTimeSum","getNumberDeprecated","getWaitCpuTimeSum","getGpuUtilizationSum","getGpuPowerSum","getGpuMemorySum","getTimeExec","getAverageUserCpuTime","userCpuTimeSum","timeExec","getAverageWaitCpuTime","waitCpuTimeSum","getGpuDevices","getAverageGpuUtilization","gpuUtilizationSum","getAverageGpuPower","gpuPowerSum","getAverageGpuMemory","gpuMemorySum","getJobPivotKeysData","inputTableSpecs","flatten_","map_","tableSpec","chunkSpecs","chunkSpec","id","fromKey","fromIndex","from","toKey","toIndex","to","getJobActions","actions","modalKey","successMessage","confirmationText","PLEASE_PROCEED_TEXT","optionMessage","optionValue","optionType","options","interrupt_timeout","_useSelector","handleNodeDirectoryChange","changeOmitNodeDirectory","blurByEvent","handleInputTableSpecsChange","changeOmitInputTableSpecs","handleOutputTableSpecsChange","changeOmitOutputTableSpecs","Checkbox","checked","target","Specification","_useSelector2","loading","loaded","errorData","useEffect","initialLoading","getJobSpecificationYsonSettings","Loader","LoadDataHandler","Yson","folding","extraTools","Flex","alignItems","gap","YsonDownloadButton","getRawStatistic","Statistics","isDocsAllowed","UIFactory","docsUrls","JobBreadcrumbs","match","useRouteMatch","cluster","getCluster","history","useHistory","_useState","useState","_useState2","editMode","changeEditMode","_useState3","_useState4","changeJobID","operationID","handleEditClick","handleInputKeyDown","evt","Page","other","ClipboardButton","ElementsTable","ElementsTableRaw","getTableColumns","caption","getTableTemplates","renderKey","prettyprint","break","indent","split","join","slice","PivotKeys","pivotKeysItems","useMemo","isLoading","toaster","Toaster","IdAddress","operationId","address","jobCompetitionId","host","isSpeculativeJob","routed","id_address","Statuslabel","Competitors","competitors","Error","jobCompetitionID","listJobs","operation_id","job_competition_id","jobs","autoHiding","tableId","OPERATION_JOBS_TABLE_ID","headingBlock","busy_time","bytes","idle_time","prepareStatistic","selectItems","averageUserCpuTime","averageWaitCpuTime","gpuDevices","averageGpuUtilization","averageGpuPower","averageGpuMemory","compact_","isFinite_","digits","StatisticsIO","MetaTable","rowClassName","renderEvents","events","collapsibleSize","CollapsibleSection","Events","renderCompetitors","hasCompetitors","Speculative","renderPivotKeys","includes_","Details","details","UI_COLLAPSIBLE_SIZE","loadJobData","clusterConfig","getCurrentClusterConfig","codeBlock","getAdditionalActions","openJobShellModal","openDumpContextModal","infoActions","action","window","prepareCommandURL","performAction","currentOption","actionAction","interrupt","abortJob","abort","abandon","abandonJob","getActionAction","dumpJobContext","ActionBlock","update","setTimeout","intermediateAction","promptAction","handler","JobActions","jobId","jobShellCommand","jobShellVisible","setJobShellVisible","closeJobShellModal","onCopyClick","copy","dumpContextPath","setDumpContextPath","_useState5","_useState6","dumpContextVisible","setDumpContextVisible","onPathEditorChange","closeDumpContextModal","onDumpContextConfirm","additionalActions","DropdownMenu","Dialog","Header","Body","Footer","onClickButtonCancel","onClickButtonApply","textButtonCancel","textButtonApply","showError","preset","listenKeyEnter","JobGeneral","_job$archive_features","getJobGeneralYsonSettings","_useJobProfilingUrl","pool_tree","has_trace","_useSelector2$job_tra","getClusterUiConfig","job_trace_url_template","_useSelector2$job_tra2","url_template","_useSelector2$job_tra3","enforce_for_trees","formatByParams","useJobProfilingUrl","archive_features","traceUrl","traceTitle","finishTime","startTime","duration","monitoring_descriptor","is_stale","operationUrl","OPERATIONS","tabsProps","makeTabProps","Tab","renderPlaque","Label","Template","withClipboard","Id","ChartLink","makeUrlForNodeIO","Value","makeUrlForMonitoringDescriptor","visible","Time","time","valueFormat","_Fragment","toString","StaleJobIcon","ClickableText","href","Tabs","active","DEFAULT_TAB","UI_TAB_SIZE","Switch","Route","ATTRIBUTES","DETAILS","STATISTICS","SPECIFICATION","Placeholder","Redirect","JobDetails","_match$params","_React$useMemo","updateFn","destructFn","useUpdater","Job","currentPath","YPath","create","toSubpath","stringify","parentPath","ytApiV3Id","YTApiId","pathEditorLoadSuggestions","nodes","initialPath","child","prepared","childPath","sortBy_","prepareSuggestions","toLowerCase","filter_","hasPartOfPath","startsWith","isShowCurrentChild","icons","string_node","int64_node","uint64_node","double_node","boolean_node","map_node","scheduler_pool_tree_map","scheduler_pool","tablet_cell","journal","table_dynamic","replicated_table","chaos_replicated_table","replication_log_table","file","topmost_transaction_map","transaction_map","transaction","nested_transaction","link","getBoolean","rootstock","portal_entrance","cell_node","cell_node_map","sys_node","access_control_object_namespace_map","access_control_object_namespace","access_control_object"],"sourceRoot":""}