summaryrefslogtreecommitdiff
path: root/update.exs
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 /update.exs
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 'update.exs')
-rw-r--r--update.exs36
1 files changed, 20 insertions, 16 deletions
diff --git a/update.exs b/update.exs
index 65110f6..9ed320d 100644
--- a/update.exs
+++ b/update.exs
@@ -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()