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: adicionar open_timeout: 5, read_timeout: 10 em request_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.