From 6b92051847b4dd28afb7dd11993209675dd40ea0 Mon Sep 17 00:00:00 2001 From: "konstantin.hitrih" Date: Fri, 20 Apr 2018 11:28:43 +0700 Subject: [PATCH] Feature: 'error_exit_code' flag; --- README.md | 2 ++ Server/Commands/RunCommand.cs | 35 +++++++++++++++++++++++++---------- Server/Server.csproj | 2 +- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index b10bf27..aed26e1 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,7 @@ You can use several servers (as many as you want), but if you don't need to dupl - Command output is shown as "message" - If "logfile" exists, "message" does not contain actual message, but contains path to log +- To catch errors using non-zero exit code, use "error_exit_code" - To catch errors in output, use "error_regex" - To convert message to short "result", use "result_regex" (also, you can set "result_right_to_left" to "true" if you need to catch last match instead of first) - If application which you call can't write to stdout and support only external log files, you can enable "is_external_log" (optional) and provide log path to app and "log_file". When execution is done, log file will be processed as usual @@ -250,6 +251,7 @@ You can use several servers (as many as you want), but if you don't need to dupl "args": "arguments", "work_dir": "work_directory", "error_regex": "regex_to_catch_errors", + "error_exit_code": "true", "log_file": "path_to_logfile", "is_external_log": "false" } diff --git a/Server/Commands/RunCommand.cs b/Server/Commands/RunCommand.cs index 79ae1cd..5b4cf8e 100644 --- a/Server/Commands/RunCommand.cs +++ b/Server/Commands/RunCommand.cs @@ -63,11 +63,14 @@ public class RunCommand:ICommand, IAbortableCommand { if (_isAborted) { throw new CommandAbortedException(); } - var errorRegex = args.Get("error_regex"); - var resultRegex = args.Get("result_regex"); - var checkResultValue = !string.IsNullOrEmpty(resultRegex); - var isRightToLeft = args.Get("result_right_to_left"); + var errorRegex = args.Get("error_regex"); + var errorExitCode = args.GetBoolean("error_exit_code", false); + var resultRegex = args.Get("result_regex"); + var checkResultValue = !string.IsNullOrEmpty(resultRegex); + var isRightToLeft = args.Get("result_right_to_left"); var isRightToLeftValue = !string.IsNullOrEmpty(isRightToLeft) && bool.Parse(isRightToLeft); + var messageToCheck = string.Empty; + var messageToShow = string.Empty; if (!string.IsNullOrEmpty(logFile)) { var msg = $"Log saved to {logFile}."; string logContent = null; @@ -88,14 +91,18 @@ public class RunCommand:ICommand, IAbortableCommand { } } } while (!isDone); - var result = GetResultMessage(resultRegex, logContent, isRightToLeftValue); - return CheckCommandResult(errorRegex, logContent, msg, checkResultValue, result); + messageToCheck = logContent; + messageToShow = msg; } else { - _inMemoryLog = _inMemoryLog.TrimEnd('\n'); - var msg = _inMemoryLog; - var result = GetResultMessage(resultRegex, msg, isRightToLeftValue); - return CheckCommandResult(errorRegex, msg, msg, checkResultValue, result); + _inMemoryLog = _inMemoryLog.TrimEnd('\n'); + messageToCheck = _inMemoryLog; + messageToShow = _inMemoryLog; } + var result = GetResultMessage(resultRegex, messageToCheck, isRightToLeftValue); + if ( errorExitCode ) { + return CheckCommandResultViaExitCode(process, messageToShow, result); + } + return CheckCommandResult(errorRegex, messageToCheck, messageToShow, checkResultValue, result); } catch (Exception e) { if (e is CommandAbortedException) { @@ -160,6 +167,14 @@ public class RunCommand:ICommand, IAbortableCommand { return false; } + CommandResult CheckCommandResultViaExitCode(Process process, string messageToShow, string result) { + _logger.LogDebug($"Process exit code: {process.ExitCode}"); + if ( process.ExitCode != 0 ) { + return CommandResult.Fail($"(exit code: {process.ExitCode}) {messageToShow}"); + } + return CommandResult.Success(messageToShow, result); + } + CommandResult CheckCommandResult(string errorRegex, string messageToCheck, string messageToShow, bool checkResultValue, string result) { return ContainsError(errorRegex, messageToCheck) || (checkResultValue && string.IsNullOrEmpty(result)) ? diff --git a/Server/Server.csproj b/Server/Server.csproj index 7940f09..024c597 100755 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -1,7 +1,7 @@  netstandard2.0 - 0.28.55.0 + 0.29.56.0