using ZB.MOM.WW.OtOpcUa.Commons.Observability; using ZB.MOM.WW.Telemetry; namespace ZB.MOM.WW.OtOpcUa.Host.Observability; /// /// Wires the OtOpcUa Meter + ActivitySource into OpenTelemetry and exposes a Prometheus /// scrape endpoint at /metrics on the host pipeline. F13d slice — only the meter + /// activity source declared in are surfaced; per-Akka /// internals + ASP.NET request metrics stay off by default to keep the scrape payload /// scoped to OtOpcUa-owned signals. /// public static class ObservabilityExtensions { /// Adds OtOpcUa observability (metrics and tracing) to the service collection. /// The service collection to add observability services to. public static IServiceCollection AddOtOpcUaObservability(this IServiceCollection services) { return services.AddZbTelemetry(o => { o.ServiceName = "otopcua"; o.Meters = [OtOpcUaTelemetry.MeterName]; o.ActivitySources = [OtOpcUaTelemetry.ActivitySourceName]; }); } /// /// Mounts the Prometheus scrape endpoint on the existing ASP.NET pipeline. Call after /// app.UseAuthentication/UseAuthorization if metrics access should require auth; /// the default leaves it unauthenticated for local Prometheus scrapes. /// /// The endpoint route builder. public static IEndpointRouteBuilder MapOtOpcUaMetrics(this IEndpointRouteBuilder app) { app.MapZbMetrics(); return app; } }