diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/farside.ex | 45 | ||||
| -rw-r--r-- | lib/farside/router.ex | 18 |
2 files changed, 61 insertions, 2 deletions
diff --git a/lib/farside.ex b/lib/farside.ex new file mode 100644 index 0000000..9432406 --- /dev/null +++ b/lib/farside.ex @@ -0,0 +1,45 @@ +defmodule Farside do + @service_prefix Application.fetch_env!(:farside, :service_prefix) + + def get_services_map do + {:ok, redis_keys} = Redix.command(:redix, ["KEYS", "*"]) + + # Extract only service related keys + service_list = + Enum.filter( + redis_keys, + fn key -> + String.starts_with?(key, @service_prefix) + end + ) + + # Match service name to list of available instances + Enum.reduce(service_list, %{}, fn service, acc -> + {:ok, instance_list} = + Redix.command( + :redix, + ["LRANGE", service, "0", "-1"] + ) + + Map.put( + acc, + String.replace_prefix( + service, + @service_prefix, + "" + ), + instance_list + ) + end) + end + + def get_last_updated do + {:ok, last_updated} = + Redix.command( + :redix, + ["GET", "last_updated"] + ) + + last_updated + end +end diff --git a/lib/farside/router.ex b/lib/farside/router.ex index 95d9b41..82b3757 100644 --- a/lib/farside/router.ex +++ b/lib/farside/router.ex @@ -1,5 +1,7 @@ defmodule Farside.Router do + @index Application.fetch_env!(:farside, :index) @fallback_str Application.fetch_env!(:farside, :fallback_str) + @service_prefix Application.fetch_env!(:farside, :service_prefix) use Plug.Router @@ -7,7 +9,14 @@ defmodule Farside.Router do plug(:dispatch) get "/" do - send_resp(conn, 200, "") + resp = + EEx.eval_file( + @index, + last_updated: Farside.get_last_updated(), + services: Farside.get_services_map() + ) + + send_resp(conn, 200, resp) end get "/ping" do @@ -22,7 +31,12 @@ defmodule Farside.Router do {:ok, instances} = Redix.command( :redix, - ["LRANGE", service, "0", "-1"] + [ + "LRANGE", + "#{@service_prefix}#{service}", + "0", + "-1" + ] ) # Either pick a random available instance, |
