Questions techniques fréquentes

« Les actions planifiées ne s’exécutent pas à l’heure exacte à laquelle elles étaient prévues »

Sur la plateforme Odoo.sh, nous ne pouvons pas garantir une heure d’exécution exacte pour les actions planifiées.

Ceci est dû au fait qu’il peut y avoir plusieurs clients sur le même serveur et nous devons garantir une part équitable du serveur pour chaque client. Les actions planifiées sont donc mises en œuvre légèrement différemment que sur un serveur Odoo normal et sont exécutées selon une politique de meilleur effort.

Avertissement

Ne vous attendez pas qu’une action planifiée soit exécutée plus souvent que toutes les 5 minutes.

Existe-t-il des « meilleures pratiques » concernant les actions planifiées ?

Odoo.sh limitera toujours le temps d’exécution des actions planifiées (*aka* crons). Par conséquent, vous devez garder ce fait à l’esprit lorsque vous développez vos propres crons.

Nous conseillons ce qui suit :

  • Vos actions planifiées doivent s’exécuter sur de petits lots d’enregistrements.

  • Vos actions planifiées doivent commiter leur travail après avoir traité chaque lot ; ainsi, si elles sont interrompues par la limite de temps, il n’est pas nécessaire de recommencer.

  • Vos actions planifiées doivent être idempotentes : elles ne doivent pas provoquer d’effets secondaires si elles sont lancées plus souvent que prévu.

How can I automate tasks when an IP address change occurs?

Odoo.sh notifies project administrators of IP address changes. Additionally, when the IP address of a production instance changes, an HTTP GET request is made to the path /_odoo.sh/ip-change with the new IP address included as a query string parameter (new), along with the previous IP address as an additional parameter (old).

This mechanism allows custom actions to be applied in response to the IP address change (e.g., sending an email, contacting a firewall API, configuring database objects, etc.)

For security reasons, the /_odoo.sh/ip-change route is accessible only internally by the platform itself and returns a 403 response if accessed through any other means.

Here is a pseudo-implementation example:

class IPChangeController(http.Controller):

    @http.route('/_odoo.sh/ip-change', auth='public')
    def ip_change(self, old=None, new=None):
        _logger.info("IP address changed from %s to %s", old, new)
        # Then perform whatever action required for your use case, e.g., update an
        # ir.config_parameter, send an email, contact an external firewall service's API, ...
        return 'ok'