class Mallory::Proxy
Constants
- MAX_ATTEMPTS
Public Class Methods
new(ct, it, backend, response_builder, logger, certificate_authority)
click to toggle source
# File lib/mallory/proxy.rb, line 10 def initialize(ct, it, backend, response_builder, logger, certificate_authority) @connect_timeout = ct @inactivity_timeout = it @backend = backend @response_builder = response_builder @logger = logger @certificate_authority = certificate_authority @retries = 0 @response = '' end
Public Instance Methods
options()
click to toggle source
# File lib/mallory/proxy.rb, line 42 def options options = { :connect_timeout => @connect_timeout, :inactivity_timeout => @inactivity_timeout, } if not @proxy.nil? options[:proxy] = { :host => @proxy.split(':')[0], :port => @proxy.split(':')[1] } end return options end
perform(request)
click to toggle source
# File lib/mallory/proxy.rb, line 26 def perform request @method = request.method.to_s @uri = request.uri @request_headers = request.headers @body = request.body || '' resubmit end
response()
click to toggle source
# File lib/mallory/proxy.rb, line 38 def response @response end
resubmit()
click to toggle source
# File lib/mallory/proxy.rb, line 21 def resubmit @proxy = @backend.any submit end
send_data(data)
click to toggle source
# File lib/mallory/proxy.rb, line 34 def send_data data @response << data end
submit()
click to toggle source
# File lib/mallory/proxy.rb, line 56 def submit @retries+=1 if @retries > MAX_ATTEMPTS fail return end @logger.debug "Attempt #{@retries} - #{@method.upcase} #{@uri} via #{@proxy}" if [:post, :put].include?(@method) request_params = {:head => @headers, :body => @body} else request_params = {:head => @headers} end http = EventMachine::HttpRequest.new(@uri, options).send(@method, request_params) http.errback { @logger.debug "Attempt #{@retries} - Failed" resubmit } http.callback { @logger.debug "Attempt #{@retries} - Success" response = @response_builder.build(http) @logger.request response.body if response.status > 400 @logger.debug "#{response.status} > 400" resubmit else send_data "HTTP/1.1 #{response.status} #{response.description}\n" send_data response.headers send_data "\r\n\r\n" send_data response.body @logger.debug "Send content #{response.body.length} bytes" @logger.info "Success (#{Time.now-Time.now}s, #{@retries} attempts)" end self.succeed } end