UNPKG

nac

Version:

node app control and monitoring daemon based on config files (somewhat similar to procfiles)

107 lines (86 loc) 3.08 kB
var app = require('./app'); var logstore = require('./logstore'); var async = require('async'); var path = require('path'); var help = require('../help'); exports.create = function create(cb) { var self = {}; async.series([ app.create().ifNotExists().exec, logstore.create ], function (err) { if (err) return cb(err); app.all(function (err, apps) { if (err) return cb(err); self.all = function() { return apps; } self.app = function (uid, name) { if (name.toLowerCase() == 'all') name = '.+'; var reg = new RegExp('^' + name + '$'); return apps.filter(function (app) { return app.uid == uid && app.name.match(reg); }); }; self.create = function (uid, name, nacfile, opts, cb) { app.construct({ uid: uid, name: name, nacfile: nacfile, active: false }, function (err, app) { if (err) return cb(err); apps.push(app); return cb(null, app); }); }; self.cleanup = function () { apps = apps.filter(function (app) { return !app.destroyed }); }; cb(null, self); }); }); }; exports.interface = function daemon_interface(uid, daemon) { var self = {}; var opts = {}; function checkError(command, arglen, cb) { var cmdError = help.check(command, arglen); if (cmdError) { cb(new Error(cmdError.join('\n'))); } return cmdError; } ['start', 'stop', 'restart', 'kill', 'uptime', 'run', 'logs', 'status', 'destroy', 'update']. forEach(function (command) { self[command] = function (name) { // remove name var args = [].slice.call(arguments, 1); var cb = args[args.length - 1]; // remove callback args = args.slice(0, args.length - 1); if (checkError(command, args.length, cb)) return; var apps = daemon.app(uid, name); if (!apps.length) return cb(new Error(name + ': no app found')); async.map(apps, function (app, cb) { var argsCb = args.concat([cb]); app[command].apply(app, argsCb); }, function (err, res) { if (command == 'destroy') daemon.cleanup(); cb(err, res); }); } }); self.create = function (name, nacfile, cb) { if (checkError('create', arguments.length - 2, cb)) return; daemon.create(uid, name, nacfile, opts, cb); }; self.setOptions = function setOptions(options, cb) { opts = options; cb(null); }; return self; };