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, InvalidTagConfiguration, 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'
  status_tags = { status: status }
  tracker.increment "rack.request.status", tags: status_tags, inherit_tags: true
  tracker.timing "rack.request.status.time", duration, tags: status_tags, inherit_tags: true
EOS
RECORD_RACK_METHOD_BODY =
<<-'EOS'
  method_tags = { method: http_method.downcase }
  tracker.increment "rack.request.method", tags: method_tags, inherit_tags: true
  tracker.timing "rack.request.method.time", duration, tags: method_tags, inherit_tags: true
EOS
VERSION =
"2.0.5"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Rack.



60
61
62
63
64
65
66
67
68
69
# File 'lib/librato/rack.rb', line 60

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.



58
59
60
# File 'lib/librato/rack.rb', line 58

def config
  @config
end

#trackerObject (readonly)

Returns the value of attribute tracker.



58
59
60
# File 'lib/librato/rack.rb', line 58

def tracker
  @tracker
end

Instance Method Details

#call(env) ⇒ Object



71
72
73
74
75
76
77
78
# File 'lib/librato/rack.rb', line 71

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