Eskalačné politiky
Keď zlyhanie trvá, upozorňujte širšie publikum. Mapu prah ⇒ skupina deklarujete cez escalate([...]): kľúče sú počty po sebe idúcich zlyhaní, hodnoty pomenované skupiny príjemcov, ktoré rieši model vlastníka:
Health::for($team)->monitor(DatabaseCheck::class)
->everyMinute()
->escalate([1 => 'owner', 3 => 'team', 5 => 'oncall'])
->save();use Closure;
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Alerts\Interfaces\HasNotifiablesForAlerts;
use RoundlyConsulting\Alerts\Traits\UsesHealthChecks;
class Team extends Model implements HasNotifiablesForAlerts
{
use UsesHealthChecks; // provides a default notifiablesForAlertGroup()
public function forEachNotifiableForAlerts(Closure $callback): void { /* default group */ }
// Override to map named groups to real notifiables:
public function notifiablesForAlertGroup(string $group): iterable
{
return match ($group) {
'owner' => [$this->owner],
'team' => $this->members,
'oncall' => $this->onCallEngineers(),
default => $this->members,
};
}
}Trait ResolvesAlertGroups, pribalený v UsesHealthChecks, vráti pre akýkoľvek názov predvolenú skupinu. Vlastníci teda nepotrebujú žiadnu zmenu, pokiaľ nechcú pomenované skupiny.
Ako sa úrovne posúvajú
- Úroveň je najvyšší prah, ktorý je menší alebo rovný aktuálnemu počtu po sebe idúcich zlyhaní. Ukladá sa v alerte ako escalation_level a pri obnove sa vráti na 0.
- Každá novo dosiahnutá úroveň upozorní len svoju skupinu (skupiny). Ak jeden beh preskočí viac prahov — napríklad failAfter(3) s [1 => 'owner', 3 => 'team'] — každá skupina medzi nimi dostane notifikáciu raz.
- HealthCheckEscalated($alert, $fromLevel, $toLevel) sa pri každom prechode spustí práve raz. Úroveň sa preberá operáciou compare-and-swap, takže dva prekrývajúce sa behy nikdy neupozornia tú istú úroveň dvakrát.
- S politikou nikto nedostane notifikáciu pred dosiahnutím prvého prahu. Ak má niekoho zastihnúť už prvé zlyhanie s alertom, začnite prahom 1. HealthCheckFailed sa spúšťa pri každom zlyhanom behu.
- Kanály pre úroveň určuje notifyVia([...], level: n), kde n je číslo prahu.
Globálny default
Kontrola bez vlastnej politiky zdedí globálny default z config('alerts.escalation'), takže môžete nastaviť jednu politiku pre celú aplikáciu a pre jednotlivé kontroly ju prepísať:
// config/alerts.php
'escalation' => [1 => 'owner', 3 => 'team', 5 => 'oncall'],Politika sú len dáta — smerovanie na skutočných ľudí vždy prebieha cez notifiablesForAlertGroup() vlastníka.
Reakcia na eskaláciu
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Alerts\Events\HealthCheckEscalated;
Event::listen(function (HealthCheckEscalated $event) {
logger()->warning('Health check escalated', [
'check' => $event->alert->healthCheck?->health_check,
'from' => $event->fromLevel,
'to' => $event->toLevel,
]);
});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.