Le blog de Genma
Vous êtes ici : Accueil » Informatique » Borg Checker, petit script Python sans prétention

Borg Checker, petit script Python sans prétention

D 12 décembre 2018     H 09:00     A Genma     C 0 messages   Flattr cet article Logo Tipee

TAGS : Planet Libre Sauvegarde Python

Prérequis :
- Avoir déjà utilisé Borg
- Connaître Python, ou a minima savoir lire du code

Rôle de ce bout de code

L’objectif est de savoir si les sauvegardes lancées la nuit, reposant sur un script Borg, se sont bien passées. Pour cela, nous partons du principe que si une commande borg c’est bien lancée, dans la liste des sauvegardes renvoyées par Borg, on aura une sauvegarde portant le bon nom (le nom incluant la date du jour). Le nom de chaque sauvegarde est donc l’élément discriminant et est de la forme Documents_AAAA-MM-DD-HH:MM:SS. Exemple Documents_2018-10-31-10:10:10

Le script répond à notre besoin, à savoir éviter de faire un "borg list" sur X répertoires et nous renvoyer un OK quand on a une sauvegarde avec la bonne date, KO si il n’y a pas de sauvegarde ayant la date du jour et il indique le nombre de jours entre la dernière sauvegarde et la date du jour.

Pourquoi en Python et pas en bash ?

J’avais commencé à former mon Pandawan au Shell et nous aurions pu faire un script équivalent en shell. Mais je voulais aussi le former à des notions de programmation objet, lui montrer que l’on pouvait faire aussi des choses en Python et dérouiller mon propre Python. D’où le choix de ce langage.

Attention, nous ne sommes pas des spécialistes Python, nous savons juste faire des bouts de scripts & codes que nous saurons relire et améliorer dans plusieurs mois. Le but n’était pas de faire un code optimisé ultra efficace mais de faire quelque chose de lisible et réutilisable et maintenable, compréhensible par la première personne qui sait lire un peu de code.

Le code

[SauvegardeBorg]
Documents_Dossier_A = /Backup/Documents/Dossier_A/
Documents_Dossier_B = /Backup/Documents/Dossier_B/
Documents_Dossier_C = /Backup/Documents/Dossier_C/
#!/usr/bin/python
# -*-coding:Utf-8 -*
import configparser
import sys
import os.path
import datetime

#===========================================================
# SCRIPT DE VALIDATION DES DIFFERENTES SAUVEGARDES
#==========================================================

#"------------------------------------------------------------
# Initialisation des chemins
# On a un fichier avec
# * en clef : la sauvegarde à valider
# * en valeur : le chemin dans lequel on vérifie la sauvegarde
# via le check de borg list avec une sauvegarde borg à la date du jour
config = configparser.ConfigParser()
config.optionxform = str
config.read('./Config.ini')
configsauvegardeBorg = config['SauvegardeBorg']

def fctCheckBorg():
        print("==========================================")
        print(" CHECK DES SAUVEGARDES BORG")
        print("==========================================")

        from datetime import datetime
        # Lecture de tous les éléments de BorgBackupPath
        for key,value in config.items('SauvegardeBorg'):
                try:
                        borgCommand="borg list "+ value
                        sortie = os.popen(borgCommand).read()
                        tabBorgList = sortie.split("\n")
                        number=len(tabBorgList) -2
                        # La ligne est de la forme
                        # Documents_2018-10-31-10:10:10   Wed, 2018-10-31 10:10:10 [b576a0703b7144be76afd2e2]
                        # On coupe pour trouver la date
                        lastBackupDate = tabBorgList[number].split(",")[1].split("[")[0].split(" ")[1]
                        # Conversion du String en Date
                        lastBackupDateToDate = datetime.strptime(lastBackupDate,'%Y-%M-%d')
                        # Récupération de la date du jour au bon format
                        now=datetime.strptime(datetime.now().strftime('%Y-%M-%d'),'%Y-%M-%d')
                        # Calcul du delta
                        delta = now - lastBackupDateToDate
                        if (delta.days == 0):
                                print(key, ": statut OK. Nombre de jours depuis la dernière sauvegarde : ", str(delta.days))
                        else:
                                print(key, ": statut KO. Nombre de jours depuis la dernière sauvegarde :", str(delta.days))
                except Exception as e:
                        print("Erreur rencontree : ")
                        print(str(e))
                        continue
        print("\n")
        return 0;

Exemple de résultat d’exécution

Le script se lance via

python3 BorgChecker.py

Résultat de l’exécution quand on a bien une sauvegarde qui s’est déroulée sur la nuit

Documents_Dossier_A : statut OK. Nombre de jours depuis la dernière sauvegarde : 0.
Documents_Dossier_B : statut OK. Nombre de jours depuis la dernière sauvegarde : 0.

Résultat de l’exécution quand on a bien une erreur (et le nombre de jours permet de détecter que le script ne tourne plus depuis X jours par exemple).

Documents_Dossier_C : statut KO. Nombre de jours depuis la dernière sauvegarde : 3.

Ainsi on sait que pour le dossier A et B, on a bien une sauvegarde. Pour le dossier C, il y a eu une erreur (vu que l’on a un K0) et il faudra donc aller analyser pour en savoir plus (coupure de réseau, lock qui a empêché la bonne exécution de Borg...)

Conclusion

Le code source et l’ensemble de cet article sont en licence CC BY SA, faites en ce que vous voulez. Si ça peut vous être utile, tant mieux ;)

 Les Tags - mots clefs de ce article

 Vous aimez cet article? Soutenez le blog et partagez-le ;-)

Logo Tipee Flattr icon  Facebook icon  Twitter icon  Diapora icon   Licence Creative Commons
Un message, un commentaire ?
modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Conférences

Médiathèques vous recherchez un conférencier sur l’éducation populaire et l’hygiène numérique? Jetez un coup d’oeil à mon CV

Date des prochaines conférences?
Cliquer ici

Rechercher sur le blog

Liens

Logo Flattr Logo Gmail Logo Twitter
Logo RSS Logo Linkedin Logo GitHub
Logo Gitlab Logo Mastodon
Logo Diaspora

Soutenir ce blog?

Logo Tipee Logo Liberapay

Licence

Licence Creative Commons

Derniers articles

1.  Le son du soir dans les anime

2.  Secure-delete

3.  Vorta, interface graphique à Borg

4.  Rsync Checker petit script Python sans prétention

5.  Bilan 2018 et projection 2019

6.  Astuces Debian

7.  Borg Checker, petit script Python sans prétention

8.  Rsync et Borg le couple gagnant ?

9.  Retour d’expérience avec Borg comme outil de sauvegarde

10.  Illang : The Wolf Brigade sur Netflix


Date de mise à jour :

Le 17 janvier 2019