Skip to content

Commit f83b0a7

Browse files
authored
Add overflowed boolean metric (#81)
1 parent 82de787 commit f83b0a7

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

TODO.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Using metrics, we see that typically, our application uses 10-20 processes, and
1111
- [ ] Pool size
1212
- [x] Idle workers count
1313
- [x] Busy workers count
14-
- [ ] Is max_overflow used?
14+
- [x] Is max_overflow used?
1515
- [ ] Maximum count of "overflowed" workers
1616
- [ ] Usage time
1717
- [ ] How long are workers busy?

lib/poolex/private/metrics.ex

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ defmodule Poolex.Private.Metrics do
1414
[:poolex, :metrics, :pool_size],
1515
%{
1616
idle_workers_count: debug_info.idle_workers_count,
17-
busy_workers_count: debug_info.busy_workers_count
17+
busy_workers_count: debug_info.busy_workers_count,
18+
overflowed: debug_info.overflow > 0
1819
},
1920
%{pool_id: pool_id}
2021
)

test/poolex_metrics_test.exs

+21-3
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,17 @@ defmodule PoolexMetricsTest do
77

88
@tag telemetry_events: [[:poolex, :metrics, :pool_size]]
99
test "pool size metrics" do
10-
pool_id = start_pool(worker_module: SomeWorker, workers_count: 5, pool_size_metrics: true)
10+
pool_id =
11+
start_pool(
12+
worker_module: SomeWorker,
13+
workers_count: 5,
14+
pool_size_metrics: true,
15+
max_overflow: 5
16+
)
1117

1218
assert_telemetry_event(
1319
[:poolex, :metrics, :pool_size],
14-
%{idle_workers_count: 5, busy_workers_count: 0},
20+
%{idle_workers_count: 5, busy_workers_count: 0, overflowed: false},
1521
%{pool_id: ^pool_id}
1622
)
1723

@@ -21,7 +27,19 @@ defmodule PoolexMetricsTest do
2127

2228
assert_telemetry_event(
2329
[:poolex, :metrics, :pool_size],
24-
%{idle_workers_count: 4},
30+
%{idle_workers_count: 4, busy_workers_count: 1, overflowed: false},
31+
%{pool_id: ^pool_id}
32+
)
33+
34+
Enum.each(1..5, fn _ ->
35+
launch_long_task(pool_id)
36+
end)
37+
38+
Metrics.dispatch_pool_size_metrics(pool_id)
39+
40+
assert_telemetry_event(
41+
[:poolex, :metrics, :pool_size],
42+
%{idle_workers_count: 0, busy_workers_count: 6, overflowed: true},
2543
%{pool_id: ^pool_id}
2644
)
2745
end

0 commit comments

Comments
 (0)