defmodule ShardWeb.PageController do
use ShardWeb, :controller
def peer_list(conn, _params) do
render conn, "peer_list.html"
end
def shard_list(conn, _params) do
render conn, "shard_list.html"
end
def shard_action(conn, %{"shard_id" => shard_id, "action" => action}) do
shard_id = Base.decode16! shard_id
case action do
"delete" -> Shard.Manager.delete(shard_id)
end
redirect conn, to: page_path(conn, :shard_list)
end
def add_peer(conn, _params) do
try do
ip = conn.params["ip"]
port = conn.params["port"]
{:ok, ip_tuple} = case :inet.parse_address(to_charlist(ip)) do
{:ok, tup} -> {:ok, tup}
_ ->
case :inet.gethostbyname(to_charlist(ip)) do
{:ok, {:hostent, _, _, :inet, 4, [ip_tup | _]}} -> {:ok, ip_tup}
_ -> :error
end
end
{port_num, _} = Integer.parse port
SNet.Manager.add_peer({:inet, ip_tuple, port_num})
rescue
_ -> nil
end
redirect conn, to: page_path(conn, :peer_list)
end
end