Sys_Ping erweitern um Ping-Anzahl und "Erfolgs-Rate"

Hi!

Ich hätte da mal folgende Wünsche zur Verbesserung/Erweiterung von Sys_Ping :slight_smile:

1.) Die Möglichkeit eine Anzahl mitzugeben
>> Sys_Ping($ip, $timeout, $count)

Und passend dazu:
2.) Die Möglichkeit bei der Anzahl mitgeben zu können, wie viele „ok“ sein müssen, damit der Sys_Ping Befehl als TRUE gewertet wird
>> Sys_Ping($ip, $timeout, $count, $successrate)

Beispiel:
Sys_Ping(„192.168.2.1“, 3000, 5, 4)
In diesem Fall würde IPS die IP „192.168.2.1“ genau 5x anpingen

  • und wenn 4 Pings ok waren ein TRUE zurückgeben
  • und wenn nur 3 Pings ok waren ein FALSE zurückgeben

Warum braucht man das?
Weil immer mal ein Ping verloren geht :smiley: In allen mir bekannten Monitoring-Programmen ist so eine Einstellung möglich, weil es halt wirklich so ist, dass immer mal ein Ping verloren gehen kann - was aber nicht schlimm ist, so lange es z.B. nur 1 von 5 ist.
Aktuell der Fall bei der neuen USV - die immer mal einen Ping verschluckt :rolleyes:

Viele Grüße,
Chris

Ich habe ein Modul geschrieben was Geräte so ähnlich prüfen kann.
GitHub - timo-u/Symcon_Networking: IP-Symcon Modul mit Netzwerk-Funktionen zur Überwachung von Verfügbarkeiten

Die Doku fehlt noch bisschen :wink:

Danke für den Tipp! :slight_smile:

Klar kann man es so „umgehen“ wie du es in deinem Modul machst - aber „nativ“ im IPS wäre halt schon schön(er) :wink:

Viele Grüße,
Chris

Hier noch zur Veranschaulichung die Funktion die ich aktuell als „Workaround“ verwende:

function Ping_Check($host, $timeout, $count, $successRate)
{
	$successCount = 0;
	for ($i = 1; $i <= $count; $i++) {
		if (@Sys_Ping($host, $timeout) === true) {
			$successCount++;
		}
	}
	
	if ($successCount >= $successRate) {
		return true;
	}

	return false;
}

Ping_Check(„192.168.2.1“, 1000, 10, 7);
>> In diesem Beispiel müssten 7 von 10 Pings erfolgreich sein, damit die Funktion ein TRUE zurückliefert. Würden nur 6 Pings erfolgreich sein, würde FALSE zurückgegeben.

Sowas halt direkt bei „Sys_Ping“ mit einbauen wäre schön :slight_smile: 2 weitere (optionale) Parameter halten alles weiterhin abwärts kompatibel und lässt sich bestimmt easy ins IPS einbauen :slight_smile:

-Chris-

Problem daran ist, dass das Script halt unter Umständen sehr lange läuft. Deswegen frage ich weiterhin kontinuierlich im Intervall ab und „zähle“ einfach die Anzahl an Versuchen.

Bei 10 Pings mit einem Timeout von 1000ms läuft das Skript (bzw. der Abschnitt) maximal ~10 Sekunden. Das kann man sich ja mittels Timeout und Ping-Anzahl nach belieben einstellen/anpassen, so dass das Skript nicht ewig braucht oder aufgehalten wird.

Im LAN kann man z.B. einen Timeout von 100ms verwenden, wählt eine Anzahl von z.B. 5 Pings, von denen z.B. 3 erfolgreich sein müssen. Damit hätte man bei 0 erfolgreichen Pings etwa 500ms „Verzögerung“.

-Chris-

Bei einem Gerät funktioniert das ganz gut, wenn Du mehrere Geräte anpingen willst, ist auf Linux-Geräten folgender Befehl sehr effizient

$Erg = shell_exec('for i in IPa IPb IPc IPd IPe;do (ping $i -c 1 -w 1 >/dev/null && echo "$i" &) ;done');

Viele Grüße
Jürgen

Auch ein interessanter Ansatz :slight_smile: Danke für den Tipp!

Viele Grüße,
Chris