auf vielfachen wunsch möchte ich hier gerne eine möglichkeit vorstellen, wie man seine netzwerkkomponenten (wie router, server, usw.) mittels homeputer studio überwachen kann und im fehlerfalle natürlich auch diverse aktionen auslösen kann.
für die rubrik "netzwerk" habe ich bei mir eine eigene visualisierung erstellt, die so aussieht:
hierbei sind die netzwerkzustände (grün, gelb, rot; hier sieht man leider nur grüne, da alles in ordnung ist) jeweils virtuelle objekte, die die zustände "ok", "warnung" oder "fehler" mit entsprechenden icons annehmen können.
im folgenden code-beispiel dreht es sich um das objekt "OBJNetStatObiwan". Obiwan ist ein Server, der die Rollen "Web- und Mail-Server" besitzt. Weiterhin gibt es ein Textobjekt "LOGNetzwerkStatus", wo statusmeldungen nochmal im klartext beinhaltet sind.
das folgende makro "MAKRONetzwerkMonitor1" beinhaltet den code. in diesem makro werden 2 variablen benutzt: errcnt (typ zahl) und prot (typ zeichen). in der variable errcnt wird ein fehler hochgezählt, die die anzahl der "gestörten" protokolle definiert. in der variablen "prot" stehen dann die protokolle, die ein problem haben.
jedes netzwerkobjekt (in unserem beispiel OBJNetStatObiwan) besitzt ebenfalls eine variable errcnt (typ zahl). hier werden die fehler für jede netzwerkkomponente hochgezählt, damit nich gleich beim ersten auftreten eines fehlers (z.b. kurzzeitiges "hängen" eines dienstes) eine aktion (z.b. mail) ausgeführt wird, sonder erst nach wiederholtem auftreten.
aber jetzt gehts zum makro "MAKRONetzwerkMonitor1"
Code: Alles auswählen
<?
$V_MAKRONetzwerkMonitor1_errcnt = 0;
$V_MAKRONetzwerkMonitor1_prot = "";
$s = fsockopen("obiwan.kugelmann.net", 80, $errno, $errstr, 1);
if (!$s) {
$V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/http ";
$V_MAKRONetzwerkMonitor1_errcnt++;
}
else
{
fclose($s);
}
$s = fsockopen("obiwan.kugelmann.net", 25, $errno, $errstr, 1);
if (!$s) {
$V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/smtp ";
$V_MAKRONetzwerkMonitor1_errcnt++;
}
else
{
fclose($s);
}
$s = fsockopen("obiwan.kugelmann.net", 110, $errno, $errstr, 1);
if (!$s) {
$V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/pop3 ";
$V_MAKRONetzwerkMonitor1_errcnt++;
}
else
{
fclose($s);
}
$s = fsockopen("obiwan.kugelmann.net", 3389, $errno, $errstr, 1);
if (!$s) {
$V_MAKRONetzwerkMonitor1_prot = $V_MAKRONetzwerkMonitor1_prot."/rdp ";
$V_MAKRONetzwerkMonitor1_errcnt++;
}
else
{
fclose($s);
}
?>
wenn prot = "" dann
LOGNetzwerkStatus := "Serverstatus:<<<<obiwan.kugelmann.net ist OK"
sonst
LOGNetzwerkStatus := "Serverstatus:<<<<obiwan.kugelmann.net ist fehlerhaft<<Protokoll " + prot + "down"
endewenn
wenn errcnt = 0 dann
OBJNetStatObiwan := "ok"
OBJNetStatObiwan.errcnt := 0
OBJNetStatObiwan.mail := 0
sonst
OBJNetStatObiwan.errcnt := OBJNetStatObiwan.errcnt + 1
endewenn
wenn OBJNetStatObiwan.errcnt >= 2 und errcnt > 0 und errcnt <= 2 dann
OBJNetStatObiwan := "warnung"
** hier ggf. aktionen ausführen für den fall "warnung"
endewenn
wenn OBJNetStatObiwan.errcnt >= 2 und errcnt > 2 dann
OBJnetstatObiwan := "fehler"
** hier ggf. aktionen ausführen für den fall "fehler"
endewenn
im php-teil wird mit fsockopen versucht, eine verbindung zum tcp-port des jeweiligen dienstes herzeustellen (z.b. port 80 für http, port 25 für smtp, port 110 für pop3 und port 3389 für remotedesktop-protokoll). ist dieser verbindungsaufbau erfolgreich, wird die session sofort wieder geschlossen. falls der zielport nicht reagiert, wird der fehlerzähler errcnt hochgezählt, der dann weiter unten ausgewertet wird.
im homeputer-makro-teil wird dann eben genau dieser zähler ausgewertet. hier kann man schwellen festlegen, wieviele errcnt's notwendig sind, um das objekt in den warnzustand oder fehlerzustand zu bringen. dies muss dann wiederum mehrfach erfolgen, bis das netzwerkobjekt diesen zustand annimmt und ggf. weitere aktionen ausgeführt werden.
der rest sollte selbsterklärend sein. falls nicht, einfach fragen stellen ...
viele grüße ...