Browse Source

Refactor telemetry system and remove obsolete ActivityDataProvider

pull/23059/head
Emre KARA 1 year ago
parent
commit
08eee67cb4
  1. 6
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/TelemetryPermissionInfoContributor.cs
  2. 8
      framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj
  3. 15
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs
  4. 13
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/IActivityDataProvider.cs
  5. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityDataProvider.cs
  6. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityStorage.cs
  7. 4
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs
  8. 126
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/ActivityDataProvider.cs
  9. 77
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryActivityDataProvider.cs
  10. 9
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetrySolutionInfoProvider.cs
  11. 27
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorage.cs
  12. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorageState.cs
  13. 15
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/AbpPlatformUrls.cs
  14. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityNameConsts.cs
  15. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityPropertyName.cs
  16. 9
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/AbpTool.cs
  17. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/DeviceType.cs
  18. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/OperationSystem.cs
  19. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/SessionType.cs
  20. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/SoftwareType.cs
  21. 22
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/TelemetryPaths.cs
  22. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/IDeviceInfoProvider.cs
  23. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/ISoftwareDetector.cs
  24. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/SoftwareInfo.cs
  25. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Core/SoftwareDetector.cs
  26. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs
  27. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/ChromeDetector.cs
  28. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/DotnetSdkDetector.cs
  29. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/FireFoxDetector.cs
  30. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/MsEdgeDetector.cs
  31. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/NodeJsDetector.cs
  32. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/OperatingSystemDetector.cs
  33. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/RiderDetector.cs
  34. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs
  35. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioDetector.cs
  36. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Providers/DeviceInfoProvider.cs
  37. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataReader.cs
  38. 1
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetryApplicationInfoContributor.cs
  39. 10
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ITelemetrySessionContextProvider.cs
  40. 39
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryApplicationRuntimeSessionTypeProvider.cs
  41. 19
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryDataSender.cs
  42. 15
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryModuleInfoContributor.cs
  43. 26
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryService.cs
  44. 4
      framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Telemetry/TelemetryDomainInfoContributor.cs

6
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionInfoContributor.cs → framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/TelemetryPermissionInfoContributor.cs

@ -2,16 +2,16 @@
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Authorization.Permissions;
[ExposeServices(typeof(ITelemetryApplicationInfoContributor))]
public class PermissionInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency
public class TelemetryPermissionInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency
{
private readonly IPermissionDefinitionManager _permissionDefinitionManager;
public PermissionInfoContributor(IPermissionDefinitionManager permissionDefinitionManager)
public TelemetryPermissionInfoContributor(IPermissionDefinitionManager permissionDefinitionManager)
{
_permissionDefinitionManager = permissionDefinitionManager;
}

8
framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj

@ -17,7 +17,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Collections.Immutable" />
<PackageReference Include="System.Management" />
<PackageReference Include="Microsoft.Win32.Registry" />
<PackageReference Include="Microsoft.Extensions.Localization" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
@ -35,6 +34,12 @@
<PackageReference Include="JetBrains.Annotations" />
<PackageReference Include="Nito.AsyncEx.Context" />
</ItemGroup>
<ItemGroup Condition="'$(OS)' == 'Windows_NT'">
<PackageReference Include="System.Management" />
</ItemGroup>
<PropertyGroup Condition="'$(OS)' == 'Windows_NT'">
<DefineConstants>$(DefineConstants);WINDOWS</DefineConstants>
</PropertyGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<PackageReference Include="System.Threading.Tasks.Extensions" />
</ItemGroup>
@ -47,4 +52,5 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

15
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationWithExternalServiceProvider.cs

@ -6,8 +6,8 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.Telemetry;
using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Helpers;
using Volo.Abp.Telemetry.Shared;
namespace Volo.Abp;
@ -67,20 +67,21 @@ internal class AbpApplicationWithExternalServiceProvider : AbpApplicationBase, I
}
private void ConfigureTelemetry(IServiceProvider serviceProvider)
{
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
if (configuration.GetValue<bool>("Abp:Telemetry:Disable"))
{
return;
}
Task.Run(async () =>
{
try
{
using var scope = serviceProvider.CreateScope();
var configuration = scope.ServiceProvider.GetRequiredService<IConfiguration>();
if (configuration.GetValue<bool>("Abp:Telemetry:Disable"))
{
return;
}
var assembly = Assembly.GetEntryAssembly()!;
var packageMetadata = AbpPackageMetadataHelper.GetMetaData(assembly);
var packageMetadata = AbpPackageMetadataReader.GetMetaData(assembly);
if (packageMetadata != null)
{

13
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/IActivityDataProvider.cs

@ -1,13 +0,0 @@
using System;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.Activity;
public interface IActivityDataProvider
{
Task AddExtraInformationAsync(ActivityData activity);
}

8
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityDataProvider.cs

@ -0,0 +1,8 @@
using System.Threading.Tasks;
namespace Volo.Abp.Telemetry.Activity.Contracts;
public interface ITelemetryActivityDataProvider
{
Task AddExtraInformationAsync(ActivityData activity);
}

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/IActivityStorage.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetryActivityStorage.cs

@ -4,7 +4,7 @@ using System.Threading.Tasks;
namespace Volo.Abp.Telemetry.Activity.Contracts;
public interface IActivityStorage
public interface ITelemetryActivityStorage
{
Task<DateTimeOffset?> GetLastActivitySendTimeAsync();
Task<(bool isFirstSession, Guid sessionId)> GetOrCreateSessionInfoAsync();

4
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ISolutionInfoProvider.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Contracts/ITelemetrySolutionInfoProvider.cs

@ -2,9 +2,9 @@
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.Telemetry.Activity;
namespace Volo.Abp.Telemetry.Activity.Contracts;
public interface ISolutionInfoProvider
public interface ITelemetrySolutionInfoProvider
{
Task<IDictionary<string, object>> GetSolutionInfoAsync(string solutionPath);

126
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/ActivityDataProvider.cs

@ -1,126 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.Activity.Providers;
public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
{
private readonly IDeviceInfoProvider _deviceInfoProvider;
private readonly ISoftwareInfoProvider _softwareInfoProvider;
private readonly IEnumerable<ITelemetryApplicationInfoContributor> _applicationInfoContributors;
private readonly IActivityStorage _activityStorage;
private readonly ISolutionInfoProvider _solutionInfoProvider;
public ActivityDataProvider(
IDeviceInfoProvider deviceInfoProvider,
ISoftwareInfoProvider softwareInfoProvider,
IEnumerable<ITelemetryApplicationInfoContributor> applicationInfoContributors,
IActivityStorage activityStorage, ISolutionInfoProvider solutionInfoProvider)
{
_deviceInfoProvider = deviceInfoProvider;
_softwareInfoProvider = softwareInfoProvider;
_applicationInfoContributors = applicationInfoContributors;
_activityStorage = activityStorage;
_solutionInfoProvider = solutionInfoProvider;
}
protected virtual SessionType GetSessionType()
{
return SessionType.ApplicationRuntime;
}
public virtual async Task AddExtraInformationAsync(ActivityData activity)
{
var (isFirstSession, sessionId) = await _activityStorage.GetOrCreateSessionInfoAsync();
AddSolutionId(activity);
var sessionType = GetSessionType();
activity[ActivityPropertyName.SessionType] = sessionType;
activity[ActivityPropertyName.SessionId] = sessionId;
activity[ActivityPropertyName.IsFirstSession] = isFirstSession;
activity[ActivityPropertyName.DeviceId] = _deviceInfoProvider.GetDeviceId();
if (await _activityStorage.ShouldAddDeviceInfoAsync())
{
await AddDeviceInformationAsync(activity);
}
if (activity.ContainsKey(ActivityPropertyName.Assembly) && sessionType == SessionType.ApplicationRuntime)
{
await AddApplicationInformationAsync(activity);
activity.Remove(ActivityPropertyName.Assembly);
}
if (await ShouldAddSolutionInformation(activity))
{
var solutionInfo = await _solutionInfoProvider.GetSolutionInfoAsync(activity[ActivityPropertyName.SolutionPath].ToString()!);
foreach (var entry in solutionInfo)
{
activity[entry.Key] = entry.Value;
}
}
}
protected virtual async Task<bool> ShouldAddSolutionInformation(ActivityData activity)
{
if (
!activity.TryGetValue(ActivityPropertyName.SolutionId, out var id) ||
!Guid.TryParse(id.ToString(), out var solutionId) && activity.ContainsKey(ActivityPropertyName.SolutionPath))
{
return false;
}
return await _activityStorage.ShouldAddSolutionInformation(solutionId);
}
protected virtual async Task AddDeviceInformationAsync(ActivityData activityData)
{
activityData[ActivityPropertyName.DeviceType] = _deviceInfoProvider.GetDeviceType();
activityData[ActivityPropertyName.DeviceLanguage] = _deviceInfoProvider.GetLanguage();
activityData[ActivityPropertyName.OperatingSystem] = _deviceInfoProvider.GetOperatingSystem();
activityData[ActivityPropertyName.CountryIsoCode] = _deviceInfoProvider.GetCountry();
var softwareList = await _softwareInfoProvider.GetSoftwareInfoAsync();
activityData[ActivityPropertyName.InstalledSoftwares] = softwareList;
await _activityStorage.MarkDeviceInfoAsSentAsync();
}
protected virtual async Task AddApplicationInformationAsync(ActivityData activityData)
{
foreach (var contributor in _applicationInfoContributors)
{
await contributor.ContributeAsync(activityData);
}
}
protected virtual void AddSolutionId(ActivityData activityData)
{
if (activityData.ContainsKey(ActivityPropertyName.SolutionId))
{
return;
}
if (!activityData.TryGetValue(ActivityPropertyName.SolutionPath, out var path) || !File.Exists((string)path))
{
return;
}
var solutionId = _solutionInfoProvider.GetSolutionId((string)path);
if (solutionId.HasValue)
{
activityData[ActivityPropertyName.SolutionId] = solutionId.Value;
}
}
}

77
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetryActivityDataProvider.cs

@ -0,0 +1,77 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
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;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
namespace Volo.Abp.Telemetry.Activity.Providers;
public class TelemetryActivityDataProvider : ITelemetryActivityDataProvider, ISingletonDependency
{
private readonly IServiceProvider _serviceProvider;
public TelemetryActivityDataProvider(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public virtual async Task AddExtraInformationAsync(ActivityData activity)
{
var activityStorage = _serviceProvider.GetRequiredService<ITelemetryActivityStorage>();
var sessionContext = _serviceProvider.GetRequiredService<ITelemetrySessionContextProvider>();
var deviceInfoProvider = _serviceProvider.GetRequiredService<IDeviceInfoProvider>();
var (isFirstSession, sessionId) = await activityStorage.GetOrCreateSessionInfoAsync();
sessionContext.SetSolutionContext(activity);
activity[ActivityPropertyName.SessionType] = sessionContext.SessionType;
activity[ActivityPropertyName.SessionId] = sessionId;
activity[ActivityPropertyName.IsFirstSession] = isFirstSession;
activity[ActivityPropertyName.DeviceId] = deviceInfoProvider.GetDeviceId();
if (await activityStorage.ShouldAddDeviceInfoAsync())
{
activity[ActivityPropertyName.DeviceType] = deviceInfoProvider.GetDeviceType();
activity[ActivityPropertyName.DeviceLanguage] = deviceInfoProvider.GetLanguage();
activity[ActivityPropertyName.OperatingSystem] = deviceInfoProvider.GetOperatingSystem();
activity[ActivityPropertyName.CountryIsoCode] = deviceInfoProvider.GetCountry();
var softwareInfo = _serviceProvider.GetRequiredService<ISoftwareInfoProvider>();
var softwareList = await softwareInfo.GetSoftwareInfoAsync();
activity[ActivityPropertyName.InstalledSoftwares] = softwareList;
await activityStorage.MarkDeviceInfoAsSentAsync();
}
if (activity.ContainsKey(ActivityPropertyName.Assembly) && sessionContext.SessionType == SessionType.ApplicationRuntime)
{
var contributors = _serviceProvider.GetRequiredService<IEnumerable<ITelemetryApplicationInfoContributor>>();
foreach (var contributor in contributors)
{
await contributor.ContributeAsync(activity);
}
activity.Remove(ActivityPropertyName.Assembly);
}
if (activity.TryGetValue(ActivityPropertyName.SolutionId, out var rawSolutionId))
{
var solutionId = Guid.Parse(rawSolutionId!.ToString()!);
if (await activityStorage.ShouldAddSolutionInformation(solutionId))
{
var solutionProvider = _serviceProvider.GetRequiredService<ITelemetrySolutionInfoProvider>();
var solutionInfo = await solutionProvider.GetSolutionInfoAsync(activity[ActivityPropertyName.SolutionPath].ToString()!);
foreach (var entry in solutionInfo)
{
activity[entry.Key] = entry.Value;
}
}
}
}
}

9
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/SolutionInfoProvider.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Providers/TelemetrySolutionInfoProvider.cs

@ -7,11 +7,12 @@ using System.Net.Http.Headers;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry.Activity.Providers;
public class SolutionInfoProvider : ISolutionInfoProvider, ISingletonDependency
public class TelemetrySolutionInfoProvider : ITelemetrySolutionInfoProvider, ISingletonDependency
{
public async Task<IDictionary<string, object>> GetSolutionInfoAsync(string solutionPath)
{
@ -158,7 +159,7 @@ public class SolutionInfoProvider : ISolutionInfoProvider, ISingletonDependency
protected virtual async Task<int> GetLicenseTypeAsync()
{
if (!File.Exists(AbpTelemetryPaths.AccessToken))
if (!File.Exists(TelemetryPaths.AccessToken))
{
return 0;
}
@ -166,7 +167,7 @@ public class SolutionInfoProvider : ISolutionInfoProvider, ISingletonDependency
try
{
using var httpClient = new HttpClient();
var accessToken = File.ReadAllText(AbpTelemetryPaths.AccessToken);
var accessToken = File.ReadAllText(TelemetryPaths.AccessToken);
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await httpClient.GetAsync($"{AbpPlatformUrls.AbpIoUrl}api/license/api-key");

27
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/ActivityStorage.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorage.cs

@ -7,14 +7,13 @@ using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry.Activity.Storage;
public class ActivityStorage : IActivityStorage, ISingletonDependency
public class TelemetryActivityStorage : ITelemetryActivityStorage, ISingletonDependency
{
private ActivityStorageState? _cachedState;
private TelemetryActivityStorageState? _cachedState;
public async Task BufferActivityAsync(ActivityData activityData)
{
@ -116,7 +115,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
await SaveAsync();
}
private async Task<ActivityStorageState> GetStateAsync()
private async Task<TelemetryActivityStorageState> GetStateAsync()
{
if (_cachedState != null)
{
@ -128,10 +127,10 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
{
using var reader = new StreamReader(stream, Encoding.UTF8);
var json = await reader.ReadToEndAsync();
return JsonSerializer.Deserialize<ActivityStorageState?>(json, new JsonSerializerOptions
return JsonSerializer.Deserialize<TelemetryActivityStorageState?>(json, new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
}) ?? new ActivityStorageState();
}) ?? new TelemetryActivityStorageState();
});
return _cachedState;
}
@ -146,7 +145,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
try
{
using var stream = new FileStream(
AbpTelemetryPaths.ActivityStorage,
TelemetryPaths.ActivityStorage,
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.None
@ -170,13 +169,13 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
private Task SaveAsync()
{
var json = JsonSerializer.Serialize(_cachedState ?? new ActivityStorageState(),
var json = JsonSerializer.Serialize(_cachedState ?? new TelemetryActivityStorageState(),
new JsonSerializerOptions
{
WriteIndented = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
});
File.WriteAllText(AbpTelemetryPaths.ActivityStorage, json, Encoding.UTF8);
File.WriteAllText(TelemetryPaths.ActivityStorage, json, Encoding.UTF8);
return Task.CompletedTask;
}
@ -185,22 +184,22 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
{
try
{
var directory = Path.GetDirectoryName(AbpTelemetryPaths.ActivityStorage);
var directory = Path.GetDirectoryName(TelemetryPaths.ActivityStorage);
if (!Directory.Exists(directory) && !directory.IsNullOrEmpty())
{
Directory.CreateDirectory(directory);
}
if (!File.Exists(AbpTelemetryPaths.ActivityStorage))
if (!File.Exists(TelemetryPaths.ActivityStorage))
{
var json = JsonSerializer.Serialize(_cachedState ?? new ActivityStorageState(),
var json = JsonSerializer.Serialize(_cachedState ?? new TelemetryActivityStorageState(),
new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true
});
File.WriteAllText(AbpTelemetryPaths.ActivityStorage, json, Encoding.UTF8);
File.WriteAllText(TelemetryPaths.ActivityStorage, json, Encoding.UTF8);
}
}
catch

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/ActivityStorageState.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/Storage/TelemetryActivityStorageState.cs

@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace Volo.Abp.Telemetry.Activity.Storage;
public class ActivityStorageState
public class TelemetryActivityStorageState
{
public DateTimeOffset? ActivitySendTime { get; set; }
public DateTimeOffset? LastDeviceInfoSendTime { get; set; }

15
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/AbpPlatformUrls.cs

@ -0,0 +1,15 @@
namespace Volo.Abp.Telemetry.Constants;
public static class AbpPlatformUrls
{
#if DEBUG
public const string AbpTelemetryApiUrl = "https://localhost:44393/";
public const string AbpIoUrl = "https://localhost:44328/";
#else
public const string AbpTelemetryApiUrl = "https://telemetry.abp.io/";
public const string AbpIoUrl = "https://abp.io/";
#endif
}

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

@ -1,4 +1,4 @@
namespace Volo.Abp.Telemetry.Shared;
namespace Volo.Abp.Telemetry.Constants;
public static class ActivityNameConsts
{

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/ActivityPropertyName.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/ActivityPropertyName.cs

@ -1,4 +1,4 @@
namespace Volo.Abp.Telemetry.Shared;
namespace Volo.Abp.Telemetry.Constants;
public static class ActivityPropertyName
{

9
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/AbpTool.cs

@ -0,0 +1,9 @@
namespace Volo.Abp.Telemetry.Constants.Enums;
public enum AbpTool : byte
{
Unknown = 0,
StudioUI = 1,
StudioCli = 2,
OldCli = 3
}

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/DeviceType.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/DeviceType.cs

@ -1,4 +1,4 @@
namespace Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.Constants.Enums;
public enum DeviceType
{

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/OperationSystem.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/OperationSystem.cs

@ -1,4 +1,4 @@
namespace Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.Constants.Enums;
public enum OperationSystem
{

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SessionType.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/SessionType.cs

@ -1,4 +1,4 @@
namespace Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.Constants.Enums;
public enum SessionType
{

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/Enums/SoftwareType.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/Enums/SoftwareType.cs

@ -1,4 +1,4 @@
namespace Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.Constants.Enums;
public enum SoftwareType : byte
{

22
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Shared/AbpTelemetryPaths.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Constants/TelemetryPaths.cs

@ -1,31 +1,13 @@
using System;
using System.IO;
namespace Volo.Abp.Telemetry.Shared;
namespace Volo.Abp.Telemetry.Constants;
public static class AbpTelemetryPaths
public static class TelemetryPaths
{
public static string AccessToken => Path.Combine(AbpRootPath, "cli", "access-token.bin");
public static string ComputerId => Path.Combine(AbpRootPath, "cli", "computer-id.bin");
public static string ActivityStorage => Path.Combine(AbpRootPath, "activity-storage.json");
public static string Studio => Path.Combine(AbpRootPath, "studio");
private readonly static string AbpRootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".abp");
}
public static class AbpPlatformUrls
{
#if DEBUG
public const string TelemetryApiUrl = "https://localhost:44393/";
public const string AbpIoUrl = "https://localhost:44328/";
#else
public const string TelemetryApiUrl = "https://telemetry.abp.io/";
public const string AbpIoUrl = "https://abp.io/";
#endif
}

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/IDeviceInfoProvider.cs

@ -1,5 +1,5 @@
using System;
using Volo.Abp.Telemetry.Shared.Enums;
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Contracts;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/ISoftwareDetector.cs

@ -2,7 +2,7 @@
namespace Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
public interface ISoftwareDetector
internal interface ISoftwareDetector
{
string Name { get; }
Task<SoftwareInfo?> DetectAsync();

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Contracts/SoftwareInfo.cs

@ -1,4 +1,4 @@
using Volo.Abp.Telemetry.Shared.Enums;
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Contracts;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Core/SoftwareDetector.cs

@ -7,7 +7,7 @@ using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Core;
[ExposeServices(typeof(ISoftwareDetector))]
public abstract class SoftwareDetector: ISoftwareDetector , ISingletonDependency
abstract internal class SoftwareDetector: ISoftwareDetector , ISingletonDependency
{
public abstract string Name { get; }
public abstract Task<SoftwareInfo?> DetectAsync();

8
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs

@ -2,10 +2,10 @@
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
@ -31,7 +31,7 @@ internal class AbpStudioDetector : SoftwareDetector
private string? GetAbpStudioUiTheme()
{
var ideStateJsonPath = Path.Combine(
AbpTelemetryPaths.Studio,
TelemetryPaths.Studio,
"ui",
"ide-state.json"
);
@ -48,7 +48,7 @@ internal class AbpStudioDetector : SoftwareDetector
private string? GetAbpStudioVersion()
{
var extensionsFilePath = Path.Combine(AbpTelemetryPaths.Studio, "extensions.json");
var extensionsFilePath = Path.Combine(TelemetryPaths.Studio, "extensions.json");
if (!File.Exists(extensionsFilePath))
{

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/ChromeDetector.cs

@ -2,9 +2,9 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/DotnetSdkDetector.cs

@ -1,8 +1,8 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/FireFoxDetector.cs

@ -2,9 +2,9 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/MsEdgeDetector.cs

@ -2,9 +2,9 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/NodeJsDetector.cs

@ -1,8 +1,8 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/OperatingSystemDetector.cs

@ -3,9 +3,9 @@ using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Microsoft.Win32;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/RiderDetector.cs

@ -4,9 +4,9 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Xml.Linq;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs

@ -4,9 +4,9 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioDetector.cs

@ -4,9 +4,9 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;

8
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Providers/DeviceInfoProvider.cs

@ -3,12 +3,14 @@ using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
#if WINDOWS
using System.Management;
#endif
using System.Runtime.InteropServices;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Providers;
@ -20,7 +22,7 @@ public class DeviceInfoProvider : IDeviceInfoProvider, ISingletonDependency
{
_deviceId = new Lazy<Guid>(() =>
{
var deviceIdText = File.ReadAllText(AbpTelemetryPaths.ComputerId);
var deviceIdText = File.ReadAllText(TelemetryPaths.ComputerId);
return deviceIdText.To<Guid>();
});
}

2
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataHelper.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataReader.cs

@ -7,7 +7,7 @@ using System.Text.Json;
namespace Volo.Abp.Telemetry.Helpers;
public static class AbpPackageMetadataHelper
public static class AbpPackageMetadataReader
{
public static AbpPackageMetadata? GetMetaData(Assembly assembly)
{

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

@ -1,5 +1,4 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity;
namespace Volo.Abp.Telemetry;

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

@ -0,0 +1,10 @@
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry;
public interface ITelemetrySessionContextProvider
{
public SessionType SessionType { get; }
void SetSolutionContext(ActivityData activity);
}

39
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryApplicationRuntimeSessionTypeProvider.cs

@ -0,0 +1,39 @@
using System.IO;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry;
public class TelemetryApplicationRuntimeSessionTypeProvider : ITelemetrySessionContextProvider , ISingletonDependency
{
private readonly ITelemetrySolutionInfoProvider _telemetrySolutionInfoProvider;
public TelemetryApplicationRuntimeSessionTypeProvider(ITelemetrySolutionInfoProvider telemetrySolutionInfoProvider)
{
_telemetrySolutionInfoProvider = telemetrySolutionInfoProvider;
}
public virtual SessionType SessionType => SessionType.ApplicationRuntime;
public virtual void SetSolutionContext(ActivityData activity)
{
if (activity.ContainsKey(ActivityPropertyName.SolutionId))
{
return;
}
if (!activity.TryGetValue(ActivityPropertyName.SolutionPath, out var path) || !File.Exists((string)path))
{
return;
}
var solutionId = _telemetrySolutionInfoProvider.GetSolutionId((string)path);
if (solutionId.HasValue)
{
activity[ActivityPropertyName.SolutionId] = solutionId.Value;
}
}
}

19
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryDataSender.cs

@ -7,20 +7,19 @@ using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry;
public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
{
private readonly IActivityStorage _activityStorage;
private readonly ITelemetryActivityStorage _telemetryActivityStorage;
private const int ActivityBatchSize = 50;
public TelemetryDataSender(IActivityStorage activityStorage)
public TelemetryDataSender(ITelemetryActivityStorage telemetryActivityStorage)
{
_activityStorage = activityStorage;
_telemetryActivityStorage = telemetryActivityStorage;
}
public async Task SendAsync()
@ -30,7 +29,7 @@ public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
using var httpClient = new HttpClient();
AddAbpAuthenticationTokenAsync(httpClient);
var activities = await _activityStorage.GetBufferedActivitiesAsync();
var activities = await _telemetryActivityStorage.GetBufferedActivitiesAsync();
if (activities.Count == 0)
{
return;
@ -41,11 +40,11 @@ public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
{
var activityBatch = activities.Skip(i).Take(ActivityBatchSize).ToList();
await httpClient.PostAsync($"{AbpPlatformUrls.TelemetryApiUrl}api/telemetry/collect",
await httpClient.PostAsync($"{AbpPlatformUrls.AbpTelemetryApiUrl}api/telemetry/collect",
new StringContent(JsonSerializer.Serialize(activityBatch), Encoding.UTF8, "application/json"));
}
await _activityStorage.MarkActivitiesAsSentAsync();
await _telemetryActivityStorage.MarkActivitiesAsSentAsync();
}
catch
{
@ -56,12 +55,12 @@ public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
private static void AddAbpAuthenticationTokenAsync(HttpClient httpClient)
{
if (!File.Exists(AbpTelemetryPaths.AccessToken))
if (!File.Exists(TelemetryPaths.AccessToken))
{
return;
}
var accessToken = File.ReadAllText(AbpTelemetryPaths.AccessToken, Encoding.UTF8);
var accessToken = File.ReadAllText(TelemetryPaths.AccessToken, Encoding.UTF8);
if (!accessToken.IsNullOrEmpty())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

15
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/ModuleInfoContributor.cs → framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/TelemetryModuleInfoContributor.cs

@ -4,13 +4,12 @@ using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry;
[ExposeServices(typeof(ITelemetryApplicationInfoContributor))]
public class ModuleInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency
public class TelemetryModuleInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency
{
public Task ContributeAsync(ActivityData activityData)
{
@ -27,14 +26,4 @@ public class ModuleInfoContributor : ITelemetryApplicationInfoContributor, ISing
return Task.CompletedTask;
}
}
public interface ITelemetrySessionTypeProvider
{
public SessionType SessionType { get; }
}
public class ApplicationRuntimeSessionTypeProvider : ITelemetrySessionTypeProvider, ISingletonDependency
{
public SessionType SessionType => SessionType.ApplicationRuntime;
}

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

@ -5,22 +5,22 @@ using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry;
public class TelemetryService : ITelemetryService, IScopedDependency
{
private readonly IActivityStorage _activityStorage;
private readonly ITelemetryActivityStorage _telemetryActivityStorage;
private readonly ITelemetryDataSender _telemetryDataSender;
private readonly IActivityDataProvider _activityDataProvider;
private readonly ITelemetryActivityDataProvider _telemetryActivityDataProvider;
public TelemetryService(IActivityStorage activityStorage, ITelemetryDataSender telemetryDataSender,
IActivityDataProvider activityDataProvider)
public TelemetryService(ITelemetryActivityStorage telemetryActivityStorage, ITelemetryDataSender telemetryDataSender,
ITelemetryActivityDataProvider telemetryActivityDataProvider)
{
_activityStorage = activityStorage;
_telemetryActivityStorage = telemetryActivityStorage;
_telemetryDataSender = telemetryDataSender;
_activityDataProvider = activityDataProvider;
_telemetryActivityDataProvider = telemetryActivityDataProvider;
}
public IAsyncDisposable TrackActivity(string activityName, Action<ActivityData>? configure = null)
@ -54,11 +54,7 @@ public class TelemetryService : ITelemetryService, IScopedDependency
private async Task CheckIfActivitySendTimeIsDueAsync()
{
var lastActivitySendTime = await _activityStorage.GetLastActivitySendTimeAsync();
// if (lastActivitySendTime is null)
// {
// await _telemetryDataSender.SendAsync();
// }
var lastActivitySendTime = await _telemetryActivityStorage.GetLastActivitySendTimeAsync();
if (lastActivitySendTime is not null && lastActivitySendTime < DateTimeOffset.UtcNow.AddDays(-1))
{
@ -70,13 +66,13 @@ public class TelemetryService : ITelemetryService, IScopedDependency
{
try
{
await _activityDataProvider.AddExtraInformationAsync(data);
await _activityStorage.BufferActivityAsync(data);
await _telemetryActivityDataProvider.AddExtraInformationAsync(data);
await _telemetryActivityStorage.BufferActivityAsync(data);
await CheckIfActivitySendTimeIsDueAsync();
if (data.ActivityName == ActivityNameConsts.AbpStudioClose)
{
await _activityStorage.EndSessionAsync();
await _telemetryActivityStorage.EndSessionAsync();
}
}
catch

4
framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Telemetry/DomainInfoContributor.cs → framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Telemetry/TelemetryDomainInfoContributor.cs

@ -5,12 +5,12 @@ using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Telemetry;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Domain.Telemetry;
[ExposeServices(typeof(ITelemetryApplicationInfoContributor))]
public class DomainInfoContributor : ITelemetryApplicationInfoContributor , ISingletonDependency
public class TelemetryDomainInfoContributor : ITelemetryApplicationInfoContributor , ISingletonDependency
{
public Task ContributeAsync(ActivityData activityData)
{
Loading…
Cancel
Save