Esempio n. 1
0
        public override async Task ProcessBatchAsync(ICollection <EventContext> contexts)
        {
            var stacks = contexts.Where(c => c.Stack?.DateFixed != null && c.Stack.DateFixed.Value < c.Event.Date.UtcDateTime).GroupBy(c => c.Event.StackId);

            foreach (var stackGroup in stacks)
            {
                try {
                    var context = stackGroup.First();
                    Logger.Trace().Message("Marking stack and events as regression.").Write();
                    await _stackRepository.MarkAsRegressedAsync(context.Stack.Id).AnyContext();

                    await _workItemQueue.EnqueueAsync(new StackWorkItem { OrganizationId = context.Event.OrganizationId, StackId = context.Stack.Id, UpdateIsFixed = true, IsFixed = false }).AnyContext();

                    await _stackRepository.InvalidateCacheAsync(context.Event.ProjectId, context.Event.StackId, context.SignatureHash).AnyContext();

                    bool isFirstEvent = true;
                    foreach (var ctx in stackGroup)
                    {
                        ctx.Event.IsFixed = false;

                        // Only mark the first event context as regressed.
                        ctx.IsRegression = isFirstEvent;
                        isFirstEvent     = false;
                    }
                } catch (Exception ex) {
                    foreach (var context in stackGroup)
                    {
                        bool cont = false;
                        try {
                            cont = HandleError(ex, context);
                        } catch {}

                        if (!cont)
                        {
                            context.SetError(ex.Message, ex);
                        }
                    }
                }
            }
        }