etherpad-lite/bin/extractPadData.js

110 lines
2.6 KiB
JavaScript
Raw Normal View History

2011-11-27 06:32:31 +01:00
/*
This is a debug tool. It helps to extract all datas of a pad and move it from an productive environment and to a develop environment to reproduce bugs there. It outputs a dirtydb file
2011-11-27 06:32:31 +01:00
*/
if(process.argv.length != 3)
{
console.error("Use: node extractPadData.js $PADID");
process.exit(1);
}
//get the padID
var padId = process.argv[2];
2013-01-13 12:20:49 +01:00
var db, dirty, padManager, pad, settings;
2011-11-27 06:32:31 +01:00
var neededDBValues = ["pad:"+padId];
2013-02-27 16:26:22 +01:00
var npm = require("../node_modules/ep_etherpad-lite/node_modules/npm");
var async = require("../node_modules/ep_etherpad-lite/node_modules/async");
2013-01-06 19:25:32 +01:00
2011-11-27 06:32:31 +01:00
async.series([
2013-01-06 19:25:32 +01:00
// load npm
function(callback) {
npm.load({}, function(er) {
2013-01-06 20:20:46 +01:00
if(er)
{
console.error("Could not load NPM: " + er)
process.exit(1);
}
else
{
callback();
}
2013-01-06 19:25:32 +01:00
})
},
// load modules
function(callback) {
2013-02-27 16:26:22 +01:00
settings = require('../node_modules/ep_etherpad-lite/node/utils/Settings');
db = require('../node_modules/ep_etherpad-lite/node/db/DB');
2013-02-18 21:40:34 +01:00
dirty = require("../node_modules/ep_etherpad-lite/node_modules/ueberDB/node_modules/dirty")(padId + ".db");
2013-02-18 17:29:25 +01:00
callback();
2013-01-06 19:25:32 +01:00
},
//initialize the database
2011-11-27 06:32:31 +01:00
function (callback)
{
db.init(callback);
},
//get the pad
function (callback)
{
2013-02-27 16:26:22 +01:00
padManager = require('../node_modules/ep_etherpad-lite/node/db/PadManager');
2011-11-27 06:32:31 +01:00
padManager.getPad(padId, function(err, _pad)
{
pad = _pad;
callback(err);
});
},
function (callback)
{
//add all authors
var authors = pad.getAllAuthors();
for(var i=0;i<authors.length;i++)
{
neededDBValues.push("globalAuthor:" + authors[i]);
}
//add all revisions
var revHead = pad.head;
for(var i=0;i<=revHead;i++)
{
neededDBValues.push("pad:"+padId+":revs:" + i);
}
//get all chat values
var chatHead = pad.chatHead;
for(var i=0;i<=chatHead;i++)
{
neededDBValues.push("pad:"+padId+":chat:" + i);
}
//get and set all values
async.forEach(neededDBValues, function(dbkey, callback)
{
db.db.db.wrappedDB.get(dbkey, function(err, dbvalue)
{
if(err) { callback(err); return}
2013-02-18 21:38:32 +01:00
2013-02-27 16:26:22 +01:00
if(dbvalue && typeof dbvalue != 'object'){
dbvalue=JSON.parse(dbvalue); // if it's not json then parse it as json
2013-02-18 21:38:32 +01:00
}
2011-11-27 06:32:31 +01:00
dirty.set(dbkey, dbvalue, callback);
});
}, callback);
}
], function (err)
{
if(err) throw err;
else
{
console.log("finished");
process.exit();
}
});
//get the pad object
//get all revisions of this pad
//get all authors related to this pad
//get the readonly link related to this pad
//get the chat entries related to this pad