Example #1
0
 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));
        }
Example #3
0
        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();
        }
Example #4
0
        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();
        }
Example #5
0
        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();
        }