#1702 switch analytics to event based
6e9da664
Michael Schmitz
committed
succeeded
13 changed files
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