private static MenuItem CreateActionLogMenuItem(string log) { var info = LogFileManager.GetInfo(log); var item = new MenuItem { Header = info.Timestamp.ToString("yyyy-MM-dd HH:mm:ss"), Icon = SuccessStatusIcon(info.HasResult && info.Success), }; item.Click += (s, ea) => Core.ShowLogFile(log); return(item); }
private void ProcessExitedHandler(object sender, EventArgs e) { var p = (Process)sender; Execution execution; lock (runningProcesses) { if (runningProcesses.TryGetValue(p, out execution)) { runningProcesses.Remove(p); } } if (execution == null) { return; } var outputBuffer = new StringBuilder(); string output = null; var exitCode = p.ExitCode; var success = exitCode == 0; var executable = execution.Executable; if (executable != null) { success = executable.ExitCodes.Contains(exitCode); var rawLogFile = executable.CurrentLogFile; if (rawLogFile != null && LogFileManager.WaitForFileAccess(rawLogFile)) { var logFile = LogFileManager.FinalizeLogFileName(rawLogFile, success, exitCode); LogFileManager.PostprocessLogFile(rawLogFile, logFile, outputBuffer); output = outputBuffer.ToString(); if (success && executable.SuccessCheck != null) { var tmpLogFile = logFile; success = executable.SuccessCheck(output); logFile = LogFileManager.FinalizeLogFileName(rawLogFile, success, exitCode); File.Move(tmpLogFile, logFile); } executable.CurrentLogFile = logFile; File.Delete(rawLogFile); } else { executable.CurrentLogFile = null; } } execution.OnExit?.Invoke(new ExecutionResult(executable, success, exitCode, output)); executable?.NotifyExecutionFinished(); }
private void FinalizeLogFile(bool success, int exitCode) { if (CurrentLogFile == null) { return; } var logFile = BuildLogFileName(LogFileManager.FinalizeLogFileName(CurrentLogFile, success, exitCode)); if (LogFileManager.WaitForFileAccess(CurrentLogFile)) { File.Move(CurrentLogFile, logFile); CurrentLogFile = logFile; OnLogIconChanged(); } else { CurrentLogFile = null; } }