public async Task <IActionResult> AddDataPointsAsync([FromRoute] int id, [FromBody] AddDataPointCommand dataPointCommand) { dataPointCommand.MetricId = id; var dataPointResource = await _mediator.Send(dataPointCommand); return(CreatedAtAction( nameof(GetDataPointsAsync), new{ metricId = id, version = RequestedApiVersion }, dataPointResource)); }
private async Task ExecuteMetricProviders(CancellationToken stoppingToken) { using var scope = _scopeFactory.CreateScope(); var dbContext = scope.ServiceProvider.GetRequiredService <StatusDataContext>(); var mediator = scope.ServiceProvider.GetRequiredService <IMediator>(); var metrics = await dbContext.Metrics.ToListAsync(); foreach (var metric in metrics) { if (stoppingToken.IsCancellationRequested) { _logger.LogDebug("Service stop is requested"); return; } if (string.IsNullOrEmpty(metric.MetricProviderType) || metric.MetricProviderType == "custom") { continue; } _logger.LogDebug("Running provider '{provider}' for metric '{metricId}'", metric.MetricProviderType, metric.Id); var provider = _providerRepository.GetMetricProvider(metric.MetricProviderType); if (provider == null) { _logger.LogWarning("Unknown provider '{provider}', skipping", metric.MetricProviderType); continue; } var dataPoint = await provider.PollDataPointAsync(metric); if (dataPoint == null) { _logger.LogDebug("No datapoint returned from provider '{provider}' for metric '{metricId}'", metric.MetricProviderType, metric.Id); continue; } var request = new AddDataPointCommand() { MetricId = dataPoint.MetricId, Value = dataPoint.Value, CreatedAt = dataPoint.CreatedAt }; await mediator.Send(request, stoppingToken); } }