Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"jetbrains.resharper.globaltools": {
"version": "2025.3.0.3",
"version": "2025.3.3",
"commands": [
"jb"
],
Expand Down
112 changes: 89 additions & 23 deletions src/Bootstrap/src/AutoConfiguration/BootstrapScanner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@

namespace Steeltoe.Bootstrap.AutoConfiguration;

internal sealed class BootstrapScanner
internal sealed partial class BootstrapScanner
{
private readonly HostBuilderWrapper _wrapper;
private readonly AssemblyLoader _loader;
Expand Down Expand Up @@ -93,21 +93,21 @@ private void WireConfigServer()
{
_wrapper.AddConfigServer(_loggerFactory);

_logger.LogInformation("Configured Config Server configuration provider");
LogConfigServerConfigured();
}

private void WireCloudFoundryConfiguration()
{
_wrapper.AddCloudFoundryConfiguration(_loggerFactory);

_logger.LogInformation("Configured Cloud Foundry configuration provider");
LogCloudFoundryConfigured();
}

private void WireRandomValueProvider()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.AddRandomValueSource(_loggerFactory));

_logger.LogInformation("Configured random value configuration provider");
LogRandomValueConfigured();
}

private void WireSpringBootProvider()
Expand All @@ -117,21 +117,21 @@ private void WireSpringBootProvider()
string[] args = Environment.GetCommandLineArgs().Skip(1).ToArray();
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.AddSpringBootFromCommandLine(args, _loggerFactory));

_logger.LogInformation("Configured Spring Boot configuration provider");
LogSpringBootConfigured();
}

private void WireDecryptionProvider()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.AddDecryption(_loggerFactory));

_logger.LogInformation("Configured decryption configuration provider");
LogDecryptionConfigured();
}

private void WirePlaceholderResolver()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.AddPlaceholderResolver(_loggerFactory));

_logger.LogInformation("Configured placeholder configuration provider");
LogPlaceholderConfigured();
}

private void WireConnectors()
Expand All @@ -150,52 +150,52 @@ private void WireCosmosDbConnector()
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.ConfigureCosmosDb());
_wrapper.ConfigureServices((host, services) => services.AddCosmosDb(host.Configuration));

_logger.LogInformation("Configured CosmosDB connector");
LogCosmosDbConfigured();
}

private void WireMongoDbConnector()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.ConfigureMongoDb());
_wrapper.ConfigureServices((host, services) => services.AddMongoDb(host.Configuration));

_logger.LogInformation("Configured MongoDB connector");
LogMongoDbConfigured();
}

private void WireMySqlConnector()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.ConfigureMySql());
_wrapper.ConfigureServices((host, services) => services.AddMySql(host.Configuration));

_logger.LogInformation("Configured MySQL connector");
LogMySqlConfigured();
}

private void WirePostgreSqlConnector()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.ConfigurePostgreSql());
_wrapper.ConfigureServices((host, services) => services.AddPostgreSql(host.Configuration));

_logger.LogInformation("Configured PostgreSQL connector");
LogPostgreSqlConfigured();
}

private void WireRabbitMQConnector()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.ConfigureRabbitMQ());
_wrapper.ConfigureServices((host, services) => services.AddRabbitMQ(host.Configuration));

_logger.LogInformation("Configured RabbitMQ connector");
LogRabbitMQConfigured();
}

private void WireRedisConnector()
{
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.ConfigureRedis());
_wrapper.ConfigureServices((host, services) => services.AddRedis(host.Configuration));

_logger.LogInformation("Configured StackExchange Redis connector");
LogRedisConfigured();

// Intentionally ignoring excluded assemblies here.
if (MicrosoftRedisPackageResolver.Default.IsAvailable())
{
_logger.LogInformation("Configured Redis distributed cache connector");
LogRedisDistributedCacheConfigured();
}
}

Expand All @@ -204,63 +204,63 @@ private void WireSqlServerConnector()
_wrapper.ConfigureAppConfiguration(configurationBuilder => configurationBuilder.ConfigureSqlServer());
_wrapper.ConfigureServices((host, services) => services.AddSqlServer(host.Configuration));

_logger.LogInformation("Configured SQL Server connector");
LogSqlServerConfigured();
}

private void WireDynamicSerilog()
{
_wrapper.ConfigureLogging(loggingBuilder => loggingBuilder.AddDynamicSerilog());

_logger.LogInformation("Configured dynamic console logger for Serilog");
LogDynamicSerilogConfigured();
}

private void WireDynamicConsole()
{
_wrapper.ConfigureLogging(loggingBuilder => loggingBuilder.AddDynamicConsole());

_logger.LogInformation("Configured dynamic console logger");
LogDynamicConsoleConfigured();
}

private void WireDiscoveryConfiguration()
{
_wrapper.ConfigureServices(services => services.AddConfigurationDiscoveryClient());

_logger.LogInformation("Configured configuration discovery client");
LogConfigurationDiscoveryConfigured();
}

private void WireDiscoveryConsul()
{
_wrapper.ConfigureServices(services => services.AddConsulDiscoveryClient());

_logger.LogInformation("Configured Consul discovery client");
LogConsulDiscoveryConfigured();
}

private void WireDiscoveryEureka()
{
_wrapper.ConfigureServices(services => services.AddEurekaDiscoveryClient());

_logger.LogInformation("Configured Eureka discovery client");
LogEurekaDiscoveryConfigured();
}

private void WireAllActuators()
{
_wrapper.ConfigureServices(services => services.AddAllActuators());

_logger.LogInformation("Configured actuators");
LogActuatorsConfigured();
}

private void WirePrometheus()
{
_wrapper.ConfigureServices(services => services.AddPrometheusActuator());

_logger.LogInformation("Configured Prometheus");
LogPrometheusConfigured();
}

private void WireDistributedTracingLogProcessor()
{
_wrapper.ConfigureServices(services => services.AddTracingLogProcessor());

_logger.LogInformation("Configured distributed tracing log processor");
LogDistributedTracingConfigured();
}

private bool WireIfLoaded(Action wireAction, string assemblyName)
Expand All @@ -281,4 +281,70 @@ private void WireIfAnyLoaded(Action wireAction, params PackageResolver[] package
wireAction();
}
}

[LoggerMessage(Level = LogLevel.Information, Message = "Configured Config Server configuration provider.")]
private partial void LogConfigServerConfigured();
Comment thread
TimHess marked this conversation as resolved.

[LoggerMessage(Level = LogLevel.Information, Message = "Configured Cloud Foundry configuration provider.")]
private partial void LogCloudFoundryConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured random value configuration provider.")]
private partial void LogRandomValueConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured Spring Boot configuration provider.")]
private partial void LogSpringBootConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured decryption configuration provider.")]
private partial void LogDecryptionConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured placeholder configuration provider.")]
private partial void LogPlaceholderConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured CosmosDB connector.")]
private partial void LogCosmosDbConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured MongoDB connector.")]
private partial void LogMongoDbConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured MySQL connector.")]
private partial void LogMySqlConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured PostgreSQL connector.")]
private partial void LogPostgreSqlConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured RabbitMQ connector.")]
private partial void LogRabbitMQConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured StackExchange Redis connector.")]
private partial void LogRedisConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured Redis distributed cache connector.")]
private partial void LogRedisDistributedCacheConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured SQL Server connector.")]
private partial void LogSqlServerConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured dynamic console logger for Serilog.")]
private partial void LogDynamicSerilogConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured dynamic console logger.")]
private partial void LogDynamicConsoleConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured configuration discovery client.")]
private partial void LogConfigurationDiscoveryConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured Consul discovery client.")]
private partial void LogConsulDiscoveryConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured Eureka discovery client.")]
private partial void LogEurekaDiscoveryConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured actuators.")]
private partial void LogActuatorsConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured Prometheus.")]
private partial void LogPrometheusConfigured();

[LoggerMessage(Level = LogLevel.Information, Message = "Configured distributed tracing log processor.")]
private partial void LogDistributedTracingConfigured();
}
11 changes: 7 additions & 4 deletions src/Common/src/Certificates/ConfigureCertificateOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,9 @@

namespace Steeltoe.Common.Certificates;

internal sealed class ConfigureCertificateOptions : IConfigureNamedOptions<CertificateOptions>
internal sealed partial class ConfigureCertificateOptions : IConfigureNamedOptions<CertificateOptions>
{
private static readonly Regex CertificateRegex = new("-+BEGIN CERTIFICATE-+.+?-+END CERTIFICATE-+", RegexOptions.Compiled | RegexOptions.Singleline,
TimeSpan.FromSeconds(1));
private const int RegexMatchTimeoutInMilliseconds = 1_000;

private readonly IConfiguration _configuration;

Expand All @@ -24,6 +23,10 @@ public ConfigureCertificateOptions(IConfiguration configuration)
_configuration = configuration;
}

[GeneratedRegex("-+BEGIN CERTIFICATE-+.+?-+END CERTIFICATE-+", RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture,
RegexMatchTimeoutInMilliseconds)]
private static partial Regex CertificateRegex();

public void Configure(CertificateOptions options)
{
Configure(Options.DefaultName, options);
Expand All @@ -47,7 +50,7 @@ public void Configure(string? name, CertificateOptions options)
? X509Certificate2.CreateFromPemFile(certificateFilePath, privateKeyFilePath)
: new X509Certificate2(certificateFilePath);

X509Certificate2[] certificateChain = CertificateRegex.Matches(File.ReadAllText(certificateFilePath))
X509Certificate2[] certificateChain = CertificateRegex().Matches(File.ReadAllText(certificateFilePath))
.Select(x => new X509Certificate2(Encoding.ASCII.GetBytes(x.Value))).ToArray();
#pragma warning restore SYSLIB0057 // Type or member is obsolete

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,17 @@

namespace Steeltoe.Common.Configuration;

internal static class ConfigurationKeyConverter
internal static partial class ConfigurationKeyConverter
{
private const string DotDelimiterString = ".";
private const char DotDelimiterChar = '.';
private const char UnderscoreDelimiterChar = '_';
private const char EscapeChar = '\\';
private const string EscapeString = "\\";
private const int RegexMatchTimeoutInMilliseconds = 1_000;

private static readonly Regex ArrayRegex = new(@"\[(?<digits>\d+)\]", RegexOptions.Compiled | RegexOptions.Singleline, TimeSpan.FromSeconds(1));
[GeneratedRegex(@"\[(?<digits>\d+)\]", RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture, RegexMatchTimeoutInMilliseconds)]
private static partial Regex ArrayRegex();

public static string AsDotNetConfigurationKey(string key)
{
Expand Down Expand Up @@ -82,6 +84,6 @@ static string UnEscapeString(string src)

private static string ConvertArrayKey(string key)
{
return ArrayRegex.Replace(key, ":${digits}");
return ArrayRegex().Replace(key, ":${digits}");
}
}
Loading