NEWS
Skript zur Prüfung der Erreichbarkeit eines Dienst per Telnet (Port 80)
-
Beispiel:
Ist der Webserver von forum.iobroker.net erreichbar?
! ````
// Überwacht eine Adresse (FQDN oder IP) auf Erreichbarkeit eines Ports
// z.B. Port 80 für einen Webserver
! var pfad = "Service.www.ioBroker_Forum" + ".";
var cronStr = "*/10 * * * *";
var webserver = "forum.iobroker.net";
var port = "80";
! var logging = false;
! var abfrage = "telnet "+ webserver + " " + port;
var forceCreation = false;
! var datenpunkte = {
'status': {
"init":false,
"common": {
name: 'status ' + webserver,
desc: 'status ' + webserver + '. Port ' + port + ' erreichbar?',
type: 'boolean',
unit: '',
role: 'value'
}
}
};
! function createDp() {
var name;
var init;
var common;
for (var dp in datenpunkte) {
name = pfad + dp;
init = datenpunkte[dp].init;
common = datenpunkte[dp].common;
createState(name, init , forceCreation, common);
}
}
! function fehler() {
if (logging)log(webserver + ": Webseite nicht erreichbar","warn");
setState(pfad + "status",false);
}
! function keinFehler() {
if (logging)log(webserver + ": Webserver auf Port 80 erreichbar","info");
setState(pfad + "status",true);
}
! function getStatusPort() {
exec(abfrage, function(err, stdout, stderr) {
if (err) {
if (logging) log("err: " + err);
if (logging) log("stderr: " + stderr);
if (stderr.indexOf("Connection closed by foreign host").toString() != -1) {
keinFehler();
return;
}
fehler();
return;
}
! if (logging) log("stdout:" + stdout);
keinFehler();
});
}
! //
on({id:"javascript."+instance+"."+pfad+"status",change:'ne'}, function (obj) {if(obj.state.val) { //sayit("Webseite iobroker Forum ist erreichbar"); //event("Webseite iobroker Forum ist erreichbar"); } else { //sayit("Webseite iobroker Forum ist nicht erreichbar"); //event("Webseite iobroker Forum ist **nicht** erreichbar"); }
});
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, getStatusPort);
! // main
// -----------------------------------------------------------------------------
function main() {
getStatusPort();
}
! // Start Skript:
// -----------------------------------------------------------------------------
! createDp();
setTimeout(main, 500);
! ````Das Skript kontrolliert, ob ein Server auf Port 80 antwortet.
Die auskommentierten Funktionen sankt() und event() sind globale Funktionen, die ich für Ansagen und das Speichern von Ereignissen in eine Ereignisliste verwende.
Gestern beim Ausfall vom Forum war der Server per Ping erreichbar, per Port 80 aber nicht.
In den späteren Abendstunden war dann Port 80 verfügbar, allerdings nicht das Forum, sondern nur die Willkommensseite des Webservers. Diesen Unterschied überwacht das Skript nicht.
Um Mitternacht wurde am Webserver gearbeitet und seit Mitternacht ist das Forum wieder erreichbar:
… kleiner Spaß zum verspäteten Start des Forums ins Wochenende... :lol:
-
LOL, schöne Idee.
-
Beispiel:
Ist der Webserver von forum.iobroker.net erreichbar?
! ````
// Überwacht eine Adresse (FQDN oder IP) auf Erreichbarkeit eines Ports
// z.B. Port 80 für einen Webserver
! var pfad = "Service.www.ioBroker_Forum" + ".";
var cronStr = "*/10 * * * *";
var webserver = "forum.iobroker.net";
var port = "80";
! var logging = false;
! var abfrage = "telnet "+ webserver + " " + port;
var forceCreation = false;
! var datenpunkte = {
'status': {
"init":false,
"common": {
name: 'status ' + webserver,
desc: 'status ' + webserver + '. Port ' + port + ' erreichbar?',
type: 'boolean',
unit: '',
role: 'value'
}
}
};
! function createDp() {
var name;
var init;
var common;
for (var dp in datenpunkte) {
name = pfad + dp;
init = datenpunkte[dp].init;
common = datenpunkte[dp].common;
createState(name, init , forceCreation, common);
}
}
! function fehler() {
if (logging)log(webserver + ": Webseite nicht erreichbar","warn");
setState(pfad + "status",false);
}
! function keinFehler() {
if (logging)log(webserver + ": Webserver auf Port 80 erreichbar","info");
setState(pfad + "status",true);
}
! function getStatusPort() {
exec(abfrage, function(err, stdout, stderr) {
if (err) {
if (logging) log("err: " + err);
if (logging) log("stderr: " + stderr);
if (stderr.indexOf("Connection closed by foreign host").toString() != -1) {
keinFehler();
return;
}
fehler();
return;
}
! if (logging) log("stdout:" + stdout);
keinFehler();
});
}
! //
on({id:"javascript."+instance+"."+pfad+"status",change:'ne'}, function (obj) {if(obj.state.val) { //sayit("Webseite iobroker Forum ist erreichbar"); //event("Webseite iobroker Forum ist erreichbar"); } else { //sayit("Webseite iobroker Forum ist nicht erreichbar"); //event("Webseite iobroker Forum ist **nicht** erreichbar"); }
});
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, getStatusPort);
! // main
// -----------------------------------------------------------------------------
function main() {
getStatusPort();
}
! // Start Skript:
// -----------------------------------------------------------------------------
! createDp();
setTimeout(main, 500);
! ````Das Skript kontrolliert, ob ein Server auf Port 80 antwortet.
Die auskommentierten Funktionen sankt() und event() sind globale Funktionen, die ich für Ansagen und das Speichern von Ereignissen in eine Ereignisliste verwende.
Gestern beim Ausfall vom Forum war der Server per Ping erreichbar, per Port 80 aber nicht.
In den späteren Abendstunden war dann Port 80 verfügbar, allerdings nicht das Forum, sondern nur die Willkommensseite des Webservers. Diesen Unterschied überwacht das Skript nicht.
Dienst Forum Port 80.jpg
Um Mitternacht wurde am Webserver gearbeitet und seit Mitternacht ist das Forum wieder erreichbar:
Forum Eventlist.jpg
… kleiner Spaß zum verspäteten Start des Forums ins Wochenende... :lol: `
Hallo ruhr70
Wie erstellst du eigentlich diese Eventliste? Sowas hätte ich auch gern…
Danke und Gruß
Adrian
-
Hallo ruhr70
Wie erstellst du eigentlich diese Eventliste? Sowas hätte ich auch gern…
Danke und Gruß
Adrian `
Ich habe Skript laufen, welches einen Datenpunkt überwacht. Wenn sich bei dem Datenpunkt etwas ändert, wird die Eventliste den Inhalt des Datenpunks um einen Eintrag erweitert.
Skript und Beschreibung, siehe:
http://forum.iobroker.net/viewtopic.php … ent#p39480
Dazu gibt es dann ein globales "Skript" event(), damit aus jedem beliebigen Skript ein Ereignis erzeugt werden kann.
Das globale "Skript":
function event(text) { log("Event: " + text); setState("javascript.0.Ereignisliste.event",text); }
Wenn man nun in einem Skript
event("ein **neuer** Tag beginnt");
schreibt, wird die Ereignisliste um den Eintrag
05.12. 17:42 ein neuer Tag beginnt
erweitert.
Man könnte auch mehrere Listen beschreiben. Dann brächte man für jede Liste ein Event-Skript und die globale event() Funktion müsste so erweitert werden, dass man auswählen kann, welche Liste gemeint ist, z.B.:
event("Eintrag in die Hauptliste (Default"); event("Eintrag in Liste 1",1); event("Eintrag in Liste Systemereignisse","Systemevents");
Das muss dann halt angepasst werden.