Class: Jackal::Callback
- Inherits:
-
Carnivore::Callback
- Object
- Carnivore::Callback
- Jackal::Callback
- Includes:
- Utils::Config, Utils::Config, Utils::Constants, Utils::Payload, Utils::Payload
- Defined in:
- lib/jackal/callback.rb
Overview
Jackal customized callback
Instance Attribute Summary collapse
-
#formatters ⇒ Array<Formatter>
readonly
Formatters.
Instance Method Summary collapse
-
#apply_formatters!(payload) ⇒ Smash
Apply configured formatters to payload.
-
#completed(payload, message) ⇒ Object
Mark payload complete and forward.
-
#failed(payload, message, reason = 'No reason provided') ⇒ Object
Send payload to error handler.
-
#failure_wrap(message) ⇒ Object
Executes block and catches unexpected exceptions if encountered.
-
#forward(payload) ⇒ Object
Forward payload to output source.
-
#initialize(*_) ⇒ self
constructor
Create new instance.
-
#job_completed(name, payload, message) ⇒ Object
Mark job as completed.
- #process_manager ⇒ Utils::Process
-
#valid?(message) ⇒ TrueClass, FalseClass
Validity of message.
Methods included from Utils::Constants
Methods included from Utils::Config
#config, #config_path, #destination, #service_config, #service_name, #source_prefix
Methods included from Utils::Payload
Constructor Details
#initialize(*_) ⇒ self
Create new instance
20 21 22 23 24 25 26 27 |
# File 'lib/jackal/callback.rb', line 20 def initialize(*_) super if(service_config[:formatters]) @formatters = service_config[:formatters].map do |klass_name| constantize(klass_name).new end end end |
Instance Attribute Details
#formatters ⇒ Array<Formatter> (readonly)
Returns formatters.
15 16 17 |
# File 'lib/jackal/callback.rb', line 15 def formatters @formatters end |
Instance Method Details
#apply_formatters!(payload) ⇒ Smash
Apply configured formatters to payload
125 126 127 128 129 |
# File 'lib/jackal/callback.rb', line 125 def apply_formatters!(payload) formatters.each do |formatter| formatter.format(payload) end end |
#completed(payload, message) ⇒ Object
Mark payload complete and forward
85 86 87 88 89 |
# File 'lib/jackal/callback.rb', line 85 def completed(payload, ) .confirm! info "Processing of #{} complete on this callback" forward(payload) end |
#failed(payload, message, reason = 'No reason provided') ⇒ Object
Send payload to error handler
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/jackal/callback.rb', line 67 def failed(payload, , reason='No reason provided') error "Processing of #{} failed! Reason: #{reason}" .confirm! destination = "#{source_prefix}_error" source = Carnivore::Supervisor.supervisor[destination] if(source) error "Sending #{} to error handler: #{source}" source.transmit(payload) else error "No error source found for generated source path: #{destination}" info "Processing of message #{} has completed. Message now discarded." end end |
#failure_wrap(message) ⇒ Object
Executes block and catches unexpected exceptions if encountered
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/jackal/callback.rb', line 50 def failure_wrap() abort 'Failure wrap requires block for execution' unless block_given? begin payload = unpack() yield payload rescue => e error "!!! Unexpected failure encountered -> #{e.class}: #{e}" debug "#{e.class}: #{e}\n#{(e.backtrace || []).join("\n")}" failed(payload, , e.) end end |
#forward(payload) ⇒ Object
Forward payload to output source
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/jackal/callback.rb', line 94 def forward(payload) destination = "#{source_prefix}_output" source = Carnivore::Supervisor.supervisor[destination] if(source) info "Forwarding payload to output destination... (#{source})" debug "Forwarded payload: #{payload.inspect}" source.transmit(payload) else warn "No destination source found for generated source path: #{destination}" info "Processing of message has completed. Message now discarded." end end |
#job_completed(name, payload, message) ⇒ Object
Mark job as completed
112 113 114 115 116 117 118 119 |
# File 'lib/jackal/callback.rb', line 112 def job_completed(name, payload, ) info "Processing of message #{} has completed within this component #{name}" if(formatters) apply_formatters!(payload) end .confirm! forward(payload) end |
#process_manager ⇒ Utils::Process
30 31 32 33 34 35 |
# File 'lib/jackal/callback.rb', line 30 def process_manager unless(@_process) @_process = Utils::Process.new end @_process end |
#valid?(message) ⇒ TrueClass, FalseClass
Validity of message
41 42 43 44 |
# File 'lib/jackal/callback.rb', line 41 def valid?() m = unpack() block_given? ? yield(m) : true end |