Skip to content

Separa a preparação dos metadados do ambiente de processamento - #131

Merged
pitangainnovare merged 3 commits into
scieloorg:mainfrom
pitangainnovare:refactor/parsing-metadata-service
Aug 29, 2026
Merged

Separa a preparação dos metadados do ambiente de processamento#131
pitangainnovare merged 3 commits into
scieloorg:mainfrom
pitangainnovare:refactor/parsing-metadata-service

Conversation

@pitangainnovare

Copy link
Copy Markdown
Contributor

O que esse PR faz?

Separa a preparação dos metadados da configuração geral do ambiente de processamento dos logs.

A seleção do tradutor, o carregamento dos metadados de documentos e fontes e a criação do URLTranslationManager passam a ficar centralizados em metrics/services/parsing/metadata.py.

O setup_parsing_environment() permanece responsável pela criação e configuração do LogParser, delegando a preparação dos metadados ao novo serviço.

Também foi adicionado um registro do tempo consumido pela preparação dos metadados.

Esta alteração não modifica os cálculos, o formato dos dicionários, os payloads ou os documentos enviados ao OpenSearch.

Onde a revisão poderia começar?

A revisão pode começar em:

  • metrics/services/parsing/metadata.py

Depois, verificar:

  • metrics/services/parsing/environment.py
  • metrics/tests/parsing/test_metadata.py
  • metrics/tests/parsing/test_environment.py

Os commits foram separados por responsabilidade:

  1. seleção dos tradutores;
  2. preparação dos metadados;
  3. delegação pelo ambiente de processamento.

Como este poderia ser testado manualmente?

Executar os testes no Docker:

docker compose -f local.yml run --rm django \
  pytest metrics/tests/parsing -q

docker compose -f local.yml run --rm django \
  pytest document/tests source/tests -q

docker compose -f local.yml run --rm django \
  pytest \
    metrics/tests/integration/test_books_log_to_metrics.py \
    metrics/tests/integration/test_classic_log_to_metrics.py \
    -q

docker compose -f local.yml run --rm django \
  pytest metrics/tests -q

Resultados obtidos localmente:

  • testes de parsing: 17 passed;
  • testes de documentos e fontes: 17 passed;
  • integrações de Books e Classic: 12 passed, 2 skipped;
  • suíte completa de métricas: 113 passed, 2 skipped;
  • Black, isort e flake8 executados com sucesso;
  • nenhuma migration foi criada.

Também foi processado isoladamente o log real de Books de 1º de agosto de 2026.

O resultado permaneceu idêntico ao obtido antes da refatoração:

  • 19.634 linhas processadas;
  • 16.352 linhas válidas;
  • 3.282 linhas descartadas;
  • 8.849 documentos mensais;
  • 16.403 documentos anuais;
  • hash do payload: b968461e9034394b49f207a9fc9f7ed8d2703a48b54319962c4cd078002ba457.

Algum cenário de contexto que queira dar?

Este PR corresponde à terceira parte da otimização da preparação dos metadados utilizados no processamento dos logs.

As etapas anteriores eliminaram consultas repetidas no relacionamento entre documentos e passaram a materializar os metadados com values() e iterator().

Esta etapa melhora a separação de responsabilidades antes das próximas otimizações, como a reutilização controlada dos metadados entre processamentos.

A versão da aplicação permanece em 2.2.0.

Este branch foi criado a partir da Parte 2. O PR deve ser aberto contra main depois que a Parte 2 tiver sido incorporada.

Screenshots

Não aplicável. A alteração não modifica interfaces gráficas.

Quais são os tickets relevantes?

Não há ticket associado no momento.

Referências

  • Branch da Parte 2: perf/metadata-values-iterator
  • Documentação do Django sobre QuerySet.iterator()
  • Implementação existente do URLTranslationManager em scielo_usage_counter

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

Seção obrigatória. Marque as opções aplicáveis e justifique quando necessário. Referência: NSI.04 - Norma de Desenvolvimento Seguro.

Este PR manipula dados sensíveis ou pessoais (LGPD)?

  • Sim — descreva os controles de proteção aplicados:
  • Não

Este PR altera autenticação, autorização, controle de acesso ou gerenciamento de sessão?

  • Sim — descreva o que mudou e por quê:
  • Não

Este PR introduz, atualiza ou remove dependências de terceiros?

  • Sim — as novas dependências foram verificadas no SBOM/Trivy sem vulnerabilidades críticas/altas em aberto?
    • Verificado e aprovado
    • Pendente / vulnerabilidade aceita com justificativa:
  • Não

Este PR foi validado pelo pipeline de segurança (SonarQube / Trivy)?

  • Sim — link do job:
  • Não aplicável a este PR
  • Validação pendente da execução do pipeline após a abertura do PR.

Este PR concatena, monta ou executa comandos SQL, HTML ou JavaScript a partir de entrada externa?

  • Sim — confirme que há sanitização/parametrização:
  • Não

Este PR expõe novos endpoints, telas ou serviços?

  • Sim — HTTPS obrigatório está garantido e o acesso segue o princípio de menor privilégio?
  • Não

Algum segredo, senha, chave ou token está sendo adicionado ao código-fonte?

  • Não, nenhum segredo foi commitado
  • Sim (bloquear merge e corrigir antes de prosseguir)

@pitangainnovare
pitangainnovare merged commit ce82322 into scieloorg:main Aug 29, 2026
2 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.

1 participant