Class: EY::Serverside::Shell

Inherits:
Object
  • Object
show all
Defined in:
lib/engineyard-serverside/shell.rb,
lib/engineyard-serverside/shell/helpers.rb,
lib/engineyard-serverside/shell/yieldio.rb,
lib/engineyard-serverside/shell/formatter.rb,
lib/engineyard-serverside/shell/command_result.rb

Defined Under Namespace

Modules: Helpers Classes: CommandResult, Formatter, YieldIO

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Shell

Returns a new instance of Shell.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/engineyard-serverside/shell.rb', line 13

def initialize(options)
  @start_time = options[:start_time]
  @verbose    = options[:verbose]


  @stdout = options[:stdout] || $stdout
  @stderr = options[:stderr] || $stderr

  log_pathname = Pathname.new(options[:log_path])
  log_pathname.unlink if log_pathname.exist? # start fresh
  @logger = Logger.new(log_pathname.to_s)
  @logger.level = Logger::DEBUG # Always log to the file at debug, formatter hides debug for non-verbose
  @logger.formatter = EY::Serverside::Shell::Formatter.new(@stdout, @stderr, start_time, @verbose)
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



11
12
13
# File 'lib/engineyard-serverside/shell.rb', line 11

def logger
  @logger
end

Instance Method Details

#command_err(msg) ⇒ Object



64
# File 'lib/engineyard-serverside/shell.rb', line 64

def command_err(msg)  unknown msg.gsub(/^/,'     ') end

#command_out(msg) ⇒ Object



63
# File 'lib/engineyard-serverside/shell.rb', line 63

def command_out(msg)  debug   msg.gsub(/^/,'     ') end

#command_show(cmd) ⇒ Object

a debug outputter that displays a command being run Formatis like this:

$ cmd blah do \
> something more
> end


62
# File 'lib/engineyard-serverside/shell.rb', line 62

def command_show(cmd) debug   cmd.gsub(/^/,'   > ').sub(/>/, '$') end

#debug(msg) ⇒ Object



53
# File 'lib/engineyard-serverside/shell.rb', line 53

def debug(msg)   logger.debug   msg end

#error(msg) ⇒ Object



49
# File 'lib/engineyard-serverside/shell.rb', line 49

def error(msg)   logger.error   "ERROR: #{msg}"   end

#exception(msg) ⇒ Object



56
# File 'lib/engineyard-serverside/shell.rb', line 56

def exception(msg) error msg end

#fatal(msg) ⇒ Object



48
# File 'lib/engineyard-serverside/shell.rb', line 48

def fatal(msg)   logger.fatal   "FATAL: #{msg}"   end

#info(msg) ⇒ Object



52
# File 'lib/engineyard-serverside/shell.rb', line 52

def info(msg)    logger.info    msg end

#logged_system(cmd, server = nil) ⇒ Object



66
67
68
69
70
71
72
73
# File 'lib/engineyard-serverside/shell.rb', line 66

def logged_system(cmd, server = nil)
  command_show(cmd)
  output = ""
  outio = YieldIO.new { |msg| output << msg; command_out(msg) }
  errio = YieldIO.new { |msg| output << msg; command_err(msg) }
  result = spawn_process(cmd, outio, errio)
  CommandResult.new(cmd, result.exitstatus, output, server)
end

#notice(msg) ⇒ Object



51
# File 'lib/engineyard-serverside/shell.rb', line 51

def notice(msg)  logger.warn    msg end

#start_timeObject



32
33
34
# File 'lib/engineyard-serverside/shell.rb', line 32

def start_time
  @start_time ||= Time.now
end

#status(msg) ⇒ Object

a nice info outputter that prepends spermy operators for some reason.



37
38
39
40
41
42
# File 'lib/engineyard-serverside/shell.rb', line 37

def status(msg)
  if msg.respond_to?(:force_encoding)
    msg.force_encoding("UTF-8")
  end
  info msg.gsub(/^/, '~> ')
end

#substatus(msg) ⇒ Object



44
45
46
# File 'lib/engineyard-serverside/shell.rb', line 44

def substatus(msg)
  debug msg.gsub(/^/, ' ~ ')
end

#unknown(msg) ⇒ Object



54
# File 'lib/engineyard-serverside/shell.rb', line 54

def unknown(msg) logger.unknown msg end

#verbose?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/engineyard-serverside/shell.rb', line 28

def verbose?
  @verbose
end

#warning(msg) ⇒ Object



50
# File 'lib/engineyard-serverside/shell.rb', line 50

def warning(msg) logger.warn    "WARNING: #{msg}" end