From 351f0b39d708cedf7d6974da9781be492970171a Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sat, 27 May 2017 20:41:59 +0200 Subject: [PATCH] Dependencies improved. --- src/Squidex.Core/Identity/SquidexRoles.cs | 8 ++-- .../Commands/DefaultDomainObjectRepository.cs | 4 +- .../Log/ConsoleLogChannel.cs | 2 +- src/Squidex.Infrastructure/Log/FileChannel.cs | 12 +++++- .../Log/Internal/AnsiLogConsole.cs | 4 +- .../Log/Internal/ConsoleLogProcessor.cs | 2 +- ...{FileLogChannel.cs => FileLogProcessor.cs} | 41 +++++++++++-------- .../Log/Internal/IConsole.cs | 3 +- .../Log/Internal/LogMessageEntry.cs | 2 +- .../Log/Internal/WindowsLogConsole.cs | 4 +- src/Squidex.Infrastructure/Singletons.cs | 6 +-- .../TypeNameAttribute.cs | 2 +- .../Converters/JsonInheritanceConverter.cs | 20 ++++----- 13 files changed, 62 insertions(+), 48 deletions(-) rename src/Squidex.Infrastructure/Log/Internal/{FileLogChannel.cs => FileLogProcessor.cs} (80%) diff --git a/src/Squidex.Core/Identity/SquidexRoles.cs b/src/Squidex.Core/Identity/SquidexRoles.cs index d7e530c9c..ca0e9b3cb 100644 --- a/src/Squidex.Core/Identity/SquidexRoles.cs +++ b/src/Squidex.Core/Identity/SquidexRoles.cs @@ -10,12 +10,12 @@ namespace Squidex.Core.Identity { public static class SquidexRoles { - public const string Administrator = "ADMINISTRATOR"; + public static readonly string Administrator = "ADMINISTRATOR"; - public const string AppOwner = "APP-OWNER"; + public static readonly string AppOwner = "APP-OWNER"; - public const string AppEditor = "APP-EDITOR"; + public static readonly string AppEditor = "APP-EDITOR"; - public const string AppDeveloper = "APP-DEVELOPER"; + public static readonly string AppDeveloper = "APP-DEVELOPER"; } } diff --git a/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs index f4180a4c3..d77f090b1 100644 --- a/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs +++ b/src/Squidex.Infrastructure/CQRS/Commands/DefaultDomainObjectRepository.cs @@ -54,7 +54,7 @@ namespace Squidex.Infrastructure.CQRS.Commands foreach (var storedEvent in events) { - var envelope = TryParseEvent(storedEvent); + var envelope = ParseOrNull(storedEvent); if (envelope != null) { @@ -91,7 +91,7 @@ namespace Squidex.Infrastructure.CQRS.Commands } } - private Envelope TryParseEvent(StoredEvent storedEvent) + private Envelope ParseOrNull(StoredEvent storedEvent) { try { diff --git a/src/Squidex.Infrastructure/Log/ConsoleLogChannel.cs b/src/Squidex.Infrastructure/Log/ConsoleLogChannel.cs index c9c3b3d81..f64a2253f 100644 --- a/src/Squidex.Infrastructure/Log/ConsoleLogChannel.cs +++ b/src/Squidex.Infrastructure/Log/ConsoleLogChannel.cs @@ -22,7 +22,7 @@ namespace Squidex.Infrastructure.Log public void Log(SemanticLogLevel logLevel, string message) { - processor.EnqueueMessage(new LogMessageEntry { Message = message, Level = logLevel }); + processor.EnqueueMessage(new LogMessageEntry { Message = message, IsError = logLevel >= SemanticLogLevel.Error }); } } } diff --git a/src/Squidex.Infrastructure/Log/FileChannel.cs b/src/Squidex.Infrastructure/Log/FileChannel.cs index aea8b916e..885d0380a 100644 --- a/src/Squidex.Infrastructure/Log/FileChannel.cs +++ b/src/Squidex.Infrastructure/Log/FileChannel.cs @@ -10,7 +10,7 @@ using Squidex.Infrastructure.Log.Internal; namespace Squidex.Infrastructure.Log { - public sealed class FileChannel : ILogChannel, IExternalSystem + public sealed class FileChannel : DisposableObjectBase, ILogChannel, IExternalSystem { private readonly FileLogProcessor processor; @@ -21,9 +21,17 @@ namespace Squidex.Infrastructure.Log processor = new FileLogProcessor(path); } + protected override void DisposeObject(bool disposing) + { + if (disposing) + { + processor.Dispose(); + } + } + public void Log(SemanticLogLevel logLevel, string message) { - processor.EnqueueMessage(new LogMessageEntry { Message = message, Level = logLevel }); + processor.EnqueueMessage(new LogMessageEntry { Message = message, IsError = logLevel >= SemanticLogLevel.Error }); } public void Connect() diff --git a/src/Squidex.Infrastructure/Log/Internal/AnsiLogConsole.cs b/src/Squidex.Infrastructure/Log/Internal/AnsiLogConsole.cs index 9ae6e665e..1c02bea72 100644 --- a/src/Squidex.Infrastructure/Log/Internal/AnsiLogConsole.cs +++ b/src/Squidex.Infrastructure/Log/Internal/AnsiLogConsole.cs @@ -21,9 +21,9 @@ namespace Squidex.Infrastructure.Log.Internal this.logToStdError = logToStdError; } - public void WriteLine(SemanticLogLevel level, string message) + public void WriteLine(bool isError, string message) { - if (level >= SemanticLogLevel.Error && logToStdError) + if (isError && logToStdError) { Console.Error.WriteLine(message); } diff --git a/src/Squidex.Infrastructure/Log/Internal/ConsoleLogProcessor.cs b/src/Squidex.Infrastructure/Log/Internal/ConsoleLogProcessor.cs index 8b4045f29..9affee650 100644 --- a/src/Squidex.Infrastructure/Log/Internal/ConsoleLogProcessor.cs +++ b/src/Squidex.Infrastructure/Log/Internal/ConsoleLogProcessor.cs @@ -43,7 +43,7 @@ namespace Squidex.Infrastructure.Log.Internal { foreach (var entry in messageQueue.GetConsumingEnumerable()) { - console.WriteLine(entry.Level, entry.Message); + console.WriteLine(entry.IsError, entry.Message); } } diff --git a/src/Squidex.Infrastructure/Log/Internal/FileLogChannel.cs b/src/Squidex.Infrastructure/Log/Internal/FileLogProcessor.cs similarity index 80% rename from src/Squidex.Infrastructure/Log/Internal/FileLogChannel.cs rename to src/Squidex.Infrastructure/Log/Internal/FileLogProcessor.cs index f9477dbd1..bf2993e7b 100644 --- a/src/Squidex.Infrastructure/Log/Internal/FileLogChannel.cs +++ b/src/Squidex.Infrastructure/Log/Internal/FileLogProcessor.cs @@ -1,5 +1,5 @@ // ========================================================================== -// FileLogChannel.cs +// FileLogProcessor.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -12,9 +12,11 @@ using System.IO; using System.Text; using System.Threading.Tasks; +// ReSharper disable InvertIf + namespace Squidex.Infrastructure.Log.Internal { - public class FileLogProcessor : IDisposable + public class FileLogProcessor : DisposableObjectBase { private const int MaxQueuedMessages = 1024; private const int Retries = 10; @@ -29,6 +31,25 @@ namespace Squidex.Infrastructure.Log.Internal outputTask = Task.Factory.StartNew(ProcessLogQueue, this, TaskCreationOptions.LongRunning); } + protected override void DisposeObject(bool disposing) + { + if (disposing) + { + messageQueue.CompleteAdding(); + + try + { + outputTask.Wait(1500); + } + catch (TaskCanceledException) + { + } + catch (AggregateException ex) when (ex.InnerExceptions.Count == 1 && ex.InnerExceptions[0] is TaskCanceledException) + { + } + } + } + public void Connect() { var fileInfo = new FileInfo(path); @@ -75,21 +96,5 @@ namespace Squidex.Infrastructure.Log.Internal return processor.ProcessLogQueue(); } - - public void Dispose() - { - messageQueue.CompleteAdding(); - - try - { - outputTask.Wait(1500); - } - catch (TaskCanceledException) - { - } - catch (AggregateException ex) when (ex.InnerExceptions.Count == 1 && ex.InnerExceptions[0] is TaskCanceledException) - { - } - } } } diff --git a/src/Squidex.Infrastructure/Log/Internal/IConsole.cs b/src/Squidex.Infrastructure/Log/Internal/IConsole.cs index 801a61e9b..6186d4a60 100644 --- a/src/Squidex.Infrastructure/Log/Internal/IConsole.cs +++ b/src/Squidex.Infrastructure/Log/Internal/IConsole.cs @@ -5,10 +5,11 @@ // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== + namespace Squidex.Infrastructure.Log.Internal { public interface IConsole { - void WriteLine(SemanticLogLevel level, string message); + void WriteLine(bool isError, string message); } } diff --git a/src/Squidex.Infrastructure/Log/Internal/LogMessageEntry.cs b/src/Squidex.Infrastructure/Log/Internal/LogMessageEntry.cs index 7baa9fb4c..5c506116e 100644 --- a/src/Squidex.Infrastructure/Log/Internal/LogMessageEntry.cs +++ b/src/Squidex.Infrastructure/Log/Internal/LogMessageEntry.cs @@ -10,7 +10,7 @@ namespace Squidex.Infrastructure.Log.Internal { public struct LogMessageEntry { - public SemanticLogLevel Level; + public bool IsError; public string Message; } diff --git a/src/Squidex.Infrastructure/Log/Internal/WindowsLogConsole.cs b/src/Squidex.Infrastructure/Log/Internal/WindowsLogConsole.cs index 57b339ec5..e39481ab8 100644 --- a/src/Squidex.Infrastructure/Log/Internal/WindowsLogConsole.cs +++ b/src/Squidex.Infrastructure/Log/Internal/WindowsLogConsole.cs @@ -19,9 +19,9 @@ namespace Squidex.Infrastructure.Log.Internal this.logToStdError = logToStdError; } - public void WriteLine(SemanticLogLevel level, string message) + public void WriteLine(bool isError, string message) { - if (level >= SemanticLogLevel.Error) + if (isError) { try { diff --git a/src/Squidex.Infrastructure/Singletons.cs b/src/Squidex.Infrastructure/Singletons.cs index ccbb781d9..2ef0e91f5 100644 --- a/src/Squidex.Infrastructure/Singletons.cs +++ b/src/Squidex.Infrastructure/Singletons.cs @@ -13,16 +13,16 @@ namespace Squidex.Infrastructure { public static class Singletons { - private static readonly ConcurrentDictionary instances = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); + private static readonly ConcurrentDictionary Instances = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); public static T GetOrAdd(string key, Func factory) { - return instances.GetOrAdd(key, factory); + return Instances.GetOrAdd(key, factory); } public static Lazy GetOrAddLazy(string key, Func factory) { - return new Lazy(() => instances.GetOrAdd(key, factory)); + return new Lazy(() => Instances.GetOrAdd(key, factory)); } } } diff --git a/src/Squidex.Infrastructure/TypeNameAttribute.cs b/src/Squidex.Infrastructure/TypeNameAttribute.cs index 068a78f15..6eee44aec 100644 --- a/src/Squidex.Infrastructure/TypeNameAttribute.cs +++ b/src/Squidex.Infrastructure/TypeNameAttribute.cs @@ -11,7 +11,7 @@ using System; namespace Squidex.Infrastructure { [AttributeUsage(AttributeTargets.Class, Inherited = false)] - public class TypeNameAttribute : Attribute + public sealed class TypeNameAttribute : Attribute { public string TypeName { get; } diff --git a/src/Squidex/Controllers/Api/Schemas/Models/Converters/JsonInheritanceConverter.cs b/src/Squidex/Controllers/Api/Schemas/Models/Converters/JsonInheritanceConverter.cs index a4315422b..802cea0f5 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/Converters/JsonInheritanceConverter.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/Converters/JsonInheritanceConverter.cs @@ -23,21 +23,21 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters private readonly string discriminator; [ThreadStatic] - private static bool isReading; + private static bool IsReading; [ThreadStatic] - private static bool isWriting; + private static bool IsWriting; public override bool CanWrite { get { - if (!isWriting) + if (!IsWriting) { return true; } - return isWriting = false; + return IsWriting = false; } } @@ -45,12 +45,12 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters { get { - if (!isReading) + if (!IsReading) { return true; } - return isReading = false; + return IsReading = false; } } @@ -66,7 +66,7 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { - isWriting = true; + IsWriting = true; try { var jsonObject = JObject.FromObject(value, serializer); @@ -77,13 +77,13 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters } finally { - isWriting = false; + IsWriting = false; } } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - isReading = true; + IsReading = true; try { var jsonObject = serializer.Deserialize(reader); @@ -106,7 +106,7 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters } finally { - isReading = false; + IsReading = false; } }