decentralized-internet
Version:
An NPM library of programs to create decentralized web and distributed computing projects
1 lines • 3.16 kB
JavaScript
var _=require("underscore"),argv=require("minimist")(process.argv.slice(2)),path=require("path"),fs=require("fs"),Promise=require("bluebird"),submit=argv.submit,jobid=argv.j,force=argv.f,status=argv.status,kill=argv.kill,jobdelete=argv.delete,remote=argv.remote,help=function(){console.error("help: To execute the program you must specify the job id. "),console.error(process.argv[0]+" "+process.argv[1]+" -j <jobid>"),console.error("To configure the couchdb, check conf.*.json"),console.error("Options:"),console.error("--submit \tSubmit the job."),console.error("-f \t\t\tforce job submission"),console.error("--status \tget job status"),console.error("--kill \t\tkill job"),console.error("--delete \tdelete job"),console.error("--remote run as a daemon")};remote||jobid&&(submit||status||kill||jobdelete)||(help(),process.exit(1));const getConfigFile=function(e){try{return require(path.join(e,"conf.my.json"))}catch(o){return require(path.join(e,"conf.json"))}};var confpath=__dirname;module.parent&&module.parent.filename&&(confpath=path.dirname(module.parent.filename));var conf=getConfigFile(confpath);try{if(!conf.token){var tokenfile=path.join(confpath,".token");try{fs.statSync(tokenfile)}catch(e){tokenfile=path.join(confpath,"token.json")}conf.tokenfile&&(tokenfile=conf.tokenfile),_.extend(conf,JSON.parse(fs.readFileSync(tokenfile)))}}catch(e){console.error(e),process.exit(1)}var executionmethods=require(path.join(__dirname,"executionserver.methods"))(conf),clusterengine=require(path.join(__dirname,conf.engine))(conf);if(remote){var crontab=require("node-crontab"),isrunningtask=!1;crontab.scheduleJob("*/1 * * * *",function(){isrunningtask||(isrunningtask=!0,executionmethods.getJobsQueue().then(function(e){return console.log("jobsubmit",e),Promise.map(e,function(e){return require(path.join(__dirname,"jobsubmit"))(e,null,conf)},{concurrency:1})}).then(function(){return Promise.all([executionmethods.getJobsUploading(),executionmethods.getJobsRun()])}).then(function(e){return e=_.flatten(e),console.log("jobstatus",e),Promise.map(e,function(e){return require(path.join(__dirname,"jobstatus"))(e,conf)},{concurrency:1})}).then(function(){return executionmethods.getJobsKill()}).then(function(e){return console.log("jobkill",e),Promise.map(e,function(e){return require(path.join(__dirname,"jobkill"))(e,conf)},{concurrency:1})}).then(function(){return executionmethods.getJobsDelete()}).then(function(e){return e=_.flatten(e),console.log("jobdelete",e),Promise.map(e,function(e){return require(path.join(__dirname,"jobdelete"))(e._id,conf,e)},{concurrency:1})}).then(function(){isrunningtask=!1}).catch(function(e){console.error(e),process.exit(1)}))}),console.log("Starting clusterpost-execution in remote mode:")}else jobdelete?require(path.join(__dirname,"jobdelete"))(jobid,conf):executionmethods.getDocument(jobid).then(function(e){return submit?require(path.join(__dirname,"jobsubmit"))(e,force,conf):status?require(path.join(__dirname,"jobstatus"))(e,conf):kill?require(path.join(__dirname,"jobkill"))(e,conf):void 0}).then(function(e){console.log(e),process.exit()}).catch(function(e){console.error(e),process.exit(1)});