lib/kaffy/tasks.ex

defmodule Kaffy.Tasks do
  def collect_tasks() do
    Kaffy.Utils.get_task_modules()
    |> Enum.map(fn m ->
      m.__info__(:functions)
      |> Enum.filter(fn {f, _} -> String.starts_with?(to_string(f), "task_") end)
      |> Enum.map(fn {f, _} -> apply(m, f, []) end)
    end)
    |> List.flatten()
  end

  def tasks_info() do
    children = DynamicSupervisor.which_children(KaffyTaskSupervisor)

    Enum.map(children, fn {_, p, _, _} ->
      GenServer.call(p, :info)
    end)
  end
end