diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f77352d2..77f7963a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -116,7 +116,6 @@ jobs: matrix: platform: - linux/amd64 - - linux/arm64 steps: - name: Prepare run: | diff --git a/lib/wanderer_app/character/tracker.ex b/lib/wanderer_app/character/tracker.ex index 2bcab464..9ac84c7d 100644 --- a/lib/wanderer_app/character/tracker.ex +++ b/lib/wanderer_app/character/tracker.ex @@ -33,12 +33,13 @@ defmodule WandererApp.Character.Tracker do status: binary() } - @pause_tracking_timeout :timer.minutes(10) + @pause_tracking_timeout :timer.minutes(15) @online_error_timeout :timer.minutes(1) @online_forbidden_ttl :timer.seconds(7) @online_limit_ttl :timer.seconds(7) @forbidden_ttl :timer.seconds(5) @limit_ttl :timer.seconds(5) + @location_limit_ttl :timer.seconds(1) @pubsub_client Application.compile_env(:wanderer_app, :pubsub_client) def new(), do: __struct__() @@ -239,11 +240,16 @@ defmodule WandererApp.Character.Tracker do def update_online(_), do: {:error, :skipped} - defp get_reset_timeout(%{"x-esi-error-limit-reset" => [reset_seconds]}) + defp get_reset_timeout(_headers, _default_timeout \\ @limit_ttl) + + defp get_reset_timeout( + %{"x-esi-error-limit-remain" => ["0"], "x-esi-error-limit-reset" => [reset_seconds]}, + _default_timeout + ) when is_binary(reset_seconds), do: :timer.seconds((reset_seconds |> String.to_integer()) + 1) - defp get_reset_timeout(_headers), do: @limit_ttl + defp get_reset_timeout(_headers, default_timeout), do: default_timeout def update_info(character_id) do (WandererApp.Cache.has_key?("character:#{character_id}:online_forbidden") || @@ -403,8 +409,7 @@ defmodule WandererApp.Character.Tracker do ) do case WandererApp.Character.get_character(character_id) do {:ok, %{eve_id: eve_id, access_token: access_token}} when not is_nil(access_token) -> - (WandererApp.Cache.has_key?("character:#{character_id}:online_forbidden") || - WandererApp.Cache.has_key?("character:#{character_id}:location_forbidden") || + (WandererApp.Cache.has_key?("character:#{character_id}:location_forbidden") || WandererApp.Cache.has_key?("character:#{character_id}:tracking_paused")) |> case do true -> @@ -424,21 +429,15 @@ defmodule WandererApp.Character.Tracker do {:error, error} when error in [:forbidden, :not_found, :timeout] -> Logger.warning("#{__MODULE__} failed to update_location: #{inspect(error)}") - WandererApp.Cache.put( - "character:#{character_id}:location_forbidden", - true, - ttl: @forbidden_ttl - ) - - {:error, error} + {:error, :skipped} {:error, :error_limited, headers} -> - reset_timeout = get_reset_timeout(headers) - Logger.warning( "#{__MODULE__} failed to update_location: #{inspect(:error_limited)}" ) + reset_timeout = get_reset_timeout(headers, @location_limit_ttl) + WandererApp.Cache.put( "character:#{character_id}:location_forbidden", true, @@ -450,23 +449,11 @@ defmodule WandererApp.Character.Tracker do {:error, error} -> Logger.error("#{__MODULE__} failed to update_location: #{inspect(error)}") - WandererApp.Cache.put( - "character:#{character_id}:location_forbidden", - true, - ttl: @forbidden_ttl - ) - - {:error, error} + {:error, :skipped} _ -> Logger.error("#{__MODULE__} failed to update_location: wrong response") - WandererApp.Cache.put( - "character:#{character_id}:location_forbidden", - true, - ttl: @forbidden_ttl - ) - {:error, :skipped} end diff --git a/lib/wanderer_app/character/tracker_pool.ex b/lib/wanderer_app/character/tracker_pool.ex index 115e8057..1e7d972e 100644 --- a/lib/wanderer_app/character/tracker_pool.ex +++ b/lib/wanderer_app/character/tracker_pool.ex @@ -16,7 +16,7 @@ defmodule WandererApp.Character.TrackerPool do @registry :tracker_pool_registry @unique_registry :unique_tracker_pool_registry - @update_location_interval :timer.seconds(2) + @update_location_interval :timer.seconds(1) @update_online_interval :timer.seconds(5) @check_online_errors_interval :timer.seconds(30) @update_ship_interval :timer.seconds(2) diff --git a/lib/wanderer_app/character/tracker_pool_dynamic_supervisor.ex b/lib/wanderer_app/character/tracker_pool_dynamic_supervisor.ex index 4d7cad7c..9a8e5ed7 100644 --- a/lib/wanderer_app/character/tracker_pool_dynamic_supervisor.ex +++ b/lib/wanderer_app/character/tracker_pool_dynamic_supervisor.ex @@ -7,7 +7,7 @@ defmodule WandererApp.Character.TrackerPoolDynamicSupervisor do @cache :tracked_characters @registry :tracker_pool_registry @unique_registry :unique_tracker_pool_registry - @tracker_pool_limit 100 + @tracker_pool_limit 50 @name __MODULE__