class Shinq::CLI

Public Class Methods

new(args=ARGV) click to toggle source
# File lib/shinq/cli.rb, line 15
def initialize(args=ARGV)
  setup_option(args)
  bootstrap
  initialize_shinq
end

Public Instance Methods

bootstrap() click to toggle source
# File lib/shinq/cli.rb, line 94
def bootstrap
  target = options.require
  Shinq.logger = Shinq::Logger.logger

  if File.directory?(target)
    require 'rails'
    require File.expand_path("#{target}/config/application.rb")

    require 'shinq/rails'
    require File.expand_path("#{target}/config/environment.rb")
  else
    require target
  end
end
initialize_shinq() click to toggle source
# File lib/shinq/cli.rb, line 109
def initialize_shinq
  Shinq::Client.fetch_column_names(table_name: Shinq.configuration.worker_name.pluralize)
  Shinq.configuration.worker_class # check if worker_class is constantizable before running ServerEngine
end
options() click to toggle source
# File lib/shinq/cli.rb, line 90
def options
  Shinq.configuration
end
parse_options(args) click to toggle source
# File lib/shinq/cli.rb, line 27
def parse_options(args)
  opts = {}
  parser = OptionParser.new do |opt|
    opt.on('-d', '--daemon', 'Daemonize process') do |v|
      opts[:daemonize] = v
    end

    opt.on('-w', '--worker VALUE', 'Name of worker class') do |v|
      opts[:worker_name] = v
    end

    opt.on('-p', '--process VALUE', 'Number of workers') do |v|
      opts[:process] = v.to_i
    end

    opt.on('--graceful-kill-timeout VALUE', 'Seconds to SIGQUIT workers even during performing jobs') do |v|
      opts[:graceful_kill_timeout] = v.to_i
    end

    opt.on('--queue-timeout VALUE', 'Waiting queue time(sec). use function of queue_wait(Q4M)') do |v|
      opts[:queue_timeout] = v.to_i
    end

    opt.on('--db-config VALUE', 'Specify database configuration file') do |v|
      raise OptionParseError, "#{v} does not exist" unless File.exist?(v)
      opts[:db_config] = YAML.load_file(v)
    end

    opt.on('--queue-database VALUE', 'Name of queue database') do |v|
      raise OptionParseError, "#{v}'s settings does not exist" unless opts[:db_config][v]
      opts[:queue_db] = v
    end

    opt.on('-r', '--require VALUE', 'Add require path') do |v|
      opts[:require] = v
    end

    opt.on('-l', '--max-lifecycle VALUE', 'Refork process when loopnumber is over specify number') do |v|
      opts[:lifecycle] = v.to_i
    end

    opt.on('-s', '--statistics VALUE', 'Display queue statistics interval time(sec)') do |v|
      opts[:statistics] = v.to_i
    end

    opt.on('--[no-]abort-on-error', 'Abort ') do |v|
      opts[:abort_on_error] = v
    end

    opt.on('--sleep-sec-on-error N', Integer, 'Allow worker to sleep(sec) after exception') do |v|
      opts[:sleep_sec_on_error] = v
    end

    opt.on('-v', '--version', 'Print version') do |v|
      puts "Shinq #{Shinq::VERSION}"
      exit(0)
    end
  end

  parser.parse!(args)
  opts
end
run() click to toggle source
# File lib/shinq/cli.rb, line 114
def run
  klass = !options.statistics.nil? && options.statistics ? Shinq::Statistics : Shinq::Launcher

  se = ServerEngine.create(nil, klass, {
    daemonize: options.daemonize,
    worker_type: 'process',
    pid_file: 'shinq.pid',
    workers: options.process,
    worker_graceful_kill_timeout: options.graceful_kill_timeout,
    logger: options.daemonize ? Shinq.logger : nil,
  })

  se.run
end
setup_option(args) click to toggle source
# File lib/shinq/cli.rb, line 21
def setup_option(args)
  opts = parse_options(args)

  Shinq.configuration = Shinq::Configuration.new(opts)
end