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.
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:
Your scheduled actions should work on small batches of records.
Your scheduled actions should commit their work after processing each batch; this way, if they get interrupted by the time-limit, there is no need to start over.
Your scheduled actions should be idempotent: they must not cause side-effects if they are started more often than expected.
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'