Exemplo n.º 1
0
        public async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req)
        {
            var body       = await new StreamReader(req.Body).ReadToEndAsync();
            var statistics = JsonConvert.DeserializeObject <DnsServerStatistics>(body);

            if (!IsValidServer(statistics.ServerName))
            {
                _logger.Warning("Got invalid server name when adding statistics, Server:{Server}", statistics.ServerName);
                return(new StatusCodeResult((int)HttpStatusCode.BadRequest));
            }

            statistics.CreatedDate = DateTime.UtcNow; // Always override CreatedDate to not rely on time from each server
            await _dnsServerStatisticsStore.Add(statistics);

            _logger.Information("Added DNS server statistics for server {ServerName}", statistics.ServerName);
            return(new StatusCodeResult((int)HttpStatusCode.Created));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Fetch DNS server statistics from all DNS servers and ingress to storage account
        /// </summary>
        /// <returns></returns>
        public async Task IngressDnsServerStatistics()
        {
            try
            {
                var fetchStatisticsTasks = new List <Task <DnsServerStatistics> >();

                foreach (var dnsServerApi in _dnsServerApiSettings.DnsServerApis)
                {
                    fetchStatisticsTasks.Add(_dnsServerStatisticsRetreiver.GetStatistics(dnsServerApi.ServerName, dnsServerApi.ApiKey));
                }

                var simultaneousTasks = new List <Task>();
                await Task.WhenAll(fetchStatisticsTasks.ToArray());

                foreach (var completeTask in fetchStatisticsTasks)
                {
                    var result = completeTask.Result;

                    if (result == null)
                    {
                        _logger.Warning("DNS server statistics was null. Something went wrong while fetching dns server statistics (CompleteTasks: {@CompleteTasks})", fetchStatisticsTasks);
                        continue;
                    }

                    _logger.Debug("Storing statistics result for server {Server} created at {CreatedDate}", result.ServerName, result.CreatedDate);
                    simultaneousTasks.Add(_dnsServerStatisticsStore.Add(result));
                }

                await Task.WhenAll(simultaneousTasks.ToArray());

                _logger.Information("Execution complete!");
            }
            catch (Exception e)
            {
                _logger.Error(e, "Got an unhandled exception while ingressing dns server statistics");
                throw;
            }
        }
        /// <summary>
        /// Fetch DNS server statistics from all configured DNS servers and ingress to storage account
        /// </summary>
        /// <returns></returns>
        public async Task IngressDnsServerStatistics()
        {
            try
            {
                var fetchStatisticsTasks = new List <Task <(DnsServerStatistics, bool)> >();
                foreach (var dnsServerApi in _dnsServerApiSettings.DnsServerApis)
                {
                    fetchStatisticsTasks.Add(_dnsServerStatisticsRetreiver.TryGetStatistics(dnsServerApi.ServerName, dnsServerApi.ApiKey, dnsServerApi.Controller));
                }

                await Task.WhenAll(fetchStatisticsTasks);

                var storageTasks = new List <Task>();

                foreach (var completeTask in fetchStatisticsTasks)
                {
                    var(result, success) = completeTask.Result;
                    if (!success)
                    {
                        _logger.Warning("Something went wrong while fetching DNS server statistics (Result: '{@Result}' CompleteTasks: '{@CompleteTasks}')", completeTask.Result, fetchStatisticsTasks);
                        continue;
                    }

                    _logger.Debug("Storing statistics result for server '{Server}' created at '{CreatedDate}'", result.ServerName, result.CreatedDate);
                    storageTasks.Add(_dnsServerStatisticsStore.Add(result));
                }

                await Task.WhenAll(storageTasks);

                _logger.Information("Statistics ingression completed successfully");
            }
            catch (Exception e)
            {
                _logger.Error(e, "Got an unhandled exception while ingressing DNS server statistics");
                throw;
            }
        }