mirror of
https://github.com/benbusby/farside.git
synced 2025-03-15 03:36:33 -04:00

My initial thought for this: create a simple redis db for storing key value pairs of instance -> list of live instances for each privacy front end (libreddit, bibliogram, etc). A script executed on a certain schedule would (in the background) check each instance to make sure it isn't down or unreasonably slow. If the instance is available, add it to a list of available instances in the db. When a user navigates to the revolver url (something like <url>/<service>/<...>), the app would pick a random value from the list returned by redis.get('<service>') and forward the user to that instance. As a side note, this could instead load the instances json from a remote source (like github or something) so that changes to instances don't need to involve a redeploy of the entire app.
22 lines
413 B
Elixir
22 lines
413 B
Elixir
defmodule Instance do
|
|
defstruct [
|
|
instance_type: nil,
|
|
instance_list: []
|
|
]
|
|
end
|
|
|
|
defmodule Instances do
|
|
def update(filename) do
|
|
{:ok, file} = File.read(filename)
|
|
{:ok, json} = Poison.decode(file, as: [%Instance{}])
|
|
for x <- json do
|
|
IO.puts(x.instance_type)
|
|
for y <- x.instance_list do
|
|
IO.puts(" - " <> y)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Instances.update("instances.json")
|