change backup to use commandline args instead of environment

This commit is contained in:
HF 2020-01-08 02:53:10 +01:00
parent e6c6b45a6b
commit 8894c38289
3 changed files with 26 additions and 21 deletions

View File

@ -18,7 +18,6 @@ import bluebird from 'bluebird';
import process from 'process'; import process from 'process';
import { spawn } from 'child_process'; import { spawn } from 'child_process';
import { DailyCron } from './utils/cron';
import { import {
updateBackupRedis, updateBackupRedis,
createPngBackup, createPngBackup,
@ -43,15 +42,18 @@ proc.on('exit', (code) => {
bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.RedisClient.prototype);
bluebird.promisifyAll(redis.Multi.prototype); bluebird.promisifyAll(redis.Multi.prototype);
const { const [
CANVAS_REDIS_URL, CANVAS_REDIS_URL,
BACKUP_REDIS_URL, BACKUP_REDIS_URL,
BACKUP_DIR, BACKUP_DIR,
} = process.env; INTERVAL,
] = process.argv.slice(2);
if (!CANVAS_REDIS_URL || !BACKUP_REDIS_URL || !BACKUP_DIR) { if (!CANVAS_REDIS_URL || !BACKUP_REDIS_URL || !BACKUP_DIR) {
throw new Error( console.error(
'You did not set CANVAS_REDIS_URL, BACKUP_REDIS_URL or BACKUP_DIR', 'Usage: node backup.js original_canvas backup_canvas backup_directory',
); );
process.exit(1);
} }
const canvasRedis = redis const canvasRedis = redis
@ -77,7 +79,7 @@ function getDateFolder() {
return backupDir; return backupDir;
} }
function dailyBackup() { async function dailyBackup() {
const backupDir = getDateFolder(); const backupDir = getDateFolder();
if (!fs.existsSync(backupDir)) { if (!fs.existsSync(backupDir)) {
fs.mkdirSync(backupDir); fs.mkdirSync(backupDir);
@ -89,7 +91,7 @@ function dailyBackup() {
} }
await updateBackupRedis(canvasRedis, backupRedis, canvases); await updateBackupRedis(canvasRedis, backupRedis, canvases);
await createPngBackup(backupRedis, canvases, backupDir); await createPngBackup(backupRedis, canvases, backupDir);
console.log('Daily backup done'); console.log('Daily full backup done');
}); });
} }
@ -106,20 +108,22 @@ function incrementialBackup() {
); );
} }
async function startCronJobs() { async function trigger() {
if (!fs.existsSync(BACKUP_DIR)) { if (!fs.existsSync(BACKUP_DIR)) {
throw new Error(`Backup directory ${BACKUP_DIR} does not exist!`); console.error(`Backup directory ${BACKUP_DIR} does not exist!`);
process.exit(1);
} }
const backupDir = getDateFolder(); const backupDir = getDateFolder();
if (!fs.existsSync(backupDir)) { if (!fs.existsSync(backupDir)) {
await dailyBackup(); await dailyBackup();
} else {
await incrementialBackup();
} }
if (!INTERVAL) {
console.log( process.exit(0);
'Creating one full PNG backup per day and incremential backups every hour.', }
); setTimeout(trigger, INTERVAL * 60 * 1000);
DailyCron.hook(dailyBackup);
setInterval(incrementialBackup, 15 * 60 * 1000);
} }
startCronJobs(); console.log('Starting backup...');
trigger();

View File

@ -73,7 +73,11 @@ export async function incrementialBackupRedis(
fs.mkdirSync(canvasBackupDir); fs.mkdirSync(canvasBackupDir);
} }
const date = new Date(); const date = new Date();
const canvasTileBackupDir = `${canvasBackupDir}/${date.getHours()}${date.getMinutes()}`; let hours = date.getHours();
let minutes = date.getMinutes();
if (hours < 10) hours = `0${hours}`;
if (minutes < 10) minutes = `0${minutes}`;
const canvasTileBackupDir = `${canvasBackupDir}/${hours}${minutes}`;
if (!fs.existsSync(canvasTileBackupDir)) { if (!fs.existsSync(canvasTileBackupDir)) {
fs.mkdirSync(canvasTileBackupDir); fs.mkdirSync(canvasTileBackupDir);
} }

View File

@ -1,8 +1,5 @@
apps: apps:
- script : ./backup.js - script : ./backup.js
name : 'backup' name : 'backup'
args : 'redis://localhost:6379' 'redis://localhost:6380' '/backup/canvas' 15
node_args: --nouse-idle-notification --expose-gc node_args: --nouse-idle-notification --expose-gc
env:
CANVAS_REDIS_URL: 'redis://localhost:6379'
BACKUP_REDIS_URL: 'redis://localhost:6380'
BACKUP_DIR: '/backups'