class OnesnooperServer::Datagrams::SuccessDatagram

Handles processing of datagrams with SUCESS monitoring messages. Performs ‘save’ operation on the backend.

Public Instance Methods

run(deferred_callback) click to toggle source
# File lib/onesnooper_server/datagrams/success_datagram.rb, line 5
def run(deferred_callback)
  ::EventMachine.defer do
    if parse_payload! && store_all!
      deferred_callback.succeed "Successful monitoring result was " \
                                "recorded in #{store_info.join(', ')}"
    else
      deferred_callback.fail "Processing partially or completely failed, see logs"
    end
  end
end

Private Instance Methods

parse_payload!() click to toggle source

Decodes and parses datagram payload into a hash-like structure. Modification is done in-place.

# File lib/onesnooper_server/datagrams/success_datagram.rb, line 21
def parse_payload!
  @params[:payload] = ::OnesnooperServer::PayloadParser.parse(@params[:payload])
end
store_all!() click to toggle source

Stores decoded and parsed payload in all enabled data stores. Errors are logged but not otherwise reported.

@return [Boolean] success in all stores

# File lib/onesnooper_server/datagrams/success_datagram.rb, line 30
def store_all!
  if @params[:payload].blank?
    ::OnesnooperServer::Log.warn "[#{self.class.name}] Skipping empty payload " \
                                 "from ONE ID:#{@params[:host_id]}"
    return false
  end

  all_good = true
  @params[:stores].each do |store|
    begin
      ::OnesnooperServer::Log.debug "[#{self.class.name}] Saving data in #{store.class.name}"
      store.save!(DateTime.now, @params[:payload])
    rescue => ex
      ::OnesnooperServer::Log.error "[#{self.class.name}] Error while saving " \
                                    "in #{store.class.name}: #{ex.message}"
      all_good = false
    end
  end

  all_good
end
store_info() click to toggle source

Returns human-readable information about enabled backend stores.

@return [Array] list of textual store information

# File lib/onesnooper_server/datagrams/success_datagram.rb, line 56
def store_info
  @params[:stores].collect { |store| store.class.name }
end