From 5828eeb840e373cf4d97e8f51508b40b4444037f Mon Sep 17 00:00:00 2001 From: Emre KARA Date: Wed, 7 May 2025 14:08:36 +0300 Subject: [PATCH] Refactor Telemetry system for modularity and enum sharing --- .../Permissions/PermissionInfoContributor.cs | 21 ++++++++ ...pApplicationWithExternalServiceProvider.cs | 49 +++++++++++++++++++ .../Volo/Abp/Modularity/AbpModule.cs | 31 ++---------- .../Activity/ActivityDataProvider.cs | 44 ++++++++--------- .../Activity/ActivityPropertyNameConstants.cs | 3 +- .../Abp/Telemetry/Activity/ActivityStorage.cs | 26 +++++----- .../Activity/IActivityDataProvider.cs | 7 ++- .../Telemetry/Activity/IActivityStorage.cs | 22 ++++----- .../Abp/Telemetry/ApplicationInfoProvider.cs | 24 --------- .../Contracts/SoftwareInfo.cs | 2 +- .../Detectors/AbpStudioDetector.cs | 2 +- .../Detectors/ChromeDetector.cs | 2 +- .../Detectors/DotnetSdkDetector.cs | 2 +- .../Detectors/FireFoxDetector.cs | 2 +- .../Detectors/MsEdgeDetector.cs | 2 +- .../Detectors/NodeJsDetector.cs | 2 +- .../Detectors/OperatingSystemDetector.cs | 2 +- .../Detectors/RiderDetector.cs | 2 +- .../Detectors/VisualStudioCodeDetector.cs | 2 +- .../DeviceInfoProvider.cs | 2 +- .../IDeviceInfoProvider.cs | 2 +- .../Helpers/AbpPackageMetadataHelper.cs | 5 -- .../Volo/Abp/Telemetry/IApplicationScanner.cs | 6 --- .../ITelemetryApplicationInfoContributor.cs | 10 ++++ .../Volo/Abp/Telemetry/ITelemetryService.cs | 4 +- .../Abp/Telemetry/ModuleInfoContributor.cs | 27 ++++++++++ .../Enums/AbpTool.cs | 2 +- .../Enums/ApplicationType.cs | 2 +- .../Enums/DatabaseProvider.cs | 2 +- .../Enums/Dbms.cs | 2 +- .../Enums/DeviceType.cs | 2 +- .../Enums/LicenseType.cs | 2 +- .../Enums/MobileApp.cs | 2 +- .../Enums/OperationSystem.cs | 2 +- .../Enums/SoftwareType.cs | 2 +- .../Enums/SolutionTemplate.cs | 2 +- .../Enums/UiFramework.cs | 2 +- .../Enums/UiTheme.cs | 2 +- .../Enums/UiThemeStyle.cs | 2 +- .../Volo/Abp/Telemetry/TelemetryDataSender.cs | 12 +++-- .../Volo/Abp/Telemetry/TelemetryService.cs | 8 +-- .../Domain/Telemetry/DomainInfoContributor.cs | 26 ++++++++++ 42 files changed, 222 insertions(+), 153 deletions(-) create mode 100644 framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionInfoContributor.cs delete mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ApplicationInfoProvider.cs delete mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/IApplicationScanner.cs create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryApplicationInfoContributor.cs create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ModuleInfoContributor.cs rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/AbpTool.cs (61%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/ApplicationType.cs (82%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/DatabaseProvider.cs (60%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/Dbms.cs (71%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/DeviceType.cs (54%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/LicenseType.cs (58%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/MobileApp.cs (60%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/OperationSystem.cs (60%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/SoftwareType.cs (69%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/SolutionTemplate.cs (60%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/UiFramework.cs (74%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/UiTheme.cs (63%) rename framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/{EnvironmentInspection => Shared}/Enums/UiThemeStyle.cs (62%) create mode 100644 framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Telemetry/DomainInfoContributor.cs diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionInfoContributor.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionInfoContributor.cs new file mode 100644 index 0000000000..209569349a --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionInfoContributor.cs @@ -0,0 +1,21 @@ +using System.Threading.Tasks; +using Volo.Abp.Telemetry; +using Volo.Abp.Telemetry.Activity; + +namespace Volo.Abp.Authorization.Permissions; + +public class PermissionInfoContributor : ITelemetryApplicationInfoContributor +{ + private readonly IPermissionDefinitionManager _permissionDefinitionManager; + + public PermissionInfoContributor(IPermissionDefinitionManager permissionDefinitionManager) + { + _permissionDefinitionManager = permissionDefinitionManager; + } + + public async Task ContributeAsync(ActivityData activityData) + { + var permissions = await _permissionDefinitionManager.GetPermissionsAsync(); + activityData.Add(ActivityPropertyNameConstants.PermissionCount, permissions.Count); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs index d80e46c5d7..e25373d6e2 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs @@ -1,7 +1,13 @@ using System; +using System.Reflection; using System.Threading.Tasks; using JetBrains.Annotations; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Volo.Abp.Telemetry; +using Volo.Abp.Telemetry.Activity; +using Volo.Abp.Telemetry.Helpers; namespace Volo.Abp; @@ -44,6 +50,8 @@ internal class AbpApplicationWithExternalServiceProvider : AbpApplicationBase, I SetServiceProvider(serviceProvider); await InitializeModulesAsync(); + + ConfigureTelemetry(serviceProvider); } public void Initialize([NotNull] IServiceProvider serviceProvider) @@ -53,8 +61,49 @@ internal class AbpApplicationWithExternalServiceProvider : AbpApplicationBase, I SetServiceProvider(serviceProvider); InitializeModules(); + + ConfigureTelemetry(serviceProvider); + } + private void ConfigureTelemetry(IServiceProvider serviceProvider) + { + Task.Run(async () => + { + try + { + using var scope = serviceProvider.CreateScope(); + var configuration = scope.ServiceProvider.GetRequiredService(); + if (configuration.GetValue("Abp:Telemetry:Disable")) + { + return; + } + + var assembly = Assembly.GetEntryAssembly()!; + + var packageMetadata = AbpPackageMetadataHelper.GetMetaData(assembly); + if (packageMetadata != null) + { + var telemetryService = scope.ServiceProvider.GetRequiredService(); + + await using var _ = telemetryService.TrackActivity(ActivityNameConsts.ApplicationRun, activity => + { + activity.Add(ActivityPropertyNameConstants.Assembly, assembly.Location); + activity.Add(ActivityPropertyNameConstants.ProjectId, packageMetadata.ProjectId!); + activity.Add(ActivityPropertyNameConstants.ProjectType, packageMetadata.Role!); + activity.Add(ActivityPropertyNameConstants.SolutionPath, + packageMetadata.AbpSlnPath ?? string.Empty); + }); + + } + } + catch (Exception e) + { + var logger = serviceProvider.GetRequiredService>(); + logger.LogError(e, "An error occurred while configuring telemetry."); + } + }); + } public override void Dispose() { base.Dispose(); diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs index 5275347c16..f3d0e2cab2 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs @@ -89,38 +89,13 @@ public abstract class AbpModule : } - public virtual async Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context) + public virtual Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context) { OnPostApplicationInitialization(context); - await ConfigureTelemetry(context); + return Task.CompletedTask; } - private async Task ConfigureTelemetry(ApplicationInitializationContext context) - { - var configuration = context.ServiceProvider.GetRequiredService(); - if (configuration.GetValue("Abp:Telemetry:Disable")) - { - return; - } - - var assembly = Assembly.GetEntryAssembly()!; - - var packageMetadata = AbpPackageMetadataHelper.GetMetaData(assembly); - - if (packageMetadata != null) - { - var telemetryService = context.ServiceProvider.GetRequiredService(); - - await using var _ = telemetryService.TrackActivity(ActivityNameConsts.ApplicationRun, activity => - { - activity.Add(ActivityPropertyNameConstants.Assembly, assembly.Location); - activity.Add(ActivityPropertyNameConstants.ProjectId, packageMetadata.ProjectId!); - activity.Add(ActivityPropertyNameConstants.ProjectType, packageMetadata.Role!); - activity.Add(ActivityPropertyNameConstants.SolutionPath, packageMetadata.AbpSlnPath ?? string.Empty); - }); - - } - } + public virtual void OnPostApplicationInitialization(ApplicationInitializationContext context) { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityDataProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityDataProvider.cs index 29c80e264c..494741b700 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityDataProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityDataProvider.cs @@ -2,16 +2,14 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Reflection; using System.Text.Json; -using System.Threading; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.Telemetry.EnvironmentInspection; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; -using DatabaseProvider = Volo.Abp.Telemetry.EnvironmentInspection.Enums.DatabaseProvider; -using MobileApp = Volo.Abp.Telemetry.EnvironmentInspection.Enums.MobileApp; +using Volo.Abp.Telemetry.Shared.Enums; +using DatabaseProvider = Volo.Abp.Telemetry.Shared.Enums.DatabaseProvider; +using MobileApp = Volo.Abp.Telemetry.Shared.Enums.MobileApp; namespace Volo.Abp.Telemetry.Activity; @@ -19,19 +17,20 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency { private readonly IDeviceInfoProvider _deviceInfoProvider; private readonly ISoftwareInfoProvider _softwareInfoProvider; - private readonly ApplicationInfoProvider _applicationInfoProvider; + private readonly IEnumerable _applicationInfoContributors; + private readonly ModuleInfoContributor _moduleInfoContributor; public ActivityDataProvider(IDeviceInfoProvider deviceInfoProvider, - ISoftwareInfoProvider softwareInfoProvider, ApplicationInfoProvider applicationInfoProvider) + ISoftwareInfoProvider softwareInfoProvider, IEnumerable applicationInfoContributors, ModuleInfoContributor moduleInfoContributor) { _deviceInfoProvider = deviceInfoProvider; _softwareInfoProvider = softwareInfoProvider; - _applicationInfoProvider = applicationInfoProvider; + _applicationInfoContributors = applicationInfoContributors; + _moduleInfoContributor = moduleInfoContributor; } - public async Task AddDeviceInformationAsync(ActivityData activityData, - CancellationToken cancellationToken = default) + public async Task AddDeviceInformationAsync(ActivityData activityData) { activityData.Add(ActivityPropertyNameConstants.DeviceId, await _deviceInfoProvider.GetDeviceIdAsync()); activityData.Add(ActivityPropertyNameConstants.DeviceType, _deviceInfoProvider.GetDeviceType()); @@ -39,32 +38,27 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency activityData.Add(ActivityPropertyNameConstants.OperatingSystem, _deviceInfoProvider.GetOperatingSystem()); activityData.Add(ActivityPropertyNameConstants.CountryIsoCode, _deviceInfoProvider.GetCountry()); - var softwareList = await _softwareInfoProvider.GetSoftwareInfoAsync(cancellationToken); + var softwareList = await _softwareInfoProvider.GetSoftwareInfoAsync(); activityData.Add(ActivityPropertyNameConstants.InstalledSoftwares, softwareList); } - public void AddApplicationInformation(ActivityData activityData, Assembly assembly) + public async Task AddApplicationInformation(ActivityData activityData) { - var info = _applicationInfoProvider.ExtractApplicationInfo(assembly); - - activityData.Add(ActivityPropertyNameConstants.ControllerCount, info.ControllerCount); - activityData.Add(ActivityPropertyNameConstants.EntityCount, info.EntityCount); - activityData.Add(ActivityPropertyNameConstants.AbpModuleCount, info.AbpModuleCount); - activityData.Add(ActivityPropertyNameConstants.PermissionCount, info.PermissionCount); - activityData.Add(ActivityPropertyNameConstants.AppServiceCount, info.AppServiceCount); + foreach (var applicationInfoContributor in _applicationInfoContributors) + { - activityData.Remove(ActivityPropertyNameConstants.Assembly); + await applicationInfoContributor.ContributeAsync(activityData); + } } - public async Task AddSolutionInformationAsync(ActivityData activityData, - CancellationToken cancellationToken = default) + public Task AddSolutionInformationAsync(ActivityData activityData) { if (activityData.TryGetValue(ActivityPropertyNameConstants.SolutionPath, out var value)) { var solutionPath = value as string; if (string.IsNullOrEmpty(solutionPath) || !File.Exists(solutionPath)) { - return; + return Task.CompletedTask; } var solutionJson = File.ReadAllText(solutionPath); @@ -75,7 +69,8 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency if (!root.TryGetProperty("id", out var idElement) || !Guid.TryParse(idElement.GetString(), out var solutionId)) { - return; + return Task.CompletedTask; + } activityData.Add(ActivityPropertyNameConstants.SolutionId, solutionId); @@ -170,6 +165,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency activityData.Add(ActivityPropertyNameConstants.InstalledModules, modules); } } + return Task.CompletedTask; } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityPropertyNameConstants.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityPropertyNameConstants.cs index 56aef26a46..172e773c9c 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityPropertyNameConstants.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityPropertyNameConstants.cs @@ -12,7 +12,8 @@ public static class ActivityPropertyNameConstants public const string InstalledSoftwares = nameof(InstalledSoftwares); public const string ControllerCount = nameof(ControllerCount); public const string EntityCount = nameof(EntityCount); - public const string AbpModuleCount = nameof(AbpModuleCount); + public const string ProjectCount = nameof(ProjectCount); + public const string ModuleCount = nameof(ModuleCount); public const string PermissionCount = nameof(PermissionCount); public const string AppServiceCount = nameof(AppServiceCount); public const string ProjectType = nameof(ProjectType); diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityStorage.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityStorage.cs index b13a1abb3c..df22ee8c9c 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityStorage.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityStorage.cs @@ -18,14 +18,14 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency - public async Task BufferActivityAsync(ActivityData activityData, CancellationToken cancellationToken = default) + public async Task BufferActivityAsync(ActivityData activityData) { var state = await GetStateAsync(); state.Activities.Add(activityData); await SaveAsync(); } - public async Task> GetBufferedActivitiesAsync(CancellationToken cancellationToken = default) + public async Task> GetBufferedActivitiesAsync() { var state = await GetStateAsync(); return state.Activities; @@ -45,16 +45,14 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency } } - public async Task MarkApplicationInfoAsSentAsync(Guid applicationId, - CancellationToken cancellationToken = default) + public async Task MarkApplicationInfoAsSentAsync(Guid applicationId) { var state = await GetStateAsync(); state.ApplicationInfos[applicationId] = DateTimeOffset.UtcNow; await SaveAsync(); } - public async Task GetApplicationInfoLastActivitySendTimeAsync(Guid applicationId, - CancellationToken cancellationToken = default) + public async Task GetApplicationInfoLastActivitySendTimeAsync(Guid applicationId) { var state = await GetStateAsync(); if (state.ApplicationInfos.TryGetValue(applicationId, out var lastActivitySendTime)) @@ -65,7 +63,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency return null; } - public async Task GetLastActivitySendTimeAsync(CancellationToken cancellationToken = default) + public async Task GetLastActivitySendTimeAsync() { var state = await GetStateAsync(); return state.ActivitySendTime; @@ -77,8 +75,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency return state.SessionId ?? null; } - public async Task<(bool isFirstSession, Guid sessionId)> GetOrCreateSessionInfoAsync( - CancellationToken cancellationToken = default) + public async Task<(bool isFirstSession, Guid sessionId)> GetOrCreateSessionInfoAsync() { var state = await GetStateAsync(); state.IsFirstSession ??= true; @@ -96,7 +93,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency await SaveAsync(); } - public async Task MarkActivitiesAsSentAsync(CancellationToken cancellationToken = default) + public async Task MarkActivitiesAsSentAsync() { var state = await GetStateAsync(); state.ActivitySendTime = DateTimeOffset.UtcNow; @@ -106,8 +103,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency await SaveAsync(); } - public async Task GetLastSolutionInfoSendTimeAsync(Guid id, - CancellationToken cancellationToken = default) + public async Task GetLastSolutionInfoSendTimeAsync(Guid id) { var state = await GetStateAsync(); @@ -119,20 +115,20 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency return null; } - public async Task GetLastDeviceInfoSendTimeAsync(CancellationToken cancellationToken = default) + public async Task GetLastDeviceInfoSendTimeAsync() { var state = await GetStateAsync(); return state.LastDeviceInfoSendTime; } - public async Task MarkSolutionInfoAsSentAsync(Guid id, CancellationToken cancellationToken = default) + public async Task MarkSolutionInfoAsSentAsync(Guid id) { var state = await GetStateAsync(); state.Solutions[id] = DateTimeOffset.UtcNow; await SaveAsync(); } - public async Task MarkDeviceInfoAsSentAsync(CancellationToken cancellationToken = default) + public async Task MarkDeviceInfoAsSentAsync() { var state = await GetStateAsync(); state.LastDeviceInfoSendTime = DateTimeOffset.UtcNow; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityDataProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityDataProvider.cs index de3a671365..0d74a2a682 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityDataProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityDataProvider.cs @@ -6,8 +6,7 @@ namespace Volo.Abp.Telemetry.Activity; public interface IActivityDataProvider { - Task AddDeviceInformationAsync(ActivityData activityData, CancellationToken cancellationToken = default); - void AddApplicationInformation(ActivityData activityData, Assembly assembly); - - Task AddSolutionInformationAsync(ActivityData activityData, CancellationToken cancellationToken = default); + Task AddDeviceInformationAsync(ActivityData activityData); + Task AddApplicationInformation(ActivityData activityData); + Task AddSolutionInformationAsync(ActivityData activityData); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityStorage.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityStorage.cs index 7c729c2b16..e4e82c5e1a 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityStorage.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/IActivityStorage.cs @@ -7,16 +7,16 @@ namespace Volo.Abp.Telemetry.Activity; public interface IActivityStorage { - Task GetLastActivitySendTimeAsync(CancellationToken cancellationToken = default); - Task<(bool isFirstSession, Guid sessionId)> GetOrCreateSessionInfoAsync(CancellationToken cancellationToken = default); - Task MarkActivitiesAsSentAsync(CancellationToken cancellationToken = default); - Task GetLastSolutionInfoSendTimeAsync(Guid solutionId, CancellationToken cancellationToken = default); - Task GetLastDeviceInfoSendTimeAsync(CancellationToken cancellationToken = default); - Task MarkDeviceInfoAsSentAsync(CancellationToken cancellationToken = default); - Task MarkSolutionInfoAsSentAsync(Guid solutionId , CancellationToken cancellationToken = default); - Task BufferActivityAsync(ActivityData activityData, CancellationToken cancellationToken = default); - Task> GetBufferedActivitiesAsync(CancellationToken cancellationToken = default); - Task MarkApplicationInfoAsSentAsync(Guid applicationId, CancellationToken cancellationToken = default); - Task GetApplicationInfoLastActivitySendTimeAsync(Guid applicationId, CancellationToken cancellationToken = default); + Task GetLastActivitySendTimeAsync(); + Task<(bool isFirstSession, Guid sessionId)> GetOrCreateSessionInfoAsync(); + Task MarkActivitiesAsSentAsync(); + Task GetLastSolutionInfoSendTimeAsync(Guid solutionId); + Task GetLastDeviceInfoSendTimeAsync(); + Task MarkDeviceInfoAsSentAsync(); + Task MarkSolutionInfoAsSentAsync(Guid solutionId); + Task BufferActivityAsync(ActivityData activityData); + Task> GetBufferedActivitiesAsync(); + Task MarkApplicationInfoAsSentAsync(Guid applicationId); + Task GetApplicationInfoLastActivitySendTimeAsync(Guid applicationId); } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ApplicationInfoProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ApplicationInfoProvider.cs deleted file mode 100644 index 76b84e3f82..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ApplicationInfoProvider.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Linq; -using System.Reflection; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Modularity; - -namespace Volo.Abp.Telemetry; - -public class ApplicationInfoProvider : ISingletonDependency -{ - public ApplicationInfo ExtractApplicationInfo(Assembly assembly) - { - var types = assembly.GetTypes(); - - return new ApplicationInfo - { - // EntityCount = types.Count(t => typeof(IEntity).IsAssignableFrom(t) && !t.IsAbstract), - // AppServiceCount = types.Count(t => typeof(IApplicationService).IsAssignableFrom(t) && !t.IsAbstract), - // ControllerCount = types.Count(t => typeof(AbpController).IsAssignableFrom(t) && !t.IsAbstract), - // PermissionCount = types.Count(t => typeof(PermissionDefinitionProvider).IsAssignableFrom(t) && !t.IsAbstract), - AbpModuleCount = types.Count(t => typeof(AbpModule).IsAssignableFrom(t) && !t.IsAbstract), - ProjectCount = types.Select(t => t.Assembly.GetName().Name).Distinct().Count() - }; - } -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/SoftwareInfo.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/SoftwareInfo.cs index 20a39e80ea..02fe68abc7 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/SoftwareInfo.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/SoftwareInfo.cs @@ -1,5 +1,5 @@ using System; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Contracts; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs index a3427ff383..e2ce7373dc 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs @@ -4,7 +4,7 @@ using System.Text.Json; using System.Threading.Tasks; using Shared; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/ChromeDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/ChromeDetector.cs index 86f9061843..67f2681bd3 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/ChromeDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/ChromeDetector.cs @@ -3,7 +3,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Threading.Tasks; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/DotnetSdkDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/DotnetSdkDetector.cs index 32ab6b38b9..cb460df5fc 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/DotnetSdkDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/DotnetSdkDetector.cs @@ -1,7 +1,7 @@ using System; using System.Threading.Tasks; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/FireFoxDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/FireFoxDetector.cs index 182a8dd611..513fa40eec 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/FireFoxDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/FireFoxDetector.cs @@ -3,7 +3,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Threading.Tasks; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/MsEdgeDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/MsEdgeDetector.cs index d5e06ed05e..912964a366 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/MsEdgeDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/MsEdgeDetector.cs @@ -3,7 +3,7 @@ using System.IO; using System.Runtime.InteropServices; using System.Threading.Tasks; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/NodeJsDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/NodeJsDetector.cs index a5b2dae995..552b4f1c85 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/NodeJsDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/NodeJsDetector.cs @@ -1,7 +1,7 @@ using System; using System.Threading.Tasks; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/OperatingSystemDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/OperatingSystemDetector.cs index f624031b5c..da809b991b 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/OperatingSystemDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/OperatingSystemDetector.cs @@ -4,7 +4,7 @@ using System.Runtime.InteropServices; using System.Threading.Tasks; using Microsoft.Win32; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/RiderDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/RiderDetector.cs index 0986266488..92eb40b0c9 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/RiderDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/RiderDetector.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Xml.Linq; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs index da2eede47d..512096a996 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; using System.Text.Json; using System.Threading.Tasks; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/DeviceInfoProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/DeviceInfoProvider.cs index 98e0af40a4..1cc2bfcf53 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/DeviceInfoProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/DeviceInfoProvider.cs @@ -8,7 +8,7 @@ using System.Runtime.InteropServices; using System.Threading.Tasks; using Shared; using Volo.Abp.DependencyInjection; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/IDeviceInfoProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/IDeviceInfoProvider.cs index bf2a427362..ca567ab0cc 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/IDeviceInfoProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/IDeviceInfoProvider.cs @@ -1,6 +1,6 @@ using System; using System.Threading.Tasks; -using Volo.Abp.Telemetry.EnvironmentInspection.Enums; +using Volo.Abp.Telemetry.Shared.Enums; namespace Volo.Abp.Telemetry.EnvironmentInspection; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataHelper.cs index 9a113e64f1..9268bb280f 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataHelper.cs @@ -14,11 +14,6 @@ public static class AbpPackageMetadataHelper var assemblyPath = assembly.Location; try { - if (string.IsNullOrWhiteSpace(assemblyPath)) - { - return null; - } - var dir = Path.GetDirectoryName(assemblyPath); if (dir == null) { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/IApplicationScanner.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/IApplicationScanner.cs deleted file mode 100644 index ad18d4f4c3..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/IApplicationScanner.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Volo.Abp.Telemetry; - -public interface IApplicationScanner -{ - ApplicationInfo Scan(); -} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryApplicationInfoContributor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryApplicationInfoContributor.cs new file mode 100644 index 0000000000..04d19f77e8 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryApplicationInfoContributor.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Telemetry.Activity; + +namespace Volo.Abp.Telemetry; + +public interface ITelemetryApplicationInfoContributor : ISingletonDependency +{ + Task ContributeAsync(ActivityData activityData); +} \ No newline at end of file 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 7ba1b82904..beb189cf5b 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryService.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryService.cs @@ -9,6 +9,6 @@ public interface ITelemetryService { IAsyncDisposable TrackActivity(string activityName, Action? configure = null); IAsyncDisposable TrackActivity(ActivityData activityData); - Task AddActivityAsync(ActivityData data, CancellationToken cancellationToken = default); - Task AddActivityAsync(string activityName, string? details = null, CancellationToken cancellationToken = default); + Task AddActivityAsync(ActivityData data); + Task AddActivityAsync(string activityName, string? details = null); } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ModuleInfoContributor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ModuleInfoContributor.cs new file mode 100644 index 0000000000..f1cbc8fbed --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ModuleInfoContributor.cs @@ -0,0 +1,27 @@ +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Modularity; +using Volo.Abp.Telemetry.Activity; + +namespace Volo.Abp.Telemetry; + +public class ModuleInfoContributor : ITelemetryApplicationInfoContributor +{ + public Task ContributeAsync(ActivityData activityData) + { + if (activityData.TryGetValue(ActivityPropertyNameConstants.Assembly, out var assemblyPath)) + { + var assembly = Assembly.LoadFrom((string)assemblyPath); + var types = assembly.GetTypes(); + var moduleCount = types.Count(t => typeof(AbpModule).IsAssignableFrom(t) && !t.IsAbstract); + var projectCount = types.Select(t => t.Assembly.GetName().Name).Distinct().Count(); + + activityData.Add(ActivityPropertyNameConstants.ModuleCount, moduleCount); + activityData.Add(ActivityPropertyNameConstants.ProjectCount, projectCount); + } + + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/AbpTool.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/AbpTool.cs similarity index 61% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/AbpTool.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/AbpTool.cs index 0ea01cede3..f3ab6ba4fb 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/AbpTool.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/AbpTool.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum AbpTool : byte { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/ApplicationType.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/ApplicationType.cs similarity index 82% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/ApplicationType.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/ApplicationType.cs index 81d1160711..9af65eed83 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/ApplicationType.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/ApplicationType.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum ApplicationType { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/DatabaseProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/DatabaseProvider.cs similarity index 60% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/DatabaseProvider.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/DatabaseProvider.cs index 8f79d21a32..e361b5818b 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/DatabaseProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/DatabaseProvider.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum DatabaseProvider { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/Dbms.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/Dbms.cs similarity index 71% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/Dbms.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/Dbms.cs index 6f7f06de00..49c4110384 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/Dbms.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/Dbms.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum Dbms { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/DeviceType.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/DeviceType.cs similarity index 54% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/DeviceType.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/DeviceType.cs index 915140b08b..f3e37abd0e 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/DeviceType.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/DeviceType.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum DeviceType { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/LicenseType.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/LicenseType.cs similarity index 58% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/LicenseType.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/LicenseType.cs index 6dc46f4537..4f2bdc84e6 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/LicenseType.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/LicenseType.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum LicenseType { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/MobileApp.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/MobileApp.cs similarity index 60% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/MobileApp.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/MobileApp.cs index 01d9782522..38f9fd467f 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/MobileApp.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/MobileApp.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum MobileApp { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/OperationSystem.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/OperationSystem.cs similarity index 60% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/OperationSystem.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/OperationSystem.cs index fac73a68e2..29b4faac90 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/OperationSystem.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/OperationSystem.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum OperationSystem { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/SoftwareType.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SoftwareType.cs similarity index 69% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/SoftwareType.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SoftwareType.cs index bb7fe1c581..16461f7ae0 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/SoftwareType.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SoftwareType.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum SoftwareType : byte { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/SolutionTemplate.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SolutionTemplate.cs similarity index 60% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/SolutionTemplate.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SolutionTemplate.cs index 9e9c151114..a923bf4f38 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/SolutionTemplate.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SolutionTemplate.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum SolutionTemplate { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiFramework.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiFramework.cs similarity index 74% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiFramework.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiFramework.cs index d1a3339d21..c8282a6b7d 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiFramework.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiFramework.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum UiFramework { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiTheme.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiTheme.cs similarity index 63% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiTheme.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiTheme.cs index a363a3abbb..01d5eb79ac 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiTheme.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiTheme.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum UiTheme { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiThemeStyle.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiThemeStyle.cs similarity index 62% rename from framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiThemeStyle.cs rename to framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiThemeStyle.cs index 0f8d51544e..d5fb19764f 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Enums/UiThemeStyle.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/UiThemeStyle.cs @@ -1,4 +1,4 @@ -namespace Volo.Abp.Telemetry.EnvironmentInspection.Enums; +namespace Volo.Abp.Telemetry.Shared.Enums; public enum UiThemeStyle { diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryDataSender.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryDataSender.cs index 5066b49716..ec0c827056 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryDataSender.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryDataSender.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Net.Mime; @@ -24,6 +25,7 @@ public class TelemetryDataSender : ITelemetryDataSender , IScopedDependency #endif private readonly IActivityStorage _activityStorage; private readonly IActivityDataProvider _activityDataProvider; + private const int ActivityBatchSize = 50; public TelemetryDataSender(IActivityStorage activityStorage, IActivityDataProvider activityDataProvider) { @@ -41,10 +43,12 @@ public class TelemetryDataSender : ITelemetryDataSender , IScopedDependency if (activities.Count > 0) { await AddExtraInformationAsync(activities[0]); - foreach (var activity in activities) + for (var i = 0; i < activities.Count; i += ActivityBatchSize) { + var activityBatch = activities.Skip(i).Take(ActivityBatchSize).ToList(); + await httpClient.PostAsync(ApiUrl, - new StringContent(JsonSerializer.Serialize(activity), Encoding.UTF8, "application/json")); + new StringContent(JsonSerializer.Serialize(activityBatch), Encoding.UTF8, "application/json")); } await _activityStorage.MarkActivitiesAsSentAsync(); @@ -69,9 +73,9 @@ public class TelemetryDataSender : ITelemetryDataSender , IScopedDependency } - if (activityData.TryGetValue(ActivityPropertyNameConstants.Assembly, out var assemblyLocation)) + if (activityData.ContainsKey(ActivityPropertyNameConstants.Assembly)) { - _activityDataProvider.AddApplicationInformation(activityData, Assembly.LoadFrom((string) assemblyLocation)); + await _activityDataProvider.AddApplicationInformation(activityData); } if (activityData.TryGetValue(ActivityPropertyNameConstants.SolutionPath, out var path)) 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 9962eb427f..00f1c434d4 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs @@ -63,16 +63,16 @@ public class TelemetryService : ITelemetryService , IScopedDependency await _telemetryDataSender.SendAsync(); } } - public async Task AddActivityAsync(ActivityData data, CancellationToken cancellationToken = default) + public async Task AddActivityAsync(ActivityData data) { - await _activityStorage.BufferActivityAsync(data, cancellationToken); + await _activityStorage.BufferActivityAsync(data); await CheckIfActivitySendTimeIsDueAsync(); } - public async Task AddActivityAsync(string activityName, string? details = null, CancellationToken cancellationToken = default) + public async Task AddActivityAsync(string activityName, string? details = null) { - await AddActivityAsync(new ActivityData(activityName, details),cancellationToken); + await AddActivityAsync(new ActivityData(activityName, details)); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Telemetry/DomainInfoContributor.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Telemetry/DomainInfoContributor.cs new file mode 100644 index 0000000000..c5760e0f60 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Telemetry/DomainInfoContributor.cs @@ -0,0 +1,26 @@ +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Telemetry; +using Volo.Abp.Telemetry.Activity; + +namespace Volo.Abp.Domain.Telemetry; + +public class DomainInfoContributor : ITelemetryApplicationInfoContributor +{ + public Task ContributeAsync(ActivityData activityData) + { + if (activityData.TryGetValue(ActivityPropertyNameConstants.Assembly, out var assemblyPath)) + { + var assembly = Assembly.LoadFrom((string)assemblyPath); + + var entityCount = assembly.GetTypes().Count(t => typeof(IEntity).IsAssignableFrom(t) && !t.IsAbstract); + + activityData.Add(ActivityPropertyNameConstants.EntityCount, entityCount); + } + + return Task.CompletedTask; + } +} \ No newline at end of file