Sha256: d4a80b480f5f692400bc24d54aeafd616e9aea99767ec3c9a925abeb74d0c3ad

Contents?: true

Size: 1.41 KB

Versions: 3

Compression:

Stored size: 1.41 KB

Contents

module AppMonit
  module Rails
    class Subscriber

      class << self
        def register
          ActiveSupport::Notifications.subscribe /process_action/, self.new
        end
      end

      def call(*args)
        event = ActiveSupport::Notifications::Event.new(*args)

        payload  = event.payload
        endpoint = "#{payload[:controller]}##{payload[:action]}"
        minute   = event.time.to_i - (event.time.to_i % 60)

        if payload[:exception]
          trigger_error(minute, endpoint, event.duration.to_i)
          trigger_error(minute, 'total', event.duration.to_i)
        else
          durations = { total: event.duration.to_i, view: payload[:view_runtime].to_i,
                        db:    payload[:db_runtime].to_i, ext: payload[:ext_runtime].to_i }
          trigger_event(minute, endpoint, durations)
          trigger_event(minute, 'total', durations)
        end
      end

      # @return [AppMonit::Worker]
      def worker
        AppMonit::Rails::Worker.instance
      end

      def trigger_error(minute, endpoint, duration)
        event = AppMonit::Rails::Error.new(minute, endpoint, duration)
        AppMonit::Rails.logger.debug event
        worker.push(event)
      end

      def trigger_event(minute, endpoint, durations)
        event = AppMonit::Rails::Event.new(minute, endpoint, durations)
        AppMonit::Rails.logger.debug event
        worker.push(event)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
app_monit_rails-0.0.4 lib/app_monit/rails/subscriber.rb
app_monit_rails-0.0.3 lib/app_monit/rails/subscriber.rb
app_monit_rails-0.0.1 lib/app_monit/rails/subscriber.rb