Časové limity a chyby
Časový limit kontroly
timeout(5) obmedzí kontrolu na päť sekúnd:
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.
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. Správa výnimky môže byť obrovská — QueryException obsahuje celé SQL —, preto riadky behov a alertov uložia najviac CheckResult::MAX_STORED_MESSAGE_LENGTH (1000) znakov; úplný text zostane vo vrátenom výsledku a v meta['exception_message']:
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 + bounded trace in meta$alert = $team->alerts()->open()->first();
$alert->message; // stored up to CheckResult::MAX_STORED_MESSAGE_LENGTH (1000) characters
$alert->meta['exception']; // e.g. 'RuntimeException'
$alert->meta['exception_message']; // 'upstream exploded' — the full text, never shortened
$alert->meta['exception_trace']; // the first 15 stack frames
$alert->meta['timed_out_after']; // seconds — present only for timeoutsChrá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(). 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. notScheduledFor(): Health::for($owner)->run() alebo unmonitor() dostane riadok, ktorý patrí inému vlastníkovi. |
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, 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 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.