class Playtypus::Gateway

Public Class Methods

new(call_list, sender, preserve_times, response_log) click to toggle source
# File lib/playtypus/gateway.rb, line 7
def initialize(call_list, sender, preserve_times, response_log)
  @call_list = call_list.clone.freeze
  @sender = sender
  @preserve_times = preserve_times
  @response_log = response_log
end

Public Instance Methods

playback() click to toggle source
# File lib/playtypus/gateway.rb, line 14
def playback()

  if(@call_list.size == 0)
    return
  end

  @diff = Time.now.utc - @call_list.first.timestamp
  @ticks = 0
  @position = 0
  EventMachine.run do
    Signal.trap("INT")  { EventMachine.stop }
    Signal.trap("TERM") { EventMachine.stop }
    EM.add_periodic_timer(0.01) {
      current = Time.now.utc - @diff
      while(@position < @call_list.size)
        call = @call_list[@position]
        if(!(@preserve_times) || (call.timestamp <= current))
          result = @sender.send(call)
          $logger.info "#{self.class.name}: waited #{@ticks} ticks.  sent message #{call.timestamp}"
          unless @response_log.to_s.empty?
            begin
              File.open("#{@response_log}/#{@position.to_s.rjust(10, '0')}.log", 'w+') do |file|
                  file.write(JSON.pretty_generate({ 'code' => result.response.code, 'headers' => result.headers.to_hash, 'body' => result.parsed_response}))
              end
            rescue => e
              $logger.warn "failed to log response with exception: #{e.inspect}"
            end
          end
          @position += 1
          @ticks = 0
        else
          @ticks += 1
          break
        end
      end
      if(@position >= @call_list.size)
        EventMachine.stop
      end
    }
  end
end