예제 #1
0
파일: Stage.cs 프로젝트: K1llMan/ETLManager
        /// <summary>
        /// Выполнение этапа закачки
        /// </summary>
        public void Exec()
        {
            // Добавление контроллера записи в лог для установки статуса в зависимости от сообщений лога
            Logger.WriteEvent += WriteTraceHandler;

            try
            {
                ExecStatus = StageExecutionStatus.Execution;
                Method?.Invoke();
            }
            catch (Exception ex)
            {
                Logger.WriteToTrace($"Произошла ошибка: {ex}.", TraceMessageKind.Error);
            }
            finally
            {
                ExecStatus = StageExecutionStatus.Finished;

                // Отключение контроллера
                Logger.WriteEvent -= WriteTraceHandler;
            }
        }
예제 #2
0
파일: Stage.cs 프로젝트: K1llMan/ETLManager
        public Stage(JProperty stage, ETLProgram program)
        {
            ID = stage.Name;

            JToken stageDesc = stage.Value;

            Enabled = Convert.ToBoolean(stageDesc["enabled"]);
            // Установка статусов по умолчанию
            Status     = StageStatus.Successful;
            ExecStatus = Enabled ? StageExecutionStatus.InQueue : StageExecutionStatus.Skipped;

            Name = stageDesc["name"].ToString();

            // Формирование списка параметров этапа
            Parameters = FormParamsList(stageDesc["params"]);

            RootProgram = program;

            // Привязка метода объекта программы к этапу
            string functName = stageDesc["func"].ToString();

            if (string.IsNullOrEmpty(functName))
            {
                Logger.WriteToTrace("Не задана функция выполнения этапа.", TraceMessageKind.Warning);
                return;
            }

            MethodInfo method = program.GetType().GetMethod(functName);

            if (method == null)
            {
                Logger.WriteToTrace($"Не найдена функция выполнения \"{functName}\" этапа \"{ID}\".", TraceMessageKind.Warning);
                return;
            }

            Method = (StageFunc)method.CreateDelegate(typeof(StageFunc), program);
        }