private CollectCommand RunDanger(int reps, int repserr, LoggerStability stability, bool useThread, bool useException) { StartCollect(false, true); StartLog("Log"); int num = Logs.Count - 1; Assert.AreEqual(0, Logs[num].Events.Count); int i = 0; StartDanger(reps, stability, "Операция", useThread).Run(() => { Assert.AreEqual(i * 4 + 1, Logs[num].Events.Count); AddEvent("Попытка"); Assert.AreEqual(i * 4 + 2, Logs[num].Events.Count); if (i++ < repserr) { if (useException) { throw new Exception("Err"); } AddError("Ошибка"); } }, () => { Assert.AreEqual(i * 4, Logs[num].Events.Count); AddEvent("Повтор"); Assert.AreEqual(i * 4 + 1, Logs[num].Events.Count); return(true); }); return(FinishCollect()); }
//Создание тестового логгера public static Logger CreateTestLogger(LoggerStability stability = LoggerStability.Single) { var logger = new Logger(new TestIndicator(), stability); logger.History = new TestHistory(logger); return(logger); }
//Запуск команды, обрамляющей опасную операцию public DangerCommand StartDanger(double startProcent, double finishProcent, int repetitions, //Cколько раз повторять, если не удалась (вместе с первым) LoggerStability stability, //Минимальная LoggerStability, начиная с которой выполняется более одного повторения операции string eventMess, //Сообщение о событии для записи в историю bool useThread = false, //Запускать опасную операцию в другом потоке, чтобы была возможность ее жестко прервать int errWaiting = 0) //Cколько мс ждать при ошибке { return(Logger.StartDanger(startProcent, finishProcent, repetitions, stability, eventMess, useThread, errWaiting)); }
internal DangerCommand(Logger logger, Command parent, double startProcent, double finishProcent, int repetitions, LoggerStability stability, //Минимальная LoggerStability, начиная с которой выполняется более одного повторения операции string eventMess, bool useThread = false, int errWaiting = 0) : base(logger, parent, startProcent, finishProcent) { _repetitions = Logger.Stability >= stability ? repetitions : 1; _useThread = useThread; _errWaiting = errWaiting; _eventMess = eventMess; }
public static string ToEnglish(this LoggerStability stability) { switch (stability) { case LoggerStability.Periodic: return("Reriodic"); case LoggerStability.Single: return("Single"); case LoggerStability.RealTimeFast: case LoggerStability.RealTimeSlow: return("RealTime"); } return(null); }
protected BaseThread(ProcessProject project, int id, string name, IIndicator indicator, LoggerStability stability) : base(null, project.Context, project.ProgressContext) { Logger = new Logger(indicator, stability); Logger.History = ItStatic.CreateHistory(Logger, project.App.Code + '\\' + project.Code + id); State = ThreadState.Stopped; Project = project; Id = id; Name = name; }
public Logger(IIndicator indicator, LoggerStability stability = LoggerStability.Single) { Indicator = indicator; Stability = stability; }
public DangerCommand StartDanger(int repetitions, LoggerStability stability, string eventMess, bool useThread = false, int errWaiting = 0) { return(StartDanger(Procent, Procent, repetitions, stability, eventMess, useThread, errWaiting)); }