diff options
Diffstat (limited to 'bucky/search/bdb.js')
| -rw-r--r-- | bucky/search/bdb.js | 106 |
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; |
