Пример #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();
            }
        }
        public void ExtractElementInfo(XmlTextReader reader, 
						ref ConsoleCommandDto consoleCommand, 
							ref ConsoleExecutorDto cmdExeDto)
        {
            if (reader.Name == "DefaultLogFileRetentionInDays")
            {
                cmdExeDto.AppLogRetentionInDays = _xmlHlpr.ExtractIntValue(reader, -1);

                return;
            }

            if (reader.Name == "DefaultCommandExeDirectory")
            {
                var dir = _xmlHlpr.ExtractStringValue(reader);

                cmdExeDto.SetDefaultCommandExeDirectory(dir);

                return;
            }

            if (reader.Name == "DefaultCommandOutputLogFilePathName")
            {
                var filePath = _xmlHlpr.ExtractStringValue(reader);

                cmdExeDto.SetDefaultCommandOutputLogFilePathName(filePath);
            }
        }
Пример #3
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;
        }
Пример #4
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);
        }
Пример #5
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();

            }
        }
        public void ShouldExecuteCommandsCorrectly()
        {
            var exeDir = TestDirectories.GetTestExeDir();

            var logDir = new DirectoryDto(exeDir.DirInfo.FullName + "\\logdir");
            DirectoryHelper.DeleteADirectory(logDir);
            var dirT3 = TestDirectories.GetTestDirectory003();
            FileHelper.DeleteAllFilesInDirectoryTree(dirT3);

            var consoleExeDto = new ConsoleExecutorDto
            {
                DefaultConsoleCommandExecutor = TestDirectories.GetConsoleCommandExecutor(),
                DefaultConsoleCommandExeArgs = TestDirectories.GetConsoleCommandExeArguments(),
                CmdConsoleLogFileErrorSuffix = "Error",
                CmdConsoleLogFileTimeStamp = DateHelper.NowYearMthDayHrsSecs(),
                CommandDefaultTimeOutInMinutes = 5.0M,
                CommandMaxTimeOutInMinutes = 45.0M,
                CommandMinTimeOutInMinutes = 1.0M,
                DefaultCommandOutputLogFilePathName = ".\\logdir\\installLog.log",
                XmlCmdFileDto = TestDirectories.GetXmlCmdTest002FileDto(),
                DefaultConsoleCommandType = ConsoleCommandType.Console
            };

            var jobs = TestDirectories.GetTestJobGroup();

            var cmdExeMgr = new CommandExecutionMgr(jobs,consoleExeDto);

            var result = cmdExeMgr.ExecuteCommands();

            Assert.IsTrue(result);

            var files = dirT3.DirInfo.GetFiles();

            FileHelper.DeleteAllFilesInDirectoryTree(dirT3);

            Assert.IsTrue(files.Length == 4);
        }
Пример #7
0
        public void ExtractElementInfo(XmlTextReader reader,
											ref ConsoleCommandDto consoleCommand,
												ref	ConsoleExecutorDto cmdExeDto)
        {
            var parmHlpr = new XmlParameterConverter(cmdExeDto);

            if (reader.Name == "CommandDisplayName")
            {
                consoleCommand.CommandDisplayName = _xmlHlpr.ExtractStringValue(reader);

                return;
            }

            if (reader.Name == "ConsoleCommandType")
            {
                consoleCommand.CommandType = _xmlHlpr.ExtractConsoleCommandType(reader);

                return;
            }

            if (reader.Name == "KillJobsRunOnExitCodeGreaterThan")
            {
                var userEntry = _xmlHlpr.ExtractStringValue(reader);

                int exitCodeLimit;

                if (string.IsNullOrWhiteSpace(userEntry) || !int.TryParse(userEntry, out exitCodeLimit))
                {
                    return;
                }

                consoleCommand.KillJobsRunOnExitCodeGreaterThan = exitCodeLimit;

                return;
            }

            if (reader.Name == "KillJobsRunOnExitCodeLessThan")
            {
                var userEntry = _xmlHlpr.ExtractStringValue(reader);

                int exitCodeLimit;

                if (string.IsNullOrWhiteSpace(userEntry) || !int.TryParse(userEntry, out exitCodeLimit))
                {
                    return;
                }

                consoleCommand.KillJobsRunOnExitCodeLessThan = exitCodeLimit;

                return;
            }

            if (reader.Name == "CommandOutputLogFilePathBaseName")
            {
                consoleCommand.CommandOutputLogFilePathBaseName = _xmlHlpr.ExtractStringValue(reader);

                return;
            }

            if (reader.Name == "CommandTimeOutInMinutes")
            {
                consoleCommand.CommandTimeOutInMinutes = _xmlHlpr.ExtractDecimalValue(reader, 0.0M);

                return;
            }

            if (reader.Name == "DefaultConsoleCommandExecutor")
            {
                consoleCommand.ConsoleCommandExecutor = parmHlpr.RunConversion(_xmlHlpr.ExtractStringValue(reader));

                return;
            }

            if (reader.Name == "ConsoleCommandExeArguments")
            {
                consoleCommand.ConsoleCommandExeArguments = parmHlpr.RunConversion(_xmlHlpr.ExtractStringValue(reader));

                return;
            }

            if (reader.Name == "ExecuteInDir")
            {
                consoleCommand.ExecuteInDir = _xmlHlpr.ExtractStringValue(reader);

                return;
            }

            if (reader.Name == "ExecutableTarget")
            {
                consoleCommand.ExecutableTarget = parmHlpr.RunConversion(_xmlHlpr.ExtractStringValue(reader));

                return;
            }

            if (reader.Name == "CommandToExecute")
            {
                consoleCommand.CommandToExecute = parmHlpr.RunConversion(_xmlHlpr.ExtractStringValue(reader));

                return;
            }

            if (reader.Name == "CommandModifier")
            {
                consoleCommand.CommandModifier = parmHlpr.RunConversion(_xmlHlpr.ExtractStringValue(reader));

                return;
            }

            if (reader.Name == "CommandArguments")
            {
                consoleCommand.CommandArguments = parmHlpr.RunConversion(_xmlHlpr.ExtractStringValue(reader));
            }
        }
Пример #8
0
 public XmlParameterConverter(ConsoleExecutorDto cmDto)
 {
     _xmlParms[0, 1] = cmDto.CmdConsoleLogFileTimeStamp;
 }
Пример #9
0
        public static void WriteLogJobStartUpMessage(ConsoleCommandDto job, ConsoleExecutorDto consoleExecutor)
        {
            if (!IsLoggerConfigured)
            {
                return;
            }

            var jobName = job.CommandDisplayName;

            JobNumber = job.JobNumber;

            CurrentJobNo = "Starting Job No: " + JobNumber;

            if(!string.IsNullOrEmpty(jobName))
            {
                CurrentJobName = "Job Name: " + jobName;
            }
            else
            {
                CurrentJobName = string.Empty;
            }

            IsFirstJobLogMsg = false;
            IsAnyLoggingActive = true;

            var banner = StringHelper.MakeSingleCharString('=', MaxBannerLen);
            var subbanner = StringHelper.MakeSingleCharString('-', MaxBannerLen);

            var now = job.CommandStartTime;
            var sb = new StringBuilder();
            sb.Append(NewLine);
            sb.Append(banner + NewLine);
            sb.Append(banner + NewLine);

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

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

            sb.Append(subbanner);
            sb.Append(NewLine);
            if(!string.IsNullOrWhiteSpace(CurrentJobName))
            {
                cStr = StringHelper.CenterString(CurrentJobName, banner.Length);
                sb.Append(cStr);
                sb.Append(NewLine);

            }

            sb.Append($"Started Job: {now.ToLongDateString()} {now.ToLongTimeString()}" + NewLine);
            sb.Append(subbanner);
            sb.Append(NewLine);

            sb.Append("Process StartInfo FileName: " + job.ProcFileNameCommand);
            sb.Append(NewLine);
            var args = StringHelper.BreakLineAtIndex(StringHelper.RemoveCarriageReturns(job.ProcFileArguments), 65);
            sb.Append("Process StartInfo Arguments: ");
            if (args.Length > 0)
            {
                sb.Append(NewLine);

                for (int i = 0; i < args.Length; i++)
                {
                    sb.Append("     " + args[i] + NewLine);
                }
            }
            else
            {
                sb.Append("<NO ARGUMENTS>" + NewLine);
            }

            sb.Append(subbanner + NewLine);

            WriteLog(LogLevel.MESSAGE, sb.ToString());
        }
Пример #10
0
        public static void WriteLogJobEndMessage(ConsoleCommandDto job, ConsoleExecutorDto consoleExecutor)
        {
            if (!IsLoggerConfigured)
            {
                return;
            }

            var banner = StringHelper.MakeSingleCharString('=', MaxBannerLen);
            var subbanner = StringHelper.MakeSingleCharString('-', MaxBannerLen);
            var startTime = job.CommandStartTime;
            var endTime = job.CommandExitTime;
            var ts = job.CommandElapsedTime;
            var sb = new StringBuilder();
            sb.Append(NewLine);
            sb.Append(NewLine);
            sb.Append(subbanner + NewLine);
            var cStr = StringHelper.CenterString("Job Completed: " + job.CommandDisplayName, banner.Length);
            sb.Append(cStr);
            sb.Append(NewLine);

            sb.Append(subbanner + NewLine);
            sb.Append("Job       Number: " + job.JobNumber + NewLine);
            sb.Append("Job   Start Time: " + DateHelper.DateTimeToDayMilliseconds(startTime) + NewLine);
            sb.Append("Job     End Time: " + DateHelper.DateTimeToDayMilliseconds(endTime) + NewLine);
            sb.Append("Job Elapsed Time: " + DateHelper.TimeSpanDetailToMiliseconds(ts) + NewLine);
            sb.Append("Job    Exit Code: " + job.CommandExitCode + NewLine);

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

            WriteLog(LogLevel.MESSAGE, sb.ToString());
            _logger.LogFlushStreamWriter();
        }
 public CommandLineParameterBuilder(ConsoleExecutorDto cmdExeDto)
 {
     _cmdExeDto = cmdExeDto;
 }
Пример #12
0
        static void Main(string[] args)
        {
            _errorMgr = new
                    ErrorLogger(1000,
                        "Program",
                        AppConstants.LoggingStatus,
                        AppConstants.LoggingMode,
                        false);

            AppConstants.LoggingStatus = ErrorLoggingStatus.On;
            AppConstants.LoggingMode = ErrorLoggingMode.Verbose;
            JobsGroupDto cmdJobs = null;

            var nowTimeStamp = DateHelper.NowYearMthDayHrsSecs();

            var cmdExeDto = new ConsoleExecutorDto()
            {   AppLogFileBaseNameOnly =
                    PathHelper.ExtractFileNameOnlyComponent(AppConstants.AppLogFileNameExtension),
                AppLogFileExtensionWithoutLeadingDot =
                    PathHelper.ExtractFileExtensionComponentWithoutLeadingDot(AppConstants.AppLogFileNameExtension),
                AppLogDirectory = PathHelper.ExtractDirectoryComponent(AppConstants.DefaultCommandOutputLogFilePathName),
                AppLogFileTimeStamp = nowTimeStamp,
                DefaultConsoleCommandExecutor = AppConstants.DefaultConsoleCommandExecutor,
                DefaultConsoleCommandExeArgs = AppConstants.DefaultConsoleCommandExeArgs,
                CmdConsoleLogFileErrorSuffix = AppConstants.ConsoleErrorLogFileNameSuffix,
                CmdConsoleLogFileTimeStamp = nowTimeStamp,
                CommandDefaultTimeOutInMinutes = AppConstants.CommandDefaultTimeOutInMinutes,
                CommandMaxTimeOutInMinutes = AppConstants.CommandMaxTimeOutInMinutes,
                CommandMinTimeOutInMinutes = AppConstants.CommandMinTimeOutInMinutes,
                DefaultKillJobsRunOnExitCodeGreaterThan = AppConstants.DefaultKillJobsRunOnExitCodeGreaterThan,
                DefaultKillJobsRunOnExitCodeLessThan = AppConstants.DefaultKillJobsRunOnExitCodeLessThan,
                DefaultCommandOutputLogFilePathName = AppConstants.DefaultCommandOutputLogFilePathName,
                XmlCmdFileDto = AppInfoHelper.GetDefaultXmlCommandFile(),
                DefaultConsoleCommandType = AppConstants.DefaultConsoleCommandType
            };

            try
            {
                if (!ProcessCmdArgs(cmdExeDto, args))
                {
                }

                if (!ValidateXmlCommandFile(cmdExeDto))
                {
                    return;
                }

                if (!ParseCommandJobsFromXml(cmdExeDto, out cmdJobs))
                {
                    return;
                }

                if (!SetUpLogging(cmdExeDto, cmdJobs))
                {
                    return;
                }

            }
            catch(Exception ex)
            {
                if (Environment.ExitCode == 0)
                {
                    Environment.ExitCode = -50;
                }
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = string.Empty,
                    ErrId = 10,
                    ErrorMessage = "Exception Thrown On Setup",
                    ErrSourceMethod = "Main()",
                    ErrException = ex,
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.FATAL
                };

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

            try
            {
                ExecuteConsoleCommands(cmdJobs, cmdExeDto);

            }
            catch (Exception ex)
            {
                if (Environment.ExitCode == 0)
                {
                    Environment.ExitCode = -50;
                }

                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = string.Empty,
                    ErrId = 150,
                    ErrorMessage = "Command Execution Exception Thrown: ",
                    ErrSourceMethod = "SetUpLogging()",
                    ErrException = ex,
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.ERROR
                };

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

            }
            finally
            {
                AppShutdownAndCleanUp(cmdJobs, cmdExeDto);
            }
        }
Пример #13
0
        private static bool ValidateXmlCommandFile(ConsoleExecutorDto cmdExeDto)
        {
            if (!FileHelper.DoesFileExist(cmdExeDto.XmlCmdFileDto))
            {
                var err = new FileOpsErrorMessageDto
                {
                    DirectoryPath = string.Empty,
                    ErrId = 3,
                    ErrorMessage = "Could Not Locate a valid Xml Commands file!",
                    ErrSourceMethod = "ValidateXmlCommandFile()",
                    FileName = string.Empty,
                    LoggerLevel = LogLevel.FATAL
                };

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

            return true;
        }
Пример #14
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;
        }
Пример #15
0
        private static bool ProcessCmdArgs(ConsoleExecutorDto cmdExeDto, string[] args)
        {
            if (args == null || args.Length < 1)
            {
                return true;
            }

            var cmdLineParser = new CommandLineParameterBuilder(cmdExeDto);

            if (!cmdLineParser.BuildFileInfoParamters(args))
            {
                return false;
            }

            return true;
        }
Пример #16
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;
        }