Exemple #1
0
        //проверяет, нужно ли запускать задачу исходя из времени последнего запуска и периодичности
        private bool PeriodFitting(SavedTaskResults task, string taskPeriod)
        {
            DateTime taskCutDT = this.CutDateTime(task.lastRun, taskPeriod);
            DateTime nowCutDT  = this.CutDateTime(GlobalUtils.GetNowUtcDateTime(), taskPeriod);

            return(taskCutDT == nowCutDT);
        }
Exemple #2
0
        //сохраняем результаты текущей задачи в списке результатов
        public virtual void SaveTaskResult(int _id, bool _isSuccess, DateTime _whenItStarted)
        {
            SavedTaskResults workRes = prevRes.Find(x => x.id == _id);

            //если в предыдущей строке задача нашлась, она затерается новой
            if (workRes != null)
            {
                resToSave.Remove(workRes);
            }
            workRes           = new SavedTaskResults();
            workRes.id        = _id;
            workRes.isSuccess = _isSuccess;
            workRes.lastRun   = _whenItStarted;
            resToSave.Add(workRes);
        }
Exemple #3
0
        private void Init()
        {
            string[] sepFields = new string[] { " " };
            string[] sepDate   = new string[] { "." };
            string[] sepTime   = new string[] { ":" };

            StreamReader myStream = null;

            try
            {
                myStream = new StreamReader(this.lastLogPath);
            }
            catch (Exception ex)
            {
                this.checkStatus = false;
                ControllerOfOutput coo = ControllerOfOutput.Instance;
                coo.WriteErrors("Ошибка при попытке открыть файл логов работы. Текст ошибки" + ex.Message);
                return;
            }

            while (!myStream.EndOfStream)
            {
                string   strToParse = myStream.ReadLine();
                string[] parsingStr = strToParse.Split(sepFields, StringSplitOptions.RemoveEmptyEntries);

                try
                {
                    List <int> parsingStrDate = StrArrToIntArr(parsingStr[1].Split(sepDate, StringSplitOptions.RemoveEmptyEntries));
                    List <int> parsingStrTime = StrArrToIntArr(parsingStr[2].Split(sepTime, StringSplitOptions.RemoveEmptyEntries));

                    SavedTaskResults tmpTsk = new SavedTaskResults();
                    tmpTsk.id        = int.Parse(parsingStr[0]);
                    tmpTsk.lastRun   = new DateTime(parsingStrDate[2], parsingStrDate[1], parsingStrDate[0], parsingStrTime[0], parsingStrTime[1], parsingStrTime[2]);
                    tmpTsk.isSuccess = bool.Parse(parsingStr[3]);
                    this.prevRes.Add(tmpTsk);
                }
                catch (Exception)
                {
                    continue;
                }
            }
            myStream.Close();
            this.checkStatus = true;
        }
Exemple #4
0
        //Проверка задания на тему того, надо ли запускать ее еще раз
        //false, если задачу надо запустить еще раз
        public virtual bool CheckTaskExecute(int taskID, string taskPeriod)
        {
            ControllerOfOutput output = ControllerOfOutput.Instance;
            //находим нужное задание по id
            SavedTaskResults workRes = prevRes.Find(x => x.id == taskID);

            if (workRes == null)
            {
                output.WriteAverageMessage("Задание " + taskID + " отсутствует в списке. Начинаем выполнение.");
                return(false);
            }
            //исключительная ситуация, требующая дополнительного внимания: когда задание выполнилось,
            //затем пропало из планировщика,  затем снова появилось в планировщике.
            //оно будет выполнено еще раз, как и задания с изменившимся id
            //добавление этого таска нужно чтобы переносить уже сделанные задачи на следующую проверку
            resToSave.Add(workRes);
            if (!workRes.isSuccess)
            {
                output.WriteAverageMessage("Предыдущее выполнение задания " + taskID +
                                           " завершилось ошибкой. Начинаем выполнение.");
                return(false);
            }
            bool periodRes = PeriodFitting(workRes, taskPeriod);

            if (periodRes)
            {
                output.WriteAverageMessage("Задача " + taskID +
                                           " уже успешно выполнялась в периоде " + taskPeriod +
                                           ". Последнее время выполнения: " + workRes.lastRun.ToString() + ".");
            }
            else
            {
                output.WriteAverageMessage("Задача " + taskID + " будет выполнена.");
            }
            return(periodRes);
        }