Ú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 oneJe 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=14use 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 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.