Packages
step_flow
1.8.0-rc0
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/amqp/supervisor.ex
defmodule StepFlow.Amqp.Supervisor do
require Logger
use Supervisor
@moduledoc """
Supervisor of Step Flow.
It manages AMQP connection to emit and consume messages as well as
manages the StepManager to drive workflows.
"""
alias StepFlow.Repo.Checker
@children [
StepFlow.Amqp.Connection,
StepFlow.Amqp.CompletedConsumer,
StepFlow.Amqp.ErrorConsumer,
StepFlow.Amqp.ProgressionConsumer,
StepFlow.Amqp.StoppedConsumer,
StepFlow.Amqp.WorkerDiscoveryConsumer,
StepFlow.Amqp.WorkerCreatedConsumer,
StepFlow.Amqp.WorkerInitializedConsumer,
StepFlow.Amqp.WorkerStartedConsumer,
StepFlow.Amqp.WorkerStatusConsumer,
StepFlow.Amqp.WorkerTerminatedConsumer,
StepFlow.Amqp.WorkerUpdatedConsumer
]
def child_spec(_) do
%{
id: StepFlow.Amqp.Supervisor,
start: {StepFlow.Amqp.Supervisor, :start_link, []},
type: :supervisor,
shutdown: 2_000
}
end
@doc false
def start_link do
Logger.info("#{__MODULE__} start_link")
supervisor = Supervisor.start_link(__MODULE__, [], name: __MODULE__)
if Checker.repo_running?() do
start_children()
end
supervisor
end
@doc false
def init(_) do
Logger.info("#{__MODULE__} init")
Supervisor.init([], strategy: :one_for_one)
end
def start_children do
@children
|> Enum.each(fn child ->
case StepFlow.ProcessManager.get_child_pid(StepFlow.Amqp.Supervisor, child) do
nil ->
{:ok, _pid} = Supervisor.start_child(StepFlow.Amqp.Supervisor, child)
:undefined ->
{:ok, _pid} = Supervisor.restart_child(StepFlow.Amqp.Supervisor, child)
:restarting ->
Logger.info("#{inspect(child)}} #{__MODULE__} child already restarting...")
pid ->
Logger.info("#{inspect(child)}} #{__MODULE__} child already running: #{inspect(pid)}")
end
end)
end
def stop_children do
@children
|> Enum.each(fn child ->
stop_child(child)
end)
end
defp stop_child(child) do
child.disconnect()
Supervisor.terminate_child(StepFlow.Amqp.Supervisor, child)
end
end