rpc exception

This commit is contained in:
dongwei 2019-01-17 14:10:18 +08:00
parent 4418e004ad
commit 86fbc11fd9
5 changed files with 24 additions and 22 deletions

View File

@ -41,16 +41,15 @@ class Client
{ {
$default = [ $default = [
'app' => '***', 'app' => '***',
'log_path'=> "/logs/rpc_monitor_".date("Ymd").".log", 'log_path' => "/logs/rpc_monitor_" . date("Ymd") . ".log",
'log_formatter' => \JsonRpc\Logging\LogstashFormatter::class, 'log_formatter' => \JsonRpc\Logging\LogstashFormatter::class,
]; ];
$this->config = array_merge($default, $config); $this->config = array_merge($default, $config);
$stream = new StreamHandler(app()->storagePath().$this->config['log_path']); $stream = new StreamHandler(app()->storagePath() . $this->config['log_path']);
app('log')->info('test json-rpc config', $this->config);
$stream->setFormatter(new $this->config['log_formatter']()); $stream->setFormatter(new $this->config['log_formatter']());
$logger = new Logger('RPC.LOGGER'); $logger = new Logger('RPC.LOGGER');
$logger->pushHandler($stream); $logger->pushHandler($stream);
$this->id = app('request')->header('X-Request-Id')?:"no-x-request-id"; $this->id = app('request')->header('X-Request-Id') ?: "no-x-request-id";
$this->logger = $logger; $this->logger = $logger;
} }
@ -112,6 +111,8 @@ class Client
$headers = [ $headers = [
'client_app' => $this->config['app'], 'client_app' => $this->config['app'],
'client_host' => gethostname(),
'client_addr' => $_SERVER['SERVER_ADDR'],
]; ];
$resp = $this->http->request('POST', 'rpc/json-rpc-v2.json', [ $resp = $this->http->request('POST', 'rpc/json-rpc-v2.json', [
'headers' => $headers, 'headers' => $headers,
@ -126,7 +127,6 @@ class Client
if (isset($body['error']) && isset($body['error']['code']) && isset($body['error']['message'])) { if (isset($body['error']) && isset($body['error']['code']) && isset($body['error']['message'])) {
throw new RpcServerException($body['error']['message'], $body['error']['code']); throw new RpcServerException($body['error']['message'], $body['error']['code']);
} }
$this->logger->info('MONITOR',compact("payload", "body", "headers"));
return $body['result']; return $body['result'];
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
@ -141,7 +141,7 @@ class Client
protected function id() protected function id()
{ {
// return $this->id.'-'.time(); // return $this->id.'-'.time();
return $this->id; return $this->id;
} }
} }

View File

@ -4,6 +4,7 @@ namespace JsonRpc\Providers;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use JsonRpc\Client; use JsonRpc\Client;
use JsonRpc\Exception\RpcServerException;
class ClientServiceProvider extends ServiceProvider class ClientServiceProvider extends ServiceProvider
@ -19,7 +20,9 @@ class ClientServiceProvider extends ServiceProvider
{ {
$this->app->configure('rpc'); $this->app->configure('rpc');
$config = config('rpc'); $config = config('rpc');
if (!is_array($config)) {
throw new RpcServerException("Application's Rpc Config Undefind", 500);
}
$this->app->singleton('rpc', function () use ($config) { $this->app->singleton('rpc', function () use ($config) {
return new Client($config); return new Client($config);
}); });

View File

@ -24,13 +24,19 @@ class JsonRpcMethod
]); ]);
} }
/**
*
* @param $code
* @param $msg
* @return static
*/
public function error($code, $msg) public function error($code, $msg)
{ {
return JsonResponse::create([ return JsonResponse::create([
'jsonrpc' => '2.0', 'jsonrpc' => '2.0',
'error' => [ 'error' => [
'code' => $code, 'code' => $code,
'message' => $msg, 'message' => is_array($msg) ? json_encode($msg) : $msg,
], ],
'id' => $this->id 'id' => $this->id
]); ]);

View File

@ -13,6 +13,7 @@ class JsonRpcServer
const Rpc_Error_NOT_FOUND = -32601; const Rpc_Error_NOT_FOUND = -32601;
const Rpc_Error_Invalid_Params = -32602; const Rpc_Error_Invalid_Params = -32602;
const Rpc_Error_Internal_Error = -32603; const Rpc_Error_Internal_Error = -32603;
const Rpc_Success = 0;
const ErrorMsg = [ const ErrorMsg = [
@ -20,6 +21,7 @@ class JsonRpcServer
self::Rpc_Error_Parse_Error => 'Json parse error', self::Rpc_Error_Parse_Error => 'Json parse error',
self::Rpc_Error_Invalid_Request => 'Invalid request', self::Rpc_Error_Invalid_Request => 'Invalid request',
self::Rpc_Error_Invalid_Params => 'Invalid params', self::Rpc_Error_Invalid_Params => 'Invalid params',
self::Rpc_Success => 'Success'
]; ];
/** /**
@ -37,9 +39,9 @@ class JsonRpcServer
public function handler() public function handler()
{ {
// if ($this->request->getContentType() != 'json') { if ($this->request->getContentType() != 'json') {
// return $this->error(self::Rpc_Error_Invalid_Request); return $this->error(self::Rpc_Error_Invalid_Request);
// } }
try { try {
@ -50,9 +52,8 @@ class JsonRpcServer
} else { } else {
list($method, $params, $id) = $this->parseJson($this->request->getContent()); list($method, $params, $id) = $this->parseJson($this->request->getContent());
} }
app('log')->info('rpc ser', [$method, $params, $id, $this->request->header('client_app')]);
list($class, $function) = $this->parseMethodWithMap($method); list($class, $function) = $this->parseMethodWithMap($method);
// dump($class,$function);exit;
if (!class_exists($class) || !method_exists($class, $function)) { if (!class_exists($class) || !method_exists($class, $function)) {
return $this->error(self::Rpc_Error_NOT_FOUND); return $this->error(self::Rpc_Error_NOT_FOUND);
@ -62,7 +63,7 @@ class JsonRpcServer
return $this->error(self::Rpc_Error_Invalid_Params); return $this->error(self::Rpc_Error_Invalid_Params);
} }
app('log')->info('rpc ser', [$method, $params, $id, $class, $this->request->header('client_app')]);
$ret = call_user_func_array([(new $class($id, $this->request)), $function], $params); $ret = call_user_func_array([(new $class($id, $this->request)), $function], $params);
return $ret; return $ret;
@ -139,6 +140,4 @@ class JsonRpcServer
'id' => $id 'id' => $id
]); ]);
} }
} }

View File

@ -29,9 +29,6 @@ class JsonRpcDoc
public function render() public function render()
{ {
/**
* @var $view Factory
*/
$config = [ $config = [
'class' => $this->methods(), 'class' => $this->methods(),
'filter_method' => [], 'filter_method' => [],
@ -39,9 +36,6 @@ class JsonRpcDoc
$api = new BootstrapApiDoc($config); $api = new BootstrapApiDoc($config);
$doc = $api->getHtml(); $doc = $api->getHtml();
exit($doc); exit($doc);
// \View::addExtension('html','php');
// app('view')->addExtension('html', 'php');
// echo app('view')->file(__DIR__."/../Sami/document/index.html");
} }
protected function desc($class, $method) protected function desc($class, $method)