From 5c4d871bcdcc5f0c99bb6684b1af206b0dc64113 Mon Sep 17 00:00:00 2001 From: Illia Chub Date: Tue, 16 Nov 2021 12:02:36 +0200 Subject: [PATCH] Added backup process status check endpoint --- selfprivacy_api/resources/services/restic.py | 28 +++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/selfprivacy_api/resources/services/restic.py b/selfprivacy_api/resources/services/restic.py index dc02abf..3593069 100644 --- a/selfprivacy_api/resources/services/restic.py +++ b/selfprivacy_api/resources/services/restic.py @@ -2,7 +2,7 @@ from flask import request from flask_restful import Resource import subprocess -import threading +import json from selfprivacy_api.resources.services import api @@ -28,10 +28,10 @@ class ListAllBackups(Resource): # Create a new restic backup -class AsyncCreateBackup(Resource, threading.Thread): +class AsyncCreateBackup(Resource): def put(self): backupCommand = """ - restic -r b2:{0}:/sfbackup --verbose backup /var --password-file /var/lib/restic/rpass + restic -r b2:{0}:/sfbackup --verbose backup /var --password-file /var/lib/restic/rpass > tmp/backup.log """.format( request.headers.get("X-Repository-Name") ) @@ -45,6 +45,28 @@ class AsyncCreateBackup(Resource, threading.Thread): "message": "Backup creation has started", } +class CheckBackupStatus(Resource): + def get(self): + backupStatusCheckCommand = """ + tail -1 /tmp/backup.log + """ + + backupStatusCheckProcessDescriptor = subprocess.Popen( + backupStatusCheckCommand, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT + ) + + backupProcessStatus = backupStatusCheckProcessDescriptor.communicate()[0] + backupProcessStatus = backupProcessStatus.decode("utf-8") + + try: + json.loads(backupProcessStatus) + except ValueError: + return { + "message": backupProcessStatus + } + return backupProcessStatus + api.add_resource(ListAllBackups, "/restic/backup/list") api.add_resource(AsyncCreateBackup, "/restic/backup/create") +api.add_resource(CheckBackupStatus, "/restic/backup/status")