public async Task ScrapeAsync(ScrapeDefinition <IAzureResourceDefinition> scrapeDefinition) { if (scrapeDefinition == null) { throw new ArgumentNullException(nameof(scrapeDefinition)); } var aggregationInterval = scrapeDefinition.AzureMetricConfiguration?.Aggregation?.Interval; if (aggregationInterval == null) { throw new ArgumentNullException(nameof(scrapeDefinition)); } try { var castedMetricDefinition = scrapeDefinition.Resource as TResourceDefinition; if (castedMetricDefinition == null) { throw new ArgumentException($"Could not cast metric definition of type {scrapeDefinition.Resource.ResourceType} to {typeof(TResourceDefinition)}. Payload: {JsonConvert.SerializeObject(scrapeDefinition)}"); } var aggregationType = scrapeDefinition.AzureMetricConfiguration.Aggregation.Type; var scrapedMetricResult = await ScrapeResourceAsync( scrapeDefinition.SubscriptionId, scrapeDefinition, castedMetricDefinition, aggregationType, aggregationInterval.Value); LogMeasuredMetrics(scrapeDefinition, scrapedMetricResult, aggregationInterval); await _metricSinkWriter.ReportMetricAsync(scrapeDefinition.PrometheusMetricDefinition.Name, scrapeDefinition.PrometheusMetricDefinition.Description, scrapedMetricResult); _prometheusMetricWriter.ReportMetric(scrapeDefinition.PrometheusMetricDefinition, scrapedMetricResult); } catch (ErrorResponseException errorResponseException) { HandleErrorResponseException(errorResponseException, scrapeDefinition.PrometheusMetricDefinition.Name); } catch (Exception exception) { _logger.LogCritical(exception, "Failed to scrape resource for metric '{MetricName}'", scrapeDefinition.PrometheusMetricDefinition.Name); } }
public async Task ScrapeAsync(ScrapeDefinition <AzureResourceDefinition> scrapeDefinition) { try { if (scrapeDefinition == null) { throw new ArgumentNullException(nameof(scrapeDefinition)); } var castedMetricDefinition = scrapeDefinition.Resource as TResourceDefinition; if (castedMetricDefinition == null) { throw new ArgumentException($"Could not cast metric definition of type '{scrapeDefinition.Resource.ResourceType}' to {typeof(TResourceDefinition)}. Payload: {JsonConvert.SerializeObject(scrapeDefinition)}"); } var aggregationInterval = scrapeDefinition.AzureMetricConfiguration.Aggregation.Interval; var aggregationType = scrapeDefinition.AzureMetricConfiguration.Aggregation.Type; var scrapedMetricResult = await ScrapeResourceAsync( AzureMetadata.SubscriptionId, scrapeDefinition, castedMetricDefinition, aggregationType, aggregationInterval.Value); _logger.LogInformation("Found value '{MetricValue}' for metric '{MetricName}' with aggregation interval '{AggregationInterval}'", scrapedMetricResult, scrapeDefinition.PrometheusMetricDefinition.Name, aggregationInterval); _prometheusMetricWriter.ReportMetric(scrapeDefinition.PrometheusMetricDefinition, scrapedMetricResult); } catch (ErrorResponseException errorResponseException) { HandleErrorResponseException(errorResponseException); } catch (Exception exception) { _exceptionTracker.Track(exception); } }