123456789_123456789_123456789_123456789_123456789_

Class: Puma::Events

Relationships & Source Files
Namespace Children
Classes:
Inherits: Object
Defined in: lib/puma/events.rb

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.

Constant Summary

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(stdout, stderr) ⇒ Events

Create an Events object that prints to #stdout and #stderr.

[ GitHub ]

  
# File 'lib/puma/events.rb', line 28

def initialize(stdout, stderr)
  @formatter = DefaultFormatter.new
  @stdout = stdout
  @stderr = stderr

  @stdout.sync = true
  @stderr.sync = true

  @debug = ENV.key? 'PUMA_DEBUG'
  @error_logger = ErrorLogger.new(@stderr)

  @hooks = Hash.new { |h,k| h[k] = [] }
end

Class Method Details

.null

[ GitHub ]

  
# File 'lib/puma/events.rb', line 173

def self.null
  n = NullIO.new
  Events.new n, n
end

.stdio

[ GitHub ]

  
# File 'lib/puma/events.rb', line 169

def self.stdio
  Events.new $stdout, $stderr
end

.strings

Returns an Events object which writes its status to 2 StringIO objects.

[ GitHub ]

  
# File 'lib/puma/events.rb', line 165

def self.strings
  Events.new StringIO.new, StringIO.new
end

Instance Attribute Details

#formatter (rw)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 43

attr_accessor :formatter

#stderr (readonly)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 42

attr_reader :stdout, :stderr

#stdout (readonly)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 42

attr_reader :stdout, :stderr

Instance Method Details

#connection_error(error, req, text = "HTTP connection error")

An HTTP connection error has occurred. #error a connection exception, req the request, and text additional info

Version:

  • 5.0.0

[ GitHub ]

  
# File 'lib/puma/events.rb', line 96

def connection_error(error, req, text="HTTP connection error")
  @error_logger.info(error: error, req: req, text: text)
end

#debug(str)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 76

def debug(str)
  log("% #{str}") if @debug
end

#debug_error(error, req = nil, text = "")

Log occurred error debug dump. #error an exception object, req the request, and text additional info

Version:

  • 5.0.0

[ GitHub ]

  
# File 'lib/puma/events.rb', line 132

def debug_error(error, req=nil, text="")
  @error_logger.debug(error: error, req: req, text: text)
end

#error(str)

Write str to @stderr

[ GitHub ]

  
# File 'lib/puma/events.rb', line 82

def error(str)
  @error_logger.info(text: format("ERROR: #{str}"))
  exit 1
end

#fire(hook, *args)

Fire callbacks for the named hook

[ GitHub ]

  
# File 'lib/puma/events.rb', line 47

def fire(hook, *args)
  @hooks[hook].each { |t| t.call(*args) }
end

#fire_on_booted!

[ GitHub ]

  
# File 'lib/puma/events.rb', line 148

def fire_on_booted!
  fire(:on_booted)
end

#fire_on_restart!

[ GitHub ]

  
# File 'lib/puma/events.rb', line 152

def fire_on_restart!
  fire(:on_restart)
end

#fire_on_stopped!

[ GitHub ]

  
# File 'lib/puma/events.rb', line 156

def fire_on_stopped!
  fire(:on_stopped)
end

#format(str)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 87

def format(str)
  formatter.call(str)
end

#log(str)

Write str to @stdout

[ GitHub ]

  
# File 'lib/puma/events.rb', line 67

def log(str)
  @stdout.puts format(str) if @stdout.respond_to? :puts
rescue Errno::EPIPE
end

#on_booted(&block)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 136

def on_booted(&block)
  register(:on_booted, &block)
end

#on_restart(&block)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 140

def on_restart(&block)
  register(:on_restart, &block)
end

#on_stopped(&block)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 144

def on_stopped(&block)
  register(:on_stopped, &block)
end

#parse_error(error, req)

An HTTP parse error has occurred. #error a parsing exception, and req the request.

[ GitHub ]

  
# File 'lib/puma/events.rb', line 104

def parse_error(error, req)
  @error_logger.info(error: error, req: req, text: 'HTTP parse error, malformed request')
end

#register(hook, obj = nil, &blk)

Register a callback for a given hook

[ GitHub ]

  
# 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(error, ssl_socket)

An SSL error has occurred.

Parameters:

[ GitHub ]

  
# File 'lib/puma/events.rb', line 112

def ssl_error(error, ssl_socket)
  peeraddr = ssl_socket.peeraddr.last rescue "<unknown>"
  peercert = ssl_socket.peercert
  subject = peercert ? peercert.subject : nil
  @error_logger.info(error: error, text: "SSL error, peer: #{peeraddr}, peer cert: #{subject}")
end

#unknown_error(error, req = nil, text = "Unknown error")

An unknown error has occurred. #error an exception object, req the request, and text additional info

[ GitHub ]

  
# File 'lib/puma/events.rb', line 123

def unknown_error(error, req=nil, text="Unknown error")
  @error_logger.info(error: error, req: req, text: text)
end

#write(str)

[ GitHub ]

  
# File 'lib/puma/events.rb', line 72

def write(str)
  @stdout.write format(str)
end