decentralized-internet
Version:
An NPM library of programs to create decentralized web and distributed computing projects
1 lines • 2.32 kB
JavaScript
module.exports=function(t){var s=require("fs"),a=require("bluebird"),r=(require("underscore"),require("child_process").spawn),e=require("path"),n=require("@hapi/joi"),o=(require("./executionserver.methods")(t),require("clusterpost-model")),u={submitJob:function(u,i){return n.assert(u,o.job),new a(function(a,n){var o=u.parameters,c=[];if(t.hasbang?c.push(t.hash_bang):c.push("#!/bin/bash"),u.jobparameters)for(var b=0;b<u.jobparameters.length;b++){var h=["#SBATCH"];(d=u.jobparameters[b]).flag&&h.push(d.flag),d.name&&h.push(d.name),c.push(h.join(" "))}if(c.push(["#SBATCH","-D",i].join(" ")),c.push(["#SBATCH","-e",e.join(i,"stderr.err")].join(" ")),c.push(["#SBATCH","-o",e.join(i,"stdout.out")].join(" ")),c.push(["#SBATCH","-J",u.userEmail].join(" ")),params_command=[],params_command.push(u.executable),o)for(b=0;b<o.length;b++){var d;(d=o[b]).flag&¶ms_command.push(d.flag),d.name&¶ms_command.push(d.name)}c.push(params_command.join(" "));var m=e.join(i,"slurm_script.sh");s.writeFileSync(m,c.join("\n"));try{const t=r("sbatch",[m]);var p="";t.stderr.on("data",function(t){p+=t});var j="";t.stdout.on("data",function(t){j+=t}),t.on("close",function(t){if(t)a({status:"FAIL",error:p+j});else{var s=j.indexOf("Submitted batch job ")+"Submitted batch job ".length,r=j.substr(s,j.length-s);a({jobid:Number.parseInt(r),status:"RUN"})}})}catch(t){n({status:"FAIL",error:t})}})},getJobStatus:function(t){return n.assert(t.jobstatus,o.jobstatus),new a(function(s,a){try{var e=t.jobstatus.jobid;const o=r("squeue",["-h","-j",e]);o.stderr.on("data",function(t){t});var n="";o.stdout.on("data",function(t){n+=t}),o.on("close",function(t){if(n){var a=n.replace(/ +/g," ").trim().split(" ");a.length>5?"R"==a[4]||"PD"==a[4]?s({status:"RUN",stat:n}):"CD"==a[4]||"CG"==a[4]?s({status:"DONE",stat:n}):"SE"==a[4]||"CA"==a[4]?s({status:"EXIT",stat:n}):"F"==a[4]||"NF"==a[4]?s({status:"FAIL",stat:n}):s({status:"DONE",stat:n}):s({jobid:e,status:"DONE",stat:n})}else s({jobid:e,status:"DONE"})})}catch(t){a(t)}})},killJob:function(t){return n.assert(t.jobstatus,o.jobstatus),new a(function(s,a){try{var e=t.jobstatus.jobid;const u=r("scancel",[e]);var n="";u.stderr.on("data",function(t){n+=t});var o="";u.stdout.on("data",function(t){o+=t}),u.on("close",function(t){s({status:"EXIT",stat:n+o})})}catch(t){a(t)}})}};return u};