예제 #1
0
 /**
  * @param array $eventsToSkip * or [logType => *] or [logType1 => [event1, event2, ...], logType2 => ...]
  */
 public function addEventsToSkip($eventsToSkip)
 {
     if ($eventsToSkip === '*') {
         $this->eventsToSkip = $eventsToSkip;
     } elseif (is_array($eventsToSkip)) {
         foreach ($eventsToSkip as $type => $events) {
             if (!Validators::is($type, 'unicode:1..')) {
                 $this->logger->addWarning(sprintf('The keys of array $eventsToSkip must be non-empty strings. "%s" given', gettype($type)));
                 continue;
             }
             if ($events === '*') {
                 $this->eventsToSkip[$type] = $events;
             } elseif (is_array($events)) {
                 foreach ($events as $event) {
                     if (Validators::is($event, 'unicode:1..')) {
                         $this->eventsToSkip[$type][$event] = $event;
                     } else {
                         $this->logger->addWarning(sprintf('The values of array $eventsToSkip[%s] must be non-empty string. "%s" given', $type, gettype($event)));
                     }
                 }
             } else {
                 $this->logger->addWarning(sprintf('The values of array $eventsToSkip must be an ARRAY or * (a star). "%s" given', gettype($events)));
             }
         }
     } else {
         $this->logger->addWarning(sprintf('Argument $eventsToSkip must be an ARRAY or * (a star). "%s" given', gettype($eventsToSkip)));
     }
 }
 public function process(AMQPMessage $message) : int
 {
     try {
         if (!($request = Json::decode($message->body, Json::FORCE_ARRAY))) {
             return self::MSG_REJECT;
         }
     } catch (JsonException $e) {
         $this->logger->addError($e->getMessage());
         return self::MSG_REJECT;
     }
     $orderId = $request['orderId'];
     try {
         $conn = $this->em->getConnection();
         if ($conn->ping() === false) {
             $conn->close();
             $conn->connect();
         }
         /** @var Order $order */
         $orders = $this->em->getRepository(Order::class);
         if (!($order = $orders->find($orderId))) {
             $this->logger->addWarning(sprintf('Order %s not found in db', $orderId));
             return self::MSG_REJECT;
         }
         if (!$order->getUser()) {
             $this->logger->addWarning(sprintf('Order %s has no user', $orderId));
             return self::MSG_REJECT;
         }
         $this->user->passwordLessLogin($order->getUser()->getId());
         return $this->processOrder($order, $request['options']);
     } catch (\App\Exception\DatabaseDeadlockException $e) {
         return $this->restartJob($request, $e);
     } catch (\Doctrine\DBAL\Exception\DriverException $e) {
         if ($deadlock = \App\Exception\DatabaseDeadlockException::fromDriverException($e)) {
             $e = $deadlock;
             $message = null;
         } else {
             $this->logger->addError($e->getMessage(), ['exception' => $e]);
             $message = $e->getPrevious() instanceof \Doctrine\DBAL\Driver\PDOException ? $e->getPrevious()->getMessage() : $e->getMessage();
         }
         return $this->restartJob($request, $e, $message);
     } catch (\Exception $e) {
         $this->logger->addError($this->getQueue(), ['exception' => $e]);
         return $this->restartJob($request, $e);
     } finally {
         $this->user->logout(true);
         $this->em->clear();
     }
 }
 public function handleBackup($pass)
 {
     if ($this->backupPassword !== null) {
         if ($this->backupPassword != $pass) {
             $this->logger->addWarning('Unauthorized try to backup database (auto)');
             return;
         }
     }
     if ($this->cache->load('databaseBackup') !== null) {
         $this->logger->addNotice('Another try to backup database (auto)');
         return;
     }
     try {
         $this->databaseBackup->backup('auto', true);
         $this->cache->save('databaseBackup', 'done', [Cache::EXPIRE => '23 hours']);
     } catch (\Exception $e) {
         $this->logger->addError(sprintf('Database backup failure (auto). %s', $e));
     }
 }
예제 #4
0
 protected function logWarning($message, array $context = [])
 {
     $this->logger->addWarning($this->prefixMessage($message, "WARNING"), $context);
 }
예제 #5
0
파일: Router.php 프로젝트: blitzik/CMS
 /**
  * Constructs absolute URL from Request object.
  * @return string|NULL
  */
 public function constructUrl(Nette\Application\Request $appRequest, Nette\Http\Url $refUrl)
 {
     $this->loadLocales();
     $appPath = $appRequest->getPresenterName() . ':' . $appRequest->getParameter('action') . ':' . $appRequest->getParameter('internal_id');
     /** @var Url $urlEntity */
     $cachedResult = $this->cache->load($appPath, function (&$dependencies) use($appRequest) {
         $presenter = $appRequest->getPresenterName();
         $action = $appRequest->getParameter('action');
         $internal_id = $appRequest->getParameter('internal_id');
         $fallback = false;
         if (isset($internal_id)) {
             /** @var Url $url */
             $urlEntity = $this->getUrlEntity($presenter, $action, $internal_id);
             if ($urlEntity === null) {
                 $fallback = true;
                 $urlEntity = $this->getUrlEntity($presenter, $action);
             }
         } else {
             $urlEntity = $this->getUrlEntity($presenter, $action);
         }
         if ($urlEntity === null) {
             $this->logger->addWarning(sprintf('No route found
                               | presenter: %s
                               | action: %s
                               | id %s', $presenter, $action, $internal_id));
             return null;
         }
         $dependencies = [Nette\Caching\Cache::TAGS => $urlEntity->getCacheKey()];
         return [$urlEntity, $fallback];
     });
     $urlEntity = $cachedResult[0];
     $fallback = $cachedResult[1];
     if ($urlEntity === null) {
         return null;
     }
     $baseUrl = 'http://' . $refUrl->getAuthority() . $refUrl->getBasePath();
     if ($urlEntity->getActualUrlToRedirect() === null) {
         $path = $urlEntity->getUrlPath();
     } else {
         $path = $urlEntity->getActualUrlToRedirect()->getUrlPath();
     }
     $params = $appRequest->getParameters();
     unset($params['action']);
     if ($fallback === false) {
         unset($params['internal_id']);
     }
     $defaultLocale = array_search(true, $this->locales);
     $locale = isset($params['locale']) ? $params['locale'] : $defaultLocale;
     unset($params['locale']);
     if ($defaultLocale === $locale) {
         $locale = '';
     } else {
         $locale .= '/';
     }
     $resultUrl = $baseUrl . $locale . Nette\Utils\Strings::webalize($path, '/.');
     $this->urlParametersConverter->out($urlEntity, $params);
     // todo
     $q = http_build_query($params, null, '&');
     if ($q != '') {
         $resultUrl .= '?' . $q;
     }
     return $resultUrl;
 }
예제 #6
0
 /**
  * {@inheritdoc}
  * @return Boolean Whether the record has been processed
  */
 public function addWarning($message, array $context = [])
 {
     return $this->parentLogger->addWarning($message, ['channel' => $this->name] + $context);
 }