---
title: "Časové limity a chyby — Alerts for Laravel | Roundly"
description: "Obmedzte kontroly časovým limitom, spoľahnite sa na behy odolné voči výnimkám a poznajte všetky výnimky, ktoré balík vyhadzuje."
url: https://roundly-consulting.com/sk/open-source/navody/alerts-for-laravel/casove-limity-a-chyby
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Alerts for Laravel](https://roundly-consulting.com/sk/open-source/navody/alerts-for-laravel.md)

# Časové limity a chyby

## Časový limit kontroly

timeout(5) obmedzí kontrolu na päť sekúnd:

```php
Health::for($team)->monitor(PaymentGatewayCheck::class)
    ->everyMinute()
    ->timeout(5)   // hard abort under CLI with ext-pcntl, post-hoc report elsewhere
    ->save();
```

V CLI s ext-pcntl — vrátane queue workerov — sa kontrola po uplynutí limitu okamžite preruší cez SIGALRM. Inde (webové SAPI, Windows) ide o dodatočné vyhodnotenie: kontrola dobehne a ak limit prekročila, označí sa ako failed. Kontrola, ktorej vypršal čas, prejde bežnou cestou výsledku failed s výnimkou CheckTimedOut v meta a s údajom timed\_out\_after.

Alarm kontrolu preruší tak, že do nej vyhodí CheckTimedOut, takže široký catch (Throwable) v kontrole — má ho každá vstavaná kontrola — by ho mohol pohltiť. Časový limit sa aj tak nahlási: keď alarm vypršal, kontrola, ktorá normálne skončí alebo vyhodí inú výnimku, sa zapíše ako výsledok failed pre prekročený limit s timed\_out\_after v meta. Kontrolu, ktorá opakuje pokusy, alarm druhýkrát nepreruší, takže môže limit prekročiť ešte predtým, než sa výsledok zapíše.

V queue workeri sa vlastný alarm jobu z --timeout zachová: limit kontroly dlhší než čas, ktorý jobu zostáva, ho nikdy nepredĺži, a alarm workera sa po kontrole znova nastaví.

## Kontroly odolné voči výnimkám

check() nikdy nepotrebuje try/catch. Akákoľvek vyhodená výnimka sa zmení na čistý výsledok failed a zapíše sa ako bežný alert a beh, takže chybná kontrola nikdy neskončí zlyhaním jobu vo fronte:

```php
Health::define('flaky', function () {
    throw new RuntimeException('upstream exploded'); // becomes CheckResult::failed()
});

// Or build a result from a caught exception yourself:
CheckResult::fromException($e); // status failed; exception class, message and 15 stack frames in meta
```

## Podrobnosti výnimiek zostávajú v logoch

Správa a zásobník volaní výnimky môžu obsahovať hostiteľov, SQL aj prístupové údaje, preto sa predvolene neukladajú ani neposielajú e-mailom. Beh aj alert dostanú správu „Kontrola vyhodila výnimku RuntimeException; podrobnosti sú v aplikačnom logu.“ — text alerts::checks.check\_errored, ktorý je v slovenčine aj angličtine — a ponechajú si len meta\['exception'\], teda triedu. Samotná výnimka sa nahlási vášmu exception handleru, takže skončí vo vašich logoch. CheckResult, ktorý vráti okamžité spustenie, stále nesie všetko:

```php
$result = Health::for($team)->run('flaky');

$result->meta['exception_message'];  // 'upstream exploded' — the caller of a run-now gets everything
$result->storedMessage();            // the message as stored and mailed (≤ CheckResult::MAX_STORED_MESSAGE_LENGTH, 1000)
$result->storedMeta();               // the meta as stored on runs and alerts

$alert = $team->alerts()->open()->first();

$alert->message;                     // 'The check threw RuntimeException; the details are in the application log.'
$alert->meta['exception'];           // 'RuntimeException' — the class is always stored
$alert->meta['timed_out_after'];     // seconds — present only for timeouts
```

- Uloží sa: vlastná správa kontroly, text balíka o prekročení časového limitu, meta\['exception'\] a timed\_out\_after. Vynechá sa: exception\_message, exception\_trace a chyba, ktorú zachytila vstavaná kontrola.
- Vypršaný časový limit sa exception handleru nehlási — jeho text pochádza z balíka a uloží sa. Vstavané kontroly nahlásia zachytenú chybu bez ohľadu na store\_exception\_details.
- storedMessage() a storedMeta() vrátia presne to, čo sa uloží pri behoch a alertoch — a čo pošle e-mailom pribalená notifikácia.
- Vlastná kontrola, ktorá si výnimku zachytí sama, rozhoduje, čo vráti: čokoľvek vloží do správy alebo meta, sa uloží. Ak chcete správanie opísané vyššie, nechajte výnimku vyhodiť.
- Ak chcete podrobnosti ukladať a posielať ako pred verziou 1.2, nastavte store\_exception\_details (ALERTS\_STORE\_EXCEPTION\_DETAILS=true, prísny boolean): uloží sa správa výnimky — v stĺpcoch správ najviac 1000 znakov, v meta\['exception\_message'\] celá — a prvých 15 rámcov zásobníka v meta\['exception\_trace'\].

Chránená je len samotná metóda check(). Získanie kontroly (neregistrovaný kľúč) alebo vlastníka (bez HasNotifiablesForAlerts) naďalej vyhodí výnimku a job zlyhá — ide o chyby konfigurácie, o ktorých chcete vedieť.

## Výnimky

Všetky sú v RoundlyConsulting\\Alerts\\Exceptions, okrem výnimky z toolkitu:

| Výnimka | Kedy nastane |
| --- | --- |
| `CheckTimedOut` | Kontrola prekročí svoj timeout() — aj keď výnimku sama zachytí. Beh ju zachytí a uloží ako výsledok failed — nikdy neunikne. Nesie verejné vlastnosti key a seconds. |
| `InvalidCronExpression` | malformed(): plán sa ukladá — cez monitor()->save(), schedule() alebo skratky traitu — s výrazom, ktorý nie je platný 5-poľový cron ani podporovaný alias; nič sa neuloží. skipped(): runDue() narazil na uložený riadok, ktorý nevie vyhodnotiť (zapísaný seederom alebo ručne) — výnimka sa nevyhodí, ale nahlási vášmu exception handleru a riadky za ním sa odošlú ďalej. |
| `InvalidHealthCheck` | doesntExtendBaseCheck(): registrujete, spúšťate alebo plánujete triedu, ktorá nerozširuje Check. notRegistered(): naplánovaný riadok odkazuje na kľúč — alebo run() dostane kľúč —, ktorý v bežiacom procese nie je registrovaný. ambiguous(): run() dostane triedu registrovanú cez as() pod viacerými kľúčmi — spustite ju podľa kľúča. invalidEscalationThreshold(): eskalačná politika s kľúčom, ktorý nie je celé číslo aspoň 1 — 0, záporné číslo, názov alebo zoznam \['owner', 'team'\]. invalidIdentity(): meta kľúč z uniqueBy() má hodnotu, ktorá nie je skalár ani null — správa uvádza kľúč, nikdy nie hodnotu. notScheduledFor(): Health::for($owner)->run(), unmonitor() alebo reconfigure() dostane riadok, ktorý patrí inému vlastníkovi. |
| `InvalidRetention` | days(): Health::prune() dostane menej ako 1 deň — zmazal by celú históriu behov. silenceDays(): Health::silences()->prune() dostane menej ako 1 deň. Ide o InvalidArgumentException; nič sa nezmaže. |
| `ScheduleConflict` | reconfigure() by plán s uniqueBy() presunul na identitu, ktorú drží iný aktívny plán tej istej kontroly. Ide o final RuntimeException, ktorej správa uvádza kontrolu, riadok a meta kľúče identity — nikdy nie ich hodnoty; nič sa nezmení. V HTTP vrstve ju preveďte na odpoveď 409 Conflict. |
| `InvalidNotifiableForHealthCheck` | Vlastník riadka neimplementuje HasNotifiablesForAlerts alebo už neexistuje. |
| `InvalidConfigurationException` | Z package-toolkit: hodnota v konfigurácii je neplatná — kľúč modelu, ktorý nie je model z balíka ani jeho podtrieda, neznámy key\_type, prepínač, ktorý nie je boolean, neznáma schedule.frequency, route.uri alebo route.name, ktoré nie je reťazcom, alebo history.retention\_days či silence-retention, ktoré nie je celé číslo aspoň 1. Správa uvádza názov kľúča. |

## 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 kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/alerts-for-laravel.md)
