Seite wählen

Azubis erzählen: Juli 2015 Jean

von | Jul 13, 2015 | Development, Icinga

Name: Jean-Marcel Fach
Ausbildungsberuf: Fachinformatiker für Anwendungsentwicklung
Abteilung: Icinga2 core development
Lehrjahr: 1

Nach einer längeren Berufsschul- und Urlaubsphase kam ich wieder in Firma, dort liefen schon die Vorbereitungen für Icinga 2.4. Nach einem ein-wöchigem Workshop war grob umrissen wie der Arbeitsplan für die nächsten paar Monate aussieht. Als erster Meilenstein gilt der HTTP Server, welcher Anfragen dieses Schemas entgegennimmt und antwortet. Einen Teil der Information machen die URLs auf die der Server angesprochen wird aus, für diese einen Parser zu schreiben wurde meine Aufgabe.
Nun sind *normale* URLs wie “https://www.netways.de/” allen bekannt und jedem der mal genauer hin geschaut hat wird aufgefallen sein, dass sich bei allen Seiten im Internet ein Muster erkennen lässt. Dieses URL-Muster wurde zuerst im RFC 1738 und später im RFC 3986 genauer beschrieben, diese 60 Seiten Dokument lassen sich grob so zusammenfassen: Das Muster einer URL ist immer `Schema:Autorität/Pfad?Anfrage#Fragment`. Nun haben die einzelnen URL-Teile wieder eigene Regeln. Etwa bedeutet ein ‘//’ in der Autorität, dass ein Hostname zu erwarten ist. Oder ein ‘gopher’ als Schema ändert nochmal mehr. Es ergeben sich so eine Reihe von URLs die gültig aussehen, es aber nicht sind und anders herum, aber dazu später mehr.
Im Bezug auf die Implementation, dachte ich zuerst an eine Zustandsmaschine: aus dem vorherigen Zeichen ergibt sich, wie das nächste zu verstehen ist. Leider konnte ich mich mit keiner Implementation in c++ so richtig anfreunden. Ein riesiges switch-case Konstrukt fällt aus da es eben riesig und daher unübersichtlich und hässlich würde. Und die Alternative mit Objekten schien zu dieser Zeit den Rahmen zu sprengen, würde mir aber dieselbe Aufgabe noch einmal gestellt werden, würde ich aber diesen Weg wählen. So fiel die Wahl am Ende, nach all dem Rumprobieren, doch auf eine sequentielle Abarbeitung der fünf Teile. Da die URLs nur http oder https sein werden, konnten viele Probleme umgangen werden.
URL tests
Die tatsächliche Implementation war dann relativ einfach, doch dann kamen die Randfälle. “/” ist gültig und “/??[]=?#?=@” auch, wenn sie auch unsinnig sind. Daher mussten Tests geschrieben werden. Und dann wurde so lange geschraubt, bis alle Tests erfolgreich durchgeführt wurden.
Der Code findet sich wie immer im Icinga 2 git.

Mehr Beiträge zum Thema Development | Icinga

Ansible – Loop over multiple tasks

The last time I wrote about Ansible and the possibility to use blocks to group multiple tasks. Which you can read here. Sadly this feature does not work with loop, so there is no clean way to loop over multiple tasks in a play without writing the same loop statement...

Mein erstes Icinga Web 2 Modul

Im Laufe meiner Ausbildung habe ich nun ein PHP Projekt bekommen. Ich soll ein Modul für unser heiß begehrtes Icinga Web 2 schreiben. Thema des Modules, ist die Darstellung deiner aktuellen System und Icinga 2 Daten. Von Zonen bis Firewall eine komplette Übersicht....

User aus LDAP in Icinga Director Importieren

Ich hatte das Vergnügen mich etwas mit dem Icinga Director zu beschäftigen dabei war eine der Aufgabenstellungen die User aus unserem LDAP in den Director zu Importieren. Im Folgenden werde ich erläutern, welche Schritte notwendig sind, um dies zu tun. Dabei ist zu...

Benachrichtigungen mit Icinga 2 mal anders

Vor Kurzem stand ich im Rahmen eines Kundentermins vor der Anforderung noch die Benachrichtigungen für das Icinga 2 Setup umzusetzen. "Soweit kein Problem" dachte ich mir, allerdings war die genaue Anforderung dann doch etwas speziell: Sowohl bei Hosts als auch bei...

Veranstaltungen

Dez 01

Icinga 2 Fundamentals Training | Online

Dezember 1 @ 09:00 - Dezember 4 @ 17:00
Dez 03

DevOps Meetup

Dezember 3 @ 17:30 - 20:30
Dez 08

Terraform mit OpenStack Training | Online

Dezember 8 @ 09:00 - Dezember 9 @ 17:00
Dez 08

Icinga 2 Advanced Training | Online

Dezember 8 @ 09:00 - Dezember 10 @ 17:00
Dez 15

GitLab Training | Online

Dezember 15 @ 09:00 - Dezember 16 @ 17:00