public Task MarkSentAsync(Guid jobId, string dump, RuleResult result, RuleJobResult jobResult, TimeSpan elapsed, Instant?nextAttempt) { return(Collection.UpdateOneAsync(x => x.Id == jobId, Update.Set(x => x.Result, result) .Set(x => x.LastDump, dump) .Set(x => x.JobResult, jobResult) .Set(x => x.NextAttempt, nextAttempt) .Inc(x => x.NumCalls, 1))); }
public async Task MarkSentAsync(RuleJob job, string dump, RuleResult result, RuleJobResult jobResult, TimeSpan elapsed, Instant finished, Instant?nextCall) { if (result == RuleResult.Success) { await statisticsCollection.IncrementSuccess(job.AppId, job.RuleId, finished); } else { await statisticsCollection.IncrementFailed(job.AppId, job.RuleId, finished); } await Collection.UpdateOneAsync(x => x.Id == job.Id, Update .Set(x => x.Result, result) .Set(x => x.LastDump, dump) .Set(x => x.JobResult, jobResult) .Set(x => x.NextAttempt, nextCall) .Inc(x => x.NumCalls, 1)); }
public async Task Should_set_next_attempt_based_on_num_calls(int calls, int minutes, RuleResult result, RuleJobResult jobResult) { var actionData = "{}"; var actionName = "MyAction"; var @event = CreateEvent(calls, actionName, actionData); var requestElapsed = TimeSpan.FromMinutes(1); var requestDump = "Dump"; A.CallTo(() => ruleService.InvokeAsync(@event.Job.ActionName, @event.Job.ActionData)) .Returns((Result.Create(requestDump, result), requestElapsed)); var now = clock.GetCurrentInstant(); Instant?nextCall = null; if (minutes > 0) { nextCall = now.Plus(Duration.FromMinutes(minutes)); } await sut.HandleAsync(@event); A.CallTo(() => ruleEventRepository.UpdateAsync(@event.Job, A <RuleJobUpdate> .That.Matches(x => x.Elapsed == requestElapsed && x.ExecutionDump == requestDump && x.ExecutionResult == result && x.Finished == now && x.JobNext == nextCall && x.JobResult == jobResult))) .MustHaveHappened(); }
private void VerifyRepositories(IRuleEventEntity @event, string dump, RuleResult result, RuleJobResult jobResult, TimeSpan elapsed, Instant?nextCall) { A.CallTo(() => ruleEventRepository.MarkSendingAsync(@event.Id)) .MustHaveHappened(); A.CallTo(() => ruleEventRepository.MarkSentAsync(@event.Id, dump, result, jobResult, elapsed, nextCall)) .MustHaveHappened(); }
public void Should_set_next_attempt_based_on_num_calls(int calls, int minutes, RuleResult result, RuleJobResult jobResult) { var actionData = new RuleJobData(); var actionName = "MyAction"; var @event = CreateEvent(calls, actionName, actionData); var requestElapsed = TimeSpan.FromMinutes(1); var requestDump = "Dump"; SetupSender(@event, requestDump, result, requestElapsed); SetupPendingEvents(@event); var sut = new RuleDequeuer( ruleService, ruleEventRepository, log, clock); sut.Next(); sut.Dispose(); Instant?nextCall = null; if (minutes > 0) { nextCall = now.Plus(Duration.FromMinutes(minutes)); } VerifyRepositories(@event, requestDump, result, jobResult, requestElapsed, nextCall); }
public async Task Should_set_next_attempt_based_on_num_calls(int calls, int minutes, RuleResult result, RuleJobResult jobResult) { var actionData = new JObject(); var actionName = "MyAction"; var @event = CreateEvent(calls, actionName, actionData); var requestElapsed = TimeSpan.FromMinutes(1); var requestDump = "Dump"; A.CallTo(() => ruleService.InvokeAsync(@event.Job.ActionName, @event.Job.ActionData)) .Returns((requestDump, result, requestElapsed)); Instant?nextCall = null; if (minutes > 0) { nextCall = now.Plus(Duration.FromMinutes(minutes)); } await sut.HandleAsync(@event); A.CallTo(() => ruleEventRepository.MarkSentAsync(@event.Id, requestDump, result, jobResult, requestElapsed, nextCall)) .MustHaveHappened(); }