diff --git a/.github/workflows/elixir.yml b/.github/workflows/elixir.yml index e5439f3..8adbd87 100644 --- a/.github/workflows/elixir.yml +++ b/.github/workflows/elixir.yml @@ -28,9 +28,6 @@ jobs: key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }} restore-keys: ${{ runner.os }}-mix- - - name: Start Redis - uses: supercharge/redis-github-action@1.2.0 - - name: Install dependencies run: mix deps.get diff --git a/.gitignore b/.gitignore index e4f7466..f83d69f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ erl_crash.dump *.rdb .idea/ *.iml +*.cub diff --git a/README.md b/README.md index c847aaf..8ca013b 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ distribute traffic more evenly across all instances and avoid performance bottlenecks and rate-limiting. Farside also integrates smoothly with basic redirector extensions in most -browsers. For an simple example setup, +browsers. For an simple example setup, [refer to the wiki](https://github.com/benbusby/farside/wiki/Browser-Extension). ## Demo @@ -126,8 +126,6 @@ Farside's routing is very minimal, with only the following routes: - `/` - The app home page, displaying all live instances for every service -- `/ping` - - A passthrough "ping" to redis to ensure both app and redis are working - `/:service/*glob` - The main endpoint for redirecting a user to a working instance of a particular service with the specified path @@ -147,8 +145,8 @@ Farside's routing is very minimal, with only the following routes: - *Note: Uses Javascript to preserve the page in history* When a service is requested with the `/:service/...` endpoint, Farside requests -the list of working instances from Redis and returns a random one from the list -and adds that instance as a new entry in Redis to remove from subsequent +the list of working instances from the db and returns a random one from the list +and adds that instance as a new entry in the db to remove from subsequent requests for that service. For example: A user navigates to `/nitter` and is redirected to `nitter.net`. The next user @@ -178,12 +176,10 @@ that their mission to centralize the entire web behind their service ultimately goes against what Farside is trying to solve. Use at your own discretion. ## Development -- Install [redis](https://redis.io) - Install [elixir](https://elixir-lang.org/install.html) - (on Debian systems) Install [erlang-dev](https://packages.debian.org/sid/erlang-dev) -- Start redis: `redis-server` - Install dependencies: `mix deps.get` -- Initialize redis contents: `mix run -e Farside.Instances.sync` +- Initialize db contents: `mix run -e Farside.Instances.sync` - Run Farside: `mix run --no-halt` - Uses localhost:4001 @@ -203,8 +199,8 @@ goes against what Farside is trying to solve. Use at your own discretion. The port to run Farside on (default: `4001`) - FARSIDE_REDIS_PORT - The Redis server port to use (default: `6379`, same as the default for Redis) + FARSIDE_DATA_DIR + The path to the directory to use for storing instance data (default: `/tmp`) FARSIDE_SERVICES_JSON diff --git a/config/runtime.exs b/config/runtime.exs index e4491ff..e00feb8 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -2,5 +2,5 @@ import Config config :farside, port: System.get_env("FARSIDE_PORT", "4001"), - redis_conn: "redis://localhost:#{System.get_env("FARSIDE_REDIS_PORT", "6379")}", - services_json: System.get_env("FARSIDE_SERVICES_JSON", "services.json") + services_json: System.get_env("FARSIDE_SERVICES_JSON", "services.json"), + data_dir: System.get_env("FARSIDE_DATA_DIR", File.cwd!) diff --git a/lib/farside.ex b/lib/farside.ex index 8159e82..e680cdc 100644 --- a/lib/farside.ex +++ b/lib/farside.ex @@ -35,15 +35,14 @@ defmodule Farside do } def get_services_map do - {:ok, service_list} = Redix.command(:redix, ["KEYS", "#{@service_prefix}*"]) + service_list = CubDB.select(CubDB) + |> Stream.map(fn {key, _value} -> key end) + |> Stream.filter(fn key -> String.starts_with?(key, @service_prefix) end) + |> Enum.to_list # 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"] - ) + instance_list = CubDB.get(CubDB, service) Map.put( acc, @@ -58,7 +57,7 @@ defmodule Farside do end def get_service(service) do - # Check if service has an entry in Redis, otherwise try to + # Check if service has an entry in the db, otherwise try to # match against available parent services service_name = cond do !check_service(service) -> @@ -76,42 +75,18 @@ defmodule Farside do def check_service(service) do # Checks to see if a specific service has instances available - # in redis - {:ok, instances} = - Redix.command( - :redix, - [ - "LRANGE", - "#{@service_prefix}#{service}", - "0", - "-1" - ] - ) + instances = CubDB.get(CubDB, "#{@service_prefix}#{service}") - Enum.count(instances) > 0 + instances != nil && Enum.count(instances) > 0 end def last_instance(service) do # Fetches the last selected instance for a particular service - {:ok, previous} = - Redix.command( - :redix, - ["GET", "#{service}#{@previous_suffix}"] - ) - previous + CubDB.get(CubDB, "#{service}#{@previous_suffix}") end def pick_instance(service) do - {:ok, instances} = - Redix.command( - :redix, - [ - "LRANGE", - "#{@service_prefix}#{service}", - "0", - "-1" - ] - ) + instances = CubDB.get(CubDB, "#{@service_prefix}#{service}") # Either pick a random available instance, # or fall back to the default one @@ -127,21 +102,12 @@ defmodule Farside do Enum.filter(instances, &(&1 != last_instance(service))) |> Enum.random() - Redix.command( - :redix, - ["SET", "#{service}#{@previous_suffix}", instance] - ) + CubDB.put(CubDB, "#{service}#{@previous_suffix}", instance) instance end else - {:ok, result} = - Redix.command( - :redix, - ["GET", "#{service}#{@fallback_suffix}"] - ) - - result + CubDB.get(CubDB, "#{service}#{@fallback_suffix}") end instance end @@ -165,12 +131,6 @@ defmodule Farside do end def get_last_updated do - {:ok, last_updated} = - Redix.command( - :redix, - ["GET", "last_updated"] - ) - - last_updated + CubDB.get(CubDB, "last_updated") end end diff --git a/lib/farside/application.ex b/lib/farside/application.ex index 17750e4..cea7871 100644 --- a/lib/farside/application.ex +++ b/lib/farside/application.ex @@ -1,16 +1,13 @@ defmodule Farside.Application do - #@farside_port Application.fetch_env!(:farside, :port) - #@redis_conn Application.fetch_env!(:farside, :redis_conn) @moduledoc false use Application @impl true def start(_type, _args) do - redis_conn = Application.fetch_env!(:farside, :redis_conn) farside_port = Application.fetch_env!(:farside, :port) + data_dir = Application.fetch_env!(:farside, :data_dir) IO.puts "Running on http://localhost:#{farside_port}" - IO.puts "Redis conn: #{redis_conn}" children = [ Plug.Cowboy.child_spec( @@ -21,7 +18,7 @@ defmodule Farside.Application do ] ), {PlugAttack.Storage.Ets, name: Farside.Throttle.Storage, clean_period: 60_000}, - {Redix, {redis_conn, [name: :redix]}}, + {CubDB, [data_dir: data_dir, name: CubDB]}, Farside.Scheduler, Farside.Server ] diff --git a/lib/farside/instances.ex b/lib/farside/instances.ex index f37f306..c358d09 100644 --- a/lib/farside/instances.ex +++ b/lib/farside/instances.ex @@ -12,11 +12,7 @@ defmodule Farside.Instances do update() # Add UTC time of last update - Redix.command(:redix, [ - "SET", - "last_updated", - Calendar.strftime(DateTime.utc_now(), "%c") - ]) + CubDB.put(CubDB, "last_updated", Calendar.strftime(DateTime.utc_now(), "%c")) end def request(url) do @@ -69,41 +65,24 @@ defmodule Farside.Instances do request(request_url) == :good end) - add_to_redis(service, result) + add_to_db(service, result) log_results(service.type, result) end end - def add_to_redis(service, instances) do + def add_to_db(service, instances) do # Remove previous list of instances - Redix.command(:redix, [ - "DEL", - "#{@service_prefix}#{service.type}" - ]) + CubDB.delete(CubDB, "#{@service_prefix}#{service.type}") # Update with new list of available instances - Redix.command( - :redix, - [ - "LPUSH", - "#{@service_prefix}#{service.type}" - ] ++ instances - ) + CubDB.put(CubDB, "#{@service_prefix}#{service.type}", instances) # Set fallback to one of the available instances, # or the default instance if all are "down" if Enum.count(instances) > 0 do - Redix.command(:redix, [ - "SET", - "#{service.type}#{@fallback_suffix}", - Enum.random(instances) - ]) + CubDB.put(CubDB, "#{service.type}#{@fallback_suffix}", Enum.random(instances)) else - Redix.command(:redix, [ - "SET", - "#{service.type}#{@fallback_suffix}", - service.fallback - ]) + CubDB.put(CubDB, "#{service.type}#{@fallback_suffix}", service.fallback) end end diff --git a/lib/farside/router.ex b/lib/farside/router.ex index ed667e4..a11e07a 100644 --- a/lib/farside/router.ex +++ b/lib/farside/router.ex @@ -29,12 +29,6 @@ defmodule Farside.Router do send_resp(conn, 200, resp) end - get "/ping" do - # Useful for app healthcheck - {:ok, resp} = Redix.command(:redix, ["PING"]) - send_resp(conn, 200, resp) - end - get "/_/:service/*glob" do r_path = String.slice(conn.request_path, 2..-1) diff --git a/mix.exs b/mix.exs index 80cc121..13ddd3b 100644 --- a/mix.exs +++ b/mix.exs @@ -27,7 +27,7 @@ defmodule Farside.MixProject do {:plug_attack, "~> 0.4.2"}, {:plug_cowboy, "~> 2.0"}, {:quantum, "~> 3.0"}, - {:redix, "~> 1.1"} + {:cubdb, "~> 2.0.1"} ] end end diff --git a/mix.lock b/mix.lock index 5f327f5..a8e70df 100644 --- a/mix.lock +++ b/mix.lock @@ -1,29 +1,27 @@ %{ - "certifi": {:hex, :certifi, "2.8.0", "d4fb0a6bb20b7c9c3643e22507e42f356ac090a1dcea9ab99e27e0376d695eba", [:rebar3], [], "hexpm", "6ac7efc1c6f8600b08d625292d4bbf584e14847ce1b6b5c44d983d273e1097ea"}, + "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, - "crontab": {:hex, :crontab, "1.1.10", "dc9bb1f4299138d47bce38341f5dcbee0aa6c205e864fba7bc847f3b5cb48241", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "1347d889d1a0eda997990876b4894359e34bfbbd688acbb0ba28a2795ca40685"}, + "crontab": {:hex, :crontab, "1.1.11", "4028ced51b813a5061f85b689d4391ef0c27550c8ab09aaf139e4295c3d93ea4", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "ecb045f9ac14a3e2990e54368f70cdb6e2f2abafc5bc329d6c31f0c74b653787"}, + "cubdb": {:hex, :cubdb, "2.0.1", "24cab8fb4128df704c52ed641f5ed70af352f7a3a80cebbb44c3bbadc3fd5f45", [:mix], [], "hexpm", "57cf25aebfc34f4580d9075da06882b4fe3e0739f5353d4dcc213e9cc1b10cdf"}, "gen_stage": {:hex, :gen_stage, "1.1.2", "b1656cd4ba431ed02c5656fe10cb5423820847113a07218da68eae5d6a260c23", [:mix], [], "hexpm", "9e39af23140f704e2b07a3e29d8f05fd21c2aaf4088ff43cb82be4b9e3148d02"}, - "hackney": {:hex, :hackney, "1.18.0", "c4443d960bb9fba6d01161d01cd81173089686717d9490e5d3606644c48d121f", [:rebar3], [{:certifi, "~>2.8.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "9afcda620704d720db8c6a3123e9848d09c87586dc1c10479c42627b905b5c5e"}, - "httpoison": {:hex, :httpoison, "1.8.0", "6b85dea15820b7804ef607ff78406ab449dd78bed923a49c7160e1886e987a3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "28089eaa98cf90c66265b6b5ad87c59a3729bea2e74e9d08f9b51eb9729b3c3a"}, + "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~>2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"}, + "httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, - "jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"}, + "jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, - "mime": {:hex, :mime, "2.0.2", "0b9e1a4c840eafb68d820b0e2158ef5c49385d17fb36855ac6e7e087d4b1dcc5", [:mix], [], "hexpm", "e6a3f76b4c277739e36c2e21a2c640778ba4c3846189d5ab19f97f126df5f9b7"}, + "mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mustache": {:hex, :mustache, "0.3.1", "4c6ee79b13aae954035fe31b83c94480ddc7b536d09c44d4c65e61a9ead38d6b", [:mix], [], "hexpm", "8dc92b9b92a0d7449628f4fc981f8018a16a5b8c9907249e59db461482dac143"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, - "phoenix_view": {:hex, :phoenix_view, "1.0.0", "fea71ecaaed71178b26dd65c401607de5ec22e2e9ef141389c721b3f3d4d8011", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "82be3e2516f5633220246e2e58181282c71640dab7afc04f70ad94253025db0c"}, - "plug": {:hex, :plug, "1.12.1", "645678c800601d8d9f27ad1aebba1fdb9ce5b2623ddb961a074da0b96c35187d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d57e799a777bc20494b784966dc5fbda91eb4a09f571f76545b72a634ce0d30b"}, + "plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"}, "plug_attack": {:hex, :plug_attack, "0.4.3", "88e6c464d68b1491aa083a0347d59d58ba71a7e591a7f8e1b675e8c7792a0ba8", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "9ed6fb8a6f613a36040f2875130a21187126c5625092f24bc851f7f12a8cbdc1"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"}, - "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"}, - "poison": {:hex, :poison, "5.0.0", "d2b54589ab4157bbb82ec2050757779bfed724463a544b6e20d79855a9e43b24", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "11dc6117c501b80c62a7594f941d043982a1bd05a1184280c0d9166eb4d8d3fc"}, - "quantum": {:hex, :quantum, "3.4.0", "5a53c3c52b0d55f2323940232ba6ab4c98e7e14c73dfacbba3a1ed799b037ce5", [:mix], [{:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.14 or ~> 1.0", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d0eb64957d3dc49c8ed730cc2203108334226496535965b8dfa3f3dbcf430f87"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"}, + "plug_crypto": {:hex, :plug_crypto, "1.2.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"}, + "quantum": {:hex, :quantum, "3.5.0", "8d2c5ba68c55991e8975aca368e3ab844ba01f4b87c4185a7403280e2c99cf34", [:mix], [{:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.14 or ~> 1.0", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.2", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "cab737d1d9779f43cb1d701f46dd05ea58146fd96238d91c9e0da662c1982bb6"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, - "redix": {:hex, :redix, "1.1.4", "d66fc83d2d4f136c838568d1ec8b0c1a72acfcecfac88a40f86f60aaee883c93", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "515eff055b7de8967e835f4de22a6cfe8311bc1b8fe72f48200238fb43f6a803"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, - "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, + "telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"}, + "telemetry_registry": {:hex, :telemetry_registry, "0.3.0", "6768f151ea53fc0fbca70dbff5b20a8d663ee4e0c0b2ae589590e08658e76f1e", [:mix, :rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "492e2adbc609f3e79ece7f29fec363a97a2c484ac78a83098535d6564781e917"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, } diff --git a/test/farside_test.exs b/test/farside_test.exs index d47396e..8114e7c 100644 --- a/test/farside_test.exs +++ b/test/farside_test.exs @@ -40,13 +40,6 @@ defmodule FarsideTest do assert conn.status == 200 end - test "/ping" do - conn = test_conn("/ping") - assert conn.state == :sent - assert conn.status == 200 - assert conn.resp_body == "PONG" - end - test "/:service" do services_json = Application.fetch_env!(:farside, :services_json) {:ok, file} = File.read(services_json)