Exemple #1
0
        public MetricsReportingFixture()
        {
            var healthFactoryLogger = _loggerFactory.CreateLogger <HealthCheckFactory>();
            var options             = new AppMetricsOptions();
            var clock = new TestClock();

            IMetricContextRegistry NewContextRegistry(string name) => new DefaultMetricContextRegistry(name);

            var registry             = new DefaultMetricsRegistry(_loggerFactory, options, clock, new EnvironmentInfoProvider(), NewContextRegistry);
            var healthCheckFactory   = new HealthCheckFactory(healthFactoryLogger);
            var metricBuilderFactory = new DefaultMetricsBuilderFactory();
            var filter        = new DefaultMetricsFilter();
            var healthManager = new DefaultHealthProvider(new Lazy <IMetrics>(() => Metrics), _loggerFactory.CreateLogger <DefaultHealthProvider>(), healthCheckFactory);
            var dataManager   = new DefaultMetricValuesProvider(
                filter,
                registry);

            var metricsManagerFactory         = new DefaultMeasureMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManagerAdvancedFactory = new DefaultMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManager = new DefaultMetricsManager(registry, _loggerFactory.CreateLogger <DefaultMetricsManager>());

            Metrics = new DefaultMetrics(
                clock,
                filter,
                metricsManagerFactory,
                metricBuilderFactory,
                metricsManagerAdvancedFactory,
                dataManager,
                metricsManager,
                healthManager);

            RecordSomeMetrics();
        }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTestStuff();
            services.AddLogging().AddRouting(options => { options.LowercaseUrls = true; });

            services.AddMvc(options => options.AddMetricsResourceFilter());

            var reportFilter = new DefaultMetricsFilter();

            reportFilter.WithHealthChecks(false);

            services.AddMetrics(Configuration.GetSection("AppMetrics")).
            AddJsonHealthSerialization().
            // AddJsonMetricsTextSerialization().
            AddElasticsearchMetricsTextSerialization(ElasticSearchIndex).
            AddElasticsearchMetricsSerialization(ElasticSearchIndex).
            AddReporting(
                factory =>
            {
                factory.AddElasticSearch(
                    new ElasticSearchReporterSettings
                {
                    ElasticSearchSettings = new ElasticSearchSettings(ElasticSearchUri, ElasticSearchIndex)
                },
                    reportFilter);
            }).
            AddHealthChecks(
                factory =>
            {
                factory.RegisterPingHealthCheck("google ping", "google.com", TimeSpan.FromSeconds(10));
                factory.RegisterHttpGetHealthCheck("github", new Uri("https://github.com/"), TimeSpan.FromSeconds(10));
            }).
            AddMetricsMiddleware(Configuration.GetSection("AspNetMetrics"));
        }
Exemple #3
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTestStuff();
            services.AddLogging().AddRouting(options => { options.LowercaseUrls = true; });

            services.AddMvc(options => options.AddMetricsResourceFilter());

            var reportFilter = new DefaultMetricsFilter();

            reportFilter.WithHealthChecks(false);

            services.AddMetrics(Configuration.GetSection("AppMetrics")).
            AddAsciiHealthSerialization().
            AddInfluxDBLineProtocolMetricsSerialization().
            AddInfluxDBLineProtocolMetricsTextSerialization().
            AddReporting(
                factory =>
            {
                factory.AddInfluxDb(
                    new InfluxDBReporterSettings
                {
                    InfluxDbSettings = new InfluxDBSettings(InfluxDbDatabase, InfluxDbUri)
                },
                    reportFilter);
            }).
            AddHealthChecks(
                factory =>
            {
                factory.RegisterPingHealthCheck("google ping", "google.com", TimeSpan.FromSeconds(10));
                factory.RegisterHttpGetHealthCheck("github", new Uri("https://github.com/"), TimeSpan.FromSeconds(10));
            }).
            AddMetricsMiddleware(Configuration.GetSection("AspNetMetrics"));
        }
Exemple #4
0
        public void ConfigureServices(IServiceCollection services)
        {
            services
            .AddLogging()
            .AddRouting(options => { options.LowercaseUrls = true; });

            services.AddMvc(options => options.AddMetricsResourceFilter());

            var filter = new DefaultMetricsFilter();

            filter.WhereContext(c => c == MetricsRegistry.Context);

            services
            .AddMetrics()
            .AddGlobalFilter(filter)
            .AddJsonSerialization()
            .AddReporting(
                factory =>
            {
                factory.AddInfluxDb(
                    new InfluxDBReporterSettings
                {
                    InfluxDbSettings = new InfluxDBSettings("appmetricsreservoirs", InfluxDbUri),
                    ReportInterval   = TimeSpan.FromSeconds(5)
                });
            })
            .AddMetricsMiddleware(options => options.HealthEndpointEnabled = false);
        }
        public HealthCheckRegistryTests()
        {
            _metircsSetup = healthCheckFactory =>
            {
                var clock   = new TestClock();
                var options = new AppMetricsOptions();
                Func <string, IMetricContextRegistry> newContextRegistry = name => new DefaultMetricContextRegistry(name);
                var registry = new DefaultMetricsRegistry(
                    LoggerFactory,
                    options,
                    clock,
                    new EnvironmentInfoProvider(),
                    newContextRegistry);
                var metricBuilderFactory = new DefaultMetricsBuilderFactory();
                var filter        = new DefaultMetricsFilter();
                var healthManager = new DefaultHealthProvider(LoggerFactory.CreateLogger <DefaultHealthProvider>(), healthCheckFactory);
                var dataManager   = new DefaultMetricValuesProvider(
                    filter,
                    registry);

                var metricsManagerFactory         = new DefaultMeasureMetricsProvider(registry, metricBuilderFactory, clock);
                var metricsManagerAdvancedFactory = new DefaultMetricsProvider(registry, metricBuilderFactory, clock);
                var metricsManager = new DefaultMetricsManager(registry, LoggerFactory.CreateLogger <DefaultMetricsManager>());

                return(new DefaultMetrics(
                           clock,
                           filter,
                           metricsManagerFactory,
                           metricBuilderFactory,
                           metricsManagerAdvancedFactory,
                           dataManager,
                           metricsManager,
                           healthManager));
            };
        }
Exemple #6
0
        public async Task can_pack_metrics()
        {
            // Arrange
            var token          = CancellationToken.None;
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = new TestReporter(payloadBuilder);
            var filter         = new DefaultMetricsFilter().WithEnvironmentInfo(false);

            // Act
            await _fixture.ReportGenerator.GenerateAsync(reporter, _fixture.Metrics(), filter, token);

            var payload = payloadBuilder.PayloadFormatted();

            // Assert
            payload.Should().
            Be(
                "application__test_counter tag1=value mtype=counter unit=req value=1i" + Environment.NewLine +
                "application__test_gauge mtype=gauge unit=none value=8" + Environment.NewLine +
                "application__test_histogram mtype=histogram unit=req samples=1i last=5 count.hist=1i sum=5 min=5 max=5 mean=5 median=5 stddev=0 p999=5 p99=5 p98=5 p95=5 p75=5" +
                Environment.NewLine +
                "application__test_meter tag2=value mtype=meter unit=none unit_rate=min count.meter=1i rate1m=0 rate5m=0 rate15m=0 rate.mean=3000" +
                Environment.NewLine +
                "application__test_timer mtype=timer unit=req unit_dur=ms unit_rate=min count.meter=1i rate1m=0 rate5m=0 rate15m=0 rate.mean=3000 samples=1i last=10 count.hist=1i sum=10 min=10 max=10 mean=10 median=10 stddev=0 p999=10 p99=10 p98=10 p95=10 p75=10" +
                Environment.NewLine);
        }
Exemple #7
0
        public MetricsFixture()
        {
            var healthFactoryLogger = _loggerFactory.CreateLogger <HealthCheckFactory>();
            var clock   = new TestClock();
            var options = new AppMetricsOptions();
            Func <string, IMetricContextRegistry> newContextRegistry = name => new DefaultMetricContextRegistry(name);
            var registry             = new DefaultMetricsRegistry(_loggerFactory, options, clock, new EnvironmentInfoProvider(), newContextRegistry);
            var healthCheckFactory   = new HealthCheckFactory(healthFactoryLogger);
            var metricBuilderFactory = new DefaultMetricsBuilderFactory();
            var filter                        = new DefaultMetricsFilter();
            var dataManager                   = new DefaultMetricValuesProvider(filter, registry);
            var healthStatusProvider          = new DefaultHealthProvider(_loggerFactory.CreateLogger <DefaultHealthProvider>(), healthCheckFactory);
            var metricsManagerFactory         = new DefaultMeasureMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManagerAdvancedFactory = new DefaultMetricsProvider(registry, metricBuilderFactory, clock);
            var metricsManager                = new DefaultMetricsManager(registry, _loggerFactory.CreateLogger <DefaultMetricsManager>());

            Metrics = new DefaultMetrics(
                clock,
                filter,
                metricsManagerFactory,
                metricBuilderFactory,
                metricsManagerAdvancedFactory,
                dataManager,
                metricsManager,
                healthStatusProvider);
        }
Exemple #8
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTestStuff();
            services.AddLogging().AddRouting(options => { options.LowercaseUrls = true; });

            services.AddMvc(options => options.AddMetricsResourceFilter());

            var reportFilter = new DefaultMetricsFilter();

            reportFilter.WithHealthChecks(false);

            services.AddMetrics(
                Configuration.GetSection("AppMetrics"),
                options =>
            {
                options.WithGlobalTags(
                    (globalTags, info) =>
                {
                    globalTags.Add("app", info.EntryAssemblyName);
                    globalTags.Add("server", info.MachineName);
                    globalTags.Add("version", info.EntryAssemblyVersion);
                });
            }).
            AddPrometheusSerialization().
            AddJsonHealthSerialization().
            AddHealthChecks(
                factory =>
            {
                factory.RegisterPingHealthCheck("google ping", "google.com", TimeSpan.FromSeconds(10));
                factory.RegisterHttpGetHealthCheck("github", new Uri("https://github.com/"), TimeSpan.FromSeconds(10));
            }).
            AddMetricsMiddleware(Configuration.GetSection("AspNetMetrics"));
        }
Exemple #9
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services
            .AddLogging()
            .AddRouting(options => { options.LowercaseUrls = true; });

            services.AddMvc(options => options.AddMetricsResourceFilter());

            services
            .AddMetrics(Configuration.GetSection("AppMetrics"))
            //.AddGlobalFilter(new DefaultMetricsFilter().WhereMetricTaggedWithKeyValue(new TagKeyValueFilter { { "reporter", "influxdb" } }))
            .AddJsonSerialization()
            .AddReporting(factory =>
            {
                var influxFilter = new DefaultMetricsFilter()
                                   //.WhereMetricTaggedWithKeyValue(new TagKeyValueFilter { { "reporter", "influxdb" } })
                                   .WithHealthChecks(true)
                                   .WithEnvironmentInfo(true);

                factory.AddInfluxDb(new InfluxDbReporterSettings
                {
                    BaseAddress    = "http://127.0.0.1:8086",
                    Database       = "appmetricsapi",
                    ReportInterval = TimeSpan.FromSeconds(5)
                }, influxFilter);
            })
            .AddHealthChecks()
            .AddMetricsMiddleware(Configuration.GetSection("AspNetMetrics"));
        }
Exemple #10
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient <IDatabase, Database>();

            services.AddMvc(options => options.AddMetricsResourceFilter());

            services
            .AddMetrics(Configuration.GetSection("AppMetrics"))
            .AddJsonSerialization()
            .AddReporting(factory =>
            {
                var influxFilter = new DefaultMetricsFilter()
                                   .WithHealthChecks(true)
                                   .WithEnvironmentInfo(true);

                factory.AddInfluxDb(new InfluxDbReporterSettings
                {
                    BaseAddress    = new Uri("http://127.0.0.1:8086"),
                    Database       = "appmetricsapi",
                    ReportInterval = TimeSpan.FromSeconds(5)
                }, influxFilter);
            })
            .AddHealthChecks(factory =>
            {
                //factory.RegisterProcessPrivateMemorySizeHealthCheck("Private Memory Size", 200);
                //factory.RegisterProcessVirtualMemorySizeHealthCheck("Virtual Memory Size", 200);
                //factory.RegisterProcessPhysicalMemoryHealthCheck("Working Set", 200);
            })
            .AddMetricsMiddleware(Configuration.GetSection("AspNetMetrics"));
        }
Exemple #11
0
        public async Task can_pack_metrics_with_custom_histogram_keys()
        {
            // Arrange
            var dataKeys = new MetricValueDataKeys(
                histogram: new Dictionary <HistogramValueDataKeys, string> {
                { HistogramValueDataKeys.P75, "75th_percentile" }
            });
            var token          = CancellationToken.None;
            var payloadBuilder = new TestPayloadBuilder();
            var reporter       = new TestReporter(
                payloadBuilder,
                dataKeys);
            var filter = new DefaultMetricsFilter().WithEnvironmentInfo(false);

            // Act
            await _reportGenerator.GenerateAsync(reporter, _metrics, filter, token);

            var payload = payloadBuilder.PayloadFormatted();

            // Assert
            payload.Should().
            Be(
                "application__test_counter tag1=value mtype=counter value=1i" + Environment.NewLine +
                "application__test_gauge mtype=gauge value=8" + Environment.NewLine +
                "application__test_histogram mtype=histogram samples=1i last=5 count.hist=1i sum=5 min=5 max=5 mean=5 median=5 stddev=0 p999=5 p99=5 p98=5 p95=5 75th_percentile=5" +
                Environment.NewLine +
                "application__test_meter tag2=value mtype=meter count.meter=1i rate1m=0 rate5m=0 rate15m=0 rate.mean=6000" +
                Environment.NewLine +
                "application__test_timer mtype=timer count.meter=1i rate1m=0 rate5m=0 rate15m=0 rate.mean=6000 samples=1i last=10 count.hist=1i sum=10 min=10 max=10 mean=10 median=10 stddev=0 p999=10 p99=10 p98=10 p95=10 75th_percentile=10" +
                Environment.NewLine);
        }
Exemple #12
0
        private static void ConfigureMetrics(IServiceCollection services)
        {
            services
            .AddMetrics(options =>
            {
                options.ReportingEnabled = true;
                options.GlobalTags.Add("env", "stage");
            })
            .AddHealthChecks(factory =>
            {
                factory.RegisterProcessPrivateMemorySizeHealthCheck("Private Memory Size", 200);
                factory.RegisterProcessVirtualMemorySizeHealthCheck("Virtual Memory Size", 200);
                factory.RegisterProcessPhysicalMemoryHealthCheck("Working Set", 200);

                factory.Register("DatabaseConnected", () => Task.FromResult("Database Connection OK"));
                factory.Register("DiskSpace", () =>
                {
                    var freeDiskSpace = GetFreeDiskSpace();

                    return(Task.FromResult(freeDiskSpace <= 512
                            ? HealthCheckResult.Unhealthy("Not enough disk space: {0}", freeDiskSpace)
                            : HealthCheckResult.Unhealthy("Disk space ok: {0}", freeDiskSpace)));
                });
            })
            .AddReporting(factory =>
            {
                factory.AddConsole(new ConsoleReporterSettings
                {
                    ReportInterval = TimeSpan.FromSeconds(5),
                });

                factory.AddTextFile(new TextFileReporterSettings
                {
                    ReportInterval = TimeSpan.FromSeconds(30),
                    FileName       = @"C:\metrics\sample.txt"
                });

                var influxFilter = new DefaultMetricsFilter()
                                   .WhereMetricTaggedWithKeyValue(new TagKeyValueFilter {
                    { "reporter", "influxdb" }
                })
                                   .WithHealthChecks(true)
                                   .WithEnvironmentInfo(true);

                factory.AddInfluxDb(new InfluxDBReporterSettings
                {
                    HttpPolicy = new HttpPolicy
                    {
                        FailuresBeforeBackoff = 3,
                        BackoffPeriod         = TimeSpan.FromSeconds(30),
                        Timeout = TimeSpan.FromSeconds(3)
                    },
                    InfluxDbSettings = new InfluxDBSettings("appmetrics", new Uri("http://127.0.0.1:8086")),
                    ReportInterval   = TimeSpan.FromSeconds(5)
                }, influxFilter);
            });
        }
        public async Task <MetricsContextValueSource> ReadContextAsync(string context)
        {
            var data = await ReadDataAsync();

            var filter = new DefaultMetricsFilter().WhereContext(context);

            var contextData = data.Filter(filter);

            return(contextData.Contexts.Single());
        }
        public MetricsContextValueSource ReadContext(string context)
        {
            var data = ReadData();

            var filter = new DefaultMetricsFilter().WhereContext(context);

            var contextData = data.Filter(filter);

            return(contextData.Contexts.Single());
        }
Exemple #15
0
        /// <inheritdoc />
        public MetricsContextValueSource GetForContext(string context)
        {
            var data = Get();

            var filter = new DefaultMetricsFilter().WhereContext(context);

            var contextData = data.Filter(filter);

            return(contextData.Contexts.FirstOrDefault() ?? MetricsContextValueSource.Empty);
        }
Exemple #16
0
        private static void ConfigureMetrics(IServiceCollection services)
        {
            services
            .AddMetrics(options =>
            {
                options.ReportingEnabled = true;
                options.GlobalTags.Add("env", "stage");
            })
            .AddHealthChecks(factory =>
            {
                factory.Register("DatabaseConnected", () => Task.FromResult("Database Connection OK"));
                factory.Register("DiskSpace", () =>
                {
                    var freeDiskSpace = GetFreeDiskSpace();

                    return(Task.FromResult(freeDiskSpace <= 512
                            ? HealthCheckResult.Unhealthy("Not enough disk space: {0}", freeDiskSpace)
                            : HealthCheckResult.Unhealthy("Disk space ok: {0}", freeDiskSpace)));
                });
            })
            .AddReporting(factory =>
            {
                var filter = new DefaultMetricsFilter()
                             .WithHealthChecks(true)
                             .WithEnvironmentInfo(true);

                factory.AddConsole(new ConsoleReporterSettings
                {
                    ReportInterval = TimeSpan.FromSeconds(5),
                }, filter);

                factory.AddTextFile(new TextFileReporterSettings
                {
                    ReportInterval = TimeSpan.FromSeconds(30),
                    FileName       = @"C:\metrics\sample.txt"
                });

                var influxFilter = new DefaultMetricsFilter()
                                   //.WhereType(MetricType.Counter)
                                   .WhereMetricTaggedWithKeyValue(new TagKeyValueFilter {
                    { "reporter", "influxdb" }
                })
                                   .WithHealthChecks(true)
                                   .WithEnvironmentInfo(true);

                factory.AddInfluxDb(new InfluxDbReporterSettings
                {
                    BaseAddress    = "http://127.0.0.1:8086",
                    Database       = "appmetrics",
                    ReportInterval = TimeSpan.FromSeconds(5)
                }, influxFilter);
            });
        }
        public async Task can_disable_reporting_environment_info()
        {
            var metricReporter = new Mock <IMetricReporter>();

            metricReporter.Setup(x => x.ReportEnvironment(It.IsAny <EnvironmentInfo>()));
            var token  = CancellationToken.None;
            var filter = new DefaultMetricsFilter().WithEnvironmentInfo(false);

            await _reportGenerator.GenerateAsync(metricReporter.Object, _metrics, filter, token);

            metricReporter.Verify(p => p.ReportEnvironment(It.IsAny <EnvironmentInfo>()), Times.Never);
        }
Exemple #18
0
        public static IServiceCollection ConfigureMetrics(this IServiceCollection services)
        {
            var assemblyName = Assembly.GetExecutingAssembly().GetName();

            services
            .AddMetrics(options =>
            {
                options.ReportingEnabled = true;
                options.GlobalTags.Add("env", "stage");
            }, assemblyName)
            .AddHealthChecks(factory =>
            {
                factory.RegisterProcessPrivateMemorySizeHealthCheck("Private Memory Size", 200);
                factory.RegisterProcessVirtualMemorySizeHealthCheck("Virtual Memory Size", 200);
                factory.RegisterProcessPhysicalMemoryHealthCheck("Working Set", 200);
            })
            .AddReporting(factory =>
            {
                factory.AddConsole(new ConsoleReporterSettings
                {
                    ReportInterval = TimeSpan.FromSeconds(5),
                });

                factory.AddTextFile(new TextFileReporterSettings
                {
                    ReportInterval = TimeSpan.FromSeconds(30),
                    FileName       = $@"C:\metrics\{assemblyName.Name}.txt"
                });

                var influxFilter = new DefaultMetricsFilter()
                                   .WhereMetricTaggedWithKeyValue(new TagKeyValueFilter {
                    { "reporter", "influxdb" }
                })
                                   .WithHealthChecks(true)
                                   .WithEnvironmentInfo(true);

                factory.AddInfluxDb(new InfluxDBReporterSettings
                {
                    HttpPolicy = new HttpPolicy
                    {
                        FailuresBeforeBackoff = 3,
                        BackoffPeriod         = TimeSpan.FromSeconds(10),
                        Timeout = TimeSpan.FromSeconds(3)
                    },
                    InfluxDbSettings = new InfluxDBSettings("appmetricsnet452", new Uri("http://127.0.0.1:8086")),
                    ReportInterval   = TimeSpan.FromSeconds(5)
                }, influxFilter);
            });

            return(services);
        }
Exemple #19
0
        public static IServiceCollection ConfigureMetrics(this IServiceCollection services)
        {
            var assemblyName = Assembly.GetExecutingAssembly().GetName();

            services.AddMetrics(p =>
            {
                p.DefaultContextLabel = "Demo";
                p.ReportingEnabled    = true;
                p.GlobalTags.Add("env", "stage");
                p.MetricsEnabled = true;
            }, assemblyName)
            .AddHealthChecks(factory =>
            {
                factory.RegisterProcessPrivateMemorySizeHealthCheck("Private Memory Size",
                                                                    200);
                factory.RegisterProcessVirtualMemorySizeHealthCheck("Virtual Memory Size",
                                                                    200);
                factory.RegisterProcessPhysicalMemoryHealthCheck("Working Set", 200);
            })
            .AddReporting(factory =>
            {
                factory.AddConsole(new ConsoleReporterSettings
                {
                    ReportInterval = TimeSpan.FromSeconds(5)
                });

                var influxFilter = new DefaultMetricsFilter()
                                   .WhereMetricTaggedWithKeyValue(new TagKeyValueFilter
                {
                    { "reporter", "influxdb" }
                })
                                   .WithHealthChecks(true)
                                   .WithEnvironmentInfo(true);

                factory.AddInfluxDb(new InfluxDBReporterSettings
                {
                    HttpPolicy = new HttpPolicy
                    {
                        FailuresBeforeBackoff = 3,
                        BackoffPeriod         = TimeSpan.FromSeconds(10),
                        Timeout = TimeSpan.FromSeconds(3)
                    },
                    InfluxDbSettings = new InfluxDBSettings(AppSetting.InfluxDB.DatabaseName, new Uri(AppSetting.InfluxDB.Url)),
                    ReportInterval   = TimeSpan.FromSeconds(5)
                }, influxFilter);
            })
            .AddMetricsMiddleware()
            ;

            return(services);
        }
        public void can_filter_metrics_by_context()
        {
            var filter      = new DefaultMetricsFilter().WhereMetricName(name => name == "test_gauge");
            var currentData = _metrics.Snapshot.Get(filter);
            var context     = currentData.Contexts.Single();

            var gaugeValue = context.Gauges.FirstOrDefault();

            gaugeValue.Should().NotBeNull();

            Assert.Null(context.Counters.FirstOrDefault());
            Assert.Null(context.Meters.FirstOrDefault());
            Assert.Null(context.Histograms.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
        }
        public async Task can_filter_metrics_by_context()
        {
            var filter      = new DefaultMetricsFilter().WhereMetricName(name => name == "test_gauge");
            var currentData = await _metrics.Advanced.Data.ReadDataAsync(filter);

            var context = currentData.Contexts.Single();

            var gaugeValue = context.Gauges.FirstOrDefault();

            gaugeValue.Should().NotBeNull();

            Assert.Null(context.Counters.FirstOrDefault());
            Assert.Null(context.Meters.FirstOrDefault());
            Assert.Null(context.Histograms.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
        }
        public void can_filter_metrics_by_context()
        {
            var filter      = new DefaultMetricsFilter().WhereContext("test_context1");
            var currentData = _metrics.Advanced.Data.ReadData(filter);
            var context     = currentData.Contexts.Single();

            var counterValue = context.Counters.Single();

            counterValue.Name.Should().Be("test_counter");
            counterValue.Value.Count.Should().Be(1);

            Assert.Null(context.Meters.FirstOrDefault());
            Assert.Null(context.Gauges.FirstOrDefault());
            Assert.Null(context.Histograms.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
        }
        public void can_filter_metrics_by_meters()
        {
            var filter      = new DefaultMetricsFilter().WhereType(MetricType.Meter);
            var currentData = _metrics.Snapshot.Get(filter);
            var context     = currentData.Contexts.Single();

            var meterValue = context.Meters.Single();

            meterValue.Name.Should().Be("test_meter");
            meterValue.Value.Count.Should().Be(1);

            Assert.Null(context.Counters.FirstOrDefault());
            Assert.Null(context.Gauges.FirstOrDefault());
            Assert.Null(context.Histograms.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
        }
        public void can_filter_metrics_by_tags_keys()
        {
            var filter      = new DefaultMetricsFilter().WhereMetricTaggedWithKey("tag1", "tag2");
            var currentData = _metrics.Snapshot.Get(filter);
            var context     = currentData.Contexts.Single();

            var counterValue = context.Counters.Single();
            var meterValue   = context.Meters.Single();

            counterValue.Tags.Keys.Should().Contain("tag1");
            meterValue.Tags.Keys.Should().Contain("tag2");

            Assert.Null(context.Gauges.FirstOrDefault());
            Assert.Null(context.Histograms.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
        }
        public void can_filter_metrics_by_histograms()
        {
            var filter      = new DefaultMetricsFilter().WhereType(MetricType.Histogram);
            var currentData = _metrics.Advanced.Data.ReadData(filter);
            var context     = currentData.Contexts.Single();

            var histogramValue = context.Histograms.Single();

            histogramValue.Name.Should().Be("test_histogram");
            histogramValue.Value.LastValue.Should().Be(5);

            Assert.Null(context.Counters.FirstOrDefault());
            Assert.Null(context.Gauges.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
            Assert.Null(context.Meters.FirstOrDefault());
        }
        public async Task can_filter_metrics_by_meters()
        {
            var filter      = new DefaultMetricsFilter().WhereType(MetricType.Meter);
            var currentData = await _metrics.Advanced.Data.ReadDataAsync(filter);

            var context = currentData.Contexts.Single();

            var meterValue = context.Meters.Single();

            meterValue.Name.Should().Be("test_meter");
            meterValue.Value.Count.Should().Be(1);

            Assert.Null(context.Counters.FirstOrDefault());
            Assert.Null(context.Gauges.FirstOrDefault());
            Assert.Null(context.Histograms.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
        }
        public async Task can_filter_metrics_by_tags_keys()
        {
            var filter      = new DefaultMetricsFilter().WhereMetricTaggedWithKey("tag1", "tag2");
            var currentData = await _metrics.Advanced.Data.ReadDataAsync(filter);

            var context = currentData.Contexts.Single();

            var counterValue = context.Counters.Single();
            var meterValue   = context.Meters.Single();

            counterValue.Tags.Should().ContainKey("tag1");
            meterValue.Tags.Should().ContainKey("tag2");

            Assert.Null(context.Gauges.FirstOrDefault());
            Assert.Null(context.Histograms.FirstOrDefault());
            Assert.Null(context.Timers.FirstOrDefault());
        }
Exemple #28
0
        public async Task can_disable_reporting_health()
        {
            var metricReporter = new Mock <IMetricReporter>();

            metricReporter.Setup(x => x.StartMetricTypeReport(typeof(HealthStatus)));
            metricReporter.Setup(x => x.EndMetricTypeReport(typeof(HealthStatus)));
            metricReporter.Setup(x => x.ReportHealth(It.IsAny <IEnumerable <HealthCheck.Result> >(), It.IsAny <IEnumerable <HealthCheck.Result> >(), It.IsAny <IEnumerable <HealthCheck.Result> >()));
            var token  = CancellationToken.None;
            var filter = new DefaultMetricsFilter().WithHealthChecks(false);

            await _reportGenerator.Generate(metricReporter.Object, _metrics, filter, token);

            metricReporter.Verify(p => p.StartMetricTypeReport(typeof(HealthStatus)), Times.Never);
            metricReporter.Verify(p => p.EndMetricTypeReport(typeof(HealthStatus)), Times.Never);
            metricReporter.Verify(p => p.ReportHealth(It.IsAny <IEnumerable <HealthCheck.Result> >(), It.IsAny <IEnumerable <HealthCheck.Result> >(), It.IsAny <IEnumerable <HealthCheck.Result> >()),
                                  Times.Never);
        }
Exemple #29
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTestStuff();
            services.AddLogging().AddRouting(options => { options.LowercaseUrls = true; });

            services.AddMvc(options => options.AddMetricsResourceFilter());

            var reportFilter = new DefaultMetricsFilter();

            reportFilter.WithHealthChecks(false);

            services.AddMetrics(Configuration.GetSection("AppMetrics"),
                                options =>
            {
                options.WithGlobalTags(
                    (globalTags, info) =>
                {
                    globalTags.Add("app", info.EntryAssemblyName);
                });
            }).
            AddJsonSerialization().
            AddReporting(
                factory =>
            {
                factory.AddInfluxDb(
                    new InfluxDBReporterSettings
                {
                    HttpPolicy = new HttpPolicy
                    {
                        FailuresBeforeBackoff = 3,
                        BackoffPeriod         = TimeSpan.FromSeconds(30),
                        Timeout = TimeSpan.FromSeconds(10)
                    },
                    InfluxDbSettings = new InfluxDBSettings(InfluxDbDatabase, InfluxDbUri),
                    ReportInterval   = TimeSpan.FromSeconds(5)
                }, reportFilter);
            }).
            AddHealthChecks(
                factory =>
            {
                factory.RegisterPingHealthCheck("google ping", "google.com", TimeSpan.FromSeconds(10));
                factory.RegisterHttpGetHealthCheck("github", new Uri("https://github.com/"), TimeSpan.FromSeconds(10));
            }).
            AddMetricsMiddleware(Configuration.GetSection("AspNetMetrics"));
        }
        public void can_filter_metrics_by_name_starting_with()
        {
            var filter      = new DefaultMetricsFilter().WhereMetricNameStartsWith("test_");
            var currentData = _metrics.Snapshot.Get(filter);
            var context     = currentData.Contexts.Single();

            var counterValue   = context.Counters.FirstOrDefault();
            var gaugeValue     = context.Gauges.FirstOrDefault();
            var meterValue     = context.Meters.FirstOrDefault();
            var histogramValue = context.Histograms.FirstOrDefault();
            var timerValue     = context.Timers.FirstOrDefault();

            counterValue.Should().NotBeNull();
            gaugeValue.Should().NotBeNull();
            meterValue.Should().NotBeNull();
            histogramValue.Should().NotBeNull();
            timerValue.Should().NotBeNull();
        }