13 changed files
WPE.App.Services | ||
Analytics | ||
Logging | ||
LoggingAnalyticsService.cs | ||
LoggingLifecycleService.cs | ||
NoOp | ||
NoOpAnalyticsService.cs | ||
NoOpLifecycleService.cs | ||
AnalyticsService.cs + | ||
IAnalyticsService.cs | ||
ILifecycleService.cs | ||
IMetadataService.cs | ||
LifecycleService.cs + | ||
NoOpMetadataService.cs rename, edit | ||
Models | ||
AnalyticsEvent.cs + | ||
ServiceCollectionExtensions.cs | ||
WPE.App.Services.csproj | ||
LoggingAnalyticsService.cs
/WPE.App.Services/Analytics/Logging/LoggingAnalyticsService.cs-68/WPE.App.Services/Analytics/Logging/LoggingAnalyticsService.cs
Add comment 1 Minus using Microsoft.AspNetCore.Components;
Add comment 2 Minus using Microsoft.Extensions.Logging;
Add comment 3 Minus
Add comment 4 Minus namespace Infsoft.WPE.App.Services.Analytics.Logging
Add comment 5 Minus {
Add comment 6 Minus /// <summary>
Add comment 7 Minus /// Implements <see cref="IAnalyticsService"/> as logging only
Add comment 8 Minus /// </summary>
Add comment 9 Minus internal class LoggingAnalyticsService(ILogger<LoggingAnalyticsService> Logger, IPageTitleCache PageTitleCache, NavigationManager NavigationManager) : IAnalyticsService
Add comment 10 Minus {
Add comment 11 Minus /// <inheritdoc/>
Add comment 12 Minus public Task OnClick(string name, string text, InteractionType interactionType, string location) => Log($"Clicked {interactionType} with name '{name}' and text '{text}' at location {location}");
Add comment 13 Minus
Add comment 14 Minus /// <inheritdoc/>
Add comment 15 Minus public Task OnSearch(int numberOfResults, string searchLocation, string? term = null, Dictionary<string, List<string>>? filters = null, DateTime? startDate = null, DateTime? endDate = null)
Add comment 16 Minus {
Add comment 17 Minus var msg = "Performed search";
Add comment 18 Minus var restrictions = new List<string>();
Add comment 19 Minus if (term is not null)
Add comment 20 Minus restrictions.Add($"term {term}");
Add comment 21 Minus if (filters is not null)
Add comment 22 Minus restrictions.Add($"filters: {string.Join(';', filters.Select(kv => $"{kv.Key}={string.Join(',', kv.Value)}"))}");
Add comment 23 Minus if (startDate is not null)
Add comment 24 Minus restrictions.Add($"startDate: {startDate.Value:o}");
Add comment 25 Minus if (endDate is not null)
Add comment 26 Minus restrictions.Add($"endDate: {endDate.Value:o}");
Add comment 27 Minus if (restrictions.Count != 0)
Add comment 28 Minus msg += $" with {string.Join(" and ", restrictions)}";
Add comment 29 Minus msg += $" at location {searchLocation} returning {numberOfResults} results";
Add comment 30 Minus
Add comment 31 Minus if (startDate is null && endDate is not null)
Add comment 32 Minus Logger.LogWarning("End date was logged without start date, this is not supported");
Add comment 33 Minus return Log(msg);
Add comment 34 Minus }
Add comment 35 Minus
Add comment 36 Minus /// <inheritdoc/>
Add comment 37 Minus public async Task Init() {
Add comment 38 Minus await Log("Initialized service");
Add comment 39 Minus
Add comment 40 Minus await OnPageView(NavigationManager.ToBaseRelativePath(NavigationManager.Uri).Split('?')[0]);
Add comment 41 Minus }
Add comment 42 Minus
Add comment 43 Minus /// <inheritdoc/>
Add comment 44 Minus public Task OnConsentUpdate(Dictionary<string, bool> givenConsents) => Log($"Updated consent: {string.Join(',', givenConsents.Select(consent => $"{consent.Key}: {consent.Value}"))}");
Add comment 45 Minus
Add comment 46 Minus /// <inheritdoc/>
Add comment 47 Minus public Task OnLogin() => Log("Perfomed login");
Add comment 48 Minus
Add comment 49 Minus /// <inheritdoc/>
Add comment 50 Minus public Task OnPageView(string relativeUrl) {
Add comment 51 Minus relativeUrl = $"/{relativeUrl}";
Add comment 52 Minus return Log($"Opened page with name '{relativeUrl}' and title '{(PageTitleCache.TryGetPageTitle(relativeUrl, out var title) ? title : "Unknown")}'");
Add comment 53 Minus }
Add comment 54 Minus
Add comment 55 Minus /// <inheritdoc/>
Add comment 56 Minus public Task OnSilentLogin() => Log("Perfomed silent login");
Add comment 57 Minus
Add comment 58 Minus
Add comment 59 Minus private Task Log(string message)
Add comment 60 Minus {
Add comment 61 Minus using var scope = Logger.BeginScope("Analytics");
Add comment 62 Minus Logger.LogInformation("{Message}", message);
Add comment 63 Minus return Task.CompletedTask;
Add comment 64 Minus }
Add comment 65 Minus }
Add comment 66 Minus
Add comment 67 Minus }
Add comment 68 Minus
LoggingLifecycleService.cs
/WPE.App.Services/Analytics/Logging/LoggingLifecycleService.cs-30/WPE.App.Services/Analytics/Logging/LoggingLifecycleService.cs
Add comment 1 Minus using Microsoft.Extensions.Logging;
Add comment 2 Minus
Add comment 3 Minus namespace Infsoft.WPE.App.Services.Analytics.Logging
Add comment 4 Minus {
Add comment 5 Minus /// <summary>
Add comment 6 Minus /// Implements <see cref="ILifecycleService"/> as logging only
Add comment 7 Minus /// </summary>
Add comment 8 Minus internal class LoggingLifecycleService(ILogger<LoggingLifecycleService> Logger) : ILifecycleService
Add comment 9 Minus {
Add comment 10 Minus /// <inheritdoc/>
Add comment 11 Minus public Task Init() => Log("Initialized application");
Add comment 12 Minus
Add comment 13 Minus /// <inheritdoc/>
Add comment 14 Minus public Task Pause() => Log("Paused application");
Add comment 15 Minus
Add comment 16 Minus /// <inheritdoc/>
Add comment 17 Minus public Task Start() => Log("Started application");
Add comment 18 Minus
Add comment 19 Minus /// <inheritdoc/>
Add comment 20 Minus public Task Stop() => Log("Stopped application");
Add comment 21 Minus
Add comment 22 Minus private Task Log(string message)
Add comment 23 Minus {
Add comment 24 Minus using var scope = Logger.BeginScope("Lifecycle");
Add comment 25 Minus Logger.LogInformation("{LifecycleMessage}", message);
Add comment 26 Minus return Task.CompletedTask;
Add comment 27 Minus }
Add comment 28 Minus }
Add comment 29 Minus }
Add comment 30 Minus
NoOpAnalyticsService.cs
/WPE.App.Services/Analytics/NoOp/NoOpAnalyticsService.cs-31/WPE.App.Services/Analytics/NoOp/NoOpAnalyticsService.cs
Add comment 1 Minus namespace Infsoft.WPE.App.Services.Analytics.NoOp
Add comment 2 Minus {
Add comment 3 Minus /// <summary>
Add comment 4 Minus /// Implements <see cref="IAnalyticsService"/> as NoOp
Add comment 5 Minus /// </summary>
Add comment 6 Minus internal class NoOpAnalyticsService : IAnalyticsService
Add comment 7 Minus {
Add comment 8 Minus /// <inheritdoc/>
Add comment 9 Minus public Task OnClick(string name, string text, InteractionType interactionType, string location) => Task.CompletedTask;
Add comment 10 Minus
Add comment 11 Minus /// <inheritdoc/>
Add comment 12 Minus public Task OnSearch(int numberOfResults, string searchLocation, string? term = null, Dictionary<string, List<string>>? filters = null, DateTime? startDate = null, DateTime? endDate = null) => Task.CompletedTask;
Add comment 13 Minus
Add comment 14 Minus /// <inheritdoc/>
Add comment 15 Minus public Task Init() => Task.CompletedTask;
Add comment 16 Minus
Add comment 17 Minus /// <inheritdoc/>
Add comment 18 Minus public Task OnConsentUpdate(Dictionary<string, bool> givenConsents) => Task.CompletedTask;
Add comment 19 Minus
Add comment 20 Minus /// <inheritdoc/>
Add comment 21 Minus public Task OnLogin() => Task.CompletedTask;
Add comment 22 Minus
Add comment 23 Minus /// <inheritdoc/>
Add comment 24 Minus public Task OnPageView(string relativeUrl) => Task.CompletedTask;
Add comment 25 Minus
Add comment 26 Minus /// <inheritdoc/>
Add comment 27 Minus public Task OnSilentLogin() => Task.CompletedTask;
Add comment 28 Minus }
Add comment 29 Minus
Add comment 30 Minus }
Add comment 31 Minus
NoOpLifecycleService.cs
/WPE.App.Services/Analytics/NoOp/NoOpLifecycleService.cs/WPE.App.Services/Analytics/NoOp/NoOpLifecycleService.cs
AnalyticsService.cs
/WPE.App.Services/Analytics/AnalyticsService.cs/WPE.App.Services/Analytics/AnalyticsService.cs
IAnalyticsService.cs
/WPE.App.Services/Analytics/IAnalyticsService.cs/WPE.App.Services/Analytics/IAnalyticsService.cs
ILifecycleService.cs
/WPE.App.Services/Analytics/ILifecycleService.cs/WPE.App.Services/Analytics/ILifecycleService.cs
IMetadataService.cs
/WPE.App.Services/Analytics/IMetadataService.cs/WPE.App.Services/Analytics/IMetadataService.cs
LifecycleService.cs
/WPE.App.Services/Analytics/LifecycleService.cs/WPE.App.Services/Analytics/LifecycleService.cs
NoOpMetadataService.cs
/WPE.App.Services/Analytics/NoOpMetadataService.cs/WPE.App.Services/Analytics/NoOpMetadataService.cs
Renamed from
/WPE.App.Services/Analytics/NoOp/NoOpMetadataService.cs
AnalyticsEvent.cs
/WPE.App.Services/Models/AnalyticsEvent.cs/WPE.App.Services/Models/AnalyticsEvent.cs
ServiceCollectionExtensions.cs
/WPE.App.Services/ServiceCollectionExtensions.cs/WPE.App.Services/ServiceCollectionExtensions.cs
WPE.App.Services.csproj
/WPE.App.Services/WPE.App.Services.csproj/WPE.App.Services/WPE.App.Services.csproj