1#ifndef SERVER_RATE_LIMITER_H
2#define SERVER_RATE_LIMITER_H
34 [[nodiscard]]
bool isRateLimited(
const QString &host,
const QDateTime &now)
const;
37 [[nodiscard]]
int rounds(
const QString &host)
const;
40 [[nodiscard]] QDateTime
deadline(
const QString &host)
const;
56 QDateTime
on429(
const QString &host,
const QDateTime &now, qint64 retryAfterMs = 0);
Tracks per-server backoff state triggered by HTTP 429 responses.
Definition server_rate_limiter.h:20
QDateTime on429(const QString &host, const QDateTime &now, qint64 retryAfterMs=0)
Registers a 429 response for the given host.
Definition server_rate_limiter.cpp:34
QMap< QString, int > retryRounds
Consecutive 429 rounds per host.
Definition server_rate_limiter.h:70
QDateTime earliestDeadline(const QDateTime &now) const
Definition server_rate_limiter.cpp:23
QDateTime deadline(const QString &host) const
Definition server_rate_limiter.cpp:18
static constexpr int EXHAUSTED_BACKOFF_MS
Cool-down once the retry budget is exhausted.
Definition server_rate_limiter.h:25
bool isRateLimited(const QString &host, const QDateTime &now) const
Checks whether a host is currently in backoff.
Definition server_rate_limiter.cpp:7
QMap< QString, QDateTime > backoffUntil
When each host may be contacted again.
Definition server_rate_limiter.h:69
void clearExpired(const QDateTime &now)
Removes expired backoffs, refreshing the round budget of hosts that have been idle past the reset gra...
Definition server_rate_limiter.cpp:72
int rounds(const QString &host) const
Definition server_rate_limiter.cpp:13
static constexpr int MIN_429_BACKOFF_MS
Minimum wait after a 429 (scryfall documented cool-down).
Definition server_rate_limiter.h:23
static constexpr int MAX_BACKOFF_MS
Cap for a single backoff period.
Definition server_rate_limiter.h:24
QMap< QString, QDateTime > last429
When each host was last rate limited.
Definition server_rate_limiter.h:71
static constexpr qint64 RESET_GRACE_MS
Idle time after which the retry budget refreshes.
Definition server_rate_limiter.h:26
static constexpr int MAX_RETRIES
Max 429 rounds per host before the budget is exhausted.
Definition server_rate_limiter.h:22
void onSuccess(const QString &host)
Clears all penalty state for a host after a successful request.
Definition server_rate_limiter.cpp:65