Project

General

Profile

Download (2.58 KB) Statistics
| Branch: | Tag: | Revision:
#!/usr/bin/env ruby

require 'optparse'

class ArgvParser
attr_reader :options, :command

def initialize(argv, file)
@options = { rails_root: Dir.pwd }

parser = OptionParser.new do |opts|
opts.banner = banner(file)

opts.on('-h', '--help', 'Show this message') do
puts opts
exit 1
end
opts.on('-f', '--foreman-root=PATH', "Path to Foreman Rails root path. By default '#{@options[:rails_root]}'") do |path|
@options[:rails_root] = path
end
opts.on('-c', '--executors-count=COUNT', 'Number of parallel executors to spawn. Overrides EXECUTORS_COUNT environment varaible.') do |count|
@options[:executors_count] = count.to_i
end
opts.on('-m', '--memory-limit=SIZE', 'Limits the amount of memory an executor can consume. Overrides EXECUTOR_MEMORY_LIMIT environment varaible. You can use kb, mb, gb') do |size|
@options[:memory_limit] = size
end
opts.on('--executor-memory-init-delay=SECONDS', 'Start memory polling after SECONDS. Overrides EXECUTOR_MEMORY_MONITOR_DELAY environment varaible.') do |seconds|
@options[:memory_init_delay] = seconds.to_i
end
opts.on('--executor-memory-polling-interval=SECONDS', 'Check for memory useage every SECONDS sec. Overrides EXECUTOR_MEMORY_MONITOR_INTERVAL environment varaible.') do |seconds|
@options[:memory_polling_interval] = seconds.to_i
end
end

args = parser.parse!(argv)
@command = args.first || 'run'
end

def banner(file)
banner = <<~BANNER
Run Dynflow executor for Foreman tasks.

Usage: #{File.basename(file)} [options] ACTION"

ACTION can be one of:

* start - start the executor on background. It creates these files
in tmp/pid directory:

* dynflow_executor_monitor.pid - pid of monitor ensuring
the executor keeps running
* dynflow_executor.pid - pid of the executor itself
* dynflow_executor.output - stdout of the executor
* stop - stops the running executor
* restart - restarts the running executor
* run - run the executor in foreground

BANNER
banner
end
end

# run the script if it's executed explicitly
if $PROGRAM_NAME == __FILE__
parser = ArgvParser.new(ARGV, $PROGRAM_NAME)

Dir.chdir(parser.options[:rails_root]) do
app_file = File.expand_path('./config/application', parser.options[:rails_root])
require app_file

Dynflow::Rails::Daemon.new.run_background(parser.command, parser.options)
end
end
(1-1/16)