---
title: "Vlastné kontroly — Alerts for Laravel | Roundly"
description: "Rozšírte Check, implementujte check() a notification(), čítajte meta naplánovaného riadka a vracajte výsledky ok, warning, failed či skipped."
url: https://roundly-consulting.com/sk/open-source/navody/alerts-for-laravel/vlastne-kontroly
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Alerts for Laravel](https://roundly-consulting.com/sk/open-source/navody/alerts-for-laravel.md)

# Vlastné kontroly

Rozšírte RoundlyConsulting\\Alerts\\Check a implementujte check() a notification():

```php
use Illuminate\Notifications\Notification;
use RoundlyConsulting\Alerts\Check;
use RoundlyConsulting\Alerts\CheckResult;

class DiskUsageCheck extends Check
{
    public function check(): CheckResult
    {
        // $this->healthCheck holds the scheduled HealthCheck record and its meta.
        $serverId = $this->healthCheck?->meta['server_id'] ?? null;

        return CheckResult::ok(
            message: 'Disk usage within limits',
            meta: ['server_id' => $serverId],
        );

        // Return CheckResult::failed('Disk almost full', [...]) to trigger an alert.
    }

    public function notification(object $notifiable): Notification
    {
        return new DiskUsageNotification();
    }
}
```

$this->healthCheck je naplánovaný riadok HealthCheck, pre ktorý kontrola beží, aj s jeho meta. Keď kontrola beží bez riadka — napríklad alerts:check bez --notifiable — je null, preto ho čítajte null-safe.

## Úplnejší príklad

Prepíšte name(), key(), description() alebo tags(), ak chcete zmeniť, ako sa kontrola prezentuje. Tu deklarované tagy sa zlúčia s tagmi každého riadka. Použite pribalenú notifikáciu a odovzdajte jej $this->channels(), aby platilo notifyVia():

```php
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Http;
use RoundlyConsulting\Alerts\Check;
use RoundlyConsulting\Alerts\CheckResult;
use RoundlyConsulting\Alerts\Notifications\HealthCheckFailedNotification;

class PaymentGatewayCheck extends Check
{
    public function name(): string
    {
        return 'Payment gateway';
    }

    public function tags(): array
    {
        return ['critical', 'billing'];
    }

    public function check(): CheckResult
    {
        $url = $this->healthCheck?->meta['url'] ?? 'https://payments.example.com/status';

        // No try/catch needed — a thrown exception becomes a failed result.
        $response = Http::timeout(5)->get($url);

        return $response->successful()
            ? CheckResult::ok('Gateway reachable', ['url' => $url])
            : CheckResult::failed('Gateway returned '.$response->status(), ['url' => $url]);
    }

    public function notification(object $notifiable): Notification
    {
        // Reuse the bundled notification and honour notifyVia() routing.
        return new HealthCheckFailedNotification($this, channels: $this->channels());
    }
}
```

Keďže každý riadok nesie vlastné meta, jedna trieda kontroly môže pre toho istého vlastníka sledovať viacero služieb. Každý riadok má vlastné počítadlá, alerty aj obmedzenie notifikácií:

```php
// One check class, two monitors — each row carries its own target in meta.
Health::for($team)->monitor(PaymentGatewayCheck::class)
    ->everyMinute()
    ->meta(['url' => 'https://payments.example.com/status'])
    ->save();

Health::for($team)->monitor(PaymentGatewayCheck::class)
    ->everyMinute()
    ->meta(['url' => 'https://payouts.example.com/status'])
    ->save();
```

Takto napísaný kód pri opätovnom spustení pridá ďalšie dva riadky. Prepíšte uniqueBy() — tu nech vráti \['url'\] — a opätovné naplánovanie tej istej URL potom aktualizuje jej riadok namiesto pridania ďalšieho (pozri Identita plánov a zmena nastavení).

Pri registrácii alebo plánovaní podľa názvu triedy sa kontroly vytvárajú bez argumentov konštruktora. Konfiguráciu preto držte vo fluentných setteroch registrovanej inštancie alebo v meta riadka.

## Výsledky a závažnosť

CheckResult nesie Status — ok, warning, failed alebo skipped — a k nemu správu a pole meta:

```php
use RoundlyConsulting\Alerts\CheckResult;

CheckResult::ok();
CheckResult::warning('Disk filling up');
CheckResult::failed('Disk full');
CheckResult::skipped('Maintenance window');
```

| Stav | Závažnosť | Účinok behu |
| --- | --- | --- |
| `ok` | 0 | Vynuluje počítadlo zlyhaní a počíta sa do obnovy otvoreného alertu. |
| `skipped` | 1 | Zaznamená beh a nič viac — žiadne počítadlá, alert ani notifikácia. |
| `warning` | 2 | Počíta sa ako zlyhanie: otvorí alert a upozorní, rovnako ako failed. |
| `failed` | 3 | Počíta sa ako zlyhanie: otvorí alert a upozorní. |

```php
use RoundlyConsulting\Alerts\CheckResult;
use RoundlyConsulting\Alerts\Enums\Status;

$result = CheckResult::failed('Disk full', ['free_bytes' => 1024]);

$result->status;   // Status::Failed
$result->message;  // 'Disk full'
$result->meta;     // ['free_bytes' => 1024]
$result->isOk;     // false — legacy flag, true only for Status::Ok

new CheckResult(true);                     // same as CheckResult::ok()
new CheckResult(false, 'Down');            // same as CheckResult::failed('Down')
new CheckResult(Status::Warning, 'Slow');  // any Status works too
```

V check() nikdy nepotrebujete try/catch: vyhodená výnimka sa automaticky zmení na výsledok failed a jej podrobnosti skončia vo vašich logoch, nie v uložených alertoch (pozri Časové limity a chyby).

## Enum Status

Status si ponecháva doménové metódy isAlertable() a severity() a používa trait Helpers z enums-for-laravel, takže je pripravený pre výberové polia, validačné pravidlá aj API odpovede:

```php
use RoundlyConsulting\Alerts\Enums\Status;

Status::Warning->isAlertable();  // true — opens an alert and notifies
Status::Failed->severity();      // 3 (ok 0, skipped 1, warning 2, failed 3)

Status::values();                // Collection: ok, warning, failed, skipped
Status::toOptions();             // Collection: 'ok' => 'Ok', 'warning' => 'Warning', …
Status::validationRule();        // 'in:ok,warning,failed,skipped'
Status::Failed->label();         // 'Failed'
Status::tryFromLabel('Warning'); // Status::Warning
```

K dispozícii sú aj names(), labels(), options(), readable(), fromName()/tryFromName(), fromLabel(), hasValue(), is()/isIn() a podmienky when\*.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

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

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/alerts-for-laravel.md)
