示例#1
0
        private static void ExecuteConsoleCommands(JobsGroupDto cmdJobs, ConsoleExecutorDto cmdExeDto)
        {
            try
            {

                var mgr = new CommandExecutionMgr(cmdJobs,cmdExeDto);

                mgr.ExecuteCommands();
            }
            catch(Exception ex)
            {
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = string.Empty,
                    ErrId = 345,
                    ErrorMessage = "Command Job Execution Failed!",
                    ErrSourceMethod = "ExecuteConsoleCommands()",
                    ErrException = ex,
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.FATAL
                };

                Environment.ExitCode = -4;
                _errorMgr.LoggingStatus = ErrorLoggingStatus.On;
                _errorMgr.WriteErrorMsg(err);
                cmdExeDto.ApplicationExitStatus.OpsError = _errorMgr.FormatErrorDto(err);
                cmdExeDto.ApplicationExitStatus.IsExceptionThrown = true;
                cmdExeDto.ApplicationExitStatus.WriteExitConsoleMessage();
            }
        }
示例#2
0
        public XmlParameterBuilder(ConsoleExecutorDto cmdExeDto)
        {
            if (cmdExeDto?.XmlCmdFileDto?.FileXinfo == null || !cmdExeDto.XmlCmdFileDto.FileXinfo.Exists)
            {
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = String.Empty,
                    ErrId = 1,
                    ErrorMessage = "Xml Command File is Invalid!",
                    ErrSourceMethod = "Constructor()",
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.FATAL
                };

                ErrorMgr.LoggingStatus = ErrorLoggingStatus.On;
                ErrorMgr.WriteErrorMsg(err);

                throw new ArgumentException("Invalid Xml Command File!");

            }

            try
            {
                _xmlReader = new XmlTextReader(cmdExeDto.XmlCmdFileDto.FileXinfo.FullName);
            }
            catch (Exception e)
            {
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = String.Empty,
                    ErrId = 1,
                    ErrorMessage = "Xml Command File threw exception while opening!",
                    ErrSourceMethod = "Constructor()",
                    ErrException = e,
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.FATAL
                };

                ErrorMgr.LoggingStatus = ErrorLoggingStatus.On;
                ErrorMgr.WriteErrorMsg(err);

                throw new ArgumentException("Xml Command File Failed To Open!");

            }

            _jobsGroupDto = new JobsGroupDto(cmdExeDto.XmlCmdFileDto.FileXinfo.Name + " Commands");

            _cmdExeDto = cmdExeDto;
        }
示例#3
0
        public CommandExecutionMgr(JobsGroupDto jobsGroup,
								ConsoleExecutorDto consoleCmdDto)
        {
            _commandJobs = jobsGroup;

            _consoleExecutor = consoleCmdDto;

            _cmdLogMgr = new ConsoleCommandLogMgr(consoleCmdDto.DefaultCommandOutputLogFilePathName,
                                                    consoleCmdDto.CmdConsoleLogFileTimeStamp,
                                                        string.Empty);

            _errLogMgr = new ConsoleCommandLogMgr(consoleCmdDto.DefaultCommandOutputLogFilePathName,
                                                        consoleCmdDto.CmdConsoleLogFileTimeStamp,
                                                            consoleCmdDto.CmdConsoleLogFileErrorSuffix);

            _wrkDirMgr = new WorkingDirectoryMgr(_consoleExecutor.DefaultCommandExeDirectoryDto);
        }
示例#4
0
        private static void AppShutdownAndCleanUp(JobsGroupDto jobs, ConsoleExecutorDto cmdExeDto)
        {
            try
            {
                LogUtil.WriteLogJobGroupCompletionMessage(jobs);

            }
                // ReSharper disable once EmptyGeneralCatchClause
            catch
            {
            }
            finally
            {
                jobs?.Dispose();
                cmdExeDto?.ApplicationExitStatus.WriteExitConsoleMessage();
                cmdExeDto?.Dispose();

            }
        }
示例#5
0
        public static JobsGroupDto GetTestJobGroup()
        {
            var jobs = new JobsGroupDto("TestJobs1");

            jobs.Jobs.Add(GetCopy1Job());
            jobs.Jobs.Add(GetCopy2Job());

            return jobs;
        }
示例#6
0
        public bool ExecuteCommands()
        {
            bool result;
            int jobNo = 0;
            Console.WriteLine("CmdrX.exe: Starting Job Execution...");
            try
            {
                foreach (var job in _commandJobs.Jobs)
                {
                    jobNo++;
                    job.JobNumber = jobNo;
                    job.CommandStartTime = DateTime.Now;
                    LogUtil.WriteLogJobStartUpMessage(job, _consoleExecutor);
                    _cmdLogMgr.LogWriteStartJobHeader(job);
                    _errLogMgr.LogWriteStartJobHeader(job);
                    var exeCmd = new ExecuteConsoleCommand(job, _cmdLogMgr, _errLogMgr, _wrkDirMgr);
                    exeCmd.Execute();

                    _cmdLogMgr.LogWriteEndJobFooter(job);
                    _errLogMgr.LogWriteEndJobFooter(job);
                    Console.WriteLine($"Completed Job No. {jobNo,4:###0} Exit Code: {job.CommandExitCode} Job Name: {job.CommandDisplayName}" );

                    if (job.CommandExitCode > job.KillJobsRunOnExitCodeGreaterThan
                        || job.CommandExitCode < job.KillJobsRunOnExitCodeLessThan)
                    {
                        var msg = $"Job No. {job.JobNumber} Job Name: {job.CommandDisplayName}"
                            + Environment.NewLine
                            + $"Command Exit Code Is Out-Of-Bounds! Job Exit Code = {job.CommandExitCode}  "
                            + Environment.NewLine
                            + $"Maximum Exit Code = {job.KillJobsRunOnExitCodeGreaterThan}  "
                            + $"Mininimum Exit Code = {job.KillJobsRunOnExitCodeLessThan}  "
                            + Environment.NewLine
                            + "Terminating Job Group Command Execution!";

                        Environment.ExitCode = job.CommandExitCode;
                        var err = new FileOpsErrorMessageDto
                        {
                            JobName = job.CommandDisplayName,
                            DirectoryPath = string.Empty,
                            ErrId = 10,
                            ErrorMessage = msg,
                            ErrSourceMethod = "ExecuteCommands()",
                            FileName = string.Empty,
                            LoggerLevel = LogLevel.FATAL
                        };

                        _consoleExecutor.ApplicationExitStatus.OpsError =
                            ErrorMgr.FormatErrorDto(err);
                        _consoleExecutor.ApplicationExitStatus.IsFatalError = true;
                        ErrorMgr.LoggingStatus = ErrorLoggingStatus.On;
                        ErrorMgr.WriteErrorMsg(err);
                        LogUtil.WriteLogJobEndMessage(job, _consoleExecutor);
                        return false;
                    }

                    LogUtil.WriteLogJobEndMessage(job, _consoleExecutor);

                    _wrkDirMgr.ChangeBackToOriginalWorkingDirectory();
                }

                Environment.ExitCode = 0;
                _consoleExecutor.ApplicationExitStatus.IsSuccessfulCompletion = true;
                result = true;
            }
            catch (Exception ex)
            {
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = string.Empty,
                    ErrId = 20,
                    ErrorMessage = "Exception thrown while executing commands! ",
                    ErrSourceMethod = "ExecuteCommands()",
                    ErrException = ex,
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.FATAL
                };

                ErrorMgr.LoggingStatus = ErrorLoggingStatus.On;
                ErrorMgr.WriteErrorMsg(err);
                _consoleExecutor.ApplicationExitStatus.IsExceptionThrown = true;
                _consoleExecutor.ApplicationExitStatus.OpsError = ErrorMgr.FormatErrorDto(err);

                if (Environment.ExitCode == 0)
                {
                    Environment.ExitCode = -8;
                }

                result = false;
            }
            finally
            {
                _wrkDirMgr.ChangeBackToOriginalWorkingDirectory();
                _wrkDirMgr.Dispose();
                _wrkDirMgr = null;

                _commandJobs.Dispose();
                _commandJobs = null;

                _cmdLogMgr.Dispose();
                _cmdLogMgr = null;

                _errLogMgr.Dispose();
                _errLogMgr = null;

            }

            return result;
        }
示例#7
0
        public static void WriteLogJobGroupStartUpMessage(JobsGroupDto jobsGroup)
        {
            if (!IsLoggerConfigured)
            {
                return;
            }

            var banner = StringHelper.MakeSingleCharString('#', MaxBannerLen);
            if (!string.IsNullOrWhiteSpace(jobsGroup.JobGroupName))
            {
                JobGroupName = "Execution Job Group: " + jobsGroup.JobGroupName;
            }
            else
            {
                JobGroupName = "Execution Job Group: Job Group # 1";
            }

            JobGroupStartTime = DateTime.Now;
            ExpectedJobCount = jobsGroup.Jobs.Count;
            var sb = new StringBuilder();
            sb.Append(NewLine);
            sb.Append(banner + NewLine);
            sb.Append(banner + NewLine);

            var s = "CmdrX.exe Assembly Version " + ExeAssemblyVersionNo;
            var cStr = StringHelper.CenterString(s, banner.Length);
            sb.Append(cStr + NewLine);

            sb.Append(banner + NewLine);
                sb.Append(StringHelper.CenterString(JobGroupName, banner.Length));
                sb.Append(NewLine);

            if(ExpectedJobCount == 1)
            {
                s = "Starting Execution of One Job.";
            }
            else
            {
                s = $"Starting Execution of {ExpectedJobCount} Jobs.";
            }

            cStr = StringHelper.CenterString(s, banner.Length);
            sb.Append(cStr);
            sb.Append(NewLine);

            s= $"Started Job Run: " + DateHelper.DateTimeToDayMilliseconds(JobGroupStartTime);

            cStr = StringHelper.CenterString(s, banner.Length);
            sb.Append(cStr + NewLine);

            sb.Append(banner + NewLine);
            sb.Append(banner + NewLine);
            sb.Append(NewLine);

            WriteLog(LogLevel.MESSAGE, sb.ToString());
            _logger.LogFlushStreamWriter();
        }
示例#8
0
        public static void WriteLogJobGroupCompletionMessage(JobsGroupDto jobsGroup)
        {
            if (!IsLoggerConfigured)
            {
                return;
            }

            var banner = StringHelper.MakeSingleCharString('#', MaxBannerLen);
            var subbanner = StringHelper.MakeSingleCharString('*', MaxBannerLen);
            JobGroupEndTime = DateTime.Now;
            JobGroupElapsedTime = JobGroupEndTime.Subtract(JobGroupStartTime);
            var sb = new StringBuilder();

            sb.Append(NewLine);
            sb.Append(NewLine);
            sb.Append(banner + NewLine);
            sb.Append(banner + NewLine);

            var s = "CmdrX.exe Assembly Version " + ExeAssemblyVersionNo;
            var cStr = StringHelper.CenterString(s, banner.Length);
            sb.Append(cStr + NewLine);

            sb.Append(banner + NewLine);
            sb.Append(StringHelper.CenterString(JobGroupName, banner.Length));
            sb.Append(NewLine);
            sb.Append(banner + NewLine);

            JobNumber--;

            s = $"Completed Execution of {JobNumber} Jobs.";
            sb.Append(s + NewLine);
            s = $"Number of messages logged: {JobGroupMessageCnt} ";
            sb.Append(s + NewLine);
            sb.Append(subbanner + NewLine);
            sb.Append("JobGroup   Start Time: " + DateHelper.DateTimeToMillisconds(JobGroupStartTime) + NewLine);
            sb.Append("JobGroup     End Time: " + DateHelper.DateTimeToMillisconds(JobGroupEndTime) + NewLine);
            sb.Append("JobGroup Elapsed Time: " + DateHelper.TimeSpanDetailToMiliseconds(JobGroupElapsedTime) + NewLine);
            sb.Append(subbanner + NewLine);

            WriteLog(LogLevel.MESSAGE, sb.ToString());
            _logger.LogFlushStreamWriter();
        }
示例#9
0
        private static bool SetUpLogging(ConsoleExecutorDto cmdExeDto, JobsGroupDto jobsGroup)
        {
            try
            {
                // Setup Application Logging
                cmdExeDto.AppLogMgr.PurgeOldLogFiles();

                LogUtil.ConfigureLogger(cmdExeDto.AppLogMgr.ConfigureLogger());

                _errorMgr.IsLoggingConfigured = true;

                LogUtil.ExeAssemblyVersionNo = AppInfoHelper.GetThisAssemblyVersion();

                LogUtil.WriteLogJobGroupStartUpMessage(jobsGroup);

                cmdExeDto.ErrorMgr.IsLoggingConfigured = true;

            }
            catch (Exception ex)
            {

                Environment.ExitCode = -2;
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = string.Empty,
                    ErrId = 10,
                    ErrorMessage = "Application Log Setup Failure!",
                    ErrSourceMethod = "SetUpLogging()",
                    ErrException = ex,
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.ERROR
                };

                cmdExeDto.ApplicationExitStatus.IsExceptionThrown = true;
                cmdExeDto.ApplicationExitStatus.OpsError = _errorMgr.FormatErrorDto(err);
                cmdExeDto.ApplicationExitStatus.WriteExitConsoleMessage();

                return false;
            }

            return true;
        }
示例#10
0
        private static bool ParseCommandJobsFromXml(ConsoleExecutorDto cmdExeDto, out JobsGroupDto jobsGroupDto)
        {
            jobsGroupDto = null;

            try
            {
                var xmlParser = new XmlParameterBuilder(cmdExeDto);
                jobsGroupDto = xmlParser.BuildParmsFromXml();

                if (jobsGroupDto == null || jobsGroupDto.NumberOfJobs < 1)
                {
                    var err = new FileOpsErrorMessageDto
                    {
                        DirectoryPath = string.Empty,
                        ErrId = 35,
                        ErrorMessage = "Zero jobs were extracted from the XmlCommands file!",
                        ErrSourceMethod = "ParseCommandJobsFromXml()",
                        FileName = string.Empty,
                        LoggerLevel = LogLevel.FATAL
                    };

                    cmdExeDto.ApplicationExitStatus.OpsError = _errorMgr.FormatErrorDto(err);
                    cmdExeDto.ApplicationExitStatus.IsTerminateApp = true;
                    cmdExeDto.ApplicationExitStatus.WriteExitConsoleMessage();
                    Environment.ExitCode = -3;
                    return false;
                }

            }
            catch(Exception ex)
            {
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = string.Empty,
                    ErrId = 137,
                    ErrorMessage = ex.Message,
                    ErrSourceMethod = "ParseCommandJobsFromXml()",
                    ErrException = ex,
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.FATAL
                };

                _errorMgr.LoggingStatus = ErrorLoggingStatus.On;
                _errorMgr.WriteErrorMsg(err);
                Environment.ExitCode = -3;
                cmdExeDto.ApplicationExitStatus.OpsError = _errorMgr.FormatErrorDto(err);
                cmdExeDto.ApplicationExitStatus.IsExceptionThrown = true;
                cmdExeDto.ApplicationExitStatus.WriteExitConsoleMessage();

                return false;
            }

            return true;
        }