Ejemplo n.º 1
0
        /// <summary>
        ///     Execute on a set of report mastery.
        /// </summary>
        /// <returns><c>false</c> if there are no more reports to analyze.</returns>
        public bool Execute()
        {
            using (var transaction = _queue.BeginTransaction())
            {
                var dto = _queue.TryReceive <ReceivedReportDTO>(transaction, TimeSpan.FromMilliseconds(500));
                if (dto == null)
                {
                    return(false);
                }

                try
                {
                    ErrorReportException ex = null;
                    if (dto.Exception != null)
                    {
                        ex = ConvertException(dto.Exception);
                    }
                    var contexts = dto.ContextCollections.Select(ConvertContext).ToArray();
                    var entity   = new ErrorReportEntity(dto.ApplicationId, dto.ReportId, dto.CreatedAtUtc, ex, contexts)
                    {
                        RemoteAddress = dto.RemoteAddress
                    };
                    _analyzer.Analyze(entity);
                }
                catch (Exception ex)
                {
                    _logger.Error("Failed to analyze report ", ex);
                }

                transaction.Commit();
            }
            return(true);
        }
Ejemplo n.º 2
0
        public void Db_ErrorsReportingService_LogException_WithInner()
        {
            using (IUnityContainer childContainer = this.container.CreateChildContainer())
            {
                IErrorsReportingService service = childContainer.Resolve <IErrorsReportingService>();

                try
                {
                    ExceptionGenerator.ThrowsTwo();
                }
                catch (Exception exception)
                {
                    int?id = null;
                    Assert.That(() =>
                    {
                        id = service.LogException(this.dataSet.ApplicationsIds.ElementAt(0), exception, "ErrorType.Specific");
                    }, Throws.Nothing);

                    Assert.IsNotNull(id);

                    ErrorReportException ex      = this.exceptionsSqlHelper.Get(id.Value);
                    ErrorReportException innerEx = this.exceptionsSqlHelper.Get(ex.IdInnerException.Value);

                    Assert.AreEqual("Two", ex.Message);
                    Assert.AreEqual("One", innerEx.Message);
                }
            }
        }
        /// <summary>
        /// Creates a new instance of <see cref="IncidentBeingAnalyzed"/>.
        /// </summary>
        /// <param name="entity">entity</param>
        /// <param name="exception">exception to analyze</param>
        /// <exception cref="ArgumentNullException">entity; exception</exception>
        /// <exception cref="ArgumentException">entity.hashcode is null</exception>
        public IncidentBeingAnalyzed(ErrorReportEntity entity, ErrorReportException exception)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }
            if (exception == null)
            {
                throw new ArgumentNullException("exception");
            }
            if (string.IsNullOrEmpty(entity.ReportHashCode))
            {
                throw new ArgumentException("ReportHashCode must be specified to be able to identify duplicates.");
            }

            Description = exception.Message;
            FullName    = exception.FullName;
            StackTrace  = exception.StackTrace;

            AddReport(entity);
            ReportHashCode     = entity.ReportHashCode;
            HashCodeIdentifier = entity.GenerateHashCodeIdentifier();
            ApplicationId      = entity.ApplicationId;
            UpdatedAtUtc       = entity.CreatedAtUtc;
            CreatedAtUtc       = entity.CreatedAtUtc;
        }
Ejemplo n.º 4
0
        public void Should_remove_AT_from_stacktrace_to_avoid_multi_language_issues()
        {
            var exceptionWithAt = new ErrorReportException()
            {
                StackTrace =
                    @"at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at Coderr.Server.Infrastructure.Configuration.Database.DatabaseStore.Store(IConfigurationSection section)
   at Coderr.Server.Premise.App.LicenseWrapper.IncreaseReportCount()
   at Coderr.Server.Web.Controllers.ReportReceiverController.PremiseLicenseCheck()
   at Coderr.Server.Web.Controllers.ReportReceiverController.Post(String appKey, String sig)
   at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync():55
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync():33"
            };
            var entityWithAt       = new ErrorReportEntity(1, "flldfd", DateTime.UtcNow, exceptionWithAt, new ErrorReportContextCollection[0]);
            var exceptionWithoutAt = new ErrorReportException()
            {
                StackTrace =
                    @"System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   Coderr.Server.Infrastructure.Configuration.Database.DatabaseStore.Store(IConfigurationSection section)
   Coderr.Server.Premise.App.LicenseWrapper.IncreaseReportCount()
   Coderr.Server.Web.Controllers.ReportReceiverController.PremiseLicenseCheck()
   Coderr.Server.Web.Controllers.ReportReceiverController.Post(String appKey, String sig)
   Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   System.Threading.Tasks.ValueTask`1.get_Result()
   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync():55
   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
   Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync():33"
            };
            var entityWithoutAt = new ErrorReportEntity(1, "flldfd", DateTime.UtcNow, exceptionWithoutAt, new ErrorReportContextCollection[0]);
            var sut             = new HashCodeGenerator(new IHashCodeSubGenerator[0]);

            var result1 = sut.GenerateHashCode(entityWithAt);
            var result2 = sut.GenerateHashCode(entityWithAt);

            result1.HashCode.Should().Be(result2.HashCode);
        }
        public Guid Send()
        {
            ProductManagerClient pm = HalanServices.CreateProductManager();

            try {
                Guid id = Guid.NewGuid();
                ErrorReportRequest req = new ErrorReportRequest();
                req.Reference = id.ToString();
                req.Message   = _error.Message;
                if (_error.Exception != null)
                {
                    Exception            e = _error.Exception;
                    ErrorReportException errorRepExcept = new ErrorReportException();
                    req.Exception = errorRepExcept;
                    while (e != null)
                    {
                        errorRepExcept.Message    = e.Message;
                        errorRepExcept.StackTrace = e.StackTrace;
                        errorRepExcept.Source     = e.Source;
                        errorRepExcept.Type       = e.GetType().ToString();

                        e = e.InnerException;
                        if (e != null)
                        {
                            errorRepExcept.InnerException = new ErrorReportException();
                            errorRepExcept = errorRepExcept.InnerException;
                        }
                    }
                }

                req.ProductName            = _appData.Product;
                req.ProductVersion         = _appData.Version.ToString(4);
                req.DotNetFrameworkVersion = Environment.Version.ToString();
                req.OperatingSystem        = Environment.OSVersion.VersionString;
                req.ReportID = Tools.EncryptSimple(_appData.Id);

                if (_managerState != null && _managerState.Length > 0)
                {
                    req.ManagerState = Tools.EncryptSimple(_managerState.Concat(" "));
                }

                ErrorReportResponse resp = pm.ReportError(req);

                if (!resp.Successful)
                {
                    throw new FailedToSendErrorReportException(resp.Message);
                }

                return(id);
            } finally {
                pm.Close();
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        ///     Convert received report to our internal format
        /// </summary>
        /// <param name="report">client report</param>
        /// <param name="applicationId">application that we identified that the report belongs to</param>
        /// <returns>internal format</returns>
        public ErrorReportEntity ConvertReport(ReceivedReportDTO report, int applicationId)
        {
            ErrorReportException ex = null;

            if (report.Exception != null)
            {
                ex = ConvertException(report.Exception);
            }

            //var id = _idGeneratorClient.GetNextId(ErrorReportEntity.SEQUENCE);
            var contexts = report.ContextCollections.Select(x => new ErrorReportContext(x.Name, x.Properties)).ToArray();
            var dto      = new ErrorReportEntity(applicationId, report.ReportId, report.CreatedAtUtc, ex, contexts);

            return(dto);
        }
Ejemplo n.º 7
0
        /// <summary>
        ///     Convert exception to our internal format
        /// </summary>
        /// <param name="exception">exception</param>
        /// <returns>our format</returns>
        public ErrorReportException ConvertException(ReceivedReportException exception)
        {
            var ex = new ErrorReportException
            {
                AssemblyName = exception.AssemblyName,
                BaseClasses  = exception.BaseClasses,
                Everything   = exception.Everything,
                FullName     = exception.FullName,
                Message      = exception.Message,
                Name         = exception.Name,
                Namespace    = exception.Namespace,
                StackTrace   = exception.StackTrace
            };

            if (exception.InnerException != null)
            {
                ex.InnerException = ConvertException(exception.InnerException);
            }
            return(ex);
        }
Ejemplo n.º 8
0
        private ErrorReportException ConvertException(ProcessReportExceptionDto dto)
        {
            var entity = new ErrorReportException
            {
                Message      = dto.Message,
                FullName     = dto.FullName,
                Name         = dto.Name,
                AssemblyName = dto.AssemblyName,
                BaseClasses  = dto.BaseClasses,
                Everything   = dto.Everything,
                Namespace    = dto.Namespace,
                StackTrace   = dto.StackTrace
            };

            if (dto.InnerExceptionDto != null)
            {
                entity.InnerException = ConvertException(dto.InnerExceptionDto);
            }
            return(entity);
        }
Ejemplo n.º 9
0
        private ReportExeptionDTO ConvertToCoreException(ErrorReportException exception)
        {
            var ex = new ReportExeptionDTO
            {
                AssemblyName = exception.AssemblyName,
                BaseClasses  = exception.BaseClasses,
                Everything   = exception.Everything,
                FullName     = exception.FullName,
                Message      = exception.Message,
                Name         = exception.Name,
                Namespace    = exception.Namespace,
                StackTrace   = exception.StackTrace
            };

            if (ex.InnerException != null)
            {
                ex.InnerException = ConvertToCoreException(exception.InnerException);
            }
            return(ex);
        }
Ejemplo n.º 10
0
        /// <summary>
        ///     Convert exception to our internal format
        /// </summary>
        /// <param name="exceptionDto">exception</param>
        /// <returns>our format</returns>
        public ErrorReportException ConvertException(ProcessReportExceptionDto exceptionDto)
        {
            var ex = new ErrorReportException
            {
                AssemblyName = exceptionDto.AssemblyName,
                BaseClasses  = exceptionDto.BaseClasses,
                Everything   = exceptionDto.Everything,
                FullName     = exceptionDto.FullName,
                Message      = exceptionDto.Message,
                Name         = exceptionDto.Name,
                Namespace    = exceptionDto.Namespace,
                StackTrace   = exceptionDto.StackTrace
            };

            if (exceptionDto.InnerExceptionDto != null)
            {
                ex.InnerException = ConvertException(exceptionDto.InnerExceptionDto);
            }
            return(ex);
        }
Ejemplo n.º 11
0
        public async Task SaveAsync()
        {
            int a = 2, b = 0;

            try
            {
                int c = a / b;
            }
            catch (Exception exception)
            {
                AssemblyName assemblyName = AssemblyHelper.AssemblyName;
                await Logging.SaveAsync(exception, assemblyName, TestErrorType.DivideByZero);

                ErrorReportException savedException = this.exceptionsSqlHelper.GetBy(assemblyName.Name, assemblyName.Version.ToString());

                Assert.IsNotNull(savedException);

                this.exceptionsSqlHelper.Delete(savedException.Id);
            }
        }
Ejemplo n.º 12
0
 public async Task HandleAsync(IMessageContext context, ProcessReport message)
 {
     try
     {
         ErrorReportException ex = null;
         if (message.Exception != null)
         {
             ex = ConvertException(message.Exception);
         }
         var contexts = message.ContextCollections.Select(ConvertContext).ToArray();
         var entity   = new ErrorReportEntity(message.ApplicationId, message.ReportId, message.CreatedAtUtc, ex,
                                              contexts)
         {
             RemoteAddress = message.RemoteAddress
         };
         await _analyzer.Analyze(context, entity);
     }
     catch (Exception ex)
     {
         _logger.Error("Failed to analyze report ", ex);
     }
 }
        public void should_match_line_numbers_and_without_line_numbers_to_reduce_the_number_of_incidents()
        {
            var ex1 = new ErrorReportException {
                StackTrace = @"at System.Web.Compilation.AssemblyBuilder.Compile():line 64
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild():line 65
at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath):line 67"
            };
            var ex2 = new ErrorReportException
            {
                StackTrace = @"at System.Web.Compilation.AssemblyBuilder.Compile()
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)"
            };
            var report1 = new ErrorReportEntity(1, "fjkkfjjkf", DateTime.UtcNow, ex1, new List <ErrorReportContextCollection>());
            var report2 = new ErrorReportEntity(1, "fjkkfjjkf", DateTime.UtcNow, ex2, new List <ErrorReportContextCollection>());

            var sut     = new HashCodeGenerator(new IHashCodeSubGenerator[0]);
            var actual1 = sut.GenerateHashCode(report1);
            var actual2 = sut.GenerateHashCode(report2);

            actual1.Should().Be(actual2);
        }
        public void should_strip_line_numbers_to_reduce_the_number_of_incidents()
        {
            var locator = Substitute.For <IServiceLocator>();
            var ex1     = new ErrorReportException {
                StackTrace = @"   at System.Web.Compilation.AssemblyBuilder.Compile():line 64
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild():line 65
at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath):line 67"
            };
            var ex2 = new ErrorReportException
            {
                StackTrace = @"   at System.Web.Compilation.AssemblyBuilder.Compile():line 12
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild():line 23
at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath):line 53"
            };
            var report1 = new ErrorReportEntity(1, "fjkkfjjkf", DateTime.UtcNow, ex1, new List <ErrorReportContext>());
            var report2 = new ErrorReportEntity(1, "fjkkfjjkf", DateTime.UtcNow, ex2, new List <ErrorReportContext>());

            var sut     = new HashCodeGenerator(locator);
            var actual1 = sut.GenerateHashCode(report1);
            var actual2 = sut.GenerateHashCode(report2);

            actual1.Should().Be(actual2);
        }