public TimerSerializationTests(ITestOutputHelper output, MetricProviderTestFixture fixture) { _output = output; _serializer = new MetricDataSerializer(); _timer = fixture.Timers.First(x => x.Name == fixture.TimerNameDefault); _timerWithGroup = fixture.Timers.First(x => x.Name == fixture.TimerNameWithGroup); }
private MetricsContextValueSource CreateValueSource( string context, GaugeValueSource gauges = null, CounterValueSource counters = null, MeterValueSource meters = null, HistogramValueSource histograms = null, BucketHistogramValueSource bucketHistograms = null, TimerValueSource timers = null, BucketTimerValueSource bucketTimers = null, ApdexValueSource apdexScores = null) { var gaugeValues = gauges != null ? new[] { gauges } : Enumerable.Empty <GaugeValueSource>(); var counterValues = counters != null ? new[] { counters } : Enumerable.Empty <CounterValueSource>(); var meterValues = meters != null ? new[] { meters } : Enumerable.Empty <MeterValueSource>(); var histogramValues = histograms != null ? new[] { histograms } : Enumerable.Empty <HistogramValueSource>(); var bucketHistogramValues = bucketHistograms != null ? new[] { bucketHistograms } : Enumerable.Empty <BucketHistogramValueSource>(); var timerValues = timers != null ? new[] { timers } : Enumerable.Empty <TimerValueSource>(); var bucketTimerValues = bucketTimers != null ? new[] { bucketTimers } : Enumerable.Empty <BucketTimerValueSource>(); var apdexScoreValues = apdexScores != null ? new[] { apdexScores } : Enumerable.Empty <ApdexValueSource>(); return(new MetricsContextValueSource( context, gaugeValues, counterValues, meterValues, histogramValues, bucketHistogramValues, timerValues, bucketTimerValues, apdexScoreValues)); }
public void can_report_timers__when_multidimensional() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer" + MultidimensionalMetricNameSuffix, ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, _tags); var payloadBuilder = new GraphitePayloadBuilder(_settings.GraphiteSettings.MetricNameFormatter, _settings.DataKeys, Origin); var reporter = CreateReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", timerValueSource); payloadBuilder.PayloadFormatted(). Should(). Be( "env.staging.timer.test.test_timer.host.server1.Total 1 0\nenv.staging.timer.test.test_timer.host.server1.Rate-1-Min 0.00 0\nenv.staging.timer.test.test_timer.host.server1.Rate-5-Min 0.00 0\nenv.staging.timer.test.test_timer.host.server1.Rate-15-Min 0.00 0\nenv.staging.timer.test.test_timer.host.server1.Samples 1 0\nenv.staging.timer.test.test_timer.host.server1.Last 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Count 1 0\nenv.staging.timer.test.test_timer.host.server1.Sum 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Min 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Max 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Mean 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Median 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.StdDev 0.00 0\nenv.staging.timer.test.test_timer.host.server1.Percentile-999 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Percentile-99 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Percentile-98 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Percentile-95 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.Percentile-75 1000.00 0\nenv.staging.timer.test.test_timer.host.server1.User-Last client1 0\nenv.staging.timer.test.test_timer.host.server1.User-Min client1 0\nenv.staging.timer.test.test_timer.host.server1.User-Max client1 0\n"); }
private IEnumerable <TimerValueSource> SetupTimers() { const int count = 5; var meterValue = new MeterValue( count, 1, 2, 3, 4, TimeUnit.Seconds, new[] { new MeterValue.SetItem("item", 0.5, new MeterValue(1, 2, 3, 4, 5, TimeUnit.Seconds, new MeterValue.SetItem[0])) }); var histogramValue = new HistogramValue(count, 1, 2, "3", 4, "5", 6, 7, "8", 9, 10, 11, 12, 13, 14, 15, 16); var timerValue = new TimerValue(meterValue, histogramValue, 0, TimeUnit.Nanoseconds); var timer = new TimerValueSource( TimerNameDefault, ConstantValue.Provider(timerValue), Unit.Requests, TimeUnit.Seconds, TimeUnit.Milliseconds, Tags); return(new[] { timer }); }
public void can_report_timers() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer", ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, MetricTags.Empty); var payloadBuilder = new LineProtocolPayloadBuilder(_settings.DataKeys, _settings.MetricNameFormatter); var reporter = CreateReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", timerValueSource); payloadBuilder.PayloadFormatted(false). Should(). Be( "test__test_timer,mtype=timer,unit=none,unit_dur=ms,unit_rate=ms count.meter=1i,rate1m=0,rate5m=0,rate15m=0,samples=1i,last=1000,count.hist=1i,sum=1000,min=1000,max=1000,mean=1000,median=1000,stddev=0,p999=1000,p99=1000,p98=1000,p95=1000,p75=1000,user.last=\"client1\",user.min=\"client1\",user.max=\"client1\"\n"); }
public void can_report_timers__when_multidimensional() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer" + MultidimensionalMetricNameSuffix, ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, _tags); var payloadBuilder = new LineProtocolPayloadBuilder(); var reporter = CreateReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", timerValueSource); payloadBuilder.PayloadFormatted(). Should(). Be( "test__test_timer,host=server1,env=staging count.meter=1i,rate1m=0,rate5m=0,rate15m=0,samples=1i,last=1000,count.hist=1i,min=1000,max=1000,mean=1000,median=1000,stddev=0,p999=1000,p99=1000,p98=1000,p95=1000,p75=1000,user.last=\"client1\",user.min=\"client1\",user.max=\"client1\"\n"); }
public void can_hummanize_timer() { var expected = "\r\n\r\n Active Sessions = 0\r\n Total Time = 0.00 ms\r\n Count = 5 Requests\r\n Mean Value = 1.00 Requests/s\r\n 1 Minute Rate = 2.00 Requests/s\r\n 5 Minute Rate = 3.00 Requests/s\r\n 15 Minute Rate = 4.00 Requests/s\r\n Total Items = 1\r\n Item 0 = 00.50% 1 Requests [item]\r\n Count = 1 Requests\r\n Mean Value = 2.00 Requests/s\r\n 1 Minute Rate = 3.00 Requests/s\r\n 5 Minute Rate = 4.00 Requests/s\r\n 15 Minute Rate = 5.00 Requests/s\r\n\r\n Count = 5 Requests\r\n Last = 0.00 Requests\r\n Last User Value = 3\r\n Min = 0.00 Requests\r\n Min User Value = 8\r\n Max = 0.00 Requests\r\n Max User Value = 5\r\n Mean = 0.00 Requests\r\n StdDev = 0.00 Requests\r\n Median = 0.00 Requests\r\n 75% <= 0.00 Requests\r\n 95% <= 0.00 Requests\r\n 98% <= 0.00 Requests\r\n 99% <= 0.00 Requests\r\n 99.9% <= 0.00 Requests\r\n"; const int count = 5; var meterValue = new MeterValue( count, 1, 2, 3, 4, TimeUnit.Seconds, new[] { new MeterValue.SetItem("item", 0.5, new MeterValue(1, 2, 3, 4, 5, TimeUnit.Seconds, new MeterValue.SetItem[0])) }); var histogramValue = new HistogramValue(count, 2, "3", 4, "5", 6, 7, "8", 9, 10, 11, 12, 13, 14, 15, 16); var timerValue = new TimerValue(meterValue, histogramValue, 0, 1, TimeUnit.Nanoseconds); var timerValueSource = new TimerValueSource( "test_timer", ConstantValue.Provider(timerValue), Unit.Requests, TimeUnit.Seconds, TimeUnit.Milliseconds, MetricTags.None); var result = timerValueSource.Hummanize(); Assert.Equal(result, expected); }
public void can_report_timers__when_multidimensional() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer" + MultidimensionalMetricNameSuffix, ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, _tags); var payloadBuilder = new TestPayloadBuilder(); var reporter = new TestReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", timerValueSource); payloadBuilder.PayloadFormatted(). Should(). Be( "test__test_timer host=server1 env=staging mtype=timer count.meter=1i rate1m=0 rate5m=0 rate15m=0 samples=1i last=1000 count.hist=1i sum=1000 min=1000 max=1000 mean=1000 median=1000 stddev=0 p999=1000 p99=1000 p98=1000 p95=1000 p75=1000 user.last=\"client1\" user.min=\"client1\" user.max=\"client1\"" + Environment.NewLine); }
private static IEnumerable <MetricTelemetry> TranslateTimerSource(TimerValueSource source, string contextName, DateTimeOffset now) { var mt = MetricFactory.CreateMetric(source, contextName, now); TranslateTags(source.Tags, mt); TranslateHistogram(source.Value.Histogram, mt, Constants.TimerHistogramTypeValue); mt.Properties[Constants.UnitKey] = source.DurationUnit.ToShortString(); yield return(mt); var unit = source.Value.Rate.RateUnit.ToShortString(); mt = MetricFactory.CreateMetric(source, contextName, now, "rate"); TranslateTags(source.Tags, mt); TranslateMeterValue(source.Value.Rate, mt, unit); yield return(mt); foreach (var item in source.Value.Rate.Items) { mt = MetricFactory.CreateMetric(source, contextName, now, "rate", item.Item); TranslateTags(source.Tags, mt); TranslateTags(item.Tags, mt); TranslateMeterItem(item, mt, unit, Constants.TimerMeterTypeValue); yield return(mt); } }
public void can_report_timers() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer", ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Minutes, TimeUnit.Milliseconds, MetricTags.Empty); var payloadBuilder = new TestPayloadBuilder(); var reporter = new TestReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", timerValueSource); payloadBuilder.PayloadFormatted(). Should(). Be( "test__test_timer mtype=timer unit=none unit_dur=ms unit_rate=min count.meter=1i rate1m=0 rate5m=0 rate15m=0 samples=1i last=1000 count.hist=1i sum=1000 min=1000 max=1000 mean=1000 median=1000 stddev=0 p999=1000 p99=1000 p98=1000 p95=1000 p75=1000 user.last=\"client1\" user.min=\"client1\" user.max=\"client1\"" + Environment.NewLine); }
public void can_report_timers_with_group() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer", "endpoints", ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, MetricTags.Empty); var payloadBuilder = new LineProtocolPayloadBuilder(); var reporter = CreateReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", timerValueSource); payloadBuilder.PayloadFormatted(). Should(). Be( "test__endpoints,group_item=test_timer count.meter=1i,rate1m=0,rate5m=0,rate15m=0,rate.mean=Infinity,samples=1i,last=1000,count.hist=1i,min=1000,max=1000,mean=1000,median=1000,stddev=0,p999=1000,p99=1000,p98=1000,p95=1000,p75=1000,user.last=\"client1\",user.min=\"client1\",user.max=\"client1\"\n"); }
private void ReportTimer(TimerValueSource g) { string name = g.Name; TimerValue value = GetMetricValueSourceValue <TimerValue>(g.ValueProvider); Unit unit = g.Unit; TimeUnit rateUnit = g.RateUnit; TimeUnit durationUnit = g.DurationUnit; Pack(name, TimerColumns, new object[] { value.Rate.Count, value.ActiveSessions, value.Rate.MeanRate, value.Rate.OneMinuteRate, value.Rate.FiveMinuteRate, value.Rate.FifteenMinuteRate, value.Histogram.LastValue, value.Histogram.LastUserValue ?? "\"\"", value.Histogram.Min, value.Histogram.MinUserValue ?? "\"\"", value.Histogram.Mean, value.Histogram.Max, value.Histogram.MaxUserValue ?? "\"\"", value.Histogram.StdDev, value.Histogram.Median, value.Histogram.Percentile75, value.Histogram.Percentile95, value.Histogram.Percentile98, value.Histogram.Percentile99, value.Histogram.Percentile999, value.Histogram.SampleSize }, g.Tags); }
public JsonSerializationTests() { var eventFields = new Dictionary <string, object>(); eventFields.Add("field", "value"); eventFields.Add("abc", "123"); eventValue = new EventValue(new List <EventDetails> { new EventDetails(eventFields, new DateTime(1, 1, 1)) }); this.timerValue = new TimerValue(this.meterValue, this.histogramValue, 0, 1, TimeUnit.Nanoseconds); this.counter = new CounterValueSource("test1", Provider(counterValue), Unit.Errors, MetricTags.None); this.meter = new MeterValueSource("test2", Provider(meterValue), Unit.Calls, TimeUnit.Seconds, MetricTags.None); this.histogram = new HistogramValueSource("test3", Provider(histogramValue), Unit.Items, MetricTags.None); this.timer = new TimerValueSource("test4", Provider(timerValue), Unit.Requests, TimeUnit.Seconds, TimeUnit.Milliseconds, MetricTags.None); this.evnt = new EventValueSource("test5", Provider(eventValue), MetricTags.None); this.data = new MetricsData("test", new DateTime(2014, 2, 17), new[] { new EnvironmentEntry("name", "1") }, new[] { gauge }, new[] { counter }, new[] { meter }, new[] { histogram }, new[] { timer }, new[] { evnt }, Enumerable.Empty <MetricsData>() ); this.jsonContext = JsonMetricsContext.FromContext(this.data, "1"); }
public static IEnumerable <MetricsValue> ToPrometheusMetrics(this TimerValueSource metric) { // Prometheus advocates always using seconds as a base unit for time var rescaledVal = metric.Value.Scale(TimeUnit.Seconds, TimeUnit.Seconds); var result = new List <MetricsValue> { new MetricsValue { Summary = new Summary { Sample_Count = (ulong)rescaledVal.Rate.Count, Sample_Sum = rescaledVal.Histogram.Sum, Quantile = { new Quantile { QuantileValue = 0.5, Value = rescaledVal.Histogram.Median }, new Quantile { QuantileValue = 0.75, Value = rescaledVal.Histogram.Percentile75 }, new Quantile { QuantileValue = 0.95, Value = rescaledVal.Histogram.Percentile95 }, new Quantile { QuantileValue = 0.99, Value = rescaledVal.Histogram.Percentile99 } } }, Label = metric.Tags.ToLabelPairs() } }; return(result); }
private static MetricDatum Translate(TimerValueSource source, string contextName, DateTimeOffset now) { var mt = new MetricDatum { MetricName = contextName, TimestampUtc = now.UtcDateTime, StatisticValues = new StatisticSet { Maximum = source.Value.Histogram.Max, Minimum = source.Value.Histogram.Min, SampleCount = source.Value.Histogram.Count, Sum = source.Value.Histogram.Sum }, Dimensions = new List <Dimension> { new Dimension { Name = nameof(source.Value.Rate.MeanRate), Value = source.Value.Rate.MeanRate.ToString() }, new Dimension { Name = nameof(source.Value.Rate.OneMinuteRate), Value = source.Value.Rate.OneMinuteRate.ToString() }, new Dimension { Name = nameof(source.Value.Rate.FiveMinuteRate), Value = source.Value.Rate.FiveMinuteRate.ToString() }, new Dimension { Name = nameof(source.Value.Rate.FifteenMinuteRate), Value = source.Value.Rate.FifteenMinuteRate.ToString() }, } }; return(mt); }
public static void HummanizeTimer(this StringBuilder sb, TimerValueSource timer) { sb.AppendLine(); sb.AppendLine("Active Sessions".FormatReadableMetricValue(timer.Value.ActiveSessions.ToString())); sb.HumanizeMeter(timer.Value.Rate, timer.Unit); sb.HumanizeHistogram(timer.Value.Histogram, timer.Unit); }
/// <inheritdoc /> public bool IsTimerMatch(TimerValueSource timer) { if (_types != null && !_types.Contains(MetricType.Timer)) { return(false); } return(IsMetricNameMatch(timer.Name) && IsTagMatch(timer.Tags)); }
public ITimer Timer <T>(TimerOptions options, Func <T> builder) where T : ITimerMetric { return(_timers.GetOrAdd(options.Name, () => { var timer = builder(); var valueSource = new TimerValueSource(options.Name, timer, options.MeasurementUnit, options.RateUnit, options.DurationUnit, AllTags(options.Tags)); return Tuple.Create((ITimer)timer, valueSource); })); }
private static IEnumerable <JsonProperty> ToJsonProperties(TimerValueSource timer) { yield return(new JsonProperty("Name", timer.Name)); yield return(new JsonProperty("Rate", ToJsonProperties(timer.Value.Rate.Scale(timer.RateUnit)))); yield return(new JsonProperty("Histogram", ToJsonProperties(timer.Value.Histogram.Scale(timer.DurationUnit)))); yield return(new JsonProperty("Unit", timer.Unit.Name)); yield return(new JsonProperty("RateUnit", timer.RateUnit.Unit())); yield return(new JsonProperty("DurationUnit", timer.DurationUnit.Unit())); }
public static JsonTimer FromTimer(TimerValueSource timer) { return(new JsonTimer { Name = timer.Name, Count = timer.Value.Rate.Count, ActiveSessions = timer.Value.ActiveSessions, Rate = ToRate(timer.Value.Rate), Histogram = ToHistogram(timer.Value.Histogram), Unit = timer.Unit.Name, RateUnit = timer.RateUnit.Unit(), DurationUnit = timer.DurationUnit.Unit(), Tags = timer.Tags }); }
public JsonSerializationTests() { this.timerValue = new TimerValue(this.meterValue, this.histogramValue, 0, 1, TimeUnit.Nanoseconds); this.counter = new CounterValueSource("test1", Provider(counterValue), Unit.Errors, MetricTags.None); this.meter = new MeterValueSource("test2", Provider(meterValue), Unit.Calls, TimeUnit.Seconds, MetricTags.None); this.histogram = new HistogramValueSource("test3", Provider(histogramValue), Unit.Items, MetricTags.None); this.timer = new TimerValueSource("test4", Provider(timerValue), Unit.Requests, TimeUnit.Seconds, TimeUnit.Milliseconds, MetricTags.None); this.data = new MetricsData("test", new DateTime(2014, 2, 17), new[] { new EnvironmentEntry("name", "1") }, new[] { gauge }, new[] { counter }, new[] { meter }, new[] { histogram }, new[] { timer }, Enumerable.Empty <MetricsData>() ); this.jsonContext = JsonMetricsContext.FromContext(this.data, "1"); }
public static JsonTimer FromTimer(TimerValueSource timer) { return new JsonTimer { Name = timer.Name, Count = timer.Value.Rate.Count, ActiveSessions = timer.Value.ActiveSessions, Rate = ToRate(timer.Value.Rate), Histogram = ToHistogram(timer.Value.Histogram), Unit = timer.Unit.Name, RateUnit = timer.RateUnit.Unit(), DurationUnit = timer.DurationUnit.Unit(), Tags = timer.Tags }; }
public static Timer ToMetric(this TimerValueSource source) { var histogramData = new Timer.HistogramData { LastValue = source.Value.Histogram.LastValue, LastUserValue = source.Value.Histogram.LastUserValue, Max = source.Value.Histogram.Max, MaxUserValue = source.Value.Histogram.MaxUserValue, Mean = source.Value.Histogram.Mean, Min = source.Value.Histogram.Min, MinUserValue = source.Value.Histogram.MinUserValue, StdDev = source.Value.Histogram.StdDev, Median = source.Value.Histogram.Median, Percentile75 = source.Value.Histogram.Percentile75, Percentile95 = source.Value.Histogram.Percentile95, Percentile98 = source.Value.Histogram.Percentile98, Percentile99 = source.Value.Histogram.Percentile99, Percentile999 = source.Value.Histogram.Percentile999, SampleSize = source.Value.Histogram.SampleSize, }; var rateData = new Timer.RateData { MeanRate = source.Value.Rate.MeanRate, OneMinuteRate = source.Value.Rate.OneMinuteRate, FiveMinuteRate = source.Value.Rate.FiveMinuteRate, FifteenMinuteRate = source.Value.Rate.FifteenMinuteRate }; return new Timer { Name = source.Name, Count = source.Value.Rate.Count, ActiveSessions = source.Value.ActiveSessions, TotalTime = source.Value.TotalTime, Rate = rateData, Histogram = histogramData, Unit = source.Unit.Name, RateUnit = source.RateUnit.Unit(), DurationUnit = source.DurationUnit.Unit(), Tags = source.Tags.ToDictionary() }; }
public void can_report_timers() { var metricsMock = new Mock <IMetrics>(); var clock = new TestClock(); var timer = new TimerMetric(SamplingType.ExponentiallyDecaying, 1028, 0.015, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource("test timer", ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, MetricTags.None); var payloadBuilder = new LineProtocolPayloadBuilder(); var reporter = CreateReporter(payloadBuilder); reporter.StartReportRun(metricsMock.Object); reporter.ReportMetric("test", timerValueSource); payloadBuilder.PayloadFormatted() .Should() .Be( "test__test_timer count.meter=1i,rate1m=0,rate5m=0,rate15m=0,rate.mean=Infinity,samples=1i,last=1000,count.hist=1i,min=1000,max=1000,mean=1000,median=1000,stddev=0,p999=1000,p99=1000,p98=1000,p95=1000,p75=1000,user.last=\"client1\",user.min=\"client1\",user.max=\"client1\"\n"); }
public static IEnumerable <MetricValue> ToMackerelMetrics(this TimerValueSource metric) { var rescaledVal = metric.Value.Scale(TimeUnit.Milliseconds, TimeUnit.Milliseconds); var result = new List <MetricValue> { new MetricValue { name = "Meta.Count", value = rescaledVal.Rate.Count }, new MetricValue { name = "Meta.Sum", value = rescaledVal.Histogram.Sum.ToDecimal() }, new MetricValue { name = "Median", value = rescaledVal.Histogram.Median.ToDecimal() }, new MetricValue { name = "Percentile75", value = rescaledVal.Histogram.Percentile75.ToDecimal() }, new MetricValue { name = "Percentile95", value = rescaledVal.Histogram.Percentile95.ToDecimal() }, new MetricValue { name = "Percentile99", value = rescaledVal.Histogram.Percentile99.ToDecimal() }, }; // new Quantile(){quantile = 0.98, value = metric.Value.Histogram.Percentile98}, // new Quantile(){quantile = 0.999, value = metric.Value.Histogram.Percentile999} return(result); }
private static IEnumerable <MetricTelemetry> Translate(TimerValueSource source, string contextName, DateTimeOffset now) { var mt = MetricFactory.CreateMetric(source, contextName, now); mt.Properties[UnitKey] = source.DurationUnit.ToShortString(); source.Value.Histogram.CopyTo(mt); yield return(mt); var unit = source.Value.Rate.RateUnit.ToShortString(); mt = MetricFactory.CreateMetric(source, contextName, now, "rate"); source.Value.Rate.CopyTo(mt, unit); yield return(mt); foreach (var item in source.Value.Rate.Items) { mt = MetricFactory.CreateMetric(source, contextName, now, item.Item); item.CopyTo(mt, unit); yield return(mt); } }
public async Task Can_report_timers__when_multidimensional() { // Arrange var expected = "test.test_timer.timer.value:1000|ms"; var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer" + MultidimensionalMetricNameSuffix, ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, _tags); // Act var valueSource = CreateValueSource("test", timers: timerValueSource); // Assert await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected); }
public ITimer Timer <T>(TimerOptions options, Func <T> builder) where T : ITimerMetric { return(_timers.GetOrAdd( options.Name, () => { var allTags = AllTags(options.Tags); Logger.Debug("Adding Timer {Name} - {@Options} {MesurementUnit} {DurationUnit} {RateUnit} {@Tags}", options.Name, options, options.MeasurementUnit.ToString(), options.DurationUnit, options.RateUnit, allTags.ToDictionary()); var timer = builder(); var valueSource = new TimerValueSource( options.Name, timer, options.MeasurementUnit, options.RateUnit, options.DurationUnit, allTags); return Tuple.Create((ITimer)timer, valueSource); })); }
public static IEnumerable <Metric> ToPrometheusMetrics( this TimerValueSource metric, Func <string, string> labelNameFormatter) { // Prometheus advocates always using seconds as a base unit for time var rescaledVal = metric.Value.Scale(TimeUnit.Seconds, TimeUnit.Seconds); var result = new List <Metric> { new Metric { summary = new Summary { sample_count = (ulong)rescaledVal.Rate.Count, sample_sum = rescaledVal.Histogram.Sum, quantile = { new Quantile { quantile = 0.5, value = rescaledVal.Histogram.Median }, new Quantile { quantile = 0.75, value = rescaledVal.Histogram.Percentile75 }, new Quantile { quantile = 0.95, value = rescaledVal.Histogram.Percentile95 }, // new Quantile(){quantile = 0.98, value = metric.Value.Histogram.Percentile98}, new Quantile { quantile = 0.99, value = rescaledVal.Histogram.Percentile99 }, // new Quantile(){quantile = 0.999, value = metric.Value.Histogram.Percentile999} } }, label = metric.Tags.ToLabelPairs(labelNameFormatter) } }; return(result); }
public void Can_report_timers__when_multidimensional() { // Arrange var expected = "test__test_timer,host=server1,env=staging,mtype=timer,unit=none,unit_dur=ms,unit_rate=ms count.meter=1i,rate1m=0,rate5m=0,rate15m=0,samples=1i,last=1000,count.hist=1i,sum=1000,min=1000,max=1000,mean=1000,median=1000,stddev=0,p999=1000,p99=1000,p98=1000,p95=1000,p75=1000,user.last=\"client1\",user.min=\"client1\",user.max=\"client1\" 1483232461000000000\n"; var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer" + MultidimensionalMetricNameSuffix, ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, _tags); // Act var valueSource = CreateValueSource("test", timers: timerValueSource); // Assert AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), expected); }
public async Task Can_report_timers__when_multidimensional() { // Arrange var expected = "{\"series\":[{\"metric\":\"test.test_timer.timer.count.meter\",\"points\":[[1483232461,1]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.rate1m\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.rate5m\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.rate15m\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.samples\",\"points\":[[1483232461,1]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.last\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.count.hist\",\"points\":[[1483232461,1]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.sum\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.min\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.max\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.mean\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.median\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.stddev\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.p999\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.p99\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.p98\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.p95\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.p75\",\"points\":[[1483232461,1000]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.user.last\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.user.min\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]},{\"metric\":\"test.test_timer.timer.user.max\",\"points\":[[1483232461,0]],\"type\":\"gauge\",\"tags\":[\"host:server1\",\"env:staging\",\"unit:none\",\"unit_dur:ms\",\"unit_rate:ms\"]}]}"; var clock = new TestClock(); var timer = new DefaultTimerMetric(_defaultReservoir, clock); timer.Record(1000, TimeUnit.Milliseconds, "client1"); var timerValueSource = new TimerValueSource( "test timer" + MultidimensionalMetricNameSuffix, ConstantValue.Provider(timer.Value), Unit.None, TimeUnit.Milliseconds, TimeUnit.Milliseconds, _tags); // Act var valueSource = CreateValueSource("test", timers: timerValueSource); // Assert await AssertExpectedLineProtocolString(new MetricsDataValueSource(_timestamp, new[] { valueSource }), FlushInterval, expected); }
private static IEnumerable<Google.ICanReportToGoogleAnalytics> Map(TimerValueSource timer, string context) { return new Google.Timer(FullName(timer.Name, context), new Google.Timer.MeterParameters { Count = timer.Value.Rate.Count, Rate = timer.Value.Rate.MeanRate, Unit = timer.Unit.Name, RateUnit = TimeUnitLabel(timer.RateUnit) }, new Google.Timer.HistogramParameters { Count = timer.Value.Histogram.Count, Unit = TimeUnitLabel(timer.DurationUnit), AvgValue = timer.Value.Histogram.Mean, LatestValue = timer.Value.Histogram.LastValue, MaxValue = timer.Value.Histogram.Max, MinValue = timer.Value.Histogram.Min, StdDevValue = timer.Value.Histogram.StdDev, Percent75Value = timer.Value.Histogram.Percentile75, Percent95Value = timer.Value.Histogram.Percentile95, Percent98Value = timer.Value.Histogram.Percentile98, Percent999Value = timer.Value.Histogram.Percentile999, Percent99Value = timer.Value.Histogram.Percentile99 }); }
public bool IsMatch(TimerValueSource timer) { if (types != null && !types.Contains(MetricType.Timer)) { return false; } return IsNameMatch(timer.Name); }
public bool IsMatch(TimerValueSource timer) { return true; }