[RESOLU] Lancement d'un script qui n'existe pas


#1

Salut tout le monde,

J’ai une petite problématique. Quand je déclenche l’événement “back at home”, Gladys essaie de me lancer un script qui visiblement n’existe pas.
Je n’ai pourtant plus de scénario qui se déclenche sur cet événement.

Voici les logs :

0|gladys   | Event : create : new Event with code : back-at-home
0|gladys   | Scenario : Trigger : New event : back-at-home
0|gladys   | Scenario : Trigger : Found 2 launchers with code back-at-home.
0|gladys   | Scenario : Trigger : Launcher condition verified.
0|gladys   | Scenario : Trigger : Condition not verified.
0|gladys   | Scenario : Trigger : Conditions verified, starting all actions.
0|gladys   | Scenario : exec : Found 1 actions to execute.
0|gladys   | Executing action "Exécute un script"
0|gladys   | Error: Script not found
0|gladys   |     at /home/pi/gladys/api/core/script/script.getbyid.js:13:39
0|gladys   |     at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys   |     at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys   |     at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys   |     at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
0|gladys   |     at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
0|gladys   |     at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
0|gladys   |     at /home/pi/gladys/node_modules/bluebird/js/release/nodeback.js:42:21
0|gladys   |     at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:120:16
0|gladys   |     at Object.poolfully [as releaseConnection] (/home/pi/gladys/node_modules/sails-mysql/lib/connections/release.js:28:12)
0|gladys   |     at Query._callback (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:105:35)
0|gladys   |     at Query.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys   |     at Query._handleFinalResultPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
0|gladys   |     at Query.EofPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
0|gladys   |     at Protocol._parsePacket (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:280:23)
0|gladys   |     at Parser.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Parser.js:73:12)
0|gladys   |     at Protocol.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:39:16)
0|gladys   |     at Socket.<anonymous> (/home/pi/gladys/node_modules/mysql/lib/Connection.js:96:28)
0|gladys   |     at emitOne (events.js:116:13)
0|gladys   |     at Socket.emit (events.js:211:7)
0|gladys   |     at addChunk (_stream_readable.js:263:12)
0|gladys   |     at readableAddChunk (_stream_readable.js:250:11)
0|gladys   |     at Socket.Readable.push (_stream_readable.js:208:10)
0|gladys   |     at TCP.onread (net.js:594:20)

Voici la vue des scénarios :

Est-ce qu’il y a moyen de supprimer quelque chose en base, si c’est bien là le problème ?

Merci d’avance !


#2

Tu peux mettre ça dans un script et le lancer :

const query = "SELECT l.id as id, l.title as titre, l.active as active FROM launcher l LEFT JOIN eventtype e ON e.id = l.eventtype WHERE e.code = 'back-at-home'";

gladys.utils.sql(query).then(sails.log.info)

Ca devrait trouver le coupable.
Dans tes logs, tu verras l’id du scénario, son titre et s’il est actif.


#3

Super, merci. Je vois bien le scénario. Y’en a même 2 avec le même titre, mais pas le même ID.

Quelle serait la commande pour les supprimer, stp ?


#4

Afin de détecter un bug dans Gladys, peux-tu nous dire si c’est normal que ces scenari existent toujours dans ta base de données?
Sont-ils actifs ?
Créés par d’autres utilisateurs ?
Qu’on fix si jamais c’est un comportement non voulu :wink:

Sinon, ta requête devrait ressembler à ça :

const query = 'DELETE FROM launcher WHERE id IN (id1,id2)';

T’as juste à remplacer query de l’exemple précédant.
On est d’accord, c’est une action irreversible…


#5

Sinon plus simple, pourquoi tu ne regarde pas dans chaque scénario celui qui lance un script? :smiley:


#6

En fait, je sais qu’aucun scénario ne lance ce script pour la simple et bonne raison qu’il n’existe plus. Donc oui, je pense qu’il y a quelque chose à fixer mais je ne saurais pas dire comment le reproduire.

Ce dont je me souviens c’est que, à une époque, j’ai créé un scénario “back-at-home” qui lance ces scripts et que je les ai supprimés par la suite. C’est un peu maigre pour lancer les investigations ^^

Voilà le résultat de la commande :

0|gladys   |   [ RowDataPacket { id: 6, titre: 'At-home_AA', active: 1 },
0|gladys   |   RowDataPacket { id: 7, titre: 'At-home_AA', active: 1 } ]

On voit qu’ils sont actifs mais je ne les retrouve pas dans l’UI


#7

@Boimb

const query = ‘DELETE FROM launcher WHERE id IN (id1,id2)’;

Les “id1” et “id2” ça représente quoi ? Comment je sais que ça supprimera bien ce qui pose problème ? :sweat_smile:
Je ne mets pas en doute tes compétences, j’essaie de comprendre :wink:


#8

On a quand même un comportement inattendu ou non souhaitable de Gladys là :

  • Tu as pu supprimer un script alors qu’un scenario en dépend
  • Tu as un scenario qui a disparu de ton UI alors que “active” = 1

Cette requête te donnera le nom du user qui a créé le scenario. Ca permettra de savoir si c’est normal que tu ne le vois pas dans ton UI:

const query = "SELECT u.firstname as firstname, l.title as scenario FROM launcher l LEFT JOIN eventtype e ON e.id = l.eventtype LEFT JOIN user u ON u.id = l.user WHERE e.code = 'back-at-home';"

Dans la toute première requete, les résultats affichent “id”, “titre” et “active”.
Tu m’as dit que tu avais eu deux résutats.
id1 et id2 sont pour remplacer les “id” que tu as eu comme résultat.


#9

id1 et id2 sont pour remplacer les “id” que tu as eu comme résultat.

Ok c’est bien ce que je pensais

Bon, ta commande m’a grandement aidé. J’ai dû me logguer avec le compte de ma copine et créé des scénarios avec… Je retrouve bien les scénarios. :sweat_smile:

Désolé pour l’agitation, je pense que j’ai pas fait attention quand j’ai créé les premiers scénarios, je pensais avoir tout fait avec mon compte…


#10

Cool.

Il demeure quand même qu’on peut supprimer des scripts dont les scenari dépendent…


#11

Oui il faudrait lever une petite alerte quand on supprime un tel script. On indiquerait à l’utilisateur l’ID du scénario dont le script dépend et lui demander confirmation


#12

J’ai ajouté un issue sur git