internal async Task RunExportersAsync()

in src/App/Services/Hosted/PrometheusExporterHostedService.cs [102:144]


        internal async Task RunExportersAsync()
        {
            var stopwatch = Stopwatch.StartNew();
            var successfulRun = 0;
            try
            {
                TotalScrapeActivations.Inc();

                var tasks = new List<Task>();
                foreach (var exporter in _exporters)
                {
                    var task = exporter.ExportMetricsAsync();
                    tasks.Add(task);
                }

                await Task.WhenAll(tasks);
                TotalSuccessfulScrapeActivations.Inc();
                successfulRun = 1;
            }
            catch (AggregateException ae)
            {
                foreach (var innerException in ae.Flatten().InnerExceptions)
                {
                    _logger.LogError($"{nameof(RunExportersAsync)} failed. Message: {innerException.Message}");
                }

                return;
            }
            catch (Exception e)
            {
                _logger.LogError($"{nameof(RunExportersAsync)} failed. Message: {e.Message}");
                return;
            }
            finally
            {
                stopwatch.Stop();
                _logger.LogInformation($"{nameof(RunExportersAsync)} took {stopwatch.Elapsed}.");
                IsSuccessful.Set(successfulRun);
            }

            // Sending scrape time only if the operation was successful
            ScrapeTime.Observe(stopwatch.Elapsed.TotalSeconds);
        }