diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/powerdnsex.ex | 21 | ||||
-rw-r--r-- | lib/powerdnsex/config.ex | 25 | ||||
-rw-r--r-- | lib/powerdnsex/gen_server/server.ex | 4 |
3 files changed, 32 insertions, 18 deletions
diff --git a/lib/powerdnsex.ex b/lib/powerdnsex.ex index 86628b7..b77389c 100644 --- a/lib/powerdnsex.ex +++ b/lib/powerdnsex.ex @@ -9,10 +9,8 @@ defmodule PowerDNSex do @spec start() :: GenServer.on_start() @doc false - def start() do - import Supervisor.Spec - - children = [worker(Server, [@name])] + def start do + children = [:poolboy.child_spec(:pool, pool_config())] options = [strategy: :one_for_one, name: :"#{@name}.Supervisor"] try do @@ -98,5 +96,18 @@ defmodule PowerDNSex do # Private # ########### - defp call(params), do: GenServer.call(@name, params, Config.powerdns_timeout) + defp pool_config do + [ + name: {:local, @name}, + worker_module: Server, + size: Application.get_env(:powerdnsex, :pool_size, 20), + max_overflow: Application.get_env(:powerdnsex, :pool_overflow, 8) + ] + end + + defp call(params) do + :poolboy.transaction(@name, fn pid -> + GenServer.call(pid, params, Config.powerdns_timeout) + end) + end end diff --git a/lib/powerdnsex/config.ex b/lib/powerdnsex/config.ex index 1302524..314dbca 100644 --- a/lib/powerdnsex/config.ex +++ b/lib/powerdnsex/config.ex @@ -1,12 +1,10 @@ defmodule PowerDNSex.Config do - defstruct url: "", - token: "", - timeout: "60" + defstruct [:url, :token, timeout: 60] alias PowerDNSex.Config def data do - set_attr_value = &Map.put(&2, &1, get_key(&1)) + set_attr_value = &Map.update!(&2, &1, get_key(&1)) %Config{} |> Map.from_struct() @@ -30,15 +28,20 @@ defmodule PowerDNSex.Config do ### defp get_key(key) do - case Application.fetch_env(:powerdnsex, key) do - {:ok, {:system, env_var_name}} -> - System.get_env(env_var_name) + fn default -> + case Application.fetch_env(:powerdnsex, key) do + {:ok, {:system, env_var_name}} -> + System.get_env(env_var_name) - {:ok, value} -> - value + {:ok, value} -> + value - _ -> - raise "[PowerDNSex] PowerDNS #{Atom.to_string(key)} not configured." + _ when default != nil -> + default + + _ -> + raise "[PowerDNSex] PowerDNS #{Atom.to_string(key)} not configured." + end end end end diff --git a/lib/powerdnsex/gen_server/server.ex b/lib/powerdnsex/gen_server/server.ex index a0bb7d8..df8a453 100644 --- a/lib/powerdnsex/gen_server/server.ex +++ b/lib/powerdnsex/gen_server/server.ex @@ -8,8 +8,8 @@ defmodule PowerDNSex.Server do {:ok, args} end - def start_link(name) do - GenServer.start_link(__MODULE__, :ok, name: name) + def start_link(_) do + GenServer.start_link(__MODULE__, :ok) end ### |