fix: harden admin system fallback and benchmark review

This commit is contained in:
2026-04-01 13:38:22 +02:00
parent cc55fc0cf8
commit 9191e4cc5b
4 changed files with 264 additions and 7 deletions
@@ -65,6 +65,50 @@ public sealed class AdminSystemController : ControllerBase
return trimmed;
}
private EmailSettingsSnapshot BuildFallbackEmailSettingsSnapshot()
{
var host = (_cfg["Email:SmtpHost"] ?? string.Empty).Trim();
var user = (_cfg["Email:SmtpUser"] ?? string.Empty).Trim();
var password = (_cfg["Email:SmtpPassword"] ?? string.Empty).Trim();
var from = (_cfg["Email:From"] ?? user).Trim();
var fromName = (_cfg["Email:FromName"] ?? "Jobbjakt").Trim();
var port = _cfg.GetValue("Email:SmtpPort", 587);
if (port <= 0) port = 587;
var enableSsl = _cfg.GetValue("Email:SmtpEnableSsl", true);
var timeoutMs = _cfg.GetValue("Email:SmtpTimeoutMs", 15000);
if (timeoutMs <= 0) timeoutMs = 15000;
var enabled = _cfg.GetValue("Email:Enabled", false);
return new EmailSettingsSnapshot(
Enabled: enabled,
Host: host,
Port: port,
User: user,
Password: password,
From: from,
FromName: fromName,
EnableSsl: enableSsl,
TimeoutMs: timeoutMs,
UsesOverrides: false,
HasPassword: !string.IsNullOrWhiteSpace(password));
}
private EmailSettingsAdminDto BuildFallbackEmailSettings(string? reason = null)
{
var snapshot = BuildFallbackEmailSettingsSnapshot();
return new EmailSettingsAdminDto(
Enabled: snapshot.Enabled,
Host: snapshot.Host,
Port: snapshot.Port,
User: snapshot.User,
From: snapshot.From,
FromName: string.IsNullOrWhiteSpace(reason) ? snapshot.FromName : $"{snapshot.FromName} (fallback)",
EnableSsl: snapshot.EnableSsl,
TimeoutMs: snapshot.TimeoutMs,
UsesOverrides: snapshot.UsesOverrides,
HasPassword: snapshot.HasPassword);
}
[HttpPost("ai/probe")]
[HttpPost("summarizer/probe")]
public async Task<IActionResult> RunSummarizerProbe(CancellationToken cancellationToken)
@@ -76,7 +120,14 @@ public sealed class AdminSystemController : ControllerBase
[HttpGet("email-settings")]
public async Task<ActionResult<EmailSettingsAdminDto>> GetEmailSettings(CancellationToken cancellationToken)
{
return Ok(await _emailSettings.GetAdminDtoAsync(cancellationToken));
try
{
return Ok(await _emailSettings.GetAdminDtoAsync(cancellationToken));
}
catch (Exception ex)
{
return Ok(BuildFallbackEmailSettings(ex.Message));
}
}
[HttpPut("email-settings")]
@@ -232,7 +283,15 @@ public sealed class AdminSystemController : ControllerBase
var gmailConfigured = !string.IsNullOrWhiteSpace((_cfg["Google:GmailClientSecret"] ?? string.Empty).Trim())
&& !string.IsNullOrWhiteSpace((_cfg["Google:GmailRedirectUri"] ?? string.Empty).Trim());
var emailSettings = await _emailSettings.GetSnapshotAsync(cancellationToken);
EmailSettingsSnapshot emailSettings;
try
{
emailSettings = await _emailSettings.GetSnapshotAsync(cancellationToken);
}
catch (Exception)
{
emailSettings = BuildFallbackEmailSettingsSnapshot();
}
return Ok(new SystemStatusDto(
Environment: _env.EnvironmentName,