fusonic / sentry-cron
Automatic Sentry Cron check-ins with Symfony Scheduler
Installs: 84
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/fusonic/sentry-cron
Requires
- php: >=8.2
- dragonmantank/cron-expression: ^3.4
- sentry/sentry: ^4.14
- symfony/messenger: ^6.4 || ^7.0
- symfony/scheduler: ^6.4 || ^7.0
- symfony/string: ^6.4 || ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.64
- infection/infection: ^0.29
- phpstan/phpstan: ^1.12
- phpstan/phpstan-deprecation-rules: ^1.2
- phpstan/phpstan-phpunit: ^1.4
- phpstan/phpstan-strict-rules: ^1.6
- phpunit/phpunit: ^11.3
- tomasvotruba/type-coverage: ^0.3
This package is not auto-updated.
Last update: 2025-11-08 13:32:21 UTC
README
About
Automatically register scheduled events from Symfony Scheduler in Sentry Cron. Only cron expressions are supported.
Install
Use composer to install the library from packagist.
composer require fusonic/sentry-cron
Configuration
Fusonic\SentryCron\SentrySchedulerEventSubscriber: arguments: $enabled: true
Usage
Any regular event that is triggered with a cron expression can be used.
Event Configuration
By default, the Sentry defaults are used for monitor configurations. Per event, you can configure an attribute to use your own configuration:
use Fusonic\SentryCron\SentryMonitorConfig; #[SentryMonitorConfig(checkinMargin: 30, maxRuntime: 30, failureIssueThreshold: 5, recoveryThreshold: 5)] class SomeEvent { // ... }
Async Events
If you have an unpredictable longer-running scheduled task, you can manually check in by implementing AsyncCheckInScheduleEventInterface.
The scheduled event:
use Fusonic\SentryCron\SentryMonitorConfig; use Fusonic\SentryCron\AsyncCheckInScheduleEventInterface; use \Fusonic\SentryCron\AsyncCheckInScheduleEventTrait; class SomeEvent implements AsyncCheckInScheduleEventInterface { use AsyncCheckInScheduleEventTrait; // ... }
The manual check in:
class SomeEventHandler { private const BATCH_SIZE = 100; public function __invoke(SomeEvent $event): void { $offset = 0; // e.g.: some slow database processing $entitiesToProcess = // ... $nextEvent = new SomeEvent(offset: $offset + self::BATCH_SIZE); if (count($entitiesToProcess) === 0) { $nextEvent->markAsLast(); } $this->eventBus->dispatch($nextEvent); } }