示例#1
0
        static void DoOperations(GeoIPDbContext dbContext, Config config)
        {
            DateTime start = DateTime.Now;
            DateTime finish;
            DateTime startNext;

            //download updates;
            string md5FileName, dataFileName, md5Hash;

            startNext = DateTime.Now;
            Console.WriteLine($"Загрузка обновлений: {startNext}");
            if (Utilites.DownloadFile(config.MD5FileUrl, config.TempFolder, out md5FileName))
            {
                using (StreamReader md5Reader = new StreamReader(md5FileName))
                {
                    md5Hash = md5Reader.ReadLine();
                }
                if (Utilites.DownloadFile(config.DataFileUrl, config.TempFolder, md5Hash, out dataFileName, out bool checkRes))
                {
                    Console.WriteLine($"Check MD5: {(checkRes ? "OK" : "failed")}");
                }
                else
                {
                    return;
                }
            }
            else
            {
                return;
            }
            finish = DateTime.Now;
            Console.WriteLine($"Загрузка завершена: {finish - startNext}");

            //extract updates;
            startNext = DateTime.Now;
            Console.WriteLine($"Распаковка обновлений: {startNext}");
            string[] extractedFiles = Utilites.ExtractFromZip(dataFileName, config.CashFolder,
                                                              new string[] { config.Locations_CSV_FileName, config.BlocksIPv4_CSV_FileName });
            finish = DateTime.Now;
            Console.WriteLine($"Распаковка завершена: {finish - startNext}");

            //remove temporary files and ordering data;
            startNext = DateTime.Now;
            Console.WriteLine($"Удаление временных файлов: {startNext}");
            string blocksFileName;
            string locationsFileName = blocksFileName = string.Empty;

            for (int i = 0; i < extractedFiles.Length; i++)
            {
                if (extractedFiles[i].EndsWith(config.Locations_CSV_FileName))
                {
                    locationsFileName = extractedFiles[i];
                }
                else if (extractedFiles[i].EndsWith(config.BlocksIPv4_CSV_FileName))
                {
                    blocksFileName = extractedFiles[i];
                }
            }

            string cashedFilesPath = Path.GetDirectoryName(locationsFileName);

            File.Move(md5FileName, Path.Combine(cashedFilesPath, Path.GetFileName(md5FileName)));
            File.Move(dataFileName, Path.Combine(cashedFilesPath, Path.GetFileName(dataFileName)));
            finish = DateTime.Now;
            Console.WriteLine($"Удаление завершено: {finish - startNext}");

            //install updates;
            startNext = DateTime.Now;
            Console.WriteLine($"Установка обновлений: {startNext}");
            bool updRes = Updater.DatabaseUpdate(config.ConnectionString, blocksFileName, locationsFileName);

            if (updRes)
            {
                dbContext.Updates.Add(new Database.Models.UpdateInfo {
                    Hash = md5Hash, DateTime = DateTime.Now
                });
                dbContext.SaveChanges();
            }
            finish = DateTime.Now;
            Console.WriteLine($"{(updRes ? "Установка успешно завершена: " : "Установка завершена с ошибками: ")} " +
                              $"{finish - startNext}");
            Console.WriteLine($"Затраченное время: {finish - start}");
        }