コード例 #1
0
        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));
        }
コード例 #2
0
        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);
            }
        }