Packages
step_flow
1.2.0
1.9.0-rc2
1.9.0-rc1
1.9.0-rc0
1.8.2
1.8.1
1.8.1-rc8
1.8.1-rc7
1.8.1-rc6
1.8.1-rc5
1.8.1-rc4
1.8.1-rc3
1.8.1-rc2
1.8.1-rc1
1.8.1-rc0
1.8.0
1.8.0-rc3
1.8.0-rc2
1.8.0-rc1
1.8.0-rc0
1.7.3
1.7.3-rc4
1.7.3-rc3
1.7.3-rc2
1.7.3-rc1
1.7.3-rc0
1.7.2
1.7.2-rc4
1.7.2-rc3
1.7.2-rc2
1.7.2-rc1
1.7.2-rc0
1.7.1
1.7.0
1.7.0-rc1
1.7.0-rc0
1.6.1
1.6.1-rc1
1.6.1-rc0
1.6.0
1.6.0-rc9
1.6.0-rc8
1.6.0-rc7
1.6.0-rc6
1.6.0-rc5
1.6.0-rc4
1.6.0-rc3
1.6.0-rc20
1.6.0-rc2
1.6.0-rc19
1.6.0-rc18
1.6.0-rc17
1.6.0-rc16
1.6.0-rc15
1.6.0-rc14
1.6.0-rc13
1.6.0-rc12
1.6.0-rc11
1.6.0-rc10
1.6.0-rc1
1.5.0
1.5.0-rc1
1.4.2-rc2
1.4.2-rc1
1.4.1
1.4.1-rc1
1.4.0
1.4.0-rc4
1.4.0-rc3
1.4.0-rc2
1.4.0-rc1
1.3.1
1.3.0
1.3.0-rc
1.2.0
1.1.0
1.0.0
1.0.0-rc9
1.0.0-rc8
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc1
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.4
0.0.3
0.0.2
0.0.1
Step flow manager for Elixir applications
Current section
Files
Jump to
Current section
Files
lib/step_flow/live_workers/live_workers.ex
defmodule StepFlow.LiveWorkers do
@moduledoc """
The LiveWorkers context.
"""
import Ecto.Query, warn: false
alias StepFlow.Repo
alias StepFlow.LiveWorkers.LiveWorker
@doc """
Returns the list of Live Worker.
## Examples
iex> StepFlow.LiveWorkers.list_live_workers()
%{data: [], page: 0, size: 10, total: 0}
"""
def list_live_workers(params \\ %{}) do
page =
Map.get(params, "page", 0)
|> StepFlow.Integer.force()
size =
Map.get(params, "size", 10)
|> StepFlow.Integer.force()
offset = page * size
query =
from(live_worker in LiveWorker)
|> filter_initializing(params)
|> filter_started(params)
|> filter_terminated(params)
total_query = from(item in query, select: count(item.id))
total =
Repo.all(total_query)
|> List.first()
query =
from(
job in query,
order_by: [desc: :inserted_at],
offset: ^offset,
limit: ^size
)
jobs = Repo.all(query)
%{
data: jobs,
total: total,
page: page,
size: size
}
end
@doc """
Creates a Live Worker entry.
## Examples
iex> create_live_worker(%{field: value})
{:ok, %LiveWorker{}}
iex> create_live_worker(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_live_worker(attrs \\ %{}) do
%LiveWorker{}
|> LiveWorker.changeset(attrs)
|> Repo.insert()
end
@doc """
Gets a single live worker by job ID
## Examples
iex> get_by!(123)
%LiveWorker{}
iex> get_by!(456)
nil
"""
def get_by!(%{"job_id" => job_id}) do
Repo.get_by!(LiveWorker, job_id: job_id)
end
@doc """
Gets a single live worker by job ID
## Examples
iex> get_by(%{"job_id" => 123})
%LiveWorker{}
iex> get_by(%{"job_id" => 456})
nil
"""
def get_by(%{"job_id" => job_id}) do
Repo.get_by(LiveWorker, job_id: job_id)
end
@doc """
Updates a live worker.
## Examples
iex> update_live_worker(job, %{field: new_value})
{:ok, %LiveWorker{}}
iex> update_live_worker(job, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_live_worker(%LiveWorker{} = live_worker, attrs) do
live_worker
|> LiveWorker.changeset(attrs)
|> Repo.update()
end
@doc """
Deletes a LiveWorker.
## Examples
iex> delete_live_worker(live_worker)
{:ok, %LiveWorker{}}
iex> delete_live_worker(live_worker)
{:error, %Ecto.Changeset{}}
"""
def delete_live_worker(%LiveWorker{} = live_worker) do
Repo.delete(live_worker)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking live worker changes.
## Examples
iex> change_live_worker(job)
%Ecto.Changeset{source: %LiveWorker{}}
"""
def change_live_worker(%LiveWorker{} = live_worker) do
LiveWorker.changeset(live_worker, %{})
end
defp filter_initializing(query, params) do
case Map.get(params, "initializing") do
nil ->
from(worker in query)
_ ->
from(
worker in query,
where:
(fragment("? = array[]::character varying[]", worker.ips) or
is_nil(worker.creation_date)) and
is_nil(worker.termination_date)
)
end
end
defp filter_started(query, params) do
case Map.get(params, "started") do
nil ->
from(worker in query)
_ ->
from(
worker in query,
where:
fragment("array_length(?, 1)", worker.ips) > 0 and
not is_nil(worker.creation_date) and
is_nil(worker.termination_date)
)
end
end
defp filter_terminated(query, params) do
case Map.get(params, "terminated") do
nil ->
from(worker in query)
_ ->
from(
worker in query,
where: not is_nil(worker.termination_date)
)
end
end
end