Evénements manquants dans la timeline

Bonjour,

Depuis ma migration en version 4.1 (en ce moment v4.1.19), je me suis aperçu que des événements étaient manquant dans la timeline.
Concrètement, sur mon installation il manque des événements de passage en statut « Chauffage » des différents thermostats (les passages en statut « Arrêté » sont bien tous présent).
Il y a probablement un lien avec le fait que le passage en statut « Chauffage » des thermostats se fait de manière simultanée.
En bdd, il y a une discontinuité dans les id dans la table timeline qui correspond aux entrées manquantes.

Cela ressemble à un problème de concurrence d’accès / code non thread safe.

Si vous avez des idées ou pistes pour trouver ce qui ne va pas :slight_smile:

Benoît

Le seul cas où ce n’est pas enregistré en timeline c’est si la valeur ne change pas.

En théorie sûrement, en pratique ce n’est pas ce que je constate depuis la migration en 4.1 : il y a des événements qui manquent alors que la valeur a bien changée. A chaque fois qu’un événement manque, il y a eu un autre événement exactement au même instant.

En pièce jointe deux screenshots qui montrent le soucis : à 20h00m07s il y a deux événements sur des thermostats qui passe en chauffage, dans la timeline on n’en retrouve qu’un seul…


T’a vérifié la répétition des valeurs de tes virtuels ?
Si tu met tes vrais équipements en timeline ?

Ce n’est pas des virtuels même si le nom le laisse penser ;).

Bon j’ai trouvé le coupable : dans la fonction cleaning de la classe timeline (appelée lors de l’appel à la fonction byFolder à chaque affichage de la timeline), il y a une requête sql malheureuse :

    //ensure no duplicates:
    $sql = 'DELETE t1 FROM timeline t1 INNER JOIN timeline t2 WHERE ';
    $sql .= 't1.id < t2.id AND ';
    $sql .= 't1.type = t2.type AND ';
    $sql .= 't1.subtype = t2.subtype AND ';
    $sql .= 't1.datetime = t2.datetime AND ';
    $sql .= 't1.options = t2.options AND ';
    $sql .= 't1.folder = t2.folder';
    DB::Prepare($sql, array(), DB::FETCH_TYPE_ROW);

Il manque la condition t1.link_id = t2.link_id !

2 « J'aime »

Ah oui en effet !!

Tu a testé/validé ?

C’est en alpha et beta.

Merci de tester avant passage en stable !!

Et merci pour la solution surtout :pray:t2:

De rien :slight_smile:

Testé et validé, plus de « trou » dans la timeline.

Une autre petite modification qui pourrait être interessante : ajouter un index sur le champ datetime de la table timeline : sur mon installation, ca permet de diminuer le temps d’execution de la requête de purge de plusieurs secondes à une cinquantaine de ms.

Tu peux préciser ?

Bonjour,
Ca sera bon lors de la prochaine mise à jour de jeedom. Merci pour le retour

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.