Class: GenericCommand
- Inherits:
-
Object
- Object
- GenericCommand
- Defined in:
- lib/CommandManager.rb
Direct Known Subclasses
Constant Summary collapse
- ERROR_OPEN =
"ERROR MESSAGE --8<------"
- ERROR_CLOSE =
"ERROR MESSAGE ------>8--"
Instance Attribute Summary collapse
-
#code ⇒ Object
readonly
Returns the value of attribute code.
-
#command ⇒ Object
readonly
Returns the value of attribute command.
-
#stderr ⇒ Object
readonly
Returns the value of attribute stderr.
-
#stdout ⇒ Object
readonly
Returns the value of attribute stdout.
Class Method Summary collapse
-
.run(command, logger = nil, stdin = nil, timeout = nil) ⇒ Object
Creates a command and runs it.
Instance Method Summary collapse
-
#get_error_message ⇒ Object
Parses error message from
stderr
output. -
#initialize(command, logger = nil, stdin = nil, timeout = nil) ⇒ GenericCommand
constructor
Creates the new command:
command
: string with the command to be executedlogger
: proc that takes a message parameter and logs it. -
#log(message, all = true) ⇒ Object
Sends a log message to the logger proc.
-
#run ⇒ Object
Runs the command.
Constructor Details
#initialize(command, logger = nil, stdin = nil, timeout = nil) ⇒ GenericCommand
Creates the new command: command
: string with the command to be executed logger
: proc that takes a message parameter and logs it
60 61 62 63 64 65 |
# File 'lib/CommandManager.rb', line 60 def initialize(command, logger=nil, stdin=nil, timeout=nil) @command = command @logger = logger @stdin = stdin @timeout = timeout end |
Instance Attribute Details
#code ⇒ Object (readonly)
Returns the value of attribute code.
48 49 50 |
# File 'lib/CommandManager.rb', line 48 def code @code end |
#command ⇒ Object (readonly)
Returns the value of attribute command.
48 49 50 |
# File 'lib/CommandManager.rb', line 48 def command @command end |
#stderr ⇒ Object (readonly)
Returns the value of attribute stderr.
48 49 50 |
# File 'lib/CommandManager.rb', line 48 def stderr @stderr end |
#stdout ⇒ Object (readonly)
Returns the value of attribute stdout.
48 49 50 |
# File 'lib/CommandManager.rb', line 48 def stdout @stdout end |
Class Method Details
.run(command, logger = nil, stdin = nil, timeout = nil) ⇒ Object
Creates a command and runs it
51 52 53 54 55 |
# File 'lib/CommandManager.rb', line 51 def self.run(command, logger=nil, stdin=nil, timeout=nil) cmd = self.new(command, logger, stdin, timeout) cmd.run cmd end |
Instance Method Details
#get_error_message ⇒ Object
Parses error message from stderr
output
103 104 105 106 107 |
# File 'lib/CommandManager.rb', line 103 def tmp=@stderr.scan(/^#{ERROR_OPEN}\n(.*?)#{ERROR_CLOSE}$/m) return "-" if !tmp[0] tmp[0].join(' ').strip end |
#log(message, all = true) ⇒ Object
Sends a log message to the logger proc
68 69 70 |
# File 'lib/CommandManager.rb', line 68 def log(, all=true) @logger.call(, all) if @logger end |
#run ⇒ Object
Runs the command
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/CommandManager.rb', line 73 def run begin @stdout, @stderr, status = execute if status && status.exited? @code = status.exitstatus else @code = 255 end if @code != 0 log("Command execution failed (exit code: #{@code}): #{command}") log(@stderr) end rescue Exception => e if e.is_a?(Timeout::Error) = "Timeout executing #{command}" else = "Internal error #{e}" end log() @stderr = ERROR_OPEN + "\n" + + "\n" + ERROR_CLOSE @code = 255 end return @code end |