feat: work on completing the lua scripting capabilities
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -23,6 +23,18 @@ defmodule BDS.Tasks do
|
||||
GenServer.call(__MODULE__, :status_snapshot)
|
||||
end
|
||||
|
||||
def list_tasks do
|
||||
GenServer.call(__MODULE__, :list_tasks)
|
||||
end
|
||||
|
||||
def list_running_tasks do
|
||||
GenServer.call(__MODULE__, :list_running_tasks)
|
||||
end
|
||||
|
||||
def clear_completed do
|
||||
GenServer.call(__MODULE__, :clear_completed)
|
||||
end
|
||||
|
||||
def cancel_task(task_id) when is_binary(task_id) do
|
||||
GenServer.call(__MODULE__, {:cancel_task, task_id})
|
||||
end
|
||||
@@ -75,6 +87,23 @@ defmodule BDS.Tasks do
|
||||
{:reply, build_status_snapshot(state), state}
|
||||
end
|
||||
|
||||
def handle_call(:list_tasks, _from, state) do
|
||||
{:reply, all_tasks(state) |> Enum.map(&public_task/1), state}
|
||||
end
|
||||
|
||||
def handle_call(:list_running_tasks, _from, state) do
|
||||
{:reply, running_tasks(state) |> Enum.map(&public_task/1), state}
|
||||
end
|
||||
|
||||
def handle_call(:clear_completed, _from, state) do
|
||||
next_tasks =
|
||||
state.tasks
|
||||
|> Enum.reject(fn {_task_id, task} -> task.status == :completed end)
|
||||
|> Map.new()
|
||||
|
||||
{:reply, :ok, %{state | tasks: next_tasks}}
|
||||
end
|
||||
|
||||
def handle_call({:cancel_task, task_id}, _from, state) do
|
||||
cond do
|
||||
Map.has_key?(state.running, task_id) ->
|
||||
@@ -330,6 +359,19 @@ defmodule BDS.Tasks do
|
||||
|> Enum.sort_by(&task_sort_key/1)
|
||||
end
|
||||
|
||||
defp all_tasks(state) do
|
||||
state.tasks
|
||||
|> Map.values()
|
||||
|> Enum.sort_by(&DateTime.to_unix(&1.created_at, :microsecond), :desc)
|
||||
end
|
||||
|
||||
defp running_tasks(state) do
|
||||
state.tasks
|
||||
|> Map.values()
|
||||
|> Enum.filter(&(&1.status == :running))
|
||||
|> Enum.sort_by(&task_sort_key/1)
|
||||
end
|
||||
|
||||
defp task_sort_key(task) do
|
||||
{task_priority(task.status), task.started_at || task.created_at}
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user