Obmedzenie požiadaviek
Každé odchádzajúce volanie prechádza cez http-client-rate-limits-for-laravel, takže sa vopred držíte pod kvótami Plausible namiesto zahlcovania API a odpovedí 429. Existujú tri nezávislé rozpočty — stats (dotazy), events (príjem udalostí) a sites (weby, ciele a zdieľané odkazy) — s kľúčom plausible:{surface}:{owner}:{host}[:{site}]. Host pochádza z URL inštancie, takže Cloud a self-hosted nikdy nezdieľajú okno.
Limit Plausible — predvolene 600 požiadaviek za hodinu — platí pre API kľúč naprieč všetkými webmi, ktoré kľúč číta. Preto stats a sites predvolene používajú jeden rozpočet pre celý účet (per_site vypnuté): dashboard nad 20 webmi minie jeden rozpočet 600 za hodinu, presne ako to počíta Plausible. events je bez autentifikácie a má rozpočet pre každý web zvlášť.
Nastavenia rozpočtov
Každý rozpočet nastavíte v plausible.rate_limits.{surface}:
| Kľúč | Stats | Events | Sites | Účel |
|---|---|---|---|---|
enabled | true | true | true | false spustí bežného klienta bez limitera. |
owner | app | app | app | Spojí viac inštancií aplikácie s jedným API kľúčom do jedného okna. |
limit | 600 | 6000 | 60 | Maximum požiadaviek za okno. |
per | hour | minute | hour | Veľkosť okna: second, minute, hour alebo day. |
adaptive | true | true | true | Rešpektovať Retry-After pri odpovedi 429 od Plausible. |
max_wait | null | null | null | Milisekundy. null = čakať; nastavená hodnota = hneď zlyhať s RateLimitExceeded. |
jitter | null | null | null | Milisekundy náhodného rozptylu pridané k odkladu. |
per_site | false | true | false | Zahrnúť web do kľúča — samostatný rozpočet pre každý web. Pre stats a sites ho nechajte vypnutý, pokiaľ váš kľúč naozaj nemá kvóty pre jednotlivé weby. |
Stats predvolene zodpovedá zdokumentovanému limitu Plausible 600 požiadaviek za hodinu na kľúč; Events je štedrý minútový rozpočet pre veľké objemy udalostí; Sites je nízky rozpočet na správu čerpaný z toho istého kľúča. Self-hosted inštancie môžu mať iné čísla.
Premenné prostredia
Každý kľúč má svoju premennú env. Uvedené sú názvy pre stats — pre ostatné rozpočty nahraďte STATS za EVENTS alebo SITES. Logické kľúče — enabled, adaptive a per_site — prijímajú true/false, on/off, yes/no a 1/0; čokoľvek iné vyhodí InvalidConfigurationException s názvom kľúča. Rovnako striktné sú aj ostatné: per musí byť second, minute, hour alebo day (preklep ako hourly vyhodí výnimku, nestane sa z neho hodina), limit je celé číslo najmenej 1, max_wait a jitter sú celé čísla najmenej 0 (alebo nenastavené) a owner je reťazec. Prázdna hodnota (PLAUSIBLE_STATS_RATELIMIT=) sa považuje za nenastavenú, takže platí jej predvolená hodnota:
| Kľúč | Premenná env |
|---|---|
enabled | PLAUSIBLE_STATS_RATELIMIT_ENABLED |
owner | PLAUSIBLE_RATELIMIT_OWNER (spoločná pre všetky tri) |
limit | PLAUSIBLE_STATS_RATELIMIT |
per | PLAUSIBLE_STATS_RATELIMIT_PER |
adaptive | PLAUSIBLE_STATS_RATELIMIT_ADAPTIVE |
max_wait | PLAUSIBLE_STATS_RATELIMIT_MAX_WAIT |
jitter | PLAUSIBLE_STATS_RATELIMIT_JITTER |
per_site | PLAUSIBLE_STATS_RATELIMIT_PER_SITE |
PLAUSIBLE_RATELIMIT_OWNER=app
PLAUSIBLE_STATS_RATELIMIT=600
PLAUSIBLE_STATS_RATELIMIT_PER=hour
PLAUSIBLE_STATS_RATELIMIT_MAX_WAIT=5000
PLAUSIBLE_EVENTS_RATELIMIT_PER=minute
PLAUSIBLE_SITES_RATELIMIT_ENABLED=false
# Booleans accept true/false, on/off, yes/no and 1/0; anything else throws.
# Only for a key with real per-site quotas:
PLAUSIBLE_STATS_RATELIMIT_PER_SITE=onČakať, alebo hneď zlyhať
Predvolene požiadavka, ktorá by prekročila okno, počká, kým sa okno uvoľní. Ak nastavíte max_wait (ms), vyhodí sa namiesto toho RoundlyConsulting\Plausible\Exceptions\RateLimitExceeded s kľúčom rozpočtu a dĺžkou čakania cez retryAfterSeconds():
use RoundlyConsulting\Plausible\Exceptions\RateLimitExceeded;
try {
plausible()->stats()->aggregateResult($request);
} catch (RateLimitExceeded $e) {
report("Retry {$e->key} in {$e->retryAfterSeconds()}s");
}Keďže údaj stojí na kontrakte RoundlyConsulting\PackageToolkit\Contracts\HasRetryAfter, aplikácia vybaví akékoľvek zlyhanie pre limit — z tohto aj z iného balíka Roundly — jednou kontrolou:
use RoundlyConsulting\PackageToolkit\Contracts\HasRetryAfter;
if ($e instanceof HasRetryAfter) {
return response('Too Many Requests', 429, ['Retry-After' => $e->retryAfterSeconds()]);
}Opakovania a zdieľané rozpočty
- Natívne opakovanie — všeobecná konfigurácia retry.* (opakovanie pri prechodných chybách spojenia, predvolene vypnuté) s tým nesúvisí. Spomalenie pri 429 nechajte na adaptívny limiter, aby ste nečakali dvakrát.
- Zdieľané rozpočty — limiter predvolene používa úložisko v pamäti procesu: stačí pre jeden worker, CLI alebo plánovaný report. Pre rozpočet zdieľaný medzi workermi či servermi nasmerujte jeho úložisko na Cache, Redis alebo Database cez HTTP_CLIENT_RATE_LIMITS_STORE (pozri http-client-rate-limits-for-laravel).
- Kvóty pre jednotlivé weby — per_site je pre stats a sites vypnuté, lebo Plausible počíta požiadavky na API kľúč; zapnite ho, len ak má váš kľúč naozaj kvóty pre jednotlivé weby.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.