Mittwoch, 14. September 2016

Robust Code: Update von Daten mittels Switch

Stell dir vor du downloadest regelmäßig eine Datei, die du danach weiter verarbeitest. Hier zur Illustration als Bash:

curl -sS "http://eber-p.com/report.csv" | wc -l

Wenn jetzt der Download aus irgend einem Grund fehlschlägt, dann bricht die Datenverarbeitung ab. Dein Service liefert keine Ergebnis mehr. Hier pflanzt sich ein Fehler durch mehrere Systeme fort. Das kann gewollt sein, meistens möchte man aber eine robuste Lösung die nicht bei jedem Downloadfehler zusammenbricht. Dies kann man erreichen, in dem man die alte Datei nicht überschreibt, sondern als Fall Back behält und sie ggf. erst nach einem erfolgreichen Download überschreibt.

wget "http://eber-p.com/report.csv" 
r=`ls -t report.csv* | head -n 1`
cat $r | wc -l   


Wichtig ist nur, dass man die Benutzung des Fall Backs dokumentiert, im Log File und oder in der Antwort des Services. Letztere wird hier nicht gemacht.

Kurz zusammengefasst die robuste Softwarelösung:

  1. Lose Kopplung von Programmteilen die unterschiedliche Funktionen hat, hier Datenbeschaffung und Logik (hier zählen der Zeilen des Reports). 
  2. Puffern von alten Daten und Nutzung von diesen Daten als Fallback.

Zum Thema hier noch ein passender Link. Dort wird diese Problematik unter dem Begriff Be Atomic beschrieben.

Hier das ganze Beispiel-Skript:
#! /bin/sh

echo "Test with right URL"
u="http://ebert-p.com/report.csv"

echo "Non robust code"
curl -sS  $u | wc -l

echo "Robust code"
wget -q -a log.log  $u
r=`ls -t report.csv* | head -n 1`
cat $r | wc -l         


echo "Test with wrong URL"
u="http://ebert-p.com/report_wrong.csv"

echo "Non robust code"
curl -sS  $u | wc -l

echo "Robust code"
wget -q -a log.log  $u
r=`ls -t report.csv* | head -n 1`
cat $r | wc -l   

Und die Konsolen Ausgabe:
Test with right URL
Non robust code
    1518
Robust code
    1518
Test with wrong URL
Non robust code
      24
Robust code
    1518

Keine Kommentare:

Kommentar veröffentlichen