summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Busby <contact@benbusby.com>2022-10-31 16:45:31 -0600
committerBen Busby <contact@benbusby.com>2022-10-31 16:45:31 -0600
commite58d6e23edd2cfc1da7feab3cfc2b09326b73bff (patch)
treee0f4681398dde168b5550b14122169122816b878
parent540822d8670540554f3aed16459d429eac9fac10 (diff)
downloadfarside-e58d6e23edd2cfc1da7feab3cfc2b09326b73bff.tar.gz
Remove Redis dep, replace w/ native Elixir lib
This removes the dependency on Redis for core app functionality. Rather than using the key/value store provided by Redis, Farside now uses a key/val store provided by [cubdb](https://github.com/lucaong/cubdb) for identical functionality but without reliance on a non-Elixir service. This solution was chosen instead of ets, because storing instance data in memory leads to a period of broken functionality whenever the app restarts and hasn't re-populated instance data yet. It was also chosen instead of dets, because the documentation for dets was pretty hard to understand at first glance. Tests and the CI build were updated to reflect the removed dependency on Redis. New environment variable `FARSIDE_DATA_DIR` can be used to point to a directory where the instance data can be stored by cubdb. Co-authored-by: Jason Clark <mithereal@gmail.com>
-rw-r--r--.github/workflows/elixir.yml3
-rw-r--r--.gitignore1
-rw-r--r--README.md16
-rw-r--r--config/runtime.exs4
-rw-r--r--lib/farside.ex66
-rw-r--r--lib/farside/application.ex7
-rw-r--r--lib/farside/instances.ex35
-rw-r--r--lib/farside/router.ex6
-rw-r--r--mix.exs2
-rw-r--r--mix.lock28
-rw-r--r--test/farside_test.exs7
11 files changed, 45 insertions, 130 deletions
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.
<td>The port to run Farside on (default: `4001`)</td>
</tr>
<tr>
- <td>FARSIDE_REDIS_PORT</td>
- <td>The Redis server port to use (default: `6379`, same as the default for Redis)</td>
+ <td>FARSIDE_DATA_DIR</td>
+ <td>The path to the directory to use for storing instance data (default: `/tmp`)</td>
</tr>
<tr>
<td>FARSIDE_SERVICES_JSON</td>
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)