Class: Librato::Rack

Inherits:
Object
  • Object
show all
Defined in:
lib/librato/rack.rb,
lib/librato/rack/errors.rb,
lib/librato/rack/logger.rb,
lib/librato/rack/worker.rb,
lib/librato/rack/tracker.rb,
lib/librato/rack/version.rb,
lib/librato/rack/configuration.rb,
lib/librato/rack/validating_queue.rb,
lib/librato/rack/configuration/suites.rb

Overview

Middleware for rack applications. Installs tracking hearbeat for metric submission and tracks performance metrics.

Examples:

A basic rack app

require 'rack'
require 'librato-rack'

app = Rack::Builder.app do
  use Librato::Rack
  run lambda { |env| [200, {"Content-Type" => 'text/html'}, ["Hello!"]] }
end

Using a custom config object

config = Librato::Rack::Configuration.new
config.user = '[email protected]'
config.token = 'mytoken'
…more configuration

use Librato::Rack, :config => config
run MyApp

Defined Under Namespace

Classes: Configuration, InvalidLogLevel, InvalidSuiteConfiguration, Logger, Tracker, ValidatingQueue, Worker

Constant Summary collapse

RECORD_RACK_BODY =
<<-'EOS'
  group.increment 'total'
  group.timing    'time', duration, percentile: 95
  group.increment 'slow' if duration > 200.0
EOS
RECORD_RACK_STATUS_BODY =
<<-'EOS'
  group.group 'status' do |s|
    s.increment status
    s.increment "#{status.to_s[0]}xx"

    s.timing "#{status}.time", duration
    s.timing "#{status.to_s[0]}xx.time", duration
  end
EOS
RECORD_RACK_METHOD_BODY =
<<-'EOS'
  group.group 'method' do |m|
    http_method.downcase!
    m.increment http_method
    m.timing "#{http_method}.time", duration
  end
EOS
VERSION =
"1.1.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Rack

Returns a new instance of Rack.



66
67
68
69
70
71
72
73
74
75
# File 'lib/librato/rack.rb', line 66

def initialize(app, options={})
  @app = app
  @config = options.fetch(:config, Configuration.new)
  @tracker = @config.tracker || Tracker.new(@config)
  Librato.register_tracker(@tracker) # create global reference

  build_record_request_metrics_method
  build_record_header_metrics_method
  build_record_exception_method
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



64
65
66
# File 'lib/librato/rack.rb', line 64

def config
  @config
end

#trackerObject (readonly)

Returns the value of attribute tracker.



64
65
66
# File 'lib/librato/rack.rb', line 64

def tracker
  @tracker
end

Instance Method Details

#call(env) ⇒ Object



77
78
79
80
81
82
83
84
# File 'lib/librato/rack.rb', line 77

def call(env)
  check_log_output(env) unless @log_target
  @tracker.check_worker
  record_header_metrics(env)
  response, duration = process_request(env)
  record_request_metrics(response.first, env["REQUEST_METHOD"], duration)
  response
end