diff options
| author | Ben Busby <noreply+git@benbusby.com> | 2021-11-08 17:08:19 -0700 |
|---|---|---|
| committer | Ben Busby <noreply+git@benbusby.com> | 2021-11-08 17:08:19 -0700 |
| commit | 56b9c52528d1e514d4ec15f1da7517cd83bcf5ff (patch) | |
| tree | b7a5c0f8015bba7b47fb1e72577ea4eb9c7e99c2 /lib/farside.ex | |
| parent | 8042dcad0c61110111949a856c935325ca65f8ef (diff) | |
| download | farside-56b9c52528d1e514d4ec15f1da7517cd83bcf5ff.tar.gz | |
Display list of available instances on home page
This introduces a number of new changes:
- Services are now inserted into redis with a prefix prepended to the
key name. This allows for easier filtering to get only live instances.
- The home page now uses an eex template for displaying all live
instances for every service, determined by the last update
- A "last_updated" field was added
- farside.ex was added to contain all functionality related to querying
for instances (WIP)
- Other improvements
Diffstat (limited to 'lib/farside.ex')
| -rw-r--r-- | lib/farside.ex | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/farside.ex b/lib/farside.ex new file mode 100644 index 0000000..9432406 --- /dev/null +++ b/lib/farside.ex @@ -0,0 +1,45 @@ +defmodule Farside do + @service_prefix Application.fetch_env!(:farside, :service_prefix) + + def get_services_map do + {:ok, redis_keys} = Redix.command(:redix, ["KEYS", "*"]) + + # Extract only service related keys + service_list = + Enum.filter( + redis_keys, + fn key -> + String.starts_with?(key, @service_prefix) + end + ) + + # Match service name to list of available instances + Enum.reduce(service_list, %{}, fn service, acc -> + {:ok, instance_list} = + Redix.command( + :redix, + ["LRANGE", service, "0", "-1"] + ) + + Map.put( + acc, + String.replace_prefix( + service, + @service_prefix, + "" + ), + instance_list + ) + end) + end + + def get_last_updated do + {:ok, last_updated} = + Redix.command( + :redix, + ["GET", "last_updated"] + ) + + last_updated + end +end |
