Support for backup, import, export of templates
parent
70ebf96e3e
commit
e28c9b54b9
38
app.js
38
app.js
|
@ -108,11 +108,18 @@ app.get(routes.backup, function(req, res) {
|
|||
|
||||
app.get(routes.restore, function(req, res) {
|
||||
// get all the crontabs
|
||||
restore.crontabs(req.query.db, function(docs){
|
||||
restore.loadBackupFile(req.query.db, function(docs, templates) {
|
||||
res.render('restore', {
|
||||
routes : JSON.stringify(routes),
|
||||
crontabs : JSON.stringify(docs),
|
||||
templates: templates,
|
||||
templatesById: templates.reduce(function(memo, t) {
|
||||
memo[t._id] = t;
|
||||
return memo;
|
||||
}, {}),
|
||||
backups : crontab.get_backup_names(),
|
||||
env : crontab.get_env(),
|
||||
moment: moment,
|
||||
db: req.query.db
|
||||
});
|
||||
});
|
||||
|
@ -129,31 +136,30 @@ app.get(routes.restore_backup, function(req, res) {
|
|||
})
|
||||
|
||||
app.get(routes.export, function(req, res) {
|
||||
var file = __dirname + '/crontabs/crontab.db';
|
||||
var backupData = crontab.backup_data();
|
||||
|
||||
var filename = path.basename(file);
|
||||
var mimetype = mime.lookup(file);
|
||||
res.setHeader('Content-disposition', 'attachment; filename=crontab_ui_backup.json');
|
||||
res.setHeader('Content-type', 'application/json');
|
||||
|
||||
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
|
||||
res.setHeader('Content-type', mimetype);
|
||||
|
||||
var filestream = fs.createReadStream(file);
|
||||
filestream.pipe(res);
|
||||
})
|
||||
res.end(JSON.stringify(backupData));
|
||||
});
|
||||
|
||||
|
||||
app.post(routes.import, function(req, res) {
|
||||
var fstream;
|
||||
req.pipe(req.busboy);
|
||||
req.busboy.on('file', function (fieldname, file, filename) {
|
||||
fstream = fs.createWriteStream(__dirname + '/crontabs/crontab.db');
|
||||
file.pipe(fstream);
|
||||
fstream.on('close', function () {
|
||||
|
||||
file.on('data', function(data) {
|
||||
crontab.restore_data(JSON.parse(data.toString('utf8')));
|
||||
crontab.reload_db();
|
||||
});
|
||||
});
|
||||
|
||||
req.busboy.on('finish', function() {
|
||||
res.redirect(routes.root);
|
||||
});
|
||||
});
|
||||
})
|
||||
})
|
||||
});
|
||||
|
||||
app.get(routes.import_crontab, function(req, res) {
|
||||
crontab.import_crontab()
|
||||
|
|
35
crontab.js
35
crontab.js
|
@ -1,8 +1,12 @@
|
|||
//load database
|
||||
|
||||
exports.crontab_db_file = __dirname + '/crontabs/crontab.db';
|
||||
exports.templates_db_file = __dirname + '/crontabs/templates.db';
|
||||
|
||||
var Datastore = require('nedb');
|
||||
var db = {
|
||||
crontabs: new Datastore({ filename: __dirname + '/crontabs/crontab.db', autoload: true }),
|
||||
templates: new Datastore({ filename: __dirname + '/crontabs/templates.db', autoload: true }),
|
||||
crontabs: new Datastore({ filename: exports.crontab_db_file, autoload: true }),
|
||||
templates: new Datastore({ filename: exports.templates_db_file, autoload: true }),
|
||||
};
|
||||
var exec = require('child_process').exec;
|
||||
var fs = require('fs');
|
||||
|
@ -166,18 +170,39 @@ exports.get_backup_names = function(){
|
|||
return backups;
|
||||
}
|
||||
|
||||
exports.backup = function(){
|
||||
exports.backup_data = function() {
|
||||
//TODO check if it failed
|
||||
fs.createReadStream( __dirname + '/crontabs/crontab.db').pipe(fs.createWriteStream( __dirname + '/crontabs/backup ' + (new Date()).toString().replace("+", " ") + '.db'));
|
||||
var crontabData = fs.readFileSync( exports.crontab_db_file ).toString('utf8')
|
||||
var templateData = fs.readFileSync( exports.templates_db_file ).toString('utf8')
|
||||
|
||||
return {
|
||||
version: 1,
|
||||
crontabs: crontabData,
|
||||
templates: templateData,
|
||||
};
|
||||
}
|
||||
|
||||
exports.backup = function(){
|
||||
var backupFile = __dirname + '/crontabs/backup ' + (new Date()).toString().replace("+", " ") + '.db';
|
||||
|
||||
fs.writeFileSync(backupFile, JSON.stringify(exports.backup_data()));
|
||||
}
|
||||
|
||||
exports.restore = function(db_name){
|
||||
fs.createReadStream( __dirname + '/crontabs/' + db_name).pipe(fs.createWriteStream( __dirname + '/crontabs/crontab.db'));
|
||||
exports.restore_data(JSON.parse(fs.readFileSync( __dirname + '/crontabs/' + db_name )))
|
||||
}
|
||||
|
||||
exports.restore_data = function(backupData) {
|
||||
fs.writeFileSync(exports.crontab_db_file, backupData.crontabs);
|
||||
fs.writeFileSync(exports.templates_db_file, backupData.templates);
|
||||
|
||||
db.crontabs.loadDatabase(); // reload the database
|
||||
db.templates.loadDatabase();
|
||||
}
|
||||
|
||||
exports.reload_db = function(){
|
||||
db.crontabs.loadDatabase();
|
||||
db.templates.loadDatabase();
|
||||
}
|
||||
|
||||
exports.get_env = function(){
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
"mime": "latest",
|
||||
"moment": "^2.13.0",
|
||||
"nedb": "latest",
|
||||
"tmp": "0.0.28",
|
||||
"underscore": "^1.8.3"
|
||||
},
|
||||
"engines": {
|
||||
|
|
33
restore.js
33
restore.js
|
@ -3,15 +3,34 @@ var Datastore = require('nedb');
|
|||
|
||||
var exec = require('child_process').exec;
|
||||
var fs = require('fs');
|
||||
var tmp = require('tmp');
|
||||
|
||||
exports.crontabs = function(db_name, callback){
|
||||
var db = new Datastore({ filename: __dirname + '/crontabs/' + db_name });
|
||||
db.loadDatabase(function (err) {
|
||||
exports.loadBackupFile = function(db_name, callback) {
|
||||
|
||||
console.log(__dirname + '/crontabs/' + db_name);
|
||||
|
||||
var backupFileData = fs.readFileSync(__dirname + '/crontabs/' + db_name).toString('utf8');
|
||||
console.log(backupFileData);
|
||||
var data = JSON.parse(backupFileData);
|
||||
|
||||
|
||||
var crontabFile = tmp.fileSync();
|
||||
var templateFile = tmp.fileSync();
|
||||
|
||||
fs.writeFileSync(crontabFile.name, data.crontabs);
|
||||
fs.writeFileSync(templateFile.name, data.templates);
|
||||
|
||||
var crontabDB = new Datastore({ filename: crontabFile.name , autoload: true });
|
||||
var templateDB = new Datastore({ filename: templateFile.name , autoload: true });
|
||||
|
||||
crontabDB.find({}).sort({ created: -1 }).exec(function(err, docs){
|
||||
templateDB.find({}).sort({ name: 1 }).exec(function(err, templates) {
|
||||
|
||||
callback(docs, templates);
|
||||
})
|
||||
});
|
||||
db.find({}).sort({ created: -1 }).exec(function(err, docs){
|
||||
callback(docs);
|
||||
});
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
exports.delete = function(db_name){
|
||||
fs.unlink(__dirname + '/crontabs/' + db_name);
|
||||
|
|
Loading…
Reference in New Issue