Current section

Files

Jump to
step_flow lib step_flow controllers black_list.ex
Raw

lib/step_flow/controllers/black_list.ex

defmodule StepFlow.Controllers.BlackList do
require Logger
import Ecto.Query, warn: false
alias StepFlow.Amqp.CommonEmitter
alias StepFlow.Jobs.Job
alias StepFlow.Jobs.Status
alias StepFlow.NotificationHooks.NotificationHookManager
alias StepFlow.Repo
@moduledoc false
def get! do
from(job in Job, where: job.in_black_list == true, order_by: [desc: :id])
|> Repo.all()
|> Enum.map(fn job -> job.id end)
|> Enum.sort()
end
def add!(job_id) when is_bitstring(job_id) do
{job_id, _} = Integer.parse(job_id)
add!(job_id)
end
def add!(job_id) do
job = StepFlow.Jobs.get_job!(job_id)
job
|> Job.changeset(%{in_black_list: true})
|> Repo.update!()
get!()
end
def add_and_notify!(job_id) do
black_list = add!(job_id)
CommonEmitter.publish(
"",
get_json_add_message(job_id),
[headers: [broadcast: "true"]],
"direct_messaging"
)
black_list
end
def contains?(job_id) when is_bitstring(job_id) do
{job_id, _} = Integer.parse(job_id)
contains?(job_id)
end
def contains?(job_id) do
get!()
|> Enum.any?(fn id -> id == job_id end)
end
def delete!(job_id) when is_bitstring(job_id) do
{job_id, _} = Integer.parse(job_id)
delete!(job_id)
end
def delete!(job_id) do
job = StepFlow.Jobs.get_job!(job_id)
job
|> Job.changeset(%{in_black_list: false})
|> Repo.update!()
{:ok, _status} = Status.set_job_status(job_id, :dropped)
NotificationHookManager.notification_from_job(job_id)
get!()
end
def delete_and_notify!(job_id) do
black_list = delete!(job_id)
CommonEmitter.publish(
"",
get_json_delete_message(job_id),
[headers: [broadcast: "true"]],
"direct_messaging"
)
black_list
end
def get_sync_message do
%{
type: "sync_black_list"
}
end
def get_json_sync_message do
Poison.encode!(get_sync_message())
end
def get_request_message do
%{
type: "get_black_list"
}
end
def get_json_request_message do
Poison.encode!(get_request_message())
end
def get_add_message(job_id) when is_bitstring(job_id) do
{job_id, _} = Integer.parse(job_id)
get_add_message(job_id)
end
def get_add_message(job_id) do
%{
type: "add_to_black_list",
job_id: job_id
}
end
def get_json_add_message(job_id) do
Poison.encode!(get_add_message(job_id))
end
def get_delete_message(job_id) when is_bitstring(job_id) do
{job_id, _} = Integer.parse(job_id)
get_delete_message(job_id)
end
def get_delete_message(job_id) do
%{
type: "delete_from_black_list",
job_id: job_id
}
end
def get_json_delete_message(job_id) do
Poison.encode!(get_delete_message(job_id))
end
end