summaryrefslogtreecommitdiff
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
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.
-rw-r--r--config/config.exs4
-rw-r--r--lib/farside/application.ex32
-rw-r--r--lib/farside/instances.ex33
-rw-r--r--lib/farside/server.ex2
-rw-r--r--services.json4
5 files changed, 48 insertions, 27 deletions
diff --git a/config/config.exs b/config/config.exs
index 36ede2f..1c393cd 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -14,4 +14,8 @@ config :farside,
{"Accept", "text/html"},
{"Accept-Language", "en-US,en;q=0.5"},
{"Accept-Encoding", "gzip, deflate, br"}
+ ],
+ queries: [
+ "weather",
+ "time"
]
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
diff --git a/services.json b/services.json
index 8ee082c..55abae0 100644
--- a/services.json
+++ b/services.json
@@ -114,7 +114,7 @@
},
{
"type": "whoogle",
- "test_url": "/search?q=github",
+ "test_url": "/search?q=<%=query%>",
"fallback": "https://search.garudalinux.org",
"instances": [
"https://search.albony.xyz",
@@ -131,7 +131,7 @@
},
{
"type": "searx",
- "test_url": "/search?q=github",
+ "test_url": "/search?q=<%=query%>",
"fallback": "https://searx.be",
"instances": [
"https://anon.sx",