Browse Source

Refactor telemetry constants and improve activity tracking

pull/23059/head
Emre KARA 1 year ago
parent
commit
8a75bf71f2
  1. 11
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs
  2. 72
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/AbpTelemetryModule.cs
  3. 41
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityData.cs
  4. 207
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityDataProvider.cs
  5. 42
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityPropertyNameConstants.cs
  6. 34
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataHelper.cs

11
framework/src/Volo.Abp.Core/Volo/Abp/Modularity/AbpModule.cs

@ -1,11 +1,11 @@
using System;
using System.Reflection;
using System.Threading.Tasks;
using Helpers;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Telemetry;
using Volo.Abp.Telemetry.Activity;
using Volo.Abp.Telemetry.Helpers;
namespace Volo.Abp.Modularity;
@ -113,11 +113,12 @@ public abstract class AbpModule :
{
var telemetryService = context.ServiceProvider.GetRequiredService<ITelemetryService>();
await using var _ = telemetryService.TrackActivity(ActivityNameConsts.ApplicationRun, c =>
await using var _ = telemetryService.TrackActivity(ActivityNameConsts.ApplicationRun, activity =>
{
c.Add("ProjectAssemblyForScan", Assembly.GetCallingAssembly());
c.Add("ProjectId", packageMetadata.ProjectId!);
c.Add("ProjectType", packageMetadata.Role!);
activity.Add(ActivityPropertyNameConstants.Assembly, Assembly.GetCallingAssembly());
activity.Add(ActivityPropertyNameConstants.ProjectId, packageMetadata.ProjectId!);
activity.Add(ActivityPropertyNameConstants.ProjectType, packageMetadata.Role!);
activity.Add(ActivityPropertyNameConstants.SolutionPath, packageMetadata.AbpSlnPath ?? string.Empty);
});
}

72
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/AbpTelemetryModule.cs

@ -1,38 +1,34 @@
using System;
using System.Reflection;
using System.Threading.Tasks;
using Helpers;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.Telemetry.Activity;
namespace Volo.Abp.Telemetry;
public class AbpTelemetryModule : AbpModule
{
public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
var packageMetadata = AbpPackageMetadataHelper.GetMetaData(Assembly.GetCallingAssembly());
if (packageMetadata != null)
{
var activityStorage = context.ServiceProvider.GetRequiredService<IActivityStorage>();
var lastApplicationInfoSendTime = await activityStorage.GetApplicationInfoLastActivitySendTimeAsync(packageMetadata.ProjectId!.To<Guid>());
if (lastApplicationInfoSendTime is null ||
DateTimeOffset.UtcNow - lastApplicationInfoSendTime > TimeSpan.FromDays(7))
{
var telemetryService = context.ServiceProvider.GetRequiredService<ITelemetryService>();
await using var _ = telemetryService.TrackActivity(ActivityNameConsts.ApplicationRun, c =>
{
c.Add("ProjectAssemblyForScan", Assembly.GetCallingAssembly());
c.Add("ProjectId", packageMetadata.ProjectId!);
c.Add("ProjectType", packageMetadata.Role!);
});
}
}
}
}
// using System;
// using System.Reflection;
// using System.Threading.Tasks;
// using Microsoft.Extensions.DependencyInjection;
// using Volo.Abp.Modularity;
// using Volo.Abp.Telemetry.Activity;
// using Volo.Abp.Telemetry.Helpers;
//
// namespace Volo.Abp.Telemetry;
//
// public class AbpTelemetryModule : AbpModule
// {
//
// public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
// {
// var packageMetadata = AbpPackageMetadataHelper.GetMetaData(Assembly.GetCallingAssembly());
//
// if (packageMetadata != null)
// {
//
// var telemetryService = context.ServiceProvider.GetRequiredService<ITelemetryService>();
//
// await using var _ = telemetryService.TrackActivity(ActivityNameConsts.ApplicationRun, activity =>
// {
// activity.Add("ProjectAssemblyForScan", Assembly.GetCallingAssembly());
// activity.Add("ProjectId", packageMetadata.ProjectId!);
// activity.Add("ProjectType", packageMetadata.Role!);
// activity.Add("SolutionPath", packageMetadata.AbpSlnPath ?? string.Empty);
// });
//
// }
// }
//
// }

41
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityData.cs

@ -44,45 +44,4 @@ public class ActivityData : Dictionary<string, object>
ActivityName = activityName;
ActivityDetails = details;
}
}
public static class ActivityPropertyNameConstants
{
public const string SessionId = "SessionId";
public const string IsFirstSession = "IsFirstSession";
public const string DeviceId = "DeviceId";
public const string DeviceType = "DeviceType";
public const string DeviceLanguage = "DeviceLanguage";
public const string OperatingSystem = "OperatingSystem";
public const string CountryIsoCode = "CountryIsoCode";
public const string InstalledSoftwares = "InstalledSoftwares";
public const string ControllerCount = nameof(ApplicationInfo.ControllerCount);
public const string EntityCount = nameof(ApplicationInfo.EntityCount);
public const string AbpModuleCount = nameof(ApplicationInfo.AbpModuleCount);
public const string PermissionCount = nameof(ApplicationInfo.PermissionCount);
public const string AppServiceCount = nameof(ApplicationInfo.AppServiceCount);
public const string ProjectType = "ProjectType";
public const string ProjectId = "ProjectId";
public const string SolutionId = "SolutionId";
public const string Template = "Template";
public const string CreatedAbpStudioVersion = "CreatedAbpStudioVersion";
public const string IsTiered = "IsTiered";
public const string UiFramework = "UiFramework";
public const string DatabaseProvider = "DatabaseProvider";
public const string DatabaseManagementSystem = "DatabaseManagementSystem";
public const string IsSeparateTenantSchema = "IsSeparateTenantSchema";
public const string Theme = "Theme";
public const string ThemeStyle = "ThemeStyle";
public const string MobileFramework = "MobileFramework";
public const string HasPublicWebsite = "HasPublicWebsite";
public const string IncludeTests = "IncludeTests";
public const string MultiTenancy = "MultiTenancy";
public const string DynamicLocalization = "DynamicLocalization";
public const string KubernetesConfiguration = "KubernetesConfiguration";
public const string GrafanaDashboard = "GrafanaDashboard";
public const string SocialLogins = "SocialLogins";
public const string InstalledModules = "InstalledModules";
public const string ProjectAssemblyForScan = "ProjectAssemblyForScan";
public const string SolutionPath = "SolutionPath";
}

207
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityDataProvider.cs

@ -38,18 +38,18 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
{
var (isFirstSession, sessionId) = await _activityStorage.GetOrCreateSessionInfoAsync(cancellationToken);
activityData.Add("SessionId", sessionId);
activityData.Add("IsFirstSession", isFirstSession);
activityData.Add(ActivityPropertyNameConstants.SessionId, sessionId);
activityData.Add(ActivityPropertyNameConstants.IsFirstSession, isFirstSession);
var lastDeviceInfoSendTime = await _activityStorage.GetLastDeviceInfoSendTimeAsync(cancellationToken);
activityData.Add("DeviceId", await _deviceInfoProvider.GetDeviceIdAsync());
activityData.Add(ActivityPropertyNameConstants.DeviceId, await _deviceInfoProvider.GetDeviceIdAsync());
if (lastDeviceInfoSendTime is null || DateTimeOffset.UtcNow - lastDeviceInfoSendTime > TimeSpan.FromDays(7))
{
await AddDeviceInformationAsync(activityData);
}
if (activityData.TryGetValue("ProjectAssemblyForScan", out var value))
if (activityData.TryGetValue(ActivityPropertyNameConstants.Assembly, out var value))
{
var assembly = value as Assembly;
if (assembly != null)
@ -70,7 +70,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
private async Task AddDeviceInformationAsync(ActivityData activityData)
{
activityData.Add(ActivityPropertyNameConstants.DeviceType , _deviceInfoProvider.GetDeviceType());
activityData.Add(ActivityPropertyNameConstants.DeviceType, _deviceInfoProvider.GetDeviceType());
activityData.Add(ActivityPropertyNameConstants.DeviceLanguage, _deviceInfoProvider.GetLanguage());
activityData.Add(ActivityPropertyNameConstants.OperatingSystem, _deviceInfoProvider.GetOperatingSystem());
activityData.Add(ActivityPropertyNameConstants.CountryIsoCode, _deviceInfoProvider.GetCountry());
@ -84,121 +84,138 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
{
var info = _applicationInfoProvider.Scan(assembly);
activityData.Add(nameof(ApplicationInfo.ControllerCount), info.ControllerCount);
activityData.Add(nameof(ApplicationInfo.EntityCount), info.EntityCount);
activityData.Add(nameof(ApplicationInfo.AbpModuleCount), info.AbpModuleCount);
activityData.Add(nameof(ApplicationInfo.PermissionCount), info.PermissionCount);
activityData.Add(nameof(ApplicationInfo.AppServiceCount), info.AppServiceCount);
activityData.Add(ActivityPropertyNameConstants.ProjectType, activityData["ProjectType"]);
activityData.Add(ActivityPropertyNameConstants.ProjectId, activityData["ProjectId"]);
activityData.Add(ActivityPropertyNameConstants.ControllerCount, info.ControllerCount);
activityData.Add(ActivityPropertyNameConstants.EntityCount, info.EntityCount);
activityData.Add(ActivityPropertyNameConstants.AbpModuleCount, info.AbpModuleCount);
activityData.Add(ActivityPropertyNameConstants.PermissionCount, info.PermissionCount);
activityData.Add(ActivityPropertyNameConstants.AppServiceCount, info.AppServiceCount);
activityData.Add(ActivityPropertyNameConstants.ProjectId, activityData[ActivityPropertyNameConstants.ProjectId]);
activityData.Remove("ProjectAssemblyForScan");
activityData.Remove(ActivityPropertyNameConstants.Assembly);
}
private async Task AddSolutionInformationAsync(ActivityData activityData)
{
if (activityData.TryGetValue(ActivityPropertyNameConstants.SolutionPath, out var value))
private async Task AddSolutionInformationAsync(ActivityData activityData)
{
var solutionPath = value as string;
if (string.IsNullOrEmpty(solutionPath) || !File.Exists(solutionPath))
{
return;
}
var solutionJson = File.ReadAllText(solutionPath);
using var solutionDoc = JsonDocument.Parse(solutionJson);
var root = solutionDoc.RootElement;
if (!root.TryGetProperty("id", out var idElement) || !Guid.TryParse(idElement.GetString(), out var solutionId))
if (activityData.TryGetValue(ActivityPropertyNameConstants.SolutionPath, out var value))
{
return;
}
var solutionPath = value as string;
if (string.IsNullOrEmpty(solutionPath) || !File.Exists(solutionPath))
{
return;
}
activityData.Add(ActivityPropertyNameConstants.SolutionId, solutionId);
var solutionJson = File.ReadAllText(solutionPath);
using var solutionDoc = JsonDocument.Parse(solutionJson);
var lastSolutionInfoSendTime = await _activityStorage.GetLastSolutionInfoSendTimeAsync(solutionId);
var root = solutionDoc.RootElement;
if (lastSolutionInfoSendTime is null || DateTimeOffset.UtcNow - lastSolutionInfoSendTime > TimeSpan.FromDays(7))
{
if (root.TryGetProperty("creatingStudioConfiguration", out var config))
if (!root.TryGetProperty("id", out var idElement) ||
!Guid.TryParse(idElement.GetString(), out var solutionId))
{
activityData.Add(ActivityPropertyNameConstants.Template, GetSolutionTemplate(config.GetProperty("template").GetString()));
activityData.Add(ActivityPropertyNameConstants.CreatedAbpStudioVersion, config.GetProperty("createdAbpStudioVersion").GetString()!);
activityData.Add(ActivityPropertyNameConstants.IsTiered, config.GetProperty("Tiered").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.UiFramework, GetUiFramework(config.GetProperty("uiFramework").GetString()));
activityData.Add(ActivityPropertyNameConstants.DatabaseProvider, GetDatabaseProvider(config.GetProperty("databaseProvider").GetString()));
activityData.Add(ActivityPropertyNameConstants.DatabaseManagementSystem, GetDbms(config.GetProperty("databaseManagementSystem").GetString()));
activityData.Add(ActivityPropertyNameConstants.IsSeparateTenantSchema, config.GetProperty("separateTenantSchema").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.Theme, GetUiTheme(config.GetProperty("theme").GetString()));
activityData.Add(ActivityPropertyNameConstants.ThemeStyle, GetUiThemeStyle(config.GetProperty("themeStyle").GetString()));
activityData.Add(ActivityPropertyNameConstants.MobileFramework, GetMobileApp(config.GetProperty("mobileFramework").GetString()));
activityData.Add(ActivityPropertyNameConstants.HasPublicWebsite, config.GetProperty("publicWebsite").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.IncludeTests, config.GetProperty("includeTests").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.MultiTenancy, config.GetProperty("multiTenancy").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.DynamicLocalization, config.GetProperty("dynamicLocalization").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.KubernetesConfiguration, config.GetProperty("kubernetesConfiguration").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.GrafanaDashboard, config.GetProperty("grafanaDashboard").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.SocialLogins, config.GetProperty("socialLogin").GetBoolean());
return;
}
var modules = new List<SolutionModuleInstallationInfo>();
activityData.Add(ActivityPropertyNameConstants.SolutionId, solutionId);
var lastSolutionInfoSendTime = await _activityStorage.GetLastSolutionInfoSendTimeAsync(solutionId);
if (root.TryGetProperty("modules", out var modulesElement) && modulesElement.ValueKind == JsonValueKind.Object)
if (lastSolutionInfoSendTime is null ||
DateTimeOffset.UtcNow - lastSolutionInfoSendTime > TimeSpan.FromDays(7))
{
foreach (var moduleProperty in modulesElement.EnumerateObject())
if (root.TryGetProperty("creatingStudioConfiguration", out var config))
{
var name = moduleProperty.Name;
if (!moduleProperty.Value.TryGetProperty("path", out var pathElement))
{
continue;
}
var path = pathElement.GetString();
if (path.IsNullOrEmpty() || !File.Exists(path))
{
continue;
}
activityData.Add(ActivityPropertyNameConstants.Template,
MapSolutionTemplate(config.GetProperty("template").GetString()));
activityData.Add(ActivityPropertyNameConstants.CreatedAbpStudioVersion,
config.GetProperty("createdAbpStudioVersion").GetString()!);
activityData.Add(ActivityPropertyNameConstants.IsTiered, config.GetProperty("Tiered").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.UiFramework,
MapUiFramework(config.GetProperty("uiFramework").GetString()));
activityData.Add(ActivityPropertyNameConstants.DatabaseProvider,
MapDatabaseProvider(config.GetProperty("databaseProvider").GetString()));
activityData.Add(ActivityPropertyNameConstants.DatabaseManagementSystem,
MapDbms(config.GetProperty("databaseManagementSystem").GetString()));
activityData.Add(ActivityPropertyNameConstants.IsSeparateTenantSchema,
config.GetProperty("separateTenantSchema").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.Theme,
MapUiTheme(config.GetProperty("theme").GetString()));
activityData.Add(ActivityPropertyNameConstants.ThemeStyle,
MapUiThemeStyle(config.GetProperty("themeStyle").GetString()));
activityData.Add(ActivityPropertyNameConstants.MobileFramework,
MapMobileApp(config.GetProperty("mobileFramework").GetString()));
activityData.Add(ActivityPropertyNameConstants.HasPublicWebsite,
config.GetProperty("publicWebsite").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.IncludeTests,
config.GetProperty("includeTests").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.MultiTenancy,
config.GetProperty("multiTenancy").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.DynamicLocalization,
config.GetProperty("dynamicLocalization").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.KubernetesConfiguration,
config.GetProperty("kubernetesConfiguration").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.GrafanaDashboard,
config.GetProperty("grafanaDashboard").GetBoolean());
activityData.Add(ActivityPropertyNameConstants.SocialLogins,
config.GetProperty("socialLogin").GetBoolean());
}
var moduleJson = File.ReadAllText(path);
using var moduleDoc = JsonDocument.Parse(moduleJson);
var modules = new List<SolutionModuleInstallationInfo>();
if (!moduleDoc.RootElement.TryGetProperty("imports", out var importsElement) || importsElement.ValueKind != JsonValueKind.Object)
if (root.TryGetProperty("modules", out var modulesElement) &&
modulesElement.ValueKind == JsonValueKind.Object)
{
foreach (var moduleProperty in modulesElement.EnumerateObject())
{
continue;
}
var name = moduleProperty.Name;
if (!moduleProperty.Value.TryGetProperty("path", out var pathElement))
{
continue;
}
foreach (var importProperty in importsElement.EnumerateObject())
{
var importValue = importProperty.Value;
var path = pathElement.GetString();
if (path.IsNullOrEmpty() || !File.Exists(path))
{
continue;
}
var version = importValue.GetProperty("version").GetString();
var creationTime = importValue.TryGetProperty("creationTime", out var ct)
? DateTimeOffset.Parse(ct.GetString()!)
: (DateTimeOffset?)null;
var moduleJson = File.ReadAllText(path);
using var moduleDoc = JsonDocument.Parse(moduleJson);
if (modules.Any(x => x.ModuleName == name && x.Version == version))
if (!moduleDoc.RootElement.TryGetProperty("imports", out var importsElement) ||
importsElement.ValueKind != JsonValueKind.Object)
{
continue;
}
modules.Add(new SolutionModuleInstallationInfo
foreach (var importProperty in importsElement.EnumerateObject())
{
ModuleName = name,
Version = version,
InstallationTime = creationTime
});
var importValue = importProperty.Value;
var version = importValue.GetProperty("version").GetString();
var creationTime = importValue.TryGetProperty("creationTime", out var ct)
? DateTimeOffset.Parse(ct.GetString()!)
: (DateTimeOffset?)null;
if (modules.Any(x => x.ModuleName == name && x.Version == version))
{
continue;
}
modules.Add(new SolutionModuleInstallationInfo
{
ModuleName = name, Version = version, InstallationTime = creationTime
});
}
}
}
activityData.Add(ActivityPropertyNameConstants.InstalledModules, modules);
activityData.Add(ActivityPropertyNameConstants.InstalledModules, modules);
}
}
}
}
}
private Dbms GetDbms(string? databaseManagementSystem)
private Dbms MapDbms(string? databaseManagementSystem)
{
return databaseManagementSystem switch
{
@ -212,7 +229,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
};
}
private UiTheme GetUiTheme(string? theme)
private UiTheme MapUiTheme(string? theme)
{
return theme switch
{
@ -224,7 +241,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
};
}
private MobileApp GetMobileApp(string? mobileFramework)
private MobileApp MapMobileApp(string? mobileFramework)
{
return mobileFramework switch
{
@ -235,7 +252,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
};
}
private UiThemeStyle GetUiThemeStyle(string? themeStyle)
private UiThemeStyle MapUiThemeStyle(string? themeStyle)
{
return themeStyle switch
{
@ -247,7 +264,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
};
}
private SolutionTemplate GetSolutionTemplate(string? templateName)
private SolutionTemplate MapSolutionTemplate(string? templateName)
{
return templateName switch
{
@ -258,7 +275,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
};
}
private UiFramework GetUiFramework(string? uiFramework)
private UiFramework MapUiFramework(string? uiFramework)
{
return uiFramework switch
{
@ -273,7 +290,7 @@ public class ActivityDataProvider : IActivityDataProvider, IScopedDependency
};
}
private DatabaseProvider GetDatabaseProvider(string? databaseProvider)
private DatabaseProvider MapDatabaseProvider(string? databaseProvider)
{
return databaseProvider switch
{

42
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/ActivityPropertyNameConstants.cs

@ -0,0 +1,42 @@
namespace Volo.Abp.Telemetry.Activity;
public static class ActivityPropertyNameConstants
{
public const string SessionId = nameof(SessionId);
public const string IsFirstSession = nameof(IsFirstSession);
public const string DeviceId = nameof(DeviceId);
public const string DeviceType = nameof(DeviceType);
public const string DeviceLanguage = nameof(DeviceLanguage);
public const string OperatingSystem = nameof(OperatingSystem);
public const string CountryIsoCode = nameof(CountryIsoCode);
public const string InstalledSoftwares = nameof(InstalledSoftwares);
public const string ControllerCount = nameof(ControllerCount);
public const string EntityCount = nameof(EntityCount);
public const string AbpModuleCount = nameof(AbpModuleCount);
public const string PermissionCount = nameof(PermissionCount);
public const string AppServiceCount = nameof(AppServiceCount);
public const string ProjectType = nameof(ProjectType);
public const string ProjectId = nameof(ProjectId);
public const string SolutionId = nameof(SolutionId);
public const string Template = nameof(Template);
public const string CreatedAbpStudioVersion = nameof(CreatedAbpStudioVersion);
public const string IsTiered = nameof(IsTiered);
public const string UiFramework = nameof(UiFramework);
public const string DatabaseProvider = nameof(DatabaseProvider);
public const string DatabaseManagementSystem = nameof(DatabaseManagementSystem);
public const string IsSeparateTenantSchema = nameof(IsSeparateTenantSchema);
public const string Theme = nameof(Theme);
public const string ThemeStyle = nameof(ThemeStyle);
public const string MobileFramework = nameof(MobileFramework);
public const string HasPublicWebsite = nameof(HasPublicWebsite);
public const string IncludeTests = nameof(IncludeTests);
public const string MultiTenancy = nameof(MultiTenancy);
public const string DynamicLocalization = nameof(DynamicLocalization);
public const string KubernetesConfiguration = nameof(KubernetesConfiguration);
public const string GrafanaDashboard = nameof(GrafanaDashboard);
public const string SocialLogins = nameof(SocialLogins);
public const string InstalledModules = nameof(InstalledModules);
public const string ProjectAssemblyForScan = nameof(ProjectAssemblyForScan);
public const string SolutionPath = nameof(SolutionPath);
public const string Assembly = nameof(Assembly);
}

34
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Helpers/AbpPackageMetadataHelper.cs

@ -5,7 +5,7 @@ using System.Linq;
using System.Reflection;
using System.Text.Json;
namespace Helpers;
namespace Volo.Abp.Telemetry.Helpers;
public static class AbpPackageMetadataHelper
{
@ -22,9 +22,19 @@ public static class AbpPackageMetadataHelper
var abppkgPath = Directory.GetFiles(dir, "*.abppkg").FirstOrDefault();
if (abppkgPath == null)
{
return null;
}
return ReadOrCreateMetadata(abppkgPath);
var metadata = ReadOrCreateMetadata(abppkgPath);
var abpslnPath = FindAbpSlnFile(dir);
if (!abpslnPath.IsNullOrEmpty())
{
metadata.AbpSlnPath = abpslnPath;
}
return metadata;
}
private static AbpPackageMetadata ReadOrCreateMetadata(string path)
@ -57,11 +67,29 @@ public static class AbpPackageMetadataHelper
return metadata;
}
private static string? FindAbpSlnFile(string startingDir)
{
var currentDir = new DirectoryInfo(startingDir);
while (currentDir != null)
{
var abpslnFile = currentDir.GetFiles("*.abpsln").FirstOrDefault();
if (abpslnFile != null)
{
return abpslnFile.FullName;
}
currentDir = currentDir.Parent;
}
return null;
}
}
public class AbpPackageMetadata
{
public string? ProjectId { get; set; }
public string? Role { get; set; }
public string? AbpSlnPath { get; set; }
}
Loading…
Cancel
Save