summaryrefslogtreecommitdiff
path: root/bucky/search/bdb.js
diff options
context:
space:
mode:
Diffstat (limited to 'bucky/search/bdb.js')
-rw-r--r--bucky/search/bdb.js106
1 files changed, 35 insertions, 71 deletions
diff --git a/bucky/search/bdb.js b/bucky/search/bdb.js
index 0495666..e62f59e 100644
--- a/bucky/search/bdb.js
+++ b/bucky/search/bdb.js
@@ -1,68 +1,48 @@
var fs = require("fs");
-function berkeleydb(fn) {
- var db;
- var bdb_lib = require("berkeleydb");
- var dbenv = new bdb_lib.DbEnv();
- var bdb_status = dbenv.open("./search/db/env");
- if (bdb_status) {
- console.log("open dbenv failed:", bdb_status);
- process.exit();
- }
-
- fn = "./" + fn + ".db";
-
- function exitHandler(options, err) {
- if (db) db.close();
- // if (options.cleanup) console.log('clean');
- if (err) console.log(err.stack);
- if (options.exit) process.exit();
- }
-
- // do something when app is closing
- process.on("exit", exitHandler.bind(null, { cleanup: true }));
-
- // catches ctrl+c event
- process.on("SIGINT", exitHandler.bind(null, { exit: true }));
-
- // catches "kill pid" (for example: nodemon restart)
- process.on("SIGUSR1", exitHandler.bind(null, { exit: true }));
- process.on("SIGUSR2", exitHandler.bind(null, { exit: true }));
+var databases = {};
- //catches uncaught exceptions
- process.on("uncaughtException", exitHandler.bind(null, { exit: true }));
-
- function open(fn) {
- if (db) db.close();
- var _db = new bdb_lib.Db(dbenv);
- var bdb_status = _db.open(fn);
- if (bdb_status) {
- console.log("openĀ " + fn + " failed:", bdb_status);
- process.exit();
- }
- db = _db;
+function jsondb(dbName) {
+ if (databases[dbName]) {
+ return databases[dbName];
}
- open(fn);
+ let db = {};
+ let filename = "./" + dbName + ".db";
- return {
+ // Store context for this database
+ var controller = {
+ load: function () {
+ if (fs.existsSync(filename)) {
+ try {
+ db = JSON.parse(fs.readFileSync(filename));
+ } catch (err) {
+ console.error("couldn't read " + filename);
+ process.exit();
+ }
+ } else {
+ db = {};
+ }
+ },
+ save: function () {
+ fs.writeFileSync(filename, JSON.stringify(db, false, 0));
+ },
+ reset: function () {
+ db = {};
+ },
put: function (term, serialized) {
- db.put(term, serialized);
+ db[term] = serialized;
},
get: function (term) {
- return db.get(term);
+ return db[term];
},
};
-}
-function jsondb(fn) {
- let db;
-
- fn = "./" + fn + ".db";
+ databases[dbName] = controller;
function exitHandler(options, err) {
- if (db) {
- fs.writeFileSync(fn, JSON.stringify(db, false, 0));
- }
+ // if (db) {
+ // fs.writeFileSync(fn, JSON.stringify(db, false, 0));
+ // }
// if (options.cleanup) console.log('clean');
if (err) console.log(err.stack);
if (options.exit) process.exit();
@@ -81,24 +61,8 @@ function jsondb(fn) {
//catches uncaught exceptions
process.on("uncaughtException", exitHandler.bind(null, { exit: true }));
- if (fs.existsSync(fn)) {
- try {
- db = JSON.parse(fs.readFileSync(fn));
- } catch (err) {
- console.error("couldn't read " + fn);
- process.exit();
- }
- } else {
- db = {};
- }
+ controller.load();
- return {
- put: function (term, serialized) {
- db[term] = serialized;
- },
- get: function (term) {
- return db[term];
- },
- };
+ return controller;
}
-module.exports = process.env.USE_BDB === "true" ? berkeleydb : jsondb;
+module.exports = jsondb;