Inline kontroly cez closure
Na jednorazové kontroly nemusíte písať triedu — definujte ich inline:
use Illuminate\Support\Facades\Redis;
use RoundlyConsulting\Alerts\CheckResult;
use RoundlyConsulting\Alerts\Facades\Health;
Health::define('redis-up', fn () => Redis::ping() ? CheckResult::ok() : CheckResult::failed('Redis down'))
->name('Redis')
->throttle(maxAttempts: 1, decayMinutes: 15)
->notifyUsing(RedisDownNotification::class);Closure môže vrátiť CheckResult alebo obyčajný bool — true znamená ok, false failed. Dostane ClosureCheck, takže môže čítať meta naplánovaného riadka rovnako ako kontrola v triede. Closure pre notifikáciu dostane kontrolu a príjemcu:
use RoundlyConsulting\Alerts\Checks\ClosureCheck;
// The closure receives the ClosureCheck; return a CheckResult or a plain bool.
Health::define('orders-flowing', function (ClosureCheck $check): bool {
$minutes = $check->healthCheck?->meta['window'] ?? 60;
return Order::where('created_at', '>=', now()->subMinutes($minutes))->exists();
})->name('Orders flowing');
// A notification closure receives the check and the recipient.
Health::define('queue-drained', fn () => Queue::size() < 100)
->notifyUsing(fn (ClosureCheck $check, object $notifiable) => new QueueStuckNotification($check->name()));Voľby buildera
Health::define() vracia PendingCheck:
| Metóda | Účinok |
|---|---|
name(string) | Zobrazovaný názov. Bez neho sa každá inline kontrola volá „Closure Check“, preto ho nastavte. |
description(string) | Popis, ktorý vracia register. |
notifyUsing(string|Closure) | Vaša notifikácia: trieda, ktorá dostane kontrolu v konštruktore, alebo closure, ktorá dostane kontrolu a príjemcu. |
tags(array) | Vlastné tagy kontroly, zlúčené do efektívnych tagov každého riadka. |
failAfter(int) | Počet po sebe idúcich zlyhaní, kým sa otvorí alert. |
recoverAfter(int) | Počet po sebe idúcich úspechov, kým sa alert zatvorí. |
timeout(int $seconds) | Časový limit pre closure. |
notifyVia(array, ?int $level) | Kanály pribalenej notifikácie, globálne alebo pre eskalačnú úroveň. |
escalate(array) | Eskalačná politika prah ⇒ skupina. |
throttle(int, int) | Limit opakovaných notifikácií pre riadky, ktoré kontrolu spúšťajú (pozri poznámky nižšie). |
notifyUsing() s názvom triedy ju vytvorí s kontrolou ako jediným argumentom konštruktora. Ak trieda alebo closure nevytvorí Notification, použije sa pribalená HealthCheckFailedNotification.
Plánovanie a spustenie
// An inline check has no class — run it by its key. The throttle and
// options declared on define() apply:
Health::for($team)->run('redis-up');
// Monitor it by its key — the builder starts from define()'s options,
// and any builder call overrides them:
Health::for($team)->monitor('redis-up')
->everyMinute()
->failAfter(2)
->save();Inline kontrola nemá triedu, preto ju spúšťate aj plánujete podľa kľúča. Health::for($owner)->run('kľúč') použije obmedzenie a voľby deklarované v define() a Health::for($owner)->monitor('kľúč') z nich začne — každé volanie buildera ich prepíše.
Kde sa voľby uplatnia
- name(), description(), tags() a notifyUsing() patria samotnej kontrole a platia všade, kde beží.
- throttle(), failAfter(), recoverAfter(), timeout(), notifyVia() a escalate() platia pre riadok na požiadanie, cez ktorý Health::for($owner)->run() beží, keď vlastník kontrolu nemá naplánovanú. Tento riadok kopíruje definíciu, takže zmenené define() sa prejaví pri ďalšom behu.
- Riadok naplánovaný cez Health::for($owner)->monitor('kľúč') začne od rovnakých volieb a ponechá si to, čo sa uložilo — meňte ich v tomto builderi.
- Obmedzenie opakovaných notifikácií sa vždy číta zo stĺpcov max_attempts a decay_minutes riadka, ktoré pochádzajú z throttle() v define() alebo z buildera monitor().
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.