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;
}
}