Melhorias de observabilidade, otimizações Docker e atualização de dependências#121
Merged
Conversation
O código Python espera o modelo em $HOME/models/bert-base-portuguese-cased mas o Dockerfile.base estava salvando em /tmp/bert-model, causando o erro: ValueError: Path /home/gazette/models/bert-base-portuguese-cased not found Mudanças: - Cria diretório /home/gazette/models no builder stage - Salva modelo no caminho correto durante o build - Copia modelo para o user home com permissões adequadas - Remove variável SENTENCE_TRANSFORMERS_HOME (não mais necessária) Fixes: #produção Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Aumenta tentativas de retry de 3 para 5 com backoff exponencial melhorado - Adiciona jitter de 10% no backoff para prevenir thundering herd - Implementa connection pooling com requests.Session para reutilizar conexões - Adiciona configuração via variáveis de ambiente: * TIKA_MAX_RETRIES (padrão: 5) * TIKA_RETRY_BASE_DELAY (padrão: 2.0s) * TIKA_CONNECTION_POOL_SIZE (padrão: 10) - Atualiza testes para trabalhar com implementação baseada em Session Estas mudanças reduzem significativamente erros de conexão durante inicialização do Tika e melhoram performance com keep-alive HTTP. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…eline - Carrega modelo com low_cpu_mem_usage=True para reduzir pico de memória durante inicialização (evita mmap de ~415 MB de uma só vez) - Adiciona cache do modelo a nível de módulo para evitar recarregamentos desnecessários entre chamadas consecutivas de embedding_rerank_excerpts - Documenta as etapas do pipeline gazette_texts no README Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Adiciona JsonFormatter que serializa cada entrada como uma única linha
JSON, preservando todos os campos extra={} e consolidando tracebacks
num único campo 'traceback' (evita fragmentação no Grafana Loki)
- Silencia loggers de opensearchpy e urllib3 em WARNING para eliminar
spam de requisições HTTP (ex.: 120+ entradas/s de _analyze)
- Downgrade de log_tika_request e log_tika_response para DEBUG, pois
são eventos de alta frequência sem valor operacional em produção
- Move log_tika_request para dentro de _make_tika_request para
correlacionar REQUEST com RESPONSE/ERROR por tentativa de retry
- Remove logging.error() duplicados em _make_tika_request que
relogavam o mesmo erro já registrado por log_tika_error()
- Remove bloco try/except em extract_text que relogava o erro e
substituía a exception original por uma genérica sem contexto
- Substitui logging.exception(e) por exc_info=True no logging.error()
existente, consolidando erro e traceback em uma única entrada JSON
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…entes - Atualiza .python-version para usar o venv qd-data-processing-3-14-4 - Atualiza Dockerfiles (Dockerfile e Dockerfile.base) de python:3.11-slim para python:3.14-slim - Atualiza todas as dependências para suas versões estáveis mais recentes: - black: 24.10.0 → 26.3.1 - coverage: 7.6.9 → 7.13.5 - boto3/botocore: 1.35.80 → 1.42.88 - psycopg2-binary: 2.9.10 → 2.9.11 (wheel nativa para Python 3.14) - opensearch-py: 2.7.1 → 3.1.0 - requests: 2.32.3 → 2.33.1 - scikit-learn: 1.5.2 → 1.8.0 - sentence-transformers: 3.3.1 → 5.4.0 - huggingface-hub: 0.26.5 → 1.10.1 - numpy: 1.26.4 → 2.4.4 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Instala torch CPU-only antes dos demais pacotes (economia ~1.5 GB) - Separa dependências de dev em requirements-dev.txt - Remove curl do builder stage (desnecessário após remoção do git-lfs) - Move OCI labels exclusivamente para o runtime stage - Remove diretórios de teste bundled nos pacotes Python - Parametriza TIKA_VERSION no Dockerfile_apache_tika - Adiciona suporte a multiarch (amd64+arm64) com cache remoto no Makefile Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Quando REGISTRY não é passado explicitamente, o valor é inferido da
URL do remote `origin`:
- Extrai owner e host via sed (suporta SSH e HTTPS)
- Mapeia git host → container registry:
github.com → ghcr.io
gitlab.com → registry.gitlab.com
outros → host original
- Fallback para ghcr.io/$(IMAGE_NAMESPACE) se origin não existir
Exemplo: git@github.com:okfn-brasil/repo.git → ghcr.io/okfn-brasil
Override manual ainda funciona: make build REGISTRY=my.registry/org
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Adiciona prefixo r"..." em regex com \s em al_associacao_municipios.py - Atualiza ruff de v0.6.2 para v0.15.10 no .pre-commit-config.yaml Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Passa BUILD_DATE, VCS_REF e VERSION como build-args em todos os workflows - Passa TIKA_VERSION como build-arg no build_apache_tika.yaml - Adiciona trigger issue_comment com filtro 'cicd/build' para acionar builds manualmente via comentário em PRs - Adiciona trigger push.branches=main com paths no build_container_image.yaml - Restringe build_apache_tika.yaml a push na branch main (era qualquer branch) - Corrige registry hardcoded em build_apache_tika.yaml para usar github.repository_owner - Adiciona input tika_version no workflow_dispatch do build_apache_tika.yaml Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Substitui tags flutuantes (v4, v5, v3) por hashes imutáveis para evitar execução involuntária de código alterado nas actions. actions/checkout v4 -> v4.3.1 (34e11487) actions/setup-python v5 -> v5.6.0 (a26af69b) docker/setup-buildx-action v3 -> v3.12.0 (8d2750c6) docker/login-action v3 -> v3.7.0 (c94ce9fb) docker/build-push-action v5 -> v5.4.0 (ca052bb5) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
O wrapper em extract_text() que envolvia exceptions com "Could not extract file content" foi removido (evitava double-logging). O teste agora verifica apenas que uma Exception é lançada quando o Tika falha, sem depender do texto da mensagem. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contributor
Author
|
cicd/build |
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.
Resumo
JsonFormatterpara logs estruturados em JSON, elimina duplicação de entradas de log e consolida tracebacks em campo único (compatível com Grafana Loki)build-argsde metadados (BUILD_DATE, VCS_REF, VERSION, TIKA_VERSION), triggercicd/buildvia comentário em PR, corrige registry hardcoded no workflow Tikaal_associacao_municipios.py), ruff atualizado para v0.15.10Mudanças por área
Logs e observabilidade (
monitoring/,data_extraction/,tasks/)JsonFormatter: cada entrada de log é uma linha JSON com todos os camposextra={}preservadostraceback(string única) em vez de linhas fragmentadaslogging.error()duplicadas que precediamlog_tika_error()logging.exception(e)porexc_info=Truenologging.error()existenteopensearchpyeurllib3(muito verbosos)log_tika_request/log_tika_responserebaixados para DEBUGDocker (
Dockerfile.base,Dockerfile,Dockerfile_apache_tika,Makefile)torchinstalado com--index-url .../whl/cpuantes dos demais pacotes (~1.5 GB economizados)black,coverage,ruffmovidos pararequirements-dev.txtcurlremovido do builder stage; OCI labels apenas no runtime stagetests/dos pacotes removidos antes do COPY para o runtimeTIKA_VERSIONparametrizado viaARGno Dockerfile e variável no MakefileREGISTRYderivado automaticamente da URL do remote gitCI/CD (
.github/workflows/)BUILD_DATE,VCS_REF,VERSIONpassados comobuild-argsem todos os workflowsTIKA_VERSIONpassado comobuild-argcom input configurável noworkflow_dispatchissue_commentcomcicd/buildpara disparar builds via comentário em PRsbuild_container_image.yaml: novo trigger em push nomainpara mudanças noDockerfilebuild_apache_tika.yaml: push restrito àmain, registry dinâmico viagithub.repository_ownerChecklist de testes
cicd/build— acionar build via comentário neste PRtracebackpresente em erros)docker image lsapós buildmake retest-tikamake help-buildexibe REGISTRY correto🤖 Generated with Claude Code