예제 #1
0
파일: Predo.php 프로젝트: raframework/ra
 private static function define(Request $request)
 {
     $requestId = $request->getServerParams()['HTTP_X_REQUEST_ID'];
     if (empty($requestId)) {
         $requestId = Str::uuid();
     }
     define('REQUEST_ID', $requestId);
 }
예제 #2
0
 public static function process(\Exception $e, Request $request, Response $response)
 {
     if ($e instanceof BaseException) {
         $response->withStatus($e->getHttpStatus());
         $response->write(Code::json($e->getCode(), $e->getMessage()));
     } else {
         if ($e instanceof MethodNotAllowedException) {
             $response->withStatus(405);
             $allow = implode(', ', $e->getAllowedMethods());
             $response->withHeader('Allow', $allow);
             $response->write(Code::json(Code::METHOD_NOT_ALLOWED, 'allow: ' . $allow));
         } else {
             if ($e instanceof NotFoundException) {
                 $response->withStatus(404);
                 $response->write(Code::json(Code::RESOURCE_NOT_FOUND));
             } else {
                 if ($e instanceof UnsupportedMediaType) {
                     $response->withStatus(415);
                     $response->write(Code::json(Code::UNSUPPORTED_MEDIA_TYPE, $e->getMessage()));
                 } else {
                     if ($e instanceof BadBodyException) {
                         $response->withStatus(400);
                         $response->write(Code::json(Code::BAD_BODY, $e->getMessage()));
                     } else {
                         if ($e instanceof \PDOException) {
                             $response->withStatus(502);
                             $response->write(Code::json(Code::DATABASE_ERROR));
                             trigger_error(Str::exceptionToString($e), E_USER_WARNING);
                         } else {
                             if ($e instanceof \RedisException) {
                                 $response->withStatus(502);
                                 $response->write(Code::json(Code::CACHE_ERROR));
                                 trigger_error(Str::exceptionToString($e), E_USER_WARNING);
                             } else {
                                 $response->withStatus(500);
                                 $response->write(Code::json(Code::INTERNAL_SERVER_ERROR));
                                 trigger_error(Str::exceptionToString($e), E_USER_WARNING);
                             }
                         }
                     }
                 }
             }
         }
     }
 }
예제 #3
0
파일: Manager.php 프로젝트: raframework/ra
 private function parsePdoName($pdoName)
 {
     return Str::endsWith($pdoName, ['::read', '::write']) ? explode('::', $pdoName, 2) : [$pdoName, null];
 }
예제 #4
0
파일: Redis.php 프로젝트: raframework/ra
 /**
  * Dynamically pass methods to the redis
  *
  * @param  string $method
  * @param  array  $parameters
  * @return mixed
  */
 public function __call($method, $parameters)
 {
     Log::debug('redis ' . $method . ' parameters: ' . json_encode($parameters));
     $queryType = 'master';
     // TODO: determines by operation
     if (!$this->link($queryType)) {
         return false;
     }
     try {
         Time::start('redis');
         $result = call_user_func_array([$this->link, $method], $parameters);
         Time::stop('redis');
         Log::debug('redis ' . $method . ' result: ' . $result);
     } catch (\Exception $e) {
         trigger_error('Errors on operating redis: ' . Str::exceptionToString($e), E_USER_WARNING);
         return false;
     }
     return $result;
 }