Spúšťanie kontrol
Keď je schedule.enabled true (predvolené), balík zaregistruje alerts:perform-health-checks v plánovači Laravelu s withoutOverlapping() a metódou zo schedule.frequency. Pri zapnutej histórii naplánuje aj denný alerts:prune-runs, bez ohľadu na schedule.enabled. Ak chcete príkaz zapojiť sami, prepínač vypnite a príkaz pridajte do routes/console.php — denné prečistenie zostane naplánované:
use Illuminate\Support\Facades\Schedule;
Schedule::command('alerts:perform-health-checks')->everyMinute();php artisan alerts:perform-health-checksPríkaz zavolá Health::runDue(), ktorý prejde všetky naplánované riadky, pre každý, ktorého cron je v aktuálnej minúte splatný, odošle nakonfigurovaný job (predvolene HealthCheckJob) a vráti počet odoslaných jobov — príkaz ho vypíše. Soft-deleted riadky a riadky na požiadanie preskočí. Riadok s cronom, ktorý nemožno vyhodnotiť (zapísaný seederom alebo ručne, keďže save() overuje), preskočí a nahlási vášmu exception handleru; riadky za ním odošle ďalej. Zavolať ho môžete aj sami, odkiaľkoľvek:
use RoundlyConsulting\Alerts\Facades\Health;
$queued = Health::runDue(); // int — what alerts:perform-health-checks callsKeďže splatnosť sa overuje v minúte, keď príkaz beží, nechajte ho na everyMinute, pokiaľ všetky vaše crony nesedia s hrubším intervalom.
Plánovač a fronta
HealthCheckJob je job vo fronte, preto musí bežať plánovač Laravelu aj queue worker. So sync ovládačom fronty kontroly bežia priamo.
# Laravel's scheduler must run for scheduled checks to fire
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
# Locally: php artisan schedule:work
# And a queue worker to execute the queued HealthCheckJob:
php artisan queue:workČo urobí jeden beh
Každý beh — z fronty aj synchrónny — prejde jednou internou cestou, RunHealthCheckAction. Voľby sa čítajú z uloženého riadka, takže prežijú serializáciu vo fronte:
- Spustí check() s časovým limitom riadka a ochranou pred výnimkami a zmeria čas.
- Zapíše HealthCheckRun (ak je história zapnutá).
- Výsledok skipped tu končí — žiadne počítadlá ani vedľajšie účinky alertu.
- Aktualizuje consecutive_failures alebo consecutive_successes. Prírastky sú atomické, takže prekrývajúce sa behy nikdy nestratia započítanie.
- Overí aktívne stlmenie pre kľúč kontroly, jej tagy alebo *.
- Pri zlyhaní: otvorený alert najprv prevezme výsledok — stav, správu a príznak stlmenia. Po dosiahnutí failAfter() otvorí alert (alebo použije otvorený), odošle HealthCheckFailed a potom upozorní alebo eskaluje. Kontrola má najviac jeden otvorený alert, aj keď sa dva behy prekrývajú.
- Pri úspechu: po dosiahnutí recoverAfter() zatvorí otvorený alert, vynuluje eskalačnú úroveň a odošle HealthCheckRecovered — raz, aj keď sa dva behy prekrývajú.
Spustenie kontroly hneď
Spustite kontrolu synchrónne pre vlastníka. Vykoná rovnaké vedľajšie účinky ako job vo fronte — alert, notifikácie aj obnovu — a vráti CheckResult. Názov triedy spustí inštanciu, ktorú ste pre túto triedu zaregistrovali, aj s jej konfiguráciou; inštancia spustí seba samu. Registrovanú kontrolu nezmení ani jedno:
use RoundlyConsulting\Alerts\Facades\Health;
$result = Health::for($team)->run(DiskUsageCheck::class);
$result->status; // Status::Ok | Warning | Failed | Skipped
// Run one of the team's scheduled rows as-is (another owner's row is refused):
Health::for($team)->run($team->healthChecks()->first());
// An inline check has no class — run it by its registered key:
Health::for($team)->run('redis-up');Okamžité spustenie kontrolu nikdy nezačne monitorovať. Ak má vlastník pre kontrolu naplánovaný riadok, beh prejde cez neho a zdieľa jeho počítadlá, históriu aj alerty. Inak balík vytvorí riadok na požiadanie (frequency je null), ktorý medzi ručnými behmi uchováva počítadlá, históriu a alerty vlastníka pre túto kontrolu. Plánovač ho nikdy nespustí a monitors() ho nevypíše — na pravidelné monitorovanie použite monitor().
S niektorým z riadkov vlastníka run() spustí tento riadok tak, ako je; riadok iného vlastníka vyhodí InvalidHealthCheck. Trieda registrovaná cez as() pod viacerými kľúčmi je podľa názvu triedy nejednoznačná — spustite ju podľa kľúča.
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.