From e98d9d3a99ae37cc4a26d12802c00a57ae37cfc4 Mon Sep 17 00:00:00 2001 From: Emre KARA Date: Sun, 1 Jun 2025 22:14:30 +0300 Subject: [PATCH] Add ITelemetrySessionProvider interface and TelemetryRuntimeSessionProvider implementation; remove deprecated telemetry session type and solution info providers for improved clarity and functionality. --- .../Volo/Abp/AbpApplicationBase.cs | 6 ++++-- .../Contracts/ITelemetryActivityStorage.cs | 3 +-- .../ITelemetrySolutionInfoProvider.cs | 12 ----------- .../Providers/TelemetryActivityDataBuilder.cs | 13 ++++++------ .../TelemetryApplicationInfoEnricher.cs | 9 ++++---- .../Storage/TelemetryActivityStorage.cs | 7 ++----- .../Telemetry/Constants/ActivityNameConsts.cs | 2 ++ .../Volo/Abp/Telemetry/ITelemetryService.cs | 1 + .../Telemetry/ITelemetrySessionProvider.cs | 8 +++++++ .../ITelemetrySessionTypeProvider.cs | 8 ------- .../TelemetryRuntimeSessionProvider.cs | 21 +++++++++++++++++++ .../Volo/Abp/Telemetry/TelemetryService.cs | 14 ++++++++++++- .../Telemetry/TelemetrySessionTypeProvider.cs | 10 --------- 13 files changed, 62 insertions(+), 52 deletions(-) delete mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionProvider.cs delete mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionTypeProvider.cs create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryRuntimeSessionProvider.cs delete mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetrySessionTypeProvider.cs diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs index bdd84ef213..37980016f9 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs +++ b/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(); var configuration = serviceProvider.GetRequiredService(); - if (configuration.GetValue("Abp:Telemetry:IsEnabled") == false) + + if (!abpHostEnvironment.IsDevelopment() || configuration.GetValue("Abp:Telemetry:IsEnabled") == false) { return; } - Task.Run(async () => + _ = Task.Run(async () => { try { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityStorage.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityStorage.cs index c65949ff3a..fb96f63d23 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityStorage.cs +++ b/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 GetLastActivitySendTimeAsync(); - Task<(Guid SessionId, bool IsFirstSession)> GetOrCreateSessionAsync(); + Task GetOrCreateSessionAsync(); Task MarkActivitiesAsSentAsync(); Task MarkDeviceInfoAsAddedAsync(); Task MarkSolutionInfoAsAddedAsync(Guid solutionId); diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs deleted file mode 100644 index b7e8171497..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs +++ /dev/null @@ -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); -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryActivityDataBuilder.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryActivityDataBuilder.cs index cea5e908a6..933fd4e0bd 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryActivityDataBuilder.cs +++ b/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(); - var telemetryActivityStorage = _serviceProvider.GetRequiredService(); - var (sessionId, isFirstSession) = await telemetryActivityStorage.GetOrCreateSessionAsync(); - activity[ActivityPropertyNames.SessionType] = telemetrySessionTypeProvider.SessionType; - activity[ActivityPropertyNames.SessionId] = sessionId; - activity[ActivityPropertyNames.IsFirstSession] = isFirstSession; + + var sessionProvider = _serviceProvider.GetRequiredService(); + + sessionProvider.AddSessionInfo(activity); var activityDataEnrichers = _serviceProvider.GetRequiredService>(); @@ -34,4 +33,4 @@ public class TelemetryActivityDataBuilder : ITelemetryActivityDataBuilder, ISing await activityDataEnricher.EnrichAsync(activity); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryApplicationInfoEnricher.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryApplicationInfoEnricher.cs index e0f43e2c95..e648b3deb6 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryApplicationInfoEnricher.cs +++ b/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 _telemetryApplicationInfoContributors; private readonly ITelemetryActivityStorage _telemetryActivityStorage; public TelemetryApplicationInfoEnricher( - ITelemetrySessionTypeProvider telemetrySessionTypeProvider, IEnumerable 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(sessionTypeObj?.ToString(), out var parsed) + && parsed == SessionType.ApplicationRuntime; } private static Guid? ExtractProjectId(ActivityData activity) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorage.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorage.cs index ddfba94924..62eac8f7a1 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorage.cs +++ b/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 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(); } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityNameConsts.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityNameConsts.cs index 8e518a1d62..fbc1913234 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityNameConsts.cs +++ b/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"; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryService.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryService.cs index 092cb02a61..1abc58ec96 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryService.cs +++ b/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 configure); Task AddErrorActivityAsync(Action> configure); + Task AddErrorActivityAsync(string errorMessage); Task AddErrorForActivityAsync(string failingActivity, string errorMessage); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionProvider.cs new file mode 100644 index 0000000000..c94ea6f14f --- /dev/null +++ b/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); +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionTypeProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionTypeProvider.cs deleted file mode 100644 index 0f98087e21..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionTypeProvider.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Volo.Abp.Telemetry.Constants.Enums; - -namespace Volo.Abp.Telemetry; - -public interface ITelemetrySessionTypeProvider -{ - SessionType SessionType { get; } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryRuntimeSessionProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryRuntimeSessionProvider.cs new file mode 100644 index 0000000000..2859c95242 --- /dev/null +++ b/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); + } + + +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs index 58c0d5c491..9503b8feaa 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs +++ b/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 + { + { "ErrorMessage", errorMessage }, + } + }; + + await AddActivityAsync(activityData); + } + public async Task AddErrorForActivityAsync(string failingActivity, string errorMessage) { var activityData = new ActivityData(ActivityNameConsts.Error) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetrySessionTypeProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetrySessionTypeProvider.cs deleted file mode 100644 index a730fcabb0..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetrySessionTypeProvider.cs +++ /dev/null @@ -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; -} \ No newline at end of file