Sha256: ec8cd25e8db28b9d98173563e375413375b30646521ecbec206cbc12ac95f44b
Contents?: true
Size: 1.73 KB
Versions: 4
Compression:
Stored size: 1.73 KB
Contents
module Skylight module Probes module Middleware class Probe def install ActionDispatch::MiddlewareStack::Middleware.class_eval do alias build_without_sk build def build(*args) sk_instrument_middleware(build_without_sk(*args)) end def sk_instrument_middleware(middleware) return middleware if middleware.is_a?(Skylight::Middleware) # Not sure how this would actually happen return middleware if middleware.respond_to?(:call_without_sk) # On Rails 3, ActionDispatch::Session::CookieStore is frozen, for one return middleware if middleware.frozen? middleware.instance_eval do alias call_without_sk call def call(*args, &block) trace = Skylight::Instrumenter.try(:instance).try(:current_trace) return call_without_sk(*args, &block) unless trace begin name = self.class.name || "Anonymous Middleware" trace.endpoint = name span = Skylight.instrument(title: name, category: "rack.middleware") resp = call_without_sk(*args, &block) Skylight::Middleware.with_after_close(resp) { trace.done(span) } rescue Exception # FIXME: Log this? trace.done(span) raise end end end middleware end end end end end register("ActionDispatch::MiddlewareStack::Middleware", "actionpack/action_dispatch", Middleware::Probe.new) end end
Version data entries
4 entries across 4 versions & 1 rubygems