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; } }
private FixActionLoggerItem CreateNewLogItemForDiscrepancy(ActivityDiscrepancy discrepancy) { return(new FixActionLoggerItem { Discrepancy = discrepancy.Issues, Id = discrepancy.Activity.Id }); }
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); }
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); }
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); } }
public Task FixAsync(ActivityDiscrepancy discrepancy, CancellationToken cancellationToken) { return(Task.CompletedTask); }
public bool CanHandle(ActivityDiscrepancy discrepancy) { return(true); }
public Task FixAsync(ActivityDiscrepancy discrepancy, CancellationToken cancellationToken) { return(_elasticRepo.UpsertActivityAsync(discrepancy.Activity)); }
public bool CanHandle(ActivityDiscrepancy discrepancy) { return(discrepancy.Issues.HasFlag(ActivityDiscrepancyType.NotFoundInElastic)); }
public void Push(ActivityDiscrepancy discrepancy) { _fixQueue.Add(discrepancy); }
private Task LogMessage(ActivityDiscrepancy activityDiscrepancy, IFixActionLogger logger, CancellationToken cancellationToken) { _handledMessages.Push(activityDiscrepancy); return(Task.CompletedTask); }