Veel voorkomende technische vragen

“Geplande acties lopen niet precies op het verwachte tijdstip”

Op het Odoo.sh-platform kunnen we geen exacte looptijd voor geplande acties garanderen.

Dit is te wijten aan het feit dat er meerdere klanten op dezelfde server kunnen zijn, en we moeten voor elke klant een eerlijk deel van de server garanderen. Geplande acties worden daarom iets anders geïmplementeerd dan op een gewone Odoo-server, en worden uitgevoerd volgens een best effort-beleid.

Waarschuwing

Verwacht niet dat een geplande actie vaker dan elke 5 minuten wordt uitgevoerd.

Zijn er ‘best practices’ met betrekking tot geplande acties?

Odoo.sh beperkt altijd de uitvoeringstijd van geplande acties (*ook wel* crons). Daarom moet je dit feit in gedachten houden bij het ontwikkelen van je eigen crons.

Wij adviseren dat:

  • De geplande acties zouden moeten werken voor kleine batches records.

  • Je geplande acties zouden hun werk moeten doen na het verwerken van elke batch; op deze manier is het niet nodig om opnieuw te beginnen als ze worden onderbroken door de tijdslimiet.

  • Je geplande acties moeten idempotent zijn: ze mogen geen bijwerkingen veroorzaken als ze vaker worden gestart dan verwacht.

Hoe kan ik taken automatiseren wanneer een IP-adreswijziging plaatsvindt?

Odoo.sh informeert projectbeheerders over IP-adreswijzigingen. Daarnaast wordt, wanneer het IP-adres van een productie-instantie verandert, een HTTP GET-verzoek gedaan naar het pad /_odoo.sh/ip-change met het nieuwe IP-adres als een querystringparameter (new), samen met het vorige IP-adres als een extra parameter (old).

Dit mechanisme maakt het mogelijk om aangepaste acties toe te passen als reactie op de IP-adreswijziging (bv. het verzenden van een e-mail, contact opnemen met een firewall-API, databaseobjecten configureren, enz.)

Om veiligheidsredenen is de route /_odoo.sh/ip-change alleen intern toegankelijk voor het platform zelf en retourneert een 403-respons bij toegang via andere middelen.

Hier is een voorbeeld van een pseudo-implementatie:

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'