コード例 #1
0
        private JsonRpcResponse GetErrorResponse(ErrorType errorType, string message, BigInteger id, string methodName)
        {
            _logger.Debug($"Sending error response, method: {methodName ?? "none"}, id: {id}, errorType: {errorType}, message: {message}");
            var response = new JsonRpcResponse
            {
                JsonRpc = _jsonRpcConfig.JsonRpcVersion,
                Id      = id,
                Error   = new Error
                {
                    Code    = _jsonRpcConfig.ErrorCodes[errorType],
                    Message = message
                }
            };

            return(response);
        }
コード例 #2
0
        private JsonRpcResponse GetErrorResponse(ErrorType errorType, string message, string id, string methodName)
        {
            _logger.Error($"Error during processing the request, method: {methodName ?? "none"}, id: {id ?? "none"}, errorType: {errorType}, message: {message}");

            var response = new JsonRpcResponse
            {
                Jsonrpc = _jsonRpcConfig.JsonRpcVersion,
                Id      = id,
                Error   = new Error
                {
                    Code    = _jsonRpcConfig.ErrorCodes[errorType],
                    Message = message
                }
            };

            return(response);
        }
コード例 #3
0
        private JsonRpcResponse GetErrorResponse(ErrorType errorType, string message, ulong id, string methodName, object result = null)
        {
            if (_logger.IsDebug)
            {
                _logger.Debug($"Sending error response, method: {methodName ?? "none"}, id: {id}, errorType: {errorType}, message: {message}");
            }
            var response = new JsonRpcResponse
            {
                JsonRpc = JsonRpcVersion,
                Id      = id,
                Error   = new Error
                {
                    Code    = ErrorCodes[errorType],
                    Message = message
                },
                Result = result ?? new byte[0]
            };

            return(response);
        }
コード例 #4
0
ファイル: JsonRpcResult.cs プロジェクト: tr002196/nethermind
 public static JsonRpcResult Single(JsonRpcResponse response)
 => new JsonRpcResult(response);
コード例 #5
0
ファイル: JsonRpcResult.cs プロジェクト: tr002196/nethermind
 private JsonRpcResult(JsonRpcResponse response)
 {
     IsCollection = false;
     Responses    = null;
     Response     = response;
 }
コード例 #6
0
ファイル: JsonRpcResult.cs プロジェクト: tr002196/nethermind
 private JsonRpcResult(IReadOnlyList <JsonRpcResponse> responses)
 {
     IsCollection = true;
     Responses    = responses;
     Response     = null;
 }
コード例 #7
0
ファイル: JsonRpcResult.cs プロジェクト: rafal-mz/nethermind
 public static JsonRpcResult Single(JsonRpcResponse response, RpcReport report)
 => new JsonRpcResult(response, report);
コード例 #8
0
        public async Task <JsonRpcResult> ProcessAsync(string request)
        {
            Stopwatch stopwatch = Stopwatch.StartNew();

            (JsonRpcRequest Model, List <JsonRpcRequest> Collection)rpcRequest;
            try
            {
                rpcRequest = _jsonSerializer.DeserializeObjectOrArray <JsonRpcRequest>(request);
            }
            catch (Exception ex)
            {
                Metrics.JsonRpcRequestDeserializationFailures++;
                if (_logger.IsError)
                {
                    _logger.Error($"Error during parsing/validation, request: {request}", ex);
                }
                JsonRpcResponse response = _jsonRpcService.GetErrorResponse(ErrorType.ParseError, "Incorrect message");
                TraceResult(response);
                return(JsonRpcResult.Single(response));
            }

            if (rpcRequest.Model != null)
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug($"JSON RPC request {rpcRequest.Model.Method}");
                }

                Metrics.JsonRpcRequests++;
                JsonRpcResponse response = await _jsonRpcService.SendRequestAsync(rpcRequest.Model);

                if (response.Error != null)
                {
                    if (_logger.IsError)
                    {
                        _logger.Error($"Failed to respond to {rpcRequest.Model.Method} {response.Error.Message}");
                    }
                    Metrics.JsonRpcErrors++;
                }
                else
                {
                    if (_logger.IsDebug)
                    {
                        _logger.Debug($"Responded to {rpcRequest.Model.Method}");
                    }
                    Metrics.JsonRpcSuccesses++;
                }

                TraceResult(response);
                stopwatch.Stop();
                if (_logger.IsDebug)
                {
                    _logger.Debug($"  {rpcRequest.Model.Method} handled in {stopwatch.Elapsed.TotalMilliseconds}ms");
                }
                return(JsonRpcResult.Single(response));
            }

            if (rpcRequest.Collection != null)
            {
                if (_logger.IsDebug)
                {
                    _logger.Debug($"{rpcRequest.Collection.Count} JSON RPC requests");
                }

                var       responses          = new List <JsonRpcResponse>();
                int       requestIndex       = 0;
                Stopwatch singleRequestWatch = new Stopwatch();
                foreach (JsonRpcRequest jsonRpcRequest in rpcRequest.Collection)
                {
                    singleRequestWatch.Start();

                    Metrics.JsonRpcRequests++;
                    JsonRpcResponse response = await _jsonRpcService.SendRequestAsync(jsonRpcRequest);

                    if (response.Error != null)
                    {
                        if (_logger.IsError)
                        {
                            _logger.Error($"Failed to respond to {jsonRpcRequest.Method} {response.Error.Message}");
                        }
                        Metrics.JsonRpcErrors++;
                    }
                    else
                    {
                        if (_logger.IsDebug)
                        {
                            _logger.Debug($"Responded to {jsonRpcRequest.Method}");
                        }
                        Metrics.JsonRpcSuccesses++;
                    }

                    singleRequestWatch.Stop();
                    if (_logger.IsDebug)
                    {
                        _logger.Debug($"  {requestIndex++}/{rpcRequest.Collection.Count} JSON RPC request - {jsonRpcRequest.Method} handled after {singleRequestWatch.Elapsed.TotalMilliseconds}");
                    }
                    responses.Add(response);
                }

                TraceResult(responses);
                stopwatch.Stop();
                if (_logger.IsDebug)
                {
                    _logger.Debug($"  {rpcRequest.Collection.Count} requests handled in {stopwatch.Elapsed.TotalMilliseconds}ms");
                }
                return(JsonRpcResult.Collection(responses));
            }

            Metrics.JsonRpcInvalidRequests++;
            JsonRpcResponse errorResponse = _jsonRpcService.GetErrorResponse(ErrorType.InvalidRequest, "Invalid request");

            TraceResult(errorResponse);
            stopwatch.Stop();
            if (_logger.IsDebug)
            {
                _logger.Debug($"  Failed request handled in {stopwatch.Elapsed.TotalMilliseconds}ms");
            }
            return(JsonRpcResult.Single(errorResponse));
        }
コード例 #9
0
ファイル: JsonRpcResult.cs プロジェクト: vicnaum/nethermind
 public static JsonRpcResult Single(JsonRpcResponse response)
 => new JsonRpcResult(false, new[] { response });