Sha256: fe18df2a89aa0dd118e0cdab8a6f2ac1247ebe219952153b1538a17635081c64
Contents?: true
Size: 1.52 KB
Versions: 7
Compression:
Stored size: 1.52 KB
Contents
# frozen_string_literal: true # Copyright 2020 OpenTelemetry Authors # # SPDX-License-Identifier: Apache-2.0 require 'opentelemetry' module OpenTelemetry module Instrumentation module Rack # The Instrumentation class contains logic to detect and install the Rack # instrumentation class Instrumentation < OpenTelemetry::Instrumentation::Base install do |config| require_dependencies retain_middleware_names if config[:retain_middleware_names] end present do defined?(::Rack) end private def require_dependencies require_relative 'middlewares/tracer_middleware' end MissingApplicationError = Class.new(StandardError) # intercept all middleware-compatible calls, retain class name def retain_middleware_names next_middleware = config[:application] raise MissingApplicationError unless next_middleware while next_middleware if next_middleware.respond_to?(:call) next_middleware.singleton_class.class_eval do alias_method :__call, :call def call(env) env['RESPONSE_MIDDLEWARE'] = self.class.to_s __call(env) end end end next_middleware = next_middleware.instance_variable_defined?('@app') && next_middleware.instance_variable_get('@app') end end end end end end
Version data entries
7 entries across 7 versions & 1 rubygems