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

Sledovanie expirácie

Expirácia certifikátu je plnohodnotný zdravotný signál vedený cez alerts-for-laravel, takže dedí deduplikáciu a throttling upozornení, eskaláciu, tiché okná, históriu behov aj rozhranie /health. CertificateExpiryCheck (kľúč certificate_expiry, tag certificates) zaradí certifikát do pásma podľa dvoch časových okien:

  • Failed — v kritickom okne (alerts.thresholds.critical_days, predvolene 7) alebo nefunkčný: po expirácii, v stave Expired, Revoked či Failed (posledné vystavenie alebo obnova zlyhali).
  • Warning — vo varovnom okne (alerts.thresholds.warning_days, predvolene 30).
  • OK — expirácia je ďalej. Certifikát bez expirácie sa preskočí.

Monitory jednotlivých certifikátov

Certificates::monitorExpiry() vracia builder PendingScheduledCheck z alerts, označený tagom certificates a naviazaný na certifikát, takže pred uložením nastavíte frekvenciu, tlmenie výkyvov, kanály a eskaláciu:

use RoundlyConsulting\Certificates\Facades\Certificates;

Certificates::monitorExpiry($certificate, $opsTeam)
    ->daily()                                   // or hourly(), cron('0 6 * * *'), …
    ->failAfter(1)                              // open the alert on the first bad run
    ->notifyVia(['mail'])                       // channels for every level without its own list
    ->escalate([1 => 'owner', 3 => 'oncall'])   // consecutive bad runs => alert group
    ->notifyVia(['mail', 'slack'], level: 3)    // channels once the oncall level is reached
    ->save();

// Own bands for this monitor — meta() replaces the preset, so keep certificate_id
Certificates::monitorExpiry($certificate, $opsTeam)
    ->meta(['certificate_id' => $certificate->id, 'warning_days' => 45, 'critical_days' => 14])
    ->daily()
    ->save();

Príjemca sa určí v poradí explicitný argument → alerts.notifiable → vlastník certifikátu cez certifiable; ak sa nenájde žiadny, monitorExpiry() vyhodí CertificateException. Model príjemcu používa trait UsesHealthChecks a rozhranie HasNotifiablesForAlerts z alerts:

use App\Models\User;
use Closure;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use RoundlyConsulting\Alerts\Interfaces\HasNotifiablesForAlerts;
use RoundlyConsulting\Alerts\Traits\UsesHealthChecks;

final class OpsTeam extends Model implements HasNotifiablesForAlerts
{
    use Notifiable;
    use UsesHealthChecks;

    // The default group — notified on every bad run when no escalation policy is set.
    public function forEachNotifiableForAlerts(Closure $callback): void
    {
        $callback($this);
    }

    // Optional: map escalation groups. The trait's default returns the default group for any name.
    public function notifiablesForAlertGroup(string $group): iterable
    {
        return match ($group) {
            'oncall' => User::query()->where('on_call', true)->get(),
            default => [$this],
        };
    }
}

Rozhranie je povinné: monitor, ktorého príjemca neimplementuje HasNotifiablesForAlerts, vyhodí InvalidNotifiableForHealthCheck vo chvíli, keď má prvýkrát upozorniť. UsesHealthChecks pridá relácie healthChecks() a alerts() a predvolenú notifiablesForAlertGroup().

  • escalate() priradí počtu zlých behov za sebou — warning aj failed — skupinu príjemcov. Keď je politika nastavená, nahradí predvolené upozornenie: upozornia sa len skupiny, ktorých prah sa dosiahol, každá raz. Úroveň preto dajte aj prvému behu, ako 1 => 'owner' vyššie — samotné escalate([3 => 'oncall']) pri dennom monitore dva dni mlčí.
  • Bez escalate() každý zlý beh upozorní predvolenú skupinu (forEachNotifiableForAlerts), s throttlingom z alerts; monitor bez vlastnej politiky preberie alerts.escalation.
  • notifyVia() bez úrovne nastaví kanály pre všetky úrovne; s level: prepíše jeden prah.
  • monitorExpiry() vopred nastaví meta(['certificate_id' => …]). Vlastné volanie meta() ho nahradí, preto certificate_id odovzdajte znova — a k tomu warning_days a critical_days pre vlastné pásma. Bez certificate_id monitor kontroluje celý register.
  • Uložené monitory bežia vo vlastnej frekvencii cez alerts:perform-health-checks, ktorý alerts zaregistruje v plánovači (alerts.schedule.enabled), takže im stačí bežný cron so schedule:run.

Kontrola a upozornenie jedným príkazom

certificates:check prehľadá register pre expirujúce certifikáty (renewal.threshold_days alebo --threshold), pre každý spustí CertificateExpiring a vypíše tabuľku. S --alert — alebo pri alerts.enabled — navyše spustí kontrolu expirácie cez engine alerts pre každý certifikát a otvorí jeden throttlovaný, automaticky sa zotavujúci Alert pre určeného príjemcu. Nikdy neobnovuje:

use Illuminate\Support\Facades\Schedule;

Schedule::command('certificates:check --alert')->daily();

Okno prehľadávania je prah obnovy, nie varovné okno — celé predvolené varovné pásmo pokryjete cez --threshold=30.

Zlyhania životného cyklu a signál za celý register

Pri alerts.enabled spustia kontrolu pre daný certifikát automaticky aj CertificateFailed, CertificateRevoked a CertificateExpired. Nastavením alerts.register_check sa pri štarte zaregistruje jeden globálny CertificateExpiryCheck — zlyhá, keď je ktorýkoľvek spravovaný certifikát v kritickom okne, už po expirácii, v stave Expired alebo Failed, a upozorňuje cez alerts.channels. Odvolané certifikáty sú vedomé rozhodnutie (upozorní na ne raz CertificateRevoked) a nezapočítavajú sa:

// config/certificates.php
'alerts' => [
    'enabled' => true,
    'notifiable' => App\Models\OpsTeam::class, // resolved from the container
    'thresholds' => ['warning_days' => 30, 'critical_days' => 7],
    'channels' => ['mail', 'slack'],
    'register_check' => true,
],

Upozornenia na expiráciu počas plánovanej migrácie stlmíte cez prístupový bod silences() fasády Health z alerts:

use RoundlyConsulting\Alerts\Facades\Health;

Health::silences()->mute('certificate_expiry', until: now()->addDays(2));

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.