Beispiel #1
0
        public override void Process(ErrorPipelineContext ctx)
        {
            if (ctx.IsNew)
            {
                return;
            }

            int          maxErrorsPerStack = 50;
            Organization organization      = _organizationRepository.GetByIdCached(ctx.Error.OrganizationId);

            if (organization != null)
            {
                maxErrorsPerStack = organization.MaxErrorsPerDay > 0 ? organization.MaxErrorsPerDay + Math.Min(50, organization.MaxErrorsPerDay * 2) : Int32.MaxValue;
            }

            // get a list of oldest ids that exceed our desired max errors
            var errors = _errorRepository.Collection.Find(Query.EQ(ErrorRepository.FieldNames.ErrorStackId, new BsonObjectId(new ObjectId(ctx.Error.ErrorStackId))))
                         .SetSortOrder(SortBy.Descending(ErrorRepository.FieldNames.OccurrenceDate_UTC))
                         .SetFields(ErrorRepository.FieldNames.Id)
                         .Select(e => new Error {
                Id             = e.Id,
                OrganizationId = ctx.Error.OrganizationId,
                ProjectId      = ctx.Error.ProjectId,
                ErrorStackId   = ctx.Error.ErrorStackId
            })
                         .Skip(maxErrorsPerStack)
                         .Take(150).ToArray();

            if (errors.Length > 0)
            {
                _errorRepository.Delete(errors);
            }
        }