330 Scripting mit JSON APIs [4 PT]

Posted Almost 2 years ago. Visible to the public.

Bei Automatisierungsaufgaben kannst du dich nicht immer auf fertige Tools verlassen. Häufig musst du eine Schnittstelle zu einem bestehenden System selbst implementieren oder mit APIs sprechen, um eine Automatisierung einzubauen oder Informationen aus einem System zu ziehen. Am häufigsten werden dir hier Systeme mit JSON begegnen.

In diesem Kapitel schreibst du ein Programm um mit einer API zu sprechen und die Daten zu verarbeiten. Mit der Hilfe deines Mentors lernst du dein Programm in sinnvolle Einzelteile aufzuteilen und gut lesbaren und verständlichen Code zu schreiben.

Ziele

  • HTTP mit API Endpoints sprechen
  • Ruby Script Parameter parsen
  • JSON parsen und auswerten
  • Mit den Daten aus dem JSON neue Datenstrukturen schaffen und ausgeben
  • Rubygems verwenden

Inhalte

Für deine Übungsaufgaben wirst du die Wetter API von open-meteo.com Show archive.org snapshot verwenden.

APIs die für die Aufgaben zur Lösung verwendet werden sollen

Hilfe bei den Ruby Implementierungen

Aufgaben

Deine Arbeitsergebnisse sollten in einem Git Repository eingecheckt werden. Bitte erstelle für jeden Arbeitsschritt einen Merge Request und lasse diesen von deinem Mentor reviewen.

Die Ausgaben des Scripts sollten nach Möglichkeit als Tabelle erfolgen.

  1. Deine Aufgabe ist es, ein CLI Tool zu schreiben mit dem einige Wetterstatistiken für Standorte aufgerufen werden können. Da ein Benutzer üblicherweise keine GPS Daten angeben möchte, um einen Standort zu finden, benötigt dein Tool eine Möglichkeit anhand eines Ortsnamen GPS Koordinaten zu ermitteln. Es ist zunächst ausreichend diese vom Programm ausgeben zu lassen. Alternativ zum Ortsnamen können natürlich die GPS Koordinaten auch exakt angegeben werden.

  2. Das CLI Tool soll eine Wettervorhersage für die nächsten 3 Tage ausgeben können. Dabei sollen die Daten Tagesgenau sein (nicht Stundengenau). Interessant für uns ist:

    • maximale Temperatur
    • minimale Temperatur
    • durchschnittliche Temperatur
    • maximale Windgeschwindigkeit
    • maximale Geschwindigkeit der Windböen
    • Menge von Regen, Schnee etc.
  3. Alternativ zur 3-Tages Vorhersage soll es auch die Möglichkeit geben die Wetterdaten der nächsten 12 Stunden anzuzeigen. Dabei sollen die folgenden Daten (mit stündlicher Genauigkeit) ausgegeben werden:

    • Temperatur
    • Regen / Schnee / usw
    • Windgeschwindigkeit
    • Windrichtung (wandle die Angabe von ° in Himmelsrichtungen, wie O oder NW, um)
  4. Füge eine weitere Funktion hinzu, die es erlaubt historische Wetterdaten anzuzeigen. Dabei sollen bei einem Zeitraum von bis zu 24 Stunden stundengenaue Daten zurückgeliefert werden. Ist der Zeitraum länger als 24 Stunden, werden nur noch volle Tage zurück gegeben (aufgerundet). Gibt jemand bei über 24h eine Zeitangabe an, die nicht genau auf volle Tage matched, gibt das Script einen Fehler aus.

    Als erstes soll eine Tabelle mit Durchschnittswerten sowie Maximalwerten von einigen Metriken über den gesamten Zeitraum angezeigt werden. Anschließend die Tabelle(n) die stunden-/tagesgenaue Daten anzeigen.

    • Temperatur (min/max bei Tagesgenau)
    • Windgeschwindigkeiten
    • Niederschlagsmengen
    • Windrichtung (statt eines Durchschnitts bei der stündlichen Angabe, kann man erfassen wie oft die Windrichtungen jeweils aufgetreten sind)
  5. Dein Script benötigt ein neues Feature für einen Modellflugzeug Piloten. Dieser möchte, dass ihm das Script einfach sagen kann ob in den nächsten 6 Stunden gutes Flugwetter herrscht. Beachte, dass dabei die Wetterdaten aus unterschiedlichen Höhen ausgewertet werden müssen. Metriken die geprüft werden sollen:

    • Keine Temperaturen unter 0 Grad Celsius
    • Keine Windgeschwindigkeiten über 30 km/h
    • Kein Regen/Schnee
    • Sichtweite nicht unter 5000m
    • Es muss Tag sein
  6. Dein Programm erhält ein weiteres Feature. Für einen Gärtner soll das Programm regelmäßig in der Früh laufen. Aus Gründen, die nur der Gärtner versteht, verwendet dieser Gitlab Issues um seine TODOs zu tracken. Wenn es am aktuellen Tag keinen oder wenig Niederschlag gibt, soll ein Gitlab Issue erstellt werden, dass dem Gärtner sagt, dass die Pflanzen Wasser brauchen. Das Ticket soll ein Due Date mit dem aktuellen Datum erhalten und dem Gärtner assigned werden. Der Gärtner bist in diesem Fall du. Prüfe anhand der Response ob das Ticket erfolgreich erstellt wurde.

    Beachte, dass in diesem Fall das Script automatisch läuft. Das heißt, dass bei einem Fehler von der API das Programm nicht gleich abbrechen sollte. Stattdessen muss der Fehler abgefangen werden. Wenn der Fehler abgefangen wird, wird ein Ticket erstellt selbst zu prüfen, ob die Pflanzen Wasser brauchen.

Claus-Theodor Riegg
Last edit
11 months ago
Matthias Bruhse
License
Source code in this card is licensed under the MIT License.
Posted by Claus-Theodor Riegg to DevOps Curriculum (2022-06-21 07:57)