class Hanami::Events::CloudPubsub::CLI::Commands::Run

Command to run the worker

Attributes

runner[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/hanami/events/cloud_pubsub/cli.rb, line 17
def initialize(*args)
  super
  @event_queue = Queue.new
end

Public Instance Methods

call(opts) click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 32
def call(opts)
  setup_env(opts)
  parse_opts(opts)
  load_config
  build_runner
  load_subscriptions
  setup_signal_handlers
  start_runner
  start_server
  sleep_forever
end

Private Instance Methods

build_runner() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 88
def build_runner
  require 'hanami/events/cloud_pubsub'
  Hanami::Components.resolve 'events'
  events = Hanami::Components['events']
  @runner = Runner.new(logger: logger, adapter: events.adapter)
end
finished_shutting_down?() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 114
def finished_shutting_down?
  @finished_shutting_down == true
end
load_config() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 70
def load_config
  load String(@config)
rescue LoadError
  logger.warn "No config file found (tried #{@config}), using default"
end
load_subscriptions() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 46
def load_subscriptions
  CloudPubsub.subscriptions_loader.call
end
logger() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 95
def logger
  Hanami::Events::CloudPubsub.logger
end
parse_opts(opts) click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 83
def parse_opts(opts)
  @emulator = opts[:emulator]
  @config = opts[:config]
end
print_debug_info() click to toggle source
setup_env(opts) click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 50
def setup_env(opts)
  Process.setproctitle('hanami-events-cloud_pubsub')
  ENV['PUBSUB_EMULATOR_HOST'] ||= 'localhost:8085' if opts[:emulator]
end
setup_signal_handlers() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 99
def setup_signal_handlers
  Signal.trap('TTIN') { @event_queue << method(:print_debug_info) }
  Signal.trap('INT')  { @event_queue << method(:shutdown) }
  Signal.trap('TERM') { @event_queue << method(:shutdown) }
  Signal.trap('TSTP') { @event_queue << runner.method(:shutdown) }
end
shutdown() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 106
def shutdown
  $stdout.flush
  $stderr.flush
  runner.gracefully_shutdown
ensure
  @finished_shutting_down = true
end
sleep_forever() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 63
def sleep_forever
  until finished_shutting_down?
    event = @event_queue.pop
    event.call
  end
end
start_runner() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 76
def start_runner
  logger.debug 'Running in emulator mode' if @emulator
  logger.info "Starting worker (pid: #{Process.pid})"
  GC.compact if GC.respond_to?(:compact)
  runner.start
end
start_server() click to toggle source
# File lib/hanami/events/cloud_pubsub/cli.rb, line 55
def start_server
  require 'hanami/events/cloud_pubsub/health_check_server'
  server = HealthCheckServer.new(runner, logger)
  on_shutdown = proc { @event_queue << proc { shutdown } }
  server.run_in_background(on_shutdown: on_shutdown)
  server
end