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
|
@aprs_timeout 60 * 1000
|
||||||
@keepalive_interval 20 * 1000
|
@keepalive_interval 20 * 1000
|
||||||
@backpressure_safety_valve_timeout 30_000
|
@backpressure_safety_valve_timeout 30_000
|
||||||
|
@fallback_server "noam.aprs2.net"
|
||||||
|
@fallback_timeout_seconds 300
|
||||||
|
|
||||||
defstruct [
|
defstruct [
|
||||||
:server,
|
:server,
|
||||||
|
|
@ -21,12 +23,13 @@ defmodule Aprsme.Is do
|
||||||
:packet_stats,
|
:packet_stats,
|
||||||
:login_params,
|
:login_params,
|
||||||
:safety_valve_timer,
|
:safety_valve_timer,
|
||||||
|
:failure_started_at,
|
||||||
buffer: "",
|
buffer: "",
|
||||||
backpressure_active: false
|
backpressure_active: false
|
||||||
]
|
]
|
||||||
|
|
||||||
@type t :: %__MODULE__{
|
@type t :: %__MODULE__{
|
||||||
server: charlist() | String.t(),
|
server: String.t(),
|
||||||
port: pos_integer(),
|
port: pos_integer(),
|
||||||
socket: :ssl.sslsocket() | nil,
|
socket: :ssl.sslsocket() | nil,
|
||||||
timer: reference() | nil,
|
timer: reference() | nil,
|
||||||
|
|
@ -36,7 +39,8 @@ defmodule Aprsme.Is do
|
||||||
buffer: String.t(),
|
buffer: String.t(),
|
||||||
login_params: LoginParams.t(),
|
login_params: LoginParams.t(),
|
||||||
backpressure_active: boolean(),
|
backpressure_active: boolean(),
|
||||||
safety_valve_timer: reference() | nil
|
safety_valve_timer: reference() | nil,
|
||||||
|
failure_started_at: DateTime.t() | nil
|
||||||
}
|
}
|
||||||
|
|
||||||
def start_link(opts \\ []) do
|
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))
|
Process.sleep(Application.get_env(:aprsme, :is_init_delay_ms, 2_000))
|
||||||
|
|
||||||
# Get startup parameters
|
# 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)
|
port = Application.get_env(:aprsme, :aprs_is_port, 14_580)
|
||||||
default_filter = Application.get_env(:aprsme, :aprs_is_default_filter, "r/33/-96/100")
|
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")
|
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,
|
user_id: aprs_user_id,
|
||||||
passcode: aprs_passcode,
|
passcode: aprs_passcode,
|
||||||
filter: default_filter
|
filter: default_filter
|
||||||
}
|
},
|
||||||
|
failure_started_at: nil
|
||||||
}
|
}
|
||||||
|
|
||||||
# Try to connect initially, but don't fail if it doesn't work
|
# Try to connect initially, but don't fail if it doesn't work
|
||||||
|
|
@ -101,19 +118,19 @@ defmodule Aprsme.Is do
|
||||||
:ok ->
|
:ok ->
|
||||||
timer = create_timer(@aprs_timeout)
|
timer = create_timer(@aprs_timeout)
|
||||||
keepalive_timer = create_keepalive_timer(@keepalive_interval)
|
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 ->
|
error ->
|
||||||
Logger.warning("Failed to login to APRS-IS: #{inspect(error)}, will retry")
|
Logger.warning("Failed to login to APRS-IS: #{inspect(error)}, will retry")
|
||||||
:gen_tcp.close(socket)
|
:gen_tcp.close(socket)
|
||||||
schedule_reconnect(5000)
|
schedule_reconnect(5000)
|
||||||
{:ok, state}
|
{:ok, track_failure(state)}
|
||||||
end
|
end
|
||||||
|
|
||||||
error ->
|
error ->
|
||||||
Logger.warning("Unable to establish initial connection to APRS-IS: #{inspect(error)}, will retry")
|
Logger.warning("Unable to establish initial connection to APRS-IS: #{inspect(error)}, will retry")
|
||||||
schedule_reconnect(5000)
|
schedule_reconnect(5000)
|
||||||
{:ok, state}
|
{:ok, track_failure(state)}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -648,4 +665,29 @@ defmodule Aprsme.Is do
|
||||||
defp schedule_reconnect(delay) do
|
defp schedule_reconnect(delay) do
|
||||||
Process.send_after(self(), :reconnect, delay)
|
Process.send_after(self(), :reconnect, delay)
|
||||||
end
|
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
|
end
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
# To ban all spiders from the entire site uncomment the next two lines:
|
# To ban all spiders from the entire site uncomment the next two lines:
|
||||||
|
|
||||||
User-agent: *
|
User-agent: *
|
||||||
|
Content-Signal: search=yes,ai-train=no
|
||||||
Disallow: /info
|
Disallow: /info
|
||||||
Disallow: /packets
|
Disallow: /packets
|
||||||
Disallow: /api/v1
|
Disallow: /api/v1
|
||||||
|
|
@ -10,4 +11,32 @@ Disallow: /api/v1
|
||||||
User-agent: AhrefsBot
|
User-agent: AhrefsBot
|
||||||
Disallow: /
|
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
|
Sitemap: https://aprs.me/sitemap.xml
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue