• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

Auslesen/Editieren von Textfiles via Webseite mit Formular

as69

Member
Registriert
5 August 2003
Beiträge
390
Punkte Reaktionen
1
Hallo,
hoffe der Thread ist im richtigen Forum ^^

Zu Test-/Lernzwecken habe ich auf meinem Rechner eine Netzwerkmonitoring Software (Nagios) innerhalb einer VM installiert. Damit "überwache" ich Router, die ich in einer anderen Virtualisierungssoftware gestartet habe (GNS3). Das funktioniert auch soweit.

Nagios besitzt nun diverse Konfig-Files, mit denen einzelne Hosts (also zu überwachende Geräte) definiert werden. Man kann das wohl innerhalb einer großen Datei machen oder für jeden einzelnen Host eine einzelne Datei erstellen.

Nun juckt mich der Forschungsdrang und ich sehe endlich eine Aufgabe, mit der ich Perl/PHP lernen könnte :clown:

Ich möchte gerne folgendes erreichen:
- Erstellen einer Webseite, auf der man per Formular weitere Geräte hinzufügen kann (=> neue xyz.cfg erzeugen innerhalb des /etc/nagios3/objects Ordners)
- Das Formular soll eine vordefinierte Eingabemaske haben
- Schön wäre auch, bestimmte Parameter zu überprüfen (z.b. ob eine Datei mit dem Hostnamen bereits existiert) und bei Fehler (=vorhandensein des Parameters) eine Warnmeldung ausgibt und NICHTS weiter macht
- Den Service muß man leider nach einer Konfigänderung neustarten, daher möchte ich mir noch einen "Button" bauen, mit dem ich einen bestimmten Shell-Befehl ausführen kann ("service nagios3 restart")

Wie fange ich am besten an? Womit realisiert man so etwas? Meine bisherige Erfahrung mit Programmierung hält sich sehr in Grenzen, aber ich glaube mit Perl und PHP müsste sowas möglich sein - nur wo fange ich an und in welche Themengebiete muß man sich da reinlesen??? Bin da etwas jungfräulich...

Im Spoiler habe ich mal so ein Textfile angehängt wie ich es mir vorstelle.
Vorne steht jeweils die Variable, dahinter der Wert. Das ganze hat einen Aufbau wie

Code:
define host
{
<variable> <wert>
<variable> <wert>
<variable> <wert>
}

Code:
# Specific File for Device
## EXAMPLE:
#define host{
#
#	host_name			bogus-router
#	alias				Bogus Router #1
#	address				192.168.1.254
#	parents				server-backbone
#	check_command			check-host-alive
#	check_interval			5
#	retry_interval			1
#	max_check_attempts		5
#	check_period			24x7
#	process_perf_data		0
#	retain_nonstatus_information	0
#	contact_groups			router-admins
#	notification_interval		30
#	notification_period		24x7
#	notification_options		d,u,r
#
#	}	
	
	
define host{
			host_name	R2
			alias	R2
			#display_name	display_name
			address	192.168.1.252
			#parents	host_names
			hostgroups	GNS3_Routers
			check_command	check-host-alive
			#initial_state	[o,d,u]
			max_check_attempts	5
			check_interval	1
			retry_interval	3
			active_checks_enabled	1
			passive_checks_enabled	1
			check_period	24x7
			#obsess_over_host	[0/1]
			#check_freshness	[0/1]
			#freshness_threshold	#
			#event_handler	command_name
			#event_handler_enabled	[0/1]
			#low_flap_threshold	#
			#high_flap_threshold	#
			#flap_detection_enabled	[0/1]
			#flap_detection_options	[o,d,u]
			#process_perf_data	[0/1]
			#retain_status_information	[0/1]
			#retain_nonstatus_information	[0/1]
			#contacts	contacts
			contact_groups	netzadmins
			notification_interval	30
			#first_notification_delay	#
			notification_period	24x7
			#notification_options	d,u,r
			notifications_enabled	1
			#stalking_options	[o,d,u]
			#notes	note_string
			#notes_url	url
			#action_url	url
			#icon_image	image_file
			#icon_image_alt	alt_string
			#vrml_image	image_file
			#statusmap_image	image_file
			#2d_coords	x_coord,y_coord
			#3d_coords	x_coord,y_coord,z_coord
   	}

Manche Parameter referenzieren dann auf andere Files, wie z.b.
Code:
hostgroups	GNS3_Routers
- hier würde ich dann gerne den Sicherungsmechanismus einbauen, der ein globales Files ausliest, ob diese Variable bereits definiert ist.

Wie stelle ich sicher, daß das File, das über die WebGui erzeugt wird, auch die richtige Berechtigung hat (user:group, permissions)? Geht das?

Würde mich freuen, wenn hier jemand ist der mir ein bisschen auf die Sprünge helfen kann (wo fange ich an, wo muß ich mich einlesen (php/perl), welche funktionen brauch ich, usw...;)

mfg
 
Hallo!

Du hast jetzt nichts über deine HTML-Kenntnisse geschrieben, daher weiß ich nicht, ob dieses Thema für dich ebenfalls eher neu ist. Denn genau damit würde ich anfangen: Aufbau des Formulars. Überleg dir, welche Formular-Komponenten du brauchst. Im Grunde benötigst du eine Menge Textfelder, in die du deine Werte eintragen kannst. Am Ende ein Button, der ein PHP-Skript startet, das dann die Werte zu einem Config-File zusammenbaut, es speichert und Nagios neustartet.

Die Grundlage für dein Projekt ist das HTML-Formular:
SELFHTML: HTML / Formulare

Für PHP-Tutorials kann ich Tizag Tutorials empfehlen. Ein Tutorial über das Erstellen von Dateien per PHP ist auch dabei. Die Berechtigungen werden auch erwähnt, Stichwörter chmod und chown. Für den Neustart des Service kannst du dir die Funktion exec mal anschauen.

Viel Erfolg!
 
Quakenet/#php Tutorial - de - Einleitung
Das mMn schönste und effektivste Schnell-Tutorial für Leute, die noch keine grundlegende Programmiererfahrung haben. Du wirst dabei nicht alles machen müssen, bis "Formulare" (+ "Funktionen" weiter unten) dürfte dir einen ausreichend guten Überblick bieten, mehr schadet natürlich nicht.
 
Wie du hier siehst sind alle Funktionen vorhanden, die du für dein Vorhaben brauchst:

- file_exists
- fopen
- fwrite
- fclose

Neue Config Dateien zu erstellen und zu speichern ist ziemlich einfach. Je komplizierter du die Sache machen willst, z.B. durch Checks der Config Logik (bei referenzierten Dateien), desto mehr müsstest du dich in die Programmierung einarbeiten.
Wenn du eine hübsche und funktionsreiche Weboberfläche machen willst, solltest du dich zusätzlich in jQuery und CSS einlesen.
 
@pnd:
SelfHTML kenne ich schon sehr gut - gibts ja auch schon ne Weile ;)
Ich habe früher mal aus Spaß (so vor ca. 8-12 Jahren) ab und an mal rein statische Webseiten im Privatumfeld gemacht.
Grundkenntnisse HTML sind schon vorhanden, müssen aber aufgefrischt werden bzw. SelfHTML ist natürlich als Referentbiblothek immer nebenbei offen ;)

Die Tizag Seite hat mir ach schon etwas geholfen, da gabs sogar n ziemlich einfaches Beispiel wie man eine Formularseite mit all ihren Funktionen baut.
Habe da schonmal das Grundgerüst damit gemacht. Nun müssen halt noch FUnktionen dahinter :D


@nay:
Jo super - kurz und knackig n paar Hinweise womit man sich beschäftigen muß bzw. reinlesen.
Diese 4 lesen sich, als ob die genau das sind, was ich brauche :D (checken ob FIle schon vorhanden, falls nein neues erstellen, ggf. vorhandnes auslesen, speichern usw..)
Ne Logik soll früher oder später schon rein (z.b. einlesen/öffnen vorhandener Konfig Dateien und editieren dieser) - aber erstmal klein anfangen.

@Aragon:
Werde da mal reinlesen.

Danke schonmal für eure Hilfe. Werde mich jetzt erstmal in den virtuellen Keller zurückziehen und learning by doing betreiben.
Kann sein daß ich dann immer wieder mal ganz dumme Fragen stelle :D
Achja, und hübsch muß das Dingend wirklich nicht sein. Web2.0 kann mich mal :D
Wenn ich gaaaanz viel Bock habe, wirds nen schwarzen Hintergrund mit grüner Schrift geben und das ganze in Courier Schriftart only :p .
 
Zuletzt bearbeitet:
Sollte dieses Webformular auch nur die Chance besitzen, irgendwie irgendwo von anderen Rechnern zugänglich zu sein, ist eine sehr gründliche Prüfung der Rechte des Benutzers sowie aller Eingabefelder nötig. Neue Dateien auf einem Rechner abzulegen und Scripte starten ist so ziemlich die gefährlichsten Dinge, die man machen kann ;).
 
Zurück
Oben