blog.bartlweb - a technologist's external brain

Trello-Boards mittels Skript automatisiert sichern

Auch wenn es selten vorkommt, dass Cloudservices ausfallen, so passiert es leider doch gelegentlich. Und auch noch so erfolgreiche und populäre Dienste werden von Zeit zu Zeit übernommen, verändert oder eingestellt. Wer so wie ich sein Arbeitsleben und sämtliche ToDos mit Trello organisiert und daher ohne so gut wie aufgeschmissen ist, sollte für den Fall der Fälle vorsorgen. Zum Glück bietet Trello API-Schnittstellen an, die es erlauben auf die hinterlegten Daten zuzugreifen.

Das PHP-basierte Backup-Skript trello-backup von mattab (https://github.com/mattab/trello-backup) macht sich diese Schnittstelle zunutze, um alle vorhandenen Boards eines Accounts als JSON-Dateien zu sichern. Damit kann man zwar ohne weitere Verarbeitung nicht unmittelbar etwas anfangen, aber im Fall der Fälle lassen sich daraus zumindest mit etwas Aufwand oder manueller Interpretation die Daten wiederherstellen.

trello-backup von mattab leistet gute Arbeit, aber nur ein automatisiertes und überwachtes Backup ist ein gutes Backup. Das unten stehende Perl-Skript erlaubt es einerseits das Backup-Skript mit mehreren Konfigurationen aufzurufen, um so mehrere Accounts gleichzeitig zu sichern und andererseit überwacht dieses zusätzlich das Backup auf zwei Arten: Erstens wird geprüft, ob das Backup überhaupt geklappt hat und zweitens, ob die Anzahl der zu erwarteten Boards im Account erreicht wurde (oder eben zu wenige gesichert wurden). Im Fehlerfall sendet das Skript eine E-Mail mit den entsprechenden Details zum durchgeführten Backup.

Das Perl-Skript wird mittels Cronjob automatisiert und speichert so die Boards im gewünschten Rhythmus. Die Feinkonfiguration der einzelnen Backups für jeden Account erfolgt weiterhin über die config.php-Datei von trello-backup.

Das Perl-Skript

#!/usr/bin/perl
 
# ################################################################
# settings
# ################################################################
 
$subject = "Backup Trello error";
$mailfrom = "server\@example.com";
$mailto = "webmaster\@example.com";
 
$script = '/usr/bin/php /scripts/trello-backup/trello-backup.php';
 
# path to config file => minimal amount of expected boards
%backupconfigs = (
    '/scripts/backup/trello-backup/config.private.php' => '4',
    '/scripts/backup/trello-backup/config.business.php' => '2'
);
 

# ################################################################
# run backup scripts
# ################################################################
 
$errorcounter = 0;
$content = '';
$boardcount = 0;
 
while( ($config, $boards) = each(%backupconfigs) ){    
    print("Executing $config ...\n");
    @exec = `$script $config`;
    
    $content = $content . $config . ' (>=' . $boards . ' boards expected)' . "\n\n";
    $content = $content . join("\n", @exec) . "\n";
    $content = $content . "========================================================" . "\n\n";
    
    @success = grep(/^\d+ boards to backup.../g, @exec);
    $success = join(" ", @success);
    if ( $success =~ /(\d+)/ ) {
       $boardcount = $1;
    }
    
    if($boardcount < $boards){
        print("ERROR: found $boardcount boards - expected >= $boards boards\n\n");
        $errorcounter++;
    } else {
        print("OK: >= $boardcount boards\n\n");
    }
    
    @warn = grep(/^your Trello boards are now safely downloaded!/, @exec);
    if(scalar(@warn) == 0){
        $errorcounter++;
    }
}
 
# ################################################################
# send notification mail
# ################################################################
 
use FileHandle;
 
if($errorcounter > 0){
   $mail = new FileHandle;
   $mail->open("| /usr/sbin/sendmail -t") || die "Cannot open: $!";
   $mail->print("From: $mailfrom\n");
   $mail->print("To: $mailto\n");
   $mail->print("Subject: $subject\n\n");
 
   $mail->print($content);
 
   $mail->close();
   
   print($content);
}
 
# ################################################################
# exit
# ################################################################
 
exit;

Dieser Artikel hat Dir deinen Tag gerettet?

... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? Oder einfach nur Dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Anerkennung honorierst:

Zahlung mit PayPal oder Kreditkarte.

Hinweis zur Verwendung

Die Übermittlung einer Zahlung ist eine persönliche Anerkennung Ihrerseits an den Entwickler (Christian Bartl, Privatperson). Eine Zahlung ist nicht zweckgebunden und es ist keine Gegenleistung zu erwarten. Bitte beachten Sie, dass für eine übermittelte Zahlung keine Quittung ausgestellt werden kann.

Über den Autor

Christian Bartl

Christian Bartl Requirements Engineer
& Solution Architect für Online und Mobile

Als Technologie-Enthusiast und begeisterter Programmierer entwickle ich in meiner Freizeit Websites, Software und IT-Lösungen, die mir selbst und anderen den Alltag vereinfachen.

mehr auf christian.bartl.me

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste! - Ich freue mich über deine Anmerkung, Kritik oder Frage.

Kommentar schreiben

Der hier angegebene Name wird gemeinsam mit deinem Kommentar auf der Website veröffentlicht.

Deine E-Mail-Adresse wird zur einmaligen Benachrichtigung bei Veröffentlichung des Kommentars genutzt.

Benachrichtigung per E-Mail über Antworten auf meinen Kommentar erhalten.

Bitte tippe die Zahlenkombination "7616" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.