diff options
| author | Ben Busby <contact@benbusby.com> | 2021-11-29 16:25:00 -0700 |
|---|---|---|
| committer | Ben Busby <contact@benbusby.com> | 2021-11-29 16:31:55 -0700 |
| commit | 04388fcf3cb30626ad117cb8833be4ac6615a966 (patch) | |
| tree | 1894f7a51373e121b73f3ca523149e2d80a7535c /lib | |
| parent | 17f83649c1ede9520d426561f662a3744cdebc0c (diff) | |
| download | farside-04388fcf3cb30626ad117cb8833be4ac6615a966.tar.gz | |
Use format str for search engine queries
Although the current list of queries is only 2 elements ("time" and
"weather"), this allows searches for Whoogle and Searx to be slightly
more random, and potentially avoid any issues with their parent engine
rate limiting them.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/farside/application.ex | 32 | ||||
| -rw-r--r-- | lib/farside/instances.ex | 33 | ||||
| -rw-r--r-- | lib/farside/server.ex | 2 |
3 files changed, 42 insertions, 25 deletions
diff --git a/lib/farside/application.ex b/lib/farside/application.ex index 7427e89..8ccdc58 100644 --- a/lib/farside/application.ex +++ b/lib/farside/application.ex @@ -7,23 +7,25 @@ defmodule Farside.Application do @impl true def start(_type, _args) do - - plug_children = System.get_env("FARSIDE_NO_ROUTER") && [] || [ - Plug.Cowboy.child_spec( - scheme: :http, - plug: Farside.Router, - options: [ - port: @farside_port + plug_children = + (System.get_env("FARSIDE_NO_ROUTER") && []) || + [ + Plug.Cowboy.child_spec( + scheme: :http, + plug: Farside.Router, + options: [ + port: @farside_port + ] + ), + {PlugAttack.Storage.Ets, name: Farside.Throttle.Storage, clean_period: 60_000} ] - ), - {PlugAttack.Storage.Ets, name: Farside.Throttle.Storage, clean_period: 60_000} - ] - children = [ - {Redix, {@redis_conn, [name: :redix]}}, - Farside.Scheduler, - Farside.Server - ] ++ plug_children + children = + [ + {Redix, {@redis_conn, [name: :redix]}}, + Farside.Scheduler, + Farside.Server + ] ++ plug_children opts = [strategy: :one_for_one, name: Farside.Supervisor] Supervisor.start_link(children, opts) diff --git a/lib/farside/instances.ex b/lib/farside/instances.ex index a451026..c8e7611 100644 --- a/lib/farside/instances.ex +++ b/lib/farside/instances.ex @@ -4,6 +4,7 @@ defmodule Farside.Instances do @services_json Application.fetch_env!(:farside, :services_json) @service_prefix Application.fetch_env!(:farside, :service_prefix) @headers Application.fetch_env!(:farside, :headers) + @queries Application.fetch_env!(:farside, :queries) def sync() do File.rename(@update_file, "#{@update_file}-prev") @@ -21,11 +22,13 @@ defmodule Farside.Instances do cond do System.get_env("FARSIDE_TEST") -> :good + true -> case HTTPoison.get(url, @headers) do {:ok, %HTTPoison.Response{status_code: 200}} -> # TODO: Add validation of results, not just status code :good + _ -> :bad end @@ -38,11 +41,20 @@ defmodule Farside.Instances do # Loop through all instances and check each for availability for service <- json do - IO.puts "======== " <> service.type - result = Enum.filter(service.instances, fn(instance_url) -> - IO.puts " " <> instance_url - request(instance_url <> service.test_url) == :good - end) + IO.puts("======== " <> service.type) + + result = + Enum.filter(service.instances, fn instance_url -> + request_url = instance_url <> + EEx.eval_string( + service.test_url, + query: Enum.random(@queries) + ) + + IO.puts(" " <> request_url) + + request(request_url) == :good + end) add_to_redis(service, result) log_results(service.type, result) @@ -57,10 +69,13 @@ defmodule Farside.Instances do ]) # Update with new list of available instances - Redix.command(:redix, [ - "LPUSH", - "#{@service_prefix}#{service.type}" - ] ++ instances) + Redix.command( + :redix, + [ + "LPUSH", + "#{@service_prefix}#{service.type}" + ] ++ instances + ) # Set fallback to one of the available instances, # or the default instance if all are "down" diff --git a/lib/farside/server.ex b/lib/farside/server.ex index 1d5bb76..61aff40 100644 --- a/lib/farside/server.ex +++ b/lib/farside/server.ex @@ -13,7 +13,7 @@ defmodule Farside.Server do Farside.Scheduler.new_job() |> Quantum.Job.set_name(:sync) |> Quantum.Job.set_schedule(~e[*/5 * * * *]) - |> Quantum.Job.set_task(fn -> Farside.Instances.sync end) + |> Quantum.Job.set_task(fn -> Farside.Instances.sync() end) |> Farside.Scheduler.add_job() end |
