Skip to main content
O pacote AppSignal for Elixir instrumenta requisições HTTP realizadas pelo HTTPoison. HTTPoison é um cliente HTTP popular para Elixir. Diferentemente do Finch e do Tesla, o HTTPoison não emite eventos de telemetria, então o AppSignal não pode instrumentá-lo automaticamente. Em vez disso, o AppSignal fornece módulos wrapper aos quais você opta por aderir: Appsignal.HTTPoison como um cliente drop-in, e Appsignal.HTTPoison.Base para módulos cliente customizados. As structs de response e error (%HTTPoison.Response{}, %HTTPoison.Error{}, …) são os tipos próprios do HTTPoison e são retornados sem alteração. O AppSignal envolverá as requisições executadas via Appsignal.HTTPoison como eventos request.httpoison na timeline de eventos das suas amostras de desempenho, permitindo que você veja quanto tempo o HTTPoison gasta fazendo requisições a APIs externas. Esses dados podem ajudá-lo a decidir mover as requisições de API para um background job ou introduzir caching para ajudar a acelerar o desempenho e limitar requisições desnecessárias a APIs.

Configuração

A instrumentação do HTTPoison é opt-in. Escolha a abordagem que melhor se adapta à sua aplicação.

Usando Appsignal.HTTPoison diretamente

Chame Appsignal.HTTPoison em vez de HTTPoison para fazer requisições instrumentadas. Faça pattern-match em %HTTPoison.Response{...} e %HTTPoison.Error{...} normalmente — esses são os tipos de struct próprios do HTTPoison, retornados sem alteração:
Não use alias Appsignal.HTTPoison. Isso sombrearia o nome do módulo HTTPoison, fazendo com que pattern matches em %HTTPoison.Response{} e %HTTPoison.Error{} falhem.

Módulos cliente customizados

Se você usa um módulo cliente HTTP customizado baseado em HTTPoison.Base, substitua use HTTPoison.Base por use Appsignal.HTTPoison.Base. Nenhuma alteração adicional é necessária — dentro do módulo, você pode chamar métodos como get/1 e post/3, e fazer match nas structs de response e error do HTTPoison normalmente:
Todas as requisições feitas através do seu cliente customizado serão então instrumentadas automaticamente. Se seu módulo sobrescreve request/5, certifique-se de chamar super para preservar a instrumentação: