Browse Source

Logging activation time for domain object grains.

pull/282/head
Sebastian 9 years ago
parent
commit
aa2d71f4bc
  1. 4
      src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs
  2. 5
      src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs
  3. 4
      src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs
  4. 5
      src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs
  5. 5
      src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs
  6. 5
      src/Squidex.Domain.Apps.Entities/SquidexDomainObjectGrain.cs
  7. 21
      src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs
  8. 3
      src/Squidex.Infrastructure/FileExtensions.cs
  9. 3
      tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs
  10. 3
      tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs
  11. 4
      tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs
  12. 3
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs
  13. 2
      tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs
  14. 3
      tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs
  15. 3
      tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs
  16. 3
      tests/Squidex.Infrastructure.Tests/Commands/DomainObjectGrainTests.cs
  17. 4
      tests/Squidex.Infrastructure.Tests/TestHelpers/MyGrain.cs

4
src/Squidex.Domain.Apps.Entities/Apps/AppGrain.cs

@ -18,6 +18,7 @@ using Squidex.Domain.Apps.Events.Apps;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
@ -36,11 +37,12 @@ namespace Squidex.Domain.Apps.Entities.Apps
public AppGrain( public AppGrain(
InitialPatterns initialPatterns, InitialPatterns initialPatterns,
IStore<Guid> store, IStore<Guid> store,
ISemanticLog log,
IAppProvider appProvider, IAppProvider appProvider,
IAppPlansProvider appPlansProvider, IAppPlansProvider appPlansProvider,
IAppPlanBillingManager appPlansBillingManager, IAppPlanBillingManager appPlansBillingManager,
IUserResolver userResolver) IUserResolver userResolver)
: base(store) : base(store, log)
{ {
Guard.NotNull(initialPatterns, nameof(initialPatterns)); Guard.NotNull(initialPatterns, nameof(initialPatterns));
Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(appProvider, nameof(appProvider));

5
src/Squidex.Domain.Apps.Entities/Assets/AssetGrain.cs

@ -15,6 +15,7 @@ using Squidex.Domain.Apps.Events.Assets;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
@ -23,8 +24,8 @@ namespace Squidex.Domain.Apps.Entities.Assets
{ {
public class AssetGrain : SquidexDomainObjectGrain<AssetState>, IAssetGrain public class AssetGrain : SquidexDomainObjectGrain<AssetState>, IAssetGrain
{ {
public AssetGrain(IStore<Guid> store) public AssetGrain(IStore<Guid> store, ISemanticLog log)
: base(store) : base(store, log)
{ {
} }

4
src/Squidex.Domain.Apps.Entities/Contents/ContentGrain.cs

@ -19,6 +19,7 @@ using Squidex.Domain.Apps.Events.Contents;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
@ -33,11 +34,12 @@ namespace Squidex.Domain.Apps.Entities.Contents
public ContentGrain( public ContentGrain(
IStore<Guid> store, IStore<Guid> store,
ISemanticLog log,
IAppProvider appProvider, IAppProvider appProvider,
IAssetRepository assetRepository, IAssetRepository assetRepository,
IScriptEngine scriptEngine, IScriptEngine scriptEngine,
IContentRepository contentRepository) IContentRepository contentRepository)
: base(store) : base(store, log)
{ {
Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(appProvider, nameof(appProvider));
Guard.NotNull(scriptEngine, nameof(scriptEngine)); Guard.NotNull(scriptEngine, nameof(scriptEngine));

5
src/Squidex.Domain.Apps.Entities/Rules/RuleGrain.cs

@ -15,6 +15,7 @@ using Squidex.Domain.Apps.Events.Rules;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
@ -25,8 +26,8 @@ namespace Squidex.Domain.Apps.Entities.Rules
{ {
private readonly IAppProvider appProvider; private readonly IAppProvider appProvider;
public RuleGrain(IStore<Guid> store, IAppProvider appProvider) public RuleGrain(IStore<Guid> store, ISemanticLog log, IAppProvider appProvider)
: base(store) : base(store, log)
{ {
Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(appProvider, nameof(appProvider));

5
src/Squidex.Domain.Apps.Entities/Schemas/SchemaGrain.cs

@ -18,6 +18,7 @@ using Squidex.Domain.Apps.Events.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.Reflection; using Squidex.Infrastructure.Reflection;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
@ -29,8 +30,8 @@ namespace Squidex.Domain.Apps.Entities.Schemas
private readonly IAppProvider appProvider; private readonly IAppProvider appProvider;
private readonly FieldRegistry registry; private readonly FieldRegistry registry;
public SchemaGrain(IStore<Guid> store, IAppProvider appProvider, FieldRegistry registry) public SchemaGrain(IStore<Guid> store, ISemanticLog log, IAppProvider appProvider, FieldRegistry registry)
: base(store) : base(store, log)
{ {
Guard.NotNull(appProvider, nameof(appProvider)); Guard.NotNull(appProvider, nameof(appProvider));
Guard.NotNull(registry, nameof(registry)); Guard.NotNull(registry, nameof(registry));

5
src/Squidex.Domain.Apps.Entities/SquidexDomainObjectGrain.cs

@ -9,14 +9,15 @@ using System;
using Squidex.Domain.Apps.Events; using Squidex.Domain.Apps.Events;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
namespace Squidex.Domain.Apps.Entities namespace Squidex.Domain.Apps.Entities
{ {
public abstract class SquidexDomainObjectGrain<T> : DomainObjectGrain<T> where T : IDomainState, new() public abstract class SquidexDomainObjectGrain<T> : DomainObjectGrain<T> where T : IDomainState, new()
{ {
protected SquidexDomainObjectGrain(IStore<Guid> store) protected SquidexDomainObjectGrain(IStore<Guid> store, ISemanticLog log)
: base(store) : base(store, log)
{ {
} }

21
src/Squidex.Infrastructure/Commands/DomainObjectGrain.cs

@ -9,6 +9,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
using Squidex.Infrastructure.Tasks; using Squidex.Infrastructure.Tasks;
@ -19,6 +20,7 @@ namespace Squidex.Infrastructure.Commands
{ {
private readonly List<Envelope<IEvent>> uncomittedEvents = new List<Envelope<IEvent>>(); private readonly List<Envelope<IEvent>> uncomittedEvents = new List<Envelope<IEvent>>();
private readonly IStore<Guid> store; private readonly IStore<Guid> store;
private readonly ISemanticLog log;
private Guid id; private Guid id;
private T snapshot = new T { Version = EtagVersion.Empty }; private T snapshot = new T { Version = EtagVersion.Empty };
private IPersistence<T> persistence; private IPersistence<T> persistence;
@ -43,20 +45,29 @@ namespace Squidex.Infrastructure.Commands
get { return snapshot; } get { return snapshot; }
} }
protected DomainObjectGrain(IStore<Guid> store) protected DomainObjectGrain(IStore<Guid> store, ISemanticLog log)
{ {
Guard.NotNull(store, nameof(store)); Guard.NotNull(store, nameof(store));
Guard.NotNull(log, nameof(log));
this.store = store; this.store = store;
this.log = log;
} }
public override Task OnActivateAsync(Guid key) public override async Task OnActivateAsync(Guid key)
{ {
id = key; using (log.MeasureInformation(w => w
.WriteProperty("action", "ActivateDomainObject")
.WriteProperty("doType", GetType().Name)
.WriteProperty("doKey", key.ToString())))
{
id = key;
persistence = store.WithSnapshotsAndEventSourcing<T, Guid>(GetType(), id, ApplySnapshot, ApplyEvent); persistence = store.WithSnapshotsAndEventSourcing<T, Guid>(GetType(), id, ApplySnapshot, ApplyEvent);
return persistence.ReadAsync(); await persistence.ReadAsync();
}
} }
public void RaiseEvent(IEvent @event) public void RaiseEvent(IEvent @event)

3
src/Squidex.Infrastructure/FileExtensions.cs

@ -6,6 +6,7 @@
// ========================================================================== // ==========================================================================
using System; using System;
using System.Globalization;
using System.IO; using System.IO;
namespace Squidex.Infrastructure namespace Squidex.Infrastructure
@ -62,7 +63,7 @@ namespace Squidex.Infrastructure
u = Extensions.Length - 1; u = Extensions.Length - 1;
} }
return $"{Math.Round(d, 1)} {Extensions[u]}"; return $"{Math.Round(d, 1).ToString(CultureInfo.InvariantCulture)} {Extensions[u]}";
} }
} }
} }

3
tests/Squidex.Domain.Apps.Entities.Tests/Apps/AppGrainTests.cs

@ -17,6 +17,7 @@ using Squidex.Domain.Apps.Entities.TestHelpers;
using Squidex.Domain.Apps.Events.Apps; using Squidex.Domain.Apps.Events.Apps;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Log;
using Squidex.Shared.Users; using Squidex.Shared.Users;
using Xunit; using Xunit;
@ -61,7 +62,7 @@ namespace Squidex.Domain.Apps.Entities.Apps
{ patternId2, new AppPattern("Numbers", "[0-9]*") } { patternId2, new AppPattern("Numbers", "[0-9]*") }
}; };
sut = new AppGrain(initialPatterns, Store, appProvider, appPlansProvider, appPlansBillingManager, userResolver); sut = new AppGrain(initialPatterns, Store, A.Dummy<ISemanticLog>(), appProvider, appPlansProvider, appPlansBillingManager, userResolver);
sut.OnActivateAsync(Id).Wait(); sut.OnActivateAsync(Id).Wait();
} }

3
tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs

@ -16,6 +16,7 @@ using Squidex.Domain.Apps.Entities.Assets.State;
using Squidex.Domain.Apps.Entities.TestHelpers; using Squidex.Domain.Apps.Entities.TestHelpers;
using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Assets;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Tasks; using Squidex.Infrastructure.Tasks;
using Xunit; using Xunit;
@ -42,7 +43,7 @@ namespace Squidex.Domain.Apps.Entities.Assets
{ {
file = new AssetFile("my-image.png", "image/png", 1024, () => stream); file = new AssetFile("my-image.png", "image/png", 1024, () => stream);
asset = new AssetGrain(Store); asset = new AssetGrain(Store, A.Dummy<ISemanticLog>());
asset.OnActivateAsync(Id).Wait(); asset.OnActivateAsync(Id).Wait();
A.CallTo(() => grainFactory.GetGrain<IAssetGrain>(Id, null)) A.CallTo(() => grainFactory.GetGrain<IAssetGrain>(Id, null))

4
tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetGrainTests.cs

@ -8,6 +8,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using FakeItEasy;
using Squidex.Domain.Apps.Entities.Assets.Commands; using Squidex.Domain.Apps.Entities.Assets.Commands;
using Squidex.Domain.Apps.Entities.Assets.State; using Squidex.Domain.Apps.Entities.Assets.State;
using Squidex.Domain.Apps.Entities.TestHelpers; using Squidex.Domain.Apps.Entities.TestHelpers;
@ -15,6 +16,7 @@ using Squidex.Domain.Apps.Events.Assets;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Assets; using Squidex.Infrastructure.Assets;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Log;
using Xunit; using Xunit;
namespace Squidex.Domain.Apps.Entities.Assets namespace Squidex.Domain.Apps.Entities.Assets
@ -33,7 +35,7 @@ namespace Squidex.Domain.Apps.Entities.Assets
public AssetGrainTests() public AssetGrainTests()
{ {
sut = new AssetGrain(Store); sut = new AssetGrain(Store, A.Dummy<ISemanticLog>());
sut.OnActivateAsync(Id).Wait(); sut.OnActivateAsync(Id).Wait();
} }

3
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentGrainTests.cs

@ -25,6 +25,7 @@ using Squidex.Domain.Apps.Entities.TestHelpers;
using Squidex.Domain.Apps.Events.Contents; using Squidex.Domain.Apps.Events.Contents;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Log;
using Xunit; using Xunit;
namespace Squidex.Domain.Apps.Entities.Contents namespace Squidex.Domain.Apps.Entities.Contents
@ -107,7 +108,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
patched = patch.MergeInto(data); patched = patch.MergeInto(data);
sut = new ContentGrain(Store, appProvider, A.Dummy<IAssetRepository>(), scriptEngine, A.Dummy<IContentRepository>()); sut = new ContentGrain(Store, A.Dummy<ISemanticLog>(), appProvider, A.Dummy<IAssetRepository>(), scriptEngine, A.Dummy<IContentRepository>());
sut.OnActivateAsync(Id).Wait(); sut.OnActivateAsync(Id).Wait();
} }

2
tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleDequeuerTests.cs

@ -22,7 +22,7 @@ namespace Squidex.Domain.Apps.Entities.Rules
public class RuleDequeuerTests public class RuleDequeuerTests
{ {
private readonly IClock clock = A.Fake<IClock>(); private readonly IClock clock = A.Fake<IClock>();
private readonly ISemanticLog log = A.Fake<ISemanticLog>(); private readonly ISemanticLog log = A.Dummy<ISemanticLog>();
private readonly IAppProvider appProvider = A.Fake<IAppProvider>(); private readonly IAppProvider appProvider = A.Fake<IAppProvider>();
private readonly IRuleEventRepository ruleEventRepository = A.Fake<IRuleEventRepository>(); private readonly IRuleEventRepository ruleEventRepository = A.Fake<IRuleEventRepository>();
private readonly Instant now = SystemClock.Instance.GetCurrentInstant(); private readonly Instant now = SystemClock.Instance.GetCurrentInstant();

3
tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleGrainTests.cs

@ -17,6 +17,7 @@ using Squidex.Domain.Apps.Entities.TestHelpers;
using Squidex.Domain.Apps.Events.Rules; using Squidex.Domain.Apps.Events.Rules;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Log;
using Xunit; using Xunit;
namespace Squidex.Domain.Apps.Entities.Rules namespace Squidex.Domain.Apps.Entities.Rules
@ -34,7 +35,7 @@ namespace Squidex.Domain.Apps.Entities.Rules
public RuleGrainTests() public RuleGrainTests()
{ {
sut = new RuleGrain(Store, appProvider); sut = new RuleGrain(Store, A.Dummy<ISemanticLog>(), appProvider);
sut.OnActivateAsync(Id).Wait(); sut.OnActivateAsync(Id).Wait();
} }

3
tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaGrainTests.cs

@ -17,6 +17,7 @@ using Squidex.Domain.Apps.Entities.TestHelpers;
using Squidex.Domain.Apps.Events.Schemas; using Squidex.Domain.Apps.Events.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Log;
using Xunit; using Xunit;
namespace Squidex.Domain.Apps.Entities.Schemas namespace Squidex.Domain.Apps.Entities.Schemas
@ -41,7 +42,7 @@ namespace Squidex.Domain.Apps.Entities.Schemas
fieldId = new NamedId<long>(1, fieldName); fieldId = new NamedId<long>(1, fieldName);
sut = new SchemaGrain(Store, appProvider, registry); sut = new SchemaGrain(Store, A.Dummy<ISemanticLog>(), appProvider, registry);
sut.OnActivateAsync(Id).Wait(); sut.OnActivateAsync(Id).Wait();
} }

3
tests/Squidex.Infrastructure.Tests/Commands/DomainObjectGrainTests.cs

@ -11,6 +11,7 @@ using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using FakeItEasy; using FakeItEasy;
using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.EventSourcing;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.Orleans; using Squidex.Infrastructure.Orleans;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
using Squidex.Infrastructure.TestHelpers; using Squidex.Infrastructure.TestHelpers;
@ -60,7 +61,7 @@ namespace Squidex.Infrastructure.Commands
public sealed class MyDomainObject : DomainObjectGrain<MyDomainState> public sealed class MyDomainObject : DomainObjectGrain<MyDomainState>
{ {
public MyDomainObject(IStore<Guid> store) public MyDomainObject(IStore<Guid> store)
: base(store) : base(store, A.Dummy<ISemanticLog>())
{ {
} }

4
tests/Squidex.Infrastructure.Tests/TestHelpers/MyGrain.cs

@ -7,7 +7,9 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using FakeItEasy;
using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Commands;
using Squidex.Infrastructure.Log;
using Squidex.Infrastructure.States; using Squidex.Infrastructure.States;
namespace Squidex.Infrastructure.TestHelpers namespace Squidex.Infrastructure.TestHelpers
@ -15,7 +17,7 @@ namespace Squidex.Infrastructure.TestHelpers
public class MyGrain : DomainObjectGrain<MyDomainState> public class MyGrain : DomainObjectGrain<MyDomainState>
{ {
public MyGrain(IStore<Guid> store) public MyGrain(IStore<Guid> store)
: base(store) : base(store, A.Dummy<ISemanticLog>())
{ {
} }

Loading…
Cancel
Save