Phillipp

Phillipp

Intercepting HTTPoison/hackney requests

Hey,

I am currently building an api gateway. That means it receives a request and makes one or more requests to other sources and returns a response.
Now I want to add metrics about the outgoing requests to my Prometheus metrics. Things like hostname, path, method and response code.
That way, I am very flexible and can derive stats for certain actions instead of creating specialized metrics for each individual action.

Is there an easy way to intercept all HTTPoison calls after they are made so I don’t need to add telemetry calls in every function that uses HTTPoison? I also would like to avoid creating a wrapper module for HTTPoison just for the metrics.

Most Liked

alvises

alvises

I don’t have an answer about catching the function calls but…To me the wrapper module is the way to go. It helps you to decouple your code from HTTPoison dependency itself, leaving you the freedom to change the HTTP library in the future if you want, without refactoring the whole code. It would also much easier to test your code. And obviously it makes easy to integrate telemetry.

Phillipp

Phillipp

I often see no point in wrapping certain things just because I could eventuell change the underlaying library or framework. Practically this never gets done, at least in my experience. I also kinda dislike redoing apis that already exist because one often ends up with a very limited api that needs to be expanded later on when one wants to use a different functionality from the underlaying library.

I wonder if it wouldn’t make more sense to integrate telemetry into HTTPoison itself. Maybe the maintainer is up to it.

EDIT: Already a topic Telemetry support · Issue #383 · edgurgel/httpoison · GitHub

alvises

alvises

to me, in general, it’s more about decoupling from third-party libraries rather than add functionalities. This helps me a lot in testing.

Last Post!

keathley

keathley

This doesn’t exactly answer your question but you might check out Tesla as an alternative to HTTPoison. It supports telemetry amongst other things and it’s a good model for building http clients.

Where Next?

Popular in Questions Top

Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New

Other popular topics Top

Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 130579 1222
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New

We're in Beta

About us Mission Statement