Perguntas técnicas frequentes

“As ações agendadas não são executadas no momento exato em que eram esperadas”

Na plataforma Odoo.sh, não podemos garantir um horário de execução exato para as ações agendadas.

Isso se deve ao fato de que pode haver vários clientes no mesmo servidor, e precisamos garantir uma parte justa do servidor para cada cliente. Portanto, as ações agendadas são implementadas de forma ligeiramente diferente do que em um servidor Odoo normal e são executadas em uma política de melhor esforço.

Aviso

Não espere que nenhuma ação agendada seja executada com mais frequência do que a cada cinco minutos.

Existem “práticas recomendadas” relacionadas a ações agendadas?

Odoo.sh sempre limita o tempo de execução das ações agendadas (*aka* crons). Portanto, você deve ter esse fato em mente ao desenvolver seus próprios crons.

Recomendamos que:

  • Suas ações agendadas devem funcionar em pequenos lotes de registros.

  • Suas ações agendadas devem fazer commit do trabalho após o processamento de cada lote; dessa forma, se forem interrompidas pelo limite de tempo, não será necessário recomeçar.

  • Suas ações agendadas devem ser idempotentes: elas não devem causar efeitos colaterais se forem iniciadas com mais frequência do que o esperado.

Como automatizar tarefas quando ocorre uma mudança de endereço IP?

**Além disso, quando o endereço IP de uma instância de produção é alterado, é feita uma solicitação HTTP GET para o caminho /_odoo.sh/ip-change com o novo endereço IP incluído como parâmetro de string de consulta (new), juntamente com o endereço IP anterior como parâmetro adicional (old).

Esse mecanismo permite que ações personalizadas sejam aplicadas em resposta à alteração do endereço IP (por exemplo, envio de e-mail, contato com uma API de firewall, configuração de objetos de base de dados etc.).

Por motivos de segurança, a rota /_odoo.sh/ip-change é acessível apenas internamente pela própria plataforma e retorna uma resposta 403 se for acessada por qualquer outro meio.

Aqui está um exemplo de pseudoimplementação:

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'