Sha256: c4fb6ae76658ad1bada0dbd89a2e3a5c8c23f9ef6136c3ea7c5743d1d188fa51
Contents?: true
Size: 1.6 KB
Versions: 2
Compression:
Stored size: 1.6 KB
Contents
# frozen_string_literal: true require 'active_support/notifications' require 'elastic_apm/normalizers' module ElasticAPM # @api private class Subscriber include Log def initialize(agent) @agent = agent @config = agent.config @normalizers = Normalizers.build(config) end attr_reader :config def register! unregister! if @subscription @subscription = ActiveSupport::Notifications.subscribe(notifications_regex, self) end def unregister! ActiveSupport::Notifications.unsubscribe @subscription @subscription = nil end # AS::Notifications API Notification = Struct.new(:id, :span) def start(name, id, payload) # debug "AS::Notification#start:#{name}:#{id}" return unless (transaction = @agent.current_transaction) normalized = @normalizers.normalize(transaction, name, payload) span = if normalized == :skip nil else name, type, context = normalized transaction.span(name, type, context: context) end transaction.notifications << Notification.new(id, span) end def finish(_name, id, _payload) # debug "AS::Notification#finish:#{name}:#{id}" return unless (transaction = @agent.current_transaction) while (notification = transaction.notifications.pop) next unless notification.id == id if (span = notification.span) span.done end return end end private def notifications_regex @notifications_regex ||= /(#{@normalizers.keys.join('|')})/ end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
elastic-apm-0.2.0 | lib/elastic_apm/subscriber.rb |
elastic-apm-0.1.0 | lib/elastic_apm/subscriber.rb |