Exemple #1
0
 //Добавляет ошибку в ErrorsList
 private void LogToErrorsList(ErrorCommand er)
 {
     try
     {
         DateTime t = DateTime.Now;
         if (ErrorsRec != null)
         {
             ErrorsRec.AddNew();
             ErrorsRec.Put("Description", er.Text);
             ErrorsRec.Put("Params", er.ToLog());
             ErrorsRec.Put("Time", t);
             if (CommandLog != null)
             {
                 ErrorsRec.Put("Command", CommandLog.Name);
                 ErrorsRec.Put("Context", CommandLog.Context);
             }
             if (CommandSubLog != null)
             {
                 ErrorsRec.Put("PeriodBegin", CommandSubLog.PeriodBegin);
                 ErrorsRec.Put("PeriodEnd", CommandSubLog.PeriodEnd);
             }
             ErrorsRec.Update();
         }
         LogErrorsSpecial(er, t, CommandLog);
     }
     catch (Exception ex)
     {
         AddErrorAboutHistory(ex);
     }
 }
Exemple #2
0
 //Добавляет ошибку er в комманду
 public ErrorCommand AddError(ErrorCommand er)
 {
     foreach (var e in Errors)
     {
         if (e.Text == er.Text && e.Params == er.Params && e.IsFatal == er.IsFatal)
         {
             return(e);
         }
     }
     Errors.Add(er);
     if (er.Context.IsEmpty())
     {
         var c = this;
         while (c != null && !(c is CommandLog))
         {
             c = c.Parent;
         }
         if (c != null)
         {
             er.Context = ((CommandLog)c).Context;
         }
     }
     if (er.IsFatal)
     {
         Quality = CommandQuality.Error;
     }
     else if (Quality == CommandQuality.Success)
     {
         Quality = CommandQuality.Warning;
     }
     return(er);
 }
Exemple #3
0
 //Добавляет Ошибку в лог
 private void LogError(ErrorCommand er)
 {
     try
     {
         if (SuperHistory != null)
         {
             SuperHistory.AddNew();
             if (HistoryId > 0)
             {
                 SuperHistory.Put("HistoryId", HistoryId);
             }
             SuperHistory.Put("Description", er.Text);
             SuperHistory.Put("Params", er.ToLog());
             SuperHistory.Put("Time", DateTime.Now);
             if (CommandLog != null)
             {
                 SuperHistory.Put("FromStart", CommandLog.FromEvent);
             }
             SuperHistory.Put("Status", "Ошибка");
             SuperHistory.Update();
         }
     }
     catch (Exception ex)
     {
         AddErrorAboutHistory(ex);
     }
 }
Exemple #4
0
        //Добавляет ошибку в комманду, лог и отображение, er - ошибка,
        public void AddError(ErrorCommand er)
        {
            bool danger = false;
            var  c      = Command;

            while (c != null)
            {
                danger |= c.Behaviour == CommandBehaviour.Danger;
                if (c.Behaviour == CommandBehaviour.Log)
                {
                    LogError(er);
                    if (danger)
                    {
                        break;
                    }
                    if (_useErrorsList)
                    {
                        LogToErrorsList(er);
                        MessageError(er);
                    }
                }
                c.AddError(er);
                c = c.Parent;
            }
        }
Exemple #5
0
        //Запускает опасную операцию, Однопоточный вариант
        //Возвращает true, если операция прошла успешно (может не с первого раза)
        //operation - операция, которую нужно выполнить, возвращает True если все успешно
        //repetitions - сколько раз повторять, если не удалась (вместе с первым)
        //errorOperation - операция, выполняемя между повторами, errorWaiting - сколько мс ждать при ошибке
        public bool Danger(Func <bool> operation, int repetitions, int errorWaiting = 0, string errMess = "Не удалось выполнить опасную операцию", Func <bool> errorOperation = null)
        {
            //Выполняем первый раз
            var dan = RunDanger(operation, null);

            if (!dan.IsError)
            {
                return(true);
            }

            bool         b   = true;
            ErrorCommand err = dan.Errors.First();

            for (int i = 2; i <= repetitions && b; i++)
            {   //Выполняем последующие разы
                Command.IsRepeated = true;
                if (errorWaiting < 3000)
                {
                    Thread.Sleep(errorWaiting);
                }
                else
                {
                    double p = Procent;
                    for (int j = 0; j < errorWaiting / 500; j++)
                    {
                        Procent = j * 100 * (500.0 / errorWaiting);
                        Thread.Sleep(500);
                    }
                    Procent = p;
                }
                AddEvent("Повтор опасной операции", i + "-й раз");
                b &= RunDanger(operation, errorOperation).IsError;
            }
            if (b && CommandLog != null)
            {
                var lerr = new ErrorCommand(errMess);
                CommandLog.AddError(lerr);
                LogError(lerr);
                if (_useErrorsList)
                {
                    LogToErrorsList(lerr);
                    MessageError(lerr);
                }
                var c = CommandLog.Parent;
                while (c != null)
                {
                    c.AddError(err);
                    c = c.Parent;
                }
            }
            return(!b);
        }
Exemple #6
0
 //Добавить в комманду ошибку error, isRepeated - ошибка произошла в повторяемой операции
 public override void AddError(ErrorCommand error, bool isRepeated)
 {
     ChangeQuality(error, isRepeated);
     if (!isRepeated)
     {
         bool isFound = false;
         foreach (var err in _errors)
         {
             if (err.EqualsTo(error))
             {
                 isFound = true;
             }
         }
         if (!isFound)
         {
             _errors.Add(error);
         }
     }
 }
Exemple #7
0
 protected override void MessageError(ErrorCommand er)
 {
 }
Exemple #8
0
 //Добавляет Ошибку в сообщения
 protected abstract void MessageError(ErrorCommand er);
Exemple #9
0
 //Запись в ошибки SQL-базу
 protected virtual void LogErrorsSpecial(ErrorCommand er, DateTime time, CommandLog command)
 {
 }