Packages
finitomata
0.18.2
0.41.0
0.40.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.30.3
0.30.2
0.30.1
0.30.0
0.29.10
0.29.9
0.29.8
0.29.7
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.7
0.23.6
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.1
0.1.0
The FSM implementation generated from PlantUML textual representation.
Current section
Files
Jump to
Current section
Files
lib/finitomata/distributed/cluster_info/naive.ex
defmodule Finitomata.ClusterInfo.Naive do
@moduledoc false
@behaviour Finitomata.ClusterInfo
@impl Finitomata.ClusterInfo
def nodes, do: [node() | Node.list()]
@impl Finitomata.ClusterInfo
def whois(id) do
:rand.seed(:exsss, term_to_seed(id))
Enum.random(nodes())
end
@spec term_to_seed(term(), integer()) :: integer()
defp term_to_seed(term, default \\ 42)
defp term_to_seed(term, default) when is_binary(term) do
term
|> :binary.encode_hex()
|> Integer.parse(16)
|> case do
{result, _tail} -> result
:error -> default
end
end
defp term_to_seed({nil, term}, default) when is_binary(term) do
term_to_seed(term, default)
end
defp term_to_seed({id, term}, default) when is_atom(id) and is_binary(term) do
term_to_seed("#{id}-#{term}", default)
end
defp term_to_seed(term, default) do
:md5
|> :crypto.hash(:erlang.term_to_binary(term))
|> term_to_seed(default)
end
end