Conversation
… real da execução
… real da execução
Signed-off-by: Hudson Lima Tavares <109999011+hltav@users.noreply.github.com>
# Card
- PAV-121
# O que foi feito
- Organiza o pós-coleta do scraper-go em lotes limitados: coleta →
normalização → deduplicação → classificação → persistência → indexação,
com fila limitada (2 × maior lote), backpressure e cancelamento em todas
as etapas. Não cria goroutine por vaga e não acumula a coleta inteira
antes de persistir.
- Adiciona lotes configuráveis e fail-fast:
SCRAPER_CLASSIFICATION_BATCH_SIZE=100 (máx. 1000),
SCRAPER_PERSIST_BATCH_SIZE=100 (máx. 1000) e
SCRAPER_INDEX_BATCH_SIZE=250 (máx. 2500). Valor ausente usa o default;
valor explícito ≤0, vazio ou acima do máximo impede a inicialização. 1
permanece válido para diagnóstico. Compose usa ${VAR-default}.
- O catálogo coletado continua no Valkey (scraper:job:{id}) como fonte
da verdade da execução; o PostgreSQL segue para usuários/saved_jobs. A
indexação invertida só recebe IDs confirmados por SaveBatch.
Persistência em MULTI/EXEC por lote, com upsert pelo ID estável:
atualiza descrição, URL, classificação, fontes e keywords; campo vazio
não apaga dado existente. Falha no lote faz rollback, não indexa aquele
lote e aplica retry limitado só para erros transitórios.
- Indexação incremental com SADD em pipelines de
SCRAPER_INDEX_BATCH_SIZE, sem RENAME do set inteiro (isso apagaria lotes
anteriores da mesma execução). Se a indexação falhar após o persist,
ReindexPersistedJobs relê os documentos no Valkey e reconstrói os
índices, sem repetir a coleta externa.
- Deduplicação intra e inter-lote usa as chaves já existentes no domínio
(ID externo, title|company|location e URL canônica). Títulos iguais de
vagas diferentes são preservados. A classificação em lote mantém o
resultado individual, sem novas famílias, keywords ou pontuações. A
fórmula da cache key permanece inalterada.
# Validação
- [x] go test ./... em scraper-go
- [x] go test -race ./... em scraper-go
- [x] Conferir .env.example, docker-compose.yml e SCRAPER.md com
SCRAPER_CLASSIFICATION_BATCH_SIZE=100, -
[x]SCRAPER_PERSIST_BATCH_SIZE=100 e SCRAPER_INDEX_BATCH_SIZE=250
- [x] Confirmar que valores inválidos (0, vazio, acima do máximo)
impedem a inicialização e que 1 é aceito
- [x] Subir o scraper e validar nos logs scraper batch sizes / scraper
runtime configurado e os logs por run_id/lote (recebidos, duplicados,
aprovados, inseridos, atualizados, indexados, falhas, duração)
- [x] Executar uma coleta controlada e confirmar: só vagas persistidas
são indexadas; falha de persistência não indexa o lote; falha de
indexação fica registrada e pode ser reconciliada via
ReindexPersistedJobs; GET /jobs/search e healthcheck permanecem
compatíveis
- [x] Confirmar ausência de alterações em frontend/**, front_admin/**,
novas famílias/keywords e package-lock.json
Benevanio
approved these changes
Sep 30, 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.
Linear
Issue: PAV-___
Branch flow
develop.master.Objetivo
Descreva objetivamente o problema resolvido por esta PR.
Escopo
O que faz parte desta entrega:
O que está fora do escopo:
Resumo das alterações
Arquivos e módulos afetados
Como testar
# comandos de validaçãoValidation
Impacto de banco / migration
Detalhes:
Impacto em contratos/API
Detalhes:
Impacto de configuração / infraestrutura
Detalhes:
Impacto de segurança
Detalhes:
Impacto de dados pessoais / privacidade
Detalhes:
Compatibilidade / dependências
Detalhes:
Evidências
Adicione logs, screenshots, links de execução ou outra evidência relevante.
Riscos
Rollback
Descreva como a alteração pode ser revertida com segurança.
Checklist final
.env, certificados ou tokens