From 176bb42949e25a0e13d774dce2c03847c2a70f38 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 8 Sep 2021 17:34:40 +0200 Subject: [PATCH] Fixes to rules. --- .../HandleRules/JobResult.cs | 6 +++--- .../HandleRules/RuleService.cs | 2 +- .../Rules/MongoRuleEventRepository.cs | 4 ++-- .../Rules/RuleEnqueuer.cs | 4 ++-- .../Rules/Runner/DefaultRuleRunnerService.cs | 2 +- .../Rules/Runner/RuleRunnerGrain.cs | 14 ++++++------- .../HandleRules/RuleServiceTests.cs | 6 +++--- .../Rules/RuleEnqueuerTests.cs | 21 +++++++++++++++++++ .../pages/events/rule-event.component.scss | 1 - 9 files changed, 40 insertions(+), 20 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/JobResult.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/JobResult.cs index 0fa37bff5..fad228fca 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/JobResult.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/JobResult.cs @@ -57,17 +57,17 @@ namespace Squidex.Domain.Apps.Core.HandleRules public EnrichedEvent? EnrichedEvent { get; init; } - public Exception? Exception { get; init; } + public Exception? EnrichmentError { get; init; } public SkipReason SkipReason { get; init; } - public static JobResult Failed(Exception exception, EnrichedEvent? enrichedEvent = null, RuleJob? job = null) + public static JobResult Failed(Exception error, EnrichedEvent? enrichedEvent = null, RuleJob? job = null) { return new JobResult { Job = job, EnrichedEvent = enrichedEvent, - Exception = exception, + EnrichmentError = error, SkipReason = SkipReason.Failed }; } diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs index 7aa37f6b7..c4c6c6bce 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleService.cs @@ -238,7 +238,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules jobs.Add(new JobResult { EnrichedEvent = enrichedEvent, - Exception = ex, + EnrichmentError = ex, SkipReason = SkipReason.Failed }); } diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Rules/MongoRuleEventRepository.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Rules/MongoRuleEventRepository.cs index ad9abf31a..a3157130a 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Rules/MongoRuleEventRepository.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Rules/MongoRuleEventRepository.cs @@ -119,7 +119,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Rules public Task CancelByRuleAsync(DomainId ruleId) { - return Collection.UpdateOneAsync(x => x.RuleId == ruleId, + return Collection.UpdateManyAsync(x => x.RuleId == ruleId, Update .Set(x => x.NextAttempt, null) .Set(x => x.JobResult, RuleJobResult.Cancelled)); @@ -127,7 +127,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Rules public Task CancelByAppAsync(DomainId appId) { - return Collection.UpdateOneAsync(x => x.DocumentId == appId, + return Collection.UpdateManyAsync(x => x.AppId == appId, Update .Set(x => x.NextAttempt, null) .Set(x => x.JobResult, RuleJobResult.Cancelled)); diff --git a/backend/src/Squidex.Domain.Apps.Entities/Rules/RuleEnqueuer.cs b/backend/src/Squidex.Domain.Apps.Entities/Rules/RuleEnqueuer.cs index 3cbaa119a..bae797990 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Rules/RuleEnqueuer.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Rules/RuleEnqueuer.cs @@ -61,9 +61,9 @@ namespace Squidex.Domain.Apps.Entities.Rules await foreach (var job in jobs) { - if (job.Job != null) + if (job.Job != null && job.SkipReason == SkipReason.None) { - await ruleEventRepository.EnqueueAsync(job.Job, job.Exception); + await ruleEventRepository.EnqueueAsync(job.Job, job.EnrichmentError); } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/DefaultRuleRunnerService.cs b/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/DefaultRuleRunnerService.cs index 02904c23e..0f9bc210c 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/DefaultRuleRunnerService.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/DefaultRuleRunnerService.cs @@ -67,7 +67,7 @@ namespace Squidex.Domain.Apps.Entities.Rules.Runner ActionData = result.Job?.ActionData, ActionName = result.Job?.ActionName, EnrichedEvent = result.EnrichedEvent, - Error = result.Exception?.Message, + Error = result.EnrichmentError?.Message, Event = @event.Payload, EventName = eventName, SkipReason = result.SkipReason diff --git a/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs b/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs index fed5040c8..628a2be81 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Rules/Runner/RuleRunnerGrain.cs @@ -219,20 +219,20 @@ namespace Squidex.Domain.Apps.Entities.Rules.Runner await foreach (var job in ruleService.CreateSnapshotJobsAsync(context, ct)) { - if (job.Job != null) + if (job.Job != null && job.SkipReason == SkipReason.None) { - await ruleEventRepository.EnqueueAsync(job.Job, job.Exception); + await ruleEventRepository.EnqueueAsync(job.Job, job.EnrichmentError); } - else if (job.Exception != null) + else if (job.EnrichmentError != null) { errors++; if (errors >= MaxErrors) { - throw job.Exception; + throw job.EnrichmentError; } - log.LogWarning(job.Exception, w => w + log.LogWarning(job.EnrichmentError, w => w .WriteProperty("action", "runRule") .WriteProperty("status", "failedPartially")); } @@ -257,9 +257,9 @@ namespace Squidex.Domain.Apps.Entities.Rules.Runner await foreach (var job in jobs) { - if (job.Job != null) + if (job.Job != null && job.SkipReason == SkipReason.None) { - await ruleEventRepository.EnqueueAsync(job.Job, job.Exception); + await ruleEventRepository.EnqueueAsync(job.Job, job.EnrichmentError); } } } diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs index 2fe8af2e6..59683bd43 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleServiceTests.cs @@ -250,7 +250,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules var jobs = await sut.CreateSnapshotJobsAsync(context).ToListAsync(); - Assert.Equal(2, jobs.Count(x => x.Job != null && x.Exception == null)); + Assert.Equal(2, jobs.Count(x => x.Job != null && x.EnrichmentError == null)); } [Fact] @@ -273,7 +273,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules var jobs = await sut.CreateSnapshotJobsAsync(context).ToListAsync(); - Assert.Equal(2, jobs.Count(x => x.Job == null && x.Exception != null)); + Assert.Equal(2, jobs.Count(x => x.Job == null && x.EnrichmentError != null)); } [Fact] @@ -587,7 +587,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules var job = await sut.CreateJobsAsync(@event, context).SingleAsync(); - Assert.NotNull(job.Exception); + Assert.NotNull(job.EnrichmentError); Assert.NotNull(job.Job?.ActionData); Assert.NotNull(job.Job?.Description); Assert.Equal(enrichedEvent, job.EnrichedEvent); diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs index b385127d5..edb379e70 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs @@ -96,6 +96,27 @@ namespace Squidex.Domain.Apps.Entities.Rules .MustNotHaveHappened(); } + [Fact] + public async Task Should_not_insert_job_if_job_has_a_skip_reason() + { + var @event = Envelope.Create(new ContentCreated { AppId = appId }); + + var rule = CreateRule(); + + var job = new RuleJob + { + Created = now + }; + + A.CallTo(() => ruleService.CreateJobsAsync(@event, A.That.Matches(x => x.Rule == rule.RuleDef), default)) + .Returns(new List { new JobResult { Job = job, SkipReason = SkipReason.TooOld } }.ToAsyncEnumerable()); + + await sut.EnqueueAsync(rule.RuleDef, rule.Id, @event); + + A.CallTo(() => ruleEventRepository.EnqueueAsync(A._, (Exception?)null)) + .MustNotHaveHappened(); + } + [Fact] public async Task Should_update_repository_if_enqueing() { diff --git a/frontend/app/features/rules/pages/events/rule-event.component.scss b/frontend/app/features/rules/pages/events/rule-event.component.scss index 7684f212e..dbd6a077f 100644 --- a/frontend/app/features/rules/pages/events/rule-event.component.scss +++ b/frontend/app/features/rules/pages/events/rule-event.component.scss @@ -27,7 +27,6 @@ td { &-stats { font-size: $font-smallest; font-weight: normal; - padding-bottom: 0; } &-header {