chore(infra): update compose configurations, mqtt health bridge, and export scripts

This commit is contained in:
2026-09-01 17:38:57 +02:00
parent 2fe8cc0dca
commit 567ddea46a
9 changed files with 76 additions and 62 deletions
@@ -83,6 +83,7 @@ public class AdminSettingsController : ControllerBase
["FinlyticAnalyzer"] = "engine",
["FinlyticTrades"] = "engine",
["FinlyticBot"] = "bot",
["FinlyticNotify"] = "notify",
// FinlyticSimulation was previously missing from this map entirely, so its settings
// (SimulationSettingKeys: slippage/fee defaults, matrix-recompute schedule, etc.) never showed up
// in the admin UI's settings screen even though the sim_settings_GetAll/Update RPC channels exist.
@@ -209,6 +210,7 @@ public class AdminSettingsController : ControllerBase
("FinlyticFundamentals", $"{MqttTopics.Channels.HealthPing}/FinlyticFundamentals", "Financial Statements & Estimates", "PostgreSQL fundamentals"),
("FinlyticEngine", $"{MqttTopics.Channels.HealthPing}/FinlyticEngine", "Strategy Screener & Signals", "PostgreSQL engine"),
("FinlyticBot", $"{MqttTopics.Channels.HealthPing}/FinlyticBot", "Automated Trading Execution", "PostgreSQL bot"),
("FinlyticNotify", $"{MqttTopics.Channels.HealthPing}/FinlyticNotify", "ntfy Push Notifications", "PostgreSQL / Mosquitto"),
};
var results = new List<ServiceHealthStatusDto>
+1 -1
View File
@@ -149,7 +149,7 @@ app.UseExceptionHandler();
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost,
KnownNetworks = { },
KnownIPNetworks = { },
KnownProxies = { }
});
@@ -70,6 +70,7 @@ public class SystemHealthBackgroundService : BackgroundService
("FinlyticFundamentals", "health_Ping/FinlyticFundamentals", "Financial Statements & Estimates", "PostgreSQL fundamentals"),
("FinlyticEngine", "health_Ping/FinlyticEngine", "Strategy Screener & Signals", "PostgreSQL engine"),
("FinlyticBot", "health_Ping/FinlyticBot", "Automated Trading Execution", "PostgreSQL bot"),
("FinlyticNotify", "health_Ping/FinlyticNotify", "ntfy Push Notifications", "PostgreSQL / Mosquitto"),
};
var results = new List<ServiceHealthStatusDto>
+26
View File
@@ -9,6 +9,7 @@ using FinlyticBackend.Database;
using FinlyticBackend.Hubs;
using FinlyticBackend.Services;
using FinlyticBackend.Settings;
using FinlyticCore.Dtos;
using FinlyticCore.Dtos.Bot;
using FinlyticCore.Dtos.Logging;
using FinlyticCore.Dtos.News;
@@ -104,6 +105,11 @@ public class BackendMqttBridge : ManagedMqttClient, IHostedService
MqttTopics.RequestFilter(MqttTopics.Channels.BackendGetAggregatedFavorites),
HandleGetAggregatedFavoritesRpcAsync);
// Username lookup RPC Endpoint for FinlyticNotify
await SubscribeRpcAsync<UserIdRequest, string?>(
MqttTopics.RequestFilter(MqttTopics.Channels.BackendGetUsername),
HandleGetUsernameRpcAsync);
// FinlyticBackend previously never broadcast its OWN structured logs at all (it only relayed other
// services' logs received on MqttTopics.LogsWildcard, subscribed above) - it never used
// IFinlyticLogger<T>, so FinlyticLogBroadcaster.Broadcast was never invoked for anything happening
@@ -286,4 +292,24 @@ public class BackendMqttBridge : ManagedMqttClient, IHostedService
"[BackendMqttBridge] Responded to backend_GetAggregatedFavorites with {Count} unique ISINs. [CorrelationId: {CorrelationId}]", isins.Count, correlationId);
return isins;
}
private async Task<string?> HandleGetUsernameRpcAsync(UserIdRequest? req, string correlationId)
{
if (req == null || req.UserId == Guid.Empty) return null;
using var scope = _scopeFactory.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<BackendDbContext>();
var user = await dbContext.Users
.AsNoTracking()
.FirstOrDefaultAsync(u => u.Id == req.UserId);
if (user == null) return null;
string username = !string.IsNullOrWhiteSpace(user.FullName)
? user.FullName.Trim().ToLowerInvariant().Replace(" ", "_")
: user.Email.Split('@')[0].Trim().ToLowerInvariant();
return username;
}
}