@ytsaurus/ui 1.74.0 → 1.75.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +37 -37
- package/dist/public/build/css/{main.c862588f.css → main.2d3cbfcd.css} +2 -2
- package/dist/public/build/css/main.2d3cbfcd.css.map +1 -0
- package/dist/public/build/css/scheduling.00ec9179.chunk.css +2 -0
- package/dist/public/build/css/scheduling.00ec9179.chunk.css.map +1 -0
- package/dist/public/build/js/3302.b8eb7c9c.chunk.js +3 -0
- package/dist/public/build/js/3302.b8eb7c9c.chunk.js.map +1 -0
- package/dist/public/build/js/{6729.a66f3554.chunk.js → 6729.da9aa02f.chunk.js} +2 -2
- package/dist/public/build/js/6729.da9aa02f.chunk.js.map +1 -0
- package/dist/public/build/js/{7959.fedd6b2e.chunk.js → 7959.95ebd185.chunk.js} +2 -2
- package/dist/public/build/js/7959.95ebd185.chunk.js.map +1 -0
- package/dist/public/build/js/acl.c948c339.chunk.js +2 -0
- package/dist/public/build/js/acl.c948c339.chunk.js.map +1 -0
- package/dist/public/build/js/{chyt.8c82dc61.chunk.js → chyt.7f99f87d.chunk.js} +2 -2
- package/dist/public/build/js/chyt.7f99f87d.chunk.js.map +1 -0
- package/dist/public/build/js/{components.a4b032ee.chunk.js → components.bbe331cb.chunk.js} +2 -2
- package/dist/public/build/js/components.bbe331cb.chunk.js.map +1 -0
- package/dist/public/build/js/job.4fc50056.chunk.js +2 -0
- package/dist/public/build/js/job.4fc50056.chunk.js.map +1 -0
- package/dist/public/build/js/main.7981a440.js +3 -0
- package/dist/public/build/js/main.7981a440.js.map +1 -0
- package/dist/public/build/js/{manage-tokens.1888a00d.chunk.js → manage-tokens.286a4da9.chunk.js} +2 -2
- package/dist/public/build/js/{manage-tokens.1888a00d.chunk.js.map → manage-tokens.286a4da9.chunk.js.map} +1 -1
- package/dist/public/build/js/{navigation-flow.18200e3a.chunk.js → navigation-flow.eeb01518.chunk.js} +2 -2
- package/dist/public/build/js/navigation-flow.eeb01518.chunk.js.map +1 -0
- package/dist/public/build/js/navigation.d891266d.chunk.js +2 -0
- package/dist/public/build/js/navigation.d891266d.chunk.js.map +1 -0
- package/dist/public/build/js/{query-navigation.0ac62e3b.chunk.js → query-navigation.9964bfcf.chunk.js} +2 -2
- package/dist/public/build/js/query-navigation.9964bfcf.chunk.js.map +1 -0
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js +2 -0
- package/dist/public/build/js/query-tracker.06cc4fdc.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.8d1e4e78.js → runtime.481a6d3a.js} +2 -2
- package/dist/public/build/js/{runtime.8d1e4e78.js.map → runtime.481a6d3a.js.map} +1 -1
- package/dist/public/build/manifest.json +32 -32
- package/dist/server/components/oauth.d.ts +2 -1
- package/dist/server/components/oauth.js +15 -7
- package/dist/server/components/vcs/GitlabApi.d.ts +1 -1
- package/dist/server/components/vcs/GitlabApi.js +1 -1
- package/dist/server/controllers/oauth-login.js +8 -3
- package/dist/server/controllers/vcs.js +7 -1
- package/package.json +2 -2
- package/dist/public/build/css/main.c862588f.css.map +0 -1
- package/dist/public/build/css/scheduling.40c36db6.chunk.css +0 -2
- package/dist/public/build/css/scheduling.40c36db6.chunk.css.map +0 -1
- package/dist/public/build/js/3302.dff164d9.chunk.js +0 -3
- package/dist/public/build/js/3302.dff164d9.chunk.js.map +0 -1
- package/dist/public/build/js/6729.a66f3554.chunk.js.map +0 -1
- package/dist/public/build/js/7959.fedd6b2e.chunk.js.map +0 -1
- package/dist/public/build/js/acl.205964ad.chunk.js +0 -2
- package/dist/public/build/js/acl.205964ad.chunk.js.map +0 -1
- package/dist/public/build/js/chyt.8c82dc61.chunk.js.map +0 -1
- package/dist/public/build/js/components.a4b032ee.chunk.js.map +0 -1
- package/dist/public/build/js/job.1bfebd02.chunk.js +0 -2
- package/dist/public/build/js/job.1bfebd02.chunk.js.map +0 -1
- package/dist/public/build/js/main.03a8e7a9.js +0 -3
- package/dist/public/build/js/main.03a8e7a9.js.map +0 -1
- package/dist/public/build/js/navigation-flow.18200e3a.chunk.js.map +0 -1
- package/dist/public/build/js/navigation.18741a4d.chunk.js +0 -2
- package/dist/public/build/js/navigation.18741a4d.chunk.js.map +0 -1
- package/dist/public/build/js/query-navigation.0ac62e3b.chunk.js.map +0 -1
- package/dist/public/build/js/query-tracker.8e7f7688.chunk.js +0 -2
- package/dist/public/build/js/query-tracker.8e7f7688.chunk.js.map +0 -1
- /package/dist/public/build/js/{3302.dff164d9.chunk.js.LICENSE.txt → 3302.b8eb7c9c.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.03a8e7a9.js.LICENSE.txt → main.7981a440.js.LICENSE.txt} +0 -0
@@ -1,2 +0,0 @@
|
|
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),r=n(18801),s=(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,r.A)(e,l);return(0,i.jsx)(s.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),r=n(60620),s=n(64922),o=(0,a.A)("error-message");const i=function(e){var t=e.message,n=e.className;return(0,s.jsxs)("div",{className:o(null,n),children:[(0,s.jsx)(r.A,{awesome:"exclamation-circle"}),(0,s.jsx)("span",{className:o("message-text"),children:t})]})}},78466:(e,t,n)=>{n.d(t,{L:()=>c}),n(77810);var a=n(92423),r=n(72679),s=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)(r.I,{className:u("expand",{expanded:n}),data:d?l:s.A,size:16})]})}},38226:(e,t,n)=>{n.d(t,{A:()=>j});var a,r=n(29121),s=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,r.A)(this,n);for(var a=arguments.length,s=new Array(a),o=0;o<a;o++)s[o]=arguments[o];return(e=t.call.apply(t,[this].concat(s))).onClick=function(){var t=e.props,n=t.order,a=t.onChange,r=t.allowUnordered,s=t.withUndefined;a&&a((0,h.$N)(n,r,s))},e}return(0,s.A)(n,[{key:"render",value:function(){var e=this.props,t=e.className,n=e.label,a=e.order,r=e.hidden,s=g[a||""];return(0,f.jsxs)("span",{className:v({hidden:r},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:s,face:"solid"})})]})}}]),n}(u.Component)},82564:(e,t,n)=>{n.d(t,{DC:()=>O});var a=n(40319),r=n(13322),s=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)(),r=(0,o.useCallback)((function(t){return a(e.onFilterChange(t))}),[a]),s="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:r})}),(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:s,toggleExpanded:s?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 r=I(n,t);a.children[r.path]=r,a=D(e,a,r.path)}else{var s=function(e,t,n){var a=I(e,t);return a.value=n,a}(n,t,e);a.leaves[s.path]=s}})),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,r=e.minWidth,s=void 0===r?void 0:r,i=e.renderValue,l=o.useMemo((function(){return{minWidth:s,paddingLeft:((null==t?void 0:t.level)||0)*z}}),[t.level,s]),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(""),r=(0,s.A)(a,2),i=r[0],l=r[1],u=o.useState("expanded"),d=(0,s.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,r=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')),s=(0,A.A)(e);try{for(s.s();!(n=s.n()).done;){var o=n.value,i=o.isLeafNode?20:40,l=y(r,o.attributes.name);a=Math.max(a,l+i+o.level*z)}}catch(e){s.e(e)}finally{s.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,s=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:s})}),(0,r.A)(s));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),r=n(40319),s=(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,r.A)({},t.mix.mods))):n();var a=function(e,t){var n={};return t?n.dangerouslySetInnerHTML={__html:e}:n.children=s.A.decode(String(e)),n}(e,t.asHTML),i=t.title||e;return(0,c.jsx)("span",(0,r.A)((0,r.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),r=n(12937),s=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,s.A)(n,e);var t=(0,o.A)(n);function n(e){var r,s;return(0,a.A)(this,n),(s=t.call(this,e)).state=void 0,s.suggestionsList=i.createRef(),s.input=i.createRef(),s.prevScope="",s.hideSuggestions=function(){s.setState({inputFocus:!1,selectedIndex:-1})},s.handleInputChange=function(e){s.setState({path:e,selectedIndex:-1,inputChange:!0}),s.debounceLoading(e)},s.handleInputFocus=function(e){var t=s.props.onFocus,n=s.state.path;m.A.setScope("path-editor"),s.setState({inputFocus:!0}),null==t||t(e,{path:n})},s.handleInputBlur=function(){var e=s.props.onBlur,t=s.state.path;m.A.setScope(s.prevScope),s.hideSuggestions(),s.callCallback(e,t)},s.handleKeyDown=function(e){switch(e.keyCode){case k.DD.ARROW_DOWN:s.selectNextSuggestion();break;case k.DD.ARROW_UP:s.selectPrevSuggestion();break;case k.DD.ENTER:s.handleEnterClick(e);break;case k.DD.ESCAPE:s.handleEscClick();break;case k.DD.TAB:s.handleTabClick(e)}},s.renderItem=function(e,t){var n=s.state,a=n.selectedIndex,r=n.actualSuggestions[e],o=r.type,i=r.dynamic,l="table"===o&&i?"table_dynamic":o,u=(0,_.DC)(r),c=e===a?"yes":"no",d=(0,_.c5)(l,r.targetPathBroken);return(0,N.jsxs)("div",{onMouseDown:function(e){s.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:r.path})]},t)},s.debounceLoading=h()(s.debounceLoading,300),s.state={path:null!==(r=e.defaultPath)&&void 0!==r?r:"",actualSuggestions:[],inputFocus:!1,inputChange:!1,selectedIndex:-1},s}return(0,r.A)(n,[{key:"componentDidMount",value:function(){var e=this.props,t=e.loadSuggestionsList,n=e.customFilter,a=e.autoFocus,r=this.state.path;this.prevScope=m.A.getScope(),r&&t(r,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,r=t.onChange;n(e,a),this.callCallback(r,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,r=this.props.onApply,s=e.currentTarget.value;if(-1===n)this.setState({path:s,selectedIndex:-1}),this.callCallback(r,s);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,r=e.disabled,s=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:r,controlRef:this.input,value:s})}},{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,r=a.actualSuggestions,s=a.inputFocus,o=this.inputWidth||0,i=Boolean((r.length||t&&n)&&s),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 r,s=a().navigation.pathEditor,o=s.suggestionsPath,i=s.suggestionsLoaded;try{r=(0,_.$A)(e)}catch(e){return n({type:C.v.FAILURE,data:{message:e.message}})}if(o!==r||!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:r}})})).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:()=>Ut});var a=n(77810),r=n(64965),s=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(9736),v=n(84092),g=n.n(v),j=n(29746),b=n(52699),x=n(76365),A=new x.A;function y(e){return function(t,n){var a=n().job.specification,r=a.omitNodeDirectory,s=a.omitInputTableSpecs,o=a.omitOutputTableSpecs;return t({type:b.lG}),g().v4.getJobSpec({parameters:{job_id:e,omit_node_directory:r,omit_input_table_specs:s,omit_output_table_specs:o},cancellation:A.saveCancelToken}).then((function(e){var n=j.Ay.getValues(e,["/scheduler_job_spec_ext","/job_spec_ext"]),a=(0,f.A)(n,2),r=a[0],s=a[1];t({type:b.Jv,data:{specification:null!=s?s:r}})})).catch((function(e){e.code===g().codes.CANCELLED?t({type:b.NF}):t({type:b.E4,data:{error:e}})}))}}function _(){return function(e){A.removeAllRequests(),e({type:b.NF})}}var C=n(4386),k=n(64922),N=(0,i.A)("job-specification");function w(e){var t=e.jobID,n=(0,o.wA)(),r=(0,o.d4)((function(e){return e.job.specification})),s=r.omitNodeDirectory,i=r.omitInputTableSpecs,l=r.omitOutputTableSpecs,u=(0,a.useCallback)((function(e){n(function(e){return function(t){A.removeAllRequests(),t({type:b.Mz}),t(y(e))}}(t)),S(e)}),[n,t]),c=(0,a.useCallback)((function(e){n(function(e){return function(t){A.removeAllRequests(),t({type:b.Bx}),t(y(e))}}(t)),S(e)}),[n,t]),d=(0,a.useCallback)((function(e){n(function(e){return function(t){A.removeAllRequests(),t({type:b.iw}),t(y(e))}}(t)),S(e)}),[n,t]);return(0,k.jsxs)("div",{className:N("toolbar"),children:[(0,k.jsx)(p.S,{size:"l",content:"Omit node directory",checked:s,onChange:u}),(0,k.jsx)(p.S,{size:"l",content:"Omit input table specs",checked:i,onChange:c}),(0,k.jsx)(p.S,{size:"l",content:"Omit output table specs",checked:l,onChange:d})]})}function S(e){e.target.blur()}function I(e){var t=e.jobID,n=(0,o.wA)(),r=(0,o.d4)((function(e){return e.job.specification})),i=r.loading,u=r.loaded,c=r.error,d=r.errorData,p=r.specification;(0,a.useEffect)((function(){return n(y(t)),function(){n(_())}}),[n,t]);var f=i&&!u,v=(0,o.d4)(C.lD);return(0,k.jsx)(s.A,{children:(0,k.jsx)("div",{className:N(),children:(0,k.jsx)("div",{className:N("content",{loading:f}),children:f?(0,k.jsx)(h.a,{}):(0,k.jsx)(l.A,{loaded:u,error:c,errorData:d,children:(0,k.jsx)(m.A,{folding:!0,settings:v,value:p,extraTools:(0,k.jsx)(w,{jobID:t})})})})})})}var D=n(35074),T=function(e){return e.job.general.job.statistics},E=n(82564),z=n(29081),F=n(7787);function M(){var e=(0,o.d4)(T);return(0,k.jsx)(E.DC,{helpUrl:(0,z.cK)()?F.Ay.docsUrls["problems:jobstatistics"]:void 0,statistic:e,visibleColumns:["min","max","last","sum","count"]})}var L=n(28640),B=n(65692),R=n(2211),O=n(60620),P=n(27497),U=n(26264),V=(0,i.A)("job-breadcrumbs");function W(e){var t=e.id,n=e.className,i=(0,r.W5)(),l=(0,o.d4)(P.dB),c=(0,r.W6)(),d=(0,a.useState)(!1),m=(0,f.A)(d,2),p=m[0],h=m[1],v=(0,a.useState)(i.params.jobID),g=(0,f.A)(v,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)}),[]),N=(0,a.useCallback)((function(e){e.keyCode===U.DD.ENTER&&(h(!1),c.push("/".concat(l,"/").concat(U.YW.JOB,"/").concat(A)))}),[A,c,l]),w={onBlur:C};return(0,k.jsx)(s.A,{children:(0,k.jsx)("div",{className:V(null,n),children:p?(0,k.jsx)("div",{className:V("input"),children:(0,k.jsx)(B.k,(0,u.A)((0,u.A)({},w),{},{autoFocus:!0,size:"m",value:j,onUpdate:_,onKeyDown:N}))}):(0,k.jsxs)("div",{className:V("id"),children:[(0,k.jsx)("span",{className:"elements-ellipsis",children:t})," ",(0,k.jsx)(L.A,{view:"flat-secondary",text:t,size:"m"})," ",(0,k.jsx)(R.A,{view:"flat-secondary",size:"m",onClick:y,children:(0,k.jsx)(O.A,{awesome:"pencil"})})]})})})}var J=n(80545),q=n(36161),H=n(65193),K=n.n(H),Y=n(82060),$=n(11394),Q=n(18801),X=n(18472),G=n(4176),Z=n.n(G),ee=n(36146),te=n.n(ee),ne=n(27528),ae=n.n(ne),re=n(95668),se=n.n(re),oe=n(30002),ie=n.n(oe),le=n(33497),ue=["total"],ce=function(e,t,n){return(0,u.A)({table:void 0!==n?"".concat(t,":").concat(n):t},te()(e,(function(e){return e.sum})))},de=function(e){return e.job.general.job},me=(0,X.Mz)(de,(function(e){return j.Ay.getValue(e,"/statistics/user_job/pipes")||{}})),pe=(0,X.Mz)(me,(function(e){var t=e.input,n=e.output;return{read:null==t?void 0:t.idle_time.sum,write:se()(ie()(n),(function(e){return e.busy_time.sum}))}})),he=(0,X.Mz)(me,(function(e){var t=e.input,n=e.output,a=n.total,r=(0,Q.A)(n,ue),s={input:[ce(t,"input",0)],output:ie()(r).map((function(e,t){return ce(e,"output",t)}))};if(a){var o=ce(a,"Total");o.isTotal=!0,s.output.push(o)}return s})),fe=(0,X.Mz)(de,(function(e){return j.Ay.getNumberDeprecated(e,"/statistics/user_job/cpu/user/sum")})),ve=(0,X.Mz)(de,(function(e){return j.Ay.getNumberDeprecated(e,"/statistics/user_job/cpu/wait/sum")})),ge=(0,X.Mz)(de,(function(e){return j.Ay.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_utilization_gpu/sum")})),je=(0,X.Mz)(de,(function(e){return j.Ay.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_power/sum")})),be=(0,X.Mz)(de,(function(e){return j.Ay.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_memory/sum")})),xe=(0,X.Mz)(de,(function(e){return j.Ay.getNumberDeprecated(e,"/statistics/time/exec/sum")})),Ae=(0,X.Mz)([fe,xe],(function(e,t){return e/t})),ye=(0,X.Mz)([ve,xe],(function(e,t){return e/t})),_e=(0,X.Mz)(de,(function(e){return j.Ay.getNumberDeprecated(e,"/exec_attributes/gpu_devices/length")})),Ce=(0,X.Mz)([ge,xe],(function(e,t){return e/t})),ke=(0,X.Mz)([je,xe],(function(e,t){return e/t})),Ne=(0,X.Mz)([be,xe],(function(e,t){return e/t})),we=(0,X.Mz)([function(e){return e.job.specification.specification}],(function(e){var t=j.Ay.getValue(e,"/input_table_specs");return Z()(ae()(t,(function(e){var t=j.Ay.getValue(e,"/chunk_specs");return ae()(t,(function(e){var t=j.Ay.getValue(e,"/chunk_id"),n=ae()(j.Ay.getValue(e,"/lower_limit/key"),(function(e){return j.Ay.getValue(e)})),a=[j.Ay.getValue(e,"/lower_limit/row_index")],r=n&&0!==n.length?n:a,s=ae()(j.Ay.getValue(e,"/upper_limit/key"),(function(e){return j.Ay.getValue(e)})),o=[j.Ay.getValue(e,"/upper_limit/row_index")];return{id:t,from:r,to:s&&0!==s.length?s:o}}))})))})),Se=(0,X.Mz)(de,(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:le.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:le.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:le.e}),t})),Ie=n(3659),De=(0,i.A)("job-pivot-keys"),Te=$.A,Ee=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"}},ze=function(){var e=function(e,t){var n=Ie.A.prettyprint(e[t],{break:!1,indent:0,asHTML:!1}),a=n.split(",").join(",\n");return(0,k.jsxs)("div",{className:"unipika",children:["[",(0,k.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 Fe(){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})),r=n.loading,s=n.loaded,i=n.error,u=n.errorData,c=(0,o.d4)(we);(0,a.useEffect)((function(){return e(y(t.id)),function(){e(_())}}),[e,t.id]);var d=(0,a.useMemo)(Ee,[]),m=(0,a.useMemo)(ze,[]);return(0,k.jsx)("div",{className:De({loading:r}),children:(0,k.jsx)(l.A,{loaded:s,error:i,errorData:u,children:(0,k.jsx)(Te,{size:"s",theme:"light",css:De(),virtual:!1,striped:!1,columns:d,isLoading:r,templates:m,items:c})})})}var Me=n(76426),Le=n(73822),Be=n(78894),Re=new x.A,Oe=new Be.I,Pe=n(34121),Ue=(0,i.A)("job-competitors"),Ve=$.A;function We(e){var t=e.job,n=e.operationId,r=(0,o.d4)(P.dB),s=j.Ay.getValues(t,["/id","/address","/job_competition_id"]),i=(0,f.A)(s,3),l=i[0],u=i[1],c=i[2],d=Le.A.format.Address(u),m=c&&c!==l;return(0,k.jsxs)("div",{children:[(0,k.jsxs)("span",{className:Ue("id","elements-monospace elements-ellipsis"),children:[(0,k.jsx)(L.A,{text:l,theme:"flat-secondary",size:"s",title:"Copy job id"}),(0,k.jsx)(Me.A,{routed:!0,url:"/".concat(r,"/job/").concat(n,"/").concat(l),theme:"primary",children:l})]}),(0,k.jsx)("br",{}),(0,k.jsxs)("span",{className:Ue("host","elements-monospace elements-ellipsis"),children:[(0,k.jsx)(L.A,{text:d,view:"flat-secondary",size:"s",title:"Copy host"}),d]}),m&&(0,k.jsxs)(a.Fragment,{children:[(0,k.jsx)("br",{}),(0,k.jsx)("span",{className:Ue("speculative-job-label","elements-monospace elements-ellipsis"),children:"Speculative job"})]})]})}var Je=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"}},qe=function(e){return{id_address:function(t){return(0,k.jsx)(We,{job:t,operationId:e})},state:function(e){return(0,k.jsx)(J.A,{label:e.state})}}};function He(){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,r=(0,o.d4)((function(e){return e.job.competitors})),i=r.loading,u=r.loaded,c=r.error,d=r.errorData,m=r.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)(Je,[]),v=(0,a.useMemo)((function(){return qe(h)}),[h]);return(0,a.useEffect)((function(){var t,n;e((t=h,n=p,function(e){return e({type:b.vm}),g().v3.listJobs({parameters:{operation_id:t,job_competition_id:n},cancellation:Re.saveCancelToken}).then((function(t){e({type:b.vp,data:{competitors:t.jobs}})})).catch((function(t){t.code===g().codes.CANCELLED?e({type:b.Pr}):(Oe.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:b._I,data:{error:t}}))}))}))}),[e,h,p]),(0,k.jsx)(s.A,{children:(0,k.jsx)("div",{className:Ue({loading:i}),children:(0,k.jsx)(l.A,{loaded:u,error:c,errorData:d,children:(0,k.jsx)(Ve,{size:"s",theme:"light",css:Ue(),virtual:!1,striped:!1,columns:f,isLoading:i,items:m,templates:v,computeKey:t,tableId:Pe.MV})})})})}var Ke=n(29347),Ye=n.n(Ke),$e=n(73831),Qe=n.n($e),Xe=(0,i.A)("job-statistics-io"),Ge=(0,i.A)("elements-heading"),Ze=$.A,et=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"}},tt=function(){var e=function(e,t){return Le.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")}}},nt=(0,X.Mz)([pe,Ae,ye,_e,Ce,ke,Ne],(function(e,t,n,a,r,s,o){var i=e.read,l=e.write;return Ye()([{key:"total time waiting to read data",value:Le.A.format.TimeDuration(i)},{key:"total time waiting to write data",value:Le.A.format.TimeDuration(l)},Qe()(t)&&{key:"average user cpu time per second",value:Le.A.format.Number(t,{digits:3})},Qe()(n)&&{key:"average wait cpu time per second",value:Le.A.format.Number(n,{digits:3})},{key:"gpu devices",value:Le.A.format.Number(a)},Qe()(r)&&{key:"average gpu utilization",value:Le.A.format.Percent(100*r)},Qe()(s)&&{key:"average gpu power",value:Le.A.format.Number(s,{digits:3})},Qe()(o)&&{key:"average gpu memory usage",value:Le.A.format.Bytes(o)}])}));function at(){var e=(0,o.d4)(he),t=e.input,n=e.output,r=(0,o.d4)(nt),s=(0,a.useMemo)(et,[]),i=(0,a.useMemo)((function(){return tt()}),[]);return(0,k.jsxs)("div",{className:Xe(),children:[(0,k.jsx)(D.Ay,{className:Xe("meta"),items:r}),(0,k.jsx)("div",{className:Ge({size:"m"},Xe("heading")),children:"Input"}),(0,k.jsx)(Ze,{size:"s",theme:"light",css:Xe(),items:t,virtual:!1,striped:!1,columns:s,templates:i}),n.length>0&&(0,k.jsxs)(a.Fragment,{children:[(0,k.jsx)("div",{className:Ge({size:"m"},Xe("heading")),children:"Output"}),(0,k.jsx)(Ze,{size:"s",theme:"light",css:Xe(),items:n,virtual:!1,striped:!1,columns:s,templates:i,rowClassName:function(e){return e.isTotal?Xe("row-total"):void 0}})]})]})}var rt=n(70917),st=n(70436),ot=n(62250),it=(0,i.A)("job-details");function lt(e,t){return e?(0,k.jsx)(st.A,{name:"Events",className:it("events"),size:t,children:(0,k.jsx)(rt.A,{events:e,type:"phase"})}):null}function ut(e,t){return e?(0,k.jsx)(st.A,{collapsed:!0,name:"Competitive jobs",className:it("speculative-jobs"),size:t,children:(0,k.jsx)(He,{})}):null}function ct(e,t){return K()(["reduce","join_reduce","sorted_merge"],e)?(0,k.jsx)(st.A,{collapsed:!0,name:"Pivot keys",className:it("pivot-keys"),size:t,children:(0,k.jsx)(Fe,{})}):null}function dt(){var e,t,n,a=(0,o.d4)((function(e){return e.job.general})),r=a.details,i=a.job,l=r.events;return(0,k.jsx)(s.A,{children:(0,k.jsxs)("div",{className:it(),children:[(null==l?void 0:l.length)>0&&(0,k.jsx)("div",{className:it("section"),children:lt(r.events,ot.Y1)}),(0,k.jsxs)("div",{className:it("section"),children:[(n=i.error,n?(0,k.jsx)("div",{className:it("result"),children:(0,k.jsx)(Y.A,{error:n})}):null),(e=i.statistics,t=ot.Y1,j.Ay.getValue(e,"/user_job/pipes")?(0,k.jsx)(st.A,{name:"Statistics",className:it("statistics"),size:t,children:(0,k.jsx)(at,{})}):null),ct(i.type,ot.Y1),ut(Boolean(i.hasCompetitors),ot.Y1)]})]})})}var mt=n(623),pt=n.n(mt),ht=n(55695),ft=n(50073),vt=n(19845),gt=new x.A;function jt(e,t){return function(n,a){n({type:b.M1});var r=(0,P.Si)(a());return g().v3.getJob({parameters:{operation_id:e,job_id:t},cancellation:gt.saveCancelToken}).then((function(e){n({type:b.s8,data:{job:e,clusterConfig:r}})})).catch((function(e){e.code===g().codes.CANCELLED?n({type:b.E}):n({type:b.V3,data:{error:e}})}))}}var bt=n(7313),xt=n(48971),At=new Be.I,yt=(0,i.A)("job-actions"),_t=(0,i.A)("elements-code"),Ct=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"}]]},kt=function(e){var t=e.currentOption,n=e.name,a=e.id,r=function(e){return{interrupt:g().v4.abortJob,abort:g().v4.abortJob,abandon:g().v4.abandonJob}[e]}(n),s={job_id:a};return t&&(s=(0,u.A)((0,u.A)({},s),{},{interrupt_timeout:t})),r(s)},Nt=function(e,t,n){var a={job_id:e,path:t};return g().v3.dumpJobContext(a).then((function(){At.add({theme:"success",autoHiding:!1,name:"dump job context",title:"Job context has been dumped.",content:(0,k.jsx)(Me.A,{url:"/".concat(n,"/navigation?path=").concat(t),children:t})})})).catch((function(e){At.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,xt.eW)(e)}}]})}))};function wt(e){var t=(0,o.wA)(),n=e.message||(0,k.jsxs)("span",{children:["Are you sure you want to ",(0,k.jsx)("strong",{children:e.name})," the job?"]}),r=(0,o.d4)((function(e){return e.job.general})).job,s=r.id,i=r.operationId,l=(0,a.useCallback)((function(){setTimeout((function(){return t(jt(i,s))}),5e3)}),[t,i,s]),c=(0,a.useCallback)((function(e){return t((0,bt.Jm)(e))}),[t]),d=(0,a.useCallback)((function(t){var n=t.currentOption,a=(0,u.A)((0,u.A)({},e),{},{currentOption:n,id:s});return kt(a).then(l)}),[s,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,k.jsxs)(R.A,{size:"m",onClick:m,view:e.theme||"outlined",className:yt("action"),title:Le.A.format.ReadableField(e.name),children:[(0,k.jsx)(O.A,{awesome:e.icon})," ",Le.A.format.ReadableField(e.name)]},e.name)}function St(e){var t=e.className,n=(0,o.d4)(de),r=(0,o.d4)((function(e){return e.job.general})).loaded,i=(0,o.d4)(P.dB),l=n.id,c="yt run-job-shell ".concat(l),d=(0,a.useState)(!1),m=(0,f.A)(d,2),p=m[0],h=m[1],v=(0,a.useCallback)((function(){return h(!0)}),[h]),g=(0,a.useCallback)((function(){return h(!1)}),[h]),j=(0,a.useCallback)((function(){pt()(c),g()}),[c,g]),b="//home",x=(0,a.useState)(b),A=(0,f.A)(x,2),y=A[0],_=A[1],C=(0,a.useState)(!1),N=(0,f.A)(C,2),w=N[0],S=N[1],I=(0,a.useCallback)((function(e){return _(e)}),[_]),D=(0,a.useCallback)((function(){return S(!0)}),[S]),T=(0,a.useCallback)((function(){return S(!1)}),[S]),E=(0,a.useCallback)((function(){Nt(l,y,i),T()}),[l,y,i,T]),z=(0,o.d4)(Se),F=(0,a.useMemo)((function(){return Ct(n,v,D)}),[n,v,D]);return r?(0,k.jsx)(s.A,{children:(0,k.jsxs)("div",{className:yt(null,t),children:[ae()(z,(function(e){return(0,k.jsx)(wt,(0,u.A)({},e))})),(0,k.jsx)(ht.r,{items:F}),(0,k.jsxs)(ft.l,{size:"m",open:p,onClose:g,children:[(0,k.jsx)(ft.l.Header,{caption:"Job shell"}),(0,k.jsx)(ft.l.Body,{children:(0,k.jsx)("div",{className:yt("code"),children:(0,k.jsx)("div",{className:_t({theme:"default"}),children:c})})}),(0,k.jsx)(ft.l.Footer,{onClickButtonCancel:g,onClickButtonApply:j,textButtonCancel:"Cancel",textButtonApply:"Copy",showError:!1,preset:"success",listenKeyEnter:!0})]}),(0,k.jsxs)(ft.l,{size:"m",open:w,onClose:T,children:[(0,k.jsx)(ft.l.Header,{caption:"Dump job context"}),(0,k.jsx)(ft.l.Body,{children:(0,k.jsx)("div",{className:yt("dump-context"),children:(0,k.jsx)(vt.A,{hasClear:!0,defaultPath:b,onChange:I})})}),(0,k.jsx)(ft.l.Footer,{onClickButtonCancel:T,onClickButtonApply:E,textButtonCancel:"Cancel",textButtonApply:"Confirm",showError:!1,preset:"success",listenKeyEnter:!0})]})]})}):null}var It=n(81970),Dt=n(83611),Tt=n(53332),Et=n(35441),zt=n(93209),Ft=n(42324),Mt=n(40860),Lt=(0,i.A)("job-general");function Bt(){var e,t=(0,o.d4)(P.dB),n=(0,r.W5)(),i=(0,o.d4)(C.cm),l=(0,o.d4)(de),p=(0,o.d4)((function(e){return e.job.general})),h=p.loaded,f=function(e){var t=e.operationId,n=e.jobId,r=e.pool_tree,s=e.has_trace,i=e.cluster,l=(0,o.d4)(P.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(s||0<=(null==p?void 0:p.indexOf(r)))&&i&&t&&n&&c?{url:(0,Et.j)(c,{operationId:t,jobId:n,cluster:i}),title:m}:{}}),[i,t,n,c,m,p,r,s])}({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,x=n.params,A=x.operationID,y=x.jobID,_=l.operationId,N=l.attributes,w=l.finishTime,S=l.startTime,T=l.duration,E=l.address,z=l.state,B=l.type,R=l.id,O=l.jobCompetitionId,V=l.monitoring_descriptor,H=l.pool_tree,K=l.is_stale,Y="/".concat(t,"/").concat(U.YW.OPERATIONS,"/").concat(A,"/jobs?jobId=").concat(y),$="/".concat(t,"/").concat(U.YW.JOB,"/").concat(A,"/").concat(y),Q=(0,Tt._4)($,b.oz),X=O&&O!==R,G="yt --proxy ".concat(t," run-job-shell ").concat(R);return(0,k.jsx)(s.A,{children:(0,k.jsxs)("div",{className:Lt(null,"elements-section"),children:[(0,k.jsxs)("div",{className:Lt("header"),children:[(0,k.jsxs)("span",{className:Lt("heading"),children:[Le.A.format.ReadableField(B)," job"]}),(0,k.jsx)(J.A,{label:z,renderPlaque:!0}),(0,k.jsx)(St,{className:Lt("actions")})]}),X&&(0,k.jsx)(It.A,{className:Lt("speculative-label"),text:"Speculative job",theme:"warning",type:"text"}),(0,k.jsx)(D.Ay,{className:Lt("meta"),items:[[{key:"operation id",value:(0,k.jsx)(D.Bj.Link,{url:Y,text:_,withClipboard:!0})},{key:"job id",value:(0,k.jsx)(W,{id:R,className:Lt("meta-breadcrumbs")})},{key:"host",value:(0,k.jsxs)("span",{className:Lt("meta-host"),children:[(0,k.jsx)(D.Bj.Id,{id:null==E?void 0:E.split(":")[0]}),(0,k.jsx)(Ft.A,{url:F.Ay.makeUrlForNodeIO(t,E)})]})},{key:"type",value:(0,k.jsx)(D.Bj.Value,{value:B})},{key:"Monitoring descriptor",value:(0,k.jsxs)("span",{className:Lt("meta-host"),children:[(0,k.jsx)(D.Bj.Id,{id:V}),(0,k.jsx)(Ft.A,{url:F.Ay.makeUrlForMonitoringDescriptor(t,{from:S,to:w},V)})]}),visible:Boolean(V)},{key:"Pool tree",value:H,visible:Boolean(H)}],[{key:"started",value:(0,k.jsx)(D.Bj.Time,{time:S,valueFormat:"DateTime"})},{key:"finished",value:(0,k.jsx)(D.Bj.Time,{time:w,valueFormat:"DateTime"})},{key:"duration",value:(0,k.jsx)(D.Bj.Time,{time:T,valueFormat:"TimeDuration"})},{key:"Stale",value:(0,k.jsxs)(k.Fragment,{children:[Boolean("is_stale").toString()+" ",(0,k.jsx)(Mt.q,{})]}),visible:K}],[{key:"job_input",value:(0,k.jsx)(zt.S,{onClick:function(){return window.open(l.prepareCommandURL("get_job_input"))},children:"get_job_input"})},{key:"job_error",value:(0,k.jsx)(zt.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,k.jsx)(zt.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,k.jsxs)("span",{className:Lt("meta-ssh"),children:[(0,k.jsx)("span",{className:Lt("meta-ssh-cmd"),title:G,children:G}),(0,k.jsx)(L.A,{view:"flat-secondary",text:G,size:"s"})]})}]),[{key:"Job trace",value:(0,k.jsx)(d.N,{target:"_blank",href:v,children:g}),visible:Boolean(v)}])]}),(0,k.jsx)("div",{className:Lt("tabs"),children:(0,k.jsx)(Dt.A,(0,u.A)((0,u.A)({},Q),{},{active:b._N,routed:!0,size:ot.jr}))}),(0,k.jsxs)(r.dO,{children:[(0,k.jsx)(r.qh,{path:"".concat($,"/").concat(b.oz.ATTRIBUTES),children:(0,k.jsx)(m.A,{value:N,settings:i,folding:!0})}),(0,k.jsx)(r.qh,{path:"".concat($,"/").concat(b.oz.DETAILS),children:(0,k.jsx)(dt,{})}),(0,k.jsx)(r.qh,{path:"".concat($,"/").concat(b.oz.STATISTICS),children:(0,k.jsx)(M,{})}),(0,k.jsx)(r.qh,{path:"".concat($,"/").concat(b.oz.SPECIFICATION),children:(0,k.jsx)(I,{jobID:y})}),(0,k.jsx)(r.qh,{path:"".concat($,"/:tab"),children:(0,k.jsx)(q.A,{})}),(0,k.jsx)(r.rd,{from:j,to:"".concat($,"/").concat(b._N)})]})]})})}var Rt=n(13685),Ot=(0,i.A)("job-detail");function Pt(){var e=(0,r.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(jt(i,u))},destructFn:function(){return t((function(e){gt.removeAllRequests(),e({type:b.E})}))}}}),[t,i,u]),j=g.updateFn,x=g.destructFn;return(0,Rt.Tt)(j,{destructFn:x}),(0,k.jsx)(s.A,{children:(0,k.jsx)("div",{className:Ot(),children:(0,k.jsx)("div",{className:Ot("content",{loading:v}),children:v?(0,k.jsx)(h.a,{}):(0,k.jsx)(l.A,{loaded:m,error:p,errorData:f,children:(0,k.jsx)(Bt,{})})})})})}function Ut(){var e=(0,r.W5)();return(0,k.jsx)("div",{className:"elements-main-section",children:(0,k.jsx)(s.A,{children:(0,k.jsx)(r.dO,{children:(0,k.jsx)(r.qh,{path:"".concat(e.path,"/:operationID/:jobID"),children:(0,k.jsx)(Pt,{})})})})})}},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),r=n.n(a),s=n(27528),o=n.n(s),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 r()(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:()=>s});var a=n(40319),r=n(64922);const s=function(e){return(0,r.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,r.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.1bfebd02.chunk.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"js/job.1bfebd02.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/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/store/selectors/job/detail.ts","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 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, 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';\n\ninterface SpecificationProps {\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 size=\"l\"\n content=\"Omit node directory\"\n checked={omitNodeDirectory}\n onChange={handleNodeDirectoryChange}\n />\n\n <Checkbox\n size=\"l\"\n content=\"Omit input table specs\"\n checked={omitInputTableSpecs}\n onChange={handleInputTableSpecsChange}\n />\n\n <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({jobID}: SpecificationProps) {\n const dispatch = useDispatch();\n\n const {loading, loaded, error, errorData, specification} = useSelector(\n (state: RootState) => state.job.specification,\n );\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()}>\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={<Toolbar jobID={jobID} />}\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 \n <ClipboardButton view=\"flat-secondary\" text={id} size=\"m\" />\n \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 {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, {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 \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) => (\n <ActionBlock {...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';\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 value={attributes} settings={settings} folding />\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 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","_useSelector","handleNodeDirectoryChange","changeOmitNodeDirectory","blurByEvent","handleInputTableSpecsChange","changeOmitInputTableSpecs","handleOutputTableSpecsChange","changeOmitOutputTableSpecs","Checkbox","checked","target","Specification","_useSelector2","loading","loaded","errorData","useEffect","initialLoading","getJobSpecificationYsonSettings","Loader","LoadDataHandler","Yson","folding","extraTools","getRawStatistic","general","Statistics","isDocsAllowed","UIFactory","docsUrls","JobBreadcrumbs","id","match","useRouteMatch","cluster","getCluster","history","useHistory","_useState","useState","_useState2","editMode","changeEditMode","_useState3","_useState4","changeJobID","operationID","handleEditClick","handleInputKeyDown","evt","push","Page","other","ClipboardButton","prepareStatisticsIO","obj","table","mapValues_","getJob","getPipesIO","createSelector","getValue","getTotalTimeIO","output","read","write","sumBy_","getJobStatisticsIO","_ref2$output","total","map","outputStatistics","last","isTotal","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","fromKey","fromIndex","from","toKey","toIndex","to","getJobActions","actions","modalKey","successMessage","confirmationText","PLEASE_PROCEED_TEXT","optionMessage","optionValue","optionType","options","interrupt_timeout","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":""}
|