From 1ae51ef5ea8913f9cb69e65ef88ebebb29f5dbe4 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 24 Sep 2013 15:36:17 -0400 Subject: [PATCH] redis export function (commented out for now) --- src/meta.js | 22 ++++++++++++++++ src/routes/admin.js | 62 ++++++++++++++++++++++++++++++++------------- 2 files changed, 66 insertions(+), 18 deletions(-) diff --git a/src/meta.js b/src/meta.js index cdc4c14b3d..97cfe65789 100644 --- a/src/meta.js +++ b/src/meta.js @@ -223,4 +223,26 @@ 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); + } + }); + } + }; }(exports)); \ No newline at end of file diff --git a/src/routes/admin.js b/src/routes/admin.js index 43896e3857..b6db9cf925 100644 --- a/src/routes/admin.js +++ b/src/routes/admin.js @@ -4,9 +4,11 @@ var user = require('./../user.js'), RDB = require('./../redis.js'), pkg = require('./../../package.json'), categories = require('./../categories.js'), + Meta = require('../meta'), plugins = require('../plugins'), winston = require('winston'), - nconf = require('nconf'); + nconf = require('nconf'), + fs = require('fs'); (function (Admin) { Admin.isAdmin = function (req, res, next) { @@ -153,31 +155,55 @@ var user = require('./../user.js'), }); }); - app.get('/redis', function (req, res) { - RDB.info(function (err, data) { - data = data.split("\r\n"); - var finalData = {}; + app.namespace('/redis', function () { + app.get('/', function (req, res) { + RDB.info(function (err, data) { + data = data.split("\r\n"); + var finalData = {}; - for (var i in data) { + for (var i in data) { - if (data[i].indexOf(':') == -1 || !data[i]) - continue; + if (data[i].indexOf(':') == -1 || !data[i]) + continue; - try { - data[i] = data[i].replace(/:/, "\":\""); - var json = "{\"" + data[i] + "\"}"; + try { + data[i] = data[i].replace(/:/, "\":\""); + var json = "{\"" + data[i] + "\"}"; - var jsonObject = JSON.parse(json); - for (var key in jsonObject) { - finalData[key] = jsonObject[key]; + var jsonObject = JSON.parse(json); + for (var key in jsonObject) { + finalData[key] = jsonObject[key]; + } + } catch (err) { + winston.warn('can\'t parse redis status variable, ignoring', i, data[i], err); } - } catch (err) { - winston.warn('can\'t parse redis status variable, ignoring', i, data[i], err); } - } - res.json(finalData); + res.json(finalData); + }); }); + + // app.get('/export', Admin.isAdmin, function (req, res) { + // Meta.db.getFile(function (err, dbFile) { + // if (!err) { + // res.download(dbFile, 'redis.rdb', function (err) { + // console.log(err); + // res.send(500); + // if (err) { + // res.send(500); + // switch (err.code) { + // case 'EACCES': + // res.send(500, 'Require permissions from Redis database file: ', dbFile); + // break; + // default: + // res.send(500); + // break; + // } + // } + // }); + // } else res.send(500); + // }); + // }); }); app.get('/plugins', function (req, res) {