Updated deploy script, and reduced logging noise

This commit is contained in:
Spencer Twaddle
2026-05-07 06:43:04 -05:00
parent 4fa35dadc3
commit 1c4cc3c79f
5 changed files with 83 additions and 6 deletions
+24 -4
View File
@@ -41,14 +41,32 @@ var connStr = builder.Configuration.GetConnectionString("DefaultConnection")
$"Username={builder.Configuration["POSTGRES_USER"] ?? "budget"};" +
$"Password={builder.Configuration["POSTGRES_PASSWORD"] ?? "changeme"}";
builder.Services.AddDbContext<AppDbContext>(opt => opt.UseNpgsql(connStr));
builder.Services.AddSingleton<Budget.Infrastructure.Data.SlowQueryInterceptor>();
builder.Services.AddDbContext<AppDbContext>((sp, opt) =>
{
opt.UseNpgsql(connStr);
opt.AddInterceptors(sp.GetRequiredService<Budget.Infrastructure.Data.SlowQueryInterceptor>());
});
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
options.KnownProxies.Clear();
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor
| ForwardedHeaders.XForwardedProto
| ForwardedHeaders.XForwardedHost;
options.KnownIPNetworks.Clear();
options.KnownIPNetworks.Add(System.Net.IPNetwork.Parse("172.20.0.0/16"));
options.KnownProxies.Clear();
var trustedNetworks = builder.Configuration["Budget:TrustedProxyNetworks"] ?? "172.16.0.0/12";
foreach (var cidr in trustedNetworks.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries))
{
var parts = cidr.Split('/');
var prefix = System.Net.IPAddress.Parse(parts[0]);
var prefixLength = parts.Length > 1
? int.Parse(parts[1])
: (prefix.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6 ? 128 : 32);
options.KnownIPNetworks.Add(new System.Net.IPNetwork(prefix, prefixLength));
}
});
var oidc = builder.Configuration.GetSection("Oidc");
@@ -127,6 +145,8 @@ while (true)
jwtOpts.ConfigurationManager!.RequestRefresh();
await jwtOpts.ConfigurationManager!.GetConfigurationAsync(CancellationToken.None);
startupLogger.LogInformation("OIDC discovery succeeded");
startupLogger.LogInformation("Trusted proxy networks: {Networks}",
app.Configuration["Budget:TrustedProxyNetworks"] ?? "172.16.0.0/12 (default)");
break;
}
catch (Exception ex)
+2 -1
View File
@@ -2,7 +2,8 @@
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Warning"
}
},
"AllowedHosts": "budget.stwaddle.com",
@@ -0,0 +1,53 @@
using System.Data.Common;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Logging;
namespace Budget.Infrastructure.Data;
public class SlowQueryInterceptor(ILogger<SlowQueryInterceptor> logger) : DbCommandInterceptor
{
private static readonly TimeSpan Threshold = TimeSpan.FromMilliseconds(500);
public override DbDataReader ReaderExecuted(DbCommand command, CommandExecutedEventData eventData, DbDataReader result)
{
LogIfSlow(command, eventData.Duration);
return result;
}
public override ValueTask<DbDataReader> ReaderExecutedAsync(DbCommand command, CommandExecutedEventData eventData, DbDataReader result, CancellationToken cancellationToken = default)
{
LogIfSlow(command, eventData.Duration);
return new ValueTask<DbDataReader>(result);
}
public override int NonQueryExecuted(DbCommand command, CommandExecutedEventData eventData, int result)
{
LogIfSlow(command, eventData.Duration);
return result;
}
public override ValueTask<int> NonQueryExecutedAsync(DbCommand command, CommandExecutedEventData eventData, int result, CancellationToken cancellationToken = default)
{
LogIfSlow(command, eventData.Duration);
return new ValueTask<int>(result);
}
public override object? ScalarExecuted(DbCommand command, CommandExecutedEventData eventData, object? result)
{
LogIfSlow(command, eventData.Duration);
return result;
}
public override ValueTask<object?> ScalarExecutedAsync(DbCommand command, CommandExecutedEventData eventData, object? result, CancellationToken cancellationToken = default)
{
LogIfSlow(command, eventData.Duration);
return new ValueTask<object?>(result);
}
private void LogIfSlow(DbCommand command, TimeSpan duration)
{
if (duration >= Threshold)
logger.LogWarning("Slow query ({Duration}ms): {CommandText}",
(long)duration.TotalMilliseconds, command.CommandText);
}
}