https://github.com/globocom/alchemetrics_tesla
Tesla middleware to report external call metrics.
https://github.com/globocom/alchemetrics_tesla
alchemetrics-tesla metrics middleware tesla
Last synced: about 1 month ago
JSON representation
Tesla middleware to report external call metrics.
- Host: GitHub
- URL: https://github.com/globocom/alchemetrics_tesla
- Owner: globocom
- License: mit
- Created: 2017-09-18T21:23:23.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-10-08T20:42:09.000Z (about 7 years ago)
- Last Synced: 2025-08-12T11:29:34.475Z (about 2 months ago)
- Topics: alchemetrics-tesla, metrics, middleware, tesla
- Language: Elixir
- Homepage:
- Size: 226 KB
- Stars: 9
- Watchers: 68
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
Alchemetrics Tesla
![]()
Tesla middleware to report external call metrics.## About
Alchemetrics Tesla is a very simple middleware that report metrics like `response_time` and calls count.## Installing
Add to your dependencies:
```elixir
def deps do
[{:alchemetrics_tesla, "~> 2.0"}]
end
```## Usage
All you need to do is adding the middleware to your Tesla module, like this:```elixir
defmodule PetsClient do
use Tesla
plug Tesla.Middleware.Alchemetrics
plug Tesla.Middleware.BaseUrl, "http://pets.api.com"def dogs do
get("/v1/dogs/")
end
end
```And when you make any request it will be automatically reported:
```elixir
### Sample call
PetsClient.dogs()### What is reported
# Response time (avg, max, min, p99 and p95)
[
type: "external_call.response_time",
request_details: %{
service: "PetsClient",
domain: "pets.api.com",
method: :get,
port: 80,
protocol: "http",
}
]# Calls count (last interval and total)
[
type: "external_call.count",
request_details: %{
service: "PetsClient",
domain: "pets.api.com",
method: :get,
port: 80,
protocol: "http",
},
response_details: %{
status_code: "200",
status_code_group: "2xx"
}
]
```### Adding extra metric metadata
You can also add extra metadata:```elixir
defmodule PetsClient do
use Tesla
plug Tesla.Middleware.Alchemetrics
plug Tesla.Middleware.BaseUrl, "http://pets.api.com"def dogs do
get("/v1/dogs/", opts: [alchemetrics_metadata: %{route: "get.dogs"}])
enddef logged_user_pet(pet_id) do
get("/user/pets/#{pet_id}", opts: [alchemetrics_metadata: %{route: "get.user.pets.show"}])
end
end
```This extra metadata will be added to `request_details` key:
```elixir
## Sample call (1)
PetsClient.logged_user_pet(100)# Reported response time (avg, max, min, p99 and p95)
[
type: "external_call.response_time",
request_details: %{
service: "PetsClient",
domain: "pets.api.com",
method: :get,
port: 80,
protocol: "http",
},
extra: %{ route: "get.user.pets" }
]## Sample call (2)
PetsClient.dogs()# Reported response time (avg, max, min, p99 and p95)
[
type: "external_call.response_time",
request_details: %{
service: "PetsClient",
domain: "pets.api.com",
method: :get,
port: 80,
protocol: "http",
},
extra: %{ route: "get.dogs" }
]
```