示例#1
0
        public void Write(StreamWriter streamWriter, MetricsContextValueSource metricContext, TimerValueSource metric)
        {
            WriteMetricName(streamWriter, metric.MultidimensionalName);

            var timerValue = metric.ValueProvider.GetValue(metric.ResetOnReporting);
            var value      = timerValue.Histogram;

            var fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Count));

            streamWriter.WriteLine($"{fullName} {value.Count.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Max));
            streamWriter.WriteLine($"{fullName} {value.Max.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Mean));
            streamWriter.WriteLine($"{fullName} {value.Mean.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Median));
            streamWriter.WriteLine($"{fullName} {value.Median.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Min));
            streamWriter.WriteLine($"{fullName} {value.Min.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.SampleSize));
            streamWriter.WriteLine($"{fullName} {value.SampleSize.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.StdDev));
            streamWriter.WriteLine($"{fullName} {value.StdDev.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Sum));
            streamWriter.WriteLine($"{fullName} {value.Sum.ToString(CultureInfo.InvariantCulture)}");
        }
示例#2
0
        public async Task Should_record_MessageProcessingTime_metric_when_queue_not_specified()
        {
            var address = Guid.NewGuid().ToString();
            var fixture = await TestFixture.CreateAsync(_testOutputHelper, builder =>
            {
                builder
                .AddConsumer(address, RoutingType.Anycast, async(message, consumer, token, provider) =>
                {
                    await consumer.AcceptAsync(message);
                })
                .AddMetrics(options => options.Context = "active-mq-metrics");
            });

            var producer = await fixture.Connection.CreateProducerAsync(address, fixture.CancellationToken);

            await producer.SendAsync(new Message("foo"), fixture.CancellationToken);

            MetricsContextValueSource metricsForContext = null;

            SpinWait.SpinUntil(() =>
            {
                metricsForContext = fixture.Metrics.Snapshot.GetForContext("active-mq-metrics");
                return(metricsForContext.Histograms.Any());
            }, TimeSpan.FromSeconds(5));

            var metric = metricsForContext.Histograms.FirstOrDefault(x => x.Name.Contains("Message Processing Time"));

            Assert.NotNull(metric);
            Assert.Equal("ns", metric.Unit.Name);
            var tags = (IDictionary <string, string>)metric.Tags.ToDictionary();

            Assert.Equal(address, Assert.Contains("Address", tags));
            Assert.Equal(RoutingType.Anycast.ToString(), Assert.Contains("RoutingType", tags));
            Assert.DoesNotContain("Queue", tags);
        }
示例#3
0
        public void Write(StreamWriter streamWriter, MetricsContextValueSource metricContext, GaugeValueSource metric)
        {
            WriteMetricName(streamWriter, metric.MultidimensionalName);

            var value    = metric.ValueProvider.GetValue(metric.ResetOnReporting);
            var fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags);

            streamWriter.WriteLine($"{fullName} {value.ToString(CultureInfo.InvariantCulture)}");
        }
        private void OutputHealthInfo()
        {
            Process p           = Process.GetCurrentProcess();
            long    memoryBytes = p.PrivateMemorySize64;

            if (_baselineMemoryBytes == 0)
            {
                _baselineMemoryBytes = memoryBytes;
            }

            if (memoryBytes > _maxMemoryBytes)
            {
                _maxMemoryBytes = memoryBytes;
            }

            TimeSpan uptime = DateTime.Now - p.StartTime;

            Console.WriteLine();

            Log.Information(
                "Memory => Current: {currentMemory}, Baseline: {baselineMemory}, Max: {maxMemory}. GC cycles: {gcCycles}",
                memoryBytes.Bytes().Humanize("0.0"),
                _baselineMemoryBytes.Bytes().Humanize("0.0"),
                _maxMemoryBytes.Bytes().Humanize("0.0"),
                _gcCycles);

            MetricsContextValueSource iotContext = _metrics.Snapshot.Get()?.Contexts?.FirstOrDefault(
                c => c.Context == MetricsRegistry.IotContext);

            if (iotContext != null)
            {
                CounterValueSource eventCounter = iotContext.Counters.FirstOrDefault(
                    c => c.Name == MetricsRegistry.IotHubEvents.Name);

                CounterValueSource bytesCounter = iotContext.Counters.FirstOrDefault(
                    c => c.Name == MetricsRegistry.IotHubBytesSent.Name);

                if (eventCounter != null && bytesCounter != null)
                {
                    double roughEventsPerMin = eventCounter.Value.Count / uptime.TotalMinutes;

                    Log.Information(
                        "Iot Hub Events => {eventsCount:###,###,##0} events, Rate / min: {eventRate:##0}, sent: {sentSize}",
                        eventCounter.Value.Count,
                        roughEventsPerMin,
                        bytesCounter.Value.Count.Bytes().Humanize("0.0"));
                }
            }

            Log.Information("Uptime: {uptime}", uptime.Humanize());

            Console.WriteLine();
        }
        public void Metrics()
        {
            IMetrics metrics = AppMetrics.CreateDefaultBuilder().Build();

            CounterOptions counterOptions = new CounterOptions()
            {
                Context = "App",
                Name    = "Counter",
            };

            metrics.Measure.Counter.Increment(counterOptions);

            MetricsContextValueSource context = metrics.Snapshot.GetForContext("App");
            CounterValue counterValue1        = context.Counters.First().Value;
        }
        private IEnumerable <MetricTelemetry> TranslateContext(MetricsContextValueSource ctx, DateTimeOffset now)
        {
            var context = Filter != null?ctx.Filter(Filter) : ctx;

            var contextName = context.Context;

            foreach (var source in context.ApdexScores)
            {
                yield return(Translate(source, contextName, now));
            }

            foreach (var source in context.Counters)
            {
                foreach (var mt in Translate(source, contextName, now))
                {
                    yield return(mt);
                }
            }

            foreach (var source in context.Gauges)
            {
                var mt = MetricFactory.CreateMetric(source, contextName, now);
                mt.Sum = source.Value;
                yield return(mt);
            }

            foreach (var source in context.Histograms)
            {
                yield return(Translate(source, contextName, now));
            }

            foreach (var source in context.Meters)
            {
                foreach (var mt in Translate(source, contextName, now))
                {
                    yield return(mt);
                }
            }

            foreach (var source in context.Timers)
            {
                foreach (var mt in Translate(source, contextName, now))
                {
                    yield return(mt);
                }
            }
        }
示例#7
0
        private IEnumerable <MetricDatum> TranslateContext(MetricsContextValueSource ctx, DateTimeOffset now)
        {
            var context = Filter != null?ctx.Filter(Filter) : ctx;

            var contextName = context.Context;

            foreach (var source in context.ApdexScores)
            {
                foreach (var mt in Translate(source, contextName, now))
                {
                    yield return(mt);
                }
            }

            foreach (var source in context.Counters)
            {
                yield return(Translate(source, contextName, now));
            }

            foreach (var source in context.Gauges)
            {
                var mt = new MetricDatum
                {
                    Value        = source.Value,
                    MetricName   = contextName,
                    TimestampUtc = now.UtcDateTime
                };
                yield return(mt);
            }

            foreach (var source in context.Histograms)
            {
                yield return(Translate(source, contextName, now));
            }

            foreach (var source in context.Meters)
            {
                yield return(Translate(source, contextName, now));
            }

            foreach (var source in context.Timers)
            {
                yield return(Translate(source, contextName, now));
            }
        }
        public IEnumerable <MetricTelemetry> Translate(MetricsContextValueSource context, DateTimeOffset now)
        {
            var contextName = context != null
                ? context.Context
                : throw new ArgumentNullException(nameof(context));

            foreach (var source in context.ApdexScores)
            {
                yield return(TranslateApdexSource(source, contextName, now));
            }

            foreach (var source in context.Counters)
            {
                foreach (var mt in TranslateCounterSource(source, contextName, now))
                {
                    yield return(mt);
                }
            }

            foreach (var source in context.Gauges)
            {
                yield return(TranslateGaugeSource(source, contextName, now));
            }

            foreach (var source in context.Histograms)
            {
                yield return(TranslateHistogramSource(source, contextName, now));
            }

            foreach (var source in context.Meters)
            {
                foreach (var mt in TranslateMeterSource(source, contextName, now))
                {
                    yield return(mt);
                }
            }

            foreach (var source in context.Timers)
            {
                foreach (var mt in TranslateTimerSource(source, contextName, now))
                {
                    yield return(mt);
                }
            }
        }
示例#9
0
        public void Write(StreamWriter streamWriter, MetricsContextValueSource metricContext, ApdexValueSource metric)
        {
            WriteMetricName(streamWriter, metric.MultidimensionalName);

            var value = metric.ValueProvider.GetValue(metric.ResetOnReporting);

            var fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Frustrating));

            streamWriter.WriteLine($"{fullName} {value.Frustrating.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.SampleSize));
            streamWriter.WriteLine($"{fullName} {value.SampleSize.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Satisfied));
            streamWriter.WriteLine($"{fullName} {value.Satisfied.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Score));
            streamWriter.WriteLine($"{fullName} {value.Score.ToString(CultureInfo.InvariantCulture)}");
            fullName = GetMetricRow(metricContext.Context, metric.MultidimensionalName, metric.Tags, nameof(value.Tolerating));
            streamWriter.WriteLine($"{fullName} {value.Tolerating.ToString(CultureInfo.InvariantCulture)}");
        }
        public static MetricsContext ToMetric(this MetricsContextValueSource source)
        {
            var jsonCoutners   = source.Counters.ToMetric();
            var jsonMeters     = source.Meters.ToMetric();
            var jsonGauges     = source.Gauges.ToMetric();
            var jsonHistograms = source.Histograms.ToMetric();
            var jsonTimers     = source.Timers.ToMetric();

            return(new MetricsContext
            {
                Counters = jsonCoutners,
                Meters = jsonMeters,
                Gauges = jsonGauges,
                Histograms = jsonHistograms,
                Timers = jsonTimers,
                Context = source.Context
            });
        }
示例#11
0
        private static MetricsContext ToSerializableMetric(this MetricsContextValueSource source)
        {
            var jsonCoutners    = source.Counters.ToSerializableMetric();
            var jsonMeters      = source.Meters.ToSerializableMetric();
            var jsonGauges      = source.Gauges.ToSerializableMetric();
            var jsonHistograms  = source.Histograms.ToSerializableMetric();
            var jsonTimers      = source.Timers.ToSerializableMetric();
            var jsonApdexScores = source.ApdexScores.ToSerializableMetric();

            return(new MetricsContext
            {
                Counters = jsonCoutners,
                Meters = jsonMeters,
                Gauges = jsonGauges,
                Histograms = jsonHistograms,
                Timers = jsonTimers,
                Context = source.Context,
                ApdexScores = jsonApdexScores
            });
        }