class LogSpy::Spy

Attributes

sqs_thread[R]

Public Class Methods

new(app, sqs_url, options = {}) click to toggle source
# File lib/log_spy/spy.rb, line 9
def initialize(app, sqs_url, options = {})
  @app = app
  @sqs_url = sqs_url
  @options = options
end

Public Instance Methods

call(env) click to toggle source
# File lib/log_spy/spy.rb, line 15
def call env
  @env = env
  @start_time = Time.now.to_f

  @status, header, body = @app.call(env)
  @sqs_thread = send_sqs_async

  [ @status, header, body ]
rescue Exception => err
  @sqs_thread = send_sqs_async(err)
  raise err
end

Private Instance Methods

req() click to toggle source
# File lib/log_spy/spy.rb, line 28
def req
  Rack::Request.new @env
end
send_sqs_async(err = nil) click to toggle source
# File lib/log_spy/spy.rb, line 33
def send_sqs_async(err = nil)
  @sqs_thread = Thread.new do
    status = err ? 500 : @status
    sqs_client = Aws::SQS::Client.new(@options)
    duration = ( (Time.now.to_f - @start_time) * 1000 ).round(0)
    res = OpenStruct.new({
      :duration => duration,
      :status => status
    })
    payload = ::LogSpy::Payload.new(req, res, @start_time.to_i, err)

    sqs_client.send_message({
      queue_url: @sqs_url,
      message_body: payload.to_json
    })
  end
end