summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/privacy_revolver/application.ex3
-rw-r--r--lib/privacy_revolver/router.ex27
2 files changed, 24 insertions, 6 deletions
diff --git a/lib/privacy_revolver/application.ex b/lib/privacy_revolver/application.ex
index e303646..04b7540 100644
--- a/lib/privacy_revolver/application.ex
+++ b/lib/privacy_revolver/application.ex
@@ -1,4 +1,5 @@
defmodule PrivacyRevolver.Application do
+ @redis_conn Application.fetch_env!(:privacy_revolver, :redis_conn)
@moduledoc false
use Application
@@ -7,7 +8,7 @@ defmodule PrivacyRevolver.Application do
def start(_type, _args) do
children = [
Plug.Cowboy.child_spec(scheme: :http, plug: PrivacyRevolver.Router, options: [port: 4001]),
- {Redix, {"redis://localhost:6379", [name: :redix]}}
+ {Redix, {@redis_conn, [name: :redix]}}
]
opts = [strategy: :one_for_one, name: PrivacyRevolver.Supervisor]
diff --git a/lib/privacy_revolver/router.ex b/lib/privacy_revolver/router.ex
index c2c1c61..7d4e82f 100644
--- a/lib/privacy_revolver/router.ex
+++ b/lib/privacy_revolver/router.ex
@@ -1,9 +1,15 @@
defmodule PrivacyRevolver.Router do
+ @fallback_str Application.fetch_env!(:privacy_revolver, :fallback_str)
+
use Plug.Router
plug :match
plug :dispatch
+ get "/" do
+ send_resp(conn, 200, "")
+ end
+
get "/ping" do
# Useful for app healthcheck
{:ok, resp} = Redix.command(:redix, ["PING"])
@@ -11,19 +17,30 @@ defmodule PrivacyRevolver.Router do
end
get "/:service/*glob" do
- full_path = "/" <> Enum.join(glob, "/")
- {:ok, instances} = Redix.command(:redix, ["LRANGE", service, "0", "-1"])
+ path = Enum.join(glob, "/")
+ {:ok, instances} = Redix.command(
+ :redix,
+ ["LRANGE", service, "0", "-1"]
+ )
- # Either pick a random available instance, or fall back to the default one
+ # Either pick a random available instance,
+ # or fall back to the default one
instance = if Enum.count(instances) > 0 do
Enum.random(instances)
else
- Redix.command(:redix, ["GET", service <> "-fallback"])
+ {:ok, result} = Redix.command(
+ :redix,
+ ["GET", "#{service}#{@fallback_str}"]
+ )
+ result
end
# Redirect to the available instance
conn |>
Plug.Conn.resp(:found, "") |>
- Plug.Conn.put_resp_header("location", instance <> full_path)
+ Plug.Conn.put_resp_header(
+ "location",
+ "#{instance}/#{path}"
+ )
end
end