summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkballou <kballou@devnulllabs.io>2014-10-20 16:30:10 -0600
committerkballou <kballou@devnulllabs.io>2014-10-20 16:30:10 -0600
commit482e23b272bbb5221e09634c16ab0be9edd40592 (patch)
treed319add510ab527680866ffaeb1569b6572c694c
parentb50ed8072e6bc9aaa342f30520e979a38cc5370f (diff)
downloadpoolparty-482e23b272bbb5221e09634c16ab0be9edd40592.tar.gz
poolparty-482e23b272bbb5221e09634c16ab0be9edd40592.tar.xz
Add logging to pool party
Add basic debug logging to the pool.
-rw-r--r--lib/poolparty/pool/supervisor.ex4
-rw-r--r--lib/poolparty/pool/worker.ex5
-rw-r--r--lib/poolparty/scheduler.ex11
-rw-r--r--lib/poolparty/supervisor.ex4
4 files changed, 24 insertions, 0 deletions
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)