1
0
Fork 0
mirror of https://github.com/benbusby/farside.git synced 2025-05-03 17:10: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

@ -8,6 +8,15 @@ defmodule Service do
end
defmodule Instances do
@fallback_str Application.fetch_env!(:privacy_revolver, :fallback_str)
@update_file Application.fetch_env!(:privacy_revolver, :update_file)
@services_json Application.fetch_env!(:privacy_revolver, :services_json)
def init() do
File.rename(@update_file, "#{@update_file}-prev")
update(@services_json)
end
def request(url) do
case HTTPoison.get(url) do
{:ok, %HTTPoison.Response{status_code: 200}} ->
@ -19,10 +28,6 @@ defmodule Instances do
end
def update(filename) do
{:ok, conn} = Redix.start_link(
"redis://localhost:6379",
name: :redix
)
{:ok, file} = File.read(filename)
{:ok, json} = Poison.decode(file, as: [%Service{}])
@ -32,20 +37,20 @@ defmodule Instances do
request(instance_url <> service.test_url) == :good
end)
add_to_redis(conn, service, result)
add_to_redis(service, result)
log_results(service.type, result)
end
end
def add_to_redis(conn, service, instances) do
def add_to_redis(service, instances) do
# Remove previous list of instances
Redix.command(conn, [
Redix.command(:redix, [
"DEL",
service.type
])
# Update with new list of available instances
Redix.command(conn, [
Redix.command(:redix, [
"LPUSH",
service.type
] ++ instances)
@ -53,26 +58,25 @@ defmodule Instances do
# Set fallback to one of the available instances,
# or the default instance if all are "down"
if Enum.count(instances) > 0 do
Redix.command(conn, [
Redix.command(:redix, [
"SET",
service.type <> "-fallback",
"#{service.type}#{@fallback_str}",
Enum.random(instances)
])
else
Redix.command(conn, [
Redix.command(:redix, [
"SET",
service.type <> "-fallback",
"#{service.type}#{@fallback_str}",
service.fallback
])
end
end
def log_results(service_name, results) do
{:ok, file} = File.open(".update-results", [:append, {:delayed_write, 100, 20}])
IO.write(file, service_name <> ": " <> inspect(results) <> "\n")
{:ok, file} = File.open(@update_file, [:append, {:delayed_write, 100, 20}])
IO.write(file, "#{service_name}: #{inspect(results)}\n")
File.close(file)
end
end
File.rename(".update-results", ".update-results-prev")
Instances.update("services.json")
Instances.init()