| <?php |
|
|
| namespace Kanboard\Core\Queue; |
|
|
| use Exception; |
| use Kanboard\Core\Base; |
| use Kanboard\Job\BaseJob; |
| use SimpleQueue\Job; |
| use Symfony\Contracts\EventDispatcher\Event; |
|
|
| |
| |
| |
| |
| |
| |
| class JobHandler extends Base |
| { |
| |
| |
| |
| |
| |
| |
| |
| public function serializeJob(BaseJob $job) |
| { |
| return new Job(array( |
| 'class' => get_class($job), |
| 'params' => $job->getJobParams(), |
| 'user_id' => $this->userSession->getId(), |
| )); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function executeJob(Job $job) |
| { |
| $payload = $job->getBody(); |
|
|
| try { |
| $className = $payload['class']; |
| $this->prepareJobSession($payload['user_id']); |
| $this->prepareJobEnvironment(); |
|
|
| if (DEBUG) { |
| $this->logger->debug(__METHOD__.' Received job => '.$className.' ('.getmypid().')'); |
| $this->logger->debug(__METHOD__.' => '.json_encode($payload)); |
| } |
|
|
| $worker = new $className($this->container); |
| call_user_func_array(array($worker, 'execute'), $payload['params']); |
| } catch (Exception $e) { |
| $this->logger->error(__METHOD__.': Error during job execution: '.$e->getMessage()); |
| $this->logger->error(__METHOD__ .' => '.json_encode($payload)); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| protected function prepareJobSession($user_id) |
| { |
| session_flush(); |
|
|
| if ($user_id > 0) { |
| $user = $this->userModel->getById($user_id); |
| $this->userSession->initialize($user); |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| protected function prepareJobEnvironment() |
| { |
| $this->memoryCache->flush(); |
| $this->actionManager->removeEvents(); |
| $this->dispatcher->dispatch(new Event(), 'app.bootstrap'); |
| } |
| } |
|
|