예제 #1
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);
        }
        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));
            };
        }
예제 #3
0
        public void Clean_WithNoReportsRegistered_RemovesAllEvents()
        {
            ResetCleaner();

            const string context  = "";
            var          registry = new DefaultMetricsRegistry();

            EventMetricsCleaner.ContextRegistries.Add(context, registry);
            var timer = new MockTimer();

            EventMetricsCleaner.EnableTestTimer(timer);

            var metric = new EventMetric();

            registry.Event(MetricName, () => { return(metric); }, MetricTags.None);

            metric.Record();
            metric.Record();
            metric.Record();
            var registryCounts = GetRegistryEventDetailCounts(MetricNameType);

            registryCounts[context].Should().Be(3);

            timer.OnTimerCallback();

            registryCounts = GetRegistryEventDetailCounts(MetricNameType);
            registryCounts[context].Should().Be(0);
        }
예제 #4
0
        public void Clean_WithAllReportsFilteringOutEvents_RemovesAllEvents()
        {
            ResetCleaner();

            const string context  = "";
            var          registry = new DefaultMetricsRegistry();

            EventMetricsCleaner.ContextRegistries.Add(context, registry);
            var timer = new MockTimer();

            EventMetricsCleaner.EnableTestTimer(timer);

            var reportIndex1 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));
            var reportIndex2 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));
            var metric       = new EventMetric();

            registry.Event(MetricName, () => { return(metric); }, MetricTags.None);
            metric.Record();
            metric.Record();
            metric.Record();
            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex1, new List <EventValueSource>());
            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex2, new List <EventValueSource>());

            GetReportsReportedEventDetailCount(reportIndex1, MetricNameType).Should().Be(0);
            GetReportsReportedEventDetailCount(reportIndex2, MetricNameType).Should().Be(0);
            var registryCounts = GetRegistryEventDetailCounts(MetricNameType);

            registryCounts[context].Should().Be(3);

            timer.OnTimerCallback();

            registryCounts = GetRegistryEventDetailCounts(MetricNameType);
            registryCounts[context].Should().Be(0);
        }
예제 #5
0
        public void Clean_IgnoresReportsThatHaveNotReportedAnyEvents()
        {
            ResetCleaner();

            const string context  = "";
            var          registry = new DefaultMetricsRegistry();

            EventMetricsCleaner.ContextRegistries.Add(context, registry);
            var timer = new MockTimer();

            EventMetricsCleaner.EnableTestTimer(timer);

            var reportIndex1 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));
            var reportIndex2 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));
            var metric       = new EventMetric();

            registry.Event(MetricName, () => { return(metric); }, MetricTags.None);

            metric.Record();
            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex1, registry.DataProvider.Events);

            GetReportsReportedEventDetailCount(reportIndex1, metricNameTypeTags).Should().Be(1);
            GetReportsReportedEventDetailCount(reportIndex2, metricNameTypeTags).Should().Be(0);

            timer.OnTimerCallback();

            var registryCounts = GetRegistryEventDetailCounts(MetricNameType);

            registryCounts[context].Should().Be(0);
        }
예제 #6
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();
        }
예제 #7
0
        public void Clean_WithMultipleRegistriesInSeparateContexts_RemovesEvents()
        {
            ResetCleaner();

            const string ctx1      = "ctx1";
            var          registry1 = new DefaultMetricsRegistry();

            EventMetricsCleaner.ContextRegistries.Add(ctx1, registry1);

            const string ctx2      = "ctx2";
            var          registry2 = new DefaultMetricsRegistry();

            EventMetricsCleaner.ContextRegistries.Add(ctx2, registry2);

            var timer = new MockTimer();

            EventMetricsCleaner.EnableTestTimer(timer);

            var reportIndex1 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));
            var metric1      = new EventMetric();

            registry1.Event("test1", () => { return(metric1); }, MetricTags.None);
            metric1.Record();
            metric1.Record();
            metric1.Record();
            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex1, registry1.DataProvider.Events);

            var reportIndex2 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));
            var metric2      = new EventMetric();

            registry2.Event("test2", () => { return(metric2); }, MetricTags.None);
            metric2.Record();
            metric2.Record();
            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex2, registry2.DataProvider.Events);

            var registryCounts = GetRegistryEventDetailCounts("test1.event");

            registryCounts[ctx1].Should().Be(3);
            registryCounts[ctx2].Should().Be(0);
            registryCounts = GetRegistryEventDetailCounts("test2.event");
            registryCounts[ctx1].Should().Be(0);
            registryCounts[ctx2].Should().Be(2);

            timer.OnTimerCallback();

            registryCounts = GetRegistryEventDetailCounts("test1.event");
            registryCounts[ctx1].Should().Be(0);
            registryCounts[ctx2].Should().Be(0);
            registryCounts = GetRegistryEventDetailCounts("test2.event");
            registryCounts[ctx1].Should().Be(0);
            registryCounts[ctx2].Should().Be(0);
        }
예제 #8
0
        /// <inheritdoc />
        public IMetricsRoot Build()
        {
            IMetricsRegistry registry = new NullMetricsRegistry();

            if (_options == null)
            {
                _options = new MetricsOptions();
            }

            if (_options.Enabled)
            {
                registry = new DefaultMetricsRegistry(_options.DefaultContextLabel, _clock, ContextRegistry);
            }

            if (_metricsOutputFormatters.Count == 0)
            {
                _metricsOutputFormatters.Add(new MetricsTextOutputFormatter());
            }

            if (_envFormatters.Count == 0)
            {
                _envFormatters.Add(new EnvInfoTextOutputFormatter());
            }

            var builderFactory = new DefaultMetricsBuilderFactory(_defaultSamplingReservoir);
            var measure        = new DefaultMeasureMetricsProvider(registry, builderFactory, _clock);
            var provider       = new DefaultMetricsProvider(registry, builderFactory, _clock);
            var snapshot       = new DefaultMetricValuesProvider(_metricsFilter, registry);
            var manage         = new DefaultMetricsManager(registry);
            var metrics        = new DefaultMetrics(_clock, _metricsFilter, measure, builderFactory, provider, snapshot, manage);
            var defaultMetricsOutputFormatter = _defaultMetricsOutputFormatter ?? _metricsOutputFormatters.FirstOrDefault();
            var defaultEnvOutputFormatter     = _defauEnvOutputFormatter ?? _envFormatters.FirstOrDefault();

            if (CanReport())
            {
                _metricsReportRunner = new DefaultMetricsReportRunner(metrics, _reporters);
            }

            return(new MetricsRoot(
                       metrics,
                       _options,
                       _metricsOutputFormatters,
                       _envFormatters,
                       defaultMetricsOutputFormatter,
                       defaultEnvOutputFormatter,
                       _environmentInfoProvider,
                       _reporters,
                       _metricsReportRunner));

            IMetricContextRegistry ContextRegistry(string context) =>
            new DefaultMetricContextRegistry(context, new GlobalMetricTags(_options.GlobalTags));
        }
예제 #9
0
        public void Update_RegistersEventAssociatedWithReport()
        {
            ResetCleaner();

            var registry = new DefaultMetricsRegistry();

            registry.Event(MetricName, () => { return(new EventMetric()); }, MetricTags.None);
            var reportIndex = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));

            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex, registry.DataProvider.Events);

            GetReportsEventCount(reportIndex).Should().Be(1);
        }
예제 #10
0
        public MetricsFixture()
        {
            var metricsLogger       = _loggerFactory.CreateLogger <DefaultAdvancedMetrics>();
            var healthFactoryLogger = _loggerFactory.CreateLogger <HealthCheckFactory>();
            var clock   = new TestClock();
            var options = new AppMetricsOptions {
                DefaultSamplingType = SamplingType.LongTerm
            };
            Func <string, IMetricContextRegistry> newContextRegistry = name => new DefaultMetricContextRegistry(name);
            var registry           = new DefaultMetricsRegistry(_loggerFactory, options, clock, new EnvironmentInfoProvider(), newContextRegistry);
            var healthCheckFactory = new HealthCheckFactory(healthFactoryLogger);
            var advancedContext    = new DefaultAdvancedMetrics(metricsLogger, options, clock, new DefaultMetricsFilter(), registry, healthCheckFactory);

            Metrics = new DefaultMetrics(options, registry, advancedContext);
        }
 public HealthCheckRegistryTests()
 {
     _metircsSetup = healthCheckFactory =>
     {
         var metricsLogger = LoggerFactory.CreateLogger <DefaultAdvancedMetrics>();
         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(LoggerFactory),
                                                   newContextRegistry);
         var advancedContext = new DefaultAdvancedMetrics(metricsLogger, options, clock, new DefaultMetricsFilter(), registry,
                                                          healthCheckFactory);
         return(new DefaultMetrics(options, registry, advancedContext));
     };
 }
예제 #12
0
        public MetricCoreTestFixture()
        {
            var options = new MetricsOptions();

            Clock   = new TestClock();
            Builder = new DefaultMetricsBuilderFactory(new DefaultSamplingReservoirProvider(() => new DefaultForwardDecayingReservoir()));

            IMetricContextRegistry ContextRegistrySetup(string context) => new DefaultMetricContextRegistry(context);

            var registry = new DefaultMetricsRegistry(options.DefaultContextLabel, Clock, ContextRegistrySetup);

            Registry  = registry;
            Providers = new DefaultMetricsProvider(Registry, Builder, Clock);
            Snapshot  = new DefaultMetricValuesProvider(new NullMetricsFilter(), Registry);
            Managers  = new DefaultMeasureMetricsProvider(Registry, Builder, Clock);
            Context   = options.DefaultContextLabel;
        }
        public MetricCoreTestFixture()
        {
            var loggerFactory = new LoggerFactory();
            var options       = new AppMetricsOptions();

            Clock   = new TestClock();
            Builder = new DefaultMetricsBuilderFactory();

            Func <string, IMetricContextRegistry> contextRegistrySetup = context => new DefaultMetricContextRegistry(context);
            var registry = new DefaultMetricsRegistry(loggerFactory, options, Clock, new EnvironmentInfoProvider(), contextRegistrySetup);

            Registry  = registry;
            Providers = new DefaultMetricsProvider(Registry, Builder, Clock);
            Snapshot  = new DefaultMetricValuesProvider(new NoOpMetricsFilter(), Registry);
            Managers  = new DefaultMeasureMetricsProvider(Registry, Builder, Clock);
            Context   = options.DefaultContextLabel;
        }
예제 #14
0
        public void RemoveEvent_RemovesEventFromAllReports()
        {
            ResetCleaner();

            var registry = new DefaultMetricsRegistry();

            registry.Event(MetricName, () => { return(new EventMetric()); }, MetricTags.None);
            var reportIndex1 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));
            var reportIndex2 = EventMetricsCleaner.RegisterReport(new TimeSpan(0, 0, 0, 60));

            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex1, registry.DataProvider.Events);
            EventMetricsCleaner.UpdateTotalReportedEvents(reportIndex2, registry.DataProvider.Events);

            EventMetricsCleaner.RemoveEvent(metricNameTypeTags);

            GetReportsEventCount(reportIndex1).Should().Be(0);
            GetReportsEventCount(reportIndex2).Should().Be(0);
        }
예제 #15
0
        public MetricsFixture()
        {
            Clock = new TestClock();
            var options = new MetricsOptions();

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

            var registry             = new DefaultMetricsRegistry(options.DefaultContextLabel, Clock, NewContextRegistry);
            var metricBuilderFactory = new DefaultMetricsBuilderFactory(new DefaultSamplingReservoirProvider(() => new DefaultForwardDecayingReservoir()));
            var filter                        = new MetricsFilter();
            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);

            Metrics = new DefaultMetrics(
                Clock,
                filter,
                metricsManagerFactory,
                metricBuilderFactory,
                metricsManagerAdvancedFactory,
                dataManager,
                metricsManager);
        }