diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs index f06464c24d..07f9a75150 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs @@ -143,7 +143,8 @@ public abstract class AbpApplicationBase : IAbpApplication initLogger.Entries.Clear(); } - protected virtual IReadOnlyList LoadModules(IServiceCollection services, AbpApplicationCreationOptions options) + protected virtual IReadOnlyList LoadModules(IServiceCollection services, + AbpApplicationCreationOptions options) { return services .GetSingletonInstance() @@ -179,7 +180,9 @@ public abstract class AbpApplicationBase : IAbpApplication } catch (Exception ex) { - throw new AbpInitializationException($"An error occurred during {nameof(IPreConfigureServices.PreConfigureServicesAsync)} phase of the module {module.Type.AssemblyQualifiedName}. See the inner exception for details.", ex); + throw new AbpInitializationException( + $"An error occurred during {nameof(IPreConfigureServices.PreConfigureServicesAsync)} phase of the module {module.Type.AssemblyQualifiedName}. See the inner exception for details.", + ex); } } @@ -366,49 +369,61 @@ public abstract class AbpApplicationBase : IAbpApplication abpHostEnvironment.EnvironmentName = Environments.Production; } } - - protected void ConfigureTelemetry(IServiceProvider serviceProvider) + + protected void SetupTelemetryTracking() { - var abpHostEnvironment = serviceProvider.GetRequiredService(); - var configuration = serviceProvider.GetRequiredService(); - - if (!abpHostEnvironment.IsDevelopment() || configuration.GetValue("Abp:Telemetry:IsEnabled") != true) + if (ShouldSendTelemetryData()) { return; } - + _ = Task.Run(async () => { - try - { - using var scope = serviceProvider.CreateScope(); - - var assembly = Assembly.GetEntryAssembly()!; + await InitializeTelemetryTracking(); + }); + } - var projectMetaData = AbpProjectMetadataReader.ReadProjectMetadata(assembly); + private async Task InitializeTelemetryTracking() + { + try + { + var assembly = Assembly.GetEntryAssembly()!; - if (projectMetaData != null) - { - var telemetryService = scope.ServiceProvider.GetRequiredService(); + var projectMetaData = AbpProjectMetadataReader.ReadProjectMetadata(assembly); - await using var _ = telemetryService.TrackActivity(ActivityNameConsts.ApplicationRun, activity => - { - activity[ActivityPropertyNames.Assembly] = assembly.Location; - activity[ActivityPropertyNames.ProjectId] = projectMetaData.ProjectId!; - activity[ActivityPropertyNames.ProjectType] = projectMetaData.Role!; - if (!projectMetaData.AbpSlnPath.IsNullOrEmpty()) - { - activity[ActivityPropertyNames.SolutionPath] = projectMetaData.AbpSlnPath; - } - }); + if (projectMetaData is { ProjectId: not null, AbpSlnPath: not null }) + { + using var scope = ServiceProvider.CreateScope(); + var telemetryService = scope.ServiceProvider.GetRequiredService(); - } + await telemetryService.AddActivityAsync(ActivityNameConsts.ApplicationRun, activity => + { + activity[ActivityPropertyNames.Assembly] = assembly.Location; + activity[ActivityPropertyNames.ProjectId] = projectMetaData.ProjectId!; + activity[ActivityPropertyNames.ProjectType] = projectMetaData.Role!; + activity[ActivityPropertyNames.SolutionPath] = projectMetaData.AbpSlnPath; + }); } - catch (Exception e) + } + catch (Exception ex) + { + try { - var logger = serviceProvider.GetRequiredService>(); - logger.LogError(e, "An error occurred while configuring telemetry."); + var logger = ServiceProvider.GetRequiredService>(); + logger.LogException(ex, LogLevel.Trace); } - }); + catch + { + /* ignored */ + } + } + } + + private bool ShouldSendTelemetryData() + { + using var scope = ServiceProvider.CreateScope(); + var abpHostEnvironment = scope.ServiceProvider.GetRequiredService(); + var configuration = scope.ServiceProvider.GetRequiredService(); + return abpHostEnvironment.IsDevelopment() && configuration.GetValue("Abp:Telemetry:IsEnabled") == true; } -} +} \ 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 f1a8e09bfc..67f7e8d534 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs @@ -51,7 +51,7 @@ internal class AbpApplicationWithExternalServiceProvider : AbpApplicationBase, I await InitializeModulesAsync(); - ConfigureTelemetry(serviceProvider); + SetupTelemetryTracking(); } public void Initialize([NotNull] IServiceProvider serviceProvider) @@ -62,7 +62,7 @@ internal class AbpApplicationWithExternalServiceProvider : AbpApplicationBase, I InitializeModules(); - ConfigureTelemetry(serviceProvider); + SetupTelemetryTracking(); } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs index 8a2f84feef..5f07e418b0 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithInternalServiceProvider.cs @@ -51,7 +51,7 @@ internal class AbpApplicationWithInternalServiceProvider : AbpApplicationBase, I CreateServiceProvider(); await InitializeModulesAsync(); - ConfigureTelemetry(ServiceProvider); + SetupTelemetryTracking(); } public void Initialize() @@ -59,7 +59,7 @@ internal class AbpApplicationWithInternalServiceProvider : AbpApplicationBase, I CreateServiceProvider(); InitializeModules(); - ConfigureTelemetry(ServiceProvider); + SetupTelemetryTracking(); } public override void Dispose()