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