[Modul] Internet-Bandbreite überwachen

Morgen. Und übrigends Danke fürs Modul!!!
Fehlermeldung kommt bei jedem ausgewählten Server…
Aber es funktioniert trotzdem…
Lg

Hallo,

sorry, das ich mir das jetzt erst anschauen konnte. Ich hatte vor längerer Zeit auf ‚strict_types=1‘ umgestellt (striktes Typ-Checking in PHP).
Und da gibt es kein implizites Umwanden von string zu int mehr

Fix ist im GitHub und als Beta im Modulstore.

demel

Das ändert jetzt aber nix am Problem selber

Das Problem ist der dynamische Aufbau beim Laden des Formulars!


            $options[] = ['label' => $this->Translate('automatically select'), 'value' => 0];
            $data = exec('speedtest-cli --list 2>&1', $output, $exitcode);
            $n = 0;
            foreach ($output as $line) {
                if (preg_match('/[ ]*([0-9]*)\)\s([^[]*)/', $line, $r)) {
                    if ($r[1] > 0) {
                        $options[] = ['label' => $r[2], 'value' => (int) $r[1]];
                        if ($n++ == 100) {
                            break;
                        }
                    }
                }
            }

Was passiert, wenn $exitcode != 0, oder $output nicht enthält was Du erwartest?

Beispiel:
Der „ausgewählte“ Server hat die ID 1234567890, diese ist im Property „preferred_server“ gespeichert.
Man öffnet die Instanz, dabei wird die Auswahlliste neu generiert.

Jetzt gibt es den Server mit der ID 1234567890 aber nicht mehr und somit … wird genau das angezeigt.
Nämlich Aktueller Wert 1234567890 ist nicht verfügbar

Kannst Du ganz einfach testen:
Schnell ein Test Skript ausführen und danach die Instanz öffnen


    IPS_SetProperty($instanceID, "preferred_server", 1234567890);
    IPS_ApplyChanges($instanceID);

Das Problem in meinem Modul zu lösen gab wieder ein paar graue Haare mehr :rolleyes:

Hallo,

ja und nein.

Der Fix löst das Problem, das aufgrund der Umstellung auf ‚strict_types‘ auftritt, da hierdurch die auto. Typeconversion fehlt.
Ja, natürlich kann das passieren, aber die Alternative wäre, das ich in dem Modul eine Liste aller verfügbaren Server führe (zZt knapp 10000) und nicht mir die Liste von dem Anbieter (also speedtest) hole. Ich denke, dafür hat Symcon den dynamischen Aufbau schon vorgesehen …

Wie sollte ich das deiner Meinung nach unter einen Hut bringen?

Natürlich ist das klar, wie man das austricksen kann …

Nun reden wir hier von dem optischen Problem in dem Konfigurationsformular. Egal, wie du es machen willst, das funktionale Problem der Applikation kannst Du nicht beseitigen: egal wie man das macht, den Server festzulegen - wenn der Server nicht mehr existieren sollte, wäre der eigentlich zyklische Aufruf ja fehlerhaft.

Tut mir leid, aber da kann ich dir nicht folgen.

demel

ps: ich weis nicht, m von welchem Modul du redest, was dir graue Haare bereitet hat, von daher kann ich nicht sagen, was du da gemacht hast.

Der Fix löst das Problem, das aufgrund der Umstellung auf ‚strict_types‘ auftritt, da hierdurch die auto. Typeconversion fehlt.
Ja, natürlich kann das passieren, aber die Alternative wäre, das ich in dem Modul eine Liste aller verfügbaren Server führe (zZt knapp 10000) und nicht mir die Liste von dem Anbieter (also speedtest) hole. Ich denke, dafür hat Symcon den dynamischen Aufbau schon vorgesehen …

zu ‚strict_types‘ sag ich ja nix :stuck_out_tongue:
Du musst aber zyklisch prüfen ob die Liste tatsächlich noch aktuell ist!
Dies passiert aber immer nur dann, wenn man die Instanz öffnet …

Nun reden wir hier von dem optischen Problem in dem Konfigurationsformular. Egal, wie du es machen willst, das funktionale Problem der Applikation kannst Du nicht beseitigen: egal wie man das macht, den Server festzulegen - wenn der Server nicht mehr existieren sollte, wäre der eigentlich zyklische Aufruf ja fehlerhaft.

Na dann teste mal den zyklischen Aufruf mit der Server ID 1234567890 …
Die ist ja noch immer im Property „preferred_server“ gespeichert.
Ergebnis:


{"type":"log","timestamp":"2019-12-11T16:17:05Z","message":"Configuration - No servers defined (NoServersException)","level":"error"}

Ich erzähle eine Geschichte :smiley:
Beim letzten Öffnen der Instanz wurde die Liste generiert und es wurde auch der Server mit der ID 1234567890 gefunden und eingetragen. Die mit dieser ID laufen nun usere Speedtests tagelang, wochenlang, monatelang bis bei Speednet einer genau diesen Server löscht!
Wir öffnen aber nicht die Instanz, warum auch, läuft ja seit Monaten ohne Probleme.
Ich bin jetzt nicht der Mensch der 100x am Tag Logfiles und Meldungen überprüft ob das System auch wirklich läuft, also würde ich diesen Fall erst irgendwann mitbekommen :D:banghead:

ps: ich weis nicht, m von welchem Modul du redest, was dir graue Haare bereitet hat, von daher kann ich nicht sagen, was du da gemacht hast.

Ich habe dir deine Idee geklaut und mir mein eigenes Modul für Speednet gebaut, da ich unabhängig von der Installation der speedtest-cli sein wollte. Ich arbeite mit den Binarys von Speednet die liegen mit im Modulordner und fertig. Die gibt es für so gut wie jede Plattform.

PS.: Ich will hier nix kritisieren, ich denke nur wieder zu laut und muss immer alles hinterfragen, sorry - aber :loveips:

warum?

der aufgrund von spendetest-cli liefert ja den Fehler zurück; die Fehler werte ich aus und gebe die sowohl in den Meldungen (als NOTIFY = gelb) aus, zudem aktualisieren ich die Variablen nur, wenn es geklappt hat.
Wenn man eine der Variablen per Watchdog (o.ä.) überwacht, kann man doch erkennen, wenn etwas schief läuft, oder?

Es können ja ausser der falschen Angabe des Servers viele andere Dinge schief gehen, die kann man ja nur bedingt abfangen.
Wenn Du einen speziellen Server auswählst hat das ja einen Grund; wenn der Server nicht mehr zur Verfügung steht kann man ja nicht einfach aus was anderes wechseln …

Was ich noch machen könnte wäre eine Status-Variable zu machen, die auf Alarm geht, wenn der Abruf fehlgeschlagen ist … das macht die Überwachung des Dienstes einfacher …

Meiner Meinung nach doch alle möglichen Dienste/Funktionen laufend per Script überwachen und sich informieren lassen, wenn es harkt.

okidoki

[/QUOTE]

kein Stress, Hinterfragen schaden nicht, man wird schnell betriebsblind

demel

Dafür gibt es den Status der Instanz.
Einfach auf Fehler setzen und fertig.
Die Überwachung kann dann jeder individuell mit dem Event-Control umsetzen.
Michael

Hast recht, ich definier einen aussagekräftigen Status und setze den dann passend

gruß
demel

Das Modul setzt nun bei Fehlern eigenen Status: „unbekannter Server“ (den angegebene Server gibt es nicht mehr) und „Service nicht verfügbar“ (alle anderen Fehler von speedtest)

Ist im GitHub und als Beta im Modulstore.

demel

Servus,

funktioniert perfekt. Sieben befüllte Variablen mit den Infos welche man benötigt.
Im Docker-Image leider nicht (auf anhieb) lauffähig. --> apt update && apt install speedtest-cli
Vielleicht könnte das IPS Team die speedtest-cli mit in das Image nehmen.
Grüße

Hallo demel42,

heute auf die aktuelle IP-Symcon 5.4, Docker, 23.07.2020, a4291b6bfb15 aktualisiert. Danach die speedtest-cli installiert und IPS neugestartet. Erhalte aber nach wie vor folgende Meldung:

Bildschirmfoto 2020-07-31 um 09.27.56.png

Wie bekomme ich das Modul wieder funktionell ohne die Instanz neu anlegen zu müssen?
Könnte man zudem die Meldungen im Statusdialog optional gestalten, so dass diese via Switch ein-/ausschaltbar sind?

Grüße
weazel

Hallo,

ein versuch: irgendetwas in dem Konfigurationsformular ändern, sodaß die Konfiguration abgespeichert werden soll - ändert sich der Status wieder auf aktiv, ist alles i.O.
Wenn nicht bedeutet das, das „speedtest-cli“ nicht im Pfad ist, der von der Symcon-Instanz für ausführbare Programme verendet wird.

Gruß
demel

Das Konfigurationsformular ist eben nicht mehr sichtbar. Der Screenshot zeigt alles was ich sehe. Kann also auch keine Konfigurationen mehr ändern und neu abspeichern. Grüße

ah, richtig. geh mal im Modulstore auf die Beta-Version des Moduls. Das man im Konfigurationsformular gar nichts machen kann, habe ich neulich geändert.

Ich habe allerdings nicht ganz so viel Hoffnung, weil das ApplyChanges() ja auch bei IPS-Start gemacht wird und daher i.O. dem Akt. Stand entsprechen müsste.

Wenn das nichts geholfen hat … wie ist der Pfad zu speedtest-cli?

Gruß
demel

Hi demel42,

danke für den schnellen Fix. Mit der Beta hat’s auf Anhieb funktioniert.

Hier noch als Info, der Pfad zur speedtest-cli im Docker Container:
which speedtest-cli --> /usr/bin/speedtest-cli

Kannst du diese Log-Einträge via Schalter optional mach :slight_smile: hab gerne ein cleanes Log :wink:
31.07.2020, 11:23:33 | Speedtest::PerformTest | server=1338) XXXXXX, duration=22,44, status=ok

Abend demel42,

ich bekomme leider laufend Fehlermeldungen:

und wenn ich die Instanz doppelklicken möchte kommt dies:

das eigentlich täglich…

Danke für deine Hilfe
lg

Hallo,

das (exec() bzw fork() ) sind Aussagen vom Betriebssystem, das es keinen neuen Prozess mehr starten kann. Warum die Resource auf dem System so knapp sind kann ich daraus nicht entnehmen,
Im Konfigurationsformular wird speedtest ebenfalls aufgerufen mit einer Option, damit er die verfügbaren Server auflistet, die dann ja in der Auswahlliste zu sehen sind.

So richtig kann ich einne Zusammenhang mit dem Modul nicht erkennen. Es wird ja nur ein Prozess nach dem anderen gestartet.
Was für ein System nutzt Du?

demle

Guten morgen,

ich nutze einen Raspberry Pi 3B mit 32GB SD Karte. Den Cache habe ich schon einmal erhöht…

Was könnte ich da machen?

Danke und lg
Christian

Hallo,

ich bin mir nicht sicher, welchen Cache Du meinst, sehe aber du auch erstmal keinen nicht Priorität.

Wenn Das ein Raspi ist, kannst Du dich ja auf der Shell anmelden und die Systemresource prüfen bzw wielviel Prozesse so laufen.

Man kann sich mit z.B. „top“ einen ganz guten Überblick verschaffen.

Da das Problem ja nicht immer sondern nur manchmal auftritt, ist im Ruhezustand natürlich nicht unbedingt etwas zu sehen.

Ich würde zuerst vermuten, das das RAM und der Swap-Bereich (hierhin werden Teile des Hauptspeichers ausgelagert) in diesen Situationen nicht ausreicht.

demel

Hi, würde da ein Pi4 mit 4GB Abhilfe schaffen?