UNPKG

decentralized-internet

Version:

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

1 lines 1.84 kB
module.exports=function(t){var r=require("fs"),e=require("bluebird"),o=(require("underscore"),require("child_process").spawn),s=require("path"),n=require("@hapi/joi"),a=(require("./executionserver.methods")(t),require("clusterpost-model")),u={submitJob:function(u,i){return n.assert(u,a.job),new e(function(e,n){var a=u.executable,c=u.parameters,d=[];if(c)for(var b=0;b<c.length;b++){var f=c[b];f.flag&&d.push(f.flag),f.name&&d.push(f.name)}try{r.writeFileSync(s.join(i,"stdout.out"),a+d.toString());var l=r.openSync(s.join(i,"stdout.out"),"a"),j=r.openSync(s.join(i,"stderr.err"),"a"),h=!0;null!=t.detached&&(h=t.detached);const u=o(a,d,{cwd:i,detached:h,stdio:["ignore",l,j]});u.on("error",function(t){n({status:"FAIL",error:t})}),h?(u.unref(),u.pid?e({jobid:u.pid,status:"RUN"}):n({status:"FAIL",error:"nopid"})):u.on("close",function(t){t?n({status:"FAIL"}):e({status:"UPLOADING"})})}catch(t){n({status:"FAIL",error:t})}})},getJobStatus:function(t){return new e(function(r,e){try{n.assert(t.jobstatus,a.jobstatus),n.assert(t.jobstatus.jobid,n.number().required(),"Please execute the job first.");var s=t.jobstatus.jobid;const c=o("ps",[s]);var u="";c.stderr.on("data",function(t){u+=t});var i="";c.stdout.on("data",function(t){i+=t}),c.on("close",function(e){var o=i.split("\n");o.length>1?e&&""===o[1]?r({status:"DONE"}):-1===o[1].indexOf(t.executable)?r({status:"FAIL",error:"The jobid does not match the running program"}):r({jobid:s,status:"RUN",stat:o[1]}):r({status:"FAIL",error:u})})}catch(t){e(t)}})},killJob:function(t){return n.assert(t.jobstatus,a.jobstatus),new e(function(r,e){try{var s=t.jobstatus.jobid;const u=o("kill",[s]);var n="";u.stderr.on("data",function(t){n+=t});var a="";u.stdout.on("data",function(t){a+=t}),u.on("close",function(t){var e=a;t&&(e+=n),r({status:"EXIT",stat:e})})}catch(t){e(t)}})}};return u};