From 04388fcf3cb30626ad117cb8833be4ac6615a966 Mon Sep 17 00:00:00 2001 From: Ben Busby Date: Mon, 29 Nov 2021 16:25:00 -0700 Subject: 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. --- lib/farside/application.ex | 32 +++++++++++++++++--------------- lib/farside/instances.ex | 33 ++++++++++++++++++++++++--------- lib/farside/server.ex | 2 +- 3 files changed, 42 insertions(+), 25 deletions(-) (limited to 'lib') 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 -- cgit v1.2.3