Sha256: b1877d3f150d7f057409f1cf6cd2e63397af0e51076945b38c2f85dd4fd389ee

Contents?: true

Size: 1.71 KB

Versions: 8

Compression:

Stored size: 1.71 KB

Contents

module NFAgent
  class Submitter
    include EM::Deferrable
    attr_accessor :host

    def initialize(payload)
      @payload = payload
    end

    def perform
      @payload.increment_attempt!
      fail(@payload) unless [ 1, 2, 4, 8, 16 ].include?(@payload.attempt)
      Log.info "Submitting Payload: #{@payload.checksum}, Attempt #{@payload.attempt}, (#{@payload.size} bytes, #{@payload.line_count} lines)"
      @payload.lock do
        response = Client.post(:collector, @payload.to_hash)
        if response.ok?
          succeed(@payload)
        else
          Log.error "Submission Failed: #{response.message}"
          fail(@payload)
        end
      end
    end

    # Actually runs the submitter
    # every 'seconds' seconds after
    # the last one completes
    def self.run_every(seconds)
      callback = proc { run_every(seconds) }
      EM::add_timer(seconds) do
        EM::defer(nil, callback) do
          resubmit_failed_dumps
        end
      end
    end

    # TODO: Change attempt logic
    # Add the next timestamp for when submission should be attenpted again to the end of the filename 
    def self.resubmit_failed_dumps
      submitter = Submitter.new(Config.client_key)
      dump_dir = Dir.new(Config.dump_dir)
      dump_dir.entries.select { |e| not e =~ /^\./ }.each do |entry|
        Log.info "Resubmitting #{entry}"
        payload = Payload.read_from_file(entry)
        submitter = self.new(payload)
        submitter.callback { |payload|
          payload.destroy!
        }
        submitter.errback { |payload|
          if payload.attempt > 16
            payload.destroy!
          else
            payload.try_again_later
          end
        }
        submitter.perform
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
nfagent-0.9.31 lib/nfagent/submitter.rb
nfagent-0.9.27 lib/nfagent/submitter.rb
nfagent-0.9.26 lib/nfagent/submitter.rb
nfagent-0.9.20 lib/nfagent/submitter.rb
nfagent-0.9.19 lib/nfagent/submitter.rb
nfagent-0.9.17 lib/nfagent/submitter.rb
nfagent-0.9.15 lib/nfagent/submitter.rb
nfagent-0.9.13 lib/nfagent/submitter.rb