1
0
Fork 0
mirror of https://github.com/benbusby/farside.git synced 2025-04-29 23:20:03 +00:00

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.
This commit is contained in:
Ben Busby 2021-10-22 20:07:07 -06:00
parent 9a6d680213
commit 76faebd234
No known key found for this signature in database
GPG key ID: 339B7B7EB5333D14
4 changed files with 51 additions and 22 deletions

View file

@ -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]

View file

@ -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