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::CONTINUE, Const::EARLY_HINTS, Const::ERROR_RESPONSE, Const::FAST_TRACK_KA_TIMEOUT, Const::FIRST_DATA_TIMEOUT, Const::GATEWAY_INTERFACE, Const::HALT_COMMAND, Const::HEAD, Const::HIJACK, Const::HIJACK_IO, Const::HIJACK_P, Const::HTTP, Const::HTTPS, Const::HTTPS_KEY, 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_INJECTION_REGEX, Const::HTTP_VERSION, Const::HTTP_X_FORWARDED_FOR, Const::HTTP_X_FORWARDED_PROTO, Const::HTTP_X_FORWARDED_SCHEME, Const::HTTP_X_FORWARDED_SSL, Const::KEEP_ALIVE, Const::LINE_END, Const::LOCALHOST, Const::LOCALHOST_ADDR, Const::LOCALHOST_IP, Const::MAX_BODY, Const::MAX_FAST_INLINE, 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::REMOTE_ADDR, Const::REQUEST_METHOD, Const::REQUEST_PATH, Const::REQUEST_URI, Const::RESTART_COMMAND, Const::SERVER_NAME, Const::SERVER_PORT, Const::SERVER_PROTOCOL, Const::SERVER_SOFTWARE, Const::STOP_COMMAND, Const::TRANSFER_ENCODING, Const::TRANSFER_ENCODING2, Const::TRANSFER_ENCODING_CHUNKED, Const::WORKER_CHECK_INTERVAL, 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
strto @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
stdoutandstderr. -
#log(str) ⇒ Object
Write
strto @stdout. - #on_booted(&block) ⇒ Object
-
#parse_error(server, env, error) ⇒ Object
An HTTP parse error has occurred.
-
#register(hook, obj = nil, &blk) ⇒ Object
Register a callback 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.
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/puma/events.rb', line 30 def initialize(stdout, stderr) @formatter = DefaultFormatter.new @stdout = stdout @stderr = stderr @stdout.sync = true @stderr.sync = true @debug = ENV.key? 'PUMA_DEBUG' @hooks = Hash.new { |h,k| h[k] = [] } end |
Instance Attribute Details
#formatter ⇒ Object
Returns the value of attribute formatter.
44 45 46 |
# File 'lib/puma/events.rb', line 44 def formatter @formatter end |
#stderr ⇒ Object (readonly)
Returns the value of attribute stderr.
43 44 45 |
# File 'lib/puma/events.rb', line 43 def stderr @stderr end |
#stdout ⇒ Object (readonly)
Returns the value of attribute stdout.
43 44 45 |
# File 'lib/puma/events.rb', line 43 def stdout @stdout end |
Class Method Details
.null ⇒ Object
151 152 153 154 |
# File 'lib/puma/events.rb', line 151 def self.null n = NullIO.new Events.new n, n end |
.stdio ⇒ Object
147 148 149 |
# File 'lib/puma/events.rb', line 147 def self.stdio Events.new $stdout, $stderr end |
.strings ⇒ Object
Returns an Events object which writes its status to 2 StringIO objects.
143 144 145 |
# File 'lib/puma/events.rb', line 143 def self.strings Events.new StringIO.new, StringIO.new end |
Instance Method Details
#debug(str) ⇒ Object
76 77 78 |
# File 'lib/puma/events.rb', line 76 def debug(str) log("% #{str}") if @debug end |
#error(str) ⇒ Object
Write str to @stderr
82 83 84 85 |
# File 'lib/puma/events.rb', line 82 def error(str) @stderr.puts format("ERROR: #{str}") exit 1 end |
#fire(hook, *args) ⇒ Object
Fire callbacks for the named hook
48 49 50 |
# File 'lib/puma/events.rb', line 48 def fire(hook, *args) @hooks[hook].each { |t| t.call(*args) } end |
#fire_on_booted! ⇒ Object
134 135 136 |
# File 'lib/puma/events.rb', line 134 def fire_on_booted! fire(:on_booted) end |
#format(str) ⇒ Object
87 88 89 |
# File 'lib/puma/events.rb', line 87 def format(str) formatter.call(str) end |
#log(str) ⇒ Object
Write str to @stdout
68 69 70 |
# File 'lib/puma/events.rb', line 68 def log(str) @stdout.puts format(str) end |
#on_booted(&block) ⇒ Object
130 131 132 |
# File 'lib/puma/events.rb', line 130 def on_booted(&block) register(:on_booted, &block) 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.
95 96 97 98 99 100 |
# File 'lib/puma/events.rb', line 95 def parse_error(server, env, error) @stderr.puts "#{Time.now}: HTTP parse error, malformed request " \ "(#{env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR]}#{env[REQUEST_PATH]}): " \ "#{error.inspect}" \ "\n---\n" end |
#register(hook, obj = nil, &blk) ⇒ Object
Register a callback for a given hook
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/puma/events.rb', line 54 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.
106 107 108 109 |
# File 'lib/puma/events.rb', line 106 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.
115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/puma/events.rb', line 115 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
72 73 74 |
# File 'lib/puma/events.rb', line 72 def write(str) @stdout.write format(str) end |