@ytsaurus/ui 1.64.0 → 1.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/public/build/assets-manifest.json +37 -37
- package/dist/public/build/css/{577.b41224cd.chunk.css → 577.f8556dcc.chunk.css} +2 -2
- package/dist/public/build/css/577.f8556dcc.chunk.css.map +1 -0
- package/dist/public/build/css/{cluster-menu.1242e46d.chunk.css → cluster-menu.d8cafef3.chunk.css} +2 -2
- package/dist/public/build/css/cluster-menu.d8cafef3.chunk.css.map +1 -0
- package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css +2 -0
- package/dist/public/build/css/cluster-page-wrapper.4610796b.chunk.css.map +1 -0
- package/dist/public/build/css/main.fb5dcfa3.css +10 -0
- package/dist/public/build/css/{main.b2af1626.css.map → main.fb5dcfa3.css.map} +1 -1
- package/dist/public/build/js/2081.b642c3c2.chunk.js +2 -0
- package/dist/public/build/js/{2081.56ca6548.chunk.js.map → 2081.b642c3c2.chunk.js.map} +1 -1
- package/dist/public/build/js/4016.37d0a2f0.chunk.js +3 -0
- package/dist/public/build/js/4016.37d0a2f0.chunk.js.map +1 -0
- package/dist/public/build/js/{6729.91ef11dc.chunk.js → 6729.6403cc56.chunk.js} +2 -2
- package/dist/public/build/js/6729.6403cc56.chunk.js.map +1 -0
- package/dist/public/build/js/{7077.7dab612c.chunk.js → 7077.fb18710a.chunk.js} +2 -2
- package/dist/public/build/js/7077.fb18710a.chunk.js.map +1 -0
- package/dist/public/build/js/acl.19d28cd7.chunk.js +2 -0
- package/dist/public/build/js/acl.19d28cd7.chunk.js.map +1 -0
- package/dist/public/build/js/{cluster-page-wrapper.eddde18f.chunk.js → cluster-page-wrapper.697b0741.chunk.js} +2 -2
- package/dist/public/build/js/cluster-page-wrapper.697b0741.chunk.js.map +1 -0
- package/dist/public/build/js/job.bddddc9e.chunk.js +2 -0
- package/dist/public/build/js/job.bddddc9e.chunk.js.map +1 -0
- package/dist/public/build/js/main.5d8871a8.js +3 -0
- package/dist/public/build/js/main.5d8871a8.js.map +1 -0
- package/dist/public/build/js/navigation-flow.c43f2927.chunk.js +2 -0
- package/dist/public/build/js/navigation-flow.c43f2927.chunk.js.map +1 -0
- package/dist/public/build/js/navigation.e4272357.chunk.js +2 -0
- package/dist/public/build/js/navigation.e4272357.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.7752c183.js → runtime.8fed68b1.js} +2 -2
- package/dist/public/build/js/{runtime.7752c183.js.map → runtime.8fed68b1.js.map} +1 -1
- package/dist/public/build/js/system.92b7afc7.chunk.js +2 -0
- package/dist/public/build/js/system.92b7afc7.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +32 -32
- package/dist/public/favicon-dorn-yellow.png +0 -0
- package/dist/public/favicon-rubber.png +0 -0
- package/dist/server/configs/e2e/local.js +4 -0
- package/package.json +2 -2
- package/dist/public/build/css/577.b41224cd.chunk.css.map +0 -1
- package/dist/public/build/css/cluster-menu.1242e46d.chunk.css.map +0 -1
- package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css +0 -2
- package/dist/public/build/css/cluster-page-wrapper.0b6a786f.chunk.css.map +0 -1
- package/dist/public/build/css/main.b2af1626.css +0 -10
- package/dist/public/build/js/2081.56ca6548.chunk.js +0 -2
- package/dist/public/build/js/4016.03291f63.chunk.js +0 -3
- package/dist/public/build/js/4016.03291f63.chunk.js.map +0 -1
- package/dist/public/build/js/6729.91ef11dc.chunk.js.map +0 -1
- package/dist/public/build/js/7077.7dab612c.chunk.js.map +0 -1
- package/dist/public/build/js/acl.cd1fe761.chunk.js +0 -2
- package/dist/public/build/js/acl.cd1fe761.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.eddde18f.chunk.js.map +0 -1
- package/dist/public/build/js/job.31c91355.chunk.js +0 -2
- package/dist/public/build/js/job.31c91355.chunk.js.map +0 -1
- package/dist/public/build/js/main.693c4cb1.js +0 -3
- package/dist/public/build/js/main.693c4cb1.js.map +0 -1
- package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js +0 -2
- package/dist/public/build/js/navigation-flow.f7bcba21.chunk.js.map +0 -1
- package/dist/public/build/js/navigation.c8c7b9cc.chunk.js +0 -2
- package/dist/public/build/js/navigation.c8c7b9cc.chunk.js.map +0 -1
- package/dist/public/build/js/system.57ed0f9d.chunk.js +0 -2
- package/dist/public/build/js/system.57ed0f9d.chunk.js.map +0 -1
- /package/dist/public/build/js/{4016.03291f63.chunk.js.LICENSE.txt → 4016.37d0a2f0.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.693c4cb1.js.LICENSE.txt → main.5d8871a8.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(51806)),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=d?"Collapse All":"Collapse",h=d?"Expand All":"Expand";return(0,i.jsxs)(a.$,{className:u({inline:o},t),view:"flat-secondary",title:n?p:h,onClick:c,children:[m&&(n?p:h)+" ",(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]||{}}}},11211:(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;return(0,a.A)(this,n),(r=t.call(this,e)).hideSuggestions=function(){r.setState({inputFocus:!1,selectedIndex:-1})},r.handleInputChange=function(e){r.setState({path:e,selectedIndex:-1,inputChange:!0}),r.debounceLoading(e)},r.handleInputFocus=function(e){var t=r.props.onFocus,n=r.state.path;m.A.setScope("path-editor"),r.setState({inputFocus:!0}),null==t||t(e,{path:n})},r.handleInputBlur=function(){var e=r.props.onBlur,t=r.state.path;m.A.setScope(r.prevScope),r.hideSuggestions(),r.callCallback(e,t)},r.handleKeyDown=function(e){switch(e.keyCode){case k.DD.ARROW_DOWN:r.selectNextSuggestion();break;case k.DD.ARROW_UP:r.selectPrevSuggestion();break;case k.DD.ENTER:r.handleEnterClick(e);break;case k.DD.ESCAPE:r.handleEscClick();break;case k.DD.TAB:r.handleTabClick(e)}},r.renderItem=function(e,t){var n=r.state,a=n.selectedIndex,s=n.actualSuggestions[e],o=s.type,i=s.dynamic,l="table"===o&&i?"table_dynamic":o,u=(0,_.DC)(s),c=e===a?"yes":"no",d=(0,_.c5)(l,s.targetPathBroken);return(0,N.jsxs)("div",{onMouseDown:function(e){r.handleInputChange(u),e.preventDefault()},className:w("item",{selected:c}),children:[(0,N.jsx)(A.A,{awesome:d}),(0,N.jsx)("span",{className:w("item-path"),children:s.path})]},t)},r.suggestionsList=i.createRef(),r.input=i.createRef(),r.debounceLoading=h()(r.debounceLoading,300),r.prevScope=null,r.state={path:e.defaultPath,actualSuggestions:[],inputFocus:!1,inputChange:!1,selectedIndex:-1},r}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(){this.input.current.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.target.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=this.props.onCancel;this.input.current.blur(),this.callCallback(e)}},{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;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=(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:[void 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(78259),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.A.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(51806),O=n(60620),P=n(52797),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.A.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.A.getNumberDeprecated(e,"/statistics/user_job/cpu/user/sum")})),ve=(0,X.Mz)(de,(function(e){return j.A.getNumberDeprecated(e,"/statistics/user_job/cpu/wait/sum")})),ge=(0,X.Mz)(de,(function(e){return j.A.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_utilization_gpu/sum")})),je=(0,X.Mz)(de,(function(e){return j.A.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_power/sum")})),be=(0,X.Mz)(de,(function(e){return j.A.getNumberDeprecated(e,"/statistics/user_job/gpu/cumulative_memory/sum")})),xe=(0,X.Mz)(de,(function(e){return j.A.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.A.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.A.getValue(e,"/input_table_specs");return Z()(ae()(t,(function(e){var t=j.A.getValue(e,"/chunk_specs");return ae()(t,(function(e){var t=j.A.getValue(e,"/chunk_id"),n=ae()(j.A.getValue(e,"/lower_limit/key"),(function(e){return j.A.getValue(e)})),a=[j.A.getValue(e,"/lower_limit/row_index")],r=n&&0!==n.length?n:a,s=ae()(j.A.getValue(e,"/upper_limit/key"),(function(e){return j.A.getValue(e)})),o=[j.A.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.A.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.A.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(11211),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(78259),d=n(76365),m=n(64714),p=new d.A;function h(e){return c.A.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.A.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.A.getValue(e)),n.path=n.parentPath+n.childPath,n.type=c.A.getValue(e,"/@type"),n.dynamic=c.A.getValue(e,"/@dynamic"),n.targetPathBroken=c.A.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.A.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.31c91355.chunk.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"js/job.31c91355.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.js","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, 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};\n\nexport const ExpandButton: FC<Props> = ({\n className,\n expanded,\n inline,\n toggleExpanded,\n all,\n showText,\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 >\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} from 'react';\nimport {connect} from 'react-redux';\nimport ReactList from 'react-list';\nimport PropTypes from 'prop-types';\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 {KeyCode} from '../../constants/index';\n\nimport './PathEditor.scss';\n\nconst debounceTime = 300;\nconst b = block('path-editor');\n\nexport class PathEditor extends Component {\n static propTypes = {\n // from connect\n suggestions: PropTypes.arrayOf(\n PropTypes.shape({\n path: PropTypes.string.isRequired,\n targetPathBroken: PropTypes.bool,\n type: PropTypes.string,\n }),\n ).isRequired,\n suggestionsError: PropTypes.bool,\n errorMessage: PropTypes.string,\n\n loadSuggestionsList: PropTypes.func.isRequired,\n removeActiveRequests: PropTypes.func.isRequired,\n // from parent component\n className: PropTypes.string,\n placeholder: PropTypes.string,\n customFilter: PropTypes.func,\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onApply: PropTypes.func,\n onCancel: PropTypes.func,\n defaultPath: PropTypes.string,\n disabled: PropTypes.bool,\n autoFocus: PropTypes.bool,\n hasClear: PropTypes.bool,\n showErrors: PropTypes.bool,\n };\n\n static defaultProps = {\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 constructor(props) {\n super(props);\n\n this.suggestionsList = React.createRef();\n this.input = React.createRef();\n\n this.debounceLoading = debounce_(this.debounceLoading, debounceTime);\n this.prevScope = null;\n\n this.state = {\n path: props.defaultPath,\n actualSuggestions: [],\n inputFocus: false,\n inputChange: false,\n selectedIndex: -1,\n };\n }\n\n static getDerivedStateFromProps(props, state) {\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 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) {\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 callCallback(cb, ...params) {\n if (typeof cb === 'function') {\n return cb(...params);\n }\n }\n\n debounceLoading(path) {\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) => {\n this.setState({path, selectedIndex: -1, inputChange: true});\n this.debounceLoading(path);\n };\n\n handleInputFocus = (e) => {\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(evt) {\n evt.preventDefault();\n\n const {selectedIndex, actualSuggestions} = this.state;\n const {onApply} = this.props;\n const inputPath = evt.target.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, (item, 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(evt) {\n evt.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 = (evt) => {\n const key = evt.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(evt);\n break;\n case KeyCode.ESCAPE:\n this.handleEscClick();\n break;\n case KeyCode.TAB:\n this.handleTabClick(evt);\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, 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 = (evt) => {\n this.handleInputChange(completedPath);\n evt.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 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 =\n (actualSuggestions.length || (suggestionsError && showErrors)) && inputFocus;\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={[undefined, 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}) => ({\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","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","hideSuggestions","setState","inputFocus","selectedIndex","handleInputChange","inputChange","debounceLoading","handleInputFocus","onFocus","state","setScope","handleInputBlur","onBlur","prevScope","callCallback","handleKeyDown","evt","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","suggestionsList","input","debounce_","defaultPath","loadSuggestionsList","customFilter","autoFocus","getScope","_setFocus","prevProps","disabled","current","removeActiveRequests","focus","offsetWidth","cb","params","_this$state2","prevIndex","getPrevSelectedIndex","_this$state3","nextIndex","getNextSelectedIndex","_this$state4","onApply","inputPath","target","suggestion","find_","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","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","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":""}
|