summaryrefslogtreecommitdiff
path: root/lib/farside.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/farside.ex')
-rw-r--r--lib/farside.ex31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/farside.ex b/lib/farside.ex
index f87706a..0595e33 100644
--- a/lib/farside.ex
+++ b/lib/farside.ex
@@ -1,5 +1,6 @@
defmodule Farside do
@service_prefix Application.fetch_env!(:farside, :service_prefix)
+ @fallback_str Application.fetch_env!(:farside, :fallback_str)
def get_services_map do
{:ok, service_list} = Redix.command(:redix, ["KEYS", "#{@service_prefix}*"])
@@ -24,6 +25,36 @@ defmodule Farside do
end)
end
+ def pick_instance(service) do
+ {:ok, instances} =
+ Redix.command(
+ :redix,
+ [
+ "LRANGE",
+ "#{@service_prefix}#{service}",
+ "0",
+ "-1"
+ ]
+ )
+
+ # Either pick a random available instance,
+ # or fall back to the default one
+ instance =
+ if Enum.count(instances) > 0 do
+ Enum.random(instances)
+ else
+ {:ok, result} =
+ Redix.command(
+ :redix,
+ ["GET", "#{service}#{@fallback_str}"]
+ )
+
+ result
+ end
+
+ instance
+ end
+
def get_last_updated do
{:ok, last_updated} =
Redix.command(