Sha256: c3601c4c3dd60f144de3ade391780fa02d83ae3f74593cc3fa25d5d467e2b959

Contents?: true

Size: 1.2 KB

Versions: 6

Compression:

Stored size: 1.2 KB

Contents

module Rails
  module Instrumentation
    module Subscriber
      def self.included(base)
        base.extend ClassMethods
      end

      module ClassMethods
        def subscribe(exclude_events: [])
          @subscriber_mutex = Mutex.new if @subscriber_mutex.nil?

          # clear
          unsubscribe
          @subscribers = []

          @subscriber_mutex.synchronize do
            self::EVENTS.each do |event_name|
              full_name = "#{event_name}.#{self::EVENT_NAMESPACE}"

              next if exclude_events.include? full_name

              @subscribers << Utils.register_subscriber(full_name: full_name,
                                                        event_name: event_name,
                                                        handler_module: self)
            end
          end
        end

        def unsubscribe
          return if @subscribers.nil? || @subscriber_mutex.nil?

          @subscriber_mutex.synchronize do
            @subscribers.each do |subscriber|
              ::ActiveSupport::Notifications.unsubscribe(subscriber)
            end
          end
        end

        def span_tags(tags)
          self::BASE_TAGS.clone.merge(tags)
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
signalfx-rails-instrumentation-0.2.1 lib/rails/instrumentation/subscriber.rb
signalfx-rails-instrumentation-0.2.0 lib/rails/instrumentation/subscriber.rb
rails-instrumentation-0.1.5 lib/rails/instrumentation/subscriber.rb
rails-instrumentation-0.1.4 lib/rails/instrumentation/subscriber.rb
rails-instrumentation-0.1.3 lib/rails/instrumentation/subscriber.rb
rails-instrumentation-0.1.2 lib/rails/instrumentation/subscriber.rb