J’ai un problème d’affichage sur le dashboard ci-dessous qui revient régulièrement quand je passe par Gladys Plus. Je pensais d’abord que ça arrivait lorsque le Raspberry ne rebootait pas pendant plusieurs semaines. J’ai donc planifié un reboot hebdo mais c’est rapidement revenu. Mon autre hypothèse serait la lenteur de ma connexion internet. Est-ce que d’autres utilisateurs auraient ce problème ?
Les deux box à droite sont censées afficher mes caméras. L’image finit par arriver quelques dizaines de secondes plus tard mais le message d’erreur reste présent.
Hello @Mastho, étrange tout ça ! Effectivement peut-être un problème de connexion internet, mais par forcément.
Pour comprendre mieux ton problème:
Tu as quel raspberry Pi ? Branché sur une micro-SD performante (ou pas?)
Est-ce que tu pourrais nous poster un speedtest ici (côté Raspberry Pi chez toi ET côté machine ou tu utilise Gladys Plus) ?
Tu as combien de caméra sur ton installation ? Est-ce que tu as l’impression que ton Pi en local est « sous pression » ou est-ce qu’il n’est pas trop sollicité ? Quelle fréquence de rafraichissement des caméras as-tu mis ?
On va débugguer ça ensemble jusqu’à ce qu’on comprenne Si tu as des dispos on peut aussi s’appeler directement pour voir ensemble en direct.
Je suis sur un 3B+ acheté il y a presque 2 ans avec une micro-SD à 24 Mo/s.
Je ne pense pas que ça soit un problème de performances car en local l’affichage est instantané pour les 4 box que j’utilise actuellement sur le dashboard. J’ai uniquement ces deux caméras avec un refresh chaque minute.
Via Gladys Plus, j’ai le même problème que je sois chez moi ou en 4G depuis mon téléphone. Dans les paramètres de Gladys, j’ai une latence de 66 ms en local et 1500 ms via Gladys Plus.
Je devrais avoir un créneau samedi ou dimanche si t’es dispo aussi.
Ci-dessous le speedtest. Au niveau de la box internet, je suis à 16 Mbit/s en down pour 900 kbit/s en up.
Aïe tu es en ADSL pour ta box internet ? Chez quel opérateur ?
Tu as un débit effectivement assez faible en upload, et un ping vraiment élevé, ce qui explique la lenteur que tu observes, mais ça n’explique pas tout, normalement ça devrait être juste plus lent.
Dispo ce week-end quand tu veux pour regarder ça ensemble.
En fait, le mot « ping » est peut-être mal employé ici, il n’y a pas que du temps réseau ici, mais du temps de processing dans ce calcul.
Ce qui est calculé, c’est le temps entre:
→ Le frontend envoie « ping » au serveur Gladys Plus
→ Gladys Plus envoie « ping » à ton instance Gladys
→ Ton instance Gladys répond « pong » au serveur Gladys Plus
→ Gladys Plus répond « pong » au navigateur
Donc en fait, le « ping » est plus un « ping x4 » ici, sachant qu’à chaque étape il peut y avoir des delay tout bête (ton instance Gladys est sollicité par des capteurs en permanence, donc elle va pas forcément répondre pong directement, etc…).
267ms chez toi, c’est juste excellent pour tout ça
Chez toi tu as 60ms car le ping est juste un « ping » vers ta machine sur le réseau local.
Bon on vient de s’appeler avec @Mastho pour enquêter, ce n’est pas un problème de réseau, mais plutôt un problème local sur son instance Gladys C’est une bonne nouvelle, car le réseau on y peut rien, mais un problème en local ça se débloque !
Ce qui est intéressant, c’est qu’en redémarrant gladys, il n’y avait plus le problème, Gladys Plus fonctionnait sans soucis.
Le fait qu’on utilise une transaction peut créer un deadlock, et je me demande si c’est pas ce qui se passe ici.
A mon avis, la transaction n’a pas forcément de sens ici on peut la faire sauter. Surtout quand Gladys est utilisée sur des micro-SD avec des performances en lecture/écriture plutôt moyenne, une transaction c’est lourd et ça met en queue toutes les autres écritures (SQLite en WAL mode ne supporte qu’une écriture à la fois)
Ok j’ai testé en local, et effectivement j’ai trouvé des soucis avec les transactions qu’on utilise, clairement il y avait des bugs dès qu’il y avait de la concurrence. Je me demande si la version de Sequelize qu’on utilise n’a pas aussi des problèmes là dessus, il va falloir songer à mettre à jour Sequelize…
J’ai fais une PR qui retire ces transactions foireuses + rajoute des tests de concurrences, et là ça passe beaucoup mieux:
@damalgos suite à notre call de ce matin, j’ai enquêté, et tu avais raison 600ms c’est pas normal
Déjà côté Gladys gateway serveur, j’ai fais quelques optimisations, mais qui ne changent pas significativement la donne.
Le vrai problème vient de ce fameux “getUserById” local à Gladys, qui fait un appel DB pour chaque requête, et qui peut entrainer des blocages de la DB. J’ai remarqué des blocages de 700ms en local chez moi, malgré le fait que je suis sur un Mac avec un SSD du futur…
Cette requête DB n’est pas nécessaire, en remplaçant par un appel en RAM (grâce au “stateManager”), je tombe à 55ms, c’est bien meilleur, et ça correspond plus à ce qu’on attend d’une requête.