Module: Subserver
- Defined in:
- lib/subserver.rb,
lib/subserver/cli.rb,
lib/subserver/util.rb,
lib/subserver/rails.rb,
lib/subserver/health.rb,
lib/subserver/pubsub.rb,
lib/subserver/logging.rb,
lib/subserver/manager.rb,
lib/subserver/version.rb,
lib/subserver/launcher.rb,
lib/subserver/listener.rb,
lib/subserver/subscriber.rb,
lib/subserver/message_logger.rb,
lib/subserver/middleware/chain.rb,
lib/subserver/exception_handler.rb,
lib/subserver/middleware/active_record.rb
Defined Under Namespace
Modules: ExceptionHandler, Logging, Middleware, Pubsub, Subscriber, Util
Classes: CLI, Health, Launcher, Listener, Manager, MessageLogger, Rails, Shutdown
Constant Summary
collapse
- NAME =
'Subserver'
- LICENSE =
'Subserver is licensed under MIT.'
- DEFAULTS =
{
project_id: nil,
credentials: nil,
queues: [],
labels: [],
require: '.',
subscriber_dir: './subscribers',
environment: nil,
timeout: 35,
error_handlers: [],
death_handlers: [],
lifecycle_events: {
startup: [],
quiet: [],
shutdown: [],
heartbeat: [],
},
reloader: proc { |&block| block.call },
}
- DEFAULT_SUBSCRIBER_OPTIONS =
{
subscription: nil,
deadline: 60,
streams: 2,
threads: {
callback: 4,
push: 2
},
inventory: 1000,
queue: 'default'
}
- VERSION =
"0.2.0"
Class Method Summary
collapse
Class Method Details
57
58
59
|
# File 'lib/subserver.rb', line 57
def self.configure
yield self
end
|
.death_handlers ⇒ Object
Death handlers are called when all retries for a job have been exhausted and the job dies. It’s the notification to your application that this job will not succeed without manual intervention.
Subserver.configure do |config|
config.death_handlers << ->(job, ex) do
end
end
118
119
120
|
# File 'lib/subserver.rb', line 118
def self.death_handlers
options[:death_handlers]
end
|
.default_middleware ⇒ Object
98
99
100
|
# File 'lib/subserver.rb', line 98
def self.default_middleware
Middleware::Chain.new
end
|
.default_subscriber_options ⇒ Object
106
107
108
|
# File 'lib/subserver.rb', line 106
def self.default_subscriber_options
defined?(@default_subscriber_options) ? @default_subscriber_options : DEFAULT_SUBSCRIBER_OPTIONS
end
|
.default_subscriber_options=(hash) ⇒ Object
102
103
104
|
# File 'lib/subserver.rb', line 102
def self.default_subscriber_options=(hash)
@default_subscriber_options = default_subscriber_options.merge(Hash[hash.map{|k, v| [k.to_s, v]}])
end
|
.dump_json(object) ⇒ Object
72
73
74
|
# File 'lib/subserver.rb', line 72
def self.dump_json(object)
JSON.generate(object)
end
|
.error_handlers ⇒ Object
Register a proc to handle any error which occurs within the Subserver process.
Subserver.configure do |config|
config.error_handlers << proc {|ex,ctx_hash| MyErrorService.notify(ex, ctx_hash) }
end
The default error handler logs errors to Subserver.logger.
129
130
131
|
# File 'lib/subserver.rb', line 129
def self.error_handlers
self.options[:error_handlers]
end
|
.health_server ⇒ Object
84
85
86
|
# File 'lib/subserver.rb', line 84
def self.health_server
@health_server ||= Subserver::Health.new
end
|
.load_config(file = nil) ⇒ Object
61
62
63
64
65
66
|
# File 'lib/subserver.rb', line 61
def self.load_config(file=nil)
opts = DEFAULTS.dup
file = Dir["config/subserver.yml*"].first if file.nil?
return opts unless file && File.exists?(file)
opts.merge(parse_config(file))
end
|
.load_json(string) ⇒ Object
68
69
70
|
# File 'lib/subserver.rb', line 68
def self.load_json(string)
JSON.parse(string)
end
|
.middleware {|@chain| ... } ⇒ Object
92
93
94
95
96
|
# File 'lib/subserver.rb', line 92
def self.middleware
@chain ||= default_middleware
yield @chain if block_given?
@chain
end
|
.on(event, &block) ⇒ Object
Register a block to run at a point in the Subserver lifecycle. :startup, :quiet or :shutdown are valid events.
Subserver.configure do |config|
config.on(:shutdown) do
puts "Goodbye cruel world!"
end
end
141
142
143
144
145
|
# File 'lib/subserver.rb', line 141
def self.on(event, &block)
raise ArgumentError, "Symbols only please: #{event}" unless event.is_a?(Symbol)
raise ArgumentError, "Invalid event name: #{event}" unless options[:lifecycle_events].key?(event)
options[:lifecycle_events][event] << block
end
|
.options ⇒ Object
49
50
51
|
# File 'lib/subserver.rb', line 49
def self.options
@options ||= load_config
end
|
.options=(opts) ⇒ Object
53
54
55
|
# File 'lib/subserver.rb', line 53
def self.options=(opts)
@options = opts
end
|