Manchmal findet man Programmcode,er einfach preisverdächtig ist. Dieses Fundstück ist ein Fall für die Kategorie: „Grausam verschachtelstes Stück Software, das trotzdem annäherend tut was es soll.“
Ich arbeite im Moment mit einer älteren Version von Nagios, installiert ist auch ein extra Configuration-Layer namens Nconf, welches die Arbeit damit erträglich macht. Interessant, dieses Script zum Generieren der Konfiguration:
./generate_config.php:
Inline-PHP (böse), welches über eine AJAX-Schnittstelle ein weiteres PHP-Script aufruft:
exec_generate_config.php
Im Anschluss wird die Datenbankverbindung (welche Datenbankverbindung eigentlich?) gekappt.
./include/ajax/exec_generate_config.php
Dieses (inline-PHP) Script überprüft ob alle (sechs) benötigten Ordner existieren und schreibbar sind. Dann holt es alle Daten aus einer Datenbank und versucht die Nagios-Konfiguration zu schreiben. Indem es inline ein Perlscript aufruft:
./bin/generate_config.pl
Danach packt es die (hoffentlich generierte) Konfiguration in einen Tarball – mittels system()-call erstellt, komprimiert das ganze (wieder system()) und ruft die Nagios-eigenen Test-Routinen per exec() auf. Das Ergebnis wird mit ein paar regulären Ausdrücken grob überprüft, und die Konfiguration dann mittels system(„mv …“) deployed. Die Ergebnisse von ./include/ajax/exec_generate_config.php werden dynamisch mit PHP als Tabelle generiert und mit AJAX live zum Browser übertragen. Die Ausgabe der Überprüfungsroutinen wird mittels dynamisch generiertem Java-Script (im Inline-PHP, mit AJAX) aufbereitet.
./bin/generate_config.pl
Dieses Perlscript ruft einige Logging-Funktionen auf, entpackt den vom aufrufendem Script kopierten Tarball (bevor dieser kopiert wurde! Deshalb muss man das Script auch zweimal ausführen), und startet mittels system(sudo service restart) nebenbei den Nagios-Dienst neu. Ursprünglich hat es noch ein Shellscript aufgerufen, das das erledigt hat. Das habe ich erstmal gestrichen und in das Perlscript eingearbeitet.
Momentan überlege ich ob ich den ganzen Kram i.O. bringen, oder es einfach wegwerfen soll.