summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBen Busby <contact@benbusby.com>2021-11-29 16:25:00 -0700
committerBen Busby <contact@benbusby.com>2021-11-29 16:31:55 -0700
commit04388fcf3cb30626ad117cb8833be4ac6615a966 (patch)
tree1894f7a51373e121b73f3ca523149e2d80a7535c /lib
parent17f83649c1ede9520d426561f662a3744cdebc0c (diff)
downloadfarside-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.ex32
-rw-r--r--lib/farside/instances.ex33
-rw-r--r--lib/farside/server.ex2
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