update robots.txt

This commit is contained in:
Graham McIntire 2026-06-04 16:33:12 -05:00
parent f2c8f7020c
commit 1ef9e00a05
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59
2 changed files with 78 additions and 7 deletions

View file

@ -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

View file

@ -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