Dar suporte a mecanismos de busca embarcados: lunr
felubra opened this issue · 0 comments
felubra commented
Requisitos
Execução
- A operação de geração do índice deve ser agendada toda vez que uma notícia e/ou seus conteúdos correlatos forem atualizados
- A geração deve ser agendada para ser executada em n segundos no futuro (janela de agendamento)
Atomicidade
- Só deve haver uma operação de geração por janela de execução
- Novas atualizações dentro da janela de execução devem reiniciá-la, ou seja, a mesma tarefa de geração já iniciada deve ser adiada
- O procedimento todo deve ser logado
Implementação
Execução
- Construir um escutador de sinal, que deve agendar a execução de uma task assíncrona toda vez que os conteúdos do site atualizarem
- Parametrizar uma task do celery com um ETA (janela de agendamento) e um timeout (janela de execução) definidos em configuração
- Construir a função da task para gerar um índice com todas as notícias e documentos do sistema - o local onde o arquivo será gerado deve ser parametrizado na configuração; e, enquanto um índice novo estiver sendo gerado, o arquivo do índice antigo deve permanecer disponível.
- TODO: logar
Atomicidade
- Configurar o sistema de cache do django: cache local em memória do django em desenvolvimento e memcached em produção
- Garantir que apenas uma instância da task acima seja executada a qualquer momento através da implementação de um lock (trava) - https://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html#ensuring-a-task-is-only-executed-one-at-a-time