Current section

Files

Jump to
kitto lib runner.ex
Raw

lib/runner.ex

defmodule Kitto.Runner do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok, name: :runner_sup)
end
def init(:ok) do
Agent.start_link(fn -> [] end, name: :job_registrar)
load_jobs
children = jobs |> Enum.map(fn (job) ->
worker(Kitto.Job, [job[:options][:interval], job[:job]], id: make_ref)
end)
supervise(children, strategy: :one_for_one)
end
def register(job) do
runner |> Agent.update(fn (jobs) ->
jobs ++ [job]
end)
end
def jobs, do: runner |> Agent.get(&(&1))
defp load_jobs, do: job_files |> Enum.each(&Code.eval_file/1)
defp job_files do
Path.wildcard Path.join(System.cwd, "jobs/**/*.{ex,exs}")
end
defp runner, do: Process.whereis(:job_registrar)
end