UNPKG

decentralized-internet

Version:

An NPM library of programs to create decentralized web and distributed computing projects

1 lines 2.01 kB
module.exports=function(t){require("fs");var s=require("bluebird"),r=(require("underscore"),require("child_process").spawn),e=require("path"),a=require("@hapi/joi"),u=(require("./executionserver.methods")(t),require("clusterpost-model")),o={submitJob:function(t,o){return a.assert(t,u.job),new s(function(s,a){var u=t.parameters,n=[];if(t.jobparameters)for(var i=0;i<t.jobparameters.length;i++){(c=t.jobparameters[i]).flag&&n.push(c.flag),c.name&&n.push(c.name)}if(n.push("-cwd"),n.push(o),n.push("-e"),n.push(e.join(o,"stderr.err")),n.push("-o"),n.push(e.join(o,"stdout.out")),n.push("-u"),n.push(t.userEmail),n.push("-J"),n.push(t.userEmail),n.push(t.executable),u)for(i=0;i<u.length;i++){var c;(c=u[i]).flag&&n.push(c.flag),c.name&&n.push(c.name)}try{const t=r("bsub",n);var f="";t.stderr.on("data",function(t){f+=t});var d="";t.stdout.on("data",function(t){d+=t}),t.on("close",function(t){if(t)s({status:"FAIL",error:f+d});else{var r=d.indexOf("<")+1,e=d.substr(r,d.indexOf(">")-r);s({jobid:Number.parseInt(e),status:"RUN"})}})}catch(t){a({status:"FAIL",error:t})}})},getJobStatus:function(t){return a.assert(t.jobstatus,u.jobstatus),new s(function(s,e){try{var a=t.jobstatus.jobid;if(!a&&t.jobstatus.stat)try{a=t.jobstatus.stat.split("\n")[1].split(" ")[0]}catch(t){console.error(t)}var u=["-J",t.userEmail,a];const i=r("bjobs",u);var o="";i.stderr.on("data",function(t){o+=t});var n="";i.stdout.on("data",function(t){n+=t}),i.on("close",function(t){n&&-1!==n.indexOf("DONE")||o&&-1!==o.indexOf("is not found")?s({status:"DONE",stat:n}):n&&-1!==n.indexOf("EXIT")?s({status:"EXIT",stat:n}):s(t||o?{status:"FAIL",error:o}:{jobid:a,status:"RUN",stat:n})})}catch(t){e(t)}})},killJob:function(t){return a.assert(t.jobstatus,u.jobstatus),new s(function(s,e){try{var a=t.jobstatus.jobid,u=["-J",t.userEmail,a];const i=r("bkill",u);var o="";i.stderr.on("data",function(t){o+=t});var n="";i.stdout.on("data",function(t){n+=t}),i.on("close",function(t){s({status:"EXIT",stat:o+n})})}catch(t){e(t)}})}};return o};