Module: Arborist::CLI::Start

Extended by:
Subcommand
Defined in:
lib/arborist/command/start.rb

Overview

Command to start a Arborist daemon

Constant Summary collapse

VALID_DAEMONS =
%w[
  manager
  monitors
  observers
]

Class Method Summary collapse

Methods included from Subcommand

display_table, error_string, exit_now!, extended, headline_string, help_now!, highlight_string, hl, prompt, skips_around, skips_post, skips_pre, success_string, unless_dryrun, visible_chars

Class Method Details

.default_profile_filename(mode, runner) ⇒ Object

Return a filename for a StackProf profile run over the given runner.



104
105
106
107
108
109
110
111
112
# File 'lib/arborist/command/start.rb', line 104

def self::default_profile_filename( mode, runner )
  basename = runner.class.name.gsub( /.*::/, '' )
  return "%s-%s-%s.%d.dump" % [
    basename,
    mode,
    Time.now.strftime('%Y%m%d%H%M%S'),
    Process.pid,
  ]
end

.parse_profile_args(arg, runner) ⇒ Object

Set up the StackProf profiler to run in the given mode.



95
96
97
98
99
100
# File 'lib/arborist/command/start.rb', line 95

def self::parse_profile_args( arg, runner )
  profile_mode, profile_filename = arg.split( ':', 2 )
  profile_filename ||= self.default_profile_filename( profile_mode, runner )

  return profile_mode, profile_filename
end

.start(runner, profile_mode = nil) ⇒ Object

Start the specified runner instance after setting up the environment for it.



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/arborist/command/start.rb', line 68

def start( runner, profile_mode=nil )
  Process.setproctitle( runner.class.name )

  if profile_mode
    self.with_profiling_enabled( profile_mode, runner ) do
      runner.run
    end
  else
    runner.run
  end
end

.with_profiling_enabled(profile_arg, runner, &block) ⇒ Object

Wrap the profiler around the specified callable.



82
83
84
85
86
87
88
89
90
91
# File 'lib/arborist/command/start.rb', line 82

def self::with_profiling_enabled( profile_arg, runner, &block )
  require 'stackprof'
  mode, outfile = self.parse_profile_args( profile_arg, runner )

  self.log.info "Profiling in %s mode, outputting to %s" % [ mode, outfile ]
  StackProf.run( mode: mode.to_sym, out: outfile, &block )
rescue LoadError => err
  self.log.debug "%p while loading the StackProf profiler: %s"
  exit_now!( "Couldn't load the profiler; you probably need to `gem install stackprof`", 254 )
end