Class: Rack::Honeycomb::Middleware
- Inherits:
-
Object
- Object
- Rack::Honeycomb::Middleware
- Defined in:
- lib/rack/honeycomb/middleware.rb
Constant Summary collapse
- ENV_REGEX =
/^#{ Regexp.escape ENV_PREFIX }/
- USER_AGENT_SUFFIX =
"rack-honeycomb/#{VERSION}"
- EVENT_TYPE =
'http_server'.freeze
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, options = {}) ⇒ Middleware
constructor
A new instance of Middleware.
Constructor Details
#initialize(app, options = {}) ⇒ Middleware
Returns a new instance of Middleware.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rack/honeycomb/middleware.rb', line 29 def initialize(app, = {}) @app, @options = app, @logger = .delete(:logger) @logger ||= ::Honeycomb.logger if defined?(::Honeycomb.logger) honeycomb = if client = .delete(:client) debug "initialized with #{client.class.name} via :client option" client elsif defined?(::Honeycomb.client) debug "initialized with #{::Honeycomb.client.class.name} from honeycomb-beeline" ::Honeycomb.client else debug "initializing new Libhoney::Client" Libhoney::Client.new(.merge(user_agent_addition: USER_AGENT_SUFFIX)) end @builder = honeycomb.builder. add( 'meta.package' => 'rack', 'meta.package_version' => RACK_VERSION, 'type' => EVENT_TYPE, 'meta.local_hostname' => Socket.gethostname, ) @service_name = .delete(:service_name) || :rack end |
Instance Method Details
#call(env) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/rack/honeycomb/middleware.rb', line 56 def call(env) ev = @builder.event add_request_fields(ev, env) start = Time.now status, headers, body = (ev, env) do @app.call(env) end add_app_fields(ev, env) add_response_fields(ev, status, headers, body) [status, headers, body] rescue Exception => e if ev ev.add_field('request.error', e.class.name) ev.add_field('request.error_detail', e.) end raise ensure if ev && start finish = Time.now ev.add_field('duration_ms', (finish - start) * 1000) ev.send end end |