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
# File lib/hanami/events/cloud_pubsub/cli.rb, line 118 def print_debug_info warn(runner.debug_info) end
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