feat(lmxproxy): phase 4 — host health monitoring, metrics, status web server
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,7 +7,10 @@ using ZB.MOM.WW.LmxProxy.Host.Configuration;
|
||||
using ZB.MOM.WW.LmxProxy.Host.Grpc.Services;
|
||||
using ZB.MOM.WW.LmxProxy.Host.MxAccess;
|
||||
using ZB.MOM.WW.LmxProxy.Host.Security;
|
||||
using ZB.MOM.WW.LmxProxy.Host.Health;
|
||||
using ZB.MOM.WW.LmxProxy.Host.Metrics;
|
||||
using ZB.MOM.WW.LmxProxy.Host.Sessions;
|
||||
using ZB.MOM.WW.LmxProxy.Host.Status;
|
||||
using ZB.MOM.WW.LmxProxy.Host.Subscriptions;
|
||||
|
||||
namespace ZB.MOM.WW.LmxProxy.Host
|
||||
@@ -25,6 +28,11 @@ namespace ZB.MOM.WW.LmxProxy.Host
|
||||
private SessionManager? _sessionManager;
|
||||
private SubscriptionManager? _subscriptionManager;
|
||||
private ApiKeyService? _apiKeyService;
|
||||
private PerformanceMetrics? _performanceMetrics;
|
||||
private HealthCheckService? _healthCheckService;
|
||||
private DetailedHealthCheckService? _detailedHealthCheckService;
|
||||
private StatusReportService? _statusReportService;
|
||||
private StatusWebServer? _statusWebServer;
|
||||
private Server? _grpcServer;
|
||||
|
||||
public LmxProxyService(LmxProxyConfiguration config)
|
||||
@@ -98,14 +106,33 @@ namespace ZB.MOM.WW.LmxProxy.Host
|
||||
// 8. Create SessionManager
|
||||
_sessionManager = new SessionManager(inactivityTimeoutMinutes: 5);
|
||||
|
||||
// 9. Create gRPC service
|
||||
var grpcService = new ScadaGrpcService(
|
||||
_mxAccessClient, _sessionManager, _subscriptionManager);
|
||||
// 9. Create performance metrics
|
||||
_performanceMetrics = new PerformanceMetrics();
|
||||
|
||||
// 10. Create and configure interceptor
|
||||
// 10. Create health check services
|
||||
_healthCheckService = new HealthCheckService(_mxAccessClient, _subscriptionManager, _performanceMetrics);
|
||||
_detailedHealthCheckService = new DetailedHealthCheckService(_mxAccessClient);
|
||||
|
||||
// 11. Create status report service
|
||||
_statusReportService = new StatusReportService(
|
||||
_mxAccessClient, _subscriptionManager, _performanceMetrics,
|
||||
_healthCheckService, _detailedHealthCheckService);
|
||||
|
||||
// 12. Start status web server
|
||||
_statusWebServer = new StatusWebServer(_config.WebServer, _statusReportService);
|
||||
if (!_statusWebServer.Start())
|
||||
{
|
||||
Log.Warning("Status web server failed to start — continuing without it");
|
||||
}
|
||||
|
||||
// 13. Create gRPC service
|
||||
var grpcService = new ScadaGrpcService(
|
||||
_mxAccessClient, _sessionManager, _subscriptionManager, _performanceMetrics);
|
||||
|
||||
// 14. Create and configure interceptor
|
||||
var interceptor = new ApiKeyInterceptor(_apiKeyService);
|
||||
|
||||
// 11. Build and start gRPC server
|
||||
// 15. Build and start gRPC server
|
||||
_grpcServer = new Server
|
||||
{
|
||||
Services =
|
||||
@@ -144,7 +171,13 @@ namespace ZB.MOM.WW.LmxProxy.Host
|
||||
// 1. Stop reconnect monitor (5s wait)
|
||||
_mxAccessClient?.StopMonitorLoop();
|
||||
|
||||
// 2. Graceful gRPC shutdown (10s timeout, then kill)
|
||||
// 2. Stop status web server
|
||||
_statusWebServer?.Stop();
|
||||
|
||||
// 3. Dispose performance metrics
|
||||
_performanceMetrics?.Dispose();
|
||||
|
||||
// 4. Graceful gRPC shutdown (10s timeout, then kill)
|
||||
if (_grpcServer != null)
|
||||
{
|
||||
Log.Information("Shutting down gRPC server...");
|
||||
|
||||
Reference in New Issue
Block a user