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

Plánovanie kontrol

Health::for($owner) obmedzí všetky operácie na jedného vlastníka. Použite jeho fluentný builder s predvolenými frekvenciami a triedou kontroly — bez magických reťazcov:

use RoundlyConsulting\Alerts\Facades\Health;

$team = Team::first();

Health::for($team)->monitor(DiskUsageCheck::class)
    ->everyFiveMinutes()
    ->throttle(maxAttempts: 2, decayMinutes: 60)
    ->meta(['server_id' => '2d4fcdff-9787-49b1-8b73-3d411f80ae1b'])
    ->save();

// The same builder through the model trait:
$team->monitorCheck(DiskUsageCheck::class)->everyFiveMinutes()->save();

monitor() prijme názov triedy Check alebo registrovaný kľúč — kľúč inline kontroly alebo inštancie registrovanej cez as(). Pri inline kontrole builder začne od volieb deklarovaných v define(). Existujúca trieda, ktorá nerozširuje Check, vyhodí InvalidHealthCheck. save() uloží a vráti riadok HealthCheck.

Frekvencie

MetódaUložená frekvencia
everyMinute()* * * * * (predvolené)
everyFiveMinutes()*/5 * * * *
everyTenMinutes()*/10 * * * *
everyFifteenMinutes()*/15 * * * *
everyThirtyMinutes()*/30 * * * *
hourly()@hourly
daily()@daily
weekly()@weekly
monthly()@monthly
frequency(string)názov predvoľby (hourly, everyFiveMinutes, yearly, …) prevedený cez Frequency::toCron(), alebo cron reťazec
cron(string)výraz presne tak, ako ho zadáte
$monitors = Health::for($team);

$monitors->monitor(DiskUsageCheck::class)->hourly()->save();
$monitors->monitor(DiskUsageCheck::class)->frequency('hourly')->save();           // preset by name
$monitors->monitor(DiskUsageCheck::class)->frequency('everyFiveMinutes')->save();
$monitors->monitor(DiskUsageCheck::class)->cron('15 3 * * *')->save();            // 03:15 every day
$monitors->monitor(DiskUsageCheck::class)->cron('0 9-17 * * 1-5')->save();        // hourly, office hours
$monitors->monitor(DiskUsageCheck::class)->cron('0 9 * * MON-FRI')->save();       // day and month names work too

Splatnosť vyhodnocuje malý natívny parser cronu: päť polí (minúta, hodina, deň v mesiaci, mesiac, deň v týždni) s *, zoznamami (1,2,3), rozsahmi (1-5) a krokmi (*/5, 1-30/2), názvami dní a mesiacov (MON-FRI, JAN,JUL — bez ohľadu na veľkosť písmen) a aliasmi @yearly, @annually, @monthly, @weekly, @daily, @midnight a @hourly. Nedeľu označuje 0 aj 7.

Výrazy sa overujú pri save(): výraz, ktorý plánovač nevie vyhodnotiť, vyhodí InvalidCronExpression a nič sa neuloží — cron reťazec od používateľa teda zlyhá už tam, kde ho ukladáte:

use RoundlyConsulting\Alerts\Exceptions\InvalidCronExpression;

try {
    Health::for($team)->monitor(DiskUsageCheck::class)->cron($expression)->save();
} catch (InvalidCronExpression $e) {
    // The scheduler could not evaluate it — nothing was stored.
}

Riadok zapísaný inak — seederom alebo ručne — sa kontroluje pri behu: Health::runDue() riadok s cronom, ktorý nevie vyhodnotiť, preskočí, nahlási ho vášmu exception handleru a riadky za ním odošle ďalej.

Všetky voľby

Ten istý builder prijíma tlmenie kolísania, potvrdenie obnovy, časový limit kontroly, tagy, smerovanie kanálov a eskalačnú politiku:

use RoundlyConsulting\Alerts\Checks\DatabaseCheck;

Health::for($team)->monitor(DatabaseCheck::class)
    ->everyFiveMinutes()
    ->failAfter(3)                                // open only after 3 consecutive failures
    ->recoverAfter(2)                             // close only after 2 consecutive OKs
    ->timeout(5)                                  // mark failed after 5 seconds
    ->tags(['critical', 'db'])                    // group + filter
    ->notifyVia(['database'])                     // channels for the default notification
    ->notifyVia(['mail', 'database'], level: 3)   // override channels at escalation level 3
    ->escalate([1 => 'owner', 3 => 'team', 5 => 'oncall'])
    ->throttle(maxAttempts: 3, decayMinutes: 10)
    ->save();
MetódaÚčinokPredvolené
throttle(int $maxAttempts, int $decayMinutes)Najviac maxAttempts notifikácií za decayMinutes na príjemcu pre tento riadok.1 za 1 minútu
failAfter(int)Počet po sebe idúcich zlyhaní, kým sa otvorí alert (hodnoty pod 1 sa zaokrúhlia na 1).1
recoverAfter(int)Počet po sebe idúcich úspechov, kým sa otvorený alert zatvorí.1
timeout(int $seconds)Časový limit pre check(); prekročenie sa stane výsledkom failed.žiadny
tags(array)Tagy na zoskupenie, filtrovanie reportov a stlmenie (bez duplicít).[]
notifyVia(array $channels, ?int $level = null)Kanály pribalenej notifikácie — globálne alebo pre jednu eskalačnú úroveň.mail, database
escalate(array $policy)Eskalačná politika: prah po sebe idúcich zlyhaní ⇒ skupina príjemcov.escalation z configu
meta(array)Vaše vlastné dáta, v kontrole dostupné ako $this->healthCheck->meta.[]
save()Uloží a vráti riadok HealthCheck.—

Deklaratívne voľby sa ukladajú do meta riadka pod rezervovanými kľúčmi — fail_after, recover_after, timeout, notify_via, notify_via_levels a escalation — vedľa vašich vlastných meta údajov. Tieto názvy v meta() nepoužívajte. Voľby s predvolenou hodnotou sa nezapisujú.

Plánovanie z DTO

schedule() prijme ScheduleHealthCheckData a trait ponúka to isté volanie ako skratku:

use RoundlyConsulting\Alerts\DataTransferObjects\ScheduleHealthCheckData;

Health::for($team)->schedule(new ScheduleHealthCheckData(
    check: DiskUsageCheck::class, frequency: 'hourly', maxAttempts: 2, decayMinutes: 60,
));

// Trait shortcuts for the same call:
$team->monitor(new ScheduleHealthCheckData(check: DiskUsageCheck::class, frequency: 'hourly'));
$team->createHealthCheck('disk_usage_check', '*/5 * * * *', maxAttempts: 2, decayMinutes: 60, tags: ['db']);
new ScheduleHealthCheckData(
    string $check,                   // Check class-string or registered key
    string $frequency = '* * * * *', // preset name or cron
    int $maxAttempts = 1,
    int $decayMinutes = 1,
    int $failAfter = 1,
    int $recoverAfter = 1,
    ?int $timeout = null,
    array $tags = [],
    ?array $notifyVia = null,
    array $notifyViaLevels = [],     // [level => channels]
    array $escalation = [],          // [threshold => group]
    array $meta = [],
);

DTO prevedie názov triedy na kľúč a názov predvoľby na cron a výsledok overí; platný cron reťazec uloží bez zmeny. createHealthCheck() je skratka s pozičnými argumentmi, ktorá zostaví to isté DTO a naplánuje ho cez Health::for($this).

Zoznam a odstránenie plánov

Health::for($team)->monitors();                        // Collection<HealthCheck>, oldest first
Health::for($team)->unmonitor(DiskUsageCheck::class);  // soft-deletes the team's schedules; returns the count
Health::for($team)->unmonitor($healthCheck);           // one row — refused if it belongs to another owner

monitors() vypíše len naplánované riadky — riadky na požiadanie, ktoré si drží run(), vynechá. unmonitor() prijme názov triedy kontroly, registrovaný kľúč, inštanciu Check alebo riadok HealthCheck. Riadok naplánovaný pre iného vlastníka vyhodí InvalidHealthCheck — handle je bezpečnostná hranica.

Enum Frequency

use RoundlyConsulting\Alerts\Enums\Frequency;

Frequency::toCron('everyFiveMinutes'); // '*/5 * * * *' (names match case-insensitively)
Frequency::toCron('yearly');           // '@yearly'
Frequency::toCron('15 3 * * *');       // anything else is returned unchanged
Frequency::Hourly->value;              // '@hourly'
Frequency::names();                    // Collection: EveryMinute, EveryFiveMinutes, …

Frequency má rovnaké pomocné metódy z enums-for-laravel ako Status. Jeho hodnoty sú cron reťazce, preto výberové polia stavajte z names() alebo z mapy frequencies() kontroly, nie z labels().

Práca s riadkom

$row = $team->healthChecks()->first();

$row->health_check;            // 'disk_usage_check'
$row->frequency;               // '*/5 * * * *'
$row->consecutive_failures;    // flap counter
$row->effectiveTags();         // row tags merged with the check's own tags()
$row->isScheduled();           // false for an on-demand (run-now) row
$row->isDue();                 // is the cron due this minute? (never for an on-demand row)
$row->options()->failAfter();  // declarative options read back from meta
$row->dispatchHealthCheckJob(); // queue a run right now, due or not

$row->delete();                // soft delete — the scheduler skips it
$row->restore();               // and picks it up again

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.