Browse Source

Refactor telemetry detectors and simplify solution info parsing

pull/23059/head
Emre KARA 1 year ago
parent
commit
7bd6850004
  1. 102
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/SolutionInfoProvider.cs
  2. 16
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/AbpStudioDetector.cs
  3. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/ChromeDetector.cs
  4. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/DotnetSdkDetector.cs
  5. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/FireFoxDetector.cs
  6. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/MsEdgeDetector.cs
  7. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/NodeJsDetector.cs
  8. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/OperatingSystemDetector.cs
  9. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/RiderDetector.cs
  10. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioCodeDetector.cs
  11. 3
      framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/EnvironmentInspection/Detectors/VisualStudioDetector.cs

102
framework/src/Volo.Abp.Core/Volo/Abp/Telemetry/Activity/SolutionInfoProvider.cs

@ -7,9 +7,7 @@ using System.Net.Http.Headers;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.Activity;
@ -57,19 +55,19 @@ public class SolutionInfoProvider : ISolutionInfoProvider, ISingletonDependency
{
var map = new (string Key, Action<JsonElement> Apply)[]
{
("template", v => dict[ActivityPropertyName.Template] = MapSolutionTemplate(v.GetString())),
("template", v => dict[ActivityPropertyName.Template] = v.GetString() ?? string.Empty),
("createdAbpStudioVersion", v => dict[ActivityPropertyName.CreatedAbpStudioVersion] = v.GetString()!),
("multiTenancy", v => dict[ActivityPropertyName.MultiTenancy] = ParseBool(v)),
("uiFramework", v => dict[ActivityPropertyName.UiFramework] = MapUiFramework(v.GetString())),
("databaseProvider", v => dict[ActivityPropertyName.DatabaseProvider] = MapDatabaseProvider(v.GetString())),
("theme", v => dict[ActivityPropertyName.Theme] = MapUiTheme(v.GetString())),
("themeStyle", v => dict[ActivityPropertyName.ThemeStyle] = MapUiThemeStyle(v.GetString())),
("uiFramework", v => dict[ActivityPropertyName.UiFramework] = v.GetString() ?? string.Empty),
("databaseProvider", v => dict[ActivityPropertyName.DatabaseProvider] = v.GetString() ?? string.Empty),
("theme", v => dict[ActivityPropertyName.Theme] = v.GetString() ?? string.Empty),
("themeStyle", v => dict[ActivityPropertyName.ThemeStyle] = v.GetString() ?? string.Empty),
("publicWebsite", v => dict[ActivityPropertyName.HasPublicWebsite] = ParseBool(v)),
("tiered", v => dict[ActivityPropertyName.IsTiered] = ParseBool(v)),
("socialLogin", v => dict[ActivityPropertyName.SocialLogins] = ParseBool(v)),
("databaseManagementSystem", v => dict[ActivityPropertyName.DatabaseManagementSystem] = MapDbms(v.GetString())),
("databaseManagementSystem", v => dict[ActivityPropertyName.DatabaseManagementSystem] = v.GetString() ?? string.Empty),
("separateTenantSchema", v => dict[ActivityPropertyName.IsSeparateTenantSchema] = ParseBool(v)),
("mobileFramework", v => dict[ActivityPropertyName.MobileFramework] = MapMobileApp(v.GetString())),
("mobileFramework", v => dict[ActivityPropertyName.MobileFramework] = v.GetString() ?? string.Empty),
("includeTests", v => dict[ActivityPropertyName.IncludeTests] = ParseBool(v)),
("dynamicLocalization", v => dict[ActivityPropertyName.DynamicLocalization] = ParseBool(v)),
("kubernetesConfiguration", v => dict[ActivityPropertyName.KubernetesConfiguration] = ParseBool(v)),
@ -185,90 +183,4 @@ public class SolutionInfoProvider : ISolutionInfoProvider, ISingletonDependency
return 0;
}
}
protected virtual UiTheme MapUiTheme(string? theme)
{
return theme switch
{
"none" => UiTheme.None,
"basic" => UiTheme.Basic,
"leptonx" => UiTheme.LeptonX,
"leptonx-lite" => UiTheme.LeptonXLite,
_ => UiTheme.Unknown
};
}
protected virtual UiThemeStyle MapUiThemeStyle(string? style)
{
return style switch
{
"dim" => UiThemeStyle.Dim,
"style" => UiThemeStyle.System,
"dark" => UiThemeStyle.Dark,
"light" => UiThemeStyle.Light,
_ => UiThemeStyle.Unknown
};
}
protected virtual SolutionTemplate MapSolutionTemplate(string? template)
{
return template switch
{
"microservice" => SolutionTemplate.Microservice,
"app-nolayers" => SolutionTemplate.AppNoLayers,
"app" => SolutionTemplate.AppLayered,
_ => SolutionTemplate.Unknown
};
}
protected virtual UiFramework MapUiFramework(string? framework)
{
return framework switch
{
"mvc" => UiFramework.MvcRazorPages,
"blazor" => UiFramework.BlazorWasm,
"angular" => UiFramework.Angular,
"blazor-server" => UiFramework.BlazorServer,
"blazor-webapp" => UiFramework.BlazorWebApp,
"maui-blazor" => UiFramework.BlazorMaUI,
"none" => UiFramework.None,
_ => UiFramework.Unknown
};
}
protected virtual DatabaseProvider MapDatabaseProvider(string? provider)
{
return provider switch
{
"ef" => DatabaseProvider.EfCore,
"mongodb" => DatabaseProvider.MongoDb,
"none" => DatabaseProvider.None,
_ => DatabaseProvider.Unknown
};
}
protected virtual Dbms MapDbms(string? dbms)
{
return dbms switch
{
"mysql" => Dbms.MySql,
"oracle" => Dbms.Oracle,
"oracle-devart" => Dbms.OracleDevart,
"postgresql" => Dbms.PostgreSql,
"sqlserver" => Dbms.SqlServer,
"sqlite" => Dbms.Sqlite,
_ => Dbms.Unknown
};
}
protected virtual MobileApp MapMobileApp(string? mobile)
{
return mobile switch
{
"maui" => MobileApp.Maui,
"react-native" => MobileApp.ReactNative,
"none" => MobileApp.None,
_ => MobileApp.Unknown
};
}
}

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

@ -2,14 +2,13 @@
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
public class AbpStudioDetector : SoftwareDetector
internal class AbpStudioDetector : SoftwareDetector
{
public override string Name => "Abp Studio";
@ -58,6 +57,17 @@ public class AbpStudioDetector : SoftwareDetector
var json = File.ReadAllText(extensionsFilePath);
using var doc = JsonDocument.Parse(json);
return doc.RootElement.TryGetProperty("version", out var versionElement) ? versionElement.GetString() : null;
if (doc.RootElement.TryGetProperty("Extensions", out var extensionsElement) &&
extensionsElement.ValueKind == JsonValueKind.Array &&
extensionsElement.GetArrayLength() > 0)
{
var firstExtension = extensionsElement[0];
if (firstExtension.TryGetProperty("version", out var versionElement))
{
return versionElement.GetString();
}
}
return null;
}
}

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

@ -2,13 +2,12 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
public class ChromeDetector : SoftwareDetector
internal class ChromeDetector : SoftwareDetector
{
public override string Name => "Chrome";

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

@ -1,12 +1,11 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class DotnetSdkDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class DotnetSdkDetector : SoftwareDetector
{
public override string Name => "DotnetSdk";

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

@ -2,13 +2,12 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class FireFoxDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class FireFoxDetector : SoftwareDetector
{
public override string Name => "Firefox";
public async override Task<SoftwareInfo?> DetectAsync()

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

@ -2,13 +2,12 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class MsEdgeDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class MsEdgeDetector : SoftwareDetector
{
public override string Name => "MsEdge";
public async override Task<SoftwareInfo?> DetectAsync()

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

@ -1,12 +1,11 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class NodeJsDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class NodeJsDetector : SoftwareDetector
{
public override string Name => "Node.js";

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

@ -3,13 +3,12 @@ using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Microsoft.Win32;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class OperatingSystemDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class OperatingSystemDetector : SoftwareDetector
{
public override string Name => RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Windows" :
RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "macOS" : "Linux";

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

@ -4,13 +4,12 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Xml.Linq;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class RiderDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class RiderDetector : SoftwareDetector
{
public override string Name => "Rider";

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

@ -4,13 +4,12 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Text.Json;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class VisualStudioCodeDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class VisualStudioCodeDetector : SoftwareDetector
{
public override string Name => "Visual Studio Code";

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

@ -4,13 +4,12 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml.Linq;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Telemetry.EnvironmentInspection.Contracts;
using Volo.Abp.Telemetry.Shared.Enums;
namespace Volo.Abp.Telemetry.EnvironmentInspection.Detectors;
internal class VisualStudioDetector : SoftwareDetector, ISoftwareDetector, ISingletonDependency
internal class VisualStudioDetector : SoftwareDetector
{
public override string Name => "Visual Studio";

Loading…
Cancel
Save