static void Main(string[] args) { logger.Info("********************************************"); logger.Info("Process Started"); var sw = Stopwatch.StartNew(); try { var config = (Covid19Configuration)ConfigurationManager.GetSection("covid"); var locationApiKey = ConfigurationManager.AppSettings["locationApiKey"]; var tasks = new List <Task>(); Dictionary <string, RawData> ecdcData = null; tasks.Add(Task.Factory.StartNew(() => { var ecdcDownloader = new CovidDataEcdcDownloader(config.EcdcProvider.RepositoryFolder, config.EcdcDownloader.ForceDownload); ecdcDownloader.DownloadFiles(); var ecdcExtractor = new CovidDataEcdcExtractor(config.EcdcProvider.RepositoryFolder, config.EcdcProvider.OutputFile); ecdcData = ecdcExtractor.Extract(); })); Dictionary <string, RawData> jhData = null; tasks.Add(Task.Factory.StartNew(() => { var jhDownloader = new CovidDataJohnsHopkinsDownloader(config.JohnsHopkinsDownloader.RepositoryPath, config.JohnsHopkinsDownloader.Name, config.JohnsHopkinsDownloader.Email); jhDownloader.DownloadFiles(); var johnsHopkinsExtractor = new CovidDataJohnsHopkinsExtractor(config.JohnsHopkinsProvider.RepositoryFolder, config.JohnsHopkinsProvider.OutputFile, config.JohnsHopkinsProvider.CopyRepositoryFolder); jhData = johnsHopkinsExtractor.Extract(); })); Task.WaitAll(tasks.ToArray()); var result = ecdcData.Concat(jhData).ToLookup(x => x.Key, x => x.Value).ToDictionary(x => x.Key, g => g.First()); var coordinatesProvider = new CoordinatesProvider(config.Coordinates.ProviderName, config.Coordinates.DataFilePath, locationApiKey); coordinatesProvider.SetCoordinates(result); logger.Info($"Final counting {result.Count} items."); File.WriteAllText(config.MergedOutputFile.Path, result.Values.OrderBy(x => x.DataProvider).ThenBy(x => x.Area).ThenBy(x => x.SubArea).ThenBy(x => x.Admin2).ThenBy(x => x.Date).ToCsv()); } catch (Exception e) { logger.Error(e.Message, e); } sw.Stop(); logger.Info($"Process Ended. Duration {sw.Elapsed}."); }
// GET api/values/5 public string[] Get(int column, string row) { InputValidationProvider.ValidateUserInput(row, column); return(CoordinatesProvider.CalculateCoordinates(row, column)); }