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