Packages
electric
1.0.23
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.16
1.4.16-beta-1
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
retired
1.1.5
retired
1.1.4
retired
1.1.3
retired
1.1.2
1.1.1
1.1.0
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.15
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-beta.23
1.0.0-beta.22
1.0.0-beta.20
1.0.0-beta.19
1.0.0-beta.18
1.0.0-beta.17
1.0.0-beta.16
1.0.0-beta.15
1.0.0-beta.14
1.0.0-beta.13
1.0.0-beta.12
1.0.0-beta.11
1.0.0-beta.10
1.0.0-beta.9
1.0.0-beta.8
1.0.0-beta.7
1.0.0-beta.6
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.5.2
0.4.4
Postgres sync engine. Sync little subsets of your Postgres data into local apps and services.
Current section
Files
Jump to
Current section
Files
lib/electric/process_registry.ex
defmodule Electric.ProcessRegistry do
defguardp is_stack_id(stack_id) when is_binary(stack_id)
@spec child_spec([Registry.start_option()]) :: Supervisor.child_spec()
def child_spec(options) do
%{
id: registry_name(Keyword.fetch!(options, :stack_id)),
start: {__MODULE__, :start_link, [options]},
type: :supervisor
}
end
def start_link(opts) do
opts =
opts
|> Keyword.put_new(:name, registry_name(Keyword.fetch!(opts, :stack_id)))
|> Keyword.put(:keys, :unique)
Registry.start_link(opts)
end
def registry_name(stack_id) when is_stack_id(stack_id),
do: :"#{inspect(__MODULE__)}:#{stack_id}"
def name(opts_or_stack_id, key, sub_key \\ nil)
def name(opts, key, sub_key) when is_list(opts) or is_map(opts) do
opts
|> Access.fetch!(:stack_id)
|> name(key, sub_key)
end
def name(stack_id, key, sub_key) when is_stack_id(stack_id) do
{:via, Registry, {registry_name(stack_id), {key, sub_key}}}
end
def alive?(stack_id, key, sub_key \\ nil) do
case GenServer.whereis(name(stack_id, key, sub_key)) do
nil -> false
_ -> true
end
rescue
# if the registry is not started, whereis will raise - we can
# assume that the process is not alive
ArgumentError -> false
end
end