Skip to content

Commit

Permalink
add minimal logging
Browse files Browse the repository at this point in the history
  • Loading branch information
tvatavuk committed Sep 26, 2023
1 parent 19a8755 commit ac79071
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 26 deletions.
12 changes: 10 additions & 2 deletions ToSic.Cre8Magic.Client/Menus/MagicMenuBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Oqtane.Models;
using Microsoft.Extensions.Logging;
using Oqtane.Models;
using ToSic.Cre8Magic.Client.Settings.Json;

namespace ToSic.Cre8Magic.Client.Menus;
Expand All @@ -8,6 +9,13 @@ namespace ToSic.Cre8Magic.Client.Menus;
/// </summary>
public class MagicMenuBuilder: MagicServiceWithSettingsBase
{
public ILogger Logger { get; }

public MagicMenuBuilder(ILogger<MagicMenuBuilder> logger)
{
Logger = logger;
}

private const string MenuSettingPrefix = "menu-";

public MagicMenuTree GetTree(MagicMenuSettings config, List<Page> menuPages)
Expand All @@ -32,7 +40,7 @@ public MagicMenuTree GetTree(MagicMenuSettings config, List<Page> menuPages)
// If the user didn't specify a config name in the Parameters or the config name
// isn't contained in the json file the normal parameter are given to the service
var menuSettings = settingsSvc.MenuSettings.Find(configName);
config = JsonMerger.Merge(config, menuSettings);
config = JsonMerger.Merge(config, menuSettings, Logger);

// See if we have a default configuration for CSS which should be applied
var menuDesign = Settings.DesignName(configName);
Expand Down
6 changes: 5 additions & 1 deletion ToSic.Cre8Magic.Client/Menus/MagicMenuRoot.razor.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Logging;
using Oqtane.Themes.Controls;

namespace ToSic.Cre8Magic.Client.Menus;

Expand Down Expand Up @@ -29,7 +31,9 @@ public abstract class MagicMenuRoot: MagicMenuBase

protected MagicMenuTree? Menu { get; private set; }

protected MagicMenuBuilder? MenuTreeService { get; set; } = new();
[Inject] public ILogger<Menu>? Logger { get; set; }

[Inject] public MagicMenuBuilder? MenuTreeService { get; set; } // = new ();

/// <summary>
/// Detect if the menu is configured for vertical.
Expand Down
12 changes: 10 additions & 2 deletions ToSic.Cre8Magic.Client/Services/MagicSettingsJsonService.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
using System.Text.Json;
using Microsoft.Extensions.Logging;
using System.Text.Json;
using ToSic.Cre8Magic.Client.Settings.Json;

namespace ToSic.Cre8Magic.Client.Services;

public class MagicSettingsJsonService : IHasSettingsExceptions
{
public ILogger<MagicSettingsJsonService> Logger { get; }

public MagicSettingsJsonService(ILogger<MagicSettingsJsonService> logger)
{
Logger = logger;
}

public MagicSettingsCatalog LoadJson(MagicPackageSettings themeConfig)
{
var jsonFileName = $"{themeConfig.WwwRoot}/{themeConfig.Url}/{themeConfig.SettingsJsonFile}";
try
{
var jsonString = File.ReadAllText(jsonFileName);

var result = JsonSerializer.Deserialize<MagicSettingsCatalog>(jsonString, new JsonSerializerOptions(JsonMerger.GetNewOptionsForPreMerge())
var result = JsonSerializer.Deserialize<MagicSettingsCatalog>(jsonString, new JsonSerializerOptions(JsonMerger.GetNewOptionsForPreMerge(Logger))
{
PropertyNameCaseInsensitive = true,
//ReadCommentHandling = JsonCommentHandling.Skip,
Expand Down
7 changes: 5 additions & 2 deletions ToSic.Cre8Magic.Client/Services/MagicSettingsService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Text.Json;
using Microsoft.Extensions.Logging;
using Oqtane.UI;
using ToSic.Cre8Magic.Client.Analytics;
using ToSic.Cre8Magic.Client.Settings.Json;
Expand All @@ -14,9 +15,10 @@ public class MagicSettingsService: IHasSettingsExceptions
/// <summary>
/// Constructor
/// </summary>
public MagicSettingsService(MagicSettingsJsonService jsonService)
public MagicSettingsService(MagicSettingsJsonService jsonService, ILogger<MagicSettingsService> logger)
{
Json = jsonService;
Logger = logger;
}

public MagicSettingsService InitSettings(MagicPackageSettings themeSettings)
Expand All @@ -38,6 +40,7 @@ private MagicPackageSettings PackageSettings
private MagicPackageSettings? _settings;

private MagicSettingsJsonService Json { get; }
public ILogger<MagicSettingsService> Logger { get; }

public MagicSettings CurrentSettings(PageState pageState, string? name, string bodyClasses)
{
Expand Down Expand Up @@ -78,7 +81,7 @@ private MagicSettingsCatalog MergeCatalogs()
foreach (var source in sources.Skip(1))
{
// get new json
var lowerPriority = JsonSerializer.Serialize(source, JsonMerger.GetNewOptionsForPreMerge());
var lowerPriority = JsonSerializer.Serialize(source, JsonMerger.GetNewOptionsForPreMerge(Logger));
var merged = JsonMerger.Merge(priority, lowerPriority);
priority = merged;
}
Expand Down
4 changes: 2 additions & 2 deletions ToSic.Cre8Magic.Client/Services/NamedSettingsReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ internal TPart Find(string name, string? defaultName = null)

if (_defaults.Foundation == null) return priority;

var merged = Merge(priority, _defaults.Foundation, _jsonProcessing?.Invoke(realName));
var merged = Merge(priority, _defaults.Foundation, _parent.Logger, _jsonProcessing?.Invoke(realName));
return merged!;
}

Expand All @@ -58,7 +58,7 @@ private TPart FindPartAndMergeIfPossible(TPart priority, string realName, string
var addition = FindPart(name);
return addition == null
? priority
: Merge(priority, addition, _jsonProcessing?.Invoke(realName));
: Merge(priority, addition, _parent.Logger, _jsonProcessing?.Invoke(realName));
}

private readonly NamedSettings<TPart> _cache = new();
Expand Down
3 changes: 3 additions & 0 deletions ToSic.Cre8Magic.Client/Services/Startup.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
using ToSic.Cre8Magic.Client.Analytics;

namespace ToSic.Cre8Magic.Client.Services;
Expand All @@ -24,5 +25,7 @@ public void ConfigureServices(IServiceCollection services)

// Analytics - new in 0.0.2
services.TryAddTransient<MagicAnalyticsService>();

services.TryAddTransient<MagicMenuBuilder>();
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using Microsoft.Extensions.Logging;
using ToSic.Cre8Magic.Client.Settings.Json;

namespace ToSic.Cre8Magic.Client.Settings;
Expand All @@ -18,9 +19,9 @@ namespace ToSic.Cre8Magic.Client.Settings;
/// but removed at other times to use default conversion.
/// That is only possible if it's not used in a POCO attribute, but added in the serializer options.
/// </summary>
private DesignSettingsJsonConverter() {}
private DesignSettingsJsonConverter(ILogger logger) : base(logger) {}

public static DesignSettingsJsonConverter<T> GetNew() => new();
public static DesignSettingsJsonConverter<T> GetNew(ILogger logger) => new(logger);

public override void Write(Utf8JsonWriter writer, T? pair, JsonSerializerOptions options) =>
// Copy options to remove this serializer, then serialize with default method
Expand All @@ -29,6 +30,7 @@ public override void Write(Utf8JsonWriter writer, T? pair, JsonSerializerOptions

public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
Logger.LogTrace($"Reading {typeof(T)} / {typeToConvert}.");
var jsonNode = JsonNode.Parse(ref reader);

const string errArray = "Error unexpected data - array instead of string or object";
Expand Down
19 changes: 17 additions & 2 deletions ToSic.Cre8Magic.Client/Settings/Json/JsonConverterBase.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
using Microsoft.Extensions.Logging;

namespace ToSic.Cre8Magic.Client.Settings.Json;

public abstract class JsonConverterBase<T>: JsonConverter<T>
{
public ILogger Logger { get; }

protected JsonConverterBase(ILogger logger) => Logger = logger;


protected JsonSerializerOptions GetOptionsWithoutThisConverter(JsonSerializerOptions options)
{
Expand All @@ -15,6 +20,16 @@ protected JsonSerializerOptions GetOptionsWithoutThisConverter(JsonSerializerOpt
}

protected T? ConvertObject(JsonObject jsonObject, JsonSerializerOptions options)
=> jsonObject.Deserialize<T>(GetOptionsWithoutThisConverter(options));

{
try
{
Logger.LogTrace("Deserializing {Type} from {Json}", typeof(T), jsonObject);
return jsonObject.Deserialize<T>(GetOptionsWithoutThisConverter(options));
}
catch
{
Logger.LogError("Error while deserializing {Type} from {Json}", typeof(T), jsonObject);
throw;
}
}
}
20 changes: 11 additions & 9 deletions ToSic.Cre8Magic.Client/Settings/Json/JsonMerger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using Microsoft.Extensions.Logging;

namespace ToSic.Cre8Magic.Client.Settings.Json;

Expand All @@ -10,17 +11,17 @@ namespace ToSic.Cre8Magic.Client.Settings.Json;
/// </summary>
internal class JsonMerger
{
public static JsonSerializerOptions GetNewOptionsForPreMerge() => new()
public static JsonSerializerOptions GetNewOptionsForPreMerge(ILogger logger) => new()
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
Converters =
{
PairOnOffJsonConverter.GetNew(),
DesignSettingsJsonConverter<DesignSetting>.GetNew(),
PairOnOffJsonConverter.GetNew(logger),
DesignSettingsJsonConverter<DesignSetting>.GetNew(logger),
// DesignSettingsJsonConverter<DesignSettingActive>.GetNew(),
DesignSettingsJsonConverter<MagicMenuDesign>.GetNew(),
DesignSettingsJsonConverter<MagicMenuDesign>.GetNew(logger),
// DesignSettingsJsonConverter<MagicContainerDesignSettingsItem>.GetNew(),
ThemePartJsonConverter.GetNew(),
ThemePartJsonConverter.GetNew(logger),
},
ReadCommentHandling = JsonCommentHandling.Skip,
AllowTrailingCommas = true,
Expand All @@ -33,13 +34,14 @@ public static TType Clone<TType>(TType original)
return result!;
}

public static TType Merge<TType>(TType priority, TType fallback, Func<string, string>? optionalProcessing = null)
public static TType Merge<TType>(TType priority, TType fallback, ILogger logger,
Func<string, string>? optionalProcessing = null)
{
var priorityJson = JsonSerializer.Serialize(priority, GetNewOptionsForPreMerge());
var lessJson = fallback == null ? null : JsonSerializer.Serialize(fallback, GetNewOptionsForPreMerge());
var priorityJson = JsonSerializer.Serialize(priority, GetNewOptionsForPreMerge(logger));
var lessJson = fallback == null ? null : JsonSerializer.Serialize(fallback, GetNewOptionsForPreMerge(logger));
var merged = lessJson == null ? priorityJson : Merge(priorityJson, lessJson);
var processed = optionalProcessing?.Invoke(merged) ?? merged;
var result = JsonSerializer.Deserialize<TType>(processed, GetNewOptionsForPreMerge());
var result = JsonSerializer.Deserialize<TType>(processed, GetNewOptionsForPreMerge(logger));
return result!;
}

Expand Down
6 changes: 4 additions & 2 deletions ToSic.Cre8Magic.Client/Settings/PairOnOffJsonConverter.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using Microsoft.Extensions.Logging;
using ToSic.Cre8Magic.Client.Settings.Json;

namespace ToSic.Cre8Magic.Client.Settings;
Expand All @@ -18,9 +19,10 @@ public class PairOnOffJsonConverter : JsonConverterBase<PairOnOff>
/// but removed at other times to use default conversion.
/// That is only possible if it's not used in a POCO attribute, but added in the serializer options.
/// </summary>
private PairOnOffJsonConverter() {}
private PairOnOffJsonConverter(ILogger logger) : base(logger)
{}

public static PairOnOffJsonConverter GetNew() => new();
public static PairOnOffJsonConverter GetNew(ILogger logger) => new(logger);

public override void Write(Utf8JsonWriter writer, PairOnOff? pair, JsonSerializerOptions options)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Text.Json;
using System.Text.Json.Nodes;
using Microsoft.Extensions.Logging;
using ToSic.Cre8Magic.Client.Settings.Json;

namespace ToSic.Cre8Magic.Client.Themes.Settings;
Expand All @@ -18,9 +19,9 @@ public class ThemePartJsonConverter : JsonConverterBase<MagicThemePartSettings>
/// but removed at other times to use default conversion.
/// That is only possible if it's not used in a POCO attribute, but added in the serializer options.
/// </summary>
private ThemePartJsonConverter() {}
private ThemePartJsonConverter(ILogger logger) : base(logger) {}

public static ThemePartJsonConverter GetNew() => new();
public static ThemePartJsonConverter GetNew(ILogger logger) => new(logger);

public override void Write(Utf8JsonWriter writer, MagicThemePartSettings? part, JsonSerializerOptions options)
{
Expand Down

0 comments on commit ac79071

Please sign in to comment.