diff --git a/build/asset-manifest.json b/build/asset-manifest.json index 42bf6dd44202df9294ec4740f0acd6f1ca04b02e..fb09703f23778e1a1d9890b4efa9f9902006b6a0 100644 --- a/build/asset-manifest.json +++ b/build/asset-manifest.json @@ -1,23 +1,23 @@ { "files": { - "main.css": "/autosubmittest/static/css/main.223f5e23.chunk.css", - "main.js": "/autosubmittest/static/js/main.6cd86b5e.chunk.js", - "main.js.map": "/autosubmittest/static/js/main.6cd86b5e.chunk.js.map", - "runtime-main.js": "/autosubmittest/static/js/runtime-main.c125d10d.js", - "runtime-main.js.map": "/autosubmittest/static/js/runtime-main.c125d10d.js.map", - "static/js/2.3525fa8e.chunk.js": "/autosubmittest/static/js/2.3525fa8e.chunk.js", - "static/js/2.3525fa8e.chunk.js.map": "/autosubmittest/static/js/2.3525fa8e.chunk.js.map", - "index.html": "/autosubmittest/index.html", - "static/css/main.223f5e23.chunk.css.map": "/autosubmittest/static/css/main.223f5e23.chunk.css.map", - "static/js/2.3525fa8e.chunk.js.LICENSE.txt": "/autosubmittest/static/js/2.3525fa8e.chunk.js.LICENSE.txt", - "static/media/catload.d22d6312.gif": "/autosubmittest/static/media/catload.d22d6312.gif", - "static/media/dogload.7fd39847.gif": "/autosubmittest/static/media/dogload.7fd39847.gif", - "static/media/platyload.ad32cb95.gif": "/autosubmittest/static/media/platyload.ad32cb95.gif" + "main.css": "/presentation/static/css/main.223f5e23.chunk.css", + "main.js": "/presentation/static/js/main.87f9ffce.chunk.js", + "main.js.map": "/presentation/static/js/main.87f9ffce.chunk.js.map", + "runtime-main.js": "/presentation/static/js/runtime-main.e846712f.js", + "runtime-main.js.map": "/presentation/static/js/runtime-main.e846712f.js.map", + "static/js/2.3525fa8e.chunk.js": "/presentation/static/js/2.3525fa8e.chunk.js", + "static/js/2.3525fa8e.chunk.js.map": "/presentation/static/js/2.3525fa8e.chunk.js.map", + "index.html": "/presentation/index.html", + "static/css/main.223f5e23.chunk.css.map": "/presentation/static/css/main.223f5e23.chunk.css.map", + "static/js/2.3525fa8e.chunk.js.LICENSE.txt": "/presentation/static/js/2.3525fa8e.chunk.js.LICENSE.txt", + "static/media/catload.d22d6312.gif": "/presentation/static/media/catload.d22d6312.gif", + "static/media/dogload.7fd39847.gif": "/presentation/static/media/dogload.7fd39847.gif", + "static/media/platyload.ad32cb95.gif": "/presentation/static/media/platyload.ad32cb95.gif" }, "entrypoints": [ - "static/js/runtime-main.c125d10d.js", + "static/js/runtime-main.e846712f.js", "static/js/2.3525fa8e.chunk.js", "static/css/main.223f5e23.chunk.css", - "static/js/main.6cd86b5e.chunk.js" + "static/js/main.87f9ffce.chunk.js" ] } \ No newline at end of file diff --git a/build/index.html b/build/index.html index f8f39009b5a951d9ef771ce3f2fcf57047fe777b..da0f452be1c2c37d041e8abeab84f18e3a15fbcb 100644 --- a/build/index.html +++ b/build/index.html @@ -1 +1 @@ -
Queue: ".concat(ke(e.completedQueueTime,!1,4)," h.
\n ")+(t.includes("completedRunTime")?"Run: ".concat(ke(e.completedRunTime,!1,4)," h.
"):"")+(t.includes("failedQueueTime")?"Failed Queue: ".concat(ke(e.failedQueueTime,!1,4)," h.
"):"")+(t.includes("failedRunTime")?"Failed Run: ".concat(ke(e.failedRunTime,!1,4)," h.
"):""))}function j(){p.style("left","10px").style("top","10px").style("opacity",0)}function f(e){var t=S.background;switch(e){case"completedQueueTime":t=x.background;break;case"completedRunTime":t=N.background;break;case"failedQueueTime":t=R;break;case"failedCount":case"failedRunTime":t=k;break;default:t=S.background}return t}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=[t.includes("completedRunTime")?0:e.completedRunTime,t.includes("completedQueueTime")?0:e.completedQueueTime,t.includes("failedQueueTime")?0:e.failedQueueTime,t.includes("failedRunTime")?0:e.failedRunTime].filter((function(e){return Number.parseFloat(e)>0})),n=a.length;switch(n){case 3:return d;case 4:default:return o;case 2:return l;case 1:case 0:return i}}function O(e,n){var r=[!1===Rt.k("#queueTimeChart-".concat(a)).property("checked")||"completedQueueTime"===n&&!1===n?"completedQueueTime":"",!1===Rt.k("#runTimeChart-".concat(a)).property("checked")||"completedRunTime"===n&&!1===n?"completedRunTime":"",!1===Rt.k("#failedQueueTimeChart-".concat(a)).property("checked")||"failedQueueTime"===n&&!1===n?"failedQueueTime":"",!1===Rt.k("#failedRunTimeChart-".concat(a)).property("checked")||"qufailedRunue"===n&&!1===n?"failedRunTime":""];Rt.l(".newbar-".concat(a)).remove(),Rt.l(".newtext-".concat(a)).remove(),Rt.l(".xaxis-".concat(a)).remove(),m(t,r)}h.attr("width",r),h.attr("height",n),h.selectAll("*").remove(),m(t),Rt.k(this.svgElement).append("text").attr("x",310).attr("y",25).attr("font-size","1.5em").style("text-anchor","middle").text(this.props.title),Rt.k(this.svgElement).append("text").attr("x",310).attr("y",n-c+2).attr("dy","1.5em").style("text-anchor","middle").text(this.props.xtitle),Rt.k(this.svgElement).append("text").attr("transform","rotate(-90)").attr("x",-n/2).attr("y",c).attr("dy","-1.1em").style("text-anchor","middle").text("Job Name"),Rt.k("#queueTimeChart-".concat(a)).on("click",(function(){Rt.e.target.checked;O(0,Rt.e.target.value)})),Rt.k("#runTimeChart-".concat(a)).on("click",(function(){Rt.e.target.checked;O(0,Rt.e.target.value)})),Rt.k("#failedQueueTimeChart-".concat(a)).on("click",(function(){Rt.e.target.checked;O(0,Rt.e.target.value)})),Rt.k("#failedRunTimeChart-".concat(a)).on("click",(function(){Rt.e.target.checked;O(0,Rt.e.target.value)}))}},{key:"componentDidMount",value:function(){this.props.data.length>0&&this.handleBarChart()}},{key:"componentDidUpdate",value:function(){this.props.data.length>0&&this.handleBarChart()}},{key:"componentWillUnmount",value:function(){}},{key:"render",value:function(){if(0===this.props.data.length)return Object(oe.jsx)("div",{children:Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col",children:"No data"})})});var e=this.props.metrics.includes("completedQueueTime")?Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"chartMetricsQ",id:"queueTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"completedQueueTime"}),Object(oe.jsx)("label",{htmlFor:"queueTimeChart",className:"px-1 mx-1 rounded form-check-label ",style:{background:x.background},children:"Queue"})]}):null,t=this.props.metrics.includes("completedRunTime")?Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"chartMetricsR",id:"runTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"completedRunTime"}),Object(oe.jsx)("label",{htmlFor:"runTimeChart",className:"px-1 mx-1 rounded form-check-label text-white",style:{background:N.background},children:"Run"})]}):null,a=this.props.metrics.includes("failedQueueTime")?Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"chartMetricsFq",id:"failedQueueTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"failedQueueTime"}),Object(oe.jsx)("label",{htmlFor:"failedQueueTimeChart",className:"px-1 mx-1 rounded form-check-label",style:{background:R},children:"Failed Queue"})]}):null,n=this.props.metrics.includes("failedRunTime")?Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"chartMetricsFr",id:"failedRunTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"failedRunTime"}),Object(oe.jsx)("label",{htmlFor:"failedRunTimeChart",className:"px-1 mx-1 rounded form-check-label",style:{background:k},children:"Failed Run"})]}):null,r=this.props.metrics.includes("failedCount")?Object(oe.jsx)("div",{className:"form-check form-check-inline",children:Object(oe.jsx)("label",{className:"px-1 mx-1 rounded form-check-label",style:{background:k},children:"Failed Attempts"})}):null;return Object(oe.jsxs)("div",{children:[Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col",children:[e,t,a,n,r]})}),Object(oe.jsx)("svg",{version:"1.1",baseProfile:"full",xmlns:"http://www.w3.org/2000/svg",ref:this.setSvgElement})]})}}]),a}(n.Component),Dt=function(){var e=Object(n.useContext)(ut),t=e.statdata,a=e.loading,r=e.clearStats,s=e.isError,c=e.errorMessage,i=e.filterAppliedCount,o=e.filteredStatdata,l=e.timeframe;if(Object(n.useEffect)((function(){return function(){r()}}),[]),a)return Object(oe.jsx)("div",{className:"container",children:Object(oe.jsx)(le,{})});if(s)return Object(oe.jsx)("div",{className:"container",children:Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col-md-12 text-center p-3",children:c})})});if(!t)return Object(oe.jsx)("div",{className:"container",children:Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col",children:[Object(oe.jsxs)("p",{className:"lead",children:["Supply a Section (Type) in the appropriate textbox to filter the jobs that will be included in the query. Also, you can supply the ",Object(oe.jsx)("strong",{children:"Hours"})," value that determines how many hours before the current time you want to query."]}),Object(oe.jsxs)("p",{className:"lead",children:["Press ",Object(oe.jsx)("span",{className:"badge badge-primary",children:"Get Statistics"})," ","to generate the result. The main BarChart can be filtered using the supplied checkboxes."]})]})})});var d=Object(oe.jsxs)("span",{children:["Statistics from the time frame: ",Object(oe.jsx)("span",{className:"bg-secondary rounded px-1",children:"None"!==l.From?l.From:"Start of experiment"})," to ",Object(oe.jsx)("span",{className:"bg-secondary rounded px-1",children:l.To})]}),u=De(t),p=u.jobsSubmittedCount,h=u.jobsRunCount,m=u.jobsCompletedCount,b=u.jobsFailedCount,j=u.expectedConsumption,f=u.realConsumption,x=u.failedRealConsumption,g=u.expectedCpuConsumption,O=u.cpuConsumption,v=u.failedCpuConsumption,N=u.totalQueueTime,y=u.cpuConsumptionPercentage,A=De(o),S=Object(oe.jsxs)("table",{className:"table table-sm table-bordered mb-0",children:[Object(oe.jsx)("caption",{children:"Considers number of jobs and retrials."}),Object(oe.jsx)("thead",{className:"thead-dark",children:Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"col",className:"pl-2",children:"Description"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Count"}),i>0&&Object(oe.jsxs)("th",{scope:"col",className:"text-right pr-2",children:["Count ",Object(oe.jsx)("sup",{children:"(*)"})]})]})}),Object(oe.jsxs)("tbody",{children:[Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Submitted"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:p}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.jobsSubmittedCount})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Run"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:h}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.jobsRunCount})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Completed"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:m}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.jobsCompletedCount})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Failed"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:b}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.jobsFailedCount})]})]})]}),E=Object(oe.jsxs)("table",{className:"table table-sm table-bordered mb-0",children:[Object(oe.jsx)("caption",{children:"Considers the number of processors requested by the job (and retrials) multiplied by the corresponding running time."}),Object(oe.jsx)("thead",{className:"thead-dark",children:Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"col",className:"pl-2",children:"Description"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Hours"}),i>0&&Object(oe.jsxs)("th",{scope:"col",className:"text-right pr-2",children:["Hours ",Object(oe.jsx)("sup",{children:"(*)"})]})]})}),Object(oe.jsxs)("tbody",{children:[Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Expected CPU Consumption"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:g}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.expectedCpuConsumption})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"CPU Consumption"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:O}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.cpuConsumption})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Failed CPU Consumption"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:v}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.failedCpuConsumption})]})]})]}),C=Object(oe.jsxs)("table",{className:"table table-sm table-bordered mb-0",children:[Object(oe.jsx)("caption",{children:"Considers the running time of the jobs and retrials."}),Object(oe.jsx)("thead",{className:"thead-dark",children:Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"col",className:"pl-2",children:"Description"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Hours"}),i>0&&Object(oe.jsxs)("th",{scope:"col",className:"text-right pr-2",children:["Hours ",Object(oe.jsx)("sup",{children:"(*)"})]})]})}),Object(oe.jsxs)("tbody",{children:[Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Expected Consumption"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:j}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.expectedConsumption})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Real Consumption"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:f}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.realConsumption})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",className:"pl-2",children:"Failed Real Consumption"}),Object(oe.jsx)("td",{className:"text-right pr-2",children:x}),i>0&&Object(oe.jsx)("td",{className:"text-right pr-2",children:A.failedRealConsumption})]})]})]});return Object(oe.jsxs)("div",{className:"container",children:[t&&Object(oe.jsxs)("div",{className:"container border rounded my-1 py-2",children:[Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col text-center",children:[Object(oe.jsx)("p",{className:"h3",children:d}),Object(oe.jsxs)("p",{className:"lead",children:[Object(oe.jsxs)("span",{children:["CPU Consumption ",Object(oe.jsx)("span",{className:"bg-secondary rounded px-1",children:"".concat(y," %")})," ",i>0&&Object(oe.jsxs)("span",{className:"bg-secondary rounded px-1",children:["".concat(A.cpuConsumptionPercentage," %"),Object(oe.jsx)("sup",{children:"(*)"})]})]}),Object(oe.jsxs)("span",{className:"pl-3",children:["Total Queue Time ",Object(oe.jsx)("span",{className:"bg-secondary rounded px-1",children:"".concat(N," hours")})," ",i>0&&Object(oe.jsxs)("span",{className:"bg-secondary rounded px-1",children:["".concat(A.totalQueueTime," hours"),Object(oe.jsx)("sup",{children:"(*)"})]})]})]})]})}),Object(oe.jsxs)("div",{className:"row ",children:[Object(oe.jsx)("div",{className:"col",children:S}),Object(oe.jsx)("div",{className:"col",children:C}),Object(oe.jsx)("div",{className:"col",children:E})]})]}),o&&Object(oe.jsxs)("div",{className:"row py-4",children:[Object(oe.jsx)("div",{className:"col-md-6 scroll-x text-right",children:Object(oe.jsx)(kt,{data:o,title:"Statistics",metrics:["completedQueueTime","completedRunTime","failedQueueTime","failedRunTime"],xtitle:"Hours",clearStats:r,helperId:"4",filterCount:i})}),Object(oe.jsx)("div",{className:"col-md-6 scroll-x",children:Object(oe.jsx)(kt,{data:o,title:"Failed Attempts per Job",metrics:["failedCount"],xtitle:"Attempts",clearStats:r,helperId:"1",filterCount:i})})]})]})},_t=function(){var e=Object(n.useContext)(ut),t=Object(n.useContext)(ie),a=e.getExperimentStats,r=e.statdata,s=e.loading,c=e.clearStats,i=e.applyRegExToJobDataSet,o=t.experiment,l=Object(n.useState)(""),d=Object(p.a)(l,2),u=d[0],h=d[1],m=Object(n.useState)(""),b=Object(p.a)(m,2),j=b[0],f=b[1],x=Object(n.useState)(""),g=Object(p.a)(x,2),O=g[0],v=g[1];return Object(oe.jsx)("div",{className:"card-header p-1",children:Object(oe.jsxs)("div",{className:"d-flex flex-wrap row-hl",children:[Object(oe.jsx)("div",{className:"ml-auto item-hl",children:!r&&o&&!1===t.loading&&Object(oe.jsx)("form",{onSubmit:function(e){e.preventDefault(),a(o.expid,j,O)},className:"form",children:Object(oe.jsxs)("div",{className:"input-group input-group-sm",children:[Object(oe.jsx)("input",{className:"form-control",type:"text",name:"section",placeholder:"Section. Ex. SIM",onChange:function(e){return v(e.target.value)}}),Object(oe.jsx)("input",{className:"form-control",type:"number",min:"0",name:"hours",placeholder:"Hours",onChange:function(e){return f(e.target.value)}}),Object(oe.jsx)("div",{className:"input-group-append",children:Object(oe.jsx)("input",{type:"submit",value:"Get Statistics",className:"btn btn-primary",disabled:s,"data-toggle":"tooltip","data-placement":"bottom",title:"Gets the statistics for the Section and Hours values provided."})})]})})}),r&&Object(oe.jsx)("div",{className:"item-hl mr-1 minimum-w-filter",children:Object(oe.jsx)("form",{onSubmit:function(e){e.preventDefault(),i(u)},className:"form",children:Object(oe.jsxs)("div",{className:"input-group input-group-sm",children:[Object(oe.jsx)("input",{type:"text",name:"regExp",placeholder:"Filter using a regular expression",onChange:function(e){return h(e.target.value)},className:"form-control",text:""}),Object(oe.jsx)("div",{className:"input-group-append",children:Object(oe.jsx)("input",{type:"submit",className:"btn btn-dark",value:"Filter","data-toggle":"tooltip","data-placement":"bottom",title:"Filters the list of jobs according to the regular expression."})})]})})}),r&&Object(oe.jsx)("div",{className:"item-hl",children:Object(oe.jsx)("form",{onSubmit:function(e){e.preventDefault(),f(""),v(""),c()},className:"form",children:Object(oe.jsx)("div",{className:"",children:Object(oe.jsx)("input",{type:"submit",value:"Clear Statistics",className:"btn btn-dark btn-sm"})})})})]})})},It=function(e){var t=e.target,a=void 0===t?"manual-graph":t,r=Object(n.useContext)(ze),s=Object(n.useContext)(ie),c=r.selection,i=r.updateGraphSelectedNodes,o=s.canSelect;return c&&!o?Object(oe.jsxs)(n.Fragment,{children:[Object(oe.jsx)("button",{className:"btn btn-sm btn-primary",type:"button","data-toggle":"modal","data-target":"#command"+a,onClick:function(e){e.preventDefault(),i()},children:Object(oe.jsx)("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Generate a command/text to change the status of the selected jobs on the Graph.",children:Object(oe.jsx)("strong",{children:"Change Status"})})}),Object(oe.jsx)(Ke,{source:"graph-only",target:a})]}):null},Pt=function(e){var t=e.source,a=Object(n.useContext)(ie),r=Object(n.useContext)(ze),s=Object(n.useContext)(de),c=Object(n.useContext)(tt),i=a.totalJobs,o=null;switch(t){case"tree":var l=s.treedata,d=s.currentRunIdOnTree;i===l.total||d||(o="The number of jobs in the experiment tree is different than the number of jobs in your current run. This might be due to a change in the config files of your experiment while Autosubmit was already running.");break;case"graph":i!==r.data.total_jobs&&(o="The number of jobs in the experiment graph is different than the number of jobs in your current run. This might be due to a change in the config files of your experiment while Autosubmit was already running.");break;case"lighter":i!==c.totalCount&&(o="The number of jobs in the experiment quick representation is different than the number of jobs in your current run. This might be due to a change in the config files of your experiment while Autosubmit was already running.");break;default:o=null}return o&&null!==o?Object(oe.jsx)("span",{className:"badge badge-danger","data-toggle":"tooltip","data-placement":"bottom",title:o,children:Object(oe.jsx)("b",{children:"ALERT"})}):null},Lt=function(){var e=Object(n.useContext)(ze),t=e.searchJobInGraph,a=e.foundNodes,r=e.loadingSearchJob,s=e.data,c=e.navigateTo,i=e.displayJobInfoPanel,o=e.setJobInfoPanelVisibility,l=Object(n.useState)(""),d=Object(p.a)(l,2),u=d[0],h=d[1],m=Object(n.useState)(""),b=Object(p.a)(m,2),j=b[0],f=b[1],x=function(e){return function(t){t.preventDefault(),o(e)}},g=function(e){return function(t){if(t.preventDefault(),a){var n=j+e;n>=0&&n".concat(e.name,"
\nQueue: ").concat(be(e.queue),"
\nRun: ").concat(be(e.running),"
\n").concat(t,": ").concat(e[t],"
\n "))}function h(){u.style("left","10px").style("top","10px").style("opacity",0)}Rt.k(this.svgElement).append("g").attr("transform","translate(0,"+(this.height-this.padding)+")").call(l),Rt.k(this.svgElement).append("g").attr("transform","translate(40)").call(d),Rt.k(this.svgElement).attr("width",this.width).attr("height",this.height).selectAll("circle").data(this.data).enter().append("circle").attr("cx",(function(e){return o(n(r(e,t),c))})).attr("cy",(function(e){return i(Number.parseFloat(e[t]))})).attr("fill",(function(t){return e.colorScale(t.JPSY)})).attr("r",4).on("mousemove",p).on("touchstart",p).on("mouseout",h).on("touchend",h),Rt.k(this.svgElement).append("text").attr("x",this.width/2).attr("y",this.height-.7*this.padding).attr("dy","1em").style("text-anchor","middle").text(("ASYPD"===t?"Queue + Run":"Run")+" time in "+(c>1200?"minutes":"seconds")),Rt.k(this.svgElement).append("text").attr("transform","rotate(-90)").attr("x",-this.height/2).attr("y",.8*this.padding).attr("dy","-1em").style("text-anchor","middle").text(t),Rt.k(this.svgElement).append("text").attr("x",this.width/2).attr("y",.2*this.padding).attr("dy","1.5em").style("text-anchor","middle").style("font-weight","bold").text(a)}},{key:"componentDidMount",value:function(){this.props.data.length>0&&(this.handleScatterPlot(),this.applyLegendPlot())}},{key:"render",value:function(){return 0===this.props.data.length?Object(oe.jsx)("div",{children:Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col",children:"No data"})})}):Object(oe.jsx)("div",{className:"scroll-x",children:Object(oe.jsx)("svg",{version:"1.1",baseProfile:"full",xmlns:"http://www.w3.org/2000/svg",ref:this.setSvgElement})})}}]),a}(n.Component),Kt=function(e){Object(o.a)(a,e);var t=Object(l.a)(a);function a(e){var n;return Object(c.a)(this,a),(n=t.call(this,e)).svgElement=null,n.setSvgElement=function(e){n.svgElement=e},n}return Object(i.a)(a,[{key:"handleScatterPlot",value:function(){var e=this.props.data,t=this.props.attributeX,a=this.props.attributeY,n=this.props.titleX,r=this.props.mainTitle,s=this.props.uniqueId,c=550,i=550,o=30,l=Rt.j().domain(Rt.f(e,(function(e){return e[a]}))).range([520,o]),d=Rt.j().domain(Rt.f(e,(function(e){return e[t]}))).range([40,520]),u=Rt.a(d).tickSize(-490).tickSizeOuter(0),p=Rt.b(l).tickSize(-480).tickSizeOuter(0),h=Rt.j().domain(Rt.f(e,(function(e){return e.running}))).range(["lightgreen","darkgreen"]),m=Rt.k("body").append("div").classed("tooltip-d3",!0);function b(e){m.style("opacity",1).style("left",Rt.e.pageX-60+"px").style("top",Rt.e.pageY+"px").html("\n".concat(e.name,"
\nQueue: ").concat(be(e.queue),"
\nRun: ").concat(be(e.running),"
\n").concat(t,": ").concat("JPSY"===t?ke(e[t]):e[t],"
\n").concat(a,": ").concat(e[a],"
\n "))}function j(){m.style("left","10px").style("top","10px").style("opacity",0)}Rt.k(this.svgElement).append("g").attr("transform","translate(0,520)").call(u),Rt.k(this.svgElement).append("g").attr("transform","translate(40)").call(p),Rt.k(this.svgElement).attr("width",i).attr("height",c).selectAll("circle").data(e).enter().append("circle").attr("cx",(function(e){return d(e[t])})).attr("cy",(function(e){return l(e[a])})).attr("fill",(function(e){return h(e.running)})).attr("r",4).on("mousemove",b).on("touchstart",b).on("mouseout",j).on("touchend",j),Rt.k(this.svgElement).append("text").attr("x",275).attr("y",6).attr("dy","1.5em").style("text-anchor","middle").style("font-weight","bold").text(r),Rt.k(this.svgElement).append("text").attr("x",275).attr("y",529).attr("dy","1em").style("text-anchor","middle").text(n||t),Rt.k(this.svgElement).append("text").attr("transform","rotate(-90)").attr("x",-275).attr("y",24).attr("dy","-1em").style("text-anchor","middle").text(a),Rt.k(this.svgElement).append("text").attr("x",475).attr("y",18).attr("dy","0.45em").style("font-size","0.9em").style("text-anchor","middle").text("Run"),Rt.k(this.svgElement).append("rect").attr("id","legend-1-".concat(s)).attr("x",490).attr("y",15).attr("width",10).attr("height",10).style("fill",h(Rt.i(e,(function(e){return e.running})))),Rt.k(this.svgElement).append("rect").attr("id","legend-2-".concat(s)).attr("x",500).attr("y",15).attr("width",10).attr("height",10).style("fill",h(Rt.h(e,(function(e){return e.running})))),Rt.k(this.svgElement).append("rect").attr("id","legend-3-".concat(s)).attr("x",510).attr("y",15).attr("width",10).attr("height",10).style("fill",h(Rt.g(e,(function(e){return e.running}))))}},{key:"componentDidMount",value:function(){this.props.data.length>0&&this.handleScatterPlot()}},{key:"render",value:function(){return 0===this.props.data.length?Object(oe.jsx)("div",{children:Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col",children:"No data"})})}):Object(oe.jsx)("div",{className:"scroll-x",children:Object(oe.jsx)("svg",{version:"1.1",baseProfile:"full",xmlns:"http://www.w3.org/2000/svg",ref:this.setSvgElement})})}}]),a}(n.Component),Xt=function(){var e=Object(n.useContext)(ie),t=e.performancedata,a=e.experiment,r=e.loadingPerformance,s=e.performanceDisplayPlots,c=e.setPerformanceDisplay;if(!0===r)return Object(oe.jsx)(le,{});if(!a)return Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col-12",children:Object(oe.jsx)("div",{className:"lead",children:"Experiment not defined."})})});if(!t)return Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col-12",children:Object(oe.jsxs)("p",{children:["Press ",Object(oe.jsx)("span",{className:"bg-primary text-white px-1 rounded",children:"Show"}),"."]})})});var i=t.RSYPD,o=t.ASYPD,l=t.SYPD,d=t.JPSY,u=t.Parallelization,p=t.CHSY,h=t.considered,m=t.arrSYPDdata,b=t.arrASYPDdata,j=t.arrCHSY,f=t.arrJPSYdata,x=[],g=h?Math.max.apply(Math,Object(ue.a)(Array.from(h.map((function(e){return Number.parseInt(e.JPSY)}))))):0,O=h?Math.max.apply(Math,Object(ue.a)(Array.from(h.map((function(e){return Number.parseFloat(e.ASYPD)}))))):0,v=g>999999999?1e6:1e3,N=g>999999999?"JPSY (millions)":"JPSY (thousands)";h&&h.forEach((function(e){x.push({JPSY:e.JPSY/v,SYPD:e.SYPD,ASYPD:e.ASYPD,CHSY:e.CHSY,running:e.running,queue:e.queue,name:e.name})}));var y=function(e){var t=e.target.id,a=e.target.checked;c(t,a)},A=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"JPSYvsCHSY",id:"JPSYvsCHSY",className:"form-check-input",checked:s.JPSYvsCHSY,onChange:y,disabled:g<=0}),Object(oe.jsx)("label",{htmlFor:"JPSYvsCHSY",className:"px-1 mx-1 rounded form-check-label",children:"JPSY vs CHSY"})]}),S=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"JPSYvsSYPD",id:"JPSYvsSYPD",className:"form-check-input",checked:s.JPSYvsSYPD,onChange:y,disabled:g<=0}),Object(oe.jsx)("label",{htmlFor:"JPSYvsSYPD",className:"px-1 mx-1 rounded form-check-label",children:"JPSY vs SYPD"})]}),E=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"JPSYvsASYPD",id:"JPSYvsASYPD",className:"form-check-input",checked:s.JPSYvsASYPD,onChange:y,disabled:g<=0}),Object(oe.jsx)("label",{htmlFor:"JPSYvsASYPD",className:"px-1 mx-1 rounded form-check-label",children:"JPSY vs ASYPD"})]}),C=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"SYPDvsASYPD",id:"SYPDvsASYPD",className:"form-check-input",checked:s.SYPDvsASYPD,onChange:y,disabled:h.length<=0||O<=0}),Object(oe.jsx)("label",{htmlFor:"SYPDvsASYPD",className:"px-1 mx-1 rounded form-check-label",children:"SYPD vs ASYPD"})]}),T=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"CHSYvsSYPD",id:"CHSYvsSYPD",className:"form-check-input",checked:s.CHSYvsSYPD,onChange:y,disabled:h.length<=0}),Object(oe.jsx)("label",{htmlFor:"CHSYvsSYPD",className:"px-1 mx-1 rounded form-check-label",children:"CHSY vs SYPD"})]}),w=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"CHSYvsASYPD",id:"CHSYvsASYPD",className:"form-check-input",checked:s.CHSYvsASYPD,onChange:y,disabled:h.length<=0||O<=0}),Object(oe.jsx)("label",{htmlFor:"CHSYvsASYPD",className:"px-1 mx-1 rounded form-check-label",children:"CHSY vs ASYPD"})]}),R=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"RunVsSYPD",id:"RunVsSYPD",className:"form-check-input",checked:s.RunVsSYPD,onChange:y,disabled:h.length<=0}),Object(oe.jsx)("label",{htmlFor:"RunVsSYPD",className:"px-1 mx-1 rounded form-check-label",children:"Run t. vs SYPD"})]}),k=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"RunVsCHSY",id:"RunVsCHSY",className:"form-check-input",checked:s.RunVsCHSY,onChange:y,disabled:h.length<=0}),Object(oe.jsx)("label",{htmlFor:"RunVsCHSY",className:"px-1 mx-1 rounded form-check-label",children:"Run t. vs ASYPD"})]}),D=Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"checkbox",name:"QueueRunVsASYPD",id:"QueueRunVsASYPD",className:"form-check-input",checked:s.QueueRunVsASYPD,onChange:y,disabled:g<=0||O<=0}),Object(oe.jsx)("label",{htmlFor:"QueueRunVsASYPD",className:"px-1 mx-1 rounded form-check-label",children:"Queue+Run t. vs ASYPD"})]});return Object(oe.jsxs)("div",{className:"container",children:[Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsxs)("div",{className:"col",children:[Object(oe.jsxs)("p",{className:"lead",children:[Object(oe.jsxs)("span",{className:"mr-4",children:["Parallelization:"," ",Object(oe.jsx)("span",{className:"badge badge-secondary",children:u})]}),Object(oe.jsxs)("span",{children:["RSYPD:"," ",Object(oe.jsx)("span",{className:"badge badge-secondary",children:i})]})]}),Object(oe.jsx)("div",{className:"scroll-x",children:Object(oe.jsxs)("table",{className:"table table-sm table-bordered",children:[Object(oe.jsx)("thead",{className:"thead-dark",children:Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"col",children:"Metric"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Value"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Min"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Max"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Mean"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"SD"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"MAD"})]})}),Object(oe.jsxs)("tbody",{children:[Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",children:"JPSY"}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("span",{className:"rounded px-1 bg-secondary",children:ke(d,!0)})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.min.apply(Math,Object(ue.a)(f)),!0)}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.max.apply(Math,Object(ue.a)(f)),!0)}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("strong",{children:ke(Te(f))})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(we(f))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Re(f))})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",children:"SYPD"}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("span",{className:"rounded px-1 bg-secondary",children:ke(l)})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.min.apply(Math,Object(ue.a)(m)))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.max.apply(Math,Object(ue.a)(m)))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("strong",{children:ke(Te(m))})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(we(m))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Re(m))})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",children:"ASYPD"}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("strong",{children:Object(oe.jsx)("span",{className:"rounded px-1 bg-secondary",children:ke(o)})})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.min.apply(Math,Object(ue.a)(b)))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.max.apply(Math,Object(ue.a)(b)))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Te(b))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(we(b))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Re(b))})]}),Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",children:"CHSY"}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("span",{className:"rounded px-1 bg-secondary",children:ke(p)})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.min.apply(Math,Object(ue.a)(j)))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Math.max.apply(Math,Object(ue.a)(j)))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("strong",{children:ke(Te(j))})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(we(j))}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(Re(j))})]})]})]})}),Object(oe.jsxs)("span",{children:[Object(oe.jsx)("strong",{children:"Value"}),": Value of the metric calculated at the experiment level."]}),Object(oe.jsx)("br",{}),Object(oe.jsxs)("span",{children:[Object(oe.jsx)("strong",{children:"SD"}),": Standard Deviation."]}),Object(oe.jsx)("br",{}),Object(oe.jsxs)("span",{children:[Object(oe.jsx)("strong",{children:"MAD"}),": Mean Absolute Deviation Around the Mean."]})]}),Object(oe.jsxs)("div",{className:"col",children:[Object(oe.jsxs)("p",{className:"lead",children:["Considered: (",h.length,")"]}),Object(oe.jsx)("div",{className:"scroll-y-jobs",children:Object(oe.jsxs)("table",{className:"table table-sm table-bordered",children:[Object(oe.jsx)("thead",{className:"thead-dark",children:Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"col",children:"#"}),Object(oe.jsx)("th",{scope:"col",className:"pl-2",children:"Job Name"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Queue"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Run"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"CHSY"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"SYPD"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"ASYPD"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"JPSY"}),Object(oe.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Energy"})]})}),Object(oe.jsx)("tbody",{children:h.sort((function(e,t){return e.name>t.name?1:-1})).map((function(e,t){return Object(oe.jsxs)("tr",{children:[Object(oe.jsx)("th",{scope:"row",children:t+1}),Object(oe.jsx)("td",{className:"pl-1",children:e.name}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsxs)("strong",{children:[" ",be(e.queue)]})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:Object(oe.jsx)("strong",{children:be(e.running)})}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(e.CHSY)}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(e.SYPD)}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(e.ASYPD)}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(e.JPSY,!0)}),Object(oe.jsx)("td",{className:"text-right pr-1",children:ke(e.energy,!0)})]},e.name)}))})]})})]})]}),Object(oe.jsx)("div",{className:"row py-2",children:"Available plots:"}),Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col border rounded text-center p-2",children:[A,S,E,C,T,w,R,k,D]})}),h&&h.length>0&&Object(oe.jsxs)("div",{className:"row",children:[s.JPSYvsCHSY&&g>0&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(Kt,{data:x,attributeX:"JPSY",attributeY:"CHSY",titleX:N,mainTitle:"JPSY vs CHSY",uniqueId:"4"})}),s.JPSYvsSYPD&&g>0&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(Kt,{data:x,attributeX:"JPSY",attributeY:"SYPD",titleX:N,mainTitle:"JPSY vs SYPD",uniqueId:"5"})}),s.JPSYvsASYPD&&g>0&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(Kt,{data:x,attributeX:"JPSY",attributeY:"ASYPD",titleX:N,mainTitle:"JPSY vs ASYPD",uniqueId:"6"})}),s.SYPDvsASYPD&&O>0&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(Kt,{data:h,attributeX:"SYPD",attributeY:"ASYPD",mainTitle:"SYPD vs ASYPD",uniqueId:"7"})}),s.CHSYvsSYPD&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(Kt,{data:h,attributeX:"CHSY",attributeY:"SYPD",mainTitle:"CHSY vs SYPD",uniqueId:"8"})}),s.CHSYvsASYPD&&O>0&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(Kt,{data:h,attributeX:"CHSY",attributeY:"ASYPD",mainTitle:"CHSY vs ASYPD",uniqueId:"9"})}),s.RunVsSYPD&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(zt,{data:h,attribute:"SYPD",mainTitle:"Run time vs SYPD",uniqueId:"1"})}),s.RunVsCHSY&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(zt,{data:h,attribute:"CHSY",mainTitle:"Run time vs CHSY",uniqueId:"2"})}),s.QueueRunVsASYPD&&O>0&&Object(oe.jsx)("div",{className:"col-lg-6 col-xl-4",children:Object(oe.jsx)(zt,{data:h,attribute:"ASYPD",mainTitle:"Queue + Run time vs to ASYPD",uniqueId:"3"})})]}),t&&t.warnings_job_data&&t.warnings_job_data.length>0&&Object(oe.jsxs)("div",{className:"row py-2",children:[Object(oe.jsx)("div",{className:"col-md-12",children:Object(oe.jsxs)("p",{children:[" ","There are some warnings about the calculations of performance metrics:"," ",Object(oe.jsx)("button",{"data-target":"#warningsCollapse",type:"button","aria-expanded":"false","aria-controls":"warningsCollapse",className:"btn btn-sm btn-warning","data-toggle":"collapse",children:Object(oe.jsx)("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Opens a list of warnings, click again to close the list.",children:"Show warnings"})})]})}),Object(oe.jsx)("div",{className:"collapse px-4",id:"warningsCollapse",children:Object(oe.jsx)("div",{className:"card card-body p-1",children:Object(oe.jsx)("ol",{className:"py-0 my-0",children:t.warnings_job_data.map((function(e){return Object(oe.jsx)("li",{children:e},e)}))})})})]}),Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col",children:[Object(oe.jsx)("h3",{children:"Metrics description:"}),Object(oe.jsxs)("p",{children:[Object(oe.jsx)("strong",{children:"Parallelization"}),": Total number of cores allocated for the run, per SIM."]}),Object(oe.jsxs)("p",{children:[Object(oe.jsx)("strong",{children:"JPSY"}),": Energy cost of a simulation, measured in Joules per simulated year. The JPSY ",Object(oe.jsx)("strong",{children:"value"})," at the experiment level is the mean of the values calculated at the job level. Energy values are only collected for jobs running on ",Object(oe.jsx)("strong",{children:"Marenostrum4"}),". In rare occassions the query that retrieves the energy information fails and the value stays at 0. Jobs with ",Object(oe.jsx)("strong",{children:"0"})," energy value are not considered for the calculation."]}),Object(oe.jsxs)("p",{children:[Object(oe.jsx)("strong",{children:"SYPD"}),": Simulated Years Per Day for the model in a 24h period. The ",Object(oe.jsx)("strong",{children:"value"})," at the experiment level is the mean of the values calculated at the job level."]}),Object(oe.jsxs)("p",{children:[Object(oe.jsx)("strong",{children:"ASYPD"}),": Actual Simulated Years Per Day, this number should be lower than SYPD due to interruptions, queue wait time, ",Object(oe.jsx)("strong",{children:"POST"})," jobs, data transfer, or issues with the model workflow. The ASYPD ",Object(oe.jsx)("strong",{children:"value"})," calculated at the job level uses a generalization of the formula applied at the experiment level. As a consequence, the ASYPD value at the experiment level can be different that the mean of the values calculated at the job level."]}),Object(oe.jsxs)("p",{children:[Object(oe.jsx)("strong",{children:"CHSY"}),": Core Hours Per Simulated Year. This metric is the product of the model runtime for 1 Simulated Year and the number of processors (Parallelization) allocated. The CHSY ",Object(oe.jsx)("strong",{children:"value"})," at the experiment level is the mean of the values calculated at the job level."]}),Object(oe.jsxs)("p",{children:[Object(oe.jsx)("strong",{children:"RSYPD"}),': "Real" Simulated Years Per Day. This variation of SYPD has been defined only at the experiment level. It depends on the existences of ',Object(oe.jsx)("strong",{children:"TRANSFER"})," or ",Object(oe.jsx)("strong",{children:"CLEAN"})," jobs. Then, it uses the finish time of the last TRANSFER or CLEAN job and the start time of the first SIM job in the experiment to calculate an approximation of the total duration of the simulation."]}),Object(oe.jsxs)("p",{children:[Object(oe.jsx)("strong",{children:"Considered"}),": Scrollable list where each item in the list represents job information showing ",Object(oe.jsx)("strong",{children:"Job Name"}),","," ",Object(oe.jsx)("strong",{children:"QUEUE"})," and ",Object(oe.jsx)("strong",{children:"RUNNING"})," time in"," ",Object(oe.jsx)("i",{children:"HH:mm:ss"})," format, ",Object(oe.jsx)("strong",{children:"CHSY"}),", ",Object(oe.jsx)("strong",{children:"JPSY"}),", and raw ",Object(oe.jsx)("strong",{children:"Energy"})," consumption for that job."," ",Object(oe.jsx)("i",{children:"Note: Energy values are only collected for those jobs running on MareNostrum4 and using the latest version of Autosubmit. Subsequent development will expand this feature for other platforms."})]}),Object(oe.jsxs)("p",{children:["Visit"," ",Object(oe.jsx)("a",{href:"https://earth.bsc.es/gitlab/wuruchi/autosubmitreact/-/wikis/Performance-Metrics",target:"_blank",rel:"noopener noreferrer",children:"Performance Metrics Documentation"})," ","for more details."]})]})})]})},Zt=function(e){var t=e.readyJobs,a=e.source,n="card scroll-ready-tree";return a&&"graph"===a&&(n="card scroll-ready-graph"),t?Object(oe.jsx)("div",{className:n,children:Object(oe.jsx)("div",{className:"card-body",children:t&&t.map((function(e,t){return Object(oe.jsxs)("div",{children:[Object(oe.jsx)("span",{className:"badge my-0",style:y,children:e.name}),Object(oe.jsx)("br",{})]},t)}))})}):null},$t=function(){var e,t=Object(n.useContext)(ie),a=t.experiment,r=t.requestCurrentConfiguration,s=t.currentConfiguration,c=t.clearCurrentConfigurationData;return Object(oe.jsx)("div",{className:"card-header p-1",children:Object(oe.jsxs)("div",{className:"d-flex flex-wrap row-hl",children:[a&&Object(oe.jsx)("div",{className:"item-hl ml-auto",children:Object(oe.jsx)("form",{onSubmit:(e=a.expid,function(t){t.preventDefault(),r(e)}),className:"form",children:Object(oe.jsx)("input",{type:"submit",value:s?"Refresh Data":"Show Current Configuration",className:s?"btn btn-success btn-sm btn-block":"btn btn-primary btn-sm btn-block","data-toggle":"tooltip","data-placement":"bottom",title:"Show the current configuration of your experiment"})})}),a&&s&&Object(oe.jsx)("div",{className:"item-hl ml-2",children:Object(oe.jsx)("form",{action:"",className:"form",onSubmit:function(e){e.preventDefault(),c()},children:Object(oe.jsx)("input",{type:"submit",value:"Clear Data",className:"btn btn-dark btn-sm btn-block","data-toggle":"tooltip","data-placement":"bottom",title:"Clears the current configuration information"})})})]})})},ea=function(){var e=Object(n.useContext)(ie),t=e.currentConfiguration,a=e.configDifferences;if(t){if(!0===t.error)return Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col",children:Object(oe.jsx)("strong",{children:t.errorMessage})})});var r=!1===t.areEqual?"The current run configuration in the historical database is different than the current configuration in the file system.":null,s=t.configurationCurrentRun,c=t.configurationFileSystem,i=Object(oe.jsx)("div",{className:"row mx-2",children:Object(oe.jsx)("div",{className:"col",children:"Not Available or Autosubmit API couldn't access the necessary files."})}),o=Object(oe.jsx)("span",{className:"badge badge-warning","data-toggle":"tooltip","data-placement":"bottom",title:"Difference detected.",children:"!"});return Object(oe.jsxs)("div",{className:"container",children:[Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col-md-12",children:[!0===t.warning&&Object(oe.jsx)("p",{children:t.warningMessage}),r&&Object(oe.jsx)("p",{className:"text-center",children:Object(oe.jsx)("span",{className:"text-muted",children:r})})]})}),Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col-md-12",children:[Object(oe.jsxs)("ul",{className:"nav nav-pills ml-4 mb-2",id:"hconf-pills-tab",role:"tablist",children:[Object(oe.jsx)("li",{className:"nav-item",role:"presentation",children:Object(oe.jsx)("a",{href:"#hconf-pills-autosubmit",className:"nav-link active","data-toggle":"pill",role:"tab",id:"hconf-pills-autosubmit-tab","aria-controls":"hconf-pills-autosubmit","aria-selected":"true",children:Object(oe.jsxs)("strong",{children:["autosubmit_.conf ",a.has("conf")&&o]})})}),Object(oe.jsx)("li",{className:"nav-item",role:"presentation",children:Object(oe.jsx)("a",{href:"#hconf-pills-expdef",className:"nav-link","data-toggle":"pill",role:"tab",id:"hconf-pills-expdef-tab","aria-controls":"hconf-pills-expdef","aria-selected":"false",children:Object(oe.jsxs)("strong",{children:["expdef_.conf ",a.has("exp")&&o]})})}),Object(oe.jsx)("li",{className:"nav-item",role:"presentation",children:Object(oe.jsx)("a",{href:"#hconf-pills-jobs",className:"nav-link","data-toggle":"pill",role:"tab",id:"hconf-pills-jobs-tab","aria-controls":"hconf-pills-jobs","aria-selected":"false",children:Object(oe.jsxs)("strong",{children:["jobs_.conf ",a.has("jobs")&&o]})})}),Object(oe.jsx)("li",{className:"nav-item",role:"presentation",children:Object(oe.jsx)("a",{href:"#hconf-pills-platforms",className:"nav-link","data-toggle":"pill",role:"tab",id:"hconf-pills-platforms-tab","aria-controls":"hconf-pills-platforms","aria-selected":"false",children:Object(oe.jsxs)("strong",{children:["platforms_.conf ",a.has("platforms")&&o]})})}),Object(oe.jsx)("li",{className:"nav-item",role:"presentation",children:Object(oe.jsx)("a",{href:"#hconf-pills-proj",className:"nav-link","data-toggle":"pill",role:"tab",id:"hconf-pills-proj-tab","aria-controls":"hconf-pills-proj","aria-selected":"false",children:Object(oe.jsxs)("strong",{children:["proj_.conf ",a.has("proj")&&o]})})})]}),Object(oe.jsxs)("div",{className:"tab-content",id:"hconf-pills-tabContent",children:[Object(oe.jsx)("div",{className:"tab-pane fade show active",id:"hconf-pills-autosubmit",role:"tabpanel","aria-labelledby":"hconf-pills-autosubmit-tab",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current Run Configuration (Historical Database)"})}),s.conf?Ce(s.conf,"conf",a,o):i]}),Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current FileSystem Configuration"})}),c.conf?Ce(c.conf,"conf",a,o):i]})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"hconf-pills-expdef",role:"tabpanel","aria-labelledby":"hconf-pills-expdef-tab",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current Run Configuration (Historical Database)"})}),s.exp?Ce(s.exp,"exp",a,o):i]}),Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current FileSystem Configuration"})}),c.exp?Ce(c.exp,"exp",a,o):i]})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"hconf-pills-jobs",role:"tabpanel","aria-labelledby":"hconf-pills-jobs-tab",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current Run Configuration (Historical Database)"})}),s.jobs?Ce(s.jobs,"jobs",a,o):Object(oe.jsx)("p",{children:i})]}),Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current FileSystem Configuration"})}),c.jobs?Ce(c.jobs,"jobs",a,o):i]})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"hconf-pills-platforms",role:"tabpanel","aria-labelledby":"hconf-pills-platforms-tab",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current Run Configuration (Historical Database)"})}),s.platforms?Ce(s.platforms,"platforms",a,o):i]}),Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current FileSystem Configuration"})}),c.platforms?Ce(c.platforms,"platforms",a,o):i]})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"hconf-pills-proj",role:"tabpanel","aria-labelledby":"hconf-pills-proj-tab",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current Run Configuration (Historical Database)"})}),s.proj?Ce(s.proj,"proj",a,o):i]}),Object(oe.jsxs)("div",{className:"col-md-6",children:[Object(oe.jsx)("p",{className:"text-center lead",children:Object(oe.jsx)("span",{children:"Current FileSystem Configuration"})}),c.proj?Ce(c.proj,"proj",a,o):i]})]})})]})]})})]})}return Object(oe.jsx)("div",{className:"container",children:Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col-md-12",children:[Object(oe.jsxs)("p",{children:["Press ",Object(oe.jsx)("span",{className:"badge badge-primary",children:"SHOW CURRENT INFORMATION"})," to visualize the current configuration of your experiment. The information will be retrieved from the historical database and from the filesystem, each datasource is displayed in its own table."]}),Object(oe.jsxs)("h4",{children:["What is the ",Object(oe.jsx)("strong",{children:"Current FileSystem Configuration"}),"?"]}),Object(oe.jsxs)("p",{children:["It is the configuration of your experiment stored in the files inside the folder ",Object(oe.jsx)("strong",{children:"conf"}),". Autosubmit GUI might have problems accessing this information if your conf files have ",Object(oe.jsx)("strong",{children:"restricted read permissions"}),"."]}),Object(oe.jsxs)("h4",{children:["What is the ",Object(oe.jsx)("strong",{children:"Current Run Configuration (Historical Database)"}),"?"]}),Object(oe.jsx)("p",{children:"Whenever you start a new run of your experiment, the current configuration stored in the file system is stored in the historical database for reference."}),Object(oe.jsxs)("h4",{children:["What is a ",Object(oe.jsx)("strong",{children:"new run"})," of the experiment?"]}),Object(oe.jsx)("p",{children:"A new run is created in any of these situations:"}),Object(oe.jsxs)("ul",{children:[Object(oe.jsxs)("li",{children:[Object(oe.jsx)("code",{children:"autosubmit create"})," is executed."]}),Object(oe.jsxs)("li",{children:[Object(oe.jsx)("code",{children:"autosubmit run"})," is executed and the historical database is empty."]}),Object(oe.jsxs)("li",{children:[Object(oe.jsx)("code",{children:"autosubmit run"})," is executed and it is detected that the number of jobs in the experiment has changed."]}),Object(oe.jsxs)("li",{children:[Object(oe.jsx)("code",{children:"autosubmit setstatus"})," and/or a significant amount of jobs changes status."]})]})]})})})},ta={minHeight:"100%"},aa=function(e){var t=e.match,a=t.params.expid,r=t.params.action,s=!(!r||"graph"!==r),c=!(!r||"light"!==r),i=!0===s||!0===c?"nav-link":"nav-link active",o=!0===s?"nav-link active":"nav-link",l=!0===c?"nav-link active":"nav-link",d=!0===s||!0===c?"tab-pane fade":"tab-pane fade show active",u=!0===s?"tab-pane fade show active":"tab-pane fade",p=!0===c?"tab-pane fade show active":"tab-pane fade",h=Object(n.useContext)(ie),m=Object(n.useContext)(ze),b=Object(n.useContext)(de),j=Object(n.useContext)(ut),f=Object(n.useContext)(tt),x=h.loadingRun,g=h.cleanRunData,O=h.getExperiment,v=h.getRunningState,N=h.getExperimentRun,y=h.startAutoUpdateRun,A=h.setAutoUpdateRun,S=h.rundata,E=h.experiment,C=h.canSelect,T=h.experimentRunning,w=h.updateCurrentSelectedGraph,R=h.updateCurrentSelectedTree,k=h.cleanExperimentData,D=h.totalJobs,_=h.getLogStatus,I=h.logTimeDiff,P=h.currentLog,L=h.testToken,M=b.treedata,F=b.updateSelectionTree,U=b.loadingTree,G=b.getExperimentTreePkl,Y=b.getExperimentTree,B=b.cleanPklTreeData,H=b.startAutoUpdateTreePkl,Q=b.pkltreechanges,J=b.setFancyTree,V=b.cleanTreeData,W=b.notificationTitleTree,q=b.setNotificationTitleTree,z=b.treeReady,K=m.cleanPklData,X=m.cleanNavData,Z=m.getExperimentGraph,$=m.setVisData,ee=m.getExperimentPkl,te=m.updateSelection,ae=m.setVisNetwork,ne=m.data,re=m.visNetwork,se=m.navToLatest,ce=m.navigateAfterLoadGraph,le=m.pklchanges,ue=m.loadingGraph,pe=m.shouldUpdateGraph,he=m.startAutoUpdatePkl,me=m.cleanGraphData,be=m.current_grouped,je=m.updateGraphSelectedNodes,fe=m.notificationTitleGraph,xe=m.setNotificationTitleGraph,ge=m.graphReady,ve=m.displayJobInfoPanel,Ne=j.clearStats,ye=f.loadingView,Ae=f.setLighterFancyTree,Se=f.currentData,Ee=f.isValid,Ce=f.errorMessage,Te=f.cleanLoadingLighterView,we=f.getLighterView;return Object(n.useEffect)((function(){if(O(a),v(a),_(a),a&&a.length>0){if(r)if("graph"===r){var e=Oe(T,I,P,ne?ne.nodes:null);Z(a,"none","standard",e)}else"light"===r&&we(a);else{var t=Oe(T,I,P,M?M.jobs:null);Y(a,t)}L()}var n=setInterval((function(){return v(a)}),3e5);return function(){clearInterval(n),k()}}),[]),Object(oe.jsxs)(n.Fragment,{children:[Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col-12",children:[Object(oe.jsxs)("ul",{className:"nav nav-tabs",id:"myTab",role:"tablist",children:[Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:i,id:"treeview-tab","data-toggle":"tab",href:"#treeview",role:"tab","aria-controls":"treeview","aria-selected":"false",children:"Tree View"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:o,id:"graph-tab","data-toggle":"tab",href:"#graph",role:"tab","aria-controls":"graph","aria-selected":"true",children:"Graph"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link",id:"log-tab","data-toggle":"tab",href:"#log",role:"tab","aria-controls":"log","aria-selected":"false",children:"Log"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{href:"#config",className:"nav-link",id:"config-tab","data-toggle":"tab",role:"tab","aria-controls":"config","aria-selected":"false",children:"Configuration"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link",id:"stats-tab","data-toggle":"tab",href:"#stats",role:"tab","aria-controls":"stats","aria-selected":"false",children:"Statistics"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link",id:"performance-tab","data-toggle":"tab",href:"#performance",role:"tab","aria-controls":"performance","aria-selected":"false",children:"Performance"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:l,id:"lightview-tab","data-toggle":"tab",href:"#lightview",role:"tab","aria-controls":"lightview","aria-selected":"false",children:"Quick View"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{href:"#faq",className:"nav-link",id:"faq-tab","data-toggle":"tab",role:"tab","aria-controls":"faq","aria-selected":"false",children:"FAQ"})})]}),Object(oe.jsxs)("div",{className:"tab-content",id:"myTabContent",children:[Object(oe.jsx)("div",{className:u,id:"graph",role:"tabpanel","aria-labelledby":"graph-tab",children:Object(oe.jsxs)("div",{className:"card",children:[E&&Object(oe.jsx)(Qt,{}),E&&ne&&Object(oe.jsx)("div",{className:"card-header p-1",children:Object(oe.jsx)(Lt,{})}),Object(oe.jsx)("div",{className:"container",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsx)("div",{className:"col px-0",children:Object(oe.jsx)(qe,{data:ne,updateSelection:te,loadingGraph:ue,cleanGraphData:me,shouldUpdateGraph:pe,setVisData:$,setVisNetwork:ae,navToLatest:se,clearStats:Ne,cleanNavData:X,current_grouped:be,experimentRunning:T,navigateAfterLoadGraph:ce,updateCurrentSelected:w,canSelect:C,updateGraphSelectedNodes:je})}),ne&&Object(oe.jsx)("div",{className:"col-lg-3 px-0",style:{display:ve},children:Object(oe.jsxs)("div",{className:"col-12 px-0",children:[Object(oe.jsxs)("ul",{className:"nav nav-tabs",id:"myTabSide",role:"tablist",children:[Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link active",id:"selection-tab","data-toggle":"tab",href:"#selection",role:"tab","aria-controls":"selection","aria-selected":"true",children:"Selection"})}),Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link",id:"wrapper-tab","data-toggle":"tab",href:"#wrapper",role:"tab","aria-controls":"treeview","aria-selected":"false",children:"Wrappers"})})]}),Object(oe.jsxs)("div",{className:"tab-content",id:"myTabSideContent",children:[Object(oe.jsxs)("div",{className:"tab-pane fade show active",id:"selection",role:"tabpanel","aria-labelledby":"selection-tab",children:[ne&&Object(oe.jsx)(ft,{}),(he||ge)&&Object(oe.jsxs)("div",{children:[Object(oe.jsxs)("ul",{className:"nav nav-tabs",id:"downTabSideGraph",role:"tablist",children:[he&&Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link "+(ge?"":"active"),id:"monitor-tab-graph","data-toggle":"tab",href:"#monitor-graph",role:"tab","aria-controls":"monitor-graph",children:"Monitor"})}),ge&&Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link "+(he?"":"active"),id:"readyjobs-tab-graph","data-toggle":"tab",href:"#readyjobs-graph",role:"tab","aria-controls":"readyjobs-graph",children:"Ready Jobs"})})]}),Object(oe.jsxs)("div",{className:"tab-content",id:"graphDownSide",children:[he&&Object(oe.jsx)("div",{className:"tab-pane fade show active",id:"monitor-graph",role:"tabpanel","aria-labelledby":"monitor-tab-graph",children:Object(oe.jsx)(Ct,{experiment:E,getExperimentPkl:ee,cleanPklData:K,pklchanges:le,experimentRunning:T,notificationTitleGraph:fe,setNotificationTitleGraph:xe})}),ge&&Object(oe.jsx)("div",{className:"tab-pane fade show "+(he?"":"active"),id:"readyjobs-graph",role:"tabpanel","aria-labelledby":"readyjobs-tab-graph",children:Object(oe.jsx)(Zt,{readyJobs:ge,source:"graph"})})]})]})]}),Object(oe.jsx)("div",{className:"tab-pane fade show",id:"wrapper",role:"tabpanel","aria-labelledby":"wrapper-tab",children:Object(oe.jsx)("div",{children:Object(oe.jsx)(Yt,{})})})]})]})}),E&&ne&&C&&Object(oe.jsx)("div",{className:"col-2 pl-0",children:Object(oe.jsx)(Xe,{target:"graph",source:"experiment"})})]})}),Object(oe.jsx)("div",{className:"card-footer p-0",children:ne&&re&&Object(oe.jsx)(wt,{})})]})}),Object(oe.jsx)("div",{className:d,id:"treeview",role:"tabpanel","aria-labelledby":"treeview-tab",children:Object(oe.jsxs)("div",{className:"card",children:[E&&Object(oe.jsx)(Vt,{}),E&&M&&Object(oe.jsx)("div",{className:"card-header p-1",children:Object(oe.jsx)(Ft,{})}),Object(oe.jsx)("div",{className:"card-body p-0",children:Object(oe.jsx)("div",{className:"container",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsx)("div",{className:"col px-0",children:Object(oe.jsx)(it,{treedata:M,loadingTree:U,cleanTreeData:V,setFancyTree:J,updateSelectionTree:F,updateCurrentSelected:R,canSelect:C,totalJobs:D})}),M&&Object(oe.jsxs)("div",{className:"col-lg-3 px-0",children:[Object(oe.jsx)(vt,{}),(H||z)&&Object(oe.jsxs)("div",{children:[Object(oe.jsxs)("ul",{className:"nav nav-tabs",id:"downTabSideTree",role:"tablist",children:[H&&Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link "+(z?"":"active"),id:"monitor-tab-tree","data-toggle":"tab",href:"#monitor-tree",role:"tab","aria-controls":"monitor-tree",children:"Monitor"})}),z&&Object(oe.jsx)("li",{className:"nav-item",children:Object(oe.jsx)("a",{className:"nav-link "+(H?"":"active"),id:"readyjobs-tab-tree","data-toggle":"tab",href:"#readyjobs-tree",role:"tab","aria-controls":"readyjobs-tree",children:"Ready Jobs"})})]}),Object(oe.jsxs)("div",{className:"tab-content",id:"treeDownSide",children:[H&&Object(oe.jsx)("div",{className:"tab-pane fade show active",id:"monitor-tree",role:"tabpanel","aria-labelledby":"monitor-tab-tree",children:Object(oe.jsx)(Tt,{experiment:E,getExperimentTreePkl:G,cleanPklTreeData:B,pkltreechanges:Q,experimentRunning:T,notificationTitleTree:W,setNotificationTitleTree:q})}),z&&Object(oe.jsx)("div",{className:"tab-pane fade show "+(H?"":"active"),id:"readyjobs-tree",role:"tabpanel","aria-labelledby":"readyjobs-tab-tree",children:Object(oe.jsx)(Zt,{readyJobs:z,source:"tree"})})]})]})]}),E&&M&&C&&Object(oe.jsx)("div",{className:"col-md-2 px-0",children:Object(oe.jsx)(Xe,{target:"tree",source:"experiment"})})]})})})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"log",role:"tabpanel","aria-labelledby":"log-tab",children:Object(oe.jsxs)("div",{className:"card",children:[E&&Object(oe.jsx)(Jt,{}),Object(oe.jsx)("div",{className:"card-body p-0",style:ta,children:Object(oe.jsxs)("div",{className:"col-12 p-0",children:[y&&Object(oe.jsx)(At,{rundata:S,loadingRun:x,cleanRunData:g,getExperimentRun:N,experiment:E,startAutoUpdateRun:y,setAutoUpdateRun:A,experimentRunning:T}),!y&&Object(oe.jsx)("div",{className:"row",children:Object(oe.jsx)("div",{className:"col-12 text-center",children:Object(oe.jsxs)("p",{className:"lead",children:["Press"," ",Object(oe.jsx)("span",{className:"badge badge-dark",children:"Show Log"})," ","to see the last 50 lines of the running log of this experiment. If the experiment is running, the log will update automatically."]})})})]})})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"stats",role:"tabpanel","aria-labelledby":"stats-tab",children:Object(oe.jsxs)("div",{className:"card",style:ta,children:[Object(oe.jsx)(_t,{}),Object(oe.jsx)("div",{className:"card-body p-1",children:Object(oe.jsx)(Dt,{})})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"performance",role:"tabpanel","aria-labelledby":"performance-tab",children:Object(oe.jsxs)("div",{className:"card",children:[E&&Object(oe.jsx)(qt,{}),Object(oe.jsx)("div",{className:"card-body",children:E&&Object(oe.jsx)(Xt,{})})]})}),Object(oe.jsx)("div",{className:p,id:"lightview",role:"tabpanel","aria-labelledby":"lightview-tab",children:Object(oe.jsxs)("div",{className:"card",children:[E&&Object(oe.jsx)(Wt,{}),Object(oe.jsx)("div",{className:"card-body p-1",children:E&&Object(oe.jsx)(dt,{data:Se,isValid:Ee,errorMessage:Ce,loadingView:ye,setLighterFancyTree:Ae,cleanLoadingLighterView:Te})})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"faq",role:"tabpanel","aria-labelledby":"faq-tab",children:Object(oe.jsxs)("div",{className:"card mt-2",children:[Object(oe.jsx)("div",{className:"card-header",children:"Frequently Asked Questions"}),Object(oe.jsx)("div",{className:"card-body p-1",children:Object(oe.jsx)(xt,{})})]})}),Object(oe.jsx)("div",{className:"tab-pane fade",id:"config",role:"tabpanel","aria-labelledby":"config-tab",children:Object(oe.jsxs)("div",{className:"card",children:[Object(oe.jsx)($t,{}),Object(oe.jsx)("div",{className:"card-body p-1",children:Object(oe.jsx)(ea,{})})]})})]})]})}),Object(oe.jsx)(Qe,{expidToken:a})]})},na=function(e){var t=e.specificSearch,a=Object(n.useContext)(Ue),r=Object(n.useContext)(ie),s=r.searchExperimentsByOwner,c=r.experiments,i=localStorage.getItem(_),o=localStorage.getItem(I);Object(n.useEffect)((function(){f(i||K),v(o||W),t&&!c&&s(t,i,o)}),[t,s,i,o,c]);var l=Object(n.useState)(""),d=Object(p.a)(l,2),u=d[0],h=d[1],m=Object(n.useState)(""),b=Object(p.a)(m,2),j=b[0],f=b[1],x=Object(n.useState)(""),g=Object(p.a)(x,2),O=g[0],v=g[1],N=function(e){var t=null;switch(e.target.value){case"experiment":t=q;break;case"test":t=z;break;case"all":default:t=K}r.orderExperimentsInResult(t),f(t),localStorage.setItem(_,t)};return Object(oe.jsxs)("div",{className:"container",children:[Object(oe.jsxs)("div",{className:"row-hl d-flex flex-wrap mb-2",children:[Object(oe.jsxs)("div",{className:"item-hl mr-1 px-2 pt-1 border rounded",children:[Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"radio",name:"experimentType",id:"experimentTypeTest",className:"form-check-input",value:"test",checked:j===z,onChange:N}),Object(oe.jsx)("label",{htmlFor:"experimentTypeTest",className:"form-check-label",children:"Test"})]}),Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"radio",name:"experimentType",id:"experimentTypeExperiment",className:"form-check-input",value:"experiment",checked:j===q,onChange:N}),Object(oe.jsx)("label",{htmlFor:"experimentTypeExperiment",className:"form-check-label",children:"Experiment"})]}),Object(oe.jsxs)("div",{className:"form-check form-check-inline",children:[Object(oe.jsx)("input",{type:"radio",name:"experimentType",id:"experimentTypeAll",className:"form-check-input",value:"all",checked:j===K,onChange:N}),Object(oe.jsx)("label",{htmlFor:"experimentTypeAll",className:"form-check-label",children:"All"})]})]}),Object(oe.jsx)("div",{className:"item-hl mr-1 pt-1 px-2 border rounded",children:Object(oe.jsxs)("div",{className:"form-check",children:[Object(oe.jsx)("input",{className:"form-check-input",type:"checkbox",id:"switchActive",value:O===W?"all":"active",onChange:function(e){var t=e.target.value,a=re("all"===t?"active":"all");r.orderExperimentsInResult(a),v(a),localStorage.setItem(I,a)},checked:O===V}),Object(oe.jsx)("label",{className:"form-check-label",htmlFor:"switchActive",children:"Only Active"})]})}),Object(oe.jsx)("div",{className:"item-hl flex-fill mr-1",children:Object(oe.jsx)("form",{onSubmit:function(e){e.preventDefault(),""===u?a.setAlert("Please enter something","light"):r.searchExperiments(u,j,O)},className:"form",children:Object(oe.jsxs)("div",{className:"input-group",children:[Object(oe.jsx)("input",{className:"form-control",type:"text",name:"text",placeholder:"If it uses Autosubmit, you will find it. Search by expid, description, or owner.",value:u,onChange:function(e){return h(e.target.value)}}),Object(oe.jsx)("div",{className:"input-group-append",children:Object(oe.jsx)("input",{type:"submit",value:"Search",className:"btn btn-dark"})})]})})}),Object(oe.jsx)("div",{className:"item-hl",children:Object(oe.jsx)("form",{onSubmit:function(e){e.preventDefault(),r.getCurrentRunning()},className:"form",children:Object(oe.jsx)("div",{className:"input-group",children:Object(oe.jsx)("input",{type:"submit",value:"Active Exps",className:"btn btn-success","data-toggle":"tooltip","data-placement":"bottom",title:"Shows all the experiments that are currently running under Autosubmit."})})})})]}),r.experiments.length>0&&Object(oe.jsxs)("div",{className:"row mb-2",children:[Object(oe.jsx)("div",{className:"col-md-3",children:Object(oe.jsx)("button",{className:"btn btn-primary btn-block",onClick:r.getSummaries,"data-toggle":"tooltip","data-placement":"bottom",title:"Shows a summary of the current progress of each experiment in the result.",children:"Show Detailed Data"})}),Object(oe.jsx)("div",{className:"col-md-9",children:Object(oe.jsxs)("button",{className:"btn btn-light btn-block",onClick:r.clearExperiments,children:["Clear ",r.experiments.length]})})]})]})},ra=function(e){Object(o.a)(a,e);var t=Object(l.a)(a);function a(){return Object(c.a)(this,a),t.apply(this,arguments)}return Object(i.a)(a,[{key:"shouldComponentUpdate",value:function(e){return e.experiment!==this.props.experiment||e.isLoading!==this.props.isLoading||m}},{key:"render",value:function(){var e=this.props,t=e.experiment,a=e.getExperimentSummary,n=e.summaries,r=e.isLoading;if(!t)return null;var s=t.name,c=t.description,i=t.user,o=t.hpc,l=t.status,u=t.completed,p=t.total,h=t.version,m=t.wrapper,j=t.queuing,f=t.failed,v=t.running,y=p>=12e3;return Object(oe.jsxs)("div",{className:"card card-hover",children:[Object(oe.jsx)("div",{className:"card-header text-center py-1",children:Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsx)("div",{className:"col-md-3 text-left",children:Object(oe.jsx)("h3",{className:"font-weight-bold",children:s})}),Object(oe.jsxs)("div",{className:"col-md-6 text-center",children:[Object(oe.jsxs)("div",{className:"row-hl d-flex flex-wrap",children:[Object(oe.jsxs)("div",{className:"item-hl",children:[j>0&&Object(oe.jsx)("span",{className:"badge",style:x,children:j}),v>0&&Object(oe.jsx)("span",{className:"badge",style:N,children:v}),f>0&&Object(oe.jsx)("span",{className:"badge",style:g,children:f}),u>0&&Object(oe.jsx)("span",{className:"badge",style:O,children:u})]}),Object(oe.jsxs)("div",{className:"item-hl ml-auto",children:[u," / ",p]})]}),Object(oe.jsx)("div",{className:"progress border",children:Object(oe.jsx)("div",{className:u===p?"progress-bar bg-completed":"RUNNING"===l?n[s]&&n[s].n_failed>0||f>0?"progress-bar progress-bar-striped progress-bar-animated bg-danger":v>0?"progress-bar progress-bar-striped progress-bar-animated bg-success":j>0?"progress-bar progress-bar-striped progress-bar-animated bg-queue":"progress-bar bg-success":n[s]&&n[s].n_failed>0||f>0?"progress-bar bg-danger":v>0?"progress-bar bg-success":j>0?"progress-bar bg-queue":"progress-bar bg-info",role:"progressbar",style:{width:p>0?u/p*100+"%":"0%"},"aria-valuenow":u,"aria-valuemin":"0","aria-valuemax":p})})]}),Object(oe.jsxs)("div",{className:"col-md-3 text-right",children:[l&&"RUNNING"===l&&Object(oe.jsx)("span",{className:"badge badge-success text-right",children:"ACTIVE"}),l&&"RUNNING"!==l&&Object(oe.jsx)("span",{className:"badge badge-secondary text-right",children:"INACTIVE"})]})]})}),Object(oe.jsxs)("div",{className:"card-body py-1",children:[Object(oe.jsxs)("div",{className:"d-flex justify-content-between",children:[Object(oe.jsx)("div",{children:Object(oe.jsxs)("h6",{className:"card-subtitle text-muted pt-2",children:[Object(oe.jsx)("span",{children:"Owner:"})," ",i]})}),Object(oe.jsx)("div",{children:Object(oe.jsxs)("span",{className:"text-muted",children:["HPC: ",o]})})]}),Object(oe.jsx)("p",{className:"card-text mb-0",children:Object(oe.jsx)("span",{children:c})}),Object(oe.jsxs)("div",{className:"row row-in-card",children:[Object(oe.jsxs)("div",{className:"col-md-3 px-1",children:[!r&&Object(oe.jsx)("button",{className:n[s]?"btn btn-info btn-block btn-sm":"btn btn-primary btn-block btn-sm",type:"button",onClick:function(e){return function(t){t.preventDefault(),a(e)}}(s),"aria-controls":s,"data-toggle":"tooltip","data-placement":"bottom",title:n[s]?"Updates the summary information.":"Shows a summary of the current progress of the experiment.",children:n[s]?"Refresh":"Summary"}),r&&Object(oe.jsx)("button",{className:"btn btn-sm btn-secondary btn-block disabled",disabled:"True",children:"Loading..."})]}),Object(oe.jsxs)("div",{className:"col-md-3 px-1",children:[!0===y&&Object(oe.jsx)("button",{className:"btn btn-sm btn-block",disabled:"True",children:"Tree \u2192"}),!1===y&&Object(oe.jsx)(d.b,{to:"/".concat(b,"/experiment/").concat(s),className:"btn btn-primary btn-block btn-sm","data-toggle":"tooltip","data-placement":"bottom",title:"Opens the experiment page where the Tree View representation is loaded by default.",children:"Tree"})]}),Object(oe.jsxs)("div",{className:"col-md-3 px-1",children:[!0===y&&Object(oe.jsx)("button",{className:"btn btn-sm btn-block",disabled:"True",children:"Graph \u2192"}),!1===y&&Object(oe.jsx)(d.b,{to:"/".concat(b,"/experiment/").concat(s,"/graph"),className:"btn btn-primary btn-block btn-sm","data-toggle":"tooltip","data-placement":"bottom",title:"Opens the experiment page where the Graph View representation is loaded by default.",children:"Graph"})]}),Object(oe.jsx)("div",{className:"col-md-3 px-1",children:Object(oe.jsx)(d.b,{to:"/".concat(b,"/experiment/").concat(s,"/light"),className:"btn btn-primary btn-block btn-sm","data-toggle":"tooltip","data-placement":"bottom",title:"Opens the experiment page where a simple list of jobs and their status is presented. Loads quicker than the Tree View.",children:"Quick"})})]}),n[s]&&Object(oe.jsxs)("div",{className:"row",children:[n[s]&&!0===n[s].error&&Object(oe.jsx)("div",{className:"col scroll-x",id:s,children:Object(oe.jsx)("div",{className:"row text-left",children:Object(oe.jsx)("div",{className:"col-md-12",children:Object(oe.jsxs)("strong",{children:["ERROR: ",n[s].error_message]})})})}),n[s]&&!1===n[s].error&&Object(oe.jsxs)("div",{className:"col scroll-x",id:s,children:[Object(oe.jsx)("div",{className:"row text-left",children:Object(oe.jsxs)("div",{className:"col-md-12",children:["All : avg. queue"," ",Object(oe.jsx)("strong",{children:n[s].avg_queue_time})," | run"," ",Object(oe.jsx)("strong",{children:n[s].avg_run_time})]})}),n[s].sim_queue_considered>0&&Object(oe.jsx)("div",{className:"row text-left",children:Object(oe.jsxs)("div",{className:"col-md-12",children:["SIM "," (",n[s].n_sim,") "," : avg. queue"," ",Object(oe.jsx)("strong",{children:n[s].avg_sim_queue_time})," "," (",n[s].sim_queue_considered,") ","| run"," ",Object(oe.jsx)("strong",{children:n[s].avg_sim_run_time})," (",n[s].sim_run_considered,")"]})}),Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col",children:[n[s].n_running>0&&Object(oe.jsxs)("span",{className:"badge badge-success",children:["Running: ",n[s].n_running]})," ",n[s].n_queuing>0&&Object(oe.jsxs)("span",{className:"badge",style:{backgroundColor:"pink"},children:["Queuing: ",n[s].n_queuing]})," ",n[s].n_submitted>0&&Object(oe.jsxs)("span",{className:"badge",style:{backgroundColor:"cyan"},children:["Submitted: ",n[s].n_submitted]})," ",n[s].n_suspended>0&&Object(oe.jsxs)("span",{className:"badge",style:{backgroundColor:"orange"},children:["Suspended: ",n[s].n_suspended]})]})}),n[s].n_failed>0&&Object(oe.jsxs)("div",{className:"row",children:[Object(oe.jsx)("div",{className:"col-md-2 text-center",children:Object(oe.jsxs)("span",{className:"badge badge-danger",children:["Failed: ",n[s].n_failed]})}),Object(oe.jsx)("div",{className:"col-md-10 text-left",children:Object(oe.jsx)("div",{className:"",style:{overflow:"auto",maxHeight:"200px"},children:Object(oe.jsx)("ol",{children:n[s].failed_jobs.map((function(e){return Object(oe.jsx)("li",{children:e},e)}))})})})]})]})]}),Object(oe.jsxs)("p",{className:"card-text text-center",children:[Object(oe.jsx)("span",{className:"text-muted",children:h}),m&&Object(oe.jsxs)("span",{className:"px-1 ml-1 bg-secondary text-dark rounded",children:[m," wrapper"]})]})]})]})}}]),a}(n.Component),sa=function(){var e,t=Object(n.useContext)(ie),a=t.numberPages,r=t.currentPage,s=t.setCurrentPage,c=t.experiments,i=(e=a+1,Object(ue.a)(Array(e).keys()).slice(1)),o=c?c.filter((function(e){return!1===e.hidden})).length:0,l=function(e){return function(t){t.preventDefault(),s(e)}},d="From "+String(P*(r-1)+1)+" to "+String(P*r>o?o:P*r);return Object(oe.jsx)("div",{className:"item-hl",children:a&&a>1?Object(oe.jsx)("nav",{"aria-label":"Navigation",children:Object(oe.jsxs)("ul",{className:"pagination pagination-sm pt-1",children:[i.map((function(e,t){return e===r?Object(oe.jsx)("li",{className:"page-item active",children:Object(oe.jsx)("button",{className:"page-link",onClick:l(e),children:e})},t):Object(oe.jsx)("li",{className:"page-item",children:Object(oe.jsx)("button",{className:"page-link",onClick:l(e),children:e})},t)})),Object(oe.jsx)("li",{className:"page-item disabled",children:Object(oe.jsx)("button",{className:"page-link",children:d})})]})}):null})},ca=function(){var e=Object(n.useContext)(ie),t=e.loading,a=e.experiments,r=e.summaries,s=e.loadingSummary,c=e.getExperimentSummary,i=e.experimentsInPage,o=e.orderExperimentsInResult,l=e.currentOrderType,d=e.activeInactiveFilter,u=e.typeFilter,p=e.currentSearchString,h=function(e){return function(t){t.preventDefault(),o(e)}};if(t)return Object(oe.jsx)(le,{});var m=a?a.length:0,b=a?a.filter((function(e){return!1===e.hidden})).length:0;return Object(oe.jsxs)("div",{className:"container",children:[Object(oe.jsxs)("div",{className:"d-flex flex-wrap row-hl",children:[Object(oe.jsx)(sa,{}),i&&i.length>0&&Object(oe.jsxs)("div",{className:"item-hl ml-auto mb-1",children:["Order By:"," ",Object(oe.jsxs)("div",{className:"btn-group",role:"group","aria-label":"OrderSwitch",children:[Object(oe.jsxs)("button",{type:"button",className:"btn btn-primary btn-sm",onClick:h(l===L?M:L),children:["Total Jobs ",l===L?Object(oe.jsx)("span",{children:"\u2193"}):Object(oe.jsx)("span",{children:"\u2191"})]}),Object(oe.jsxs)("button",{type:"button",className:"btn btn-primary btn-sm",onClick:h(l===F?U:F),children:["Completed Jobs ",l===F?Object(oe.jsx)("span",{children:"\u2193"}):Object(oe.jsx)("span",{children:"\u2191"})]}),Object(oe.jsxs)("button",{type:"button",className:"btn btn-primary btn-sm",onClick:h(l===G?Y:G),children:["Name ",l===G?Object(oe.jsx)("span",{children:"\u2193"}):Object(oe.jsx)("span",{children:"\u2191"})]})]}),Object(oe.jsxs)("div",{className:"btn-group",role:"group","aria-label":"Order",children:[Object(oe.jsx)("button",{type:"button",className:"btn btn-primary btn-sm",onClick:h(B),children:"Queuing Jobs"}),Object(oe.jsx)("button",{type:"button",className:"btn btn-primary btn-sm",onClick:h(H),children:"Running Jobs"}),Object(oe.jsx)("button",{type:"button",className:"btn btn-primary btn-sm",onClick:h(Q),children:"Failed Jobs"}),Object(oe.jsx)("button",{type:"button",className:"btn btn-primary btn-sm",onClick:h(J),children:"Wrapper"})]})]})]}),Object(oe.jsx)("div",{className:"card-columns",children:i&&i.length>0&&i.filter((function(e){return!1===e.hidden})).map((function(e){return Object(oe.jsx)(ra,{experiment:e,summaries:r,isLoading:(t=s,a=e.name,!!(t&&a&&t.has(a))),getExperimentSummary:c},e.id);var t,a}))}),Object(oe.jsx)("div",{className:"row",children:Object(oe.jsxs)("div",{className:"col",children:[p?Object(oe.jsx)("span",{className:"px-1 ml-1 bg-secondary text-dark rounded",children:i&&b>0?Object(oe.jsxs)("span",{children:["Considering ",Object(oe.jsx)("strong",{children:b})," of ",Object(oe.jsx)("strong",{children:m})," results for: ",Object(oe.jsx)("i",{children:p})]}):Object(oe.jsx)("i",{children:"No results"})}):Object(oe.jsx)("span",{className:"px-1 ml-1 bg-secondary text-dark rounded",children:i&&b>0?Object(oe.jsxs)("span",{children:["Considering ",Object(oe.jsx)("strong",{children:b})," of ",Object(oe.jsx)("strong",{children:m})," active experiments"]}):Object(oe.jsx)("i",{children:"No results"})}),u&&Object(oe.jsxs)("span",{className:"px-1 ml-1 bg-secondary text-dark rounded",children:["Type of Experiment: ",Object(oe.jsx)("strong",{children:u})]}),d&&Object(oe.jsxs)("span",{className:"px-1 ml-1 bg-secondary text-dark rounded",children:["Status: ",Object(oe.jsx)("strong",{children:d})]}),l&&Object(oe.jsxs)("span",{className:"px-1 ml-1 bg-secondary text-dark rounded",children:["Ordered by: ",Object(oe.jsx)("strong",{children:l})]})]})})]})},ia=a(29),oa=a.n(ia),la=function(e){var t=oa.a.parse(e.location.search);return Object(oe.jsxs)(n.Fragment,{children:[Object(oe.jsx)(na,{specificSearch:t.user}),Object(oe.jsx)(ca,{})]})},da=function(e){var t=Object(n.useContext)(ie),a=t.getVerifyTicket,r=t.loggedUser;Object(n.useEffect)((function(){var t=oa.a.parse(e.location.search);t.ticket?s(t.ticket):c()}),[]);var s=function(e){a(e)},c=function(){var e="https://cas.bsc.es/cas/login?service=https://earth.bsc.es/".concat(b,"/login");window.location.href=e};return r?(r&&setTimeout((function(){e.history.push("/".concat(b,"/?user=").concat(r))}),3e3),"Failed"===r?Object(oe.jsxs)("div",{children:["Oops! We couldn't authenticate you.",Object(oe.jsx)("p",{children:"You will be redirected after some seconds."})]}):Object(oe.jsxs)("div",{children:["Welcome ",r,Object(oe.jsx)("p",{children:"We are currently testing CAS login for Autosubmit GUI. Thanks for logging in."}),Object(oe.jsx)("p",{children:"You will be redirected after some seconds."})]})):null},ua=function(){return Object(oe.jsx)("div",{children:"Profile..."})};var pa={height:40},ha=function(){return Object(oe.jsx)(n.Fragment,{children:Object(oe.jsx)("div",{className:"row",style:pa})})},ma=a(4),ba=a.n(ma),ja=a(5),fa=a(7),xa=a.n(fa),ga=a(2),Oa="SEARCH_EXPERIMENTS",va="GET_EXPERIMENT",Na="CLEAR_EXPERIMENTS",ya="SET_LOADING",Aa="SET_LOADING_GRAPH",Sa="SET_LOADING_TREE",Ea="SET_OFF_LOADING_TREE",Ca="SET_LOADING_SUMMARY",Ta="SET_ALERT",wa="REMOVE_ALERT",Ra="GET_GRAPH",ka="GET_TREE",Da="CLEAN_GRAPH_DATA",_a="CLEAN_TREE_DATA",Ia="CLEAN_RUN_DATA",Pa="UPDATE_SELECTION",La="GET_EXPERIMENT_RUN",Ma="GET_JOB_LOG",Fa="SET_LOADING_RUN",Ua="SET_AUTOUPDATE_RUN",Ga="SET_LOADING_JOB_MONITOR",Ya="SET_LOADING_TREE_REFRESH",Ba="GET_PKL_DATA",Ha="SET_LOADING_PKL",Qa="SET_LOADING_TREE_PKL",Ja="SHOULD_UPDATE_GRAPH",Va="SET_AUTOUPDATE_PKL",Wa="SET_AUTOUPDATE_TREE_PKL",qa="CLEAN_PKL_DATA",za="CLEAN_TREE_PKL_DATA",Ka="UPDATE_EXPERIMENT_TS",Xa="SET_VIS_DATA",Za="SET_VIS_NETWORK",$a="GET_EXPERIMENT_STATS",en="CLEAR_STATS",tn="SET_FOUND_NODES",an="SET_LOADING_SEARCH_JOB",nn="SET_LOADING_STATE",rn="CLEAN_NAV_DATA",sn="GET_RUNNING_STATE",cn="SET_FANCYTREE",on="FILTER_TREEVIEW",ln="SET_LOADING_FILTER",dn="UPDATE_SELECTION_TREE",un="CLEAR_FILTER_TREE",pn="CURRENT_RUNNING",hn="PKL_TREE_LOADED",mn="CLEAN_ONLY_GRAH_DATA",bn="GET_EXPERIMENT_SUMMARY",jn="CLEAR_SUMMARY_EXP",fn="GET_EXPERIMENT_PERFORMANCE",xn="CLEAN_PERFORMANCE_METRICS",gn="ACTIVATE_SELECTION_MODE",On="DEACTIVATE_SELECTION_MODE",vn="UPDATE_SELECTED_JOBS",Nn="REMOVE_SELECTED_JOB",yn="SET_CURRENT_COMMAND",An="SET_CURRENT_TEXT_COMMAND",Sn="NAVIGATE_TO_LATEST",En="NAVIGATE_AFTER_LOADING_GRAPH",Cn="NAVIGATE_GRAPH_TO",Tn="NAVIGATE_TO_GROUP_GRAPH",wn="SET_START_TREE_SELECTION",Rn="UPDATE_GRAPH_SELECTED_NODES",kn="UPDATE_TREE_SELECTED_NODES",Dn="SET_NOTIFICATION_TITLE_TREE",_n="SET_NOTIFICATION_TITLE_GRAPH",In="INCREASE_LOADING_TREE",Pn="CLEAN_EXPERIMENT_DATA",Ln="SET_OFF_LOADING_GRAPH",Mn="SET_CURRENT_UPDATE_DESCRIP_COMMAND",Fn="GET_LOG_RUNNING_DATA",Un="SET_WARNING_ACTIVE",Gn="GET_LIGHTER_VIEW",Yn="SET_LOADING_LIGHTER_VIEW",Bn="CLEAN_LIGHTER_VIEW_DATA",Hn="SET_LIGHTER_FANCY_TREE",Qn="FILTER_LIGHTER_TREE_VIEW",Jn="SET_LOADING_FILTER_LIGHTER_TREE_VIEW",Vn="CLEAR_LIGHTER_FILTER",Wn="INCREASE_LOADING_QUICK_VIEW",qn="LOADING_PERFORMANCE_METRICS",zn="SET_PERFORMANCE_DISPLAY",Kn="GET_JOB_HISTORY",Xn="LOADING_JOB_HISTORY",Zn="LOADING_EXPERIMENT_RUNS",$n="GET_EXPERIMENT_RUNS",er="GET_EXPERIMENT_RUN_JOBDATA",tr="LOADING_PREVIOUS_RUN",ar="GET_FILE_STATUS",nr="CLEAN_FILE_STATUS_DATA",rr="VERIFY_TOKEN_DATA",sr="SET_LOGGED_USER",cr="UPDATE_DESCRIPTION_OWN_EXP",ir="SEARCH_BY_OWNER",or="GET_CURRENT_CONFIGURATION",lr="CLEAR_CURRENT_CONFIGURATION_DATA",dr="TEST_TOKEN",ur="SET_JOB_INFO_PANEL_VISIBILITY",pr="SET_PAGINATED_RESULT",hr="SET_CURRENT_PAGE",mr="ORDER_EXPERIMENTS_RESULT",br="APPLY_FILTER",jr="SET_FILTER_CHART",fr=function(e,t){switch(t.type){case gn:return Object(ga.a)(Object(ga.a)({},e),{},{canSelect:!0,currentSelected:[],currentCommand:null,currentTextCommand:null});case On:return Object(ga.a)(Object(ga.a)({},e),{},{canSelect:!1,currentSelected:[],currentCommand:null,currentTextCommand:null});case Ia:return Object(ga.a)(Object(ga.a)({},e),{},{rundata:null,startAutoUpdateRun:!1});case Pn:return Object(ga.a)(Object(ga.a)({},e),{},{experiment:null,loading:!1,totalJobs:0,expectedLoadingTreeTime:0,expectedLoadingQuickView:0,data:null,canSelect:!1,joblog:null,currentUpdateDescripCommand:null,logTimeDiff:0,currentLog:null,currentConfiguration:null,performancedata:null,performanceDisplayPlots:ce});case nr:return Object(ga.a)(Object(ga.a)({},e),{},{esarchiveStatus:null});case lr:return Object(ga.a)(Object(ga.a)({},e),{},{currentConfiguration:null,currentDifferences:new Set});case Xn:return Object(ga.a)(Object(ga.a)({},e),{},{jobHistory:null});case Kn:return console.log(t.payload),Object(ga.a)(Object(ga.a)({},e),{},{jobHistory:t.payload});case ar:return Object(ga.a)(Object(ga.a)({},e),{},{esarchiveStatus:t.payload});case Zn:return Object(ga.a)(Object(ga.a)({},e),{},{experimentRuns:null,loadingExperimentRuns:!0});case $n:return Object(ga.a)(Object(ga.a)({},e),{},{experimentRuns:t.payload,loadingExperimentRuns:!1});case Ka:var a=t.payload;return e.experiment.pkl_timestamp=a,Object(ga.a)({},e);case Oa:case ir:var n=t.payload,r=n.result,s=n.searchText,c=n.expType,i=n.activeCheck,o=r;return o&&(o.sort((function(e,t){return e.status>t.status?-1:1})),o.forEach((function(e){e.hidden=!1}))),Object(ga.a)(Object(ga.a)({},e),{},{experiments:o,loading:!1,currentPage:1,currentOrderType:null,typeFilter:se(c),activeInactiveFilter:re(i),currentSearchString:s});case pn:var l=t.payload;return l&&(l.sort((function(e,t){return e.status>t.status?-1:1})),l.forEach((function(e){e.hidden=!1}))),Object(ga.a)(Object(ga.a)({},e),{},{experiments:l,loading:!1,currentPage:1,currentSearchString:null,currentOrderType:null,activeInactiveFilter:V,typeFilter:K});case Ua:return Object(ga.a)(Object(ga.a)({},e),{},{startAutoUpdateRun:t.payload});case ya:return Object(ga.a)(Object(ga.a)({},e),{},{loading:!0});case nn:return Object(ga.a)(Object(ga.a)({},e),{},{loadingState:!0});case Fa:return Object(ga.a)(Object(ga.a)({},e),{},{loadingRun:!0});case Na:return Object(ga.a)(Object(ga.a)({},e),{},{experiments:[],experimentsInPage:[],summaries:[],loading:!1,currentPage:1,numberPages:0,currentSearchString:null,currentOrderType:null,activeInactiveFilter:null,typeFilter:null});case mr:var d=t.payload,u=null,p=e.experiments,h=e.activeInactiveFilter,m=e.typeFilter;if(p&&p.length>0)switch(d){case J:p.sort((function(e,t){return Ae(e.wrapper)[{v}] {differences.has(`${confName}+${v}`) && alertSpan}
\nSetting | \nValue | \n
---|---|
{w} {differences.has(`${confName}+${v}+${w}`) && alertSpan} | \n{conf[v][w]} | \n
{error_message}}{\" \"}\n {loadingState && (\n LOADING...\n )}\n {experimentRunning && !loadingState && (\n ACTIVE\n )}\n {!experimentRunning && !loadingState && (\n INACTIVE\n )}\n \n
\n For user instructions visit our user guide{\" \"}\n \n User Guide\n \n .\n
*/}\n\n To request more information make a post in the issue{\" \"}\n \n Autosubmit User Documentation\n \n .\n
\n\n If you find a bug or want to request some important feature, please open\n an issue at{\" \"}\n \n Autosubmit Issues\n \n .\n
\nVersion: 1.0.0-beta
\nLooks like you are lost. Better go back home.
\n \n Back Home\n \n\n Press Classic to see the\n standard graph representation of the experiment.\n
\n\n For the classic approach, the algorithm will first try to use\n graphviz, there are some constraints in place that try to identify\n those instances that could potentially make graphviz run forever. If\n an experiment is identified to be time-wise out of bounds for\n graphviz, it will be sent to the regular algorithm. Currently, the\n regular algorithm does not handle well wrappers; work is being done\n to developed a general algorithm.\n
\n\n Press Date-Member to see the graph representation grouped by date-member.\n
\n\n\n Press Status to see the graph representation grouped by status. FAILED jobs are not grouped.\n
\n\n\n The button produces a graph representation based on 2nd and 3rd eigenvectors of the Laplacian Matrix of the Graph representation of your experiment. Could be interesting in some instances.\n
\n\n {/*\n If the experiment instance cannot be handled by graphviz, then it\n would not be possible to group it. Again, work is being done to\n overcome this.\n
*/}\n\n If the experiment is{\" \"}\n RUNNING and the Graph\n has been rendered, press{\" \"}\n Start Job Monitor to start\n a live tracker of the changes on the experiment's jobs. This process\n will automatically update the graph's nodes colors and show a log of\n the detected changes.\n
\n\n If there are any defined wrappers, they will be shown on the\n corresponding tab at the right side of the Graph. You can click on\n any member of that list and the nodes belonging to that wrapper will\n be highlighted.\n
\nSomething has gone very wrong.
\n{this.props.data.error_message}
\n\n This experiment might be too heavy to fetch in due time. If an error\n message is prompted, try the Quick View.\n
\n )}\n{fetchMessage}
\n\n Press Show to see the tree\n view representation of the experiment.\n
\n\n Repeating subtrees in the tree view are only shown once, use the\n searcher to focus only on those items.\n
\nSomething has gone very wrong.
\n\n {this.props.treedata.error_message}\n
\n\n Press View to see the\n light-version of the experiment representation.\n
\nUse the search tool.
\nSomething has gone very wrong.
\n{this.props.errorMessage}
\n\n Submit:\n | \n\n \n {selectedNode.submit}\n \n | \n
\n Start:\n | \n\n \n {selectedNode.start}\n \n | \n
\n Finish:\n | \n\n \n {selectedNode.finish}\n \n | \n
The information directly related to the jobs' status comes from the pkl file that Autosubmit generates and constantly updates when your experiment is running. This file stores key information from your jobs that allow us to identify them and retrieve their information.
\nThe queuing and running times come from the files that Autosubmit generates to store the submit, start, finish times, and the status of your job. These files usually end with the string *_TOTAL_STATS where * is replaced by the job's name. This file can contain the registers for many runs of the same job. Moreover, the latest version of Autosubmit implements a job historical database that improves the previously described functionality and extends its data retrieval capabilities. If this information is available, it will be prioritized over the former source.
\n \n \n\nThe pkl file of your experiment stores the current status of its jobs. The *_TOTAL_STATS files that Autosubmit generates also store the status of the corresponding job in the experiment. Whenever the values on these sources differ, the GUI assumes that something is not working right and it will show the SUSPICIOUS status text next to the job's name as a warning. Sometimes there is a little bit of delay between Autosubmit updating the pkl file and updating or creating the *_TOTAL_STATS file, in this case the SUSPICIOUS status should be replaced by the right status after some minutes if you Refresh (or F5) the Tree/Graph/Quick view of your experiment, or if the Job Monitor tool is active. However, if it does not disappear, it could mean that truly something wrong is happening with your experiment.
\n\nThis means the Autosubmit GUI could not read the conf files of your experiment due to their level of protection. Make sure that your conf files have read permission for your user group (chmod 777
them won't hurt).
If you find that something is broken or you suspect that it is not working correctly, you can open an issue at Autosubmit Project Issues.
\n\nRefer to the definition of the Generalization of SYPD and ASYPD at Autosubmit API Wiki: Performance Metrics. SYPD is automatically updated when Job Monitor is active. ASYPD, due to the nature of its computation, will require a reload of the Tree or Graph view to be updated.
\n \nThe .pkl file stores the most important data of the list of jobs in your experiment. Its name has the format job_list_%expid%.pkl and is located in the /pkl/ folder of your experiment. An exception or interruption of the normal execution of Autosubmit can result in a blank pkl file, see autosubmit recovery for instructions to recover your experiment information. However, it could happen that there already exists a valid version of your pkl file in the corresponding folder but it is named as a backup file that was not properly restored. If that is the case, run the command autosubmit pklfix expid
on the latest version of Autosubmit, where expid is replaced by your experiment identifier.
We will continue adding more information. For suggestions, you can open an issue on the Autosubmit project.
\n\n\n Submit:\n | \n\n \n {selectedNode.submit}\n \n | \n
\n Start:\n | \n\n \n {selectedNode.start}\n \n | \n
\n Finish:\n | \n\n \n {selectedNode.finish}\n \n | \n
Showing last 50 lines of the log file:
*/}\n\n
{pklchanges}}\n {loadingPkl && Loading...}\n
{pkltreechanges}\n )}\n {loadingTreePkl && Loading...}\n
Failed Attempts: ${formatNumberMoney(d.failedCount, true)}
\n `\n : \n `\nQueue: ${formatNumberMoney(d.completedQueueTime, false, 4)} h.
\n ` + (metrics.includes(\"completedRunTime\") ? `Run: ${formatNumberMoney(d.completedRunTime, false, 4)} h.
`: ``)\n + (metrics.includes(\"failedQueueTime\") ? `Failed Queue: ${formatNumberMoney(d.failedQueueTime, false, 4)} h.
` : ``)\n + (metrics.includes(\"failedRunTime\") ? `Failed Run: ${formatNumberMoney(d.failedRunTime, false, 4)} h.
` : ``))\n );\n }\n \n function hideTooltip() { \n tooltip\n .style(\"left\", \"10px\")\n .style(\"top\", \"10px\")\n .style(\"opacity\", 0); \n }\n\n function colorMetric(metric) {\n let color = unknownColor.background;\n switch(metric) {\n case \"completedQueueTime\":\n color = queueColor.background;\n break;\n case \"completedRunTime\":\n color = runningColor.background;\n break;\n case \"failedQueueTime\":\n color = failedQueueColor;\n break;\n case \"failedCount\":\n case \"failedRunTime\":\n color = failedRunAttempts;\n break; \n default:\n color = unknownColor.background;\n }\n return color;\n } \n\n function calculateBarHeight(d, ignoredMetrics = []) {\n // const metricsNumber = metrics.length; \n\n const _barCount = [ignoredMetrics.includes(\"completedRunTime\") ? 0.00 : d.completedRunTime, \n ignoredMetrics.includes(\"completedQueueTime\") ? 0.00 : d.completedQueueTime, \n ignoredMetrics.includes(\"failedQueueTime\") ? 0.00 : d.failedQueueTime,\n ignoredMetrics.includes(\"failedRunTime\") ? 0.00 : d.failedRunTime].filter(x => Number.parseFloat(x) > 0.00); \n // console.log(_barCount);\n const barCount = _barCount.length; \n // console.log(d.name + \" : \" + barCount);\n // return (barCount) * singleBarHeight;\n switch (barCount) {\n case 3:\n return tripleBarHeight;\n case 4:\n default:\n return singleBarHeight;\n case 2:\n return doubleBarHeight;\n case 1: \n return totalBarHeight; \n case 0:\n return totalBarHeight; \n }\n }\n\n function onClickFilter(currentChecked, currentValue) {\n // console.log(currentChecked);\n // console.log(currentValue);\n const currentQueue = d3.select(`#queueTimeChart-${helperId}`).property(\"checked\");\n const currentRun = d3.select(`#runTimeChart-${helperId}`).property(\"checked\");\n const currentFailedQueue = d3.select(`#failedQueueTimeChart-${helperId}`).property(\"checked\");\n const currentFailedRun = d3.select(`#failedRunTimeChart-${helperId}`).property(\"checked\");\n const ignoreMetrics = [\n currentQueue === false || (currentValue === \"completedQueueTime\" && currentValue === false) ? \"completedQueueTime\" : \"\",\n currentRun === false || (currentValue === \"completedRunTime\" && currentValue === false) ? \"completedRunTime\" : \"\",\n currentFailedQueue === false || (currentValue === \"failedQueueTime\" && currentValue === false) ? \"failedQueueTime\" : \"\",\n currentFailedRun === false || (currentValue === \"qufailedRunue\" && currentValue === false) ? \"failedRunTime\" : \"\",\n ];\n\n\n if (currentChecked === false) {\n d3.selectAll(`.newbar-${helperId}`).remove(); \n d3.selectAll(`.newtext-${helperId}`).remove();\n d3.selectAll(`.xaxis-${helperId}`).remove();\n addBars(metrics, ignoreMetrics); \n } else {\n d3.selectAll(`.newbar-${helperId}`).remove(); \n d3.selectAll(`.newtext-${helperId}`).remove();\n d3.selectAll(`.xaxis-${helperId}`).remove();\n addBars(metrics, ignoreMetrics);\n }\n }\n\n // Actions\n d3.select(`#queueTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n });\n \n d3.select(`#runTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n })\n \n d3.select(`#failedQueueTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n })\n\n d3.select(`#failedRunTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n })\n }\n\n componentDidMount() {\n\n // Min Max pairs\n if (this.props.data.length > 0) {\n this.handleBarChart();\n } \n\n };\n\n componentDidUpdate() {\n if (this.props.data.length > 0) {\n this.handleBarChart();\n }\n }\n\n componentWillUnmount() {\n // console.log('Unmounting Bar Chart')\n }\n\n render() {\n\n if (this.props.data.length === 0) {\n return (\n\n Supply a Section (Type) in the appropriate textbox to filter the\n jobs that will be included in the query. Also, you can\n supply the Hours value that determines how many hours before the current time you want to query. \n
\n\n Press Get Statistics{\" \"}\n to generate the result. The main BarChart can be filtered using the supplied checkboxes.\n
\nDescription | \nCount | \n {filterAppliedCount > 0 &&Count (*) | }\n
---|---|---|
Jobs Submitted | \n{jobsSubmittedCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsSubmittedCount} | } \n
Jobs Run | \n{jobsRunCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsRunCount} | } \n
Jobs Completed | \n{jobsCompletedCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsCompletedCount} | } \n
Jobs Failed | \n{jobsFailedCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsFailedCount} | } \n
Description | \nHours | \n {filterAppliedCount > 0 &&Hours (*) | }\n
---|---|---|
Expected CPU Consumption | \n{expectedCpuConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.expectedCpuConsumption} | } \n
CPU Consumption | \n{cpuConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.cpuConsumption} | } \n
Failed CPU Consumption | \n{failedCpuConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.failedCpuConsumption} | } \n
Description | \nHours | \n {filterAppliedCount > 0 &&Hours (*) | }\n
---|---|---|
Expected Consumption | \n{expectedConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.expectedConsumption} | } \n
Real Consumption | \n{realConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.realConsumption} | } \n
Failed Real Consumption | \n{failedRealConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.failedRealConsumption} | } \n
\n {summaryHeader}\n
\n\n \n CPU Consumption {`${cpuConsumptionPercentage} %`} {filterAppliedCount > 0 && {`${filteredStats.cpuConsumptionPercentage} %`}(*)}\n \n \n Total Queue Time {`${totalQueueTime} hours`} {filterAppliedCount > 0 && {`${filteredStats.totalQueueTime} hours`}(*)}\n \n
\n${d.name}
\nQueue: ${secondsToDelta(d.queue)}
\nRun: ${secondsToDelta(d.running)}
\n${attribute}: ${d[attribute]}
\n `\n );\n }\n \n function hideTooltip() {\n tooltip\n .style(\"left\", \"10px\")\n .style(\"top\", \"10px\")\n .style(\"opacity\", 0);\n }\n\n }\n\n componentDidMount() {\n if (this.props.data.length > 0) {\n this.handleScatterPlot();\n this.applyLegendPlot();\n } \n }\n\n render () {\n\n if (this.props.data.length === 0) {\n return (\n${d.name}
\nQueue: ${secondsToDelta(d.queue)}
\nRun: ${secondsToDelta(d.running)}
\n${attributeX}: ${attributeX === \"JPSY\" ? formatNumberMoney(d[attributeX]) : d[attributeX]}
\n${attributeY}: ${d[attributeY]}
\n `\n );\n }\n\n function hideTooltip() {\n tooltip\n .style(\"left\", \"10px\")\n .style(\"top\", \"10px\")\n .style(\"opacity\", 0);\n }\n \n }\n\n componentDidMount() {\n if (this.props.data.length > 0) {\n this.handleScatterPlot();\n }\n }\n \n render() {\n if (this.props.data.length === 0) {\n return (\nPress Show.
\n\n Parallelization:{\" \"}{Parallelization} \n RSYPD:{\" \"}{RSYPD}\n
\nMetric | \nValue | \nMin | \nMax | \nMean | \nSD | \nMAD | \n
---|---|---|---|---|---|---|
JPSY | \n{formatNumberMoney(JPSY, true)} | \n{formatNumberMoney(Math.min(...arrJPSYdata), true)} | \n{formatNumberMoney(Math.max(...arrJPSYdata), true)} | \n{formatNumberMoney(arrayAverage(arrJPSYdata))} | \n{formatNumberMoney(arrayStandardDeviation(arrJPSYdata))} | \n{formatNumberMoney(arrayMeanAbsoluteDeviationAroundMean(arrJPSYdata))} | \n
SYPD | \n{formatNumberMoney(SYPD)} | \n{formatNumberMoney(Math.min(...arrSYPDdata))} | \n{formatNumberMoney(Math.max(...arrSYPDdata))} | \n{formatNumberMoney(arrayAverage(arrSYPDdata))} | \n{formatNumberMoney(arrayStandardDeviation(arrSYPDdata))} | \n{formatNumberMoney(arrayMeanAbsoluteDeviationAroundMean(arrSYPDdata))} | \n
ASYPD | \n{formatNumberMoney(ASYPD)} | \n{formatNumberMoney(Math.min(...arrASYPDdata))} | \n{formatNumberMoney(Math.max(...arrASYPDdata))} | \n{formatNumberMoney(arrayAverage(arrASYPDdata))} | \n{formatNumberMoney(arrayStandardDeviation(arrASYPDdata))} | \n{formatNumberMoney(arrayMeanAbsoluteDeviationAroundMean(arrASYPDdata))} | \n
CHSY | \n{formatNumberMoney(CHSY)} | \n{formatNumberMoney(Math.min(...arrCHSY))} | \n{formatNumberMoney(Math.max(...arrCHSY))} | \n{formatNumberMoney(arrayAverage(arrCHSY))} | \n{formatNumberMoney(arrayStandardDeviation(arrCHSY))} | \n{formatNumberMoney(arrayMeanAbsoluteDeviationAroundMean(arrCHSY))} | \n
Considered: ({considered.length})
\n# | \nJob Name | \nQueue | \nRun | \nCHSY | \nSYPD | \nASYPD | \nJPSY | \nEnergy | \n
---|---|---|---|---|---|---|---|---|
{index + 1} | \n{item.name} | \n\n {secondsToDelta(item.queue)}\n | \n\n {secondsToDelta(item.running)}\n | \n\n {formatNumberMoney(item.CHSY)}\n | \n\n {formatNumberMoney(item.SYPD)}\n | \n\n {formatNumberMoney(item.ASYPD)}\n | \n\n {formatNumberMoney(item.JPSY, true)}\n | \n\n {formatNumberMoney(item.energy, true)}\n | \n
\n {\" \"}\n There are some warnings about the calculations of performance\n metrics:{\" \"}\n \n
\n\n Parallelization: Total number of cores allocated\n for the run, per SIM.\n
\n\n JPSY: Energy cost of a simulation, measured in\n Joules per simulated year. The JPSY value at the experiment level is the mean of the values calculated at the job level. \n Energy values are only collected for jobs running on Marenostrum4.\n In rare occassions the query that retrieves the energy information fails and the value stays at 0.\n Jobs with 0 energy value are not considered for the calculation. \n
\n\n SYPD: Simulated Years Per Day for the model in a 24h period. \n The value at the experiment level is the mean of the values calculated at the job level.\n
\n\n ASYPD: Actual Simulated Years Per Day, this number should be lower than SYPD due to interruptions, queue wait time, POST jobs, data transfer, or\n issues with the model workflow.\n The ASYPD value calculated at the job level uses a generalization of the formula applied at the experiment level. \n As a consequence, the ASYPD value at the experiment level can be different that the mean of the values calculated at the job level.\n
\n\n CHSY: Core Hours Per Simulated Year. \n This metric is the product of the model runtime for 1 Simulated Year and the number of processors (Parallelization) allocated. \n The CHSY value at the experiment level is the mean of the values calculated at the job level.\n
\n\n RSYPD: \"Real\" Simulated Years Per Day. This variation of SYPD has been defined only at the experiment level. It depends on the existences of TRANSFER or CLEAN jobs. Then, it uses the finish time of the last TRANSFER or CLEAN job and the start time of the first SIM job in the experiment to calculate an approximation of the total duration of the simulation.\n
\n\n Considered: Scrollable list where each item in the\n list represents job information showing Job Name,{\" \"}\n QUEUE and RUNNING time in{\" \"}\n HH:mm:ss format, CHSY, JPSY\n , and raw Energy consumption for that job.{\" \"}\n \n Note: Energy values are only collected for those jobs running on\n MareNostrum4 and using the latest version of Autosubmit.\n Subsequent development will expand this feature for other\n platforms.\n \n
\n \n\n Visit{\" \"}\n \n Performance Metrics Documentation\n {\" \"}\n for more details.\n
\n{currentConfiguration.warningMessage}
} \n {messageAreEqual && ({messageAreEqual}
)}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.conf ? generateConfigFileHtml(currentRunConfiguration.conf, \"conf\", configDifferences, alertDifferenceSpan) : messageNoInformation} \nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.conf ? generateConfigFileHtml(currentFileSystemConfiguration.conf, \"conf\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.exp ? generateConfigFileHtml(currentRunConfiguration.exp, \"exp\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.exp ? generateConfigFileHtml(currentFileSystemConfiguration.exp, \"exp\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.jobs ? generateConfigFileHtml(currentRunConfiguration.jobs, \"jobs\", configDifferences, alertDifferenceSpan) :{messageNoInformation}
}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.jobs ? generateConfigFileHtml(currentFileSystemConfiguration.jobs, \"jobs\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.platforms ? generateConfigFileHtml(currentRunConfiguration.platforms, \"platforms\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.platforms ? generateConfigFileHtml(currentFileSystemConfiguration.platforms, \"platforms\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.proj ? generateConfigFileHtml(currentRunConfiguration.proj, \"proj\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.proj ? generateConfigFileHtml(currentFileSystemConfiguration.proj, \"proj\", configDifferences, alertDifferenceSpan) : messageNoInformation}\n\n Press SHOW CURRENT INFORMATION to visualize the current configuration of your experiment. The information will be retrieved from the historical database and from the filesystem, each datasource is displayed in its own table.\n
\nIt is the configuration of your experiment stored in the files inside the folder conf. Autosubmit GUI might have problems accessing this information if your conf files have restricted read permissions.
\n\n Whenever you start a new run of your experiment, the current configuration stored in the file system is stored in the historical database for reference.\n
\n\n A new run is created in any of these situations: \n
\nautosubmit create
is executed.autosubmit run
is executed and the historical database is empty.autosubmit run
is executed and it is detected that the number of jobs in the experiment has changed.autosubmit setstatus
and/or a significant amount of jobs changes status.\n Press{\" \"}\n Show Log{\" \"}\n to see the last 50 lines of the running log of this\n experiment. If the experiment is running, the log\n will update automatically.\n
\n\n {description}\n
\n\n\n {version}{wrapper && ({wrapper} wrapper)}\n
\nYou will be redirected after some seconds.
\nWe are currently testing CAS login for Autosubmit GUI. Thanks for logging in.
\n\nYou will be redirected after some seconds.
\nQueue: ".concat(P_(_.completedQueueTime,!1,4)," h.
\n ")+(a.includes("completedRunTime")?"Run: ".concat(P_(_.completedRunTime,!1,4)," h.
"):"")+(a.includes("failedQueueTime")?"Failed Queue: ".concat(P_(_.failedQueueTime,!1,4)," h.
"):"")+(a.includes("failedRunTime")?"Failed Run: ".concat(P_(_.failedRunTime,!1,4)," h.
"):""))}function z(){d.style("left","10px").style("top","10px").style("opacity",0)}function C(_){var a=k.background;switch(_){case"completedQueueTime":a=O.background;break;case"completedRunTime":a=I.background;break;case"failedQueueTime":a=g;break;case"failedCount":case"failedRunTime":a=L;break;default:a=k.background}return a}function E(_){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],e=[a.includes("completedRunTime")?0:_.completedRunTime,a.includes("completedQueueTime")?0:_.completedQueueTime,a.includes("failedQueueTime")?0:_.failedQueueTime,a.includes("failedRunTime")?0:_.failedRunTime].filter((function(_){return Number.parseFloat(_)>0})),t=e.length;switch(t){case 3:return i;case 4:default:return u;case 2:return n;case 1:case 0:return c}}function A(_,t){var s=[!1===Na.k("#queueTimeChart-".concat(e)).property("checked")||"completedQueueTime"===t&&!1===t?"completedQueueTime":"",!1===Na.k("#runTimeChart-".concat(e)).property("checked")||"completedRunTime"===t&&!1===t?"completedRunTime":"",!1===Na.k("#failedQueueTimeChart-".concat(e)).property("checked")||"failedQueueTime"===t&&!1===t?"failedQueueTime":"",!1===Na.k("#failedRunTimeChart-".concat(e)).property("checked")||"qufailedRunue"===t&&!1===t?"failedRunTime":""];Na.l(".newbar-".concat(e)).remove(),Na.l(".newtext-".concat(e)).remove(),Na.l(".xaxis-".concat(e)).remove(),m(a,s)}f.attr("width",s),f.attr("height",t),f.selectAll("*").remove(),m(a),Na.k(this.svgElement).append("text").attr("x",310).attr("y",25).attr("font-size","1.5em").style("text-anchor","middle").text(this.props.title),Na.k(this.svgElement).append("text").attr("x",310).attr("y",t-r+2).attr("dy","1.5em").style("text-anchor","middle").text(this.props.xtitle),Na.k(this.svgElement).append("text").attr("transform","rotate(-90)").attr("x",-t/2).attr("y",r).attr("dy","-1.1em").style("text-anchor","middle").text("Job Name"),Na.k("#queueTimeChart-".concat(e)).on("click",(function(){Na.e.target.checked;A(0,Na.e.target.value)})),Na.k("#runTimeChart-".concat(e)).on("click",(function(){Na.e.target.checked;A(0,Na.e.target.value)})),Na.k("#failedQueueTimeChart-".concat(e)).on("click",(function(){Na.e.target.checked;A(0,Na.e.target.value)})),Na.k("#failedRunTimeChart-".concat(e)).on("click",(function(){Na.e.target.checked;A(0,Na.e.target.value)}))}},{key:"componentDidMount",value:function(){this.props.data.length>0&&this.handleBarChart()}},{key:"componentDidUpdate",value:function(){this.props.data.length>0&&this.handleBarChart()}},{key:"componentWillUnmount",value:function(){}},{key:"render",value:function(){if(0===this.props.data.length)return Object(n_.jsx)("div",{children:Object(n_.jsx)("div",{className:"row",children:Object(n_.jsx)("div",{className:"col",children:"No data"})})});var _=this.props.metrics.includes("completedQueueTime")?Object(n_.jsxs)("div",{className:"form-check form-check-inline",children:[Object(n_.jsx)("input",{type:"checkbox",name:"chartMetricsQ",id:"queueTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"completedQueueTime"}),Object(n_.jsx)("label",{htmlFor:"queueTimeChart",className:"px-1 mx-1 rounded form-check-label ",style:{background:O.background},children:"Queue"})]}):null,a=this.props.metrics.includes("completedRunTime")?Object(n_.jsxs)("div",{className:"form-check form-check-inline",children:[Object(n_.jsx)("input",{type:"checkbox",name:"chartMetricsR",id:"runTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"completedRunTime"}),Object(n_.jsx)("label",{htmlFor:"runTimeChart",className:"px-1 mx-1 rounded form-check-label text-white",style:{background:I.background},children:"Run"})]}):null,e=this.props.metrics.includes("failedQueueTime")?Object(n_.jsxs)("div",{className:"form-check form-check-inline",children:[Object(n_.jsx)("input",{type:"checkbox",name:"chartMetricsFq",id:"failedQueueTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"failedQueueTime"}),Object(n_.jsx)("label",{htmlFor:"failedQueueTimeChart",className:"px-1 mx-1 rounded form-check-label",style:{background:g},children:"Failed Queue"})]}):null,t=this.props.metrics.includes("failedRunTime")?Object(n_.jsxs)("div",{className:"form-check form-check-inline",children:[Object(n_.jsx)("input",{type:"checkbox",name:"chartMetricsFr",id:"failedRunTimeChart-".concat(this.props.helperId),className:"form-check-input",defaultChecked:!0,value:"failedRunTime"}),Object(n_.jsx)("label",{htmlFor:"failedRunTimeChart",className:"px-1 mx-1 rounded form-check-label",style:{background:L},children:"Failed Run"})]}):null,s=this.props.metrics.includes("failedCount")?Object(n_.jsx)("div",{className:"form-check form-check-inline",children:Object(n_.jsx)("label",{className:"px-1 mx-1 rounded form-check-label",style:{background:L},children:"Failed Attempts"})}):null;return Object(n_.jsxs)("div",{children:[Object(n_.jsx)("div",{className:"row",children:Object(n_.jsxs)("div",{className:"col",children:[_,a,e,t,s]})}),Object(n_.jsx)("svg",{version:"1.1",baseProfile:"full",xmlns:"http://www.w3.org/2000/svg",ref:this.setSvgElement})]})}}]),e}(t.Component),ga=function(){var _=Object(t.useContext)(ia),a=_.statdata,e=_.loading,s=_.clearStats,l=_.isError,r=_.errorMessage,c=_.filterAppliedCount,u=_.filteredStatdata,n=_.timeframe;if(Object(t.useEffect)((function(){return function(){s()}}),[]),e)return Object(n_.jsx)("div",{className:"container",children:Object(n_.jsx)(i_,{})});if(l)return Object(n_.jsx)("div",{className:"container",children:Object(n_.jsx)("div",{className:"row",children:Object(n_.jsx)("div",{className:"col-md-12 text-center p-3",children:r})})});if(!a)return Object(n_.jsx)("div",{className:"container",children:Object(n_.jsx)("div",{className:"row",children:Object(n_.jsxs)("div",{className:"col",children:[Object(n_.jsxs)("p",{className:"lead",children:["Supply a Section (Type) in the appropriate textbox to filter the jobs that will be included in the query. Also, you can supply the ",Object(n_.jsx)("strong",{children:"Hours"})," value that determines how many hours before the current time you want to query."]}),Object(n_.jsxs)("p",{className:"lead",children:["Press ",Object(n_.jsx)("span",{className:"badge badge-primary",children:"Get Statistics"})," ","to generate the result. The main BarChart can be filtered using the supplied checkboxes."]})]})})});var i=Object(n_.jsxs)("span",{children:["Statistics from the time frame: ",Object(n_.jsx)("span",{className:"bg-secondary rounded px-1",children:"None"!==n.From?n.From:"Start of experiment"})," to ",Object(n_.jsx)("span",{className:"bg-secondary rounded px-1",children:n.To})]}),o=g_(a),d=o.jobsSubmittedCount,f=o.jobsRunCount,m=o.jobsCompletedCount,p=o.jobsFailedCount,z=o.expectedConsumption,C=o.realConsumption,E=o.failedRealConsumption,O=o.expectedCpuConsumption,A=o.cpuConsumption,h=o.failedCpuConsumption,M=o.totalQueueTime,I=o.cpuConsumptionPercentage,S=g_(u),b=Object(n_.jsxs)("table",{className:"table table-sm table-bordered mb-0",children:[Object(n_.jsx)("caption",{children:"Considers number of jobs and retrials."}),Object(n_.jsx)("thead",{className:"thead-dark",children:Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"col",className:"pl-2",children:"Description"}),Object(n_.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Count"}),c>0&&Object(n_.jsxs)("th",{scope:"col",className:"text-right pr-2",children:["Count ",Object(n_.jsx)("sup",{children:"(*)"})]})]})}),Object(n_.jsxs)("tbody",{children:[Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Submitted"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:d}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.jobsSubmittedCount})]}),Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Run"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:f}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.jobsRunCount})]}),Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Completed"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:m}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.jobsCompletedCount})]}),Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Jobs Failed"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:p}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.jobsFailedCount})]})]})]}),k=Object(n_.jsxs)("table",{className:"table table-sm table-bordered mb-0",children:[Object(n_.jsx)("caption",{children:"Considers the number of processors requested by the job (and retrials) multiplied by the corresponding running time."}),Object(n_.jsx)("thead",{className:"thead-dark",children:Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"col",className:"pl-2",children:"Description"}),Object(n_.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Hours"}),c>0&&Object(n_.jsxs)("th",{scope:"col",className:"text-right pr-2",children:["Hours ",Object(n_.jsx)("sup",{children:"(*)"})]})]})}),Object(n_.jsxs)("tbody",{children:[Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Expected CPU Consumption"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:O}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.expectedCpuConsumption})]}),Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"CPU Consumption"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:A}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.cpuConsumption})]}),Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Failed CPU Consumption"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:h}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.failedCpuConsumption})]})]})]}),T=Object(n_.jsxs)("table",{className:"table table-sm table-bordered mb-0",children:[Object(n_.jsx)("caption",{children:"Considers the running time of the jobs and retrials."}),Object(n_.jsx)("thead",{className:"thead-dark",children:Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"col",className:"pl-2",children:"Description"}),Object(n_.jsx)("th",{scope:"col",className:"text-right pr-2",children:"Hours"}),c>0&&Object(n_.jsxs)("th",{scope:"col",className:"text-right pr-2",children:["Hours ",Object(n_.jsx)("sup",{children:"(*)"})]})]})}),Object(n_.jsxs)("tbody",{children:[Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Expected Consumption"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:z}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.expectedConsumption})]}),Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Real Consumption"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:C}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.realConsumption})]}),Object(n_.jsxs)("tr",{children:[Object(n_.jsx)("th",{scope:"row",className:"pl-2",children:"Failed Real Consumption"}),Object(n_.jsx)("td",{className:"text-right pr-2",children:E}),c>0&&Object(n_.jsx)("td",{className:"text-right pr-2",children:S.failedRealConsumption})]})]})]});return Object(n_.jsxs)("div",{className:"container",children:[a&&Object(n_.jsxs)("div",{className:"container border rounded my-1 py-2",children:[Object(n_.jsx)("div",{className:"row",children:Object(n_.jsxs)("div",{className:"col text-center",children:[Object(n_.jsx)("p",{className:"h3",children:i}),Object(n_.jsxs)("p",{className:"lead",children:[Object(n_.jsxs)("span",{children:["CPU Consumption ",Object(n_.jsx)("span",{className:"bg-secondary rounded px-1",children:"".concat(I," %")})," ",c>0&&Object(n_.jsxs)("span",{className:"bg-secondary rounded px-1",children:["".concat(S.cpuConsumptionPercentage," %"),Object(n_.jsx)("sup",{children:"(*)"})]})]}),Object(n_.jsxs)("span",{className:"pl-3",children:["Total Queue Time ",Object(n_.jsx)("span",{className:"bg-secondary rounded px-1",children:"".concat(M," hours")})," ",c>0&&Object(n_.jsxs)("span",{className:"bg-secondary rounded px-1",children:["".concat(S.totalQueueTime," hours"),Object(n_.jsx)("sup",{children:"(*)"})]})]})]})]})}),Object(n_.jsxs)("div",{className:"row ",children:[Object(n_.jsx)("div",{className:"col",children:b}),Object(n_.jsx)("div",{className:"col",children:T}),Object(n_.jsx)("div",{className:"col",children:k})]})]}),u&&Object(n_.jsxs)("div",{className:"row py-4",children:[Object(n_.jsx)("div",{className:"col-md-6 scroll-x text-right",children:Object(n_.jsx)(Pa,{data:u,title:"Statistics",metrics:["completedQueueTime","completedRunTime","failedQueueTime","failedRunTime"],xtitle:"Hours",clearStats:s,helperId:"4",filterCount:c})}),Object(n_.jsx)("div",{className:"col-md-6 scroll-x",children:Object(n_.jsx)(Pa,{data:u,title:"Failed Attempts per Job",metrics:["failedCount"],xtitle:"Attempts",clearStats:s,helperId:"1",filterCount:c})})]})]})},La=function(){var _=Object(t.useContext)(ia),a=Object(t.useContext)(u_),e=_.getExperimentStats,s=_.statdata,l=_.loading,r=_.clearStats,c=_.applyRegExToJobDataSet,u=a.experiment,n=Object(t.useState)(""),i=Object(d.a)(n,2),o=i[0],f=i[1],m=Object(t.useState)(""),p=Object(d.a)(m,2),z=p[0],C=p[1],E=Object(t.useState)(""),O=Object(d.a)(E,2),A=O[0],h=O[1];return Object(n_.jsx)("div",{className:"card-header p-1",children:Object(n_.jsxs)("div",{className:"d-flex flex-wrap row-hl",children:[Object(n_.jsx)("div",{className:"ml-auto item-hl",children:!s&&u&&!1===a.loading&&Object(n_.jsx)("form",{onSubmit:function(_){_.preventDefault(),e(u.expid,z,A)},className:"form",children:Object(n_.jsxs)("div",{className:"input-group input-group-sm",children:[Object(n_.jsx)("input",{className:"form-control",type:"text",name:"section",placeholder:"Section. Ex. SIM",onChange:function(_){return h(_.target.value)}}),Object(n_.jsx)("input",{className:"form-control",type:"number",min:"0",name:"hours",placeholder:"Hours",onChange:function(_){return C(_.target.value)}}),Object(n_.jsx)("div",{className:"input-group-append",children:Object(n_.jsx)("input",{type:"submit",value:"Get Statistics",className:"btn btn-primary",disabled:l,"data-toggle":"tooltip","data-placement":"bottom",title:"Gets the statistics for the Section and Hours values provided."})})]})})}),s&&Object(n_.jsx)("div",{className:"item-hl mr-1 minimum-w-filter",children:Object(n_.jsx)("form",{onSubmit:function(_){_.preventDefault(),c(o)},className:"form",children:Object(n_.jsxs)("div",{className:"input-group input-group-sm",children:[Object(n_.jsx)("input",{type:"text",name:"regExp",placeholder:"Filter using a regular expression",onChange:function(_){return f(_.target.value)},className:"form-control",text:""}),Object(n_.jsx)("div",{className:"input-group-append",children:Object(n_.jsx)("input",{type:"submit",className:"btn btn-dark",value:"Filter","data-toggle":"tooltip","data-placement":"bottom",title:"Filters the list of jobs according to the regular expression."})})]})})}),s&&Object(n_.jsx)("div",{className:"item-hl",children:Object(n_.jsx)("form",{onSubmit:function(_){_.preventDefault(),C(""),h(""),r()},className:"form",children:Object(n_.jsx)("div",{className:"",children:Object(n_.jsx)("input",{type:"submit",value:"Clear Statistics",className:"btn btn-dark btn-sm"})})})})]})})},ya=function(_){var a=_.target,e=void 0===a?"manual-graph":a,s=Object(t.useContext)(j_),l=Object(t.useContext)(u_),r=s.selection,c=s.updateGraphSelectedNodes,u=l.canSelect;return r&&!u?Object(n_.jsxs)(t.Fragment,{children:[Object(n_.jsx)("button",{className:"btn btn-sm btn-primary",type:"button","data-toggle":"modal","data-target":"#command"+e,onClick:function(_){_.preventDefault(),c()},children:Object(n_.jsx)("span",{"data-toggle":"tooltip","data-placement":"bottom",title:"Generate a command/text to change the status of the selected jobs on the Graph.",children:Object(n_.jsx)("strong",{children:"Change Status"})})}),Object(n_.jsx)(B_,{source:"graph-only",target:e})]}):null},xa=function(_){var a=_.source,e=Object(t.useContext)(u_),s=Object(t.useContext)(j_),l=Object(t.useContext)(o_),r=Object(t.useContext)(_a),c=e.totalJobs,u=null;switch(a){case"tree":var n=l.treedata,i=l.currentRunIdOnTree;c===n.total||i||(u="The number of jobs in the experiment tree is different than the number of jobs in your current run. This might be due to a change in the config files of your experiment while Autosubmit was already running.");break;case"graph":c!==s.data.total_jobs&&(u="The number of jobs in the experiment graph is different than the number of jobs in your current run. This might be due to a change in the config files of your experiment while Autosubmit was already running.");break;case"lighter":c!==r.totalCount&&(u="The number of jobs in the experiment quick representation is different than the number of jobs in your current run. This might be due to a change in the config files of your experiment while Autosubmit was already running.");break;default:u=null}return u&&null!==u?Object(n_.jsx)("span",{className:"badge badge-danger","data-toggle":"tooltip","data-placement":"bottom",title:u,children:Object(n_.jsx)("b",{children:"ALERT"})}):null},Ga=function(){var _=Object(t.useContext)(j_),a=_.searchJobInGraph,e=_.foundNodes,s=_.loadingSearchJob,l=_.data,r=_.navigateTo,c=_.displayJobInfoPanel,u=_.setJobInfoPanelVisibility,n=Object(t.useState)(""),i=Object(d.a)(n,2),o=i[0],f=i[1],m=Object(t.useState)(""),p=Object(d.a)(m,2),z=p[0],C=p[1],E=function(_){return function(a){a.preventDefault(),u(_)}},O=function(_){return function(a){if(a.preventDefault(),e){var t=z+_;t>=0&&t[{v}] {differences.has(`${confName}+${v}`) && alertSpan}
\nSetting | \nValue | \n
---|---|
{w} {differences.has(`${confName}+${v}+${w}`) && alertSpan} | \n{conf[v][w]} | \n
{error_message}}{\" \"}\n {loadingState && (\n LOADING...\n )}\n {experimentRunning && !loadingState && (\n ACTIVE\n )}\n {!experimentRunning && !loadingState && (\n INACTIVE\n )}\n \n
\n For user instructions visit our user guide{\" \"}\n \n User Guide\n \n .\n
*/}\n\n To request more information make a post in the issue{\" \"}\n \n Autosubmit User Documentation\n \n .\n
\n\n If you find a bug or want to request some important feature, please open\n an issue at{\" \"}\n \n Autosubmit Issues\n \n .\n
\nVersion: 1.0.0-beta
\nLooks like you are lost. Better go back home.
\n \n Back Home\n \n\n Press Classic to see the\n standard graph representation of the experiment.\n
\n\n For the classic approach, the algorithm will first try to use\n graphviz, there are some constraints in place that try to identify\n those instances that could potentially make graphviz run forever. If\n an experiment is identified to be time-wise out of bounds for\n graphviz, it will be sent to the regular algorithm. Currently, the\n regular algorithm does not handle well wrappers; work is being done\n to developed a general algorithm.\n
\n\n Press Date-Member to see the graph representation grouped by date-member.\n
\n\n\n Press Status to see the graph representation grouped by status. FAILED jobs are not grouped.\n
\n\n\n The button produces a graph representation based on 2nd and 3rd eigenvectors of the Laplacian Matrix of the Graph representation of your experiment. Could be interesting in some instances.\n
\n\n {/*\n If the experiment instance cannot be handled by graphviz, then it\n would not be possible to group it. Again, work is being done to\n overcome this.\n
*/}\n\n If the experiment is{\" \"}\n RUNNING and the Graph\n has been rendered, press{\" \"}\n Start Job Monitor to start\n a live tracker of the changes on the experiment's jobs. This process\n will automatically update the graph's nodes colors and show a log of\n the detected changes.\n
\n\n If there are any defined wrappers, they will be shown on the\n corresponding tab at the right side of the Graph. You can click on\n any member of that list and the nodes belonging to that wrapper will\n be highlighted.\n
\nSomething has gone very wrong.
\n{this.props.data.error_message}
\n\n This experiment might be too heavy to fetch in due time. If an error\n message is prompted, try the Quick View.\n
\n )}\n{fetchMessage}
\n\n Press Show to see the tree\n view representation of the experiment.\n
\n\n Repeating subtrees in the tree view are only shown once, use the\n searcher to focus only on those items.\n
\nSomething has gone very wrong.
\n\n {this.props.treedata.error_message}\n
\n\n Press View to see the\n light-version of the experiment representation.\n
\nUse the search tool.
\nSomething has gone very wrong.
\n{this.props.errorMessage}
\n\n Submit:\n | \n\n \n {selectedNode.submit}\n \n | \n
\n Start:\n | \n\n \n {selectedNode.start}\n \n | \n
\n Finish:\n | \n\n \n {selectedNode.finish}\n \n | \n
The information directly related to the jobs' status comes from the pkl file that Autosubmit generates and constantly updates when your experiment is running. This file stores key information from your jobs that allow us to identify them and retrieve their information.
\nThe queuing and running times come from the files that Autosubmit generates to store the submit, start, finish times, and the status of your job. These files usually end with the string *_TOTAL_STATS where * is replaced by the job's name. This file can contain the registers for many runs of the same job. Moreover, the latest version of Autosubmit implements a job historical database that improves the previously described functionality and extends its data retrieval capabilities. If this information is available, it will be prioritized over the former source.
\n \n \n\nThe pkl file of your experiment stores the current status of its jobs. The *_TOTAL_STATS files that Autosubmit generates also store the status of the corresponding job in the experiment. Whenever the values on these sources differ, the GUI assumes that something is not working right and it will show the SUSPICIOUS status text next to the job's name as a warning. Sometimes there is a little bit of delay between Autosubmit updating the pkl file and updating or creating the *_TOTAL_STATS file, in this case the SUSPICIOUS status should be replaced by the right status after some minutes if you Refresh (or F5) the Tree/Graph/Quick view of your experiment, or if the Job Monitor tool is active. However, if it does not disappear, it could mean that truly something wrong is happening with your experiment.
\n\nThis means the Autosubmit GUI could not read the conf files of your experiment due to their level of protection. Make sure that your conf files have read permission for your user group (chmod 777
them won't hurt).
If you find that something is broken or you suspect that it is not working correctly, you can open an issue at Autosubmit Project Issues.
\n\nRefer to the definition of the Generalization of SYPD and ASYPD at Autosubmit API Wiki: Performance Metrics. SYPD is automatically updated when Job Monitor is active. ASYPD, due to the nature of its computation, will require a reload of the Tree or Graph view to be updated.
\n \nThe .pkl file stores the most important data of the list of jobs in your experiment. Its name has the format job_list_%expid%.pkl and is located in the /pkl/ folder of your experiment. An exception or interruption of the normal execution of Autosubmit can result in a blank pkl file, see autosubmit recovery for instructions to recover your experiment information. However, it could happen that there already exists a valid version of your pkl file in the corresponding folder but it is named as a backup file that was not properly restored. If that is the case, run the command autosubmit pklfix expid
on the latest version of Autosubmit, where expid is replaced by your experiment identifier.
We will continue adding more information. For suggestions, you can open an issue on the Autosubmit project.
\n\n\n Submit:\n | \n\n \n {selectedNode.submit}\n \n | \n
\n Start:\n | \n\n \n {selectedNode.start}\n \n | \n
\n Finish:\n | \n\n \n {selectedNode.finish}\n \n | \n
Showing last 50 lines of the log file:
*/}\n\n
{pklchanges}}\n {loadingPkl && Loading...}\n
{pkltreechanges}\n )}\n {loadingTreePkl && Loading...}\n
Failed Attempts: ${formatNumberMoney(d.failedCount, true)}
\n `\n : \n `\nQueue: ${formatNumberMoney(d.completedQueueTime, false, 4)} h.
\n ` + (metrics.includes(\"completedRunTime\") ? `Run: ${formatNumberMoney(d.completedRunTime, false, 4)} h.
`: ``)\n + (metrics.includes(\"failedQueueTime\") ? `Failed Queue: ${formatNumberMoney(d.failedQueueTime, false, 4)} h.
` : ``)\n + (metrics.includes(\"failedRunTime\") ? `Failed Run: ${formatNumberMoney(d.failedRunTime, false, 4)} h.
` : ``))\n );\n }\n \n function hideTooltip() { \n tooltip\n .style(\"left\", \"10px\")\n .style(\"top\", \"10px\")\n .style(\"opacity\", 0); \n }\n\n function colorMetric(metric) {\n let color = unknownColor.background;\n switch(metric) {\n case \"completedQueueTime\":\n color = queueColor.background;\n break;\n case \"completedRunTime\":\n color = runningColor.background;\n break;\n case \"failedQueueTime\":\n color = failedQueueColor;\n break;\n case \"failedCount\":\n case \"failedRunTime\":\n color = failedRunAttempts;\n break; \n default:\n color = unknownColor.background;\n }\n return color;\n } \n\n function calculateBarHeight(d, ignoredMetrics = []) {\n // const metricsNumber = metrics.length; \n\n const _barCount = [ignoredMetrics.includes(\"completedRunTime\") ? 0.00 : d.completedRunTime, \n ignoredMetrics.includes(\"completedQueueTime\") ? 0.00 : d.completedQueueTime, \n ignoredMetrics.includes(\"failedQueueTime\") ? 0.00 : d.failedQueueTime,\n ignoredMetrics.includes(\"failedRunTime\") ? 0.00 : d.failedRunTime].filter(x => Number.parseFloat(x) > 0.00); \n // console.log(_barCount);\n const barCount = _barCount.length; \n // console.log(d.name + \" : \" + barCount);\n // return (barCount) * singleBarHeight;\n switch (barCount) {\n case 3:\n return tripleBarHeight;\n case 4:\n default:\n return singleBarHeight;\n case 2:\n return doubleBarHeight;\n case 1: \n return totalBarHeight; \n case 0:\n return totalBarHeight; \n }\n }\n\n function onClickFilter(currentChecked, currentValue) {\n // console.log(currentChecked);\n // console.log(currentValue);\n const currentQueue = d3.select(`#queueTimeChart-${helperId}`).property(\"checked\");\n const currentRun = d3.select(`#runTimeChart-${helperId}`).property(\"checked\");\n const currentFailedQueue = d3.select(`#failedQueueTimeChart-${helperId}`).property(\"checked\");\n const currentFailedRun = d3.select(`#failedRunTimeChart-${helperId}`).property(\"checked\");\n const ignoreMetrics = [\n currentQueue === false || (currentValue === \"completedQueueTime\" && currentValue === false) ? \"completedQueueTime\" : \"\",\n currentRun === false || (currentValue === \"completedRunTime\" && currentValue === false) ? \"completedRunTime\" : \"\",\n currentFailedQueue === false || (currentValue === \"failedQueueTime\" && currentValue === false) ? \"failedQueueTime\" : \"\",\n currentFailedRun === false || (currentValue === \"qufailedRunue\" && currentValue === false) ? \"failedRunTime\" : \"\",\n ];\n\n\n if (currentChecked === false) {\n d3.selectAll(`.newbar-${helperId}`).remove(); \n d3.selectAll(`.newtext-${helperId}`).remove();\n d3.selectAll(`.xaxis-${helperId}`).remove();\n addBars(metrics, ignoreMetrics); \n } else {\n d3.selectAll(`.newbar-${helperId}`).remove(); \n d3.selectAll(`.newtext-${helperId}`).remove();\n d3.selectAll(`.xaxis-${helperId}`).remove();\n addBars(metrics, ignoreMetrics);\n }\n }\n\n // Actions\n d3.select(`#queueTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n });\n \n d3.select(`#runTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n })\n \n d3.select(`#failedQueueTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n })\n\n d3.select(`#failedRunTimeChart-${helperId}`)\n .on(\"click\", function() {\n const currentChecked = d3.event.target.checked;\n const currentValue = d3.event.target.value;\n onClickFilter(currentChecked, currentValue);\n })\n }\n\n componentDidMount() {\n\n // Min Max pairs\n if (this.props.data.length > 0) {\n this.handleBarChart();\n } \n\n };\n\n componentDidUpdate() {\n if (this.props.data.length > 0) {\n this.handleBarChart();\n }\n }\n\n componentWillUnmount() {\n // console.log('Unmounting Bar Chart')\n }\n\n render() {\n\n if (this.props.data.length === 0) {\n return (\n\n Supply a Section (Type) in the appropriate textbox to filter the\n jobs that will be included in the query. Also, you can\n supply the Hours value that determines how many hours before the current time you want to query. \n
\n\n Press Get Statistics{\" \"}\n to generate the result. The main BarChart can be filtered using the supplied checkboxes.\n
\nDescription | \nCount | \n {filterAppliedCount > 0 &&Count (*) | }\n
---|---|---|
Jobs Submitted | \n{jobsSubmittedCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsSubmittedCount} | } \n
Jobs Run | \n{jobsRunCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsRunCount} | } \n
Jobs Completed | \n{jobsCompletedCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsCompletedCount} | } \n
Jobs Failed | \n{jobsFailedCount} | \n {filterAppliedCount > 0 &&{filteredStats.jobsFailedCount} | } \n
Description | \nHours | \n {filterAppliedCount > 0 &&Hours (*) | }\n
---|---|---|
Expected CPU Consumption | \n{expectedCpuConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.expectedCpuConsumption} | } \n
CPU Consumption | \n{cpuConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.cpuConsumption} | } \n
Failed CPU Consumption | \n{failedCpuConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.failedCpuConsumption} | } \n
Description | \nHours | \n {filterAppliedCount > 0 &&Hours (*) | }\n
---|---|---|
Expected Consumption | \n{expectedConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.expectedConsumption} | } \n
Real Consumption | \n{realConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.realConsumption} | } \n
Failed Real Consumption | \n{failedRealConsumption} | \n {filterAppliedCount > 0 &&{filteredStats.failedRealConsumption} | } \n
\n {summaryHeader}\n
\n\n \n CPU Consumption {`${cpuConsumptionPercentage} %`} {filterAppliedCount > 0 && {`${filteredStats.cpuConsumptionPercentage} %`}(*)}\n \n \n Total Queue Time {`${totalQueueTime} hours`} {filterAppliedCount > 0 && {`${filteredStats.totalQueueTime} hours`}(*)}\n \n
\n${d.name}
\nQueue: ${secondsToDelta(d.queue)}
\nRun: ${secondsToDelta(d.running)}
\n${attribute}: ${d[attribute]}
\n `\n );\n }\n \n function hideTooltip() {\n tooltip\n .style(\"left\", \"10px\")\n .style(\"top\", \"10px\")\n .style(\"opacity\", 0);\n }\n\n }\n\n componentDidMount() {\n if (this.props.data.length > 0) {\n this.handleScatterPlot();\n this.applyLegendPlot();\n } \n }\n\n render () {\n\n if (this.props.data.length === 0) {\n return (\n${d.name}
\nQueue: ${secondsToDelta(d.queue)}
\nRun: ${secondsToDelta(d.running)}
\n${attributeX}: ${attributeX === \"JPSY\" ? formatNumberMoney(d[attributeX]) : d[attributeX]}
\n${attributeY}: ${d[attributeY]}
\n `\n );\n }\n\n function hideTooltip() {\n tooltip\n .style(\"left\", \"10px\")\n .style(\"top\", \"10px\")\n .style(\"opacity\", 0);\n }\n \n }\n\n componentDidMount() {\n if (this.props.data.length > 0) {\n this.handleScatterPlot();\n }\n }\n \n render() {\n if (this.props.data.length === 0) {\n return (\n{currentConfiguration.warningMessage}
} \n {messageAreEqual && ({messageAreEqual}
)}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.conf ? generateConfigFileHtml(currentRunConfiguration.conf, \"conf\", configDifferences, alertDifferenceSpan) : messageNoInformation} \nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.conf ? generateConfigFileHtml(currentFileSystemConfiguration.conf, \"conf\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.exp ? generateConfigFileHtml(currentRunConfiguration.exp, \"exp\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.exp ? generateConfigFileHtml(currentFileSystemConfiguration.exp, \"exp\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.jobs ? generateConfigFileHtml(currentRunConfiguration.jobs, \"jobs\", configDifferences, alertDifferenceSpan) :{messageNoInformation}
}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.jobs ? generateConfigFileHtml(currentFileSystemConfiguration.jobs, \"jobs\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.platforms ? generateConfigFileHtml(currentRunConfiguration.platforms, \"platforms\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.platforms ? generateConfigFileHtml(currentFileSystemConfiguration.platforms, \"platforms\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent Run Configuration (Historical Database)
\n {currentRunConfiguration.proj ? generateConfigFileHtml(currentRunConfiguration.proj, \"proj\", configDifferences, alertDifferenceSpan) : messageNoInformation}\nCurrent FileSystem Configuration
\n {currentFileSystemConfiguration.proj ? generateConfigFileHtml(currentFileSystemConfiguration.proj, \"proj\", configDifferences, alertDifferenceSpan) : messageNoInformation}\n\n Press SHOW CURRENT INFORMATION to visualize the current configuration of your experiment. The information will be retrieved from the historical database and from the filesystem, each datasource is displayed in its own table.\n
\nIt is the configuration of your experiment stored in the files inside the folder conf. Autosubmit GUI might have problems accessing this information if your conf files have restricted read permissions.
\n\n Whenever you start a new run of your experiment, the current configuration stored in the file system is stored in the historical database for reference.\n
\n\n A new run is created in any of these situations: \n
\nautosubmit create
is executed.autosubmit run
is executed and the historical database is empty.autosubmit run
is executed and it is detected that the number of jobs in the experiment has changed.autosubmit setstatus
and/or a significant amount of jobs changes status.\n Press{\" \"}\n Show Log{\" \"}\n to see the last 50 lines of the running log of this\n experiment. If the experiment is running, the log\n will update automatically.\n
\n\n {description}\n
\n\n\n {version}{wrapper && ({wrapper} wrapper)}\n
\nYou will be redirected after some seconds.
\nWe are currently testing CAS login for Autosubmit GUI. Thanks for logging in.
\n\nYou will be redirected after some seconds.
\n