class Sanford::ConnectionHandler
Constants
- ProcessedService
Attributes
connection[R]
logger[R]
server_data[R]
Public Class Methods
new(server_data, connection)
click to toggle source
# File lib/sanford/connection_handler.rb, line 14 def initialize(server_data, connection) @server_data = server_data @connection = connection @logger = Sanford::Logger.new( @server_data.logger, @server_data.verbose_logging ) end
Public Instance Methods
run()
click to toggle source
# File lib/sanford/connection_handler.rb, line 23 def run processed_service = nil self.log_received benchmark = Benchmark.measure do processed_service = self.run! end processed_service.time_taken = RoundedTime.new(benchmark.real) self.log_complete(processed_service) processed_service end
Protected Instance Methods
build_summary_line(processed_service)
click to toggle source
# File lib/sanford/connection_handler.rb, line 122 def build_summary_line(processed_service) summary_line_args = { 'time' => processed_service.time_taken, 'handler' => processed_service.handler_class } if (request = processed_service.request) summary_line_args['service'] = request.name summary_line_args['params'] = request.params.to_hash end if (response = processed_service.response) summary_line_args['status'] = response.code end if (exception = processed_service.exception) summary_line_args['error'] = "#{exception.class}: #{exception.message}" end SummaryLine.new(summary_line_args) end
handle_exception(exception, server_data, processed_service)
click to toggle source
# File lib/sanford/connection_handler.rb, line 77 def handle_exception(exception, server_data, processed_service) error_handler = Sanford::ErrorHandler.new(exception, { :server_data => server_data, :request => processed_service.request, :handler_class => processed_service.handler_class, :response => processed_service.response }) processed_service.response = error_handler.run processed_service.exception = error_handler.exception self.log_exception(processed_service.exception) processed_service end
log_complete(processed_service)
click to toggle source
# File lib/sanford/connection_handler.rb, line 103 def log_complete(processed_service) log_verbose "===== Completed in #{processed_service.time_taken}ms " \ "#{processed_service.response.status} =====" log_summary build_summary_line(processed_service) end
log_exception(exception)
click to toggle source
# File lib/sanford/connection_handler.rb, line 109 def log_exception(exception) log_verbose("#{exception.class}: #{exception.message}", :error) (exception.backtrace || []).each{ |l| log_verbose(l, :error) } end
log_handler_class(handler_class)
click to toggle source
# File lib/sanford/connection_handler.rb, line 99 def log_handler_class(handler_class) log_verbose " Handler: #{handler_class}" end
log_received()
click to toggle source
# File lib/sanford/connection_handler.rb, line 90 def log_received log_verbose "===== Received request =====" end
log_request(request)
click to toggle source
# File lib/sanford/connection_handler.rb, line 94 def log_request(request) log_verbose " Service: #{request.name.inspect}" log_verbose " Params: #{request.params.inspect}" end
log_summary(message, level = :info)
click to toggle source
# File lib/sanford/connection_handler.rb, line 118 def log_summary(message, level = :info) self.logger.summary.send(level, "[Sanford] #{message}") end
log_verbose(message, level = :info)
click to toggle source
# File lib/sanford/connection_handler.rb, line 114 def log_verbose(message, level = :info) self.logger.verbose.send(level, "[Sanford] #{message}") end
run!()
click to toggle source
# File lib/sanford/connection_handler.rb, line 36 def run! processed_service = ProcessedService.new begin request = Sanford::Protocol::Request.parse(@connection.read_data) self.log_request(request) processed_service.request = request route = @server_data.route_for(request.name) self.log_handler_class(route.handler_class) processed_service.handler_class = route.handler_class response = route.run(request, @server_data) processed_service.response = response rescue DatWorkerPool::ShutdownError => exception error = ShutdownError.new(exception.message) error.set_backtrace(exception.backtrace) self.handle_exception(error, @server_data, processed_service) raise exception rescue *Sanford::ErrorHandler::STANDARD_ERROR_CLASSES => exception self.handle_exception(exception, @server_data, processed_service) ensure self.write_response(processed_service) end processed_service end
write_response(processed_service)
click to toggle source
# File lib/sanford/connection_handler.rb, line 62 def write_response(processed_service) begin @connection.write_data processed_service.response.to_hash rescue *Sanford::ErrorHandler::STANDARD_ERROR_CLASSES => exception processed_service = self.handle_exception( exception, @server_data, processed_service ) @connection.write_data processed_service.response.to_hash end @connection.close_write processed_service end