Current section
Files
Jump to
Current section
Files
lib/gust/dag/loader/dir.ex
defmodule Gust.DAG.Loader.Dir do
@moduledoc false
alias Gust.Flows
alias Gust.DAG.Parser
@behaviour Gust.DAG.Loader
def load(dags_folder) do
dags = Flows.list_dags()
found_dags =
ex_files(dags_folder)
|> Enum.map(&"#{Path.absname(dags_folder)}/#{&1}")
|> Enum.filter(&Parser.maybe_using_dsl(&1))
|> Enum.reject(&is_nil/1)
|> Enum.map(&(&1 |> Path.basename() |> Path.rootname()))
|> Enum.map(&get_or_create_dag(&1))
removed_dags = (dags -- found_dags) |> Enum.map(&Flows.delete_dag!(&1))
{found_dags, removed_dags}
end
def get_definitions() do
Gust.DAG.Loader.Worker.get_definitions()
end
def reload_definition(dag_id) do
Gust.DAG.Loader.Worker.reload_definition(dag_id)
end
defp ex_files(folder) do
folder
|> File.ls!()
|> Enum.filter(&Parser.maybe_ex_file(&1))
end
defp get_or_create_dag(name) do
case Flows.get_dag_by_name(name) do
%Flows.Dag{} = dag ->
dag
nil ->
{:ok, dag} = Flows.create_dag(%{name: name})
dag
end
end
end