Class: Puma::Events
Overview
The default implement of an event sink object used by Server for when certain kinds of events occur in the life of the server.
The methods available are the events that the Server fires.
Defined Under Namespace
Classes: DefaultFormatter, PidFormatter
Constant Summary collapse
- DEFAULT =
new(STDOUT, STDERR)
Constants included from Const
Const::CGI_VER, Const::CHUNKED, Const::CHUNK_SIZE, Const::CLOSE, Const::CLOSE_CHUNKED, Const::CODE_NAME, Const::COLON, Const::CONNECTION_CLOSE, Const::CONNECTION_KEEP_ALIVE, Const::CONTENT_LENGTH, Const::CONTENT_LENGTH2, Const::CONTENT_LENGTH_S, Const::CONTENT_TYPE, Const::CONTINUE, Const::DATE, Const::ERROR_400_RESPONSE, Const::ERROR_404_RESPONSE, Const::ERROR_408_RESPONSE, Const::ERROR_500_RESPONSE, Const::ERROR_503_RESPONSE, Const::ETAG, Const::ETAG_FORMAT, Const::FAST_TRACK_KA_TIMEOUT, Const::FIRST_DATA_TIMEOUT, Const::GATEWAY_INTERFACE, Const::GET, Const::HALT_COMMAND, Const::HEAD, Const::HIJACK, Const::HIJACK_IO, Const::HIJACK_P, Const::HOST, Const::HTTP, Const::HTTPS, Const::HTTPS_KEY, Const::HTTP_10, Const::HTTP_10_200, Const::HTTP_11, Const::HTTP_11_100, Const::HTTP_11_200, Const::HTTP_CONNECTION, Const::HTTP_EXPECT, Const::HTTP_HOST, Const::HTTP_IF_MODIFIED_SINCE, Const::HTTP_IF_NONE_MATCH, Const::HTTP_VERSION, Const::HTTP_X_FORWARDED_FOR, Const::KEEP_ALIVE, Const::LAST_MODIFIED, Const::LINE_END, Const::LOCALHOST, Const::LOCALHOST_ADDR, Const::LOCALHOST_IP, Const::MAX_BODY, Const::MAX_HEADER, Const::NEWLINE, Const::PATH_INFO, Const::PERSISTENT_TIMEOUT, Const::PORT_443, Const::PORT_80, Const::PUMA_CONFIG, Const::PUMA_PEERCERT, Const::PUMA_SERVER_STRING, Const::PUMA_SOCKET, Const::PUMA_TMP_BASE, Const::PUMA_VERSION, Const::QUERY_STRING, Const::RACK_AFTER_REPLY, Const::RACK_INPUT, Const::RACK_URL_SCHEME, Const::REDIRECT, Const::REMOTE_ADDR, Const::REQUEST_METHOD, Const::REQUEST_PATH, Const::REQUEST_URI, Const::RESTART_COMMAND, Const::SCRIPT_NAME, Const::SERVER_NAME, Const::SERVER_PORT, Const::SERVER_PROTOCOL, Const::SERVER_SOFTWARE, Const::SHUTDOWN_GRACE_TIME, Const::SLASH, Const::STATUS_FORMAT, Const::STOP_COMMAND, Const::TRANSFER_ENCODING, Const::TRANSFER_ENCODING2, Const::TRANSFER_ENCODING_CHUNKED, Const::WRITE_TIMEOUT
Instance Attribute Summary collapse
-
#formatter ⇒ Object
Returns the value of attribute formatter.
-
#stderr ⇒ Object
readonly
Returns the value of attribute stderr.
-
#stdout ⇒ Object
readonly
Returns the value of attribute stdout.
Class Method Summary collapse
- .null ⇒ Object
- .stdio ⇒ Object
-
.strings ⇒ Object
Returns an Events object which writes its status to 2 StringIO objects.
Instance Method Summary collapse
- #debug(str) ⇒ Object
-
#error(str) ⇒ Object
Write
str
to @stderr. -
#fire(hook, *args) ⇒ Object
Fire callbacks for the named hook.
- #fire_on_booted! ⇒ Object
- #format(str) ⇒ Object
-
#initialize(stdout, stderr) ⇒ Events
constructor
Create an Events object that prints to
stdout
andstderr
. -
#log(str) ⇒ Object
Write
str
to @stdout. - #on_booted(&b) ⇒ Object
-
#parse_error(server, env, error) ⇒ Object
An HTTP parse error has occurred.
-
#register(hook, obj = nil, &blk) ⇒ Object
Register a callbock for a given hook.
-
#ssl_error(server, peeraddr, peercert, error) ⇒ Object
An SSL error has occurred.
-
#unknown_error(server, error, kind = "Unknown", env = nil) ⇒ Object
An unknown error has occurred.
- #write(str) ⇒ Object
Constructor Details
#initialize(stdout, stderr) ⇒ Events
Create an Events object that prints to stdout
and stderr
.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/puma/events.rb', line 27 def initialize(stdout, stderr) @formatter = DefaultFormatter.new @stdout = stdout @stderr = stderr @stdout.sync = true @stderr.sync = true @debug = ENV.key? 'PUMA_DEBUG' @on_booted = [] @hooks = Hash.new { |h,k| h[k] = [] } end |
Instance Attribute Details
#formatter ⇒ Object
Returns the value of attribute formatter.
43 44 45 |
# File 'lib/puma/events.rb', line 43 def formatter @formatter end |
#stderr ⇒ Object (readonly)
Returns the value of attribute stderr.
42 43 44 |
# File 'lib/puma/events.rb', line 42 def stderr @stderr end |
#stdout ⇒ Object (readonly)
Returns the value of attribute stdout.
42 43 44 |
# File 'lib/puma/events.rb', line 42 def stdout @stdout end |
Class Method Details
.null ⇒ Object
148 149 150 151 |
# File 'lib/puma/events.rb', line 148 def self.null n = NullIO.new Events.new n, n end |
Instance Method Details
#debug(str) ⇒ Object
75 76 77 |
# File 'lib/puma/events.rb', line 75 def debug(str) log("% #{str}") if @debug end |
#error(str) ⇒ Object
Write str
to @stderr
81 82 83 84 |
# File 'lib/puma/events.rb', line 81 def error(str) @stderr.puts format("ERROR: #{str}") exit 1 end |
#fire(hook, *args) ⇒ Object
Fire callbacks for the named hook
47 48 49 |
# File 'lib/puma/events.rb', line 47 def fire(hook, *args) @hooks[hook].each { |t| t.call(*args) } end |
#fire_on_booted! ⇒ Object
131 132 133 |
# File 'lib/puma/events.rb', line 131 def fire_on_booted! @on_booted.each { |b| b.call } end |
#format(str) ⇒ Object
86 87 88 |
# File 'lib/puma/events.rb', line 86 def format(str) formatter.call(str) end |
#log(str) ⇒ Object
Write str
to @stdout
67 68 69 |
# File 'lib/puma/events.rb', line 67 def log(str) @stdout.puts format(str) end |
#on_booted(&b) ⇒ Object
127 128 129 |
# File 'lib/puma/events.rb', line 127 def on_booted(&b) @on_booted << b end |
#parse_error(server, env, error) ⇒ Object
An HTTP parse error has occurred. server
is the Server object, env
the request, and error
a parsing exception.
94 95 96 97 |
# File 'lib/puma/events.rb', line 94 def parse_error(server, env, error) @stderr.puts "#{Time.now}: HTTP parse error, malformed request (#{env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR]}): #{error.inspect}" @stderr.puts "#{Time.now}: ENV: #{env.inspect}\n---\n" end |
#register(hook, obj = nil, &blk) ⇒ Object
Register a callbock for a given hook
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/puma/events.rb', line 53 def register(hook, obj=nil, &blk) if obj and blk raise "Specify either an object or a block, not both" end h = obj || blk @hooks[hook] << h h end |
#ssl_error(server, peeraddr, peercert, error) ⇒ Object
An SSL error has occurred. server
is the Server object, peeraddr
peer address, peercert
any peer certificate (if present), and error
an exception object.
103 104 105 106 |
# File 'lib/puma/events.rb', line 103 def ssl_error(server, peeraddr, peercert, error) subject = peercert ? peercert.subject : nil @stderr.puts "#{Time.now}: SSL error, peer: #{peeraddr}, peer cert: #{subject}, #{error.inspect}" end |
#unknown_error(server, error, kind = "Unknown", env = nil) ⇒ Object
An unknown error has occurred. server
is the Server object, error
an exception object, kind
some additional info, and env
the request.
112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/puma/events.rb', line 112 def unknown_error(server, error, kind="Unknown", env=nil) if error.respond_to? :render error.render "#{Time.now}: #{kind} error", @stderr else if env string_block = [ "#{Time.now}: #{kind} error handling request { #{env['REQUEST_METHOD']} #{env['PATH_INFO']} }" ] string_block << error.inspect else string_block = [ "#{Time.now}: #{kind} error: #{error.inspect}" ] end string_block << error.backtrace @stderr.puts string_block.join("\n") end end |
#write(str) ⇒ Object
71 72 73 |
# File 'lib/puma/events.rb', line 71 def write(str) @stdout.write format(str) end |