Packages
poolex
1.2.1
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.5.0-rc.0
1.4.2
1.4.1
1.4.0
1.3.0
1.2.1
1.2.0
1.1.0
1.0.0
1.0.0-rc.0
0.10.0
0.9.0
0.9.0-rc.2
0.9.0-rc.1
0.9.0-rc.0
0.8.0
0.8.0-rc.1
0.8.0-rc.0
0.7.6
0.7.5
0.7.4
retired
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.1
retired
0.3.0
retired
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
The library for managing pools of workers.
Current section
Files
Jump to
Current section
Files
lib/poolex/private/metrics.ex
defmodule Poolex.Private.Metrics do
@moduledoc """
Functions for dispatching metrics.
"""
@doc """
Dispatches metrics with current count of idle workers.
"""
@spec dispatch_pool_size_metrics(Poolex.pool_id()) :: :ok
def dispatch_pool_size_metrics(pool_id) do
debug_info = Poolex.get_debug_info(pool_id)
:telemetry.execute(
[:poolex, :metrics, :pool_size],
%{
idle_workers_count: debug_info.idle_workers_count,
busy_workers_count: debug_info.busy_workers_count,
overflowed: convert_overflow_to_number(debug_info.overflow > 0)
},
%{pool_id: pool_id}
)
end
@spec convert_overflow_to_number(boolean()) :: integer()
defp convert_overflow_to_number(true), do: 1
defp convert_overflow_to_number(false), do: 0
@doc """
Starts a telemetry poller for dispatching metrics.
"""
@spec start_poller(list(Poolex.poolex_option())) :: GenServer.on_start()
def start_poller(opts) do
pool_id = Poolex.get_pool_id(opts)
measurements = collect_measurements(opts)
if measurements == [] do
:ok
else
:telemetry_poller.start_link(
measurements: measurements,
period: :timer.seconds(1),
name: :"#{pool_id}_metrics_poller"
)
end
end
@spec collect_measurements(list(Poolex.poolex_option())) :: list()
defp collect_measurements(opts) do
pool_id = Poolex.get_pool_id(opts)
if Keyword.get(opts, :pool_size_metrics, false) do
[
{Poolex.Private.Metrics, :dispatch_pool_size_metrics, [pool_id]}
]
else
[]
end
end
end