Browse Source

Merge pull request #24305 from abpframework/berkan/data-collection-bug-fix

Revise data collection codes 2
pull/24312/head
SALİH ÖZKARA 2 months ago
committed by GitHub
parent
commit
be227283f3
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 9
      framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs
  2. 5
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Activity/Providers/TelemetrySolutionInfoEnricher.cs
  3. 18
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Activity/Storage/TelemetryActivityStorage.cs
  4. 1
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Constants/ActivityPropertyNames.cs
  5. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Constants/DeviceManager.cs
  6. 10
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs
  7. 10
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs
  8. 6
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Helpers/AbpPackageMetadataReader.cs
  9. 36
      framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/TelemetryService.cs

9
framework/src/Volo.Abp.Core/Volo/Abp/AbpApplicationBase.cs

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.Configuration;
@ -200,7 +201,13 @@ public abstract class AbpApplicationBase : IAbpApplication
using var scope = ServiceProvider.CreateScope();
var abpHostEnvironment = scope.ServiceProvider.GetRequiredService<IAbpHostEnvironment>();
var configuration = scope.ServiceProvider.GetRequiredService<IConfiguration>();
return abpHostEnvironment.IsDevelopment() && configuration.GetValue<bool?>("Abp:Telemetry:IsEnabled") != false;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
return abpHostEnvironment.IsDevelopment() && configuration.GetValue<bool?>("Abp:Telemetry:IsEnabled") != false;
}
return false;
}
//TODO: We can extract a new class for this

5
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Activity/Providers/TelemetrySolutionInfoEnricher.cs

@ -114,7 +114,10 @@ internal sealed class TelemetrySolutionInfoEnricher : TelemetryActivityEventEnri
}
var moduleJsonFileContent = File.ReadAllText(modulePath);
using var moduleDoc = JsonDocument.Parse(moduleJsonFileContent);
using var moduleDoc = JsonDocument.Parse(moduleJsonFileContent, new JsonDocumentOptions
{
AllowTrailingCommas = true
});
if (!moduleDoc.RootElement.TryGetProperty("imports", out var imports))
{

18
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Activity/Storage/TelemetryActivityStorage.cs

@ -25,6 +25,8 @@ public class TelemetryActivityStorage : ITelemetryActivityStorage, ISingletonDep
public TelemetryActivityStorage()
{
CreateDirectoryIfNotExist();
DeleteExistingOldInformation();
State = LoadState();
}
@ -166,6 +168,22 @@ public class TelemetryActivityStorage : ITelemetryActivityStorage, ISingletonDep
}
}
private static void DeleteExistingOldInformation()
{
try
{
var file = new FileInfo(TelemetryPaths.ActivityStorage);
if (file.Exists && file.CreationTime < new DateTime(2025, 12, 01))
{
file.Delete();
}
}
catch
{
// Ignored
}
}
private static TelemetryActivityStorageState LoadState()
{
try

1
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Constants/ActivityPropertyNames.cs

@ -12,6 +12,7 @@ public static class ActivityPropertyNames
public const string IpAddress = "IpAddress";
public const string IsFirstSession = "IsFirstSession";
public const string DeviceId = "DeviceId";
public const string UserDeviceId = "UserDeviceId";
public const string DeviceLanguage = "DeviceLanguage";
public const string OperatingSystem = "OperatingSystem";
public const string CountryIsoCode = "CountryIsoCode";

8
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Constants/DeviceManager.cs

@ -133,7 +133,7 @@ static internal class DeviceManager
{
try
{
return GetProcessorIdForWindows();
return GetBaseBoardSerialNumberForWindows();
}
catch
{
@ -142,10 +142,10 @@ static internal class DeviceManager
return GetWindowsMachineUniqueId();
}
private static string GetProcessorIdForWindows()
private static string GetBaseBoardSerialNumberForWindows()
{
using (var managementObjectSearcher =
new System.Management.ManagementObjectSearcher("SELECT ProcessorId FROM Win32_Processor"))
new System.Management.ManagementObjectSearcher("SELECT SerialNumber FROM Win32_BaseBoard"))
{
using (var searcherObj = managementObjectSearcher.Get())
{
@ -156,7 +156,7 @@ static internal class DeviceManager
var managementObjectEnumerator = searcherObj.GetEnumerator();
managementObjectEnumerator.MoveNext();
return managementObjectEnumerator.Current.GetPropertyValue("ProcessorId").ToString()!;
return managementObjectEnumerator.Current.GetPropertyValue("SerialNumber").ToString()!;
}
}
}

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

@ -40,7 +40,10 @@ internal sealed class AbpStudioDetector : SoftwareDetector
return null;
}
using var fs = new FileStream(ideStateJsonPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using var doc = JsonDocument.Parse(fs);
using var doc = JsonDocument.Parse(fs, new JsonDocumentOptions
{
AllowTrailingCommas = true
});
return doc.RootElement.TryGetProperty("theme", out var themeElement) ? themeElement.GetString() : null;
}
@ -55,7 +58,10 @@ internal sealed class AbpStudioDetector : SoftwareDetector
}
using var fs = new FileStream(extensionsFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using var doc = JsonDocument.Parse(fs);
using var doc = JsonDocument.Parse(fs, new JsonDocumentOptions
{
AllowTrailingCommas = true
});
if (doc.RootElement.TryGetProperty("Extensions", out var extensionsElement) &&
extensionsElement.ValueKind == JsonValueKind.Array)

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

@ -77,7 +77,10 @@ internal sealed class VisualStudioCodeDetector : SoftwareDetector
{
try
{
using var jsonDoc = JsonDocument.Parse(File.ReadAllText(productJson));
using var jsonDoc = JsonDocument.Parse(File.ReadAllText(productJson), new JsonDocumentOptions
{
AllowTrailingCommas = true
});
var root = jsonDoc.RootElement;
if (root.TryGetProperty("version", out var versionProp))
{
@ -105,7 +108,10 @@ internal sealed class VisualStudioCodeDetector : SoftwareDetector
{
try
{
using var json = JsonDocument.Parse( File.ReadAllText(settingsPath));
using var json = JsonDocument.Parse( File.ReadAllText(settingsPath), new JsonDocumentOptions
{
AllowTrailingCommas = true
});
var root = json.RootElement;
if (root.TryGetProperty("theme", out var themeProp))
{

6
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/Helpers/AbpPackageMetadataReader.cs

@ -49,11 +49,13 @@ static internal class AbpProjectMetadataReader
private static AbpProjectMetaData ReadOrCreateMetadata(string packagePath)
{
var fileContent = File.ReadAllText(packagePath);
var metadata = new AbpProjectMetaData();
using var document = JsonDocument.Parse(fileContent);
using var document = JsonDocument.Parse(fileContent, new JsonDocumentOptions
{
AllowTrailingCommas = true
});
var root = document.RootElement;
if (TryGetProjectId(root,out var projectId))

36
framework/src/Volo.Abp.Core/Volo/Abp/Internal/Telemetry/TelemetryService.cs

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Internal.Telemetry.Activity.Contracts;
using Volo.Abp.Internal.Telemetry.Constants;
@ -11,17 +12,11 @@ namespace Volo.Abp.Internal.Telemetry;
public class TelemetryService : ITelemetryService, IScopedDependency
{
private readonly ITelemetryActivitySender _telemetryActivitySender;
private readonly ITelemetryActivityEventBuilder _telemetryActivityEventBuilder;
private readonly ITelemetryActivityStorage _telemetryActivityStorage;
private readonly IServiceScopeFactory _serviceScopeFactory;
public TelemetryService(ITelemetryActivitySender telemetryActivitySender,
ITelemetryActivityEventBuilder telemetryActivityEventBuilder,
ITelemetryActivityStorage telemetryActivityStorage)
public TelemetryService(IServiceScopeFactory serviceScopeFactory)
{
_telemetryActivitySender = telemetryActivitySender;
_telemetryActivityEventBuilder = telemetryActivityEventBuilder;
_telemetryActivityStorage = telemetryActivityStorage;
_serviceScopeFactory = serviceScopeFactory;
}
@ -74,24 +69,37 @@ public class TelemetryService : ITelemetryService, IScopedDependency
{
_ = Task.Run(async () =>
{
await BuildAndSendActivityAsync(context);
using var scope = _serviceScopeFactory.CreateScope();
var telemetryActivityEventBuilder = scope.ServiceProvider.GetRequiredService<ITelemetryActivityEventBuilder>();
var telemetryActivityStorage = scope.ServiceProvider.GetRequiredService<ITelemetryActivityStorage>();
var telemetryActivitySender = scope.ServiceProvider.GetRequiredService<ITelemetryActivitySender>();
await BuildAndSendActivityAsync(context,
telemetryActivityEventBuilder,
telemetryActivityStorage,
telemetryActivitySender);
});
return Task.CompletedTask;
}
private async Task BuildAndSendActivityAsync(ActivityContext context)
private static async Task BuildAndSendActivityAsync(
ActivityContext context,
ITelemetryActivityEventBuilder telemetryActivityEventBuilder,
ITelemetryActivityStorage telemetryActivityStorage,
ITelemetryActivitySender telemetryActivitySender)
{
try
{
var activityEvent = await _telemetryActivityEventBuilder.BuildAsync(context);
var activityEvent = await telemetryActivityEventBuilder.BuildAsync(context);
if (activityEvent is null)
{
return;
}
_telemetryActivityStorage.SaveActivity(activityEvent);
await _telemetryActivitySender.TrySendQueuedActivitiesAsync();
telemetryActivityStorage.SaveActivity(activityEvent);
await telemetryActivitySender.TrySendQueuedActivitiesAsync();
}
catch
{

Loading…
Cancel
Save