Timeout no cliente HTTP
TLDR: Adiciona timeouts de conexão e de leitura a todas as chamadas HTTParty, impedindo que a latência de uma API externa bloqueie threads do Puma indefinidamente.
Contexto
O HttpClient::Base não configura timeout nas chamadas HTTParty (get, post, put, delete). Se o Zeuspay ou qualquer outro serviço externo demorar ou travar, a thread do Puma fica bloqueada até o timeout do SO (que pode ser de minutos). Com apenas 3 threads por dyno, 2 chamadas lentas simultâneas esgotam o pool e novos requests ficam na fila, causando R12 (timeout de 30 s) e escalas desnecessárias.
Objetivos
- Garantir que nenhuma chamada HTTP externa bloqueie uma thread por mais de 10 segundos
- Proteger o pool de threads do Puma contra falhas em serviços externos
Fora de escopo
— (não registrado na spec original)
Mudanças
app/adapters/http_client/base.rb: adicionaropen_timeout: 5, read_timeout: 10emrequest_params, aplicado a todos os métodos HTTParty
Como verificar
- Teste unitário simulando timeout no HTTParty confirma que a exceção
Net::OpenTimeout/Net::ReadTimeouté levantada dentro do prazo configurado - Inspecionar os parâmetros passados ao HTTParty nos testes existentes
Documentação
Nenhuma mudança de documentação necessária.