mirror of
https://github.com/Sebclem/hassio-nextcloud-backup.git
synced 2024-11-22 17:22:58 +01:00
Add create new-backup route
This commit is contained in:
parent
b32d51847e
commit
dfc63f0956
@ -24,6 +24,13 @@ router.get('/status', (req, res, next) => {
|
|||||||
router.get('/formated-local-snap', function(req, res, next) {
|
router.get('/formated-local-snap', function(req, res, next) {
|
||||||
hassioApiTools.getSnapshots().then(
|
hassioApiTools.getSnapshots().then(
|
||||||
(snaps) => {
|
(snaps) => {
|
||||||
|
// TODO sort snaps by date
|
||||||
|
snaps.sort((a, b) =>{
|
||||||
|
if(moment(a.date).isBefore(moment(b.date)))
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
})
|
||||||
res.render('localSnaps', { snaps: snaps, moment: moment });
|
res.render('localSnaps', { snaps: snaps, moment: moment });
|
||||||
},
|
},
|
||||||
(err) => {
|
(err) => {
|
||||||
@ -83,15 +90,31 @@ router.post('/manual-backup', function(req, res, next) {
|
|||||||
hassioApiTools.downloadSnapshot(id)
|
hassioApiTools.downloadSnapshot(id)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
webdav.uploadFile(id, '/Hassio Backup/Manual/' + name + '.tar');
|
webdav.uploadFile(id, '/Hassio Backup/Manual/' + name + '.tar');
|
||||||
res.send(200);
|
res.status(201);
|
||||||
|
res.send();
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
res.send(500);
|
res.status(500)
|
||||||
|
res.send();
|
||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.post('/new-backup', function(req, res, next) {
|
||||||
|
|
||||||
|
let name = 'Manual-' + moment().format('YYYY-MM-DD_HH:mm');
|
||||||
|
hassioApiTools.createNewBackup(name).then((id) => {
|
||||||
|
hassioApiTools.downloadSnapshot(id)
|
||||||
|
.then(() => {
|
||||||
|
webdav.uploadFile(id, '/Hassio Backup/Manual/' + name + '.tar');
|
||||||
|
}).catch(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
}).catch(() => {
|
||||||
|
|
||||||
|
})
|
||||||
|
res.status(201);
|
||||||
|
res.send();
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
@ -49,7 +49,7 @@ function getSnapshots() {
|
|||||||
function downloadSnapshot(id) {
|
function downloadSnapshot(id) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
console.log('Downloading snapshot ' + id + '...')
|
console.log('Downloading snapshot ' + id + '...')
|
||||||
if(!fs.existsSync('./temp/'))
|
if (!fs.existsSync('./temp/'))
|
||||||
fs.mkdirSync('./temp/');
|
fs.mkdirSync('./temp/');
|
||||||
let stream = fs.createWriteStream('./temp/' + id + '.tar');
|
let stream = fs.createWriteStream('./temp/' + id + '.tar');
|
||||||
let token = process.env.HASSIO_TOKEN;
|
let token = process.env.HASSIO_TOKEN;
|
||||||
@ -74,7 +74,7 @@ function downloadSnapshot(id) {
|
|||||||
.on('error', (error) => {
|
.on('error', (error) => {
|
||||||
status.status = "error";
|
status.status = "error";
|
||||||
status.message = "Fail to download Hassio snapshot (" + error + ")";
|
status.message = "Fail to download Hassio snapshot (" + error + ")";
|
||||||
status.error_code = 4;
|
status.error_code = 1;
|
||||||
statusTools.setStatus(status);
|
statusTools.setStatus(status);
|
||||||
console.error(status.message);
|
console.error(status.message);
|
||||||
reject(error);
|
reject(error);
|
||||||
@ -89,7 +89,7 @@ function downloadSnapshot(id) {
|
|||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
status.status = "error";
|
status.status = "error";
|
||||||
status.message = "Fail to download Hassio snapshot. Not found ?";
|
status.message = "Fail to download Hassio snapshot. Not found ?";
|
||||||
status.error_code = 4;
|
status.error_code = 1;
|
||||||
statusTools.setStatus(status);
|
statusTools.setStatus(status);
|
||||||
console.error(status.message);
|
console.error(status.message);
|
||||||
reject();
|
reject();
|
||||||
@ -120,5 +120,43 @@ function checkSnap(id) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function createNewBackup(name) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let status = statusTools.getStatus();
|
||||||
|
status.status = "creating";
|
||||||
|
status.progress = -1;
|
||||||
|
statusTools.setStatus(status);
|
||||||
|
console.log("Creating new snapshot...")
|
||||||
|
let token = process.env.HASSIO_TOKEN;
|
||||||
|
if (token == null) {
|
||||||
|
token = fallbackToken
|
||||||
|
}
|
||||||
|
let option = {
|
||||||
|
url: 'http://hassio/snapshots/new/full',
|
||||||
|
headers: { 'X-HASSIO-KEY': token },
|
||||||
|
json: true,
|
||||||
|
body: { name: name },
|
||||||
|
timeout: 1200000
|
||||||
|
}
|
||||||
|
request.post(option, (error, response, body) => {
|
||||||
|
if (response.statusCode != 200) {
|
||||||
|
status.status = "error";
|
||||||
|
status.message = "Can't create new snapshot ("+ error + ")";
|
||||||
|
status.error_code = 5;
|
||||||
|
statusTools.setStatus(status);
|
||||||
|
console.error(status.message);
|
||||||
|
reject(status.message);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
body.data.slug
|
||||||
|
console.log('Snapshot created with id ' + body.data.slug);
|
||||||
|
resolve(body.data.slug);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
exports.getSnapshots = getSnapshots;
|
exports.getSnapshots = getSnapshots;
|
||||||
exports.downloadSnapshot = downloadSnapshot;
|
exports.downloadSnapshot = downloadSnapshot;
|
||||||
|
exports.createNewBackup = createNewBackup;
|
@ -128,7 +128,7 @@
|
|||||||
<div class="col s12 m3">
|
<div class="col s12 m3">
|
||||||
<div class="card cyan darken-3">
|
<div class="card cyan darken-3">
|
||||||
<div class="card-content center">
|
<div class="card-content center">
|
||||||
<a class="btn green">Backup Now</a>
|
<a class="btn green" id="btn-backup-now">Backup Now</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -330,8 +330,13 @@
|
|||||||
break;
|
break;
|
||||||
case "download":
|
case "download":
|
||||||
printStatusWithBar('Downloading Snapshot', data.progress);
|
printStatusWithBar('Downloading Snapshot', data.progress);
|
||||||
|
break;
|
||||||
case "upload":
|
case "upload":
|
||||||
printStatusWithBar('Uploading Snapshot', data.progress);
|
printStatusWithBar('Uploading Snapshot', data.progress);
|
||||||
|
break;
|
||||||
|
case "creating":
|
||||||
|
printStatusWithBar('Creating Snapshot', data.progress);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (data.last_backup != null) {
|
if (data.last_backup != null) {
|
||||||
if ($('#last_back_status').html() != data.last_backup)
|
if ($('#last_back_status').html() != data.last_backup)
|
||||||
@ -380,6 +385,7 @@
|
|||||||
function listeners() {
|
function listeners() {
|
||||||
$('#save-nextcloud-settings').click(sendNextcloudSettings);
|
$('#save-nextcloud-settings').click(sendNextcloudSettings);
|
||||||
$('#trigger-nextcloud-settings').click(getNextcloudSettings)
|
$('#trigger-nextcloud-settings').click(getNextcloudSettings)
|
||||||
|
$('#btn-backup-now').click(backupNow)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -438,6 +444,20 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function backupNow() {
|
||||||
|
loadingModal.open();
|
||||||
|
$.post('./api/new-backup')
|
||||||
|
.done(() => {
|
||||||
|
M.toast({ html: '<i class="material-icons" style="margin-right:10px">check_box</i> Command send !', classes: "green" });
|
||||||
|
}).fail((error)=>{
|
||||||
|
console.log(error);
|
||||||
|
M.toast({ html: '<i class="material-icons" style="margin-right:10px">warning</i> Can\'t send command !', classes: "red" });
|
||||||
|
})
|
||||||
|
.always(() => {
|
||||||
|
loadingModal.close();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</html>
|
</html>
|
Loading…
Reference in New Issue
Block a user