Example #1
0
        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}.");
        }
Example #2
0
 // GET api/values/5
 public string[] Get(int column, string row)
 {
     InputValidationProvider.ValidateUserInput(row, column);
     return(CoordinatesProvider.CalculateCoordinates(row, column));
 }