예제 #1
0
        private async void Start()
        {
            StartTimer();

            Enabled = true;

            try
            {
                await UpdateState("Подготовка");

                if (!Config.Check())
                {
                    throw new Exception("Не заполнены обязательные для заполнения поля");
                }

                using (var connection = SQL.GetSqlConnection())
                {
                    await connection.OpenAsync();

                    await SQL.CreateDatabaseIfNotExists(connection);
                }

                if (!Common.CheckFolders())
                {
                    var result = MessageBox.Show("Для продолжения работы каталоги логов и временных файлов необходимо очистить, продолжить?", State, MessageBoxButtons.YesNo);

                    if (result == DialogResult.Yes)
                    {
                        await UpdateState("Очистка каталогов");

                        Common.ClearFolders();
                    }
                    else
                    {
                        await UpdateState("Отменено");

                        Enabled = false;
                        StopTimer();
                    }
                }

                await UpdateState("Запуск сбора данных");

                TL.StartCollectTechLog();

                await UpdateState("Ожидание начала сбора данных");

                await TL.WaitStartCollectData();

                await SQL.StartCollectSqlTrace();

                await UpdateState("Сбор данных");

                // Ждем сбора данных
                await Task.Delay(Config.Get <int>("CollectPeriod") * 60 * 1000);

                await UpdateState("Остановка сбора данных");

                TL.StopCollectTechLog();
                await SQL.StopCollectSqlTrace();

                await UpdateState("Обработка данных технологического журнала");

                await TL.ProcessTechLog();

                await UpdateState("Обработка данных Extended Events");

                GC.Collect();

                await SQL.ProcessSqlTrace();

                await UpdateState("Загрузка результатов обработки в базу данных");

                GC.Collect();

                await SQL.LoadTechLogIntoDatabase();

                await SQL.LoadSqlTraceIntoDatabase();

                if (Config.Get <bool>("ClearFoldersAfter"))
                {
                    await UpdateState("Очистка каталогов");

                    Common.ClearFolders();
                }

                await UpdateState("Выполнено");

                GC.Collect();
            }
            catch (Exception ex)
            {
                await UpdateState("Ошибка");

                MessageBox.Show(ex.Message);
            }

            StopTimer();

            Enabled = false;
        }