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

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