Browse Source

Add ITelemetrySessionProvider interface and TelemetryRuntimeSessionProvider implementation; remove deprecated telemetry session type and solution info providers for improved clarity and functionality.

data-collection-code-review-2
Emre KARA 8 months ago
parent
commit
e98d9d3a99
  1. 6
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs
  2. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityStorage.cs
  3. 12
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs
  4. 13
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryActivityDataBuilder.cs
  5. 9
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryApplicationInfoEnricher.cs
  6. 7
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorage.cs
  7. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityNameConsts.cs
  8. 1
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryService.cs
  9. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionProvider.cs
  10. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionTypeProvider.cs
  11. 21
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryRuntimeSessionProvider.cs
  12. 14
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs
  13. 10
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetrySessionTypeProvider.cs

6
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs

@ -369,13 +369,15 @@ public abstract class AbpApplicationBase : IAbpApplication
protected void ConfigureTelemetry(IServiceProvider serviceProvider)
{
var abpHostEnvironment = serviceProvider.GetRequiredService<IAbpHostEnvironment>();
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
if (configuration.GetValue<bool?>("Abp:Telemetry:IsEnabled") == false)
if (!abpHostEnvironment.IsDevelopment() || configuration.GetValue<bool?>("Abp:Telemetry:IsEnabled") == false)
{
return;
}
Task.Run(async () =>
_ = Task.Run(async () =>
{
try
{

3
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityStorage.cs

@ -6,8 +6,7 @@ namespace Volo.Abp.Telemetry.Activity.Contracts;
public interface ITelemetryActivityStorage
{
Task<DateTimeOffset?> GetLastActivitySendTimeAsync();
Task<(Guid SessionId, bool IsFirstSession)> GetOrCreateSessionAsync();
Task<Guid> GetOrCreateSessionAsync();
Task MarkActivitiesAsSentAsync();
Task MarkDeviceInfoAsAddedAsync();
Task MarkSolutionInfoAsAddedAsync(Guid solutionId);

12
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs

@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Telemetry.Activity.Contracts;
public interface ITelemetrySolutionInfoProvider
{
Task FillSolutionInfoAsync(ActivityData activityData, string solutionPath);
Guid? GetSolutionId(string solutionPath);
}

13
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryActivityDataBuilder.cs

@ -6,6 +6,7 @@ using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry.Activity.Providers;
@ -20,12 +21,10 @@ public class TelemetryActivityDataBuilder : ITelemetryActivityDataBuilder, ISing
public virtual async Task BuildAsync(ActivityData activity)
{
var telemetrySessionTypeProvider = _serviceProvider.GetRequiredService<ITelemetrySessionTypeProvider>();
var telemetryActivityStorage = _serviceProvider.GetRequiredService<ITelemetryActivityStorage>();
var (sessionId, isFirstSession) = await telemetryActivityStorage.GetOrCreateSessionAsync();
activity[ActivityPropertyNames.SessionType] = telemetrySessionTypeProvider.SessionType;
activity[ActivityPropertyNames.SessionId] = sessionId;
activity[ActivityPropertyNames.IsFirstSession] = isFirstSession;
var sessionProvider = _serviceProvider.GetRequiredService<ITelemetrySessionProvider>();
sessionProvider.AddSessionInfo(activity);
var activityDataEnrichers = _serviceProvider.GetRequiredService<IEnumerable<ITelemetryActivityDataEnricher>>();
@ -34,4 +33,4 @@ public class TelemetryActivityDataBuilder : ITelemetryActivityDataBuilder, ISing
await activityDataEnricher.EnrichAsync(activity);
}
}
}
}

9
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryApplicationInfoEnricher.cs

@ -11,16 +11,13 @@ namespace Volo.Abp.Telemetry.Activity.Providers;
[ExposeServices(typeof(ITelemetryActivityDataEnricher))]
public class TelemetryApplicationInfoEnricher : ITelemetryActivityDataEnricher, ISingletonDependency
{
private readonly ITelemetrySessionTypeProvider _telemetrySessionTypeProvider;
private readonly IEnumerable<ITelemetryApplicationInfoContributor> _telemetryApplicationInfoContributors;
private readonly ITelemetryActivityStorage _telemetryActivityStorage;
public TelemetryApplicationInfoEnricher(
ITelemetrySessionTypeProvider telemetrySessionTypeProvider,
IEnumerable<ITelemetryApplicationInfoContributor> telemetryApplicationInfoContributors,
ITelemetryActivityStorage telemetryActivityStorage)
{
_telemetrySessionTypeProvider = telemetrySessionTypeProvider;
_telemetryApplicationInfoContributors = telemetryApplicationInfoContributors;
_telemetryActivityStorage = telemetryActivityStorage;
}
@ -61,8 +58,10 @@ public class TelemetryApplicationInfoEnricher : ITelemetryActivityDataEnricher,
private bool ShouldEnrichActivity(ActivityData activity)
{
return activity.ContainsKey(ActivityPropertyNames.Assembly) &&
_telemetrySessionTypeProvider.SessionType == SessionType.ApplicationRuntime;
return activity.ContainsKey(ActivityPropertyNames.Assembly)
&& activity.TryGetValue(ActivityPropertyNames.SessionType, out var sessionTypeObj)
&& Enum.TryParse<SessionType>(sessionTypeObj?.ToString(), out var parsed)
&& parsed == SessionType.ApplicationRuntime;
}
private static Guid? ExtractProjectId(ActivityData activity)

7
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorage.cs

@ -52,10 +52,8 @@ public class TelemetryActivityStorage : ITelemetryActivityStorage, ISingletonDep
return state.ActivitySendTime;
}
public async Task<(Guid SessionId, bool IsFirstSession)> GetOrCreateSessionAsync()
public async Task<Guid> GetOrCreateSessionAsync()
{
var isFirstSession = !File.Exists(TelemetryPaths.ActivityStorage);
var state = await GetStateAsync();
if (state.SessionId is null)
@ -64,7 +62,7 @@ public class TelemetryActivityStorage : ITelemetryActivityStorage, ISingletonDep
await SaveAsync();
}
return (state.SessionId.Value, isFirstSession);
return state.SessionId.Value;
}
public async Task MarkActivitiesAsSentAsync()
@ -72,7 +70,6 @@ public class TelemetryActivityStorage : ITelemetryActivityStorage, ISingletonDep
var state = await GetStateAsync();
state.ActivitySendTime = DateTimeOffset.UtcNow;
state.Activities.Clear();
state.SessionId = null;
await SaveAsync();
}

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityNameConsts.cs

@ -68,6 +68,8 @@ public static class ActivityNameConsts
public const string AbpCliCommandsInstallModule = "AbpCli.Comands.InstallModule";
public const string AbpCliCommandsInstallLocalModule = "AbpCli.Comands.InstallLocalModule";
public const string AbpCliCommandsListModules = "AbpCli.Comands.ListModules";
public const string AbpCliRun = "AbpCli.Run";
public const string AbpCliExit = "AbpCli.Exit";
public const string ApplicationRun = "Application.Run";
public const string AbpStudioBrowserOpen = "AbpStudio.Browser.Open";
public const string Error = "Error";

1
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryService.cs

@ -14,5 +14,6 @@ public interface ITelemetryService
Task AddActivityAsync(string activityName, string? details = null);
Task AddActivityAsync(string activityName, Action<ActivityData> configure);
Task AddErrorActivityAsync(Action<Dictionary<string, object>> configure);
Task AddErrorActivityAsync(string errorMessage);
Task AddErrorForActivityAsync(string failingActivity, string errorMessage);
}

8
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionProvider.cs

@ -0,0 +1,8 @@
using Volo.Abp.Telemetry.Activity;
namespace Volo.Abp.Telemetry;
public interface ITelemetrySessionProvider
{
void AddSessionInfo(ActivityData activity);
}

8
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionTypeProvider.cs

@ -1,8 +0,0 @@
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry;
public interface ITelemetrySessionTypeProvider
{
SessionType SessionType { get; }
}

21
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryRuntimeSessionProvider.cs

@ -0,0 +1,21 @@
using System;
using System.IO;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry;
[ExposeServices(typeof(ITelemetrySessionProvider))]
public class TelemetryRuntimeSessionProvider : ITelemetrySessionProvider, ISingletonDependency
{
public void AddSessionInfo(ActivityData activity)
{
activity[ActivityPropertyNames.SessionType] = SessionType.ApplicationRuntime;
activity[ActivityPropertyNames.SessionId] = Guid.NewGuid();
activity[ActivityPropertyNames.IsFirstSession] = !File.Exists(TelemetryPaths.ActivityStorage);
}
}

14
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity;
@ -111,6 +110,19 @@ public class TelemetryService : ITelemetryService, IScopedDependency
await AddActivityAsync(activityData);
}
public async Task AddErrorActivityAsync(string errorMessage)
{
var activityData = new ActivityData(ActivityNameConsts.Error)
{
AdditionalProperties = new Dictionary<string, object>
{
{ "ErrorMessage", errorMessage },
}
};
await AddActivityAsync(activityData);
}
public async Task AddErrorForActivityAsync(string failingActivity, string errorMessage)
{
var activityData = new ActivityData(ActivityNameConsts.Error)

10
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetrySessionTypeProvider.cs

@ -1,10 +0,0 @@
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry;
[ExposeServices(typeof(ITelemetrySessionTypeProvider))]
public class TelemetrySessionTypeProvider : ITelemetrySessionTypeProvider, ISingletonDependency
{
public SessionType SessionType => SessionType.ApplicationRuntime;
}
Loading…
Cancel
Save