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.DependencyInjection;
using Volo.Abp.Telemetry; using Volo.Abp.Telemetry;
using Volo.Abp.Telemetry.Activity; using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Shared; using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Authorization.Permissions; namespace Volo.Abp.Authorization.Permissions;
[ExposeServices(typeof(ITelemetryApplicationInfoContributor))] [ExposeServices(typeof(ITelemetryApplicationInfoContributor))]
public class PermissionInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency public class TelemetryPermissionInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency
{ {
private readonly IPermissionDefinitionManager _permissionDefinitionManager; private readonly IPermissionDefinitionManager _permissionDefinitionManager;
public PermissionInfoContributor(IPermissionDefinitionManager permissionDefinitionManager) public TelemetryPermissionInfoContributor(IPermissionDefinitionManager permissionDefinitionManager)
{ {
_permissionDefinitionManager = permissionDefinitionManager; _permissionDefinitionManager = permissionDefinitionManager;
} }

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

@ -17,7 +17,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Collections.Immutable" /> <PackageReference Include="System.Collections.Immutable" />
<PackageReference Include="System.Management" />
<PackageReference Include="Microsoft.Win32.Registry" /> <PackageReference Include="Microsoft.Win32.Registry" />
<PackageReference Include="Microsoft.Extensions.Localization" /> <PackageReference Include="Microsoft.Extensions.Localization" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" />
@ -35,6 +34,12 @@
<PackageReference Include="JetBrains.Annotations" /> <PackageReference Include="JetBrains.Annotations" />
<PackageReference Include="Nito.AsyncEx.Context" /> <PackageReference Include="Nito.AsyncEx.Context" />
</ItemGroup> </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' "> <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<PackageReference Include="System.Threading.Tasks.Extensions" /> <PackageReference Include="System.Threading.Tasks.Extensions" />
</ItemGroup> </ItemGroup>
@ -47,4 +52,5 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
</Project> </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.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Volo.Abp.Telemetry; using Volo.Abp.Telemetry;
using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Helpers; using Volo.Abp.Telemetry.Helpers;
using Volo.Abp.Telemetry.Shared;
namespace Volo.Abp; namespace Volo.Abp;
@ -67,20 +67,21 @@ internal class AbpApplicationWithExternalServiceProvider : AbpApplicationBase, I
} }
private void ConfigureTelemetry(IServiceProvider serviceProvider) private void ConfigureTelemetry(IServiceProvider serviceProvider)
{ {
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
if (configuration.GetValue<bool>("Abp:Telemetry:Disable"))
{
return;
}
Task.Run(async () => Task.Run(async () =>
{ {
try try
{ {
using var scope = serviceProvider.CreateScope(); using var scope = serviceProvider.CreateScope();
var configuration = scope.ServiceProvider.GetRequiredService<IConfiguration>();
if (configuration.GetValue<bool>("Abp:Telemetry:Disable"))
{
return;
}
var assembly = Assembly.GetEntryAssembly()!; var assembly = Assembly.GetEntryAssembly()!;
var packageMetadata = AbpPackageMetadataHelper.GetMetaData(assembly); var packageMetadata = AbpPackageMetadataReader.GetMetaData(assembly);
if (packageMetadata != null) 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; namespace Volo.Abp.Telemetry.Activity.Contracts;
public interface IActivityStorage public interface ITelemetryActivityStorage
{ {
Task<DateTimeOffset?> GetLastActivitySendTimeAsync(); Task<DateTimeOffset?> GetLastActivitySendTimeAsync();
Task<(bool isFirstSession, Guid sessionId)> GetOrCreateSessionInfoAsync(); 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.Collections.Generic;
using System.Threading.Tasks; 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); 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.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.DependencyInjection; 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; 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) public async Task<IDictionary<string, object>> GetSolutionInfoAsync(string solutionPath)
{ {
@ -158,7 +159,7 @@ public class SolutionInfoProvider : ISolutionInfoProvider, ISingletonDependency
protected virtual async Task<int> GetLicenseTypeAsync() protected virtual async Task<int> GetLicenseTypeAsync()
{ {
if (!File.Exists(AbpTelemetryPaths.AccessToken)) if (!File.Exists(TelemetryPaths.AccessToken))
{ {
return 0; return 0;
} }
@ -166,7 +167,7 @@ public class SolutionInfoProvider : ISolutionInfoProvider, ISingletonDependency
try try
{ {
using var httpClient = new HttpClient(); using var httpClient = new HttpClient();
var accessToken = File.ReadAllText(AbpTelemetryPaths.AccessToken); var accessToken = File.ReadAllText(TelemetryPaths.AccessToken);
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var response = await httpClient.GetAsync($"{AbpPlatformUrls.AbpIoUrl}api/license/api-key"); 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 System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity.Contracts; using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Shared; using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry.Activity.Storage; 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) public async Task BufferActivityAsync(ActivityData activityData)
{ {
@ -116,7 +115,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
await SaveAsync(); await SaveAsync();
} }
private async Task<ActivityStorageState> GetStateAsync() private async Task<TelemetryActivityStorageState> GetStateAsync()
{ {
if (_cachedState != null) if (_cachedState != null)
{ {
@ -128,10 +127,10 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
{ {
using var reader = new StreamReader(stream, Encoding.UTF8); using var reader = new StreamReader(stream, Encoding.UTF8);
var json = await reader.ReadToEndAsync(); var json = await reader.ReadToEndAsync();
return JsonSerializer.Deserialize<ActivityStorageState?>(json, new JsonSerializerOptions return JsonSerializer.Deserialize<TelemetryActivityStorageState?>(json, new JsonSerializerOptions
{ {
PropertyNamingPolicy = JsonNamingPolicy.CamelCase PropertyNamingPolicy = JsonNamingPolicy.CamelCase
}) ?? new ActivityStorageState(); }) ?? new TelemetryActivityStorageState();
}); });
return _cachedState; return _cachedState;
} }
@ -146,7 +145,7 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
try try
{ {
using var stream = new FileStream( using var stream = new FileStream(
AbpTelemetryPaths.ActivityStorage, TelemetryPaths.ActivityStorage,
FileMode.OpenOrCreate, FileMode.OpenOrCreate,
FileAccess.ReadWrite, FileAccess.ReadWrite,
FileShare.None FileShare.None
@ -170,13 +169,13 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
private Task SaveAsync() private Task SaveAsync()
{ {
var json = JsonSerializer.Serialize(_cachedState ?? new ActivityStorageState(), var json = JsonSerializer.Serialize(_cachedState ?? new TelemetryActivityStorageState(),
new JsonSerializerOptions new JsonSerializerOptions
{ {
WriteIndented = true, WriteIndented = true,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase PropertyNamingPolicy = JsonNamingPolicy.CamelCase
}); });
File.WriteAllText(AbpTelemetryPaths.ActivityStorage, json, Encoding.UTF8); File.WriteAllText(TelemetryPaths.ActivityStorage, json, Encoding.UTF8);
return Task.CompletedTask; return Task.CompletedTask;
} }
@ -185,22 +184,22 @@ public class ActivityStorage : IActivityStorage, ISingletonDependency
{ {
try try
{ {
var directory = Path.GetDirectoryName(AbpTelemetryPaths.ActivityStorage); var directory = Path.GetDirectoryName(TelemetryPaths.ActivityStorage);
if (!Directory.Exists(directory) && !directory.IsNullOrEmpty()) if (!Directory.Exists(directory) && !directory.IsNullOrEmpty())
{ {
Directory.CreateDirectory(directory); 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 new JsonSerializerOptions
{ {
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true WriteIndented = true
}); });
File.WriteAllText(AbpTelemetryPaths.ActivityStorage, json, Encoding.UTF8); File.WriteAllText(TelemetryPaths.ActivityStorage, json, Encoding.UTF8);
} }
} }
catch 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; namespace Volo.Abp.Telemetry.Activity.Storage;
public class ActivityStorageState public class TelemetryActivityStorageState
{ {
public DateTimeOffset? ActivitySendTime { get; set; } public DateTimeOffset? ActivitySendTime { get; set; }
public DateTimeOffset? LastDeviceInfoSendTime { 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 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 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 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 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 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 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;
using System.IO; 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 AccessToken => Path.Combine(AbpRootPath, "cli", "access-token.bin");
public static string ComputerId => Path.Combine(AbpRootPath, "cli", "computer-id.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 ActivityStorage => Path.Combine(AbpRootPath, "activity-storage.json");
public static string Studio => Path.Combine(AbpRootPath, "studio"); public static string Studio => Path.Combine(AbpRootPath, "studio");
private readonly static string AbpRootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".abp"); 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 System;
using Volo.Abp.Telemetry.Shared.Enums; using Volo.Abp.Telemetry.Constants.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Contracts; 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; namespace Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
public interface ISoftwareDetector internal interface ISoftwareDetector
{ {
string Name { get; } string Name { get; }
Task<SoftwareInfo?> DetectAsync(); 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; 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; namespace Volo.Abp.Telemetry.EnvironmentInspection.Core;
[ExposeServices(typeof(ISoftwareDetector))] [ExposeServices(typeof(ISoftwareDetector))]
public abstract class SoftwareDetector: ISoftwareDetector , ISingletonDependency abstract internal class SoftwareDetector: ISoftwareDetector , ISingletonDependency
{ {
public abstract string Name { get; } public abstract string Name { get; }
public abstract Task<SoftwareInfo?> DetectAsync(); 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.IO;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; 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.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
@ -31,7 +31,7 @@ internal class AbpStudioDetector : SoftwareDetector
private string? GetAbpStudioUiTheme() private string? GetAbpStudioUiTheme()
{ {
var ideStateJsonPath = Path.Combine( var ideStateJsonPath = Path.Combine(
AbpTelemetryPaths.Studio, TelemetryPaths.Studio,
"ui", "ui",
"ide-state.json" "ide-state.json"
); );
@ -48,7 +48,7 @@ internal class AbpStudioDetector : SoftwareDetector
private string? GetAbpStudioVersion() private string? GetAbpStudioVersion()
{ {
var extensionsFilePath = Path.Combine(AbpTelemetryPaths.Studio, "extensions.json"); var extensionsFilePath = Path.Combine(TelemetryPaths.Studio, "extensions.json");
if (!File.Exists(extensionsFilePath)) 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.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Win32; using Microsoft.Win32;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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.Runtime.InteropServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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.Runtime.InteropServices;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
using Volo.Abp.Telemetry.Constants.Enums;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts; using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.EnvironmentInspection.Core; using Volo.Abp.Telemetry.EnvironmentInspection.Core;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors; 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.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
#if WINDOWS
using System.Management; using System.Management;
#endif
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Volo.Abp.DependencyInjection; 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.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Providers; namespace Volo.Abp.Telemetry.EnvironmentInspection.Providers;
@ -20,7 +22,7 @@ public class DeviceInfoProvider : IDeviceInfoProvider, ISingletonDependency
{ {
_deviceId = new Lazy<Guid>(() => _deviceId = new Lazy<Guid>(() =>
{ {
var deviceIdText = File.ReadAllText(AbpTelemetryPaths.ComputerId); var deviceIdText = File.ReadAllText(TelemetryPaths.ComputerId);
return deviceIdText.To<Guid>(); 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; namespace Volo.Abp.Telemetry.Helpers;
public static class AbpPackageMetadataHelper public static class AbpPackageMetadataReader
{ {
public static AbpPackageMetadata? GetMetaData(Assembly assembly) 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 System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity; using Volo.Abp.Telemetry.Activity;
namespace Volo.Abp.Telemetry; 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.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Activity.Contracts; using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Shared; using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry; namespace Volo.Abp.Telemetry;
public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
{ {
private readonly IActivityStorage _activityStorage; private readonly ITelemetryActivityStorage _telemetryActivityStorage;
private const int ActivityBatchSize = 50; private const int ActivityBatchSize = 50;
public TelemetryDataSender(IActivityStorage activityStorage) public TelemetryDataSender(ITelemetryActivityStorage telemetryActivityStorage)
{ {
_activityStorage = activityStorage; _telemetryActivityStorage = telemetryActivityStorage;
} }
public async Task SendAsync() public async Task SendAsync()
@ -30,7 +29,7 @@ public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
using var httpClient = new HttpClient(); using var httpClient = new HttpClient();
AddAbpAuthenticationTokenAsync(httpClient); AddAbpAuthenticationTokenAsync(httpClient);
var activities = await _activityStorage.GetBufferedActivitiesAsync(); var activities = await _telemetryActivityStorage.GetBufferedActivitiesAsync();
if (activities.Count == 0) if (activities.Count == 0)
{ {
return; return;
@ -41,11 +40,11 @@ public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
{ {
var activityBatch = activities.Skip(i).Take(ActivityBatchSize).ToList(); 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")); new StringContent(JsonSerializer.Serialize(activityBatch), Encoding.UTF8, "application/json"));
} }
await _activityStorage.MarkActivitiesAsSentAsync(); await _telemetryActivityStorage.MarkActivitiesAsSentAsync();
} }
catch catch
{ {
@ -56,12 +55,12 @@ public class TelemetryDataSender : ITelemetryDataSender, IScopedDependency
private static void AddAbpAuthenticationTokenAsync(HttpClient httpClient) private static void AddAbpAuthenticationTokenAsync(HttpClient httpClient)
{ {
if (!File.Exists(AbpTelemetryPaths.AccessToken)) if (!File.Exists(TelemetryPaths.AccessToken))
{ {
return; return;
} }
var accessToken = File.ReadAllText(AbpTelemetryPaths.AccessToken, Encoding.UTF8); var accessToken = File.ReadAllText(TelemetryPaths.AccessToken, Encoding.UTF8);
if (!accessToken.IsNullOrEmpty()) if (!accessToken.IsNullOrEmpty())
{ {
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 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.DependencyInjection;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.Telemetry.Activity; using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Shared; using Volo.Abp.Telemetry.Constants;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry; namespace Volo.Abp.Telemetry;
[ExposeServices(typeof(ITelemetryApplicationInfoContributor))] [ExposeServices(typeof(ITelemetryApplicationInfoContributor))]
public class ModuleInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency public class TelemetryModuleInfoContributor : ITelemetryApplicationInfoContributor, ISingletonDependency
{ {
public Task ContributeAsync(ActivityData activityData) public Task ContributeAsync(ActivityData activityData)
{ {
@ -27,14 +26,4 @@ public class ModuleInfoContributor : ITelemetryApplicationInfoContributor, ISing
return Task.CompletedTask; 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.DependencyInjection;
using Volo.Abp.Telemetry.Activity; using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Activity.Contracts; using Volo.Abp.Telemetry.Activity.Contracts;
using Volo.Abp.Telemetry.Shared; using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Telemetry; namespace Volo.Abp.Telemetry;
public class TelemetryService : ITelemetryService, IScopedDependency public class TelemetryService : ITelemetryService, IScopedDependency
{ {
private readonly IActivityStorage _activityStorage; private readonly ITelemetryActivityStorage _telemetryActivityStorage;
private readonly ITelemetryDataSender _telemetryDataSender; private readonly ITelemetryDataSender _telemetryDataSender;
private readonly IActivityDataProvider _activityDataProvider; private readonly ITelemetryActivityDataProvider _telemetryActivityDataProvider;
public TelemetryService(IActivityStorage activityStorage, ITelemetryDataSender telemetryDataSender, public TelemetryService(ITelemetryActivityStorage telemetryActivityStorage, ITelemetryDataSender telemetryDataSender,
IActivityDataProvider activityDataProvider) ITelemetryActivityDataProvider telemetryActivityDataProvider)
{ {
_activityStorage = activityStorage; _telemetryActivityStorage = telemetryActivityStorage;
_telemetryDataSender = telemetryDataSender; _telemetryDataSender = telemetryDataSender;
_activityDataProvider = activityDataProvider; _telemetryActivityDataProvider = telemetryActivityDataProvider;
} }
public IAsyncDisposable TrackActivity(string activityName, Action<ActivityData>? configure = null) public IAsyncDisposable TrackActivity(string activityName, Action<ActivityData>? configure = null)
@ -54,11 +54,7 @@ public class TelemetryService : ITelemetryService, IScopedDependency
private async Task CheckIfActivitySendTimeIsDueAsync() private async Task CheckIfActivitySendTimeIsDueAsync()
{ {
var lastActivitySendTime = await _activityStorage.GetLastActivitySendTimeAsync(); var lastActivitySendTime = await _telemetryActivityStorage.GetLastActivitySendTimeAsync();
// if (lastActivitySendTime is null)
// {
// await _telemetryDataSender.SendAsync();
// }
if (lastActivitySendTime is not null && lastActivitySendTime < DateTimeOffset.UtcNow.AddDays(-1)) if (lastActivitySendTime is not null && lastActivitySendTime < DateTimeOffset.UtcNow.AddDays(-1))
{ {
@ -70,13 +66,13 @@ public class TelemetryService : ITelemetryService, IScopedDependency
{ {
try try
{ {
await _activityDataProvider.AddExtraInformationAsync(data); await _telemetryActivityDataProvider.AddExtraInformationAsync(data);
await _activityStorage.BufferActivityAsync(data); await _telemetryActivityStorage.BufferActivityAsync(data);
await CheckIfActivitySendTimeIsDueAsync(); await CheckIfActivitySendTimeIsDueAsync();
if (data.ActivityName == ActivityNameConsts.AbpStudioClose) if (data.ActivityName == ActivityNameConsts.AbpStudioClose)
{ {
await _activityStorage.EndSessionAsync(); await _telemetryActivityStorage.EndSessionAsync();
} }
} }
catch 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.Domain.Entities;
using Volo.Abp.Telemetry; using Volo.Abp.Telemetry;
using Volo.Abp.Telemetry.Activity; using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Shared; using Volo.Abp.Telemetry.Constants;
namespace Volo.Abp.Domain.Telemetry; namespace Volo.Abp.Domain.Telemetry;
[ExposeServices(typeof(ITelemetryApplicationInfoContributor))] [ExposeServices(typeof(ITelemetryApplicationInfoContributor))]
public class DomainInfoContributor : ITelemetryApplicationInfoContributor , ISingletonDependency public class TelemetryDomainInfoContributor : ITelemetryApplicationInfoContributor , ISingletonDependency
{ {
public Task ContributeAsync(ActivityData activityData) public Task ContributeAsync(ActivityData activityData)
{ {
Loading…
Cancel
Save