diff --git a/src/Worker/Worker.php b/src/Worker/Worker.php index ba61075..ccca195 100644 --- a/src/Worker/Worker.php +++ b/src/Worker/Worker.php @@ -14,6 +14,8 @@ use Illuminate\Support\Str; use Psr\Container\ContainerInterface; use Symfony\Component\Lock\LockFactory; use Symfony\Component\Lock\Store\SemaphoreStore; +use UserFrosting\Sprinkle\Core\Mail\TwigMailMessage; +use UserFrosting\Sprinkle\Core\Mail\EmailRecipient; use UserFrosting\UniformResourceLocator\Resource as ResourceInstance; /** @@ -160,8 +162,10 @@ class Worker if (!$this->currentJob->run()) { if ($this->debug) $this->debug->debug('Job failed!'); if (!$this->quiet) $io->writeln(' [ERROR] Job failed!'); + $this->ci->errorLogger->error('Job execution failed!', [ $this->queuedJob, $this->currentJob ]); $this->queuedJob->flag_failed = true; + $this->sendErrorEmail(); } else { if ($this->debug) $this->debug->debug('Job completed!'); if (!$this->quiet) $io->writeln(' [INFO] Job completed!'); @@ -179,6 +183,8 @@ class Worker $this->queuedJob->flag_failed = true; $this->queuedJob->save(); + + $this->sendErrorEmail(); } finally { $this->currentJob = null; } @@ -212,6 +218,8 @@ class Worker $this->queuedJob->flag_failed = true; $this->queuedJob->save(); + + $this->sendErrorEmail(); } finally { $this->currentJob = null; } @@ -222,4 +230,27 @@ class Worker if ($this->debug) $this->debug->debug('Exiting now'); exit; } + + /** + * Send error email to site admins & requester + */ + protected function sendErrorEmail() + { + $message = new TwigMailMessage($this->ci->view, 'mail/job-failed.html.twig'); + + $message->from($this->ci->config['address_book.admin']); + + $siteAdminRole = $this->ci->classMapper->getClassMapping('role')::query() + ->where('slug', 'site-admin') + ->first(); + $siteAdmins = $this->ci->classMapper->getClassMapping('user')::query() + ->forRole($siteAdminRole->id) + ->get(); + + foreach($siteAdmins as $admin) { + $message->addEmailRecipient(new EmailRecipient($admin->email, $admin->full_name)); + } + + $this->ci->mailer->send($message); + } } diff --git a/templates/mail/job-failed.html.twig b/templates/mail/job-failed.html.twig new file mode 100644 index 0000000..932a26a --- /dev/null +++ b/templates/mail/job-failed.html.twig @@ -0,0 +1,16 @@ +{% block subject %} + {{site.title}} - JOB FAILED +{% endblock %} + +{% block body %} +

+ Dear Site Admins, +

+

+ An error has occurred whilst trying to run a queued job. Please review the server error logs. +

+

+ With regards,
+ The {{site.title}} Team +

+{% endblock %} \ No newline at end of file