Sha256: 9a66db0110965d09ef4f3fca98a8f2da5a1d8c541e072088247b37c8d9fd9df9

Contents?: true

Size: 1.22 KB

Versions: 8

Compression:

Stored size: 1.22 KB

Contents

require 'sqreen/graft/hook'
require 'sqreen/ecosystem_integration/around_callbacks'

module Sqreen
  class EcosystemIntegration
    module InstrumentationService
      class << self
        # @param [String] module_name
        # @param [String] method in form A::B#c or A::B.c
        # @param [Hash{Symbol=>Proc}] spec
        def instrument(module_name, method, spec)
          hook = Sqreen::Graft::Hook[method].add do
            if spec[:before]
              cb = AroundCallbacks.wrap_instrumentation_hook(module_name, 'pre', spec[:before])
              before(nil, flow: true, &cb)
            end

            if spec[:after]
              cb = AroundCallbacks.wrap_instrumentation_hook(module_name, 'post', spec[:after])
              after(nil, flow: true, &cb)
            end

            if spec[:raised]
              cb = AroundCallbacks.wrap_instrumentation_hook(module_name, 'failing', spec[:raised])
              raised(nil, flow: true, &cb)
            end

            if spec[:ensured]
              cb = AroundCallbacks.wrap_instrumentation_hook(module_name, 'finally', spec[:ensured])
              ensured(nil, flow: true, &cb)
            end
          end
          hook.install
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
sqreen-1.22.0-java lib/sqreen/ecosystem_integration/instrumentation_service.rb
sqreen-1.22.0 lib/sqreen/ecosystem_integration/instrumentation_service.rb
sqreen-1.21.1-java lib/sqreen/ecosystem_integration/instrumentation_service.rb
sqreen-1.21.1 lib/sqreen/ecosystem_integration/instrumentation_service.rb
sqreen-1.21.0-java lib/sqreen/ecosystem_integration/instrumentation_service.rb
sqreen-1.21.0 lib/sqreen/ecosystem_integration/instrumentation_service.rb
sqreen-1.21.0.beta2 lib/sqreen/ecosystem_integration/instrumentation_service.rb
sqreen-1.21.0.beta1 lib/sqreen/ecosystem_integration/instrumentation_service.rb