update robots.txt
This commit is contained in:
parent
f2c8f7020c
commit
1ef9e00a05
2 changed files with 78 additions and 7 deletions
|
|
@ -10,6 +10,8 @@ defmodule Aprsme.Is do
|
|||
@aprs_timeout 60 * 1000
|
||||
@keepalive_interval 20 * 1000
|
||||
@backpressure_safety_valve_timeout 30_000
|
||||
@fallback_server "noam.aprs2.net"
|
||||
@fallback_timeout_seconds 300
|
||||
|
||||
defstruct [
|
||||
:server,
|
||||
|
|
@ -21,12 +23,13 @@ defmodule Aprsme.Is do
|
|||
:packet_stats,
|
||||
:login_params,
|
||||
:safety_valve_timer,
|
||||
:failure_started_at,
|
||||
buffer: "",
|
||||
backpressure_active: false
|
||||
]
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
server: charlist() | String.t(),
|
||||
server: String.t(),
|
||||
port: pos_integer(),
|
||||
socket: :ssl.sslsocket() | nil,
|
||||
timer: reference() | nil,
|
||||
|
|
@ -36,7 +39,8 @@ defmodule Aprsme.Is do
|
|||
buffer: String.t(),
|
||||
login_params: LoginParams.t(),
|
||||
backpressure_active: boolean(),
|
||||
safety_valve_timer: reference() | nil
|
||||
safety_valve_timer: reference() | nil,
|
||||
failure_started_at: DateTime.t() | nil
|
||||
}
|
||||
|
||||
def start_link(opts \\ []) do
|
||||
|
|
@ -69,7 +73,19 @@ defmodule Aprsme.Is do
|
|||
Process.sleep(Application.get_env(:aprsme, :is_init_delay_ms, 2_000))
|
||||
|
||||
# Get startup parameters
|
||||
server = Application.get_env(:aprsme, :aprs_is_server, ~c"dallas.aprs2.net")
|
||||
server_raw = Application.get_env(:aprsme, :aprs_is_server, ~c"dallas.aprs2.net")
|
||||
server = if is_list(server_raw), do: List.to_string(server_raw), else: server_raw
|
||||
|
||||
# If we fell back to the fallback server in a previous failure streak and
|
||||
# the GenServer restarted (e.g. due to timeout), persist the fallback choice.
|
||||
server =
|
||||
if Application.get_env(:aprsme, :aprs_is_using_fallback, false) do
|
||||
Logger.warning("APRS-IS fallback active from previous failure, connecting to #{@fallback_server}")
|
||||
@fallback_server
|
||||
else
|
||||
server
|
||||
end
|
||||
|
||||
port = Application.get_env(:aprsme, :aprs_is_port, 14_580)
|
||||
default_filter = Application.get_env(:aprsme, :aprs_is_default_filter, "r/33/-96/100")
|
||||
aprs_user_id = Application.get_env(:aprsme, :aprs_is_login_id, "W5ISP")
|
||||
|
|
@ -91,7 +107,8 @@ defmodule Aprsme.Is do
|
|||
user_id: aprs_user_id,
|
||||
passcode: aprs_passcode,
|
||||
filter: default_filter
|
||||
}
|
||||
},
|
||||
failure_started_at: nil
|
||||
}
|
||||
|
||||
# Try to connect initially, but don't fail if it doesn't work
|
||||
|
|
@ -101,19 +118,19 @@ defmodule Aprsme.Is do
|
|||
:ok ->
|
||||
timer = create_timer(@aprs_timeout)
|
||||
keepalive_timer = create_keepalive_timer(@keepalive_interval)
|
||||
{:ok, %{state | socket: socket, timer: timer, keepalive_timer: keepalive_timer}}
|
||||
{:ok, reset_failure(%{state | socket: socket, timer: timer, keepalive_timer: keepalive_timer})}
|
||||
|
||||
error ->
|
||||
Logger.warning("Failed to login to APRS-IS: #{inspect(error)}, will retry")
|
||||
:gen_tcp.close(socket)
|
||||
schedule_reconnect(5000)
|
||||
{:ok, state}
|
||||
{:ok, track_failure(state)}
|
||||
end
|
||||
|
||||
error ->
|
||||
Logger.warning("Unable to establish initial connection to APRS-IS: #{inspect(error)}, will retry")
|
||||
schedule_reconnect(5000)
|
||||
{:ok, state}
|
||||
{:ok, track_failure(state)}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -648,4 +665,29 @@ defmodule Aprsme.Is do
|
|||
defp schedule_reconnect(delay) do
|
||||
Process.send_after(self(), :reconnect, delay)
|
||||
end
|
||||
|
||||
# Track a connection failure. If we've been failing continuously for
|
||||
# @fallback_timeout_seconds, switch to the fallback server until next restart.
|
||||
defp track_failure(state) do
|
||||
now = DateTime.utc_now()
|
||||
failure_started_at = state.failure_started_at || now
|
||||
|
||||
if DateTime.diff(now, failure_started_at) >= @fallback_timeout_seconds and
|
||||
not Application.get_env(:aprsme, :aprs_is_using_fallback, false) do
|
||||
Logger.warning(
|
||||
"Failed to connect to APRS-IS for #{@fallback_timeout_seconds}s, " <>
|
||||
"falling back to #{@fallback_server}"
|
||||
)
|
||||
|
||||
Application.put_env(:aprsme, :aprs_is_using_fallback, true)
|
||||
%{state | failure_started_at: failure_started_at, server: @fallback_server}
|
||||
else
|
||||
%{state | failure_started_at: failure_started_at}
|
||||
end
|
||||
end
|
||||
|
||||
# Reset the failure tracking on a successful connection.
|
||||
defp reset_failure(state) do
|
||||
%{state | failure_started_at: nil}
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
# To ban all spiders from the entire site uncomment the next two lines:
|
||||
|
||||
User-agent: *
|
||||
Content-Signal: search=yes,ai-train=no
|
||||
Disallow: /info
|
||||
Disallow: /packets
|
||||
Disallow: /api/v1
|
||||
|
|
@ -10,4 +11,32 @@ Disallow: /api/v1
|
|||
User-agent: AhrefsBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Amazonbot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Applebot-Extended
|
||||
Disallow: /
|
||||
|
||||
User-agent: Bytespider
|
||||
Disallow: /
|
||||
|
||||
User-agent: CCBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: ClaudeBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: CloudflareBrowserRenderingCrawler
|
||||
Disallow: /
|
||||
|
||||
User-agent: Google-Extended
|
||||
Disallow: /
|
||||
|
||||
User-agent: GPTBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: meta-externalagent
|
||||
Disallow: /
|
||||
|
||||
|
||||
Sitemap: https://aprs.me/sitemap.xml
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue