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");
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
 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);
 }
Esempio n. 7
0
        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));
 }
Esempio n. 12
0
 //останавливаем
 public void StopAction()
 {
     this.stopDate = GlobalUtils.GetNowUtcDateTime();
 }
Esempio n. 13
0
 //запускаем
 public void StartAction()
 {
     this.startDate = GlobalUtils.GetNowUtcDateTime();
 }