summaryrefslogtreecommitdiff
path: root/lib/poolparty/scheduler.ex
diff options
context:
space:
mode:
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