module Crabfarm::Utils::Processes

Public Class Methods

start_logged_process(_name, _cmd, _logger, _env={}) click to toggle source
# File lib/crabfarm/utils/processes.rb, line 9
def self.start_logged_process(_name, _cmd, _logger, _env={})

  ro, wo = IO.pipe
  re, we = IO.pipe

  proc = ChildProcess.build(*_cmd)
  proc.environment.merge! _env
  proc.io.stdout = wo
  proc.io.stderr = we
  proc.start

  # close write endpoints after fork
  wo.close
  we.close

  # register log consumers
  Linedump.each_line(ro) { |l| _logger.info "[#{_name.upcase}] #{l}" }
  Linedump.each_line(re) { |l| _logger.warn "[#{_name.upcase}] #{l}" }

  proc
end