public ActiveMqMetricsRecorder(string name, ActiveMqMetricsOptions options, IMetrics metrics)
        {
            Name     = name;
            _metrics = metrics;

            _messageSendTime = new HistogramOptions
            {
                Context         = options.Context,
                Name            = "Message Send Time",
                MeasurementUnit = Unit.Custom("ns")
            };
            _messageSendRate = new MeterOptions
            {
                Context         = options.Context,
                Name            = "Message Send Rate",
                MeasurementUnit = Unit.Custom("msg")
            };
            _messageProcessingTime = new HistogramOptions
            {
                Context         = options.Context,
                Name            = "Message Processing Time",
                MeasurementUnit = Unit.Custom("ns")
            };
            _messageProcessingRate = new MeterOptions
            {
                Context         = options.Context,
                Name            = "Message Processing Rate",
                MeasurementUnit = Unit.Custom("msg"),
            };
        }
 public void MarkErrorCount(MeterOptions meterOptions)
 {
     if (this.AllowedMetrics.HasFlag(CacheMetrics.ErrorCount))
     {
         this.MetricsObj.Measure.Meter.Mark(meterOptions, MetricsTags);
     }
 }
Пример #3
0
        private static async Task RunMeter(IMetrics metrics, CancellationToken token)
        {
            var meter = new MeterOptions
            {
                Name            = "MyMeter",
                Context         = nameof(RunMeter),
                Tags            = new MetricTags("delay", "random"),
                MeasurementUnit = Unit.Calls,
                ReportSetItems  = true
            };

            var random  = new Random();
            var counter = 0;

            while (!token.IsCancellationRequested)
            {
                var delay = random.Next(100, 200);
                var route = counter % 2 == 0 ? "/user" : "/account";
                counter++;

                metrics.Measure.Meter.Mark(meter, route);

                await DelayOrComplete(token, delay);
            }
        }
Пример #4
0
 public AppMetricBehavior(IMetricsRoot metrics)
 {
     _metrics       = metrics;
     _requestMetric = new MeterOptions()
     {
         Name            = "Mediator Requests",
         MeasurementUnit = App.Metrics.Unit.Requests,
         RateUnit        = TimeUnit.Seconds,
         Context         = "application"
     };
     _exeTimer = new TimerOptions()
     {
         Name            = "Mediator Requests Execution Time",
         MeasurementUnit = App.Metrics.Unit.Requests,
         DurationUnit    = TimeUnit.Milliseconds,
         RateUnit        = TimeUnit.Seconds,
         Context         = "application"
     };
     _exception = new MeterOptions()
     {
         Name            = "Mediator Requests Exceptions",
         MeasurementUnit = App.Metrics.Unit.Requests,
         RateUnit        = TimeUnit.Seconds,
         Context         = "application"
     };
 }
Пример #5
0
        /// <inheritdoc />
        public void Mark(MeterOptions options, long amount, Action <MetricItem> itemSetup)
        {
            var item = new MetricItem();

            itemSetup(item);
            _registry.Meter(options, () => Advanced.BuildMeter(options)).Mark(item, amount);
        }
Пример #6
0
        public IMeter Meter <T>(MeterOptions options, Func <T> builder) where T : IMeterMetric
        {
            EnsureContextLabel(options);
            var registry = _contexts.GetOrAdd(options.Context, _newContextRegistry);

            return(registry.Meter(options, builder));
        }
 public IMeter Meter <T>(MeterOptions options, Func <T> builder) where T : IMeterMetric
 {
     return(_meters.GetOrAdd(options.Name, () =>
     {
         var meter = builder();
         return Tuple.Create((IMeter)meter, new MeterValueSource(options.Name, meter, options.MeasurementUnit, options.RateUnit, options.Tags));
     }));
 }
Пример #8
0
        private static async Task Main(string[] args)
        {
            var metrics = AppMetrics.CreateDefaultBuilder().Build();

            var counter = new CounterOptions {
                Name = "my_counter"
            };

            metrics.Measure.Counter.Increment(counter);

            var gauge = new GaugeOptions {
                Name = "my_gauge"
            };

            metrics.Measure.Gauge.SetValue(gauge, 1);

            var meter = new MeterOptions {
                Name = "my_meter"
            };

            metrics.Measure.Meter.Mark(meter);

            var histogram = new HistogramOptions {
                Name = "my_histogram"
            };

            metrics.Measure.Histogram.Update(histogram, 10);

            var timer = new TimerOptions {
                Name = "my_timer"
            };

            using (metrics.Measure.Timer.Time(timer))
            {
                await Task.Delay(100);
            }

            var apdex = new ApdexOptions {
                Name = "my_apdex", AllowWarmup = false, ApdexTSeconds = 0.1
            };

            using (metrics.Measure.Apdex.Track(apdex))
            {
                await Task.Delay(200);
            }

            var snapshot = metrics.Snapshot.Get();

            using (var stream = new MemoryStream())
            {
                await metrics.DefaultOutputMetricsFormatter.WriteAsync(stream, snapshot);

                var result = Encoding.UTF8.GetString(stream.ToArray());
                WriteLine(result);
            }

            ReadKey();
        }
        public MetricContextTestFixture()
        {
            ApdexOptions = new ApdexOptions
            {
                Name = "apdex"
            };

            CounterOptions = new CounterOptions
            {
                Name = "counter"
            };

            GaugeOptions = new GaugeOptions
            {
                Name = "gauge"
            };

            HistogramOptions = new HistogramOptions
            {
                Name = "histogram"
            };

            MeterOptions = new MeterOptions
            {
                Name = "meter"
            };

            TimerOptions = new TimerOptions
            {
                Name = "timer"
            };

            var tags = new GlobalMetricTags
            {
                { "key1", "value1" },
                { "key2", "value2" }
            };

            var contextualTags = new ContextualMetricTagProviders
            {
                { "key1", () => new Guid().ToString() },
                { "key2", () => new Guid().ToString() }
            };

            var samplingProvider = new DefaultSamplingReservoirProvider(() => new DefaultForwardDecayingReservoir());

            Registry         = new DefaultMetricContextRegistry("context_label", tags, contextualTags);
            ApdexBuilder     = new DefaultApdexBuilder(samplingProvider);
            HistogramBuilder = new DefaultHistogramBuilder(samplingProvider);
            CounterBuilder   = new DefaultCounterBuilder();
            GaugeBuilder     = new DefaultGaugeBuilder();
            MeterBuilder     = new DefaultMeterBuilder();
            TimerBuilder     = new DefaultTimerBuilder(samplingProvider);
            Clock            = new StopwatchClock();
        }
Пример #10
0
        public void can_mark_with_metric_item_by_amount()
        {
            var metricName = "test_mark_meter_with_metric_item_by_amount";
            var options    = new MeterOptions {
                Name = metricName
            };

            _manager.Mark(options, 5L, new MetricSetItem("tagKey", "tagvalue"));

            _fixture.Snapshot.GetMeterValue(_context, metricName).Items.Length.Should().Be(1);
        }
Пример #11
0
        static MeasureMeterBenchmark()
        {
            Metrics = new MeterOptions[NumberOfMetrics];

            for (var i = 0; i < NumberOfMetrics; i++)
            {
                Metrics[i] = new MeterOptions {
                    Name = $"metric_{i:D4}"
                };
            }
        }
Пример #12
0
        protected IMeter CreateMeter(string contextName, string name, bool suppressExportMetrics, MetricTags tags)
        {
            var meterOptions = new MeterOptions
            {
                Context        = contextName,
                Name           = name,
                ReportSetItems = !suppressExportMetrics
            };

            return(new Meter(_metrics.Provider.Meter, _metrics.Measure.Meter, meterOptions, tags));
        }
Пример #13
0
        public void can_mark_with_item()
        {
            var metricName = "test_mark_meter_with_item";
            var options    = new MeterOptions {
                Name = metricName
            };

            _manager.Mark(options, "item1");

            _fixture.Snapshot.GetMeterValue(_context, metricName).Items.Length.Should().Be(1);
        }
        public void Can_get_multidimensional_meter_value()
        {
            var metricName = "DefaultMetricValuesProviderTests_meter_multi";
            var options    = new MeterOptions
            {
                Name    = metricName,
                Context = Context
            };

            _measure.Meter.Mark(options, _tags[1], 1L);

            _provider.GetMeterValue(Context, _tags[1].AsMetricName(metricName)).Count.Should().Be(1);
        }
        public void Can_get_meter_value()
        {
            var metricName = "DefaultMetricValuesProviderTests_meter";
            var options    = new MeterOptions
            {
                Name    = metricName,
                Context = Context
            };

            _measure.Meter.Mark(options, 1L);

            _provider.GetMeterValue(Context, metricName).Count.Should().Be(1);
        }
Пример #16
0
        public void can_mark_multidimensional_with_item()
        {
            var metricName = "test_mark_meter_with_item_multi";
            var options    = new MeterOptions {
                Name = metricName
            };

            _manager.Mark(options, _fixture.Tags[0], "item1");
            _manager.Mark(options, _fixture.Tags[1], "item1");

            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[0].AsMetricName(metricName)).Items.Length.Should().Be(1);
            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[1].AsMetricName(metricName)).Items.Length.Should().Be(1);
        }
Пример #17
0
        public void can_mark_by_amount()
        {
            var metricName = "test_mark_meter_by_amount";
            var options    = new MeterOptions {
                Name = metricName
            };

            _manager.Mark(options, 2L);

            var data = _fixture.Registry.GetData(new NoOpMetricsFilter());

            data.Contexts.Single().Meters.Count(x => x.Name == metricName).Should().Be(1);
        }
        public void context_doesnt_exist_returns_default_meter()
        {
            var metricName = "DefaultMetricValuesProviderTests_meter_without_context";
            var options    = new MeterOptions
            {
                Name    = "different",
                Context = Context
            };

            _measure.Meter.Mark(options, 1L);

            _provider.GetMeterValue(Context, metricName).Should().Be(default(MeterValue));
        }
        public void Context_doesnt_exist_returns_default_meter_when_multidimensional()
        {
            var metricName = "DefaultMetricValuesProviderTests_meter_without_context_multi";
            var options    = new MeterOptions
            {
                Name    = "different",
                Context = Context
            };

            _measure.Meter.Mark(options, _tags[0], 1L);

            _provider.GetMeterValue(Context, _tags[0].AsMetricName(metricName)).Should().Be(default(MeterValue));
        }
        public void Can_get_meter_value_with_tags()
        {
            var metricName = "DefaultMetricValuesProviderTests_meter";
            var options    = new MeterOptions
            {
                Name    = metricName,
                Context = Context
            };
            var tags = new MetricTags("key", "value");

            _measure.Meter.Mark(options, tags, 1L);

            _provider.GetMeterValue(Context, tags.AsMetricName(metricName)).Count.Should().Be(1);
        }
Пример #21
0
        public void Can_add_instance_to_registry()
        {
            var metricName = "meter_provider_test";
            var options    = new MeterOptions
            {
                Name = metricName
            };

            _provide.Instance(options);

            _filter.WhereName(name => name == metricName);

            _fixture.Registry.GetData(_filter).Contexts.First().Meters.Count().Should().Be(1);
        }
Пример #22
0
        public void Can_add_multidimensional_to_registry()
        {
            var metricName = "meter_provider_test_multi";
            var options    = new MeterOptions
            {
                Name = metricName
            };

            _provide.Instance(options, _fixture.Tags[0]);

            _filter.WhereName(name => name == _fixture.Tags[0].AsMetricName(metricName));

            _fixture.Registry.GetData(_filter).Contexts.First().Meters.Count().Should().Be(1);
        }
        public IMeter Meter <T>(MeterOptions options, MetricTags tags, Func <T> builder)
            where T : IMeterMetric
        {
            if (_nullMetricsRegistry.IsValueCreated)
            {
                return(_nullMetricsRegistry.Value.Meter(options, tags, builder));
            }

            EnsureContextLabel(options);

            var contextRegistry = _contexts.GetOrAdd(options.Context, _newContextRegistry);

            return(contextRegistry.Meter(options, tags, builder));
        }
Пример #24
0
        public void does_not_throw_on_metrics_of_different_type_with_same_name()
        {
            ((Action)(() =>
            {
                var name = "Test";

                var apdexOptions = new ApdexOptions
                {
                    Name = name,
                    MeasurementUnit = Unit.Calls,
                };

                var counterOptions = new CounterOptions
                {
                    Name = name,
                    MeasurementUnit = Unit.Calls,
                };

                var meterOptions = new MeterOptions
                {
                    Name = name,
                    MeasurementUnit = Unit.Calls
                };

                var gaugeOptions = new GaugeOptions
                {
                    Name = name,
                    MeasurementUnit = Unit.Calls
                };

                var histogramOptions = new HistogramOptions
                {
                    Name = name,
                    MeasurementUnit = Unit.Calls
                };

                var timerOptions = new TimerOptions
                {
                    Name = name,
                    MeasurementUnit = Unit.Calls
                };

                _fixture.Metrics.Measure.Apdex.Track(apdexOptions);
                _fixture.Metrics.Measure.Gauge.SetValue(gaugeOptions, () => 0.0);
                _fixture.Metrics.Measure.Counter.Increment(counterOptions);
                _fixture.Metrics.Measure.Meter.Mark(meterOptions);
                _fixture.Metrics.Measure.Histogram.Update(histogramOptions, 1L);
                _fixture.Metrics.Measure.Timer.Time(timerOptions);
            })).ShouldNotThrow();
        }
Пример #25
0
        static void Main(string[] args)
        {
            var metrics = new MetricsBuilder()
                          .Report.ToConsole()
                          .Build();

            var cacheHitRatioGauge = new GaugeOptions
            {
                Name            = "Cache Gauge",
                MeasurementUnit = Unit.Calls
            };

            var cacheHitsMeter = new MeterOptions
            {
                Name            = "Cache Hits Meter",
                MeasurementUnit = Unit.Calls
            };

            var databaseQueryTimer = new TimerOptions
            {
                Name            = "Database Query Timer",
                MeasurementUnit = Unit.Calls,
                DurationUnit    = TimeUnit.Milliseconds,
                RateUnit        = TimeUnit.Milliseconds
            };

            var cacheHits = metrics.Provider.Meter.Instance(cacheHitsMeter);
            var calls     = metrics.Provider.Timer.Instance(databaseQueryTimer);

            var cacheHit = new Random().Next(0, 2) == 0;

            using (calls.NewContext())
            {
                if (cacheHit)
                {
                    cacheHits.Mark(5);
                }

                Thread.Sleep(cacheHit ? 10 : 100);
            }

            var val = cacheHits.GetValueOrDefault();

            metrics.Measure.Gauge.SetValue(cacheHitRatioGauge, () => new HitRatioGauge(cacheHits, calls, m => m.OneMinuteRate));

            Task.WhenAll(metrics.ReportRunner.RunAllAsync());

            Console.ReadKey();
        }
Пример #26
0
        public void can_mark_multidimensional()
        {
            var metricName = "test_mark_meter_multi";
            var options    = new MeterOptions {
                Name = metricName
            };

            _manager.Mark(options, _fixture.Tags[0]);
            _manager.Mark(options, _fixture.Tags[1]);

            var data = _fixture.Registry.GetData(new NoOpMetricsFilter());

            data.Contexts.Single().Meters.Count(x => x.Name == _fixture.Tags[0].AsMetricName(metricName)).Should().Be(1);
            data.Contexts.Single().Meters.Count(x => x.Name == _fixture.Tags[1].AsMetricName(metricName)).Should().Be(1);
        }
Пример #27
0
        public void can_mark_when_multidimensional_with_metric_item_by_amount()
        {
            var metricName = "test_mark_meter_with_metric_item_by_amount_multi";
            var options    = new MeterOptions {
                Name = metricName
            };

            _manager.Mark(options, _fixture.Tags[0], 5L, new MetricSetItem("tagKey", "tagvalue"));
            _manager.Mark(options, _fixture.Tags[1], 20L, new MetricSetItem("tagKey", "tagvalue"));

            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[0].AsMetricName(metricName)).Items.Length.Should().Be(1);
            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[0].AsMetricName(metricName)).Count.Should().Be(5);
            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[1].AsMetricName(metricName)).Items.Length.Should().Be(1);
            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[1].AsMetricName(metricName)).Count.Should().Be(20);
        }
        private static MeterOptions GetOrAddMeter(string type, IDictionary <string, MeterOptions> meters)
        {
            if (meters.ContainsKey(type))
            {
                return(meters[type]);
            }

            var meter = new MeterOptions
            {
                Name            = $"{type}_messages",
                MeasurementUnit = Unit.Events
            };

            meters[type] = meter;
            return(meter);
        }
Пример #29
0
        public void can_add_add_new_instance_to_registry()
        {
            var metricName = "meter_provider_metric_test";
            var options    = new MeterOptions
            {
                Name = metricName
            };

            var meterMetric = _fixture.Builder.Meter.Build(_fixture.Clock);

            _provide.Instance(options, () => meterMetric);

            _filter.WhereMetricName(name => name == metricName);

            _fixture.Registry.GetData(_filter).Contexts.First().Meters.Count().Should().Be(1);
        }
Пример #30
0
        public void can_mark_multidimensional_with_item_by_amount()
        {
            var metricName = "test_mark_meter_with_item_by_amount_multi";
            var options    = new MeterOptions {
                Name = metricName
            };

            _manager.Mark(options, _fixture.Tags[0], 5L, "item1");
            _manager.Mark(options, _fixture.Tags[1], 500L, "item1");

            var data = _fixture.Registry.GetData(new NoOpMetricsFilter());

            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[0].AsMetricName(metricName)).Items.Length.Should().Be(1);
            data.Contexts.Single().Meters.First(x => x.Name == _fixture.Tags[0].AsMetricName(metricName)).Value.Count.Should().Be(5);
            _fixture.Snapshot.GetMeterValue(_context, _fixture.Tags[1].AsMetricName(metricName)).Items.Length.Should().Be(1);
            data.Contexts.Single().Meters.First(x => x.Name == _fixture.Tags[1].AsMetricName(metricName)).Value.Count.Should().Be(500);
        }