rewrite parts of the automatic backup section

This commit is contained in:
Andreas Zweili 2019-03-11 11:18:32 +01:00
parent ab4dae172f
commit a80d7267e3
1 changed files with 48 additions and 43 deletions

View File

@ -2164,61 +2164,66 @@ Repository Statistik aktualisiert, um den neuen Zustand wiederzugeben.
** Automatische Backups
Damit der Benutzer die Backups von Hand machen muss, ist es sinnvoll eine
Damit der Benutzer die Backups nicht von Hand machen muss, ist es sinnvoll eine
Funktion bereitzustellen, welche die Backups automatisch im Hintergrund
erledigt. Dadurch ist sichergestellt das die Backups im allgemeinen Trubel des
Lebens nicht vergessen gehen.
Damit automatische Backups überhaupt möglich sind muss die Applikation zuerst
Backups im Hintergrund erstellen können, also ohne das die ganze grafische
Oberfläche angezeigt wird. Bei Borg-Qt wird dies über einen Kommandozeilen
Voraussetzung für automatisierte Backups ist das die Datensicherung ohne
gls:gui gestartet werden kann. Bei Borg-Qt wird dies über einen Kommandozeilen
Parameter realisiert. Hierfür wurde das Python Standard Paket ~argparser~
verwendet. Konkret bedeutet dies, dass wenn man die Applikation auf
der Kommandozeile wie folgt ausführt: ~borg_qt -B~. Wird die grafische Oberfläche
nicht angezeigt und es wird direkt die Methode ~background_backup~ der Klasse
~MainWindow~ ausgeführt. Dabei werden alle Ordner, welche in den Einstellungen
unter "Include" sowie "Exclude" gespeichert wurden, im Archiv gesichert,
respektive davon ausgeschlossen. Damit sind die Voraussetzungen für
automatische Backups gegeben.
verwendet. Konkret bedeutet dies, dass wenn die Applikation auf der
Kommandozeile mit folgendem Befehl ausgeführt wird: ~borg_qt -B~. Wird die
grafische Oberfläche nicht angezeigt und es wird direkt die Methode
~background_backup~ der Klasse ~MainWindow~ ausgeführt. Dabei werden alle
Ordner, welche in den Einstellungen unter "Include" sowie "Exclude" gespeichert
wurden, im Archiv gesichert, respektive davon ausgeschlossen. Damit sind die
Voraussetzungen für automatische Backups gegeben.
Um die Backups in regelmässigen Intervallen auszuführen, gibt es zwei
Möglichkeiten, wie man dies implementieren könnte. Zum einen könnte man die
Applikation permanent im Hintergrund laufen lassen, etwa als Trayicon wie man
das von anderen Applikationen wie etwas Dropbox kennt zum anderen kann man es
über Werkzeuge des Betriebssystems bewerkstelligen. Die drei
Desktop Betriebsysteme, Windows, OS X und Linux, bringen alle drei Werkzeuge
mit, um periodisch ein Programm auszuführen. Unter Linux wurde dies früher mit
sogenannten Cron Jobs gemacht. Die moderne Lösung sind heutzutage jedoch
Systemd Timer. Für Borg-Qt wurde beschlossen es mit den Werkzeugen des
Betriebssystems zu machen. Also konkret Systemd. Dies aus dem Grund das Systemd
genau für das Managen von Applikationen programmiert wurde. Ein Grossteil der
Funktion ist bereits in Systemd enthalten, somit kann man Zeit sparen. Zudem
soll die Anwendung dem Benutzer auch soweit als möglich aus dem Weg gehen. Eine
Applikation, welche permanent in der Taskleiste lebt scheint hier nicht wirklich
das Kriterium zu erfüllen.
Möglichkeiten, wie man dies implementieren könnte.
Variante a), die Applikation permanent im Hintergrund laufen lassen, etwa als
Trayicon wie man das von anderen Applikationen wie etwas Dropbox kennt.
Variante b) über Werkzeuge des Betriebssystems. Die drei Desktop
Betriebsysteme, Windows, OS X und Linux, bringen alle drei Werkzeuge mit, um
periodisch ein Programm auszuführen.
Für Borg-Qt wurde beschlossen Variante b) zu realisieren. Die Anwendung soll
dem Benutzer soweit als möglich aus dem Weg gehen. Eine Anwendung welche
permanent in der Taskleiste lebt erfüllt das Kriterum nicht.
Unter Linux wurden sich wiederholende Aufgaben, früher mit sogenannten Cron
Jobs umgesetzt. Die moderne Lösung sind heutzutage jedoch Systemd Timer. Also
konkret Systemd. Dies aus dem Grund das Systemd genau für das Managen von
Systemdiensten programmiert wurde. Ein Grossteil der benötigten Funktion ist
bereits in Systemd enthalten, somit kann bei der Entwicklung zusätzlich Zeit
gespart werden.
Systemd ist ein init System, welches dazu dient dazu die Benutzerumgebung und
die dazugehörigen Prozesse zu starten und zu verwalten footcite:systemd. Die
Prozesse werden über sogenannte "Services" gestartet. Die Services werden dabei
einfach in Klartextdateien mit der Dateiendung ~.service~ definiert. Der Inhalt
orientiert sich dabei praktischerweise am "INI" Stil. In Borg-Qt wurde das INI
Format bereits bei den Konfigurationsdateien verwendet. Somit können dort
gesammelte Erfahrungen wiederverwendet werden. Soll ein Service in einem
gewissen Zeitintervall ausgeführt werden benötigt Systemd eine weitere Datei mit
dem gleichen Namen jedoch mit der Dateiendung ~.timer~ . Der Inhalt ist auch
wieder im INI Stil gehalten. Systemd versteht eine Vielzahl an Datumsformaten
footcite:systemddate. In Borg-Qt wurden zwei Varianten in den Einstellungen
umgesetzt. Eine, welche "Predefined Schedule" genannt wurde und eine mit dem
Namen "Custom Schedule", zu sehen in, Abbildung:([[fig:schedule]]). Die Predefined
Option wird dabei in die von Systemd unterstützten Formate "hourly", "daily",
"weekly" und "monthly" übersetzt. Wie der Name schon sagt, wird dann stündlich,
täglich, wöchentlich oder monatlich ein Archiv erstellt. Mit der Custom Option
kann der Benutzer sich den Zeitplan individueller gestalten. Etwa "jeden
Mittwoch um 12:00 Uhr" für Systemd übersetzt würde dieser Zeitplan dann so
aussehen: ~Wednesday *-*-* 12:00:00~. Für spätere Versionen von Borg-Qt wäre es
allenfalls auch möglich die Auswahl von mehreren Wochentagen zu ermöglichen
damit der Benutzer etwa folgenden Zeitplan erstellen könnte "Montag, Mittwoch,
Freitag stündliche Backups." (~Monday, Wednesday, Friday *-*-* *:00:00~).
Format bereits bei den Konfigurationsdateien verwendet. Somit können die dort
gesammelte Erfahrungen zur Implementation von ~configparser~ wiederverwendet
werden. Soll ein Service in einem gewissen Zeitintervall ausgeführt werden
benötigt Systemd eine weitere Datei mit dem gleichen Namen jedoch mit der
Dateiendung ~.timer~ . Der Inhalt ist auch wieder im INI Stil gehalten. Systemd
versteht eine Vielzahl an Datumsformaten footcite:systemddate. In Borg-Qt
wurden zwei Varianten in den Einstellungen umgesetzt. Eine, welche "Predefined
Schedule" genannt wurde und eine mit dem Namen "Custom Schedule", zu sehen in,
Abbildung:([[fig:schedule]]). Die Predefined Option wird dabei in die von Systemd
unterstützten Formate "hourly, daily, weekly und monthly" übersetzt.
Entsprechend der gewählten Wiederholung wird automatisch ein Archiv erstellt.
Mit der Custom Option kann der Benutzer sich den Zeitplan individueller
gestalten. Etwa "jeden Mittwoch um 12:00 Uhr" für Systemd übersetzt würde
dieser Zeitplan dann so aussehen: ~Wednesday *-*-* 12:00:00~. Für spätere
Versionen von Borg-Qt wäre es allenfalls auch möglich die Auswahl von mehreren
Wochentagen zu ermöglichen damit der Benutzer etwa folgenden Zeitplan erstellen
könnte "Montag, Mittwoch, Freitag stündliche Backups." (~Monday, Wednesday,
Friday *-*-* *:00:00~).
#+caption: Screenshot der "Schedule" Einstellungen
#+name: fig:schedule
@ -2227,7 +2232,7 @@ Freitag stündliche Backups." (~Monday, Wednesday, Friday *-*-* *:00:00~).
Das Erstellen der eigentlichen Systemd Konfiguration passiert in Borg-Qt in der
~Config~ Klasse zum gleichen Zeitpunkt, wie die eigentliche Konfigurationsdatei
geschrieben wird. Zum Schreiben und he-/aktivieren des Systemd Services,
geschrieben wird. Zum Schreiben und de-/aktivieren des Systemd Services,
respektive Timers wurde eine Klasse ~SystemdFile~ erstellt. Somit könnte
die Funktion auch einfach in einem anderen Projekt verwendet werden.