Skip to content

Refatora unexpected event#1457

Merged
robertatakenaka merged 3 commits into
scieloorg:mainfrom
robertatakenaka:refatora_unexpected_event
Jul 26, 2026
Merged

Refatora unexpected event#1457
robertatakenaka merged 3 commits into
scieloorg:mainfrom
robertatakenaka:refatora_unexpected_event

Conversation

@robertatakenaka

@robertatakenaka robertatakenaka commented Jul 24, 2026

Copy link
Copy Markdown
Member

O que esse PR faz?

Evita o crescimento excessivo da tabela UnexpectedEvent: em vez de criar um novo registro a cada chamada de create(), busca o registro mais recente para o mesmo par item/action (incluindo None/None) e o atualiza, preservando created e atualizando updated. Adiciona campo updated (auto_now), reflete isso na listagem do Wagtail, e aplica a migration correspondente.

Onde a revisão poderia começar?

Por tracker/models.py, especificamente os métodos create, _get, _update e _create da classe UnexpectedEvent. Depois conferir se a migration 0005_alter_unexpectedevent_options_and_more.py corresponde exatamente às mudanças de schema, e por fim tracker/wagtail_hooks.py.

Como este poderia ser testado manualmente?

  1. Rodar python manage.py migrate tracker em ambiente local/homologação.
  2. Chamar UnexpectedEvent.create(exception=Exception("teste"), item="X", action="Y") duas ou mais vezes seguidas via shell (manage.py shell) e confirmar que apenas um registro existe na tabela para esse par, com created inalterado e updated avançando a cada chamada.
  3. Chamar create() com item/action diferentes e confirmar que gera registros distintos, como esperado.
  4. Acessar a listagem de "Unexpected Events" no admin do Wagtail e confirmar que a coluna updated aparece corretamente.

Algum cenário de contexto que queira dar?

Essa melhoria é motivada por cenários de erro recorrente (ex.: uma mesma exceção disparada repetidamente por uma task periódica), onde o comportamento anterior gerava um registro novo a cada execução, inflando a tabela sem agregar informação relevante — o histórico de ocorrências passa a ser resumido em created/updated de um único registro por item/action.

Screenshots

N/A — sem alterações visuais além da nova coluna updated na listagem administrativa.

Quais são os tickets relevantes?

#1456

Referências


Segurança da informação (NSI.04)

Manipula dados sensíveis/pessoais (LGPD)?

  • Sim
  • Não

Altera autenticação, autorização, controle de acesso ou sessão?

  • Sim
  • Não

Introduz/atualiza/remove dependências de terceiros?

  • Sim
  • Não
    (apenas remove imports não utilizados — ContentFile, ParentalKey, ClusterableModel, painéis do Wagtail, CoreAdminModelForm, CommonControlField, HttpResponseRedirect, tracker.choices — nenhuma dependência nova adicionada)

Validado pelo pipeline de segurança (SonarQube/Trivy)?

  • Sim
  • Não

Concatena/monta/executa comandos SQL, HTML ou JS a partir de entrada externa?

  • Sim
  • Não
    (campo detail é serializado via json.dumps com fallback seguro str(detail) — sem interpolação direta em queries ou templates)

Expõe novos endpoints, telas ou serviços?

  • Sim
  • Não
    (apenas ajusta uma coluna — updated — na listagem administrativa já existente do Wagtail, que já exige autenticação/privilégio de staff)

Algum segredo/senha/chave/token adicionado ao código-fonte?

  • Sim
  • Não

Propósito:
Evitar múltiplos registros de UnexpectedEvent para o mesmo par
item/action (incluindo None/None), atualizando o registro existente
mais recente em vez de sempre criar um novo.

Solução técnica:
- Adiciona campo 'updated' (auto_now) para rastrear a última
  atualização do evento.
- Reduz exception_type/exception_msg de TextField para CharField
  (100/400 chars), padronizando com o restante do modelo.
- Adiciona ordering por '-updated', '-created'.
- Adiciona _get() para buscar registro existente por item/action,
  usando o mais recente em caso de múltiplos.
- Corrige _update() para ser chamado como método de instância, sem
  argumento duplicado de obj (bug do refactor anterior que causava
  TypeError).
- Corrige _create() para retornar o objeto após chamar _update()
  (bug do refactor anterior que fazia create() receber None e
  quebrar em obj.save() com AttributeError).
- Remove imports não utilizados (ContentFile, ParentalKey,
  ClusterableModel, painéis do Wagtail, CoreAdminModelForm,
  CommonControlField, tracker.choices) e a exceção
  EventReportCreateError, que não é mais usada neste módulo.
Propósito:
Permitir visualizar, na listagem administrativa do Wagtail, quando
cada UnexpectedEvent foi atualizado pela última vez — informação
relevante agora que o mesmo registro pode ser reaproveitado em vez
de duplicado (ver commit anterior em tracker/models.py).

Solução técnica:
- Adiciona 'updated' à tupla list_display do UnexpectedEventModelAdmin.
- Remove import não utilizado de HttpResponseRedirect.
…nexpectedEvent

Propósito:
Aplicar no banco de dados as mudanças de schema decorrentes do
refactor de UnexpectedEvent (commit anterior em tracker/models.py).

Solução técnica:
- Adiciona campo 'updated' (DateTimeField, auto_now).
- Altera exception_type/exception_msg de TextField para CharField
  (max_length 100 e 400, respectivamente).
- Atualiza Meta.ordering para ['-updated', '-created'].
@robertatakenaka
robertatakenaka merged commit b5b49b6 into scieloorg:main Jul 26, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants