# Worker Output module HermesMessengerOfTheGods module Output module Basic @subscriptions = [] def self.unsubscribe! @subscriptions.map{|s|ActiveSupport::Notifications.unsubscribe(s) } end def self.subscribe! unsubscribe! @subscriptions = [ ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.worker.starting') do |*_, payload| payload[:worker].say_info { "Starting Worker" } end, ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.worker.run_job') do |_, start, finish, _, payload| payload[:worker].say_debug { "Completed #{to_log_s(payload[:job])} in #{finish - start}s" } end, ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.worker.starting_job') do |*_, payload| payload[:worker].say_info { "Starting Job #{to_log_s(payload[:job])}" } end, ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.worker.success') do |*_, payload| payload[:worker].say_info { "Finished Job #{to_log_s(payload[:job])}" } end, ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.worker.failure') do |*_, payload| payload[:worker].say_error { "Error in #{to_log_s(payload[:job])}: #{payload[:error].message}" } payload[:worker].say_debug { "backtrace: #{payload[:error].backtrace}" } end, ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.worker.fatal_error') do |*_, payload| payload[:worker].say_error { "Fatal Error: #{to_log_s(payload[:job])}: #{payload[:exception].message}" } payload[:worker].say_debug { "backtrace: #{payload[:exception].backtrace}" } end, # Message Output ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.message.dispatch') do |_, _start, _finish, _, payload| payload[:message].say_info { "Dispatch complete in #{to_log_s(payload[:job])}s" } end, ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.message.dispatch_failure') do |*_, payload| payload[:message].say_debug { "Dispatch failure to #{to_log_s(payload[:job])}: #{payload[:exception].inspect}" } end, # Endpoint Output ActiveSupport::Notifications.subscribe('hermes_messenger_of_the_gods.endpoint.dispatch') do |_, start, finish, _, payload| payload[:endpoint].say_info { "Dispatch complete in #{finish - start}s #{" FAILED" if payload.has_key?(:exception)}" } end, ActiveSupport::Notifications.subscribe(/hermes_messenger_of_the_gods.endpoint.(dispatch|final)_failure/) do |name, *_, payload| payload[:endpoint].say_debug { "Dispatch #{"final " if name.include?('final_')} failure ##{payload[:try]} to #{payload[:endpoint_name]}: #{payload[:exception].inspect}" } end, ActiveSupport::Notifications.subscribe(/hermes_messenger_of_the_gods.endpoint.read_failure/) do |name, *_, payload| payload[:endpoint].say_error { "A message was received that could not be decoded: #{payload[:exception].message}" } end, ] end subscribe! def self.to_log_s(item) item.respond_to?(:to_log_s) ? item.to_log_s : item.inspect end end end end