class Protobuf::Rpc::Middleware::Logger::Instrumenter

TODO: Replace this with ActiveSupport::Notifications and log subscribers TODO: Consider adopting Rails-style logging so we can track serialization time as well as ActiveRecord time, etc.:

Started GET "/" for 127.0.0.1 at 2014-02-12 09:40:29 -0700
Processing by ReleasesController#index as HTML
  Rendered releases/_release.html.erb (0.0ms)
  Rendered releases/_release.html.erb (0.0ms)
  Rendered releases/_release.html.erb (0.0ms)
  Rendered releases/_release.html.erb (0.0ms)
  Rendered releases/index.html.erb within layouts/application (11.0ms)
Completed 200 OK in 142ms (Views: 117.6ms | ActiveRecord: 1.7ms)

Attributes

env[R]

Public Instance Methods

flush(env) click to toggle source
# File lib/protobuf/rpc/middleware/logger.rb, line 44
def flush(env)
  ::Protobuf::Logging.logger.info { to_s(env) }
end
start() click to toggle source
# File lib/protobuf/rpc/middleware/logger.rb, line 48
def start
  @start_time = ::Time.now.utc
end
stop() click to toggle source
# File lib/protobuf/rpc/middleware/logger.rb, line 52
def stop
  @end_time = ::Time.now.utc
end
to_s(env) click to toggle source
# File lib/protobuf/rpc/middleware/logger.rb, line 56
def to_s(env)
  @env = env

  [
    "[SRV]",
    env.client_host,
    env.worker_id,
    rpc,
    sizes,
    elapsed_time,
    @end_time.try(:iso8601),
  ].compact.join(' - ')
end

Private Instance Methods

elapsed_time() click to toggle source
# File lib/protobuf/rpc/middleware/logger.rb, line 72
def elapsed_time
  (@start_time && @end_time ? "#{(@end_time - @start_time).round(4)}s" : nil)
end
rpc() click to toggle source
# File lib/protobuf/rpc/middleware/logger.rb, line 76
def rpc
  env.service_name && env.method_name ? "#{env.service_name}##{env.method_name}" : nil
end
sizes() click to toggle source
# File lib/protobuf/rpc/middleware/logger.rb, line 80
def sizes
  if env.encoded_response?
    "#{env.encoded_request.size}B/#{env.encoded_response.size}B"
  else
    "#{env.encoded_request.size}B/-"
  end
end