Update backup name logic

pull/140/head
Andrei Ardelean 2020-09-23 23:08:39 +03:00 committed by Andrei Ardelean
parent 4cfd685ade
commit 6828acdaea
4 changed files with 54 additions and 27 deletions

12
app.js
View File

@ -66,7 +66,8 @@ app.get(routes.root, function(req, res) {
crontabs : JSON.stringify(docs), crontabs : JSON.stringify(docs),
backups : crontab.get_backup_names(), backups : crontab.get_backup_names(),
env : crontab.get_env(), env : crontab.get_env(),
moment: moment moment: moment,
crontab: crontab
}); });
}); });
}); });
@ -122,8 +123,10 @@ app.get(routes.crontab, function(req, res, next) {
// backup crontab db // backup crontab db
app.get(routes.backup, function(req, res) { app.get(routes.backup, function(req, res) {
crontab.backup(); crontab.backup(function(err) {
res.end(); if (err) next(err);
else res.end();
});
}); });
// This renders the restore page similar to backup page // This renders the restore page similar to backup page
@ -134,7 +137,8 @@ app.get(routes.restore, function(req, res) {
routes : JSON.stringify(routes_relative), routes : JSON.stringify(routes_relative),
crontabs : JSON.stringify(docs), crontabs : JSON.stringify(docs),
backups : crontab.get_backup_names(), backups : crontab.get_backup_names(),
db: req.query.db db: req.query.db,
crontab: crontab
}); });
}); });
}); });

View File

@ -24,7 +24,9 @@ db.loadDatabase(function (err) {
var exec = require('child_process').exec; var exec = require('child_process').exec;
var fs = require('fs'); var fs = require('fs');
var cron_parser = require("cron-parser"); var cron_parser = require("cron-parser");
var moment = require('moment');
const db_file_name_format = "[backup_]YYYY_MM_DD_HH_MM_ss[.db]";
crontab = function(name, command, schedule, stopped, logging, mailing){ crontab = function(name, command, schedule, stopped, logging, mailing){
var data = {}; var data = {};
@ -173,36 +175,57 @@ exports.get_backup_names = function(){
var backups = []; var backups = [];
fs.readdirSync(exports.db_folder).forEach(function(file) { fs.readdirSync(exports.db_folder).forEach(function(file) {
// file name begins with backup // file name begins with backup
if(file.indexOf("backup") === 0){ if(exports.backup_name_is_valid(file)) {
backups.push(file); backups.push(file);
} }
}); });
// Sort by date. Newest on top let sortedArray = backups.sort((a, b) => exports.backup_date(b) - exports.backup_date(a));
for(var i=0; i<backups.length; i++){
var Ti = backups[i].split("backup")[1];
Ti = new Date(Ti.substring(0, Ti.length-3)).valueOf();
for(var j=0; j<i; j++){
var Tj = backups[j].split("backup")[1];
Tj = new Date(Tj.substring(0, Tj.length-3)).valueOf();
if(Ti > Tj){
var temp = backups[i];
backups[i] = backups[j];
backups[j] = temp;
}
}
}
return backups; return backups;
}; };
exports.backup = function(){ exports.backup_display_name = function(backup_name) {
//TODO check if it failed let date = exports.backup_date(backup_name);
fs.createReadStream(exports.crontab_db_file).pipe(fs.createWriteStream( path.join(exports.db_folder, 'backup ' + (new Date()).toString().replace("+", " ") + '.db')));
return "Backup - " + date.toString();
}
exports.backup_date = function(backup_name) {
let moment_date = moment(backup_name, db_file_name_format, true);
let date = moment_date.toDate();
return date;
}
exports.backup_name_is_valid = function(backup_name) {
let moment_date = moment(backup_name, db_file_name_format, true);
return moment_date.isValid();
}
exports.backup_name = function(date) {
let moment_date = moment(date);
let name = moment_date.format(db_file_name_format);
return name;
}
exports.backup = function(callback) {
let backup_file_name = exports.backup_name(new Date());
let backup_path = path.join(exports.db_folder, backup_file_name);
fs.copyFile(exports.crontab_db_file, backup_path, (err) => {
if (err) {
console.error(err);
return callback(err);
}
callback();
});
}; };
exports.restore = function(db_name){ exports.restore = function(db_name){
fs.createReadStream(path.join(exports.db_folder, db_name)).pipe(fs.createWriteStream(exports.crontab_db_file)); var backup_path = path.join(exports.db_folder, db_name)
fs.createReadStream(backup_path).pipe(fs.createWriteStream(exports.crontab_db_file));
db.loadDatabase(); // reload the database db.loadDatabase(); // reload the database
}; };

View File

@ -21,7 +21,7 @@
<li><a href="#">None</a></li> <li><a href="#">None</a></li>
<% } else { %> <% } else { %>
<% backups.forEach(function(file){ %> <% backups.forEach(function(file){ %>
<li><a href="<%= JSON.parse(routes).restore %>?db=<%= file %>"><%= file %></a></li> <li><a href="<%= JSON.parse(routes).restore %>?db=<%= file %>"><%= crontab.backup_display_name(file) %></a></li>
<% }) %> <% }) %>
<% } %> <% } %>
</ul> </ul>

View File

@ -19,7 +19,7 @@
<body> <body>
<%- include('navbar.ejs') -%> <%- include('navbar.ejs') -%>
<div class="container"> <div class="container">
<h2><%= db %></h2> <h2><%= crontab.backup_display_name(db) %></h2>
<table class="table"> <table class="table">
<tr> <tr>
<th>Id</th> <th>Id</th>