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 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; }
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); }
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 static JobsGroupDto GetTestJobGroup() { var jobs = new JobsGroupDto("TestJobs1"); jobs.Jobs.Add(GetCopy1Job()); jobs.Jobs.Add(GetCopy2Job()); return jobs; }
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; }
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(); }
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(); }
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; }
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; }