Browse Source

Rule fixes.

pull/585/head
Sebastian 5 years ago
parent
commit
5ee8c619ec
  1. 2
      backend/src/Squidex.Domain.Apps.Entities/Rules/IRuleEnqueuer.cs
  2. 2
      backend/src/Squidex.Domain.Apps.Entities/Rules/RuleDomainObject.cs
  3. 48
      backend/src/Squidex.Domain.Apps.Entities/Rules/RuleEnqueuer.cs
  4. 2
      backend/src/Squidex/Config/Orleans/OrleansServices.cs
  5. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDomainObjectTests.cs
  6. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs

2
backend/src/Squidex.Domain.Apps.Entities/Rules/IRuleEnqueuer.cs

@ -14,6 +14,6 @@ namespace Squidex.Domain.Apps.Entities.Rules
{ {
public interface IRuleEnqueuer public interface IRuleEnqueuer
{ {
Task Enqueue(Rule rule, Guid ruleId, Envelope<IEvent> @event); Task EnqueueAsync(Rule rule, Guid ruleId, Envelope<IEvent> @event);
} }
} }

2
backend/src/Squidex.Domain.Apps.Entities/Rules/RuleDomainObject.cs

@ -100,7 +100,7 @@ namespace Squidex.Domain.Apps.Entities.Rules
var @event = SimpleMapper.Map(command, new RuleManuallyTriggered { RuleId = Snapshot.Id, AppId = Snapshot.AppId }); var @event = SimpleMapper.Map(command, new RuleManuallyTriggered { RuleId = Snapshot.Id, AppId = Snapshot.AppId });
await ruleEnqueuer.Enqueue(Snapshot.RuleDef, Snapshot.Id, Envelope.Create(@event)); await ruleEnqueuer.EnqueueAsync(Snapshot.RuleDef, Snapshot.Id, Envelope.Create(@event));
return null; return null;
} }

48
backend/src/Squidex.Domain.Apps.Entities/Rules/RuleEnqueuer.cs

@ -50,46 +50,46 @@ namespace Squidex.Domain.Apps.Entities.Rules
this.localCache = localCache; this.localCache = localCache;
} }
public async Task Enqueue(Rule rule, Guid ruleId, Envelope<IEvent> @event) public async Task EnqueueAsync(Rule rule, Guid ruleId, Envelope<IEvent> @event)
{ {
Guard.NotNull(rule, nameof(rule)); Guard.NotNull(rule, nameof(rule));
Guard.NotNull(@event, nameof(@event)); Guard.NotNull(@event, nameof(@event));
using (localCache.StartContext()) var jobs = await ruleService.CreateJobsAsync(rule, ruleId, @event);
{
var jobs = await ruleService.CreateJobsAsync(rule, ruleId, @event);
foreach (var (job, ex) in jobs) foreach (var (job, ex) in jobs)
{
if (ex != null)
{ {
if (ex != null) await ruleEventRepository.EnqueueAsync(job, null);
{
await ruleEventRepository.EnqueueAsync(job, null);
await ruleEventRepository.UpdateAsync(job, new RuleJobUpdate await ruleEventRepository.UpdateAsync(job, new RuleJobUpdate
{
JobResult = RuleJobResult.Failed,
ExecutionResult = RuleResult.Failed,
ExecutionDump = ex.ToString(),
Finished = job.Created
});
}
else
{ {
await ruleEventRepository.EnqueueAsync(job, job.Created); JobResult = RuleJobResult.Failed,
} ExecutionResult = RuleResult.Failed,
ExecutionDump = ex.ToString(),
Finished = job.Created
});
}
else
{
await ruleEventRepository.EnqueueAsync(job, job.Created);
} }
} }
} }
public async Task On(Envelope<IEvent> @event) public async Task On(Envelope<IEvent> @event)
{ {
if (@event.Payload is AppEvent appEvent) using (localCache.StartContext())
{ {
var rules = await GetRulesAsync(appEvent.AppId.Id); if (@event.Payload is AppEvent appEvent)
foreach (var ruleEntity in rules)
{ {
await Enqueue(ruleEntity.RuleDef, ruleEntity.Id, @event); var rules = await GetRulesAsync(appEvent.AppId.Id);
foreach (var ruleEntity in rules)
{
await EnqueueAsync(ruleEntity.RuleDef, ruleEntity.Id, @event);
}
} }
} }
} }

2
backend/src/Squidex/Config/Orleans/OrleansServices.cs

@ -59,10 +59,10 @@ namespace Squidex.Config.Orleans
options.HostSelf = false; options.HostSelf = false;
}); });
builder.AddIncomingGrainCallFilter<LoggingFilter>();
builder.AddIncomingGrainCallFilter<ExceptionWrapperFilter>(); builder.AddIncomingGrainCallFilter<ExceptionWrapperFilter>();
builder.AddIncomingGrainCallFilter<ActivationLimiterFilter>(); builder.AddIncomingGrainCallFilter<ActivationLimiterFilter>();
builder.AddIncomingGrainCallFilter<LocalCacheFilter>(); builder.AddIncomingGrainCallFilter<LocalCacheFilter>();
builder.AddIncomingGrainCallFilter<LoggingFilter>();
builder.AddIncomingGrainCallFilter<StateFilter>(); builder.AddIncomingGrainCallFilter<StateFilter>();
var orleansPortSilo = config.GetOptionalValue("orleans:siloPort", 11111); var orleansPortSilo = config.GetOptionalValue("orleans:siloPort", 11111);

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDomainObjectTests.cs

@ -165,7 +165,7 @@ namespace Squidex.Domain.Apps.Entities.Rules
Assert.Null(result); Assert.Null(result);
A.CallTo(() => ruleEnqueuer.Enqueue(sut.Snapshot.RuleDef, sut.Id, A.CallTo(() => ruleEnqueuer.EnqueueAsync(sut.Snapshot.RuleDef, sut.Id,
A<Envelope<IEvent>>.That.Matches(x => x.Payload is RuleManuallyTriggered))) A<Envelope<IEvent>>.That.Matches(x => x.Payload is RuleManuallyTriggered)))
.MustHaveHappened(); .MustHaveHappened();
} }

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs

@ -86,7 +86,7 @@ namespace Squidex.Domain.Apps.Entities.Rules
A.CallTo(() => ruleService.CreateJobsAsync(rule.RuleDef, rule.Id, @event, true)) A.CallTo(() => ruleService.CreateJobsAsync(rule.RuleDef, rule.Id, @event, true))
.Returns(new List<(RuleJob, Exception?)> { (job, null) }); .Returns(new List<(RuleJob, Exception?)> { (job, null) });
await sut.Enqueue(rule.RuleDef, rule.Id, @event); await sut.EnqueueAsync(rule.RuleDef, rule.Id, @event);
A.CallTo(() => ruleEventRepository.EnqueueAsync(job, now, default)) A.CallTo(() => ruleEventRepository.EnqueueAsync(job, now, default))
.MustHaveHappened(); .MustHaveHappened();

Loading…
Cancel
Save