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

Údržbové okná a stlmenie

Počas nasadenia či údržby potlačte notifikácie o alertoch a behy pritom zapisujte ďalej. Údržbové okná spravuje Health::silences():

use RoundlyConsulting\Alerts\Facades\Health;

Health::silences()->mute('disk_usage_check', until: now()->addMinutes(30), reason: 'db migration');
Health::silences()->mute('disk_usage_check', until: now()->addHour());  // same key and scope: extends that one silence
Health::silences()->isMuted('disk_usage_check');   // true
Health::silences()->unmute('disk_usage_check');    // int: silences lifted

Health::silences()->mute('critical');              // mute a whole tag
Health::silences()->mute('*');                     // mute everything
Health::silences()->mute('disk_usage_check', for: $team);   // scope the mute to one owner
Health::silences()->unmute('disk_usage_check', for: $team); // lift only that owner's silence
  • Kľúč je kľúč kontroly, tag alebo * pre všetko. Pri behu je riadok stlmený, keď stlmenie zodpovedá jeho kľúču kontroly, niektorému z efektívnych tagov alebo *.
  • until je voliteľné: bez neho stlmenie platí, kým ho nezrušíte. mute() platí okamžite a vráti záznam AlertSilence s voliteľným dôvodom (reason).
  • Opätovné stlmenie rovnakého kľúča v rovnakom rozsahu — globálne alebo pre toho istého vlastníka — aktualizuje to jedno stlmenie namiesto pridania ďalšieho: nahradí sa jeho dôvod aj koniec, takže okno predĺžite alebo skrátite. Globálne a vlastníkove stlmenie toho istého kľúča zostanú oddelené a ani dve súbežné volania mute() nezanechajú viac ako jeden riadok. Stlmenie, ktoré váš kód zapíše priamo cez model AlertSilence, identitu nemá a nikdy sa nezlúči.
  • for: obmedzí stlmenie na jedného vlastníka. Stlmenie bez vlastníka platí pre všetkých.
  • unmute() zmaže stlmenia pre daný kľúč — pri zadanom for: tie vlastníkove, inak len globálne — a vráti ich počet.
  • isMuted() overí aktívne stlmenie presne pre kľúč, ktorý zadáte — kľúč kontroly, tag alebo * — bez rozširovania na tagy či *. Bez vlastníka zodpovedá akémukoľvek stlmeniu daného kľúča; s vlastníkom jeho stlmeniam a globálnym. Pri vypnutom silence v konfigurácii vždy vráti false.

Čo sa deje počas stlmenia

Behy, história aj počítadlá sa udržiavajú a alerty sa naďalej otvárajú a zatvárajú. HealthCheckFailed, HealthCheckRecovered, HealthCheckEscalated a všetky notifikácie sú potlačené. Dotknuté alerty dostanú príznak meta['muted']; ten sa riadi posledným behom, takže zmizne, keď zlyhania pokračujú aj po skončení okna. Stavový report však muted číta z práve platných stlmení, podľa toho istého pravidla — stlmená kontrola bez otvoreného alertu sa teda ukáže ako stlmená a alert otvorený počas stlmenia, ktoré medzitým skončilo, nie.

Nastavením silence na false v konfigurácii ignorujete všetky stlmenia bez toho, aby ste ich mazali.

Prehľad stlmení

active() vráti stlmenia platné teraz — všetky, alebo globálne plus tie obmedzené na vlastníka. Pre vlastné dopyty má AlertSilence scopes active() a matching(), na ktorých to stojí:

use RoundlyConsulting\Alerts\AlertSilence;
use RoundlyConsulting\Alerts\Facades\Health;

Health::silences()->active();        // Collection<AlertSilence> in force now
Health::silences()->active($team);   // global silences + those scoped to $team

// The model scopes behind it, for your own queries:
AlertSilence::query()->active(now())->get();
AlertSilence::query()->matching(['critical'], $team)->exists();  // a 'critical' mute for this team, or a global one

Je tento riadok stlmený?

snapshot() načíta jedným dopytom všetky stlmenia platné v jednom okamihu a pre ľubovoľný počet riadkov odpovedá podľa toho istého pravidla, aké používa beh: kľúč kontroly riadka, niektorý z jeho efektívnych tagov alebo *, z globálneho stlmenia alebo zo stlmenia pre vlastníka riadka. covers() je skratka pre jeden riadok. Pri vypnutom silence v konfigurácii je snímka prázdna:

use RoundlyConsulting\Alerts\Facades\Health;

$silences = Health::silences()->snapshot();   // every silence in force now, one query; snapshot($at) for another moment

foreach ($team->healthChecks as $row) {
    $silences->covers($row);                  // muted by its key, one of its tags or *, globally or for its owner?
}

$silences->isEmpty();                         // nothing is muted at all
Health::silences()->covers($row);             // the one-row shortcut (one query)

Na každú požiadavku stačí jedna snímka, ktorej sa opýtate na všetky riadky — v kontajneri ju môžete zaregistrovať ako scoped inštanciu. Stavový report ju používa tiež.

Prečistenie skončených stlmení

Skončené okná by sa inak hromadili. alerts:prune-silences — plánovaný denne, kým je silence zapnuté — zmaže stlmenia, ktoré skončili pred viac ako silence-retention dňami (predvolene 7); z kódu zavolajte Health::silences()->prune(). Stlmení bez konca, práve platných ani budúcich sa nikdy nedotkne:

php artisan alerts:prune-silences --days=14
use RoundlyConsulting\Alerts\Facades\Health;

Health::silences()->prune();    // ended more than alerts.silence-retention days ago; returns the number deleted
Health::silences()->prune(3);   // ended more than 3 days ago
Health::silences()->prune(0);   // throws InvalidRetention — the retention must be at least 1 day

--days musí byť celé číslo aspoň 1: čokoľvek iné vypíše chybu, skončí nenulovým kódom a nič nezmaže.

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.