Class: LoggerPipe::Runner
- Inherits:
-
Object
- Object
- LoggerPipe::Runner
- Defined in:
- lib/logger_pipe/runner.rb
Instance Attribute Summary collapse
-
#cmd ⇒ Object
Returns the value of attribute cmd.
-
#logger ⇒ Object
Returns the value of attribute logger.
-
#timeout(&block) ⇒ Object
Returns the value of attribute timeout.
Instance Method Summary collapse
- #execute ⇒ Object
-
#initialize(logger, cmd, options = {}) ⇒ Runner
constructor
A new instance of Runner.
- #logging_stderr(f) ⇒ Object
- #stderr_buffer ⇒ Object
Constructor Details
#initialize(logger, cmd, options = {}) ⇒ Runner
Returns a new instance of Runner.
20 21 22 23 24 |
# File 'lib/logger_pipe/runner.rb', line 20 def initialize(logger, cmd, = {}) @logger, @cmd = logger, cmd @timeout = [:timeout] @dry_run = [:dry_run] end |
Instance Attribute Details
#cmd ⇒ Object
Returns the value of attribute cmd.
18 19 20 |
# File 'lib/logger_pipe/runner.rb', line 18 def cmd @cmd end |
#logger ⇒ Object
Returns the value of attribute logger.
18 19 20 |
# File 'lib/logger_pipe/runner.rb', line 18 def logger @logger end |
#timeout(&block) ⇒ Object
Returns the value of attribute timeout.
18 19 20 |
# File 'lib/logger_pipe/runner.rb', line 18 def timeout @timeout end |
Instance Method Details
#execute ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/logger_pipe/runner.rb', line 26 def execute if @dry_run logger.info("dry run: #{cmd}") return nil end logger.info("executing: #{cmd}") @buf = [] # systemをタイムアウトさせることはできないので、popenの戻り値を使っています。 # see http://docs.ruby-lang.org/ja/2.0.0/class/Timeout.html @com, @pid = nil, nil stderr_buffer do |stderr_fp| timeout do # popenにブロックを渡さないと$?がnilになってしまうので敢えてブロックで処理しています。 @com = IO.popen("#{cmd} 2> #{stderr_fp.path}") do |com| @com = com @pid = com.pid while line = com.gets @buf << line logger.debug(line.chomp) end end if $?.exitstatus == 0 logging_stderr(stderr_fp) logger.info("\e[32mSUCCESS: %s\e[0m" % [cmd]) return @buf.join else logging_stderr(stderr_fp) msg = "\e[31mFAILURE: %s\e[0m" % [cmd] logger.error(msg) raise Failure.new(msg, @buf) end end end end |
#logging_stderr(f) ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/logger_pipe/runner.rb', line 98 def logging_stderr(f) f.open c = f.read if !c.nil? && !c.empty? logger.info("--- begin stderr ---\n#{c}\n--- end stderr ---") end end |
#stderr_buffer ⇒ Object
91 92 93 94 95 96 |
# File 'lib/logger_pipe/runner.rb', line 91 def stderr_buffer Tempfile.open("logger_pipe.stderr.log") do |f| f.close return block_given? ? yield(f) : nil end end |