using System.Diagnostics.Metrics; using System.Linq; using StellaOps.Router.Common.Abstractions; namespace StellaOps.Gateway.WebService.Services; public sealed class GatewayMetrics { public const string MeterName = "StellaOps.Gateway.WebService"; private static readonly Meter Meter = new(MeterName, "1.0.0"); private readonly IGlobalRoutingState _routingState; public GatewayMetrics(IGlobalRoutingState routingState) { _routingState = routingState; Meter.CreateObservableGauge( "gateway_active_connections", () => GetActiveConnections(), description: "Number of active microservice connections."); Meter.CreateObservableGauge( "gateway_registered_endpoints", () => GetRegisteredEndpoints(), description: "Number of registered endpoints across all connections."); } public long GetActiveConnections() { return _routingState.GetAllConnections().Count; } public long GetRegisteredEndpoints() { return _routingState.GetAllConnections().Sum(c => c.Endpoints.Count); } }