From 482e23b272bbb5221e09634c16ab0be9edd40592 Mon Sep 17 00:00:00 2001 From: kballou Date: Mon, 20 Oct 2014 16:30:10 -0600 Subject: Add logging to pool party Add basic debug logging to the pool. --- lib/poolparty/pool/supervisor.ex | 4 ++++ lib/poolparty/pool/worker.ex | 5 +++++ lib/poolparty/scheduler.ex | 11 +++++++++++ lib/poolparty/supervisor.ex | 4 ++++ 4 files changed, 24 insertions(+) diff --git a/lib/poolparty/pool/supervisor.ex b/lib/poolparty/pool/supervisor.ex index e95ceac..3132f46 100644 --- a/lib/poolparty/pool/supervisor.ex +++ b/lib/poolparty/pool/supervisor.ex @@ -1,13 +1,17 @@ defmodule PoolParty.Pool.Supervisor do use Supervisor + require Logger def start_link(pool_size, opts \\ []) do + Logger.debug("[#{__MODULE__}]: Starting Work Pool Supervisor") Supervisor.start_link(__MODULE__, {pool_size}, opts) end def init({pool_size}) do + Logger.debug("[#{__MODULE__}]: Initializing Work Pool Supervisor") children = (1..pool_size) |> Enum.map(fn (id) -> + Logger.debug("[#{__MODULE__}]: Starting child worker: #{id}") worker(PoolParty.Pool.Worker, [], id: id) end) supervise(children, strategy: :one_for_one) diff --git a/lib/poolparty/pool/worker.ex b/lib/poolparty/pool/worker.ex index c4685f5..5ae4161 100644 --- a/lib/poolparty/pool/worker.ex +++ b/lib/poolparty/pool/worker.ex @@ -1,20 +1,25 @@ defmodule PoolParty.Pool.Worker do use GenServer + require Logger def start_link(opts \\ []) do + Logger.debug("[#{__MODULE__}]: Starting worker") GenServer.start_link(__MODULE__, {}, opts) end def init(_) do + Logger.debug("[#{__MODULE__}]: Initializing Worker") PoolParty.Scheduler.join(self) {:ok, nil} end def process(pid, function, args) do + Logger.debug("[#{__MODULE__}: Casting Process request") GenServer.cast(pid, {:compute, function, args}) end def handle_cast({:compute, function, args}, _) do + Logger.debug("[#{__MODULE__}]: Process request received") PoolParty.Scheduler.ready({:result, function.(args), self}) {:noreply, nil} end diff --git a/lib/poolparty/scheduler.ex b/lib/poolparty/scheduler.ex index e0cce5f..225556a 100644 --- a/lib/poolparty/scheduler.ex +++ b/lib/poolparty/scheduler.ex @@ -1,7 +1,9 @@ defmodule PoolParty.Scheduler do use GenServer + require Logger def start_link(pool_size, opts \\ []) do + Logger.debug("[#{__MODULE__}]: Starting Pool Scheduler") GenServer.start_link( __MODULE__, {pool_size}, @@ -9,6 +11,7 @@ defmodule PoolParty.Scheduler do end def init({pool_size}) do + Logger.debug("[#{__MODULE__}]: Initializing Pool Scheduler") {:ok, %{max_pool_size: pool_size, workers: [], queue: [], @@ -17,21 +20,26 @@ defmodule PoolParty.Scheduler do end def join(worker_pid) do + Logger.debug("[#{__MODULE__}]: Worker joining pool") GenServer.cast(__MODULE__, {:join, worker_pid}) end def ready({:result, result, worker_pid}) do + Logger.debug("[#{__MODULE__}]: Worker jumping into the pool") GenServer.cast(__MODULE__, {:ready, result, worker_pid}) end def process(func, args, from) do + Logger.debug("[#{__MODULE__}]: Casting work request") GenServer.cast(__MODULE__, {:process, func, args, from}) end def handle_cast({:process, func, args, from}, state) do + Logger.debug("[#{__MODULE__}]: Work request received") queue = state.queue ++ [{func, args, from}] case length(state.workers) do 0 -> + Logger.debug("[#{__MODULE__}]: No workers available") {:noreply, %{state| queue: queue}} _ -> {queue, workers, processing} = @@ -45,14 +53,17 @@ defmodule PoolParty.Scheduler do end def handle_cast({:join, pid}, state) do + Logger.debug("[#{__MODULE__}]: Worker joined pool") {:noreply, %{state| workers: [pid | state.workers]}} end def handle_cast({:leave, pid}, state) do + Logger.debug("[#{__MODULE__}]: Worker left pool") {:noreply, %{state| workers: state.workers -- [pid]}} end def handle_cast({:ready, result, pid}, state) do + Logger.debug("[#{__MODULE__}]: Worker making a splash in the pool") {client, processing} = HashDict.pop(state.processing, pid) send(client, {:result, result}) workers = [pid | state.workers] diff --git a/lib/poolparty/supervisor.ex b/lib/poolparty/supervisor.ex index 2f4d150..9995a3d 100644 --- a/lib/poolparty/supervisor.ex +++ b/lib/poolparty/supervisor.ex @@ -1,12 +1,16 @@ defmodule PoolParty.Supervisor do use Supervisor + require Logger def start_link(opts \\ []) do + Logger.debug("[#{__MODULE__}]: Starting Pool Party Supervisor") Supervisor.start_link(__MODULE__, {}, [name: __MODULE__] ++ opts) end def init(_) do + Logger.debug("[#{__MODULE__}]: Initializing Pool Party Supervisor") pool_size = Application.get_env(:poolparty, :pool_size) + Logger.debug("[#{__MODULE__}]: Pool size: #{pool_size}") children = [worker(PoolParty.Scheduler, [pool_size]), worker(PoolParty.Pool.Supervisor, [pool_size])] supervise(children, strategy: :one_for_one) -- cgit v1.2.1