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);
}