Parameterize API cooldowns

This commit is contained in:
Claudio Ortolina
2026-03-01 17:17:32 +00:00
parent 854e293902
commit 919a42d355
12 changed files with 50 additions and 16 deletions
+7 -3
View File
@@ -52,11 +52,15 @@ config :music_library, LastFm,
refresh_interval: System.convert_time_unit(300, :second, :millisecond),
api_key: "change me",
shared_secret: "change me",
user_agent: user_agent
user_agent: user_agent,
api_cooldown: 500
config :music_library, MusicBrainz, user_agent: user_agent
config :music_library, MusicBrainz, user_agent: user_agent, api_cooldown: 500
config :music_library, Discogs, personal_access_token: "change me", user_agent: user_agent
config :music_library, Discogs,
personal_access_token: "change me",
user_agent: user_agent,
api_cooldown: 1000
config :music_library, Wikipedia, user_agent: user_agent
+6 -3
View File
@@ -43,19 +43,22 @@ config :music_library, LastFm,
req_options: [
plug: {Req.Test, LastFm.API},
max_retries: 0
]
],
api_cooldown: 0
config :music_library, MusicBrainz,
req_options: [
plug: {Req.Test, MusicBrainz.API},
max_retries: 0
]
],
api_cooldown: 0
config :music_library, Discogs,
req_options: [
plug: {Req.Test, Discogs.API},
max_retries: 0
]
],
api_cooldown: 0
config :music_library, Wikipedia,
req_options: [
+2
View File
@@ -13,5 +13,7 @@ defmodule Discogs do
API.get_artist_image(url, discogs_config)
end
def api_cooldown, do: discogs_config().api_cooldown
defp discogs_config, do: Discogs.Config.resolve(:music_library)
end
+9 -2
View File
@@ -2,13 +2,15 @@ defmodule Discogs.Config do
@type t :: %__MODULE__{
personal_access_token: String.t(),
user_agent: String.t(),
req_options: Keyword.t()
req_options: Keyword.t(),
api_cooldown: non_neg_integer()
}
@enforce_keys [:personal_access_token]
defstruct personal_access_token: "",
user_agent: "change me",
req_options: []
req_options: [],
api_cooldown: 1000
@schema NimbleOptions.new!(
personal_access_token: [
@@ -24,6 +26,11 @@ defmodule Discogs.Config do
type: :keyword_list,
required: false,
default: []
],
api_cooldown: [
type: :integer,
required: false,
default: 1000
]
)
+2
View File
@@ -93,5 +93,7 @@ defmodule LastFm do
"https://www.last.fm/api/auth/?api_key=" <> last_fm_config.api_key
end
def api_cooldown, do: last_fm_config().api_cooldown
defp last_fm_config, do: LastFm.Config.resolve(:music_library)
end
+9 -2
View File
@@ -6,7 +6,8 @@ defmodule LastFm.Config do
auto_refresh: boolean(),
refresh_interval: pos_integer(),
user_agent: String.t(),
req_options: Keyword.t()
req_options: Keyword.t(),
api_cooldown: non_neg_integer()
}
@enforce_keys [:api_key, :user]
@@ -16,7 +17,8 @@ defmodule LastFm.Config do
auto_refresh: true,
refresh_interval: 60_000,
user_agent: "change me",
req_options: []
req_options: [],
api_cooldown: 500
@schema NimbleOptions.new!(
api_key: [
@@ -50,6 +52,11 @@ defmodule LastFm.Config do
type: :keyword_list,
required: false,
default: []
],
api_cooldown: [
type: :integer,
required: false,
default: 500
]
)
+2
View File
@@ -36,5 +36,7 @@ defmodule MusicBrainz do
API.get_artist(musicbrainz_id, music_brainz_config())
end
def api_cooldown, do: music_brainz_config().api_cooldown
defp music_brainz_config, do: MusicBrainz.Config.resolve(:music_library)
end
+9 -2
View File
@@ -1,12 +1,14 @@
defmodule MusicBrainz.Config do
@type t :: %__MODULE__{
user_agent: String.t(),
req_options: Keyword.t()
req_options: Keyword.t(),
api_cooldown: non_neg_integer()
}
@enforce_keys [:user_agent]
defstruct user_agent: "change me",
req_options: []
req_options: [],
api_cooldown: 500
@schema NimbleOptions.new!(
user_agent: [
@@ -18,6 +20,11 @@ defmodule MusicBrainz.Config do
type: :keyword_list,
required: false,
default: []
],
api_cooldown: [
type: :integer,
required: false,
default: 500
]
)
@@ -5,7 +5,7 @@ defmodule MusicLibrary.Worker.ArtistRefreshDiscogsData do
def perform(%Oban.Job{args: %{"id" => artist_info_id}}) do
result = MusicLibrary.Artists.refresh_discogs_data(artist_info_id)
Process.sleep(1_000)
Process.sleep(Discogs.api_cooldown())
result
end
@@ -5,7 +5,7 @@ defmodule MusicLibrary.Worker.ArtistRefreshMusicBrainzData do
def perform(%Oban.Job{args: %{"id" => artist_info_id}}) do
result = MusicLibrary.Artists.refresh_musicbrainz_data(artist_info_id)
Process.sleep(500)
Process.sleep(MusicBrainz.api_cooldown())
result
end
@@ -9,7 +9,7 @@ defmodule MusicLibrary.Worker.FetchArtistLastFmData do
error -> error
end
Process.sleep(500)
Process.sleep(LastFm.api_cooldown())
result
end
@@ -10,7 +10,7 @@ defmodule MusicLibrary.Worker.RecordRefreshMusicBrainzData do
MusicLibrary.Records.notify_update(updated_record)
end
Process.sleep(500)
Process.sleep(MusicBrainz.api_cooldown())
result
end