total.js
Version:
MVC framework for Node.js
273 lines (258 loc) • 8.14 kB
JavaScript
// Copyright 2012-2020 (c) Peter Širka <petersirka@gmail.com>
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
/**
* @module NoSQL Worker
* @version 1.0.0
*/
require(module.filename.replace(/nosqlworker\.js$/, 'index.js'));
const RESFIND = { TYPE: 'find' };
const RESINSERT = { TYPE: 'insert' };
const RESCOUNT = { TYPE: 'count' };
const RESUPDATE = { TYPE: 'update' };
const RESBACKUP = { TYPE: 'backup' };
const RESRESTORE = { TYPE: 'restore' };
const RESREMOVE = { TYPE: 'remove' };
const RESCALLBACK = { TYPE: 'callback' };
const RESCOUNTERREAD = { TYPE: 'counter.read' };
const RESCOUNTERSTATS = { TYPE: 'counter.stats' };
const RESCOUNTERCLEAR = { TYPE: 'counter.clear' };
const RESTORAGESCAN = { TYPE: 'storage.scan' };
const RESTORAGESTATS = { TYPE: 'storage.stats' };
const RESSTORAGECLEAR = { TYPE: 'storage.clear' };
const RESSTREAM = { TYPE: 'stream' };
global.NOW = global.DATETIME = new Date();
function killprocess() {
process.exit(0);
}
setInterval(function() {
global.NOW = global.DATETIME = new Date();
}, 30000);
// One day cleaner
setInterval(function() {
var keys = Object.keys(F.databasescleaner);
keys.length && keys.wait(function(item, next) {
NOSQL(item).clean(next);
});
}, 60000 * 60 * 24);
process.on('disconnect', killprocess);
process.on('close', killprocess);
process.on('exit', killprocess);
process.on('message', function(msg) {
if (msg.TYPE === 'init') {
F.directory = msg.directory;
return;
}
var db = msg.t ? TABLE(msg.name) : NOSQL(msg.name);
switch (msg.TYPE) {
case 'find':
db.find().parse(msg.data).callback(function(err, response, count, repository) {
RESFIND.err = err;
RESFIND.response = response;
RESFIND.count = count;
RESFIND.repository = repository;
RESFIND.id = msg.id;
process.send(RESFIND);
});
break;
case 'find2':
db.find2().parse(msg.data).callback(function(err, response, count, repository) {
RESFIND.err = err;
RESFIND.response = response;
RESFIND.count = count;
RESFIND.repository = repository;
RESFIND.id = msg.id;
process.send(RESFIND);
});
break;
case 'top':
db.top().parse(msg.data).callback(function(err, response, count, repository) {
RESFIND.err = err;
RESFIND.response = response;
RESFIND.count = count;
RESFIND.repository = repository;
RESFIND.id = msg.id;
process.send(RESFIND);
});
break;
case 'one':
db.one().parse(msg.data).callback(function(err, response, count, repository) {
RESFIND.err = err;
RESFIND.response = response;
RESFIND.count = count;
RESFIND.repository = repository;
RESFIND.id = msg.id;
process.send(RESFIND);
});
break;
case 'insert':
db.insert(msg.arg[0], msg.arg[1]).parse(msg.data).callback(function(err, response) {
RESINSERT.err = err;
RESINSERT.response = response;
RESINSERT.id = msg.id;
process.send(RESINSERT);
});
break;
case 'update':
if (typeof(msg.arg[0]) === 'string')
msg.arg[0] = eval('(' + msg.arg[0] + ')');
db.update(msg.arg[0], msg.arg[1]).parse(msg.data).callback(function(err, response, repository) {
RESUPDATE.err = err;
RESUPDATE.response = response;
RESUPDATE.id = msg.id;
RESUPDATE.repository = repository;
process.send(RESUPDATE);
});
break;
case 'modify':
if (typeof(msg.arg[0]) === 'string')
msg.arg[0] = eval('(' + msg.arg[0] + ')');
db.modify(msg.arg[0], msg.arg[1]).parse(msg.data).callback(function(err, response, repository) {
RESUPDATE.err = err;
RESUPDATE.response = response;
RESUPDATE.id = msg.id;
RESUPDATE.repository = repository;
process.send(RESUPDATE);
});
break;
case 'count':
db.count().parse(msg.data).callback(function(err, response, count, repository) {
RESCOUNT.err = err;
RESCOUNT.response = response;
RESCOUNT.count = count;
RESCOUNT.repository = repository;
RESCOUNT.id = msg.id;
process.send(RESCOUNT);
});
break;
case 'remove':
db.remove(msg.arg ? msg.arg[0] : undefined).parse(msg.data).callback(function(err, response, repository) {
RESREMOVE.err = err;
RESREMOVE.response = response;
RESREMOVE.repository = repository;
RESREMOVE.id = msg.id;
process.send(RESREMOVE);
});
break;
case 'backup':
db.backup(msg.arg[0], function(err, response) {
RESBACKUP.id = msg.id;
RESBACKUP.err = err;
RESBACKUP.response = response;
process.send(RESBACKUP);
});
break;
case 'restore':
db.restore(msg.arg[0], function(err, response) {
RESRESTORE.id = msg.id;
RESRESTORE.err = err;
RESRESTORE.response = response;
process.send(RESRESTORE);
});
break;
case 'refresh':
db.refresh();
break;
case 'drop':
db.drop();
break;
case 'counter.min':
db.counter.min(msg.arg[0], msg.arg[1]);
break;
case 'counter.max':
db.counter.max(msg.arg[0], msg.arg[1]);
break;
case 'counter.hit':
db.counter.hit(msg.arg[0], msg.arg[1]);
break;
case 'counter.remove':
db.counter.remove(msg.arg ? msg.arg[0] : undefined);
break;
case 'counter.read':
db.counter.read(msg.arg[0], function(err, response) {
RESCOUNTERREAD.id = msg.id;
RESCOUNTERREAD.err = err;
RESCOUNTERREAD.response = response;
process.send(RESCOUNTERREAD);
});
break;
case 'counter.stats':
db.counter.stats(msg.arg[0], msg.arg[1], msg.arg[2], msg.arg[3], msg.arg[4], function(err, response) {
RESCOUNTERSTATS.id = msg.id;
RESCOUNTERSTATS.err = err;
RESCOUNTERSTATS.response = response;
process.send(RESCOUNTERSTATS);
});
break;
case 'counter.clear':
db.counter.clear(function(err) {
RESCOUNTERCLEAR.id = msg.id;
RESCOUNTERCLEAR.err = err;
process.send(RESCOUNTERCLEAR);
});
break;
case 'storage.insert':
db.storage.insert(msg.arg[0]);
break;
case 'storage.stats':
db.storage.stats(msg.arg[0], function(err, response) {
RESTORAGESTATS.id = msg.id;
RESTORAGESTATS.response = response;
RESTORAGESTATS.err = err;
process.send(RESTORAGESTATS);
});
break;
case 'storage.scan':
db.storage.scan(msg.arg[0], msg.arg[1], eval('(' + msg.arg[2] + ')'), function(err, response, repository) {
RESTORAGESCAN.id = msg.id;
RESTORAGESCAN.response = response;
RESTORAGESCAN.repository = repository;
RESTORAGESCAN.err = err;
process.send(RESTORAGESCAN);
});
break;
case 'storage.clear':
db.storage.clear(msg.arg[0], msg.arg[1], function(err, response) {
RESSTORAGECLEAR.id = msg.id;
RESSTORAGECLEAR.response = response;
RESSTORAGECLEAR.err = err;
process.send(RESSTORAGECLEAR);
});
break;
case 'stream':
db[msg.TYPE](eval('(' + msg.arg[0] + ')'), msg.arg[1], function(err, repository, count) {
RESSTREAM.id = msg.id;
RESSTREAM.err = err;
RESSTREAM.repository = repository;
RESSTREAM.count = count;
process.send(RESSTREAM);
});
break;
case 'clean':
case 'clear':
case 'ready':
db[msg.TYPE](function(err) {
RESCALLBACK.id = msg.id;
RESCALLBACK.err = err;
process.send(RESCALLBACK);
});
break;
}
});