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);
 }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 4
0
        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 });
        }
Ejemplo n.º 5
0
        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");
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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");
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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));
        }
Ejemplo n.º 18
0
 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);
     }));
 }
Ejemplo n.º 19
0
        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()));
        }
Ejemplo n.º 20
0
 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
     });
 }
Ejemplo n.º 21
0
        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");
        }
Ejemplo n.º 22
0
 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
     };
 }
Ejemplo n.º 23
0
        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()
            };
        }
Ejemplo n.º 24
0
        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");
        }
Ejemplo n.º 25
0
        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);
        }
Ejemplo n.º 28
0
        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);
            }));
        }
Ejemplo n.º 29
0
        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
     });
 }
Ejemplo n.º 33
0
 public bool IsMatch(TimerValueSource timer)
 {
     if (types != null && !types.Contains(MetricType.Timer))
     {
         return false;
     }
     return IsNameMatch(timer.Name);
 }
Ejemplo n.º 34
0
 public bool IsMatch(TimerValueSource timer) { return true; }