NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Alerts for Laravel

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 kryptomien

Odoslaní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.