Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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;
            }
        }