Method: Puppet::Network::HTTP::Rack#call

Defined in:
lib/vendor/puppet/network/http/rack.rb

#call(env) ⇒ Object

The real rack application (which needs to respond to call). The work we need to do, roughly is:

  • Read request (from env) and prepare a response

  • Route the request to the correct handler

  • Return the response (in rack-format) to our caller.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/vendor/puppet/network/http/rack.rb', line 37

def call(env)
  request = Rack::Request.new(env)
  response = Rack::Response.new
  Puppet.debug 'Handling request: %s %s' % [request.request_method, request.fullpath]

  # if we shall serve XMLRPC, have /RPC2 go to the xmlrpc handler
  if @xmlrpc_http_handler and @xmlrpc_path == request.path_info[0, @xmlrpc_path.size]
    handler = @xmlrpc_http_handler
  else
    # everything else is handled by the new REST handler
    handler = @rest_http_handler
  end

  begin
    handler.process(request, response)
  rescue => detail
    # Send a Status 500 Error on unhandled exceptions.
    response.status = 500
    response['Content-Type'] = 'text/plain'
    response.write 'Internal Server Error: "%s"' % detail.message
    # log what happened
    Puppet.err "Puppet Server (Rack): Internal Server Error: Unhandled Exception: \"%s\"" % detail.message
    Puppet.err "Backtrace:"
    detail.backtrace.each { |line| Puppet.err " > #{line}" }
  end
  response.finish
end