summaryrefslogtreecommitdiff
path: root/lib/poolparty/scheduler.ex
diff options
context:
space:
mode:
authorkballou <kballou@devnulllabs.io>2014-10-20 18:56:23 -0600
committerkballou <kballou@devnulllabs.io>2014-10-20 18:56:23 -0600
commit5ba91fecec283003690072773638f2f143a2b0fa (patch)
tree057a1d695256043546ce652f9419f23f2100ca22 /lib/poolparty/scheduler.ex
parent482e23b272bbb5221e09634c16ab0be9edd40592 (diff)
downloadpoolparty-5ba91fecec283003690072773638f2f143a2b0fa.tar.gz
poolparty-5ba91fecec283003690072773638f2f143a2b0fa.tar.xz
Add event manager and event notification
The PoolParty module was turned into an application that creates a generic genEvent server, passing it to the supervisor. The supervisor, in turn, distributes the genevent server to all child processes, etc. This allows all processes to send events to the manager for logging, etc.
Diffstat (limited to 'lib/poolparty/scheduler.ex')
-rw-r--r--lib/poolparty/scheduler.ex12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/poolparty/scheduler.ex b/lib/poolparty/scheduler.ex
index 225556a..dc9e1b3 100644
--- a/lib/poolparty/scheduler.ex
+++ b/lib/poolparty/scheduler.ex
@@ -2,20 +2,21 @@ defmodule PoolParty.Scheduler do
use GenServer
require Logger
- def start_link(pool_size, opts \\ []) do
+ def start_link(pool_size, event_manager, opts \\ []) do
Logger.debug("[#{__MODULE__}]: Starting Pool Scheduler")
GenServer.start_link(
__MODULE__,
- {pool_size},
+ {pool_size, event_manager},
[name: __MODULE__] ++ opts)
end
- def init({pool_size}) do
+ def init({pool_size, event_manager}) do
Logger.debug("[#{__MODULE__}]: Initializing Pool Scheduler")
{:ok, %{max_pool_size: pool_size,
workers: [],
queue: [],
- processing: HashDict.new()}
+ processing: HashDict.new(),
+ events: event_manager}
}
end
@@ -36,6 +37,7 @@ defmodule PoolParty.Scheduler do
def handle_cast({:process, func, args, from}, state) do
Logger.debug("[#{__MODULE__}]: Work request received")
+ GenEvent.notify(state.events, {:work_queued, func, args, from})
queue = state.queue ++ [{func, args, from}]
case length(state.workers) do
0 ->
@@ -54,11 +56,13 @@ defmodule PoolParty.Scheduler do
def handle_cast({:join, pid}, state) do
Logger.debug("[#{__MODULE__}]: Worker joined pool")
+ GenEvent.notify(state.events, {:worker_joining, pid})
{:noreply, %{state| workers: [pid | state.workers]}}
end
def handle_cast({:leave, pid}, state) do
Logger.debug("[#{__MODULE__}]: Worker left pool")
+ GenEvent.notify(state.events, {:worker_leaving, pid})
{:noreply, %{state| workers: state.workers -- [pid]}}
end