gploy
Version:
A continuous deployment server for automatic development
152 lines (117 loc) • 4.5 kB
JavaScript
var spawn = require('./gPloy/spawner').detached;
var pidManager = require('./gPloy/pidManager');
var configManager = require('./gPloy/configManager');
var fs = require('fs');
var isRunning = require('is-running');
var path = require('path');
var mkdirp = require('mkdirp');
var crypto = require('crypto');
function gPloy() {
this.getNewSecret = function() {
function md5(data) {
var hash = crypto.createHash('md5');
hash.update(data);
return hash.digest('hex');
}
return md5(Date.now().toString());
};
this.setup = function() {
fs.writeFileSync(path.resolve(__dirname, "../paths.json"), JSON.stringify({home: gPloyHome}));
mkdirp(gPloyHome, 0755, function() { });
mkdirp(gPloyConfdir, 0755, function() { });
};
this.isRunning = function(cb) {
var self = this;
var pid = pidManager.getAll("gPloy-forever");
var pid2 = pidManager.getAll("gPloy-worker");
if (pid.length > 1 || pid2.length > 1) {
if (debug) {
console.log(" [DEBUG] Found more then 1 pid for a gPloy-forever".blue);
}
this.killBackground();
return cb(null, false);
} else {
if (typeof pid[0] === "number") {
isRunning(pid[0], function(err, running) {
if (err) {
if (debug) {
console.log(" [DEBUG] Error in getting the gPloy-forever status: ".blue, err);
}
return cb(err);
}
if (running === false) {
self.killBackground();
}
if (debug) {
console.log(" [DEBUG] gPloy-forever is running: ".blue + running.toString().blue);
}
return cb(null, running);
});
} else {
if (debug) {
console.log(" [DEBUG] gPloy-forever pid non numeric".blue);
}
return cb(null, false);
}
}
};
this.setupLogPath = function(logpath) {
mkdirp(logpath, 0755, function() { });
};
this.startInBackground = function() {
pidManager.cleanup();
spawn("gPloy-forever", 'node', ["gPloy/helper/foreverWorker.js", gPloyLog, gPloyErrorLog, "gPloy/helper/worker.js", gPloyConfdir], {
stdio: ['ignore', 'ignore', 'ignore'],
cwd: __dirname
});
};
this.killBackground = function() {
configManager.getAllConfigs().forEach(function(config) {
var pid = pidManager.getAll(config.name + "-forever");
pid.forEach(function(p) {
if (debug) {
console.log(" [DEBUG] Killed "+ config.name +"-forever: ".blue + p.toString().blue);
}
try {
process.kill(p);
} catch(e) {
}
pidManager.remove(config.name + "-forever", p);
});
pid = pidManager.getAll(config.name);
pid.forEach(function(p) {
if (debug) {
console.log(" [DEBUG] Killed "+ config.name +": ".blue + p.toString().blue);
}
try {
process.kill(p);
} catch(e) {
}
pidManager.remove(config.name, p);
});
});
var pid = pidManager.getAll("gPloy-forever");
var pid2 = pidManager.getAll("gPloy-worker");
pid.forEach(function(p) {
if (debug) {
console.log(" [DEBUG] Killed gPloy-forever: ".blue + p.toString().blue);
}
try {
process.kill(p);
} catch(e) {
}
pidManager.remove("gPloy-forever", p);
});
pid2.forEach(function(p) {
if (debug) {
console.log(" [DEBUG] Killed gPloy-worker: ".blue + p.toString().blue);
}
try {
process.kill(p);
} catch(e) {
}
pidManager.remove("gPloy-worker", p);
});
}
}
module.exports = new gPloy();