示例#1
0
        public async Task ReportMetricAsync(string metricName, string metricDescription, ScrapeResult scrapeResult)
        {
            Guard.NotNullOrEmpty(metricName, nameof(metricName));
            Guard.NotNull(scrapeResult, nameof(scrapeResult));
            Guard.NotNull(scrapeResult.MetricValues, nameof(scrapeResult.MetricValues));

            var reportMetricTasks = new List <Task>();

            foreach (var measuredMetric in scrapeResult.MetricValues)
            {
                var metricValue      = DetermineMetricMeasurement(measuredMetric);
                var metricDefinition = _metricsDeclarationProvider.GetPrometheusDefinition(metricName);
                var defaultLabels    = _metricsDeclarationProvider.GetDefaultLabels();

                var metricLabels = DetermineLabels(metricDefinition, scrapeResult, measuredMetric, defaultLabels);

                var reportMetricTask = ReportMetricAsync(metricName, metricDescription, metricValue, metricLabels);
                reportMetricTasks.Add(reportMetricTask);
            }

            await Task.WhenAll(reportMetricTasks);
        }