public function run(\GearmanJob $job)
 {
     $url = GearmanToolsUtils::unpackMessage($job->workload());
     $error = 0;
     try {
         $this->processorPool->process($url);
         $extractedUrlsCount = count($this->processorPool->getExtractedUrls());
         $message = "{$url->getUrl()} / depth: {$url->getDepth()} / status: {$url->getStatus()} / extracted: {$extractedUrlsCount}";
     } catch (\Exception $e) {
         $message = "Failed to process url [{$url->getId()}] \"{$url->getUrl()}\": {$e->getMessage()}";
         $error = $e->getCode();
         $error = $error === 0 ? -1 : $error;
     }
     $result = ['url' => $url, 'extractedUrls' => $this->processorPool->getExtractedUrls(), 'error' => $error, 'message' => $message];
     $this->logger->info($message);
     $result = GearmanToolsUtils::packMessage($result);
     return $result;
 }
 public function run()
 {
     while ($url = $this->repository->next()) {
         try {
             $this->processorPool->process($url);
         } catch (\Exception $e) {
             if ($this->logger) {
                 $this->logger->error("Failed to process url [{$url->getId()}] \"{$url->getUrl()}\": {$e->getMessage()}");
             }
         }
         foreach ($this->processorPool->getExtractedUrls() as $eu) {
             $this->repository->insert($eu);
         }
         $this->repository->done($url);
         // log
         $c = count($this->processorPool->getExtractedUrls());
         $this->logger->info("url: {$url->getUrl()} / status: {$url->getStatus()} / extracted: {$c}");
     }
 }