コード例 #1
0
        public void TestSummaryDecay()
        {
            var            baseTime      = new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            DateTimeOffset currentTime   = baseTime;
            var            summaryConfig = new SummaryConfiguration("test_summary", "helpless", Array.Empty <string>(), false,
                                                                    new List <QuantileEpsilonPair> {
                new QuantileEpsilonPair(0.1d, 0.001d)
            }, TimeSpan.FromSeconds(100), 10);
            var child  = new Summary(summaryConfig, Array.Empty <string>(), () => currentTime);
            var values = new double[summaryConfig.Objectives.Count];

            for (int i = 1; i <= 1000; i++)
            {
                currentTime = baseTime.AddSeconds(i);
                child.Observe(i, null);

                if (i % 10 == 0)
                {
                    child.ForkState(out var _, out var _, values);
                    double got  = values[0];
                    double want = Math.Max((double)i / 10, (double)i - 90);

                    Assert.True(Math.Abs(got - want) <= 1, $"{i}. got {got} want {want}");
                }
            }

            currentTime = baseTime.AddSeconds(1000).AddSeconds(100);
            // Wait for MaxAge without observations and make sure quantiles are NaN.
            child.ForkState(out _, out _, values);
            Assert.True(double.IsNaN(values[0]));
        }
コード例 #2
0
        public Summary CreateSummary(string name, string help, string[] labelNames, IList <QuantileEpsilonPair> objectives, TimeSpan?maxAge, int?ageBuckets, int?bufCap)
        {
            var config = new SummaryConfiguration
            {
                LabelNames = labelNames
            };

            if (objectives != null)
            {
                config.Objectives = objectives.ToArray();
            }

            if (maxAge != null)
            {
                config.MaxAge = maxAge.Value;
            }

            if (ageBuckets != null)
            {
                config.AgeBuckets = ageBuckets.Value;
            }

            if (bufCap != null)
            {
                config.BufferSize = bufCap.Value;
            }

            return(CreateSummary(name, help, config));
        }
コード例 #3
0
        public Summary CreateSummary(string name, string help, SummaryConfiguration configuration)
        {
            configuration = configuration ?? SummaryConfiguration.Default;

            var metric = new Summary(name, help, configuration.LabelNames, configuration.SuppressInitialValue, configuration.Objectives, configuration.MaxAge, configuration.AgeBuckets, configuration.BufferSize);

            return((Summary)_registry.GetOrAdd(metric));
        }
コード例 #4
0
        private static Summary GetRequestDurationSummary()
        {
            var config = new SummaryConfiguration
            {
                LabelNames = new[] { "method" }
            };

            return(Metrics.CreateSummary("personal_data_request_duration", "Average request duration", config));
        }
コード例 #5
0
        protected virtual ICollector <IObserver> CreateHttpRequestDurationSummary()
        {
            var configuration = new SummaryConfiguration
            {
                SuppressInitialValue = true,
                LabelNames           = DefaultRequestDurationLabels,
                Objectives           = new[]
                {
                    new QuantileEpsilonPair(0.5, 0.05),
                    new QuantileEpsilonPair(0.9, 0.05),
                    new QuantileEpsilonPair(0.95, 0.01),
                    new QuantileEpsilonPair(0.99, 0.005),
                }
            };

            _options.ConfigureRequestDurationSummary?.Invoke(configuration);

            if (configuration.LabelNames != DefaultRequestDurationLabels)
            {
                throw new ArgumentException("The requests in progress summary configuration is missing the required default labels");
            }

            return(_metrics.CreateSummary("http_server_request_duration_seconds", "The duration in seconds that HTTP requests take to process", configuration));
        }
コード例 #6
0
        private Summary CreateSummary()
        {
            var config = new SummaryConfiguration("test", string.Empty, Array.Empty <string>(), false);

            return(new Summary(config, Array.Empty <string>()));
        }
コード例 #7
0
 /// <summary>
 /// Summaries track the trends in events over time (10 minutes by default).
 /// </summary>
 public static Summary CreateSummary(string name, string help, SummaryConfiguration configuration = null) =>
 _defaultFactory.CreateSummary(name, help, configuration);
コード例 #8
0
 public Summary GetOrdAddSummary(string name, string description, SummaryConfiguration config = null)
 {
     return(Summaries.GetOrAdd(name, Prometheus.Metrics.CreateSummary(name, description, config)));
 }
コード例 #9
0
ファイル: MetricFactory.cs プロジェクト: HammerAlf/Runtime
 /// <inheritdoc/>
 public Summary Summary(string name, string help, SummaryConfiguration configuration = null)
 {
     return(_innerMetricFactory.CreateSummary(name, help, configuration));
 }