Refatora unexpected event#1457
Merged
robertatakenaka merged 3 commits intoJul 26, 2026
Merged
Conversation
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'].
samuelveigarangel
approved these changes
Jul 24, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que esse PR faz?
Evita o crescimento excessivo da tabela
UnexpectedEvent: em vez de criar um novo registro a cada chamada decreate(), busca o registro mais recente para o mesmo paritem/action(incluindoNone/None) e o atualiza, preservandocreatede atualizandoupdated. Adiciona campoupdated(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étodoscreate,_get,_updatee_createda classeUnexpectedEvent. Depois conferir se a migration0005_alter_unexpectedevent_options_and_more.pycorresponde exatamente às mudanças de schema, e por fimtracker/wagtail_hooks.py.Como este poderia ser testado manualmente?
python manage.py migrate trackerem ambiente local/homologação.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, comcreatedinalterado eupdatedavançando a cada chamada.create()comitem/actiondiferentes e confirmar que gera registros distintos, como esperado.updatedaparece 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/updatedde um único registro poritem/action.Screenshots
N/A — sem alterações visuais além da nova coluna
updatedna listagem administrativa.Quais são os tickets relevantes?
#1456
Referências
Segurança da informação (NSI.04)
Manipula dados sensíveis/pessoais (LGPD)?
Altera autenticação, autorização, controle de acesso ou sessão?
Introduz/atualiza/remove dependências de terceiros?
(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)?
Concatena/monta/executa comandos SQL, HTML ou JS a partir de entrada externa?
(campo
detailé serializado viajson.dumpscom fallback segurostr(detail)— sem interpolação direta em queries ou templates)Expõe novos endpoints, telas ou serviços?
(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?