From 4f654fb4896fc437bf48fc1ad165ce23fbed99c5 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Mon, 2 Dec 2013 16:19:30 -0500 Subject: [PATCH] more work --- src/database.js | 2 +- src/database/mongo.js | 72 ++++++++++++++++++++++++++++++++++++++++ src/database/redis.js | 76 +++++++++++++++++++++++++++---------------- src/meta.js | 76 +++++++++++++++++++------------------------ src/plugins.js | 3 +- 5 files changed, 157 insertions(+), 72 deletions(-) diff --git a/src/database.js b/src/database.js index 7a9fdf943d..465cd3bcd5 100644 --- a/src/database.js +++ b/src/database.js @@ -1,6 +1,6 @@ var nconf = require('nconf'); - db = require('./databases/' + nconf.get('database')); + db = require('./database/' + nconf.get('database')); module.exports = db; \ No newline at end of file diff --git a/src/database/mongo.js b/src/database/mongo.js index e69de29bb2..e9f495264b 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -0,0 +1,72 @@ + + +(function(module) { + 'use strict'; + var mongoClient, + mongo = require('mongo') + winston = require('winston'), + nconf = require('nconf'), + mongoHost = nconf.get('mongo:host'), + utils = require('./../../public/src/utils.js'); + + // temp, look this up + mongoClient = mongo.createClient(nconf.get('mongo:port'), nconf.get('mongo:host')); + + // look up how its done in mongo + /*if (nconf.get('mongo:password')) { + redisClient.auth(nconf.get('mongo:password')); + } + + var db = parseInt(nconf.get('mongo:database'), 10); + + if (db){ + mongoClient.select(db, function(error) { + if(error) { + winston.error("NodeBB could not connect to your Redis database. Redis returned the following error: " + error.message); + process.exit(); + } + }); + }*/ + + // + // Exported functions + // + module.getFileName = function(callback) { + // TODO : get mongodb filename + } + + + module.setObject = function(key, data, callback) { + // TODO : implement in mongo + } + + module.setObjectField = function(key, field, callback) { + // TODO : implement in mongo + } + + module.getObject = function(key, callback) { + // TODO : implement in mongo + } + + module.getObjectField = function(key, field, callback) { + // TODO : implement in mongo + } + + module.getObjectFields = function(key, fields, callback) { + // TODO : implement in mongo + } + + module.deleteObjectField = function(key, field, callback) { + // TODO : implement in mongo + } + + module.incrObjectField = function(key, field, value, callback) { + // TODO : implement in mongo + } + + + + + +}(exports)); + diff --git a/src/database/redis.js b/src/database/redis.js index 212a2d5fa7..bd6597f3c5 100644 --- a/src/database/redis.js +++ b/src/database/redis.js @@ -2,65 +2,76 @@ (function(module) { 'use strict'; - var RedisDB, + var redisClient, redis = require('redis'), winston = require('winston'), nconf = require('nconf'), redis_socket_or_host = nconf.get('redis:host'), - utils = require('./../public/src/utils.js'); + utils = require('./../../public/src/utils.js'); if (redis_socket_or_host && redis_socket_or_host.indexOf('/')>=0) { /* If redis.host contains a path name character, use the unix dom sock connection. ie, /tmp/redis.sock */ - RedisDB = redis.createClient(nconf.get('redis:host')); + redisClient = redis.createClient(nconf.get('redis:host')); } else { /* Else, connect over tcp/ip */ - RedisDB = redis.createClient(nconf.get('redis:port'), nconf.get('redis:host')); + redisClient = redis.createClient(nconf.get('redis:port'), nconf.get('redis:host')); } if (nconf.get('redis:password')) { - RedisDB.auth(nconf.get('redis:password')); + redisClient.auth(nconf.get('redis:password')); } var db = parseInt(nconf.get('redis:database'), 10); if (db){ - RedisDB.select(db, function(error){ - if(error !== null){ + redisClient.select(db, function(error) { + if(error) { winston.error("NodeBB could not connect to your Redis database. Redis returned the following error: " + error.message); process.exit(); } }); } - RedisDB.handle = function(error) { - if (error !== null) { - winston.err(error); - if (global.env !== 'production') { - throw new Error(error); - } - } - }; - - /* * A possibly more efficient way of doing multiple sismember calls */ - RedisDB.sismembers = function(key, needles, callback) { + function sismembers(key, needles, callback) { var tempkey = key + ':temp:' + utils.generateUUID(); - RedisDB.sadd(tempkey, needles, function() { - RedisDB.sinter(key, tempkey, function(err, data) { - RedisDB.del(tempkey); + redisClient.sadd(tempkey, needles, function() { + redisClient.sinter(key, tempkey, function(err, data) { + redisClient.del(tempkey); callback(err, data); }); }); }; - /* - * gets fields of a hash as an object instead of an array - */ - RedisDB.hmgetObject = function(key, fields, callback) { - RedisDB.hmget(key, fields, function(err, data) { + // + // Exported functions + // + module.setObject = function(key, data, callback) { + redisClient.hmset(key, data, callback); + } + module.setObjectField = function(key, field, callback) { + redisClient.hset(key, field, callback) + } + + module.getObject = function(key, callback) { + redisClient.hgetall(key, callback) + } + + module.getObjectField = function(key, field, callback) { + module.getObjectFields(key, [field], function(err, data) { + if(err) { + return callback(err); + } + + callback(null, data[field]); + }); + } + + module.getObjectFields = function(key, fields, callback) { + redisClient.hmget(key, fields, function(err, data) { if(err) { return callback(err, null); } @@ -73,9 +84,18 @@ callback(null, returnData); }); - }; + } + + module.deleteObjectField = function(key, field, callback) { + redisClient.hdel(key, field, callback); + } + + module.incrObjectField = function(key, field, value, callback) { + redisClient.hincrby(key, field, value, callback); + } + + - module.exports = RedisDB; }(exports)); diff --git a/src/meta.js b/src/meta.js index 792d213a84..8930c944ba 100644 --- a/src/meta.js +++ b/src/meta.js @@ -1,11 +1,13 @@ -var utils = require('./../public/src/utils.js'), - RDB = require('./redis.js'), - plugins = require('./plugins'), - async = require('async'), +var fs = require('fs'), path = require('path'), - fs = require('fs'), + async = require('async'), winston = require('winston'), - nconf = require('nconf'); + nconf = require('nconf'), + + utils = require('./../public/src/utils'), + db = require('./database'), + plugins = require('./plugins'); + (function (Meta) { Meta.config = {}; @@ -15,33 +17,34 @@ var utils = require('./../public/src/utils.js'), delete Meta.config; Meta.configs.list(function (err, config) { - if (!err) { - Meta.config = config; - callback(); - } else { + if(err) { winston.error(err); + return callback(err); } + + Meta.config = config; + callback(); }); }, list: function (callback) { - RDB.hgetall('config', function (err, config) { - if (!err) { - config = config || {}; - config.status = 'ok'; - callback(err, config); - } else { - callback(new Error('could-not-read-config')); + db.getObject('config', function (err, config) { + if(err) { + return callback(new Error('could-not-read-config')); } + + config = config || {}; + config.status = 'ok'; + callback(err, config); }); }, get: function (field, callback) { - RDB.hget('config', field, callback); + db.getObjectField('config', field, callback); }, getFields: function (fields, callback) { - RDB.hmgetObject('config', fields, callback); + db.getObjectFields('config', fields, callback); }, set: function (field, value, callback) { - RDB.hset('config', field, value, function (err, res) { + db.setObjectField(field, value, function(err, res) { if (callback) { if(!err && Meta.config) Meta.config[field] = value; @@ -59,7 +62,7 @@ var utils = require('./../public/src/utils.js'), }); }, remove: function (field) { - RDB.hdel('config', field); + db.deleteObjectField('config', field); } }; @@ -125,7 +128,7 @@ var utils = require('./../public/src/utils.js'), themeData['theme:staticDir'] = config.staticDir ? config.staticDir : ''; themeData['theme:templates'] = config.templates ? config.templates : ''; - RDB.hmset('config', themeData, next); + db.setObject('config', themeData, next); } ], function(err) { callback(err); @@ -134,7 +137,7 @@ var utils = require('./../public/src/utils.js'), case 'bootswatch': themeData['theme:src'] = data.src; - RDB.hmset('config', themeData, callback); + db.setObject('config', themeData, callback); break; } } @@ -256,11 +259,16 @@ var utils = require('./../public/src/utils.js'), }), minified; - if (process.env.NODE_ENV === 'development') winston.info('Minifying client-side libraries'); + if (process.env.NODE_ENV === 'development') { + winston.info('Minifying client-side libraries'); + } + minified = uglifyjs.minify(jsPaths); fs.writeFile(Meta.js.minFile, minified.code, function (err) { if (!err) { - if (process.env.NODE_ENV === 'development') winston.info('Minified client-side libraries'); + if (process.env.NODE_ENV === 'development') { + winston.info('Minified client-side libraries'); + } callback(); } else { winston.error('Problem minifying client-side libraries, exiting.'); @@ -272,23 +280,7 @@ var utils = require('./../public/src/utils.js'), Meta.db = { getFile: function (callback) { - var multi = RDB.multi(); - - multi.config('get', 'dir'); - multi.config('get', 'dbfilename'); - multi.exec(function (err, results) { - if (err) { - return callback(err); - } else { - results = results.reduce(function (memo, config) { - memo[config[0]] = config[1]; - return memo; - }, {}); - - var dbFile = path.join(results.dir, results.dbfilename); - callback(null, dbFile); - } - }); + db.getFileName(callback); } }; }(exports)); \ No newline at end of file diff --git a/src/plugins.js b/src/plugins.js index 9de194034f..9a7142366e 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -1,9 +1,10 @@ var fs = require('fs'), path = require('path'), - RDB = require('./redis.js'), async = require('async'), winston = require('winston'), eventEmitter = require('events').EventEmitter, + db = require('./database'), + plugins = { libraries: {}, loadedHooks: {},