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)}"); }
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); }
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); } } }
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); } } }
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 }); }
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 }); }