Часті технічні запитання

«Заплановані дії виконуються не в той час, коли вони очікувалися»

На платформі Odoo.sh ми не можемо гарантувати точний час виконання запланованих дій.

Це пов’язано з тим, що на одному сервері може бути кілька клієнтів, і ми повинні гарантувати справедливу частку сервера для кожного клієнта. Тому заплановані дії реалізуються дещо інакше, ніж на звичайному сервері Odoo, і виконуються відповідно до політики найкращих зусиль.

Попередження

Не очікуйте, що будь-яка запланована дія буде виконуватися частіше ніж кожні 5 хвилин.

Чи існують «найкращі практики» щодо запланованих дій?

Odoo.sh завжди обмежує час виконання запланованих дій (*таких як* хрони). Тому ви повинні мати на увазі цей факт, розробляючи власні хрони.

Радимо:

  • Ваші заплановані дії мають працювати з невеликими партіями записів.

  • Ваші заплановані дії мають виконувати свою роботу після обробки кожного пакета; таким чином, якщо вони перериваються через ліміт часу, не потрібно починати спочатку.

  • Ваші заплановані дії мають бути ідемпотентними: вони не повинні викликати побічних ефектів, якщо їх запускати частіше, ніж очікувалося.

Як я можу автоматизувати завдання, коли відбувається зміна IP-адреси?

Odoo.sh сповіщає адміністраторів проекту про зміни IP-адреси. Крім того, коли IP-адреса робочого екземпляра змінюється, HTTP-запит GET надсилається на шлях /_odoo.sh/ip-change з нова IP-адреса включена як параметр рядка запиту (new), разом із попередньою IP-адресою як додатковий параметр (old).

Цей механізм дозволяє застосовувати спеціальні дії у відповідь на зміну IP-адреси (наприклад, надсилання електронного листа, звернення до API брандмауера, налаштування об’єктів бази даних тощо)

З міркувань безпеки маршрут /_odoo.sh/ip-change доступний лише всередині самої платформи та повертає відповідь 403, якщо доступ до нього здійснюється будь-яким іншим способом.

Ось приклад псевдореалізації:

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'