Notifikácie a obmedzovanie
Bez eskalačnej politiky každý zlyhaný beh, ktorý prejde cez tlmenie kolísania, upozorní predvolenú skupinu vlastníka — každého príjemcu, ktorého vráti forEachNotifiableForAlerts(). S politikou odchádzajú notifikácie len pri dosiahnutí novej úrovne (pozri Eskalačné politiky). Počas stlmenia sa neposiela nič.
Obmedzenie
throttle(maxAttempts, decayMinutes) obmedzí notifikácie na maxAttempts za decayMinutes pre každého príjemcu každého naplánovaného riadka. Predvolene je to jedna za minútu — kontrola spúšťaná každú minútu teda počas incidentu upozorňuje každú minútu, pokiaľ decayMinutes nezvýšite:
Health::for($team)->monitor(DiskUsageCheck::class)
->everyMinute()
->throttle(maxAttempts: 1, decayMinutes: 60) // at most one notification per hour per recipient
->save();Obmedzenie používa RateLimiter Laravelu, a teda vaše predvolené cache úložisko. Ak queue workery bežia na viacerých serveroch, použite zdieľané úložisko, napríklad Redis alebo databázu.
Pribalená notifikácia
Vstavané kontroly a inline kontroly bez notifyUsing() upozorňujú cez HealthCheckFailedNotification. Posiela e-mail v štýle chyby s predmetom „Health check failed: <názov>“ a s dôvodom zlyhania — správou zlyhaného výsledku — a jej toArray() (check, name, message) napája kanál database. Varovania používajú tú istú notifikáciu. Texty upravíte po publikovaní prekladov:
// lang/vendor/alerts/en/notifications.php
return [
'subject' => 'Health check failed: :name',
'line' => 'The health check ":name" has failed.',
];Predvolené kanály sú mail a database. Kanál database potrebuje tabuľku notifikácií Laravelu — vytvorte ju, alebo smerujte len na mail cez notifyVia(['mail']):
# The default channels are mail + database; the database channel needs this table
php artisan make:notifications-table
php artisan migrateDôvod je skrátený rovnako ako uložená správa (1000 znakov). Úplné meta výsledku prečítate z $alert->meta v listeneri HealthCheckFailed, alebo pošlite vlastnú notifikáciu.
Smerovanie kanálov
notifyVia() nastaví kanály pribalenej notifikácie; notifyVia([...], level: n) ich prepíše pre jednu eskalačnú úroveň. Výsledný zoznam sa určí v poradí prepis úrovne → globálny zoznam → ['mail', 'database']:
Health::for($team)->monitor(DatabaseCheck::class)
->notifyVia(['database']) // in-app only at first
->notifyVia(['mail', 'database'], level: 3) // add mail once threshold 3 is reached
->escalate([1 => 'owner', 3 => 'team'])
->save();Pribalená notifikácia implementuje len toMail() a toArray(). Pre Slack, SMS či iný kanál pošlite vlastnú notifikáciu.
Vlastné notifikácie
notification() kontroly — alebo notifyUsing() inline kontroly — môže vrátiť akúkoľvek notifikáciu Laravelu, ktorá si sama riadi via(). Ak chcete zachovať notifyVia(), odovzdajte jej $this->channels(). Počas behu vráti $this->result() zlyhaný výsledok, o ktorom sa upozorňuje, takže notifikácia môže uviesť dôvod:
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class DiskUsageNotification extends Notification
{
public function __construct(
private array $channels = ['mail'],
private string $reason = '',
) {}
public function via(object $notifiable): array
{
return $this->channels;
}
public function toMail(object $notifiable): MailMessage
{
return (new MailMessage)
->error()
->subject('Disk usage is critical')
->line('The disk usage check on the primary server has failed.')
->lineIf($this->reason !== '', $this->reason);
}
}
// In DiskUsageCheck — pass along the channels resolved from notifyVia()
// and the message of the failing result being notified about:
public function notification(object $notifiable): Notification
{
return new DiskUsageNotification($this->channels() ?? ['mail'], (string) $this->result()?->message);
}Obnova
Pri obnove alertu sa žiadna notifikácia neposiela. Balík odošle udalosť HealthCheckRecovered — počúvajte ju a pošlite správu o obnovení (pozri Udalosti).
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.