Projet

Général

Profil

Development #76047

Discussion: mettre en cache en base la date du prochain réveil pour les actions globales déclenchés par un réveil ou pour les sauts sur expiration

Ajouté par Benjamin Dauvergne il y a environ un an. Mis à jour il y a environ un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
30 mars 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Actuellement toutes les deux heures il y a parcourt de la totalité des demandes/fiches pour les workflows qui ont des actions globales déclenchés par des expirations. Pour la totalité d'entre elles je suppute que la date de réveil aurait pu être calculé lors du dernier {form/card}data.store(). Je confirmerai ça par un script voir les expressions présentes en production.

Le calcul de cette date de réveil pourrait être fait lors du store et cette date être stockée dans une colonne "next_wakeup", colonne qui pourra utilement être répliquée dans wcs_all_forms (et un wcs_all_cards qui pourrait être créé à l'occasion). Ainsi on pourrait avoir un job de cron réveillé bien plus souvent mais qui aurait juste à une requête sur wcs_all_forms qui retournerait une liste des Formdef.id et des formdata.id pour lesquels il faut exécuter une action globale.

Deux bénéfices :
  • beaucoup moins de travail inutile
  • des délais effectifs d'expiration qui peuvent être raccourcis
  • plus de sécurité sur l'exécution des actions sur expiration

Ce dernier point pourrait aussi bénéficier aux sauts classiques sur expiration si on adopte le même fonctionnement au passage, en testant la condition au moment du formdata.store() et si la condition est bonne on calcule la date form_last_update_time + jump.timeout, il faudrait vérifier la aussi la plupart des conditions, je suppose d'avance que celles contenant un appel webservice.* devront être traités séparément.

Il y a 3 cas un peu difficile qu'il faut prendre en compte :
  • les conditions sur des sources externes, data_sources.* et webservice.* je dirai bien de les interdire dans les triggers, actuellement je n'en vois pas dans les triggers, pour les sauts classiques il faudrait juste considérer la condition comme toujours vrai lors du calcul du prochain réveil mais en prenant comme minimum la durée minimale de 20 minutes,
  • les conditions qui dépendent d'une variable form_option_* il y en a dans les triggers il faudrait les détecter et sur une modification d'option recalculer les dates de réveil concernées (dans ces cas là c'est presque toujours statique, i.e. ça ne dépend pas des données du formdata)
  • les conditions qui dépendent d'autres fiches/demandes via forms|objects ou cards|objects, je n'en vois aucune dans les triggers, je les interdirait, et pour les sauts classiques il faudrait les considérer comme toujours vrais.

Demandes liées

Lié à w.c.s. - Development #44336: permettre un délai court aux actions globalesNouveau22 juin 2020

Actions
Lié à w.c.s. - Development #71430: Saut automatique : possibilité de préciser une dateRejeté17 novembre 2022

Actions

Historique

#5

Mis à jour par Benjamin Dauvergne il y a environ un an

#7

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Sujet changé de Mette en cache en base la date du prochain réveil pour les actions globales déclenchés par un réveil ou pour les sauts sur expiration à Discussion: mettre en cache en base la date du prochain réveil pour les actions globales déclenchés par un réveil ou pour les sauts sur expiration
#8

Mis à jour par Benjamin Dauvergne il y a environ un an

  • Description mis à jour (diff)
#9

Mis à jour par Frédéric Péters il y a environ un an

  • Statut changé de Nouveau à Fermé

Déjà discuté il y a quelques mois, d'autres priorités, et un ticket illisible de plus ne changera rien.

#10

Mis à jour par Frédéric Péters il y a environ un an

  • Lié à Development #71430: Saut automatique : possibilité de préciser une date ajouté
#11

Mis à jour par Frédéric Péters il y a environ un an

Bon en fait #71430 évoquait ça mais ça n'était pas le sujet principal, et la partie qui a mené ce ticket n'y avait pas vraiment été discutée.

Reste qu'il y a pour moi suffisamment d'autres priorités, et que je ne suis pas enthousiaste à complexifier quoique ce soit, ni même à tenter de déchiffrer les tableaux attachés à ce ticket.

Formats disponibles : Atom PDF