Skip to content

Commit

Permalink
feat: add normal app settings: servicename, projectname,otlpurl (#718)
Browse files Browse the repository at this point in the history
  • Loading branch information
Qinyouzeng authored Jul 19, 2024
1 parent 44db47f commit 01c0081
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 33 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
<MicrosoftPackageVersion Condition="'$(TargetFramework)' == 'net7.0'">7.0.0</MicrosoftPackageVersion>
<MicrosoftPackageVersion Condition="'$(TargetFramework)' == 'net8.0'">8.0.0</MicrosoftPackageVersion>
<MasaFrameworkPackageVersion>1.2.0-preview.2</MasaFrameworkPackageVersion>
<MasaStackSdksPackageVersion>1.1.0-preview.2</MasaStackSdksPackageVersion>
<MasaStackSdksPackageVersion>1.1.1-preview.1</MasaStackSdksPackageVersion>
</PropertyGroup>
</Project>
5 changes: 4 additions & 1 deletion src/Masa.Stack.Components/Configs/ProjectAppOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ internal class ProjectAppOptions
{
public MasaStackProject Project { get; init; }

public ProjectAppOptions(MasaStackProject project)
public string? ServiceVersion { get; init; }

public ProjectAppOptions(MasaStackProject project, string? serviceVersion = null)
{
Project = project;
ServiceVersion = serviceVersion;
}
}
76 changes: 51 additions & 25 deletions src/Masa.Stack.Components/Extensions/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,31 @@ public static class ServiceCollectionExtensions
{
//Consider only one web clearance for now
public static async Task<IServiceCollection> AddMasaStackComponentsAsync(this IServiceCollection services, MasaStackProject project,
string? i18nDirectoryPath = "wwwroot/i18n", string? authHost = null, string? mcHost = null,
string? pmHost = null)
string? i18nDirectoryPath = "wwwroot/i18n",
string? authHost = null, string? mcHost = null, string? pmHost = null)
{
ArgumentNullException.ThrowIfNull(project);
await AddMasaStackComponentsServiceAsync(services, project, i18nDirectoryPath, authHost, mcHost, pmHost);
AddObservable(services, true, project);
return services;
}

public static async Task<IServiceCollection> AddMasaStackComponentsWithNormalAppAsync(this IServiceCollection services, MasaStackProject project, string otlpUrl, string serviceVersion, string projectName = "default",
string? i18nDirectoryPath = "wwwroot/i18n",
string? authHost = null, string? mcHost = null, string? pmHost = null)
{
ArgumentNullException.ThrowIfNull(projectName);
ArgumentNullException.ThrowIfNull(otlpUrl);
ArgumentNullException.ThrowIfNull(serviceVersion);
ArgumentNullException.ThrowIfNull(projectName);
await AddMasaStackComponentsServiceAsync(services, project, i18nDirectoryPath, authHost, mcHost, pmHost, serviceVersion);
AddObservable(services, false, project: project, serviceVersion: serviceVersion, projectName: projectName, otlpUrl: otlpUrl);
return services;
}

private static async Task AddMasaStackComponentsServiceAsync(IServiceCollection services, MasaStackProject project,
string? i18nDirectoryPath = "wwwroot/i18n",
string? authHost = null, string? mcHost = null, string? pmHost = null, string? serviceVersion = null)
{
services.AddScoped<CookieStorage>();
services.AddScoped<JsInitVariables>();
Expand All @@ -24,15 +47,14 @@ public static async Task<IServiceCollection> AddMasaStackComponentsAsync(this IS
options.Mapping(nameof(MasaUser.PhoneNumber), IdentityClaimConsts.PHONE_NUMBER);
options.Mapping(nameof(MasaUser.Email), IdentityClaimConsts.EMAIL);
});

services.AddSingleton(sp => new ProjectAppOptions(project));
services.AddSingleton(sp => new ProjectAppOptions(project, serviceVersion));

services.AddMasaStackConfigAsync(project, MasaStackApp.WEB).ConfigureAwait(false).GetAwaiter().GetResult();
var masaStackConfig = services.GetMasaStackConfig();

authHost = authHost ?? masaStackConfig.GetAuthServiceDomain();
mcHost = mcHost ?? masaStackConfig.GetMcServiceDomain();
pmHost = pmHost ?? masaStackConfig.GetPmServiceDomain();
authHost ??= masaStackConfig.GetAuthServiceDomain();
mcHost ??= masaStackConfig.GetMcServiceDomain();
pmHost ??= masaStackConfig.GetPmServiceDomain();
var redisOption = new RedisConfigurationOptions
{
Servers = new List<RedisServerOptions> {
Expand All @@ -51,23 +73,6 @@ public static async Task<IServiceCollection> AddMasaStackComponentsAsync(this IS
services.AddMcClient(mcHost);
services.AddPmClient(pmHost);

services.AddLogging(configure =>
{
// 创建配置构建器
IConfiguration configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();
var sericeName = masaStackConfig.GetWebId(project);
services.AddObservable(configure, () => new MasaObservableOptions
{
ServiceNameSpace = masaStackConfig.Environment,
ServiceVersion = masaStackConfig.Version,
ServiceName = sericeName.IsNullOrEmpty() ? project.Name : sericeName,
Layer = masaStackConfig.Namespace,
ServiceInstanceId = configuration.GetValue<string>("HOSTNAME")
}, () => masaStackConfig.OtlpUrl, true);
});

await services.AddStackIsolationAsync("");

services.AddObjectStorage(option =>
Expand Down Expand Up @@ -109,8 +114,29 @@ public static async Task<IServiceCollection> AddMasaStackComponentsAsync(this IS
{
masaBuilder.AddI18nForServer(i18nDirectoryPath);
}
}

return services;
private static void AddObservable(IServiceCollection services, bool isMasa, MasaStackProject project, string? serviceVersion = null, string? projectName = null, string? otlpUrl = null)
{
services.AddLogging(configure =>
{
var masaStackConfig = services.GetMasaStackConfig();
// 创建配置构建器
IConfiguration configuration = new ConfigurationBuilder()
.AddEnvironmentVariables()
.Build();

var masaSericeName = isMasa ? masaStackConfig.GetWebId(project) : project.Name;
ArgumentNullException.ThrowIfNull(masaSericeName);
services.AddObservable(configure, () => new MasaObservableOptions
{
ServiceNameSpace = masaStackConfig.Environment,
ServiceVersion = isMasa ? masaStackConfig.Version : serviceVersion!,
ServiceName = masaSericeName,
Layer = isMasa ? masaStackConfig.Namespace : projectName!,
ServiceInstanceId = configuration.GetValue<string>("HOSTNAME")!
}, () => isMasa ? masaStackConfig.OtlpUrl : otlpUrl!, true);
});
}

private static IEnumerable<(string cultureName, Dictionary<string, string> map)> GetLocales()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,10 @@
</ActivatorContent>
<ChildContent>
<MList Nav Routable>
<NavItems Data="@nav" Class="@(GlobalConfig.Mini ? "" : "ml-6")"></NavItems>
</MList>
</ChildContent>
</MMenu>
<NavItems Data="@nav" Class="@(GlobalConfig.Mini ? "" : "ml-6")"></NavItems>
</MList>
</ChildContent>
</MMenu>
}
}
</MList>
Expand Down Expand Up @@ -139,7 +139,7 @@
{
<p>
<MChip Class="mt-3" Small Color="regular2--text" Outlined>
@MasaStackConfig.Version
@(string.IsNullOrEmpty(ProjectApp.ServiceVersion) ? MasaStackConfig.Version : ProjectApp.ServiceVersion)
</MChip>
</p>
}
Expand All @@ -155,6 +155,8 @@
</SIconBtn>

@code {
[Inject]
internal ProjectAppOptions ProjectApp { get; set; } = default!;

[Parameter]
public string? DefaultRoute { get; set; }
Expand Down
2 changes: 1 addition & 1 deletion tests/MasaWebApp/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
Scopes = new List<string> { "offline_access" }
});

await builder.Services.AddMasaStackComponentsAsync(MasaStackProject.Auth);
await builder.Services.AddMasaStackComponentsWithNormalAppAsync(new MasaStackProject(6, "test"), "http://localhost:4317", "1.0.0");

var app = builder.Build();

Expand Down

0 comments on commit 01c0081

Please sign in to comment.