コード例 #1
0
        private Task LogFixerCall(
            IActivityDiscrepancyFixer fixer,
            ActivityDiscrepancy discrepancy,
            FixActionLoggerItem logItem,
            CancellationToken cancellationToken)
        {
            var handlerLogItem = new FixActionHandlerLoggerItem(fixer);

            logItem.Add(handlerLogItem);

            var sw = new Stopwatch();

            sw.Start();
            try
            {
                return(fixer.FixAsync(discrepancy, cancellationToken));
            }
            catch (Exception e)
            {
                handlerLogItem.Error = $"{e.GetType().Name} - {e.Message}";
                throw;
            }
            finally
            {
                sw.Stop();
                handlerLogItem.FixMSecs = sw.ElapsedMilliseconds;
            }
        }
コード例 #2
0
 private FixActionLoggerItem CreateNewLogItemForDiscrepancy(ActivityDiscrepancy discrepancy)
 {
     return(new FixActionLoggerItem
     {
         Discrepancy = discrepancy.Issues,
         Id = discrepancy.Activity.Id
     });
 }
コード例 #3
0
        public async Task FixAsync_WhenFixingActivity_ShouldSaveToCosmos()
        {
            // arrange
            var repo  = new Mock <ICosmosActivityDocumentRepository>();
            var fixer = new NotFoundInCosmosFixer(repo.Object);
            var dto   = new ActivityDiscrepancy(new Activity(), ActivityDiscrepancyType.NotFoundInCosmos);

            // act
            await fixer.FixAsync(dto, CancellationToken.None);

            // assert
            repo.Verify(r => r.UpsertActivityAsync(dto.Activity), Times.Once);
        }
コード例 #4
0
        public void CanHandle_NotFoundInCosmos_ShouldReturnTrue(ActivityDiscrepancyType whenCalledWith, bool expectedResult)
        {
            // arrange
            var repo  = new Mock <ICosmosActivityDocumentRepository>();
            var fixer = new NotFoundInCosmosFixer(repo.Object);
            var dto   = new ActivityDiscrepancy(new Activity(), whenCalledWith);

            // act
            var actualResult = fixer.CanHandle(dto);

            // assert
            Assert.AreEqual(expectedResult, actualResult);
        }
コード例 #5
0
        private async Task FixDiscrepancy(ActivityDiscrepancy discrepancy, IFixActionLogger logger, CancellationToken cancellationToken)
        {
            var logItem = CreateNewLogItemForDiscrepancy(discrepancy);

            logger.Add(logItem);

            foreach (var fixer in _fixers.Where(f => f.CanHandle(discrepancy)))
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                await LogFixerCall(fixer, discrepancy, logItem, cancellationToken);
            }
        }
コード例 #6
0
 public Task FixAsync(ActivityDiscrepancy discrepancy, CancellationToken cancellationToken)
 {
     return(Task.CompletedTask);
 }
コード例 #7
0
 public bool CanHandle(ActivityDiscrepancy discrepancy)
 {
     return(true);
 }
コード例 #8
0
 public Task FixAsync(ActivityDiscrepancy discrepancy, CancellationToken cancellationToken)
 {
     return(_elasticRepo.UpsertActivityAsync(discrepancy.Activity));
 }
コード例 #9
0
 public bool CanHandle(ActivityDiscrepancy discrepancy)
 {
     return(discrepancy.Issues.HasFlag(ActivityDiscrepancyType.NotFoundInElastic));
 }
コード例 #10
0
 public void Push(ActivityDiscrepancy discrepancy)
 {
     _fixQueue.Add(discrepancy);
 }
 private Task LogMessage(ActivityDiscrepancy activityDiscrepancy, IFixActionLogger logger, CancellationToken cancellationToken)
 {
     _handledMessages.Push(activityDiscrepancy);
     return(Task.CompletedTask);
 }