feat(scheduler): dispatch event on job failure, notify admins via notifications module
Add ?ModuleEventDispatcher to SchedulerRunService (fail-open, nullable). Dispatch scheduler.job_failed event when a job fails with payload: job_id, job_key, label, error_code, error_message, trigger_type. New SchedulerJobFailedNotificationListener in notifications module creates in-app admin notifications for users with JOBS_MANAGE permission, scoped per tenant, with 30-min dedup per job_key. Also fixes audit module manifest: system_audit_purge job_key was mismatched (audit_system_purge vs system_audit_purge in DB). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace MintyPHP\Service\Scheduler;
|
||||
|
||||
use MintyPHP\App\AppContainer;
|
||||
use MintyPHP\App\Module\ModuleEventDispatcher;
|
||||
use MintyPHP\Repository\Scheduler\ScheduledJobRepositoryInterface;
|
||||
use MintyPHP\Repository\Scheduler\ScheduledJobRunRepositoryInterface;
|
||||
use MintyPHP\Repository\Scheduler\SchedulerRuntimeRepositoryInterface;
|
||||
@@ -47,7 +48,8 @@ class SchedulerServicesFactory
|
||||
$this->getScheduledJobRegistry(),
|
||||
$this->getScheduleCalculator(),
|
||||
$this->getDatabaseSessionRepository(),
|
||||
$this->getAuditRecorder()
|
||||
$this->getAuditRecorder(),
|
||||
$this->getEventDispatcher()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -99,4 +101,13 @@ class SchedulerServicesFactory
|
||||
return $this->auditRecorder;
|
||||
}
|
||||
|
||||
private function getEventDispatcher(): ?ModuleEventDispatcher
|
||||
{
|
||||
if ($this->appContainer->has(ModuleEventDispatcher::class)) {
|
||||
$dispatcher = $this->appContainer->get(ModuleEventDispatcher::class);
|
||||
return $dispatcher instanceof ModuleEventDispatcher ? $dispatcher : null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user