Instance Gladys KO

Hello,

Mon instance Gladys était KO ce matin.
Le conteneur Gladys est bien en running mais ne réponds pas sur le port 80.
Tous mes autres conteneurs sur mon mini-pc fonctionnent (node-red, z2m…)
J’ai quelques erreurs dans les logs gladys qui reviennent assez fréquement : sudo docker logs Gladys

2024-04-09T04:50:48+0200 index.js:16 (process.) TypeError: Invalid value « undefined » for header « authorization »
at ClientRequest.setHeader (node:_http_outgoing:651:3

code: ‹ ERR_HTTP_INVALID_HEADER_VALUE ›

J’ai l’impression que c’est depuis un update déclenché par watchtower
sudo docker ps :

« 23 hours ago » correspond bien au moment ou je n’ai plus reçu de notification telegram de Gladys.

Qu’ai-je fait récemment sur Gladys ?
→ J’ai configuré une scène avec une action ‹ Attendre › de 24h (je doute que ça vienne de la)

J’ai bien entendu tenté le restart du conteneur gladys ainsi qu’un reboot de la machine complète mais le problème persiste. Gladys n’est pas accessible depuis d’autres devices.
je peux partager plus de logs si besoin.

Auriez-vous d’autres pistes de debug ? suis-je le seul à avoir ce comportement depuis un update ?

Merci

Salut @qleg !

Tu as le log exhaustif?

L’upgrade de lundi était vraiment mineure, côté backend quasi rien n’a changé… Donc ça m’étonnerait que ce soit le contenu de l’upgrade en lui-même.

Quelques vérifications de routine:

  • Est-ce qu’il reste assez d’espace disque sur ton mini-PC? df -h pour checker en CLI :slight_smile:
  • Est-ce que le mini-PC n’est pas sous l’eau d’une manière ou d’une autre ? htop est pratique pour vérifier ça

Hello,

Oui j’ai checké l’espace disque : pas de souci, il reste bien de la place.
Et le htop est bon aussi, ma machine ne sature pas en ressource.

J’envoie le log complet dès que possible.

Merci

Voici le log complet :

2024-04-09T04:50:48+0200 index.js:15 (process.) unhandledRejection catched: Promise {
TypeError: Invalid value « undefined » for header « authorization »
at ClientRequest.setHeader (node:_http_outgoing:651:3)
at new ClientRequest (node:_http_client:291:14)
at Object.request (node:https:366:10)
at RedirectableRequest._performRequest (/src/server/node_modules/follow-redirects/index.js:284:24)
at new RedirectableRequest (/src/server/node_modules/follow-redirects/index.js:66:8)
at Object.request (/src/server/node_modules/follow-redirects/index.js:523:14)
at dispatchHttpRequest (/src/server/node_modules/@gladysassistant/gladys-gateway-js/node_modules/axios/lib/adapters/http.js:202:25)
at new Promise ()
at httpAdapter (/src/server/node_modules/@gladysassistant/gladys-gateway-js/node_modules/axios/lib/adapters/http.js:46:10)
at dispatchRequest (/src/server/node_modules/@gladysassistant/gladys-gateway-js/node_modules/axios/lib/core/dispatchRequest.js:53:10)
at Axios.request (/src/server/node_modules/@gladysassistant/gladys-gateway-js/node_modules/axios/lib/core/Axios.js:108:15)
at Axios. [as get] (/src/server/node_modules/@gladysassistant/gladys-gateway-js/node_modules/axios/lib/core/Axios.js:129:17)
at Function.wrap [as get] (/src/server/node_modules/@gladysassistant/gladys-gateway-js/node_modules/axios/lib/helpers/bind.js:9:15)
at Object.get (/src/server/node_modules/@gladysassistant/gladys-gateway-js/lib/request.js:86:6)
at GladysGatewayJs.enedisGetDailyConsumption (/src/server/node_modules/@gladysassistant/gladys-gateway-js/index.js:1177:23)
at Gateway.enedisGetDailyConsumption (/src/server/lib/gateway/enedis/gateway.enedisGetDailyConsumption.js:17:56)
at recursiveBatchCall (/src/server/services/enedis/lib/enedis.sync.js:24:37)
at /src/server/services/enedis/lib/enedis.sync.js:92:32
at tryCatcher (/src/server/services/enedis/node_modules/bluebird/js/release/util.js:16:23)
at Object.gotValue (/src/server/services/enedis/node_modules/bluebird/js/release/reduce.js:166:18)
at Object.gotAccum (/src/server/services/enedis/node_modules/bluebird/js/release/reduce.js:155:25)
at Object.tryCatcher (/src/server/services/enedis/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/src/server/services/enedis/node_modules/bluebird/js/release/promise.js:547:31)
at Promise._settlePromise (/src/server/services/enedis/node_modules/bluebird/js/release/promise.js:604:18)
at Promise._settlePromiseCtx (/src/server/services/enedis/node_modules/bluebird/js/release/promise.js:641:10)
at _drainQueueStep (/src/server/services/enedis/node_modules/bluebird/js/release/async.js:97:12)
at _drainQueue (/src/server/services/enedis/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/src/server/services/enedis/node_modules/bluebird/js/release/async.js:102:5)
at Immediate.Async.drainQueues (/src/server/services/enedis/node_modules/bluebird/js/release/async.js:15:14)
at processImmediate (node:internal/timers:476:21) {
code: ‹ ERR_HTTP_INVALID_HEADER_VALUE ›
}

Je ne sais pas si c’est lié à mon crash mais j’essaye de trouver des infos

Au redémarrage du conteneur gladys, ces logs m’interpellent :

2024-04-10T20:40:42+0200 index.js:15 (process.) unhandledRejection catched: Promise {
TypeError: Cannot read properties of undefined (reading ‹ substr ›)
at /src/server/lib/scene/scene.addScene.js:45:47
at Array.forEach ()
at SceneManager.addScene (/src/server/lib/scene/scene.addScene.js:36:20)
at /src/server/lib/scene/scene.init.js:22:10
at Array.map ()
at SceneManager.init (/src/server/lib/scene/scene.init.js:20:30)
at Object.start (/src/server/lib/index.js:150:9)
at /src/server/index.js:51:3
}
2024-04-10T20:40:42+0200 index.js:16 (process.) TypeError: Cannot read properties of undefined (reading ‹ substr ›)
at /src/server/lib/scene/scene.addScene.js:45:47
at Array.forEach ()
at SceneManager.addScene (/src/server/lib/scene/scene.addScene.js:36:20)
at /src/server/lib/scene/scene.init.js:22:10
at Array.map ()
at SceneManager.init (/src/server/lib/scene/scene.init.js:20:30)
at Object.start (/src/server/lib/index.js:150:9)
at /src/server/index.js:51:3

Je doute que ce soit lié à une scène que j’ai faite récemment avec une action « Wait » de 24h, on aurait plus de log que ça non ?

Ah effectivement le deuxième log est beaucoup plus intéressant ! C’est ça qui cause le souci !

Voilà la ligne qui crash:

Tu as du créer une scène qui se déclenche tous les mois, mais tu n’as pas rempli l’heure et ça fait crasher Gladys.

Le temps que le bug soit corrigé et poussé dans Gladys, tu peux te connecter à la DB et trouver la scène en question et la supprimer ?

ok merci pour ces infos, je vais voir ce que je peux faire

1 « J'aime »

Effectivement, cela venait bien d’une scène programmée tous les mois sans heure (oublie de ma part).
J’ai supprimé la scène en base de données et mon instance fonctionne correctement, merci :slight_smile:

Des infos sur le bug pour un correctif :

  • On a bien un message d’erreur quand un sauvegarde avec un trigger mensuel sans l’heure : « Une erreur s’est produite lors de l’enregistrement de votre scène. Veuillez vérifier que toutes les actions / déclencheurs sont remplis et corrects. » mais ça enregistre quand même la scène et on peut sortir sans problème de la page d’édition de la scène.

  • Le crash de l’instance se produit lorsque la scène se lance en mode programmé

  • On pourrait mettre une heure par défaut si pas renseigné (par exemple 00h00)

  • Ou bloquer la sortie de l’édition de la scène si erreur mais ça me semble un peu plus complexe à mettre en place

3 « J'aime »

Solution possible : pouvoir sauvegarder les scènes qui sont en erreur, mais qu’elles ne puissent pas etre activées.
=> Message d’erreur lors de la sauvegarde et a chaque tentative d’activation par le curseur (donc sur le Dashboard, dans la vue Scene et dans la vue Edition de scène)

Raison : il peut etre intéressant de pouvoir preparer une scène

2 « J'aime »

Merci pour l’investigation, est-ce que tu peux créer une issue Github pour garder une trace du bug ? :slight_smile:

1 « J'aime »

yes, je vais créer une issue Github : Crash instance at reboot when a scene is configured every-month without hours · Issue #2052 · GladysAssistant/Gladys (github.com)

Correctif : Le crash de l’instance se produit quand Gladys redémarre (après un update par exemple)

1 « J'aime »

Salut @qleg, j’ai travaillé sur le sujet vu que c’est vraiment ultra-critique !

J’ai proposé une PR :

Concrètement :

  • Des valeurs par défaut seront sélectionnées sur le trigger « déclenchement programmé »
  • Une scène défaillante ne fera plus crasher Gladys au démarrage
1 « J'aime »