Exemplo n.º 1
0
        public void Create_FromException_IsOk()
        {
            var ex = new Exception("message");

            var descr = ErrorDescriptionFactory.Create(ex);

            Assert.NotNull(descr);
            Assert.Equal(ErrorCategory.Unknown, descr.Category);
            Assert.Equal("UNKNOWN", descr.Code);
            Assert.Equal(ex.Message, descr.Message);
            Assert.Equal(500, descr.Status);
            Assert.Equal(ex.StackTrace, descr.StackTrace);
            Assert.Null(descr.CorrelationId);

            ex = new Exception("message");
            const string correlation     = "correlation1234";
            var          withCorrelation = ErrorDescriptionFactory.Create(ex, correlation);

            Assert.NotNull(descr);
            Assert.Equal(ErrorCategory.Unknown, withCorrelation.Category);
            Assert.Equal("UNKNOWN", withCorrelation.Code);
            Assert.Equal(ex.Message, withCorrelation.Message);
            Assert.Equal(500, withCorrelation.Status);
            Assert.Equal(ex.StackTrace, withCorrelation.StackTrace);
            Assert.Equal(correlation, withCorrelation.CorrelationId);
        }
        /// <summary>
        /// Sends error serialized as ErrorDescription object and appropriate HTTP status
        /// code.If status code is not defined, it uses 500 status code.
        /// </summary>
        /// <param name="response">a Http response</param>
        /// <param name="ex">an error object to be sent.</param>
        public static async Task SendErrorAsync(HttpResponse response, Exception ex)
        {
            // Unwrap exception
            if (ex is AggregateException)
            {
                var ex2 = ex as AggregateException;
                ex = ex2.InnerExceptions.Count > 0 ? ex2.InnerExceptions[0] : ex;
            }

            if (ex is PipServices3.Commons.Errors.ApplicationException)
            {
                response.ContentType = "application/json";
                var ex3 = ex as PipServices3.Commons.Errors.ApplicationException;
                response.StatusCode = ex3.Status;
                var contentResult = JsonConverter.ToJson(ErrorDescriptionFactory.Create(ex3));
                await response.WriteAsync(contentResult);
            }
            else
            {
                response.ContentType = "application/json";
                response.StatusCode  = (int)HttpStatusCode.InternalServerError;
                var contentResult = JsonConverter.ToJson(ErrorDescriptionFactory.Create(ex));
                await response.WriteAsync(contentResult);
            }
        }
Exemplo n.º 3
0
        public void Create_FromApplicationException_IsOk()
        {
            var key     = "key";
            var details = "details";

            var ex = new ApplicationException("category", "correlationId", "code", "message")
            {
                Status     = 777,
                Cause      = "cause",
                StackTrace = "stackTrace"
            };

            ex.WithDetails(key, details);

            var descr = ErrorDescriptionFactory.Create(ex);

            Assert.NotNull(descr);
            Assert.Equal(ex.Category, descr.Category);
            Assert.Equal(ex.CorrelationId, descr.CorrelationId);
            Assert.Equal(ex.Code, descr.Code);
            Assert.Equal(ex.Message, descr.Message);
            Assert.Equal(ex.Status, descr.Status);
            Assert.Equal(ex.Cause, descr.Cause);
            Assert.Equal(ex.StackTrace, descr.StackTrace);
            Assert.Equal(ex.Details, descr.Details);
        }
 private InvokeReply CreateErrorResponse(Exception ex)
 {
     return(new InvokeReply
     {
         Error = ObjectMapper.MapTo <ErrorDescription>(ErrorDescriptionFactory.Create(ex)),
         ResultEmpty = true,
         ResultJson = null
     });
 }
        public void Create_FromException_IsOk()
        {
            var ex = new Exception("message");

            var descr = ErrorDescriptionFactory.Create(ex);

            Assert.NotNull(descr);
            Assert.Equal(ErrorCategory.Unknown, descr.Category);
            Assert.Equal("UNKNOWN", descr.Code);
            Assert.Equal(ex.Message, descr.Message);
            Assert.Equal(500, descr.Status);
            Assert.Equal(ex.StackTrace, descr.StackTrace);
        }
        static void Main(string[] args)
        {
            try
            {
                var correlationId = "123";
                var config        = ConfigParams.FromTuples(
                    "connection.type", "http",
                    "connection.host", "localhost",
                    "connection.port", 8080
                    );
                var client = new LoggingHttpClientV1();
                client.Configure(config);
                LogMessageV1 message1 = new LogMessageV1()
                {
                    Time          = new DateTime(),
                    Source        = null,
                    Level         = LogLevel.Debug,
                    CorrelationId = "123",
                    Error         = null,
                    Message       = "BBB"
                };

                LogMessageV1 message2 = new LogMessageV1()
                {
                    Time          = new DateTime(),
                    Source        = null,
                    Level         = LogLevel.Error,
                    CorrelationId = "123",
                    Error         = ErrorDescriptionFactory.Create(new Exception()),
                    Message       = "AAB"
                };
                client.OpenAsync(correlationId);
                client.WriteMessagesAsync(null, new LogMessageV1[] { message1, message2 });
                var page = client.ReadMessagesAsync(null, FilterParams.FromTuples("search", "AA"), null);
                Console.WriteLine("Read log messages: ");

                Console.WriteLine("Press ENTER to exit...");
                Console.ReadLine();

                client.CloseAsync(string.Empty);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
        public async Task TestCrudOperationsAsync()
        {
            var message = await this._client.WriteMessageAsync(null, new LogMessageV1()
            {
                Time          = new DateTime(),
                Source        = null,
                Level         = LogLevel.Info,
                CorrelationId = "123",
                Error         = null,
                Message       = "AAA"
            });

            Assert.NotNull(message);

            var message1 = new LogMessageV1()
            {
                Time          = new DateTime(),
                Source        = null,
                Level         = LogLevel.Debug,
                CorrelationId = "123",
                Error         = null,
                Message       = "BBB"
            };

            var message2 = new LogMessageV1()
            {
                Time          = new DateTime(),
                Source        = null,
                Level         = LogLevel.Error,
                CorrelationId = "123",
                Error         = ErrorDescriptionFactory.Create(new Exception()),
                Message       = "AAB"
            };

            message2.Time = new DateTime(1975, 1, 1, 0, 0, 0, 0);

            await this._client.WriteMessagesAsync(null, new LogMessageV1[] { message1, message2 });

            var page = await this._client.ReadMessagesAsync(null, FilterParams.FromTuples("search", "AA"), null);

            Assert.Equal(2, page.Data.Count);

            page = await this._client.ReadErrorsAsync(null, null, null);

            Assert.Single(page.Data);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Writes a log message to the logger destination.
        /// </summary>
        /// <param name="correlationId">(optional) transaction id to trace execution through call chain.</param>
        /// <param name="component">a name of called component</param>
        /// <param name="operation">a name of the executed operation. </param>
        /// <param name="error">an error object associated with this trace.</param>
        /// <param name="duration">execution duration in milliseconds. </param>
        protected void Write(string correlationId, string component, string operation, Exception error, long duration)
        {
            ErrorDescription errorDesc = error != null?ErrorDescriptionFactory.Create(error) : null;

            OperationTrace trace = new OperationTrace
            {
                Time          = DateTime.UtcNow,
                Source        = _source,
                Component     = component,
                Operation     = operation,
                CorrelationId = correlationId,
                Duration      = duration,
                Error         = errorDesc
            };

            _cache.Add(trace);
            Update();
        }
        /// <summary>
        /// Writes a log message to the logger destination.
        /// </summary>
        /// <param name="level">a log level.</param>
        /// <param name="correlationId">(optional) transaction id to trace execution through call chain.</param>
        /// <param name="error">an error object associated with this message.</param>
        /// <param name="message">a human-readable message to log.</param>
        protected override void Write(LogLevel level, string correlationId, Exception error, string message)
        {
            ErrorDescription errorDescription = error != null?ErrorDescriptionFactory.Create(error, correlationId) : null;

            LogMessage logMessage = new LogMessage()
            {
                Time          = DateTime.UtcNow,
                Level         = LogLevelConverter.ToString(level),
                Source        = _source,
                Error         = errorDescription,
                Message       = message,
                CorrelationId = correlationId
            };

            lock (_lock)
            {
                _cache.Add(logMessage);
            }

            Update();
        }
Exemplo n.º 10
0
        private async Task <HttpResponseMessage> ExecuteRequestAsync(
            string correlationId, HttpMethod method, Uri uri, HttpContent content = null)
        {
            if (_client == null)
            {
                throw new InvalidOperationException("REST client is not configured");
            }

            // Set headers
            foreach (var key in _headers.Keys)
            {
                if (!_client.DefaultRequestHeaders.Contains(key))
                {
                    _client.DefaultRequestHeaders.Add(key, _headers[key]);
                }
            }

            HttpResponseMessage result = null;

            var retries = Math.Min(1, Math.Max(5, _retries));

            while (retries > 0)
            {
                try
                {
                    if (method == HttpMethod.Get)
                    {
                        result = await _client.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead);
                    }
                    else if (method == HttpMethod.Post)
                    {
                        result = await _client.PostAsync(uri, content);
                    }
                    else if (method == HttpMethod.Put)
                    {
                        result = await _client.PutAsync(uri, content);
                    }
                    else if (method == HttpMethod.Delete)
                    {
                        result = await _client.DeleteAsync(uri);
                    }
#if !NETSTANDARD2_0
                    else if (method == HttpMethod.Patch)
                    {
                        result = await _client.PatchAsync(uri, content);
                    }
#endif
                    else
                    {
                        throw new InvalidOperationException("Invalid request type");
                    }

                    retries = 0;
                }
                catch (HttpRequestException ex)
                {
                    retries--;
                    if (retries > 0)
                    {
                        throw new ConnectionException(correlationId, null, "Unknown communication problem on REST client", ex);
                    }
                    else
                    {
                        _logger.Trace(correlationId, $"Connection failed to uri '{uri}'. Retrying...");
                    }
                }
            }

            if (result == null)
            {
                throw ApplicationExceptionFactory.Create(ErrorDescriptionFactory.Create(
                                                             new UnknownException(correlationId, $"Unable to get a result from uri '{uri}' with method '{method}'")));
            }

            if ((int)result.StatusCode >= 400)
            {
                var responseContent = await result.Content.ReadAsStringAsync();

                ErrorDescription errorObject = null;
                try
                {
                    errorObject = JsonConverter.FromJson <ErrorDescription>(responseContent);
                }
                finally
                {
                    if (errorObject == null)
                    {
                        errorObject = ErrorDescriptionFactory.Create(new UnknownException(correlationId, $"UNKNOWN_ERROR with result status: '{result.StatusCode}'", responseContent));
                    }
                }

                throw ApplicationExceptionFactory.Create(errorObject);
            }

            return(result);
        }