public void BackupPlannerXml() { string backupPath = "planner backup"; //проверка, создана ли папка для бекапов if (!Directory.Exists(backupPath)) { Directory.CreateDirectory(backupPath); } //заполняем списов файлов и дат их создания DirectoryInfo di = new DirectoryInfo(backupPath); Dictionary <DateTime, string> nameAndDate = new Dictionary <DateTime, string>(); foreach (FileInfo file in di.GetFiles()) { nameAndDate.Add(file.CreationTime, file.FullName); } //находим самый поздний бекап и удаляем его if (nameAndDate.Count > 10) { string minFile = nameAndDate[nameAndDate.Min(x => x.Key)]; File.Delete(minFile); } //копируем планировщик File.Copy("Planner.xml", backupPath + "\\Planner " + GlobalUtils.GetNowUtcDateTime().ToString("yyyy-MM-dd hh-mm-ss") + ".xml"); }
//проверяет, нужно ли запускать задачу исходя из времени последнего запуска и периодичности private bool PeriodFitting(SavedTaskResults task, string taskPeriod) { DateTime taskCutDT = this.CutDateTime(task.lastRun, taskPeriod); DateTime nowCutDT = this.CutDateTime(GlobalUtils.GetNowUtcDateTime(), taskPeriod); return(taskCutDT == nowCutDT); }
public DateTime GetWorkDate() { if (this.isWorkDTComputed) { return(this.workDateTime); } //сначала вычислим рабочую дату switch (this.dateRange) { case eDateRange.Now: this.workDateTime = GlobalUtils.GetNowUtcDateTime(); break; case eDateRange.Prev: this.workDateTime = this.ComputePrevDate(this.workInterval); break; default: this.workDateTime = new DateTime(); break; } this.isWorkDTComputed = true; return(this.workDateTime); }
public ControllerOfOutput(bool _testmode) { this.testmode = _testmode; SESSIONDATE = GlobalUtils.GetNowUtcDateTime(); if (!this.testmode) { OutputSupertype email = new OutputEmail(); OutputSupertype allLogFile = new OutputFile("\\alllog.txt"); OutputSupertype errorLogFile = new OutputFile("\\errorlog.txt"); OutputSupertype console = new OutputConsole(); critMessages.Add(email); critMessages.Add(allLogFile); critMessages.Add(console); averageMessages.Add(allLogFile); averageMessages.Add(console); progressMessages.Add(console); errorMessages.Add(errorLogFile); errorMessages.Add(console); errorMessages.Add(allLogFile); errorMessages.Add(email); } else { OutputSupertype console = new OutputConsole(); critMessages.Add(console); averageMessages.Add(console); progressMessages.Add(console); errorMessages.Add(console); } }
//когда заканчивается парсинг xml-файла, необходимо выполнить все задания из него по очереди public ResultController StartExchange() { ResultController sessionRC = new ResultController("Выполнение сессии"); foreach (PlannerTask oneTask in tasks) { //успешно ли выполнилось текуще задание bool taskRes = true; DateTime startDT = GlobalUtils.GetNowUtcDateTime(); if (!oneTask.isFake) { //сперва смотрим, нужно ли выполнять данный таск if (this.los.CheckTaskExecute(oneTask.id, oneTask.period)) { //сообщения отправляет класс LogOfSuccession //это сделано потому, что сообщения, преденные системе вывода могут быть разными //и в то же время этому коду нужно знать, продолжать выполнение задания или нет continue; } ResultController tmpResContr = oneTask.TaskStartsExchange(this.prx, sessionRC); taskRes = ActionResult.IsResultIsNotError(tmpResContr.globalWorkRes); sessionRC.AddInnerController(tmpResContr); this.los.SaveTaskResult(oneTask.id, taskRes, startDT); } } //даем команду сохранить все в логах проверки запуска this.los.WorkIsOver(); this.outputs.WorkIsOver2(sessionRC); return(sessionRC); }
public override void WriteLog(string msg, string title) { if (this.file != null) { this.file.WriteLine(GlobalUtils.GetNowUtcDateTime().ToString("yyyy.MM.dd HH:mm:ss") + "\t" + msg); } //Console.WriteLine(msg); }
private DateTime ComputePrevDate(eWorkInterval _int) { switch (this.workInterval) { case eWorkInterval.Days: return(GlobalUtils.GetNowUtcDateTime().AddDays(-1)); case eWorkInterval.Months: return(GlobalUtils.GetNowUtcDateTime().AddMonths(-1)); case eWorkInterval.Years: return(GlobalUtils.GetNowUtcDateTime().AddYears(-1)); default: return(new DateTime()); } }
static void Init(string[] args) { SettingsClass sc = SettingsClass.Instance; //парсинг командной строки foreach (string s in args) { Console.WriteLine(s); if (s == "-sc") { sc.__showConsole = true; } else if (s == "-ra") { sc.__runAll = true; } } ControllerOfOutput.Instance.WriteAverageMessage("Начинаем сессию от " + GlobalUtils.GetNowUtcDateTime().ToString()); }
/// <summary> /// Парсинг XML-файла /// </summary> /// <returns> </returns> public PlannerText(string _plannerPath, ControllerOfOutput _outputs, LogOfSuccession _los) { this.outputs = _outputs; this.los = _los; this.BackupPlannerXml(); PlannerTask tmpTask = new PlannerTask(); FtpFile tmpFtpFile = new FtpFile(); WinFSFile tmpWinFSFile = new WinFSFile(); FileSupertype tmpFileSupertype = tmpFtpFile; AddStrategyClass tmpStrategy = new AddStrategyClass(); CmdRoute tmpCmdRoute = new CmdRoute(); ActionType source_dest = ActionType.Source; PrivateData pd = PrivateData.Instance; string nodeName = String.Empty; XmlTextReader reader = new XmlTextReader(_plannerPath); while (reader.Read()) { string readerValPriv = pd.GetValueFromTemplate(reader.Value); switch (reader.NodeType) { case XmlNodeType.Element: // Узел является элементом. nodeName = reader.Name; switch (nodeName) { case "task": tmpTask = new PlannerTask(); this.tasks.Add(tmpTask); break; case "route": tmpCmdRoute = new CmdRoute(); tmpTask.taskRouts.Add(tmpCmdRoute); break; case "sourceFile": source_dest = ActionType.Source; break; case "destinationFile": source_dest = ActionType.Destination; break; } break; //ToDo: добавить отлавливание оршибок при ошибочном преобразовании case XmlNodeType.Text: // Вывести текст в каждом элементе. switch (nodeName) { //исключительно Planner case "proxyAddress": this.prx.address = readerValPriv; break; case "proxyUser": this.prx.user = readerValPriv; break; case "proxyPass": this.prx.pass = readerValPriv; break; case "proxyAddressesToBypass": this.prx.addressesToBypas = readerValPriv; break; //пошли задания case "id": tmpTask.id = int.Parse(readerValPriv); break; case "isFake": tmpTask.isFake = bool.Parse(readerValPriv); break; case "taskDiscription": tmpTask.taskDiscription = readerValPriv; break; case "deleteTmp": tmpTask.deleteTmp = bool.Parse(readerValPriv); break; case "taskPeriod": tmpTask.period = readerValPriv; break; //добавление IP route'ов case "routeDestination": tmpCmdRoute.destination = readerValPriv; break; case "routeSubnetmask": tmpCmdRoute.subnetMask = readerValPriv; break; case "routeGateway": tmpCmdRoute.gateway = readerValPriv; break; //стратегия добавления case "addStrategyUseMask": tmpStrategy.usemask = bool.Parse(readerValPriv); break; case "addStrategyFileMask": tmpStrategy.fileMask = readerValPriv; break; case "addStrategyFileNameUsage": tmpStrategy.fileNameUsage = readerValPriv; break; case "addStrategyWorkInterval": tmpStrategy.workInterval = GlobalUtils.ParseWorkIntervalEnum(readerValPriv); break; case "addStrategyCheckDateCondition": tmpStrategy.checkDateCondition = readerValPriv; break; case "addStrategyUseCreationDate": tmpStrategy.useCreationDate = bool.Parse(readerValPriv); break; case "addStrategyDateRange": tmpStrategy.dateRange = GlobalUtils.ParseDateRangeEnum(readerValPriv); break; //пошли файлы-источники и файлы-назначения case "type": if (readerValPriv == "FTP") { tmpFtpFile = new FtpFile(tmpFtpFile, tmpTask.id); tmpFileSupertype = tmpFtpFile; tmpTask.uploadDownload.Add(tmpFileSupertype); } else { tmpWinFSFile = new WinFSFile(tmpWinFSFile, tmpTask.id); tmpFileSupertype = tmpWinFSFile; tmpTask.uploadDownload.Add(tmpFileSupertype); } tmpStrategy = new AddStrategyClass(tmpStrategy); tmpFileSupertype.addStrategy = tmpStrategy; tmpFileSupertype.source_dest = source_dest; break; case "ftpUsername": tmpFtpFile.ftpUsername = readerValPriv; break; case "ftpPass": tmpFtpFile.ftpPass = readerValPriv; break; case "ftpUri": tmpFtpFile.ftpUri = readerValPriv; break; case "ftpPort": tmpFtpFile.ftpPort = int.Parse(readerValPriv); break; case "isPassive": tmpFtpFile.isPassive = bool.Parse(readerValPriv); break; case "ftpTimeout": tmpFtpFile.ftpTimeout = int.Parse(readerValPriv); break; case "ftpUseBinary": tmpFtpFile.ftpUseBinary = bool.Parse(readerValPriv); break; case "ftpKeepAlive": tmpFtpFile.ftpKeepAlive = bool.Parse(readerValPriv); break; case "ftpProxyType": tmpFtpFile.ftpProxyType = readerValPriv; break; case "filePath": tmpFileSupertype.filePath = readerValPriv; break; case "maxErrorCout": tmpFileSupertype.errorCount = int.Parse(readerValPriv); break; case "sleepAfterError": tmpFileSupertype.sleepBeforeNext = int.Parse(readerValPriv); break; default: break; } break; case XmlNodeType.EndElement: /* * switch (reader.Name) * { * case "route": * tmpTask.taskRouts.Add(tmpCmdRoute); * break; * }*/ break; } } reader.Close(); }
public static eDateRange ParseDateRangeEnum(string _s) { return(GlobalUtils.ToEnum <eDateRange>(_s, eDateRange._Other)); }
public static eWorkInterval ParseWorkIntervalEnum(string _s) { return(GlobalUtils.ToEnum <eWorkInterval>(_s, eWorkInterval._Other)); }
//останавливаем public void StopAction() { this.stopDate = GlobalUtils.GetNowUtcDateTime(); }
//запускаем public void StartAction() { this.startDate = GlobalUtils.GetNowUtcDateTime(); }