summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBen Busby <noreply+git@benbusby.com>2021-10-22 20:07:07 -0600
committerBen Busby <noreply+git@benbusby.com>2021-10-22 20:07:07 -0600
commit76faebd234644d77429ddcefaf8ccdb8a1beff0d (patch)
treefc0dae3dc4940aa5d84878fa0ed8b27b598e1c42 /lib
parent9a6d68021310a75638a664c2f3716e32ed5980df (diff)
downloadfarside-76faebd234644d77429ddcefaf8ccdb8a1beff0d.tar.gz
Move constants to config, update string formatting
Not sure if this is the Elixir-y way to do this, but seems more logical than hardcoding values such as redis connection. Also went through and improved how string formatting was performed throughout the app. Rather than "combining" <> "strings" this way, I'm now just doing "#${variable}#{formatting}", which looks a lot cleaner.
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