summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Bracco <href@random.sh>2020-07-07 16:32:28 +0200
committerJordan Bracco <href@random.sh>2020-07-07 16:32:28 +0200
commit55e92f84b4ed531bd487952a71040a9c69dc2807 (patch)
tree9ad27f48369cc3be25be86e18196b6a1b8622dc4
parent0.1.0 (for realz) (diff)
Fix decrement after max_retries been reached + telemetry events
-rw-r--r--CHANGELOG.md10
-rw-r--r--lib/concurrent_limiter.ex6
-rw-r--r--mix.exs1
-rw-r--r--mix.lock1
4 files changed, 18 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 792ecbf..b399b8e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
+## [Unreleased]
+
+### Added
+
+- Telemetry events.
+
+### Fixed
+
+- Decrement counter when max retries has been reached.
+
## [0.1.0] - 2020-05-16
Initial release.
diff --git a/lib/concurrent_limiter.ex b/lib/concurrent_limiter.ex
index a581447..e7b6b55 100644
--- a/lib/concurrent_limiter.ex
+++ b/lib/concurrent_limiter.ex
@@ -97,9 +97,11 @@ defmodule ConcurrentLimiter do
max = max_running + max_waiting
counter = inc(ref, name)
max_retries = Keyword.get(opts, :max_retries) || max_retries
+ :telemetry.execute([:concurrent_limiter, :limit], %{counter: counter}, %{limiter: name})
cond do
counter <= max_running ->
+ :telemetry.execute([:concurrent_limiter, :execution], %{counter: counter}, %{limiter: name})
try do
fun.()
after
@@ -107,13 +109,17 @@ defmodule ConcurrentLimiter do
end
counter > max ->
+ :telemetry.execute([:concurrent_limiter, :overload], %{counter: counter}, %{limiter: name, scope: "max"})
dec(ref, name)
{:error, :overload}
retries + 1 > max_retries ->
+ :telemetry.execute([:concurrent_limiter, :max_retries], %{counter: counter}, %{limiter: name, retries: retries + 1})
+ dec(ref, name)
{:error, :overload}
counter > max_running ->
+ :telemetry.execute([:concurrent_limiter, :wait], %{counter: counter}, %{limiter: name, retries: retries + 1})
wait(ref, name, fun, wait, opts, retries + 1)
end
end
diff --git a/mix.exs b/mix.exs
index ef7bb2c..237b2b9 100644
--- a/mix.exs
+++ b/mix.exs
@@ -31,6 +31,7 @@ defmodule ConcurrentLimiter.MixProject do
defp deps do
[
+ {:telemetry, "~> 0.3"},
{:credo, "~> 1.1.0", only: [:dev, :test], runtime: false},
{:ex_doc, "~> 0.21", only: :dev, runtime: false},
{:benchee, "~> 1.0", only: [:dev, :test]}
diff --git a/mix.lock b/mix.lock
index 98a2640..8acc217 100644
--- a/mix.lock
+++ b/mix.lock
@@ -9,4 +9,5 @@
"makeup": {:hex, :makeup, "1.0.1", "82f332e461dc6c79dbd82fbe2a9c10d48ed07146f0a478286e590c83c52010b5", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "49736fe5b66a08d8575bf5321d716bac5da20c8e6b97714fec2bcd6febcfa1f8"},
"makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "d4b316c7222a85bbaa2fd7c6e90e37e953257ad196dc229505137c5e505e9eff"},
"nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm", "589b5af56f4afca65217a1f3eb3fee7e79b09c40c742fddc1c312b3ac0b3399f"},
+ "telemetry": {:hex, :telemetry, "0.4.2", "2808c992455e08d6177322f14d3bdb6b625fbcfd233a73505870d8738a2f4599", [:rebar3], [], "hexpm", "2d1419bd9dda6a206d7b5852179511722e2b18812310d304620c7bd92a13fcef"},
}