Esempio n. 1
0
        /// <summary>
        /// Enables JSON serialization on the metric and health endpoint responses
        /// </summary>
        /// <param name="host">The metrics host builder.</param>
        /// <returns>The metrics host builder</returns>
        public static IMetricsHostBuilder AddJsonSerialization(this IMetricsHostBuilder host)
        {
            host.AddJsonHealthSerialization();
            host.AddJsonMetricsSerialization();

            return(host);
        }
Esempio n. 2
0
        internal static void AddCoreServices(this IMetricsHostBuilder builder)
        {
            builder.Services.TryAddTransient <Func <string, IMetricContextRegistry> >(
                provider =>
            {
                var globalTags = provider.GetRequiredService <AppMetricsOptions>().GlobalTags;
                return(context => new DefaultMetricContextRegistry(context, new GlobalMetricTags(globalTags)));
            });
            builder.Services.TryAddSingleton <IReportFactory, NoOpReportFactory>();
            builder.Services.TryAddSingleton <IClock, StopwatchClock>();
            builder.Services.TryAddSingleton <IMetricsFilter, DefaultMetricsFilter>();
            builder.Services.TryAddSingleton <EnvironmentInfoProvider, EnvironmentInfoProvider>();
            builder.Services.TryAddSingleton <IMetricDataSerializer, NoOpMetricDataSerializer>();
            builder.Services.TryAddSingleton <IHealthStatusSerializer, NoOpHealthStatusSerializer>();
            builder.Services.TryAddSingleton <IAdvancedMetrics, DefaultAdvancedMetrics>();
            builder.Services.TryAddSingleton <IMetricsRegistry>(provider =>
            {
                var options = provider.GetRequiredService <AppMetricsOptions>();

                if (!options.MetricsEnabled)
                {
                    return(new NullMetricsRegistry());
                }

                var loggerFactory      = provider.GetRequiredService <ILoggerFactory>();
                var clock              = provider.GetRequiredService <IClock>();
                var envBuilder         = provider.GetRequiredService <EnvironmentInfoProvider>();
                var newContextRegistry = provider.GetRequiredService <Func <string, IMetricContextRegistry> >();

                return(new DefaultMetricsRegistry(loggerFactory, options, clock, envBuilder, newContextRegistry));
            });

            builder.Services.TryAddSingleton <IMetrics, DefaultMetrics>();
            builder.Services.TryAddSingleton(provider => builder.Environment);
        }
Esempio n. 3
0
    public static IMetricsHostBuilder AddCustomJsonHealthSerialization(this IMetricsHostBuilder host)
    {
        host.Services.Replace(ServiceDescriptor.Transient <IHealthResponseWriter, JsonHealthResponseWriter>());
        host.Services.Replace(ServiceDescriptor.Transient <IHealthStatusSerializer, HealthStatusSerializer>());

        return(host);
    }
Esempio n. 4
0
        /// <summary>
        ///     Enables JSON serialization on the metric-text endpoint's response
        /// </summary>
        /// <param name="host">The metrics host builder.</param>
        /// <param name="serializerSettings">The JSON serializer settings.</param>
        /// <returns>The metrics host builder</returns>
        public static IMetricsHostBuilder AddJsonMetricsTextSerialization(this IMetricsHostBuilder host, JsonSerializerSettings serializerSettings)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IMetricsTextResponseWriter, JsonMetricsTextResponseWriter>());
            host.Services.Replace(ServiceDescriptor.Transient <IMetricDataSerializer>(provider => new MetricDataSerializer(serializerSettings)));

            return(host);
        }
Esempio n. 5
0
 public static IMetricsHostBuilder AddMetricsMiddleware(this IMetricsHostBuilder builder, IConfiguration configuration,
                                                        Action <AspNetMetricsOptions> setupAction)
 {
     builder.Services.Configure <AspNetMetricsOptions>(configuration);
     builder.Services.Configure(setupAction);
     return(builder.AddMetricsMiddleware());
 }
        public static IMetricsHostBuilder AddPrometheusSerialization(this IMetricsHostBuilder host)
        {
            host.AddPrometheusPlainTextSerialization();
            host.AddPrometheusProtobufSerialization();

            return(host);
        }
Esempio n. 7
0
        /// <summary>
        ///     Enables JSON serialization on the metric endpoint's response
        /// </summary>
        /// <param name="host">The metrics host builder.</param>
        /// <returns>The metrics host builder</returns>
        public static IMetricsHostBuilder AddJsonMetricsSerialization(this IMetricsHostBuilder host)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IMetricsResponseWriter, JsonMetricsResponseWriter>());
            host.Services.Replace(ServiceDescriptor.Transient <IMetricDataSerializer, MetricDataSerializer>());

            return(host);
        }
Esempio n. 8
0
        /// <summary>
        ///     Enables JSON serialization on the environment info endpoint's response
        /// </summary>
        /// <param name="host">The metrics host builder.</param>
        /// <returns>The metrics host builder</returns>
        public static IMetricsHostBuilder AddJsonEnvironmentInfoSerialization(this IMetricsHostBuilder host)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IEnvironmentInfoResponseWriter, JsonEnvironmentInfoResponseWriter>());
            host.Services.Replace(ServiceDescriptor.Transient <IEnvironmentInfoSerializer, EnvironmentInfoSerializer>());

            return(host);
        }
        public static IMetricsHostBuilder AddMetricsMiddleware(this IMetricsHostBuilder builder)
        {
            builder.AddRequiredAspNetPlatformServices();
            builder.AddAspNetCoreServices();

            return(builder);
        }
Esempio n. 10
0
        [AppMetricsExcludeFromCodeCoverage] // DEVNOTE: No need to test JsonSerializerSettings really
        public static IMetricsHostBuilder AddJsonSerialization(this IMetricsHostBuilder host, JsonSerializerSettings serializerSettings)
        {
            host.AddJsonHealthSerialization(serializerSettings);
            host.AddJsonMetricsSerialization(serializerSettings);

            return(host);
        }
Esempio n. 11
0
        public static IMetricsHostBuilder AddHealthChecks(this IMetricsHostBuilder builder, Action <IHealthCheckFactory> setupAction)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.TryAddSingleton <HealthCheckMarkerService, HealthCheckMarkerService>();
            HealthChecksAsServices.AddHealthChecksAsServices(builder.Services,
                                                             DefaultMetricsAssemblyDiscoveryProvider.DiscoverAssemblies(builder.Environment.ApplicationName));

            builder.Services.Replace(ServiceDescriptor.Singleton <IHealthCheckFactory>(provider =>
            {
                var logFactory = provider.GetRequiredService <ILoggerFactory>();
                var logger     = logFactory.CreateLogger <HealthCheckFactory>();

                var autoScannedHealthChecks = Enumerable.Empty <HealthCheck>();

                try
                {
                    autoScannedHealthChecks = provider.GetRequiredService <IEnumerable <HealthCheck> >();
                }
                catch (Exception ex)
                {
                    logger.LogError(new EventId(5000), ex, "Failed to load autoscanned health checks, health checks won't be registered");
                }

                var factory = new HealthCheckFactory(logger, autoScannedHealthChecks);
                setupAction?.Invoke(factory);
                return(factory);
            }));

            return(builder);
        }
Esempio n. 12
0
        public static IMetricsHostBuilder AddJsonSerialization(this IMetricsHostBuilder host)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IMetricDataSerializer, MetricDataSerializer>());
            host.Services.Replace(ServiceDescriptor.Transient <IHealthStatusSerializer, HealthStatusSerializer>());

            return(host);
        }
Esempio n. 13
0
        public static IMetricsHostBuilder AddJsonSerialization(this IMetricsHostBuilder host, JsonSerializerSettings serializerSettings)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IMetricDataSerializer>(provider => new MetricDataSerializer(serializerSettings)));
            host.Services.Replace(ServiceDescriptor.Transient <IHealthStatusSerializer>(provider => new HealthStatusSerializer(serializerSettings)));

            return(host);
        }
        public static IMetricsHostBuilder AddClockType <T>(this IMetricsHostBuilder builder)
            where T : class, IClock, new()
        {
            builder.Services.Replace(ServiceDescriptor.Singleton <IClock>(new T()));

            return(builder);
        }
Esempio n. 15
0
        public static IMetricsHostBuilder AddRequiredPlatformServices(this IMetricsHostBuilder builder)
        {
            builder.Services.TryAddSingleton <MetricsMarkerService, MetricsMarkerService>();
            builder.Services.AddOptions();
            builder.Services.AddSingleton(resolver => resolver.GetRequiredService <IOptions <AppMetricsOptions> >().Value);

            return(builder);
        }
        /// <summary>
        ///     Enables Plain Text serialization on the metric and health endpoint responses
        /// </summary>
        /// <param name="host">The metrics host builder.</param>
        /// <returns>The metrics host builder</returns>
        public static IMetricsHostBuilder AddAsciiSerialization(this IMetricsHostBuilder host)
        {
            host.AddAsciiEnvironmentInfoSerialization();
            host.AddAsciiHealthSerialization();
            host.AddAsciiMetricsSerialization();
            host.AddAsciiMetricsTextSerialization();

            return(host);
        }
Esempio n. 17
0
        private static IMetricsHostBuilder AddMetricsMiddleware(this IMetricsHostBuilder builder)
        {
            builder.Services.TryAddSingleton <IMetricsResponseWriter, NoOpMetricsResponseWriter>();
            builder.Services.TryAddSingleton <IHealthResponseWriter, NoOpHealthStatusResponseWriter>();

            builder.AddRequiredAspNetPlatformServices();

            return(builder);
        }
        internal static void AddCoreServices(this IMetricsHostBuilder builder)
        {
            builder.Services.TryAddTransient <Func <string, IMetricContextRegistry> >(
                provider =>
            {
                var globalTags = provider.GetRequiredService <AppMetricsOptions>().GlobalTags;
                return(context => new DefaultMetricContextRegistry(context, new GlobalMetricTags(globalTags)));
            });

            builder.Services.TryAddSingleton(provider => new DefaultSamplingReservoirProvider());
            builder.Services.TryAddSingleton <IReportFactory, NoOpReportFactory>();
            builder.Services.TryAddSingleton <IHealthCheckFactory, NoOpHealthCheckFactory>();
            builder.Services.TryAddSingleton <IClock, StopwatchClock>();
            builder.Services.TryAddSingleton <IFilterMetrics, DefaultMetricsFilter>();
            builder.Services.TryAddSingleton <EnvironmentInfoProvider, EnvironmentInfoProvider>();
            builder.Services.TryAddSingleton <IMeasureMetrics, DefaultMeasureMetricsProvider>();
            builder.Services.TryAddSingleton <IBuildMetrics, DefaultMetricsBuilderFactory>();
            builder.Services.TryAddSingleton <IProvideMetrics, DefaultMetricsProvider>();
            builder.Services.TryAddSingleton <IProvideMetricValues, DefaultMetricValuesProvider>();
            builder.Services.TryAddSingleton <IManageMetrics, DefaultMetricsManager>();
            builder.Services.TryAddSingleton <IProvideHealth, DefaultHealthProvider>();
            builder.Services.TryAddSingleton <IMetricsRegistry>(
                provider =>
            {
                var options = provider.GetRequiredService <AppMetricsOptions>();

                if (!options.MetricsEnabled)
                {
                    return(new NullMetricsRegistry());
                }

                var loggerFactory      = provider.GetRequiredService <ILoggerFactory>();
                var clock              = provider.GetRequiredService <IClock>();
                var envBuilder         = provider.GetRequiredService <EnvironmentInfoProvider>();
                var newContextRegistry = provider.GetRequiredService <Func <string, IMetricContextRegistry> >();

                return(new DefaultMetricsRegistry(loggerFactory, options, clock, envBuilder, newContextRegistry));
            });

            builder.Services.TryAddSingleton <IMetrics, DefaultMetrics>();
            builder.Services.TryAddSingleton(provider => new Lazy <IMetrics>(provider.GetRequiredService <IMetrics>));
            builder.Services.TryAddSingleton(provider => builder.Environment);
        }
Esempio n. 19
0
        public static IMetricsHostBuilder AddReporting(this IMetricsHostBuilder builder, Action <IReportFactory> setupAction)
        {
            builder.Services.TryAddSingleton <AppMetricsReportingMarkerService, AppMetricsReportingMarkerService>();

            builder.Services.Replace(ServiceDescriptor.Singleton <IReportFactory>(provider =>
            {
                var loggerFactory = provider.GetRequiredService <ILoggerFactory>();
                var options       = provider.GetRequiredService <AppMetricsOptions>();

                if (!options.ReportingEnabled || setupAction == null)
                {
                    return(new NoOpReportFactory());
                }

                var factory = new ReportFactory(loggerFactory);
                setupAction?.Invoke(factory);
                return(factory);
            }));

            return(builder);
        }
Esempio n. 20
0
        public static IMetricsHostBuilder AddHealthChecks(this IMetricsHostBuilder builder, Action <IHealthCheckFactory> setupAction)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            builder.Services.TryAddSingleton <HealthCheckMarkerService, HealthCheckMarkerService>();
            HealthChecksAsServices.AddHealthChecksAsServices(builder.Services,
                                                             DefaultMetricsAssemblyDiscoveryProvider.DiscoverAssemblies(builder.Environment.ApplicationName));

            builder.Services.TryAddTransient <IHealthCheckFactory>(provider =>
            {
                var autoScannedHealthChecks = provider.GetRequiredService <IEnumerable <HealthCheck> >();
                var logFactory = provider.GetRequiredService <ILoggerFactory>();
                var logger     = logFactory.CreateLogger <HealthCheckFactory>();
                var factory    = new HealthCheckFactory(logger, autoScannedHealthChecks);
                setupAction?.Invoke(factory);
                return(factory);
            });

            return(builder);
        }
 /// <summary>
 ///     Adds the default reservoir which will be applied to all metrics using sampling that do not have an
 ///     <see cref="IReservoir" /> set explicitly.
 /// </summary>
 /// <param name="builder">The metrics host builder.</param>
 /// <param name="reservoirBuilder">The reservoir builder to use as the default reservoir for sampling.</param>
 /// <returns>The same instance of the metrics host builder.</returns>
 public static IMetricsHostBuilder AddDefaultReservoir(this IMetricsHostBuilder builder, Func <IReservoir> reservoirBuilder)
 {
     builder.Services.Remove(ServiceDescriptor.Singleton(new DefaultSamplingReservoirProvider(reservoirBuilder)));
     return(builder);
 }
Esempio n. 22
0
        /// <summary>
        /// Enables InfluxDB's Line Protocol serialization on the metric endpoint's response
        /// </summary>
        /// <param name="host">The metrics host builder.</param>
        /// <returns>The metrics host builder</returns>
        public static IMetricsHostBuilder AddInfluxDBLineProtocolMetricsTextSerialization(this IMetricsHostBuilder host)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IMetricsTextResponseWriter, LineProtocolTextResponseWriter>());

            return(host);
        }
Esempio n. 23
0
 /// <summary>
 /// Enables InfluxDB's Line Protocol serialization on the metrics and metrics-text responses
 /// </summary>
 /// <param name="host">The metrics host builder.</param>
 /// <returns>The metrics host builder</returns>
 public static IMetricsHostBuilder AddInfluxDBLineProtocolSerialization(this IMetricsHostBuilder host)
 {
     host.AddInfluxDBLineProtocolMetricsSerialization();
     host.AddInfluxDBLineProtocolMetricsTextSerialization();
     return(host);
 }
Esempio n. 24
0
 public static IMetricsHostBuilder AddMetricsMiddleware(this IMetricsHostBuilder builder, IConfiguration configuration)
 {
     builder.Services.Configure <OwinMetricsOptions>(configuration);
     return(builder.AddMetricsMiddleware());
 }
Esempio n. 25
0
 public static IMetricsHostBuilder AddMetricsMiddleware(this IMetricsHostBuilder builder, Action <OwinMetricsOptions> setupAction)
 {
     builder.Services.Configure(setupAction);
     return(builder.AddMetricsMiddleware());
 }
        /// <summary>
        ///     Enables Plain Text serialization on the metric endpoint's response
        /// </summary>
        /// <param name="host">The metrics host builder.</param>
        /// <returns>The metrics host builder</returns>
        public static IMetricsHostBuilder AddAsciiMetricsTextSerialization(this IMetricsHostBuilder host)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IMetricsTextResponseWriter, AsciiMetricsTextResponseWriter>());

            return(host);
        }
        public static IMetricsHostBuilder AddPrometheusProtobufSerialization(this IMetricsHostBuilder host)
        {
            host.Services.Replace(ServiceDescriptor.Transient <IMetricsResponseWriter, PrometheusProtobufMetricsWriter>());

            return(host);
        }
        public static IMetricsHostBuilder AddGlobalFilter(this IMetricsHostBuilder builder, IFilterMetrics filter)
        {
            builder.Services.Replace(ServiceDescriptor.Singleton(filter));

            return(builder);
        }
 public static IMetricsHostBuilder AddHealthChecks(this IMetricsHostBuilder builder)
 {
     builder.AddHealthChecks(setupAction: null);
     return(builder);
 }
Esempio n. 30
0
 public static IMetricsHostBuilder AddMetricsMiddleware(this IMetricsHostBuilder builder)
 {
     return(builder.AddMetricsMiddlewareCore());
 }