Skip to content

Adiciona um fluxo alternativo e mais rápido ("fast") de geração e envio de artigos para o ArticleMeta - #777

Open
robertatakenaka wants to merge 4 commits into
scieloorg:scielo-br-prodfrom
robertatakenaka:scielo-br-prod-add-gera-artigo-fast
Open

Adiciona um fluxo alternativo e mais rápido ("fast") de geração e envio de artigos para o ArticleMeta#777
robertatakenaka wants to merge 4 commits into
scieloorg:scielo-br-prodfrom
robertatakenaka:scielo-br-prod-add-gera-artigo-fast

Conversation

@robertatakenaka

Copy link
Copy Markdown
Member

O que esse PR faz?

Adiciona um fluxo alternativo e mais rápido ("fast") de geração e envio de artigos para o ArticleMeta, permitindo que o GeraSciELO continue publicando artigos correntes via FTP durante as janelas em que o processamento completo (GeraPadrao, que leva cerca de 3 dias) ainda está em execução — em vez de bloquear novas execuções ou aguardar o pipeline completo terminar.

Para isso, este PR:

  • Introduz um arquivo de controle de status (temp/GeraArtigoFastGeraPadraoStatus.ctrl) que marca o processamento principal como RUNNING no início e FINISHED ao término.
  • Cria batch/GeraArtigoFast.bat, que gera e envia apenas os artigos com status corrente (v50='C') via FTP para o ArticleMeta, sem depender da conclusão do pipeline completo.
  • Cria batch/GeraArtigoFastLockCheck.bat, que verifica há quanto tempo o status está RUNNING e envia e-mail de alerta para a equipe de tecnologia caso o limiar (72h) seja ultrapassado, indicando possível travamento do processamento principal.
  • Corrige nomenclatura herdada em proc/Envia2SciELOFast.bat (referências antigas ao Envia2Medline) e adiciona um parâmetro opcional para permitir indicar um path alternativo da base de artigos, necessário para o novo fluxo fast.

Onde a revisão poderia começar?

Sugiro iniciar por proc/GeraScielo.bat, no trecho que verifica o status do arquivo de controle (ARQUIVO_STATUS) logo após call batch/GeraIssues.bat $1 — é ali que a decisão entre fluxo completo e fluxo fast acontece. Em seguida, batch/GeraArtigoFastLockCheck.bat (pequeno e autocontido) e batch/GeraArtigoFast.bat. Por fim, proc/Envia2SciELOFast.bat para entender o parâmetro opcional de origem de artigos usado pelo fluxo fast.

Como este poderia ser testado manualmente?

  1. Executar proc/GeraScielo.bat normalmente com os 4 parâmetros esperados; confirmar que temp/GeraArtigoFastGeraPadraoStatus.ctrl é criado com conteúdo RUNNING logo após o início do processamento pesado.
  2. Enquanto essa primeira execução ainda está em andamento (ou simulando manualmente, criando o arquivo .ctrl com RUNNING antes de rodar), disparar uma segunda execução de proc/GeraScielo.bat e confirmar que ela:
    • chama batch/GeraArtigoFastLockCheck.bat;
    • executa batch/GeraArtigoFast.bat em vez do pipeline completo;
    • encerra com exit 0 sem reiniciar o processamento completo.
  3. Para testar o alerta de travamento: alterar manualmente o mtime do arquivo .ctrl para mais de 72h atrás (touch -d "73 hours ago" temp/GeraArtigoFastGeraPadraoStatus.ctrl) e rodar batch/GeraArtigoFastLockCheck.bat temp/GeraArtigoFastGeraPadraoStatus.ctrl 72 <email-de-teste> isoladamente; confirmar recebimento do e-mail de alerta e código de saída 1.
  4. Confirmar que, ao final do processamento completo, o arquivo .ctrl é atualizado para FINISHED e que uma nova execução após isso segue o fluxo normal (não entra no fluxo fast).
  5. Testar proc/Envia2SciELOFast.bat com e sem o parâmetro 5 (path alternativo de artigos), confirmando que o comportamento padrão ($1/artigo/artigo) é preservado quando o parâmetro é omitido.

Algum cenário de contexto que queira dar?

O GeraPadrao leva cerca de 3 dias para concluir, sendo a indexação da base bases-work/artigo/artigo sozinha responsável por ~54h desse tempo. O script principal já é disparado diariamente (cron), então a maior parte das execuções diárias ocorre com o processamento completo ainda em andamento.

Identificamos que existem dois procedimentos que poderiam se beneficiar de um fluxo alternativo durante essa janela: (1) o fluxo do site novo via Kernel/Airflow, que já é disparado em paralelo desde o início do GeraPadrao e não é afetado por este PR; e (2) o ISIS2mongo, que precisa apenas da base artigo sem indexação, gerado diariamente.

Este PR trata especificamente de um terceiro procedimento: a publicação de artigos correntes via FTP para o ArticleMeta (GeraArtigoFast / Envia2SciELOFast), permitindo que ela ocorra diariamente enquanto o GeraPadrao está em execução. Este PR não trata da geração da base artigo não indexada para consumo do ISIS2mongo, nem do fluxo de sincronização com o Kernel/Airflow (já existente) — esses ficam para tratamento em issues/PRs separados.

Screenshots

Não aplicável — mudanças em scripts de shell/backend, sem interface gráfica.

Quais são os tickets relevantes?

Referências


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 (criptografia, mascaramento, anonimização, etc.):
  • 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 (justifique):

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

  • Sim — confirme que há sanitização/parametrização (prepared statements, escaping, etc.):
  • 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)

…lternativo de artigos

#### Propósito
O script ainda mantinha comentário de cabeçalho e nome do arquivo de log
herdados do antigo Envia2Medline.bat, além de não permitir customizar a
origem da base de artigos ao ser reaproveitado por outros fluxos (como o
GeraArtigoFast).

#### Solução técnica
Atualiza o comentário de cabeçalho e a variável INFORMALOG para refletir
o nome real do script (Envia2SciELOFast). Adiciona o parâmetro opcional 5
(ARTIGOSOURCE), permitindo indicar um path alternativo para a base de
artigos; quando omitido, mantém o comportamento padrão usando
$1/artigo/artigo.
…tigoFast)

#### Propósito
Permitir o envio rápido de artigos e títulos recém-publicados para o
ArticleMeta via FTP, sem depender da finalização do processamento
completo do GeraSciELO, que pode levar dias.

#### Solução técnica
Gera a base title via mx a partir do path de produção, filtrando artigos
com status 'C' (correntes) e anexando-os à base bases-work/fast/artigo
via AppendMaster. Em seguida, chama Envia2SciELOFast.bat para transmitir
as bases title_full e artigo_full geradas a partir dessa base fast.
…eraArtigoFastLockCheck)

#### Propósito
Detectar quando o processamento principal do GeraSciELO permanece no
status RUNNING além do tempo esperado, indicando possível travamento, e
notificar a equipe responsável.

#### Solução técnica
Calcula a idade (em horas) do arquivo de controle de status a partir do
mtime e compara com um limiar configurável (parâmetro 2). Caso o limiar
seja excedido, monta e envia e-mail via mailx para o destinatário
informado (parâmetro 3) e retorna código de saída 1; caso contrário,
retorna 0.
…INISHED

#### Propósito
O processamento completo do GeraSciELO leva cerca de 3 dias. Durante esse
intervalo, execuções subsequentes precisam desviar para um fluxo rápido
(GeraArtigoFast) em vez de reiniciar o pipeline completo, e a equipe
responsável precisa ser alertada caso o processamento fique preso além
do esperado.

#### Solução técnica
Introduz o arquivo de controle temp/GeraArtigoFastGeraPadraoStatus.ctrl.
Ao iniciar, se o status estiver RUNNING, chama
GeraArtigoFastLockCheck.bat (limiar de 72h) para verificar travamento,
executa o fluxo GeraArtigoFast.bat e encerra com sucesso sem prosseguir
para o pipeline completo. Caso contrário, marca o status como RUNNING no
início do processamento completo e como FINISHED ao final, após a cópia
das bases para produção.
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.

3 participants